diff options
-rw-r--r-- | schedule.ccl | 21 | ||||
-rw-r--r-- | src/MaskInit.c | 36 | ||||
-rw-r--r-- | src/MaskUtils.c | 26 | ||||
-rw-r--r-- | src/SpaceMask.h | 6 |
4 files changed, 68 insertions, 21 deletions
diff --git a/schedule.ccl b/schedule.ccl index 976857a..2baf8a4 100644 --- a/schedule.ccl +++ b/schedule.ccl @@ -5,18 +5,19 @@ if (use_mask) { STORAGE: space_mask_group - schedule MaskZero at CCTK_INITIAL + schedule MaskZero at CCTK_BASEGRID { LANG: C } "Initialise mask to zero" - schedule MaskSym at CCTK_BASEGRID + schedule MaskSym at CCTK_WRAGH { LANG: C + OPTIONS: global } "Set grid symmetries for mask" #Initialize the mask again for mesh refinement - schedule MaskZero at POSTREGRID + schedule MaskZero at CCTK_POSTREGRID { LANG: C } "Initialise mask to zero" @@ -27,18 +28,24 @@ if (use_mask) # scheme. # STORAGE: mask - schedule MaskSym_emask at CCTK_BASEGRID + schedule MaskSym_emask at CCTK_WRAGH { LANG: C + OPTIONS: global } "Set grid symmetries for emask (compatibility mode)" - schedule MaskOne at CCTK_INITIAL + schedule MaskOne at CCTK_BASEGRID { LANG: C - } "Set mask to one" + } "Set old style mask to one" + + schedule CheckMask at CCTK_POSTSTEP + { + LANG: C + } "Ensure that all mask values are legal" #Initialize the mask again for mesh refinement - schedule MaskOne at POSTREGRID + schedule MaskOne at CCTK_POSTREGRID { LANG: C } "Set mask to one" diff --git a/src/MaskInit.c b/src/MaskInit.c index 2066e2b..b4f8663 100644 --- a/src/MaskInit.c +++ b/src/MaskInit.c @@ -8,6 +8,8 @@ @version $Header$ @@*/ +#include <math.h> +#include <stdio.h> #include <stdlib.h> #include "cctk.h" @@ -125,7 +127,7 @@ void MaskSym_emask(CCTK_ARGUMENTS) void MaskOne(CCTK_ARGUMENTS) { int i; - DECLARE_CCTK_ARGUMENTS + DECLARE_CCTK_ARGUMENTS; for(i = 0; i < cctk_lsh[0]*cctk_lsh[1]*cctk_lsh[2]; i++) { @@ -136,6 +138,38 @@ void MaskOne(CCTK_ARGUMENTS) } /*@@ + @routine CheckMask + @date + @author Erik Schnetter + @desc + Ensure that all mask values are legal. + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ +void CheckMask(CCTK_ARGUMENTS) +{ + DECLARE_CCTK_ARGUMENTS + int i; + + for(i = 0; i < cctk_lsh[0]*cctk_lsh[1]*cctk_lsh[2]; i++) + { + if ( fabs(emask[i] - 1.0) > 1.0e-12 + && fabs(emask[i] - 0.5) > 1.0e-12 + && fabs(emask[i] - 0.0) > 1.0e-12) + { + CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "Illegal mask value %g detected at grid point %d", + (double)emask[i], i); + } + } +} + +/*@@ @routine MaskZero @date @author Denis Pollney diff --git a/src/MaskUtils.c b/src/MaskUtils.c index 77350ac..2e9bf8e 100644 --- a/src/MaskUtils.c +++ b/src/MaskUtils.c @@ -415,10 +415,13 @@ SpaceMask_GetTypeBits(const char* type_name) { int i; - for (i=0; i<spacemask_registry->ntypes; ++i) + if (spacemask_registry != NULL) { - if (!strcmp(spacemask_registry->type_list[i]->name, type_name)) - return spacemask_registry->type_list[i]->bitmask; + for (i=0; i<spacemask_registry->ntypes; ++i) + { + if (!strcmp(spacemask_registry->type_list[i]->name, type_name)) + return spacemask_registry->type_list[i]->bitmask; + } } CCTK_VInfo (CCTK_THORNSTRING, "Type \"%s\" has not been registered.\n", @@ -443,17 +446,20 @@ SpaceMask_GetStateBits(const char* type_name, const char* state_name) SpaceMask_Type* type; int i, j; - for (i=0; i<spacemask_registry->ntypes; ++i) + if (spacemask_registry != NULL) { - if (!strcmp(spacemask_registry->type_list[i]->name, type_name)) + for (i=0; i<spacemask_registry->ntypes; ++i) { - type = spacemask_registry->type_list[i]; - for (j=0; j<type->nstates; ++j) + if (!strcmp(spacemask_registry->type_list[i]->name, type_name)) { - if (!strcmp(type->state_list[j]->name, state_name)) - return type->state_list[j]->bitmask; + type = spacemask_registry->type_list[i]; + for (j=0; j<type->nstates; ++j) + { + if (!strcmp(type->state_list[j]->name, state_name)) + return type->state_list[j]->bitmask; + } } - } + } } CCTK_VInfo (CCTK_THORNSTRING, diff --git a/src/SpaceMask.h b/src/SpaceMask.h index be33436..2714725 100644 --- a/src/SpaceMask.h +++ b/src/SpaceMask.h @@ -86,13 +86,13 @@ extern SpaceMask_Registry* spacemask_Registry; @@*/ #ifdef FCODE -#define SpaceMask_SetStateBitsF90(mask,i,j,k,type_bits,state_bits) \ - mask((i),(j),(k))=ior(iand(mask((i),(j),(k)),not((type_bits))),(state_bits)) +#define SpaceMask_SetStateBitsF90(mask, i,j,k, type_bits, state_bits) \ + mask(i,j,k) = ior(iand(mask(i,j,k), not(type_bits)), state_bits) #endif #ifdef CCODE #define SpaceMask_SetStateBits(mask, ijk, type_bits, state_bits) \ - (mask)[ijk] = (((mask)[ijk] & ~(type_bits)) | (state_bits)) + ((mask)[ijk] = (((mask)[ijk] & ~(type_bits)) | (state_bits))) #endif /*@@ |