/*@@ @file volume_integral.c @date Wed Oct 5 10:18:34 2005 @author Frank Loeffler and Luca Baiotti @desc Computes the ADM mass as a volume integral. @enddesc @@*/ #include #include #include #include #include #include #include #include "SpaceMask.h" #define PI 3.1415926535897932384626433832795028841971693993751058209749445923 void ADMMass_Volume(CCTK_ARGUMENTS); void ADMMass_Volume_Global(CCTK_ARGUMENTS); void ADMMass_Volume(CCTK_ARGUMENTS) { DECLARE_CCTK_ARGUMENTS DECLARE_CCTK_PARAMETERS CCTK_INT i,j,k, ijk, ghost, ti, tj, tk; CCTK_REAL u[3][3], dg[3][3][3]; CCTK_REAL radius; CCTK_INT mask_descriptor = -1, state_descriptor_outside = -1; int avoid_origin_parameter; #include "EinsteinBase/ADMMacros/src/macro/UPPERMET_declare.h" /* grid-function strides */ const CCTK_INT di = 1; const CCTK_INT dj = cctk_lsh[0]; const CCTK_INT dk = cctk_lsh[0]*cctk_lsh[1]; /* deonminators for derivatives */ const CCTK_REAL OneOverTwoDX = 1.0 / (2.0 * CCTK_DELTA_SPACE(0)); const CCTK_REAL OneOverTwoDY = 1.0 / (2.0 * CCTK_DELTA_SPACE(1)); const CCTK_REAL OneOverTwoDZ = 1.0 / (2.0 * CCTK_DELTA_SPACE(2)); if (ADMMass_Excise_Horizons) { mask_descriptor = SpaceMask_GetTypeBits("OutsideMask"); if (mask_descriptor < 0) CCTK_WARN(0, "Thorn OutsideMask not activated, but " "ADMMass_Excise_Horizons requires it."); state_descriptor_outside = SpaceMask_GetStateBits("OutsideMask", "outside"); if (state_descriptor_outside < 0) CCTK_WARN(0, "Error in obtaining OutsideMask state descriptors"); } if (ADMMass_use_surface_distance_as_volume_radius && (ADMMass_volume_radius[*ADMMass_LoopCounter] < 0.0)) radius = ADMMass_surface_distance[*ADMMass_LoopCounter]; else radius = ADMMass_volume_radius[*ADMMass_LoopCounter]; if ((radius <= 0.0)&&(!ADMMass_use_all_volume_as_volume_radius)) { CCTK_WARN(2, "radius < 0 / not set, not calculating " "the volume integral to get the ADM mass."); return; } if (CCTK_IsThornActive("PUGH")) { const void *ghost_ptr = CCTK_ParameterGet("ghost_size","PUGH",NULL); assert( ghost_ptr != NULL ); ghost = *(const int *)ghost_ptr; } else /* carpet */ { const void *ghost_ptr = CCTK_ParameterGet("ghost_size","Carpet",NULL); assert( ghost_ptr != NULL ); ghost = *(const int *)ghost_ptr; } for(i=0; i