Floating Point Precision¶
Currently, libCEED supports two options for CeedScalar
: double and single.
The default is to use double precision.
Users wishing to set CeedScalar
to single precision should edit include/ceed/types.h
and change
#include "ceed-f64.h" // IWYU pragma: export
to include ceed-f32.h
instead, then recompile the library.
Tests can be run using make test FC=
because the Fortran tests do not support single precision at this time.
Language-specific notes¶
C:
CEED_SCALAR_TYPE
will be defined to match one of the values of theCeedScalarType
enum
, and can be used for compile-time checking ofCeedScalar
’s type; see, e.g.,tests/t314-basis.c
.Fortran: There is no definition of
CeedScalar
available in the Fortran header. The user is responsible for ensuring that data used in Fortran code is of the correct type (real*8
orreal*4
) for libCEED’s current configuration.Julia: After compiling the single precision version of libCEED, instruct LibCEED.jl to use this library with the
set_libceed_path!
function and restart the Julia session. LibCEED.jl will configure itself to use the appropriate type forCeedScalar
.Python: Make sure to replace the
ceed-f64.h
inclusion rather than commenting it out, to guarantee that the Python bindings will pick the correct precision. Thescalar_type()
function has been added to theCeed
class for convenience. It returns a string corresponding to a numpy datatype matching that ofCeedScalar
.Rust: The
Scalar
type corresponds toCeedScalar
.
This is work in progress! The ability to use single precision is an initial step in ongoing development of mixed-precision support in libCEED. A current GitHub issue contains discussions related to this development.