From 2e0ea99d145009d33b397bee59e861a6ccd3425b Mon Sep 17 00:00:00 2001 From: rhaas Date: Tue, 15 Apr 2014 19:50:08 +0000 Subject: GRHydro: Templated Prim2Con version and related changes in various places. git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinEvolve/GRHydro/trunk@640 c83d129a-5a75-4d5a-9c4d-ed3a5855bf45 --- src/GRHydro_Prim2Con.c | 397 ------------------------------------------------- 1 file changed, 397 deletions(-) delete mode 100644 src/GRHydro_Prim2Con.c (limited to 'src/GRHydro_Prim2Con.c') diff --git a/src/GRHydro_Prim2Con.c b/src/GRHydro_Prim2Con.c deleted file mode 100644 index 805584c..0000000 --- a/src/GRHydro_Prim2Con.c +++ /dev/null @@ -1,397 +0,0 @@ -#include -#include -#include -#include - -#include "cctk.h" -#include "cctk_Parameters.h" -#include "cctk_Arguments.h" -#include "cctk_Functions.h" -#define MIN(a,b) (((a)<(b))?(a):(b)) -#define MAX(a,b) (((a)>(b))?(a):(b)) - - -// some prototypes -CCTK_INT GRHydro_UseGeneralCoordinates(const cGH * cctkGH); -static inline double SpatialDeterminantC(double gxx, double gxy, - double gxz, double gyy, - double gyz, double gzz); - -static inline __attribute__((always_inline)) void prim2conC(double *w, double *dens, double *sx, - double *sy, double *sz, double *tau, - const double gxx, const double gxy, - const double gxz, const double gyy, const double gyz, - const double gzz, const double sdet, - const double rho, const double vx, - const double vy, const double vz, - const double eps, const double press); -static inline void GRHydro_SpeedOfSound(CCTK_ARGUMENTS); - - - -void Primitive2ConservativeC(CCTK_ARGUMENTS); - -CCTK_FCALL void CCTK_FNAME(Primitive2ConservativeCforF)(cGH ** p_cctkGH) { - Primitive2ConservativeC(*p_cctkGH); -} - -CCTK_FCALL void CCTK_FNAME(GRHydro_SpeedOfSound)(cGH ** p_cctkGH) { - GRHydro_SpeedOfSound(*p_cctkGH); -} - - -void Primitive2ConservativeC(CCTK_ARGUMENTS) -{ - DECLARE_CCTK_ARGUMENTS; - DECLARE_CCTK_PARAMETERS; - - // save memory when multipatch is not used - CCTK_REAL * restrict g11, * restrict g12, * restrict g13; - CCTK_REAL * restrict g22, * restrict g23, * restrict g33; - - if(GRHydro_UseGeneralCoordinates(cctkGH)) { - g11 = gaa; - g12 = gab; - g13 = gac; - g22 = gbb; - g23 = gbc; - g33 = gcc; - } else { - g11 = gxx; - g12 = gxy; - g13 = gxz; - g22 = gyy; - g23 = gyz; - g33 = gzz; - } - - GRHydro_SpeedOfSound(CCTK_PASS_CTOC); - - // if padding is used the the "extra" vector elements could contain junk - // which we do not know how to handle - assert(cctk_lsh[0] == cctk_ash[0]); - assert(cctk_lsh[1] == cctk_ash[1]); - assert(cctk_lsh[2] == cctk_ash[2]); - -#pragma omp parallel for - for(int k = GRHydro_stencil-1; k < cctk_lsh[2]-GRHydro_stencil+1; k++) - for(int j = GRHydro_stencil-1; j < cctk_lsh[1]-GRHydro_stencil+1; j++) -#pragma ivdep // force compiler to vectorize the goddamn loop - for(int i = GRHydro_stencil-1; i < cctk_lsh[0]-GRHydro_stencil+1; i++) { - - const int idx = CCTK_GFINDEX3D(cctkGH,i,j,k); - - const int idxl = CCTK_GFINDEX3D(cctkGH,i-*xoffset,j-*yoffset,k-*zoffset); - const int idxr = CCTK_GFINDEX3D(cctkGH,i+*xoffset,j+*yoffset,k+*zoffset); - - const double g11l = 0.5 * (g11[idx] + g11[idxl]); - const double g12l = 0.5 * (g12[idx] + g12[idxl]); - const double g13l = 0.5 * (g13[idx] + g13[idxl]); - const double g22l = 0.5 * (g22[idx] + g22[idxl]); - const double g23l = 0.5 * (g23[idx] + g23[idxl]); - const double g33l = 0.5 * (g33[idx] + g33[idxl]); - - const double g11r = 0.5 * (g11[idx] + g11[idxr]); - const double g12r = 0.5 * (g12[idx] + g12[idxr]); - const double g13r = 0.5 * (g13[idx] + g13[idxr]); - const double g22r = 0.5 * (g22[idx] + g22[idxr]); - const double g23r = 0.5 * (g23[idx] + g23[idxr]); - const double g33r = 0.5 * (g33[idx] + g33[idxr]); - - const double savg_detl = - sqrt(SpatialDeterminantC(g11l,g12l,g13l,g22l,g23l,g33l)); - const double savg_detr = - sqrt(SpatialDeterminantC(g11r,g12r,g13r,g22r,g23r,g33r)); - - // minus call to p2c - prim2conC(&w_lorentzminus[idx], &densminus[idx], &sxminus[idx], - &syminus[idx], &szminus[idx], &tauminus[idx], - g11l,g12l,g13l,g22l,g23l,g33l, - savg_detl,rhominus[idx], velxminus[idx], velyminus[idx], - velzminus[idx], epsminus[idx], pressminus[idx]); - - - // plus call to p2c - prim2conC(&w_lorentzplus[idx], &densplus[idx], &sxplus[idx], - &syplus[idx], &szplus[idx], &tauplus[idx], - g11r,g12r,g13r,g22r,g23r,g33r, - savg_detr,rhoplus[idx], velxplus[idx], velyplus[idx], - velzplus[idx], epsplus[idx], pressplus[idx]); - } - -} // end function Conservative2PrimitiveC - -static inline void GRHydro_SpeedOfSound(CCTK_ARGUMENTS) -{ - DECLARE_CCTK_PARAMETERS; - DECLARE_CCTK_ARGUMENTS; - - // if padding is used the the "extra" vector elements could contain junk - // which we do not know how to handle - assert(cctk_lsh[0] == cctk_ash[0]); - assert(cctk_lsh[1] == cctk_ash[1]); - assert(cctk_lsh[2] == cctk_ash[2]); - - // EOS calls (now GF-wide) - if(!*evolve_temper) { - // n needs to be computed using ash since ash is used when computing the - // linear index in CCTK_GFINDEX3D - int n = cctk_ash[0]*cctk_ash[1]*cctk_ash[2]; - int *keyerr = malloc(sizeof(*keyerr)*n); - int anyerr = 0; - int keytemp = 0; - - // don't need special error handling for analytic EOS -#pragma omp parallel for - for(int k=0;k