From 50fca33a874c1c5911f03c511bf881d335ddefec Mon Sep 17 00:00:00 2001 From: tradke Date: Mon, 29 Sep 2003 14:28:21 +0000 Subject: Some optimizations: precalculate some spacing terms for 4th order spatial differencing. git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinBase/ADMMacros/trunk@65 b1d164ef-f17a-46e7-89d4-021c7118ef4e --- src/macro/ADM_Derivative.h | 39 +++++++++++++++++++++------------------ src/macro/ADM_Spacing.h | 18 +++++++++++++++--- src/macro/ADM_Spacing_declare.h | 10 +++++++--- 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/macro/ADM_Derivative.h b/src/macro/ADM_Derivative.h index c9b4fb4..8e62310 100644 --- a/src/macro/ADM_Derivative.h +++ b/src/macro/ADM_Derivative.h @@ -28,40 +28,43 @@ + var(i,j,k-1)) #define ADM_DXY_2(var,i,j,k) IDXY*(var(i+1,j+1,k) - var(i+1,j-1,k) \ - - var(i-1,j+1,k) + var(i-1,j-1,k)) + - var(i-1,j+1,k) + var(i-1,j-1,k)) #define ADM_DXZ_2(var,i,j,k) IDXZ*(var(i+1,j,k+1) - var(i+1,j,k-1) \ - - var(i-1,j,k+1) + var(i-1,j,k-1)) + - var(i-1,j,k+1) + var(i-1,j,k-1)) #define ADM_DYZ_2(var,i,j,k) IDYZ*(var(i,j+1,k+1) - var(i,j+1,k-1) \ - - var(i,j-1,k+1) + var(i,j-1,k-1)) + - var(i,j-1,k+1) + var(i,j-1,k-1)) /* * 4th order operators. */ -#define ADM_DX_4(var,i,j,k) (I2DX/6.d0)*(-var(i+2,j,k) + 8.d0*var(i+1,j,k) \ - - 8.d0*var(i-1,j,k) + var(i-2,j,k)) -#define ADM_DY_4(var,i,j,k) (I2DY/6.d0)*(-var(i,j+2,k) + 8.d0*var(i,j+1,k) \ - - 8.d0*var(i,j-1,k) + var(i,j-2,k)) -#define ADM_DZ_4(var,i,j,k) (I2DZ/6.d0)*(-var(i,j,k+2) + 8.d0*var(i,j,k+1) \ - - 8.d0*var(i,j,k-1) + var(i,j,k-2)) +#define ADM_DX_4(var,i,j,k) I12DX*(-var(i+2,j,k) + var(i-2,j,k) \ + + 8.d0*(var(i+1,j,k) - var(i-1,j,k))) +#define ADM_DY_4(var,i,j,k) I12DY*(-var(i,j+2,k) + var(i,j-2,k) \ + + 8.d0*(var(i,j+1,k) - var(i,j-1,k))) +#define ADM_DZ_4(var,i,j,k) I12DZ*(-var(i,j,k+2) + var(i,j,k-2) \ + + 8.d0*(var(i,j,k+1) - var(i,j,k-1))) -#define ADM_DXX_4(var,i,j,k) (IDXX/12.d0)*(-var(i+2,j,k) + 16.d0*var(i+1,j,k)\ - - 30.d0*var(i,j,k) + 16.d0*var(i-1,j,k) - var(i-2,j,k)) -#define ADM_DYY_4(var,i,j,k) (IDYY/12.d0)*(-var(i,j+2,k) + 16.d0*var(i,j+1,k)\ - - 30.d0*var(i,j,k) + 16.d0*var(i,j-1,k) - var(i,j-2,k)) -#define ADM_DZZ_4(var,i,j,k) (IDZZ/12.d0)*(-var(i,j,k+2) + 16.d0*var(i,j,k+1)\ - - 30.d0*var(i,j,k) + 16.d0*var(i,j,k-1) - var(i,j,k-2)) +#define ADM_DXX_4(var,i,j,k) I12DXX*(-var(i+2,j,k) - var(i-2,j,k) \ + + 16.d0*(var(i+1,j,k) + var(i-1,j,k)) \ + - 30.d0*var(i,j,k)) +#define ADM_DYY_4(var,i,j,k) I12DYY*(-var(i,j+2,k) - var(i,j-2,k) \ + + 16.d0*(var(i,j+1,k) + var(i,j-1,k)) \ + - 30.d0*var(i,j,k)) +#define ADM_DZZ_4(var,i,j,k) I12DZZ*(-var(i,j,k+2) - var(i,j,k-2) \ + + 16.d0*(var(i,j,k+1) + var(i,j,k-1)) \ + - 30.d0*var(i,j,k)) -#define ADM_DXY_4(var,i,j,k) (IDXY/36.d0)* \ +#define ADM_DXY_4(var,i,j,k) I36DXY* \ (var(i+2,j+2,k) - var(i+2,j-2,k) - var(i-2,j+2,k) + var(i-2,j-2,k) \ + 8.d0*(-var(i+2,j+1,k) + var(i+2,j-1,k) - var(i+1,j+2,k) + var(i+1,j-2,k) \ + var(i-2,j+1,k) - var(i-2,j-1,k) - var(i-1,j-2,k) + var(i-1,j+2,k)) \ + 64.d0*(var(i+1,j+1,k) - var(i+1,j-1,k) - var(i-1,j+1,k) + var(i-1,j-1,k))) -#define ADM_DXZ_4(var,i,j,k) (IDXZ/36.d0)* \ +#define ADM_DXZ_4(var,i,j,k) I36DXZ* \ (var(i+2,j,k+2) - var(i+2,j,k-2) - var(i-2,j,k+2) + var(i-2,j,k-2) \ + 8.d0*(-var(i+2,j,k+1) + var(i+2,j,k-1) - var(i+1,j,k+2) + var(i+1,j,k-2) \ + var(i-2,j,k+1) - var(i-2,j,k-1) - var(i-1,j,k-2) + var(i-1,j,k+2)) \ + 64.d0*(var(i+1,j,k+1) - var(i+1,j,k-1) - var(i-1,j,k+1) + var(i-1,j,k-1))) -#define ADM_DYZ_4(var,i,j,k) (IDYZ/36.d0)* \ +#define ADM_DYZ_4(var,i,j,k) I36DYZ* \ (var(i,j+2,k+2) - var(i,j+2,k-2) - var(i,j-2,k+2) + var(i,j-2,k-2) \ + 8.d0*(-var(i,j+2,k+1) + var(i,j+2,k-1) - var(i,j+1,k+2) + var(i,j+1,k-2) \ + var(i,j-2,k+1) - var(i,j-2,k-1) - var(i,j-1,k-2) + var(i,j-1,k+2)) \ diff --git a/src/macro/ADM_Spacing.h b/src/macro/ADM_Spacing.h index c1845fe..58087c8 100644 --- a/src/macro/ADM_Spacing.h +++ b/src/macro/ADM_Spacing.h @@ -19,16 +19,28 @@ idy=1.d0/dy idz=1.d0/dz - i2dx=0.5d0*idx - i2dy=0.5d0*idy - i2dz=0.5d0*idz + i2dx=idx/2.d0 + i2dy=idy/2.d0 + i2dz=idz/2.d0 + + i12dx=idx/12.d0 + i12dy=idy/12.d0 + i12dz=idz/12.d0 idxx=idx**2 idyy=idy**2 idzz=idz**2 + i12dxx=idxx/12.d0 + i12dyy=idyy/12.d0 + i12dzz=idzz/12.d0 + idxy=i2dx*i2dy idxz=i2dx*i2dz idyz=i2dy*i2dz + i36dxy=idxy/36.d0 + i36dxz=idxz/36.d0 + i36dyz=idyz/36.d0 + #endif diff --git a/src/macro/ADM_Spacing_declare.h b/src/macro/ADM_Spacing_declare.h index 21a1ee6..b8246d1 100644 --- a/src/macro/ADM_Spacing_declare.h +++ b/src/macro/ADM_Spacing_declare.h @@ -1,13 +1,17 @@ /*@@ - @header ADM_Spacing.h + @header ADM_Spacing_delcare.h @date June 2002 @author Denis Pollney @desc - Calculate various spacing dependent scalars. + Declare various spacing dependent scalars. @enddesc @@*/ CCTK_REAL :: dt, dx, dy, dz - CCTK_REAL :: idx, idy, idz, i2dx, i2dy, i2dz + CCTK_REAL :: idx, idy, idz + CCTK_REAL :: i2dx, i2dy, i2dz + CCTK_REAL :: i12dx, i12dy, i12dz CCTK_REAL :: idxx, idxy, idxz, idyy, idyz, idzz + CCTK_REAL :: i12dxx, i12dyy, i12dzz + CCTK_REAL :: i36dxy, i36dxz, i36dyz -- cgit v1.2.3