/* 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))) extern "C" void WT_RHS_SelectBCs(CCTK_ARGUMENTS) { DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; if (cctk_iteration % WT_RHS_calc_every != WT_RHS_calc_offset) return; CCTK_INT ierr CCTK_ATTRIBUTE_UNUSED = 0; ierr = Boundary_SelectGroupForBC(cctkGH, CCTK_ALL_FACES, GenericFD_GetBoundaryWidth(cctkGH), -1 /* no table */, "ML_WaveToy::WT_rhorhs","flat"); if (ierr < 0) CCTK_WARN(1, "Failed to register flat BC for ML_WaveToy::WT_rhorhs."); ierr = Boundary_SelectGroupForBC(cctkGH, CCTK_ALL_FACES, GenericFD_GetBoundaryWidth(cctkGH), -1 /* no table */, "ML_WaveToy::WT_urhs","flat"); if (ierr < 0) CCTK_WARN(1, "Failed to register flat BC for ML_WaveToy::WT_urhs."); return; } static void WT_RHS_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_RHS, 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 rhoL CCTK_ATTRIBUTE_UNUSED = vec_load(rho[index]); CCTK_REAL_VEC uL CCTK_ATTRIBUTE_UNUSED = vec_load(u[index]); /* Include user supplied include files */ /* Precompute derivatives */ const CCTK_REAL_VEC PDstandardNth11u CCTK_ATTRIBUTE_UNUSED = PDstandardNth11(&u[index]); const CCTK_REAL_VEC PDstandardNth22u CCTK_ATTRIBUTE_UNUSED = PDstandardNth22(&u[index]); const CCTK_REAL_VEC PDstandardNth33u CCTK_ATTRIBUTE_UNUSED = PDstandardNth33(&u[index]); /* Calculate temporaries and grid functions */ CCTK_REAL_VEC urhsL CCTK_ATTRIBUTE_UNUSED = rhoL; CCTK_REAL_VEC rhorhsL CCTK_ATTRIBUTE_UNUSED = kadd(PDstandardNth11u,kadd(PDstandardNth22u,PDstandardNth33u)); /* Copy local copies back to grid functions */ vec_store_partial_prepare(i,vecimin,vecimax); vec_store_nta_partial(rhorhs[index],rhorhsL); vec_store_nta_partial(urhs[index],urhsL); } CCTK_ENDLOOP3STR(WT_RHS); } extern "C" void WT_RHS(CCTK_ARGUMENTS) { DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; if (verbose > 1) { CCTK_VInfo(CCTK_THORNSTRING,"Entering WT_RHS_Body"); } if (cctk_iteration % WT_RHS_calc_every != WT_RHS_calc_offset) { return; } const char* const groups[] = { "ML_WaveToy::WT_rho", "ML_WaveToy::WT_rhorhs", "ML_WaveToy::WT_u", "ML_WaveToy::WT_urhs"}; GenericFD_AssertGroupStorage(cctkGH, "WT_RHS", 4, groups); GenericFD_EnsureStencilFits(cctkGH, "WT_RHS", 2, 2, 2); GenericFD_LoopOverInterior(cctkGH, WT_RHS_Body); if (verbose > 1) { CCTK_VInfo(CCTK_THORNSTRING,"Leaving WT_RHS_Body"); } }