diff options
Diffstat (limited to 'src/register.c')
-rw-r--r-- | src/register.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/register.c b/src/register.c new file mode 100644 index 0000000..2ae4b58 --- /dev/null +++ b/src/register.c @@ -0,0 +1,66 @@ +#include "cctk.h" +#include "cctk_Arguments.h" +#include "cctk_Parameters.h" + +#include "reflection.h" + + + +static const char rcsid[] = "$Header$"; +CCTK_FILEVERSION(AEIDevelopment_ReflectionSymmetry_register_c); + + + +void +ReflectionSymmetry_Register (CCTK_ARGUMENTS) +{ + DECLARE_CCTK_ARGUMENTS; + DECLARE_CCTK_PARAMETERS; + + int do_reflection[6]; + CCTK_INT handle; + CCTK_INT faces[6]; + CCTK_INT width[6]; + int f; + CCTK_INT ierr; + + do_reflection[0] = reflection_x; + do_reflection[1] = reflection_upper_x; + do_reflection[2] = reflection_y; + do_reflection[3] = reflection_upper_y; + do_reflection[4] = reflection_z; + do_reflection[5] = reflection_upper_z; + + for (f=0; f<6; ++f) + { + if (do_reflection[f]) + { + faces[f] = 1; + width[f] = cctk_nghostzones[f/2]; + } + else + { + faces[f] = 0; + width[f] = 0; + } + } + + handle = SymmetryRegister ("reflection_symmetry"); + if (handle < 0) + { + CCTK_WARN (0, "Could not register symmetry boundary condition"); + } + + ierr = SymmetryRegisterGrid (cctkGH, handle, faces, width); + if (ierr < 0) + { + CCTK_WARN (0, "Could not register the symmetry boundaries -- probably some other thorn has already registered the same boundary faces for a different symmetry"); + } + + ierr = SymmetryRegisterGridInterpolator + (cctkGH, handle, ReflectionSymmetry_Interpolate); + if (ierr < 0) + { + CCTK_WARN (0, "Could not register the symmetry interpolator"); + } +} |