aboutsummaryrefslogtreecommitdiff
path: root/src/Faces.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Faces.c')
-rw-r--r--src/Faces.c165
1 files changed, 165 insertions, 0 deletions
diff --git a/src/Faces.c b/src/Faces.c
index c1a668f..844dfc2 100644
--- a/src/Faces.c
+++ b/src/Faces.c
@@ -360,3 +360,168 @@ SymBase_SymmetryRegisterGN (CCTK_POINTER const cctkGH_,
return SymBase_SymmetryRegisterGI
(cctkGH_, sym_handle, which_faces, new_symmetry_zone_width, group_index);
}
+
+
+
+/*@@
+ @routine SymBase_SymmetryRegisterInterpolatorFaces
+ @author Erik Schnetter
+ @date 2004-05-25
+ @desc
+ Register a symmetry interpolator for certain faces
+ @enddesc
+ @var sym_table
+ @vtype CCTK_INT
+ @vdesc Table which describes the grid or grid array
+ @vio in
+ @endvar
+ @var group_dim
+ @vtype CCTK_INT
+ @vdesc Dimension of the grid or grid array
+ @vio in
+ @endvar
+ @var sym_handle
+ @vtype CCTK_INT
+ @vdesc Symmetry handle
+ @vio in
+ @endvar
+ @var symmetry_interpolate
+ @vtype CCTK_FPOINTER
+ @vdesc Routine that applies symmetries to the interpolation points
+ and then calls back
+ (may be NULL)
+ @vio in
+ @endvar
+ @returntype CCTK_INT
+ @returndesc
+ status code
+ 0 for success
+ -1 if sym_table has an illegal value
+ -9 if group_dim has an illegal value
+ -2 if sym_handle has an illegal value
+ -10 symmetry_interpolate is NULL
+ @endreturndesc
+@@*/
+
+CCTK_INT
+SymBase_SymmetryRegisterInterpolatorFaces (CCTK_INT const sym_table,
+ CCTK_INT const group_dim,
+ CCTK_INT const sym_handle,
+ SymmetryInterpolateFPointer const new_symmetry_interpolate)
+{
+ CCTK_INT symmetry_handle[100];
+ CCTK_FPOINTER symmetry_interpolate[100];
+ int face;
+ int ierr;
+
+ /* Check arguments */
+ if (sym_table < 0)
+ {
+ return -1; /* illegal argument */
+ }
+ if (group_dim < 0)
+ {
+ return -9; /* illegal argument */
+ }
+ if (sym_handle < 0 || sym_handle >= SymBase_num_symmetries)
+ {
+ return -2; /* illegal argument */
+ }
+ if (! new_symmetry_interpolate)
+ {
+ return -10;
+ }
+
+ /* Get table entries */
+ if (2 * group_dim > 100)
+ {
+ CCTK_WARN (0, "internal error");
+ }
+ ierr = Util_TableGetIntArray
+ (sym_table, 2 * group_dim, symmetry_handle, "symmetry_handle");
+ if (ierr != 2 * group_dim)
+ {
+ CCTK_WARN (0, "internal error");
+ }
+ ierr = Util_TableGetFPointerArray
+ (sym_table, 2 * group_dim, symmetry_interpolate, "symmetry_interpolate"); if (ierr != 2 * group_dim) {
+ CCTK_WARN (0, "internal error");
+ }
+
+ /* Update table entries */
+ for (face = 0; face < 2 * group_dim; ++face)
+ {
+ if (symmetry_handle[face] == sym_handle)
+ {
+ symmetry_interpolate[face] = (CCTK_FPOINTER)new_symmetry_interpolate;
+ }
+ }
+
+ /* Set table entries */
+ ierr = Util_TableSetFPointerArray
+ (sym_table, 2 * group_dim, symmetry_interpolate, "symmetry_interpolate");
+ if (ierr != 1)
+ {
+ CCTK_WARN (0, "internal error");
+ }
+
+ return 0;
+}
+
+
+
+/*@@
+ @routine SymBase_SymmetryRegisterGridInterpolator
+ @author Erik Schnetter
+ @date 2004-05-25
+ @desc
+ Register a symmetry interpolator
+ for certain faces of the grid hierarchy
+ @enddesc
+ @var cctkGH
+ @vtype cGH *
+ @vdesc The grid hierarchy
+ @vio in
+ @endvar
+ @var sym_handle
+ @vtype CCTK_INT
+ @vdesc Symmetry handle
+ @vio in
+ @endvar
+ @var symmetry_interpolate
+ @vtype CCTK_FPOINTER
+ @vdesc Routine that applies symmetries to the interpolation points
+ and then calls back
+ @vio in
+ @endvar
+ @returntype CCTK_INT
+ @returndesc
+ status code
+ 0 for success
+ Error codes of SymBase_SymmetryRegisterInterpolatorFaces
+ @endreturndesc
+@@*/
+
+CCTK_INT
+SymBase_SymmetryRegisterGridInterpolator (CCTK_POINTER const cctkGH_,
+ CCTK_INT const sym_handle,
+ SymmetryInterpolateFPointer const new_symmetry_interpolate)
+{
+ cGH const *const cctkGH = cctkGH_;
+ struct SymBase const *symdata;
+
+ if (!cctkGH)
+ {
+ CCTK_WARN (0, "internal error");
+ }
+
+ symdata = CCTK_GHExtension (cctkGH, "SymBase");
+ if (!symdata)
+ {
+ CCTK_WARN (0, "internal error");
+ }
+
+ return SymBase_SymmetryRegisterInterpolatorFaces
+ (symdata->sym_table, cctkGH->cctk_dim, sym_handle,
+ new_symmetry_interpolate);
+}