/* File produced by Kranc */ #define KRANC_C #include #include #include #include #include #include "cctk.h" #include "cctk_Arguments.h" #include "cctk_Parameters.h" #include "GenericFD.h" #include "Differencing.h" #include "cctk_Loop.h" #include "loopcontrol.h" #include "vectors.h" /* Define macros used in calculations */ #define INITVALUE (42) #define ScalarINV(x) ((CCTK_REAL)1.0 / (x)) #define ScalarSQR(x) ((x) * (x)) #define ScalarCUB(x) ((x) * ScalarSQR(x)) #define ScalarQAD(x) (ScalarSQR(ScalarSQR(x))) #define INV(x) (kdiv(ToReal(1.0),x)) #define SQR(x) (kmul(x,x)) #define CUB(x) (kmul(x,SQR(x))) #define QAD(x) (SQR(SQR(x))) static void WT_Standing_Body(const cGH* restrict const cctkGH, const int dir, const int face, const CCTK_REAL normal[3], const CCTK_REAL tangentA[3], const CCTK_REAL tangentB[3], const int imin[3], const int imax[3], const int n_subblock_gfs, CCTK_REAL* restrict const subblock_gfs[]) { DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; /* Include user-supplied include files */ /* Initialise finite differencing variables */ const ptrdiff_t di CCTK_ATTRIBUTE_UNUSED = 1; const ptrdiff_t dj CCTK_ATTRIBUTE_UNUSED = CCTK_GFINDEX3D(cctkGH,0,1,0) - CCTK_GFINDEX3D(cctkGH,0,0,0); const ptrdiff_t dk CCTK_ATTRIBUTE_UNUSED = CCTK_GFINDEX3D(cctkGH,0,0,1) - CCTK_GFINDEX3D(cctkGH,0,0,0); const ptrdiff_t cdi CCTK_ATTRIBUTE_UNUSED = sizeof(CCTK_REAL) * di; const ptrdiff_t cdj CCTK_ATTRIBUTE_UNUSED = sizeof(CCTK_REAL) * dj; const ptrdiff_t cdk CCTK_ATTRIBUTE_UNUSED = sizeof(CCTK_REAL) * dk; const CCTK_REAL_VEC dx CCTK_ATTRIBUTE_UNUSED = ToReal(CCTK_DELTA_SPACE(0)); const CCTK_REAL_VEC dy CCTK_ATTRIBUTE_UNUSED = ToReal(CCTK_DELTA_SPACE(1)); const CCTK_REAL_VEC dz CCTK_ATTRIBUTE_UNUSED = ToReal(CCTK_DELTA_SPACE(2)); const CCTK_REAL_VEC dt CCTK_ATTRIBUTE_UNUSED = ToReal(CCTK_DELTA_TIME); const CCTK_REAL_VEC t CCTK_ATTRIBUTE_UNUSED = ToReal(cctk_time); const CCTK_REAL_VEC dxi CCTK_ATTRIBUTE_UNUSED = INV(dx); const CCTK_REAL_VEC dyi CCTK_ATTRIBUTE_UNUSED = INV(dy); const CCTK_REAL_VEC dzi CCTK_ATTRIBUTE_UNUSED = INV(dz); const CCTK_REAL_VEC khalf CCTK_ATTRIBUTE_UNUSED = ToReal(0.5); const CCTK_REAL_VEC kthird CCTK_ATTRIBUTE_UNUSED = ToReal(0.333333333333333333333333333333); const CCTK_REAL_VEC ktwothird CCTK_ATTRIBUTE_UNUSED = ToReal(0.666666666666666666666666666667); const CCTK_REAL_VEC kfourthird CCTK_ATTRIBUTE_UNUSED = ToReal(1.33333333333333333333333333333); const CCTK_REAL_VEC hdxi CCTK_ATTRIBUTE_UNUSED = kmul(dxi,ToReal(0.5)); const CCTK_REAL_VEC hdyi CCTK_ATTRIBUTE_UNUSED = kmul(dyi,ToReal(0.5)); const CCTK_REAL_VEC hdzi CCTK_ATTRIBUTE_UNUSED = kmul(dzi,ToReal(0.5)); /* Initialize predefined quantities */ const CCTK_REAL_VEC p1o12dx CCTK_ATTRIBUTE_UNUSED = kdiv(ToReal(0.0833333333333333333333333333333),dx); const CCTK_REAL_VEC p1o12dy CCTK_ATTRIBUTE_UNUSED = kdiv(ToReal(0.0833333333333333333333333333333),dy); const CCTK_REAL_VEC p1o12dz CCTK_ATTRIBUTE_UNUSED = kdiv(ToReal(0.0833333333333333333333333333333),dz); const CCTK_REAL_VEC p1o144dxdy CCTK_ATTRIBUTE_UNUSED = kdiv(ToReal(0.00694444444444444444444444444444),kmul(dy,dx)); const CCTK_REAL_VEC p1o144dxdz CCTK_ATTRIBUTE_UNUSED = kdiv(ToReal(0.00694444444444444444444444444444),kmul(dz,dx)); const CCTK_REAL_VEC p1o144dydz CCTK_ATTRIBUTE_UNUSED = kdiv(ToReal(0.00694444444444444444444444444444),kmul(dz,dy)); const CCTK_REAL_VEC pm1o12dx2 CCTK_ATTRIBUTE_UNUSED = kdiv(ToReal(-0.0833333333333333333333333333333),kmul(dx,dx)); const CCTK_REAL_VEC pm1o12dy2 CCTK_ATTRIBUTE_UNUSED = kdiv(ToReal(-0.0833333333333333333333333333333),kmul(dy,dy)); const CCTK_REAL_VEC pm1o12dz2 CCTK_ATTRIBUTE_UNUSED = kdiv(ToReal(-0.0833333333333333333333333333333),kmul(dz,dz)); /* Assign local copies of arrays functions */ /* Calculate temporaries and arrays functions */ /* Copy local copies back to grid functions */ /* Loop over the grid points */ const int imin0=imin[0]; const int imin1=imin[1]; const int imin2=imin[2]; const int imax0=imax[0]; const int imax1=imax[1]; const int imax2=imax[2]; #pragma omp parallel // reduction(+: vec_iter_counter, vec_op_counter, vec_mem_counter) CCTK_LOOP3STR(WT_Standing, i,j,k, imin0,imin1,imin2, imax0,imax1,imax2, cctk_ash[0],cctk_ash[1],cctk_ash[2], vecimin,vecimax, CCTK_REAL_VEC_SIZE) { const ptrdiff_t index CCTK_ATTRIBUTE_UNUSED = di*i + dj*j + dk*k; // vec_iter_counter+=CCTK_REAL_VEC_SIZE; /* Assign local copies of grid functions */ CCTK_REAL_VEC xL CCTK_ATTRIBUTE_UNUSED = vec_load(x[index]); CCTK_REAL_VEC yL CCTK_ATTRIBUTE_UNUSED = vec_load(y[index]); CCTK_REAL_VEC zL CCTK_ATTRIBUTE_UNUSED = vec_load(z[index]); /* Include user supplied include files */ /* Precompute derivatives */ /* Calculate temporaries and grid functions */ CCTK_REAL_VEC kvec CCTK_ATTRIBUTE_UNUSED = ToReal(3.14159265358979323846264338328*ScalarINV(width)); CCTK_REAL_VEC omega CCTK_ATTRIBUTE_UNUSED = ksqrt(kmul(kmul(kvec,kvec),ToReal(3))); CCTK_REAL_VEC uL CCTK_ATTRIBUTE_UNUSED = kmul(kcos(kmul(xL,kvec)),kmul(kcos(kmul(yL,kvec)),kmul(kcos(kmul(zL,kvec)),kmul(kcos(kmul(omega,t)),ToReal(amplitude))))); CCTK_REAL_VEC rhoL CCTK_ATTRIBUTE_UNUSED = kneg(kmul(omega,kmul(kcos(kmul(xL,kvec)),kmul(kcos(kmul(yL,kvec)),kmul(kcos(kmul(zL,kvec)),kmul(ksin(kmul(omega,t)),ToReal(amplitude))))))); /* Copy local copies back to grid functions */ vec_store_partial_prepare(i,vecimin,vecimax); vec_store_nta_partial(rho[index],rhoL); vec_store_nta_partial(u[index],uL); } CCTK_ENDLOOP3STR(WT_Standing); } extern "C" void WT_Standing(CCTK_ARGUMENTS) { DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; if (verbose > 1) { CCTK_VInfo(CCTK_THORNSTRING,"Entering WT_Standing_Body"); } if (cctk_iteration % WT_Standing_calc_every != WT_Standing_calc_offset) { return; } const char* const groups[] = { "grid::coordinates", "ML_WaveToy::WT_rho", "ML_WaveToy::WT_u"}; GenericFD_AssertGroupStorage(cctkGH, "WT_Standing", 3, groups); GenericFD_LoopOverEverything(cctkGH, WT_Standing_Body); if (verbose > 1) { CCTK_VInfo(CCTK_THORNSTRING,"Leaving WT_Standing_Body"); } }