#include #include #include #include #include #include void MaskBase_TestMask (CCTK_ARGUMENTS) { DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; if (verbose) { CCTK_INFO ("Testing weight"); } int const sum = CCTK_ReductionHandle ("sum"); assert (sum >= 0); int const proc = 0; int const weight_var = CCTK_VarIndex ("CarpetReduce::weight"); int const one_var = CCTK_VarIndex ("CarpetReduce::one"); assert (weight_var >= 0); assert (one_var >= 0); CCTK_REAL sum_weight, all_excised_cells; { int const ierr = CCTK_Reduce (cctkGH, proc, sum, 1, CCTK_VARIABLE_REAL, &sum_weight, 1, one_var); assert (ierr >= 0); } { int const ierr = CCTK_ReduceLocalScalar (cctkGH, proc, sum, excised_cells, &all_excised_cells, CCTK_VARIABLE_REAL); assert (ierr >= 0); *excised_cells = all_excised_cells; } if (proc == -1 || CCTK_MyProc(cctkGH) == proc) { if (verbose) { CCTK_VInfo (CCTK_THORNSTRING, "Reduction weight sum: %.17g", (double)sum_weight); } CCTK_REAL domain_volume = 0.0; int maps = 1; if (CCTK_IsFunctionAliased ("MultiPatch_GetMaps")) { maps = MultiPatch_GetMaps (cctkGH); } for (int m=0; m 1.0e-12 * (sum_weight + domain_volume); if (there_is_a_problem) { if (!verbose) { CCTK_VInfo (CCTK_THORNSTRING, "Simulation domain volume: %.17g", (double)domain_volume); CCTK_VInfo (CCTK_THORNSTRING, "Additional excised volume: %.17g", (double)*excised_cells); CCTK_VInfo (CCTK_THORNSTRING, "Reduction weight sum: %.17g", (double)sum_weight); } CCTK_VWarn (CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING, "Simulation domain volume and reduction weight sum differ"); } } CCTK_DisableGroupStorage (cctkGH, "CarpetReduce::iweight"); CCTK_DisableGroupStorage (cctkGH, "CarpetReduce::one"); }