diff options
Diffstat (limited to 'src/Statistics.c')
-rw-r--r-- | src/Statistics.c | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/src/Statistics.c b/src/Statistics.c new file mode 100644 index 0000000..e31cac6 --- /dev/null +++ b/src/Statistics.c @@ -0,0 +1,134 @@ +/*@@ + @file Statistics.c + @author Erik Schnetter + @date 2004-05-25 + @desc + Provide information about the registered symmetry conditions + @version $Header$ + @enddesc +@@*/ + +#include <stdlib.h> + +#include "cctk.h" +#include "cctk_Parameters.h" + +#include "util_Table.h" + +#include "SymBase.h" + + + +/* the rcs ID and its dummy function to use it */ +static const char *const rcsid = "$Header$"; +CCTK_FILEVERSION (CactusBase_SymBase_Statistics_c); + + + +/*@@ + @routine SymBase_Statistics + @author Erik Schnetter + @date 2004-05-25 + @desc + If verbose, print the symmetry boundary conditions for each + face. + Warn if symmetries do not have interpolation operators + associated with them. + @enddesc +@@*/ + +void +SymBase_Statistics (CCTK_ARGUMENTS) +{ + DECLARE_CCTK_ARGUMENTS; + DECLARE_CCTK_PARAMETERS; + + CCTK_INT sym_table; + CCTK_INT symmetry_handle[100]; + CCTK_FPOINTER symmetry_interpolate[100]; + char const * symmetry_name; + int face; + int ierr; + + + + /* Get table */ + sym_table = SymmetryTableHandleForGrid (cctkGH); + if (sym_table < 0) CCTK_WARN (0, "internal error"); + + /* Get table entries */ + if (2 * cctkGH->cctk_dim > 100) + { + CCTK_WARN (0, "internal error"); + } + ierr = Util_TableGetIntArray + (sym_table, 2 * cctkGH->cctk_dim, symmetry_handle, "symmetry_handle"); + if (ierr != 2 * cctkGH->cctk_dim) + { + CCTK_WARN (0, "internal error"); + } + ierr = Util_TableGetFPointerArray + (sym_table, 2 * cctkGH->cctk_dim, + symmetry_interpolate, "symmetry_interpolate"); + if (ierr != 2 * cctkGH->cctk_dim) + { + CCTK_WARN (0, "internal error"); + } + + + + /* Print information about the registered symmetry faces, if desired */ + + if (verbose) + { + + /* Loop over all faces */ + for (face=0; face<2*cctkGH->cctk_dim; ++face) { + if (symmetry_handle[face] >= 0) { + symmetry_name = SymBase_SymmetryNameOfHandle (symmetry_handle[face]); + if (! symmetry_name) + { + CCTK_WARN (0, "internal error"); + } + if (face >= 6) + { + CCTK_WARN (0, "only 3 dimensions are supported so far"); + } + CCTK_VInfo (CCTK_THORNSTRING, + "Symmetry on %s %c-face: %s", + face % 2 == 0 ? "lower" : "upper", + "xyz"[face/2], + symmetry_name); + } + } + + } + + + + /* Warn about symmetries without interpolators */ + + /* Loop over all registered symmetries */ + for (face=0; face<2*cctkGH->cctk_dim; ++face) { + if (symmetry_handle[face] >= 0) { + if (symmetry_interpolate[face] == NULL) + { + symmetry_name = SymBase_SymmetryNameOfHandle (symmetry_handle[face]); + if (! symmetry_name) + { + CCTK_WARN (0, "internal error"); + } + if (face >= 6) + { + CCTK_WARN (0, "only 3 dimensions are supported so far"); + } + CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "The symmetry %s on the %s %c-face has not registered a symmetry interpolator", + symmetry_name, + face % 2 == 0 ? "lower" : "upper", + "xyz"[face/2]); + } + } + } + +} |