Erik Schnetter schnetter at gmail.com
Tue Jan 25 13:02:07 CST 2022

On Tue, Jan 25, 2022 at 12:22 PM Roland Haas <rhaas at illinois.edu> wrote:
> Hello David,
> > That makes sense.  It will take me a little time to change the source
> > code but I can try it out.  I think this is something that should be
> > included in future versions of Cactus so extra code modifications
> > aren’t needed.
> Agreed. If you add such code  and provide a pull request then I, for my
> part, would be in favour of including it, even if only for the
> VECTORISE=no case.
> Note that just because the ET compiles does not guarantee that all
> places in Cactus / Carpet are actually save for the case where
> CCTK_REAL is "better" than a "double" (they should work fine for
> CCTK_REAL == float since that has been used in the past). You are
> mostly in uncharted areas I would say (though others may have used such
> a setup in the past, I just do not myself recall having seen this being
> done).


To actually use CCTK_REAL16, a lot of details need to be sorted out.

In many places, people use constants such as "1.0/3.0". With
CCTK_REAL4, this will automatically switch to double precision (and
run much slower e.g. on GPUs). With CCTK_REAL16, this will lose a lot
of precision. You will need to go through the code and manually
replace all such terms with e.g. "1 / CCTK_REAL(3)". You will also
need to replace M_PI by e.g. "acos(-CCTK_REAL(1))" etc. In C++ and
Fortran, calls to "log" or "exp" will automatically do the right
thing; in C they won't (use <tgmath.h>; see e.g.

Having done that, you will also need to update calls to printf or
CCTK_VINFO to ensure that all its arguments are converted to double,
or update the format specifiers (see e.g.
<https://en.cppreference.com/w/cpp/io/c/fprintf>). Finally, the HDF5
output most likely doesn't support CCTK_REAL16, and neither will most
visualization tools.


Erik Schnetter <schnetter at gmail.com>

More information about the Users mailing list