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_TYPEwill be defined to match one of the values of theCeedScalarTypeenum, and can be used for compile-time checking ofCeedScalar’s type; see, e.g.,tests/t314-basis.c.Fortran: There is no definition of
CeedScalaravailable in the Fortran header. The user is responsible for ensuring that data used in Fortran code is of the correct type (real*8orreal*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.hinclusion rather than commenting it out, to guarantee that the Python bindings will pick the correct precision. Thescalar_type()function has been added to theCeedclass for convenience. It returns a string corresponding to a numpy datatype matching that ofCeedScalar.Rust: The
Scalartype 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.