diff options
Diffstat (limited to 'src/surface_integral.c')
-rw-r--r-- | src/surface_integral.c | 72 |
1 files changed, 37 insertions, 35 deletions
diff --git a/src/surface_integral.c b/src/surface_integral.c index fad504b..b8a3998 100644 --- a/src/surface_integral.c +++ b/src/surface_integral.c @@ -43,9 +43,9 @@ void ADMMass_Surface(CCTK_ARGUMENTS) DECLARE_CCTK_ARGUMENTS DECLARE_CCTK_PARAMETERS - CCTK_INT i,j,k, ijk, ierr, ghost; + CCTK_INT i,j,k, ijk, ierr, ghost, ti, tj, tk, tl; CCTK_INT x_min_i, x_max_i, y_min_j, y_max_j, z_min_k, z_max_k; - CCTK_REAL detg, idetg, oneDX, oneDY, oneDZ, twoDX, twoDY, twoDZ, ds[3]; + CCTK_REAL detg, idetg, ds[3]; CCTK_REAL u[3][3], dg[3][3][3]; CCTK_REAL physical_min[3]; @@ -58,18 +58,22 @@ void ADMMass_Surface(CCTK_ARGUMENTS) char coordinate_parameter_type[9]; +#include "CactusEinstein/ADMMacros/src/macro/UPPERMET_declare.h" + /* grid-function strides for ADMMacros */ 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 */ - twoDX = 2.0 * CCTK_DELTA_SPACE(0); - twoDY = 2.0 * CCTK_DELTA_SPACE(1); - twoDZ = 2.0 * CCTK_DELTA_SPACE(2); - oneDX = CCTK_DELTA_SPACE(0); - oneDY = CCTK_DELTA_SPACE(1); - oneDZ = CCTK_DELTA_SPACE(2); + 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)); + + const CCTK_REAL oneDX = CCTK_DELTA_SPACE(0); + const CCTK_REAL oneDY = CCTK_DELTA_SPACE(1); + const CCTK_REAL oneDZ = CCTK_DELTA_SPACE(2); + x_min_i = -INT_MAX; x_max_i = INT_MAX; @@ -156,8 +160,6 @@ void ADMMass_Surface(CCTK_ARGUMENTS) if ( (z[0] < *ADMMass_box_z_max) && (*ADMMass_box_z_max < z[ijk]) ) z_max_k = find_closest(cctkGH, cctk_lsh, cctk_delta_space, ghost, z, *ADMMass_box_z_max, 2); -#include "CactusEinstein/ADMMacros/src/macro/UPPERMET_declare.h" - for(i=ghost; i<cctk_lsh[0]-ghost; i++) for(j=ghost; j<cctk_lsh[1]-ghost; j++) for(k=ghost; k<cctk_lsh[2]-ghost; k++) @@ -216,29 +218,29 @@ void ADMMass_Surface(CCTK_ARGUMENTS) u[2][1] = UPPERMET_UYZ; u[2][2] = UPPERMET_UZZ; - dg[0][0][0] = ( gxx[di+ijk] - gxx[-di+ijk] ) / twoDX; - dg[0][0][1] = ( gxx[dj+ijk] - gxx[-dj+ijk] ) / twoDY; - dg[0][0][2] = ( gxx[dk+ijk] - gxx[-dk+ijk] ) / twoDZ; + dg[0][0][0] = ( gxx[di+ijk] - gxx[-di+ijk] ) * OneOverTwoDX; + dg[0][0][1] = ( gxx[dj+ijk] - gxx[-dj+ijk] ) * OneOverTwoDY; + dg[0][0][2] = ( gxx[dk+ijk] - gxx[-dk+ijk] ) * OneOverTwoDZ; - dg[0][1][0] = ( gxy[di+ijk] - gxy[-di+ijk] ) / twoDX; - dg[0][1][1] = ( gxy[dj+ijk] - gxy[-dj+ijk] ) / twoDY; - dg[0][1][2] = ( gxy[dk+ijk] - gxy[-dk+ijk] ) / twoDZ; + dg[0][1][0] = ( gxy[di+ijk] - gxy[-di+ijk] ) * OneOverTwoDX; + dg[0][1][1] = ( gxy[dj+ijk] - gxy[-dj+ijk] ) * OneOverTwoDY; + dg[0][1][2] = ( gxy[dk+ijk] - gxy[-dk+ijk] ) * OneOverTwoDZ; - dg[0][2][0] = ( gxz[di+ijk] - gxz[-di+ijk] ) / twoDX; - dg[0][2][1] = ( gxz[dj+ijk] - gxz[-dj+ijk] ) / twoDY; - dg[0][2][2] = ( gxz[dk+ijk] - gxz[-dk+ijk] ) / twoDZ; + dg[0][2][0] = ( gxz[di+ijk] - gxz[-di+ijk] ) * OneOverTwoDX; + dg[0][2][1] = ( gxz[dj+ijk] - gxz[-dj+ijk] ) * OneOverTwoDY; + dg[0][2][2] = ( gxz[dk+ijk] - gxz[-dk+ijk] ) * OneOverTwoDZ; dg[1][0][0] = dg[0][1][0]; dg[1][0][1] = dg[0][1][1]; dg[1][0][2] = dg[0][1][2]; - dg[1][1][0] = ( gyy[di+ijk] - gyy[-di+ijk] ) / twoDX; - dg[1][1][1] = ( gyy[dj+ijk] - gyy[-dj+ijk] ) / twoDY; - dg[1][1][2] = ( gyy[dk+ijk] - gyy[-dk+ijk] ) / twoDZ; + dg[1][1][0] = ( gyy[di+ijk] - gyy[-di+ijk] ) * OneOverTwoDX; + dg[1][1][1] = ( gyy[dj+ijk] - gyy[-dj+ijk] ) * OneOverTwoDY; + dg[1][1][2] = ( gyy[dk+ijk] - gyy[-dk+ijk] ) * OneOverTwoDZ; - dg[1][2][0] = ( gyz[di+ijk] - gyz[-di+ijk] ) / twoDX; - dg[1][2][1] = ( gyz[dj+ijk] - gyz[-dj+ijk] ) / twoDY; - dg[1][2][2] = ( gyz[dk+ijk] - gyz[-dk+ijk] ) / twoDZ; + dg[1][2][0] = ( gyz[di+ijk] - gyz[-di+ijk] ) * OneOverTwoDX; + dg[1][2][1] = ( gyz[dj+ijk] - gyz[-dj+ijk] ) * OneOverTwoDY; + dg[1][2][2] = ( gyz[dk+ijk] - gyz[-dk+ijk] ) * OneOverTwoDZ; dg[2][0][0] = dg[0][2][0]; dg[2][0][1] = dg[0][2][1]; @@ -248,14 +250,14 @@ void ADMMass_Surface(CCTK_ARGUMENTS) dg[2][1][1] = dg[1][2][1]; dg[2][1][2] = dg[1][2][2]; - dg[2][2][0] = ( gzz[di+ijk] - gzz[-di+ijk] ) / twoDX; - dg[2][2][1] = ( gzz[dj+ijk] - gzz[-dj+ijk] ) / twoDY; - dg[2][2][2] = ( gzz[dk+ijk] - gzz[-dk+ijk] ) / twoDZ; - - for (int ti = 0; ti < 3; ti++) - for (int tj = 0; tj < 3; tj++) - for (int tk = 0; tk < 3; tk++) - for (int tl = 0; tl < 3; tl++) + dg[2][2][0] = ( gzz[di+ijk] - gzz[-di+ijk] ) * OneOverTwoDX; + dg[2][2][1] = ( gzz[dj+ijk] - gzz[-dj+ijk] ) * OneOverTwoDY; + dg[2][2][2] = ( gzz[dk+ijk] - gzz[-dk+ijk] ) * OneOverTwoDZ; + + for (ti = 0; ti < 3; ti++) + for (tj = 0; tj < 3; tj++) + for (tk = 0; tk < 3; tk++) + for (tl = 0; tl < 3; tl++) { ADMMass_SurfaceMass_GF[ijk] += u[ti][tj] * u[tk][tl] * ( dg[ti][tk][tj] - dg[ti][tj][tk] ) * ds[tk]; @@ -288,7 +290,7 @@ void ADMMass_Surface_Global(CCTK_ARGUMENTS) ADMMass_SurfaceMass[*ADMMass_LoopCounter] /= 16.0*PI; CCTK_VInfo(CCTK_THORNSTRING, - "detector %d: ADM mass %g, surface (cube): xmin %g, xmax %g, ymin %g, ymax %g, zmin %g, zmax %g\n", + "detector %d: ADM mass %g, surface (cube): xmin %g, xmax %g, ymin %g, ymax %g, zmin %g, zmax %g", *ADMMass_LoopCounter, ADMMass_SurfaceMass[*ADMMass_LoopCounter], *ADMMass_box_x_min,*ADMMass_box_x_max, @@ -345,7 +347,7 @@ void ADMMass_Surface_Lapse_Global(CCTK_ARGUMENTS) ADMMass_SurfaceMass_Lapse[*ADMMass_LoopCounter] /= 16.0*PI; CCTK_VInfo(CCTK_THORNSTRING, - "detector %d: ADM mass with lapse %g, surface (cube): xmin %g, xmax %g, ymin %g, ymax %g, zmin %g, zmax %g\n", + "detector %d: ADM mass with lapse %g, surface (cube): xmin %g, xmax %g, ymin %g, ymax %g, zmin %g, zmax %g", *ADMMass_LoopCounter, ADMMass_SurfaceMass_Lapse[*ADMMass_LoopCounter], *ADMMass_box_x_min,*ADMMass_box_x_max, |