aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interface.ccl2
-rw-r--r--schedule.ccl81
-rw-r--r--src/GRHydro_Boundaries.F9051
-rw-r--r--src/GRHydro_Con2Prim.F90244
-rw-r--r--src/GRHydro_EoSChangeGamma.F9079
-rw-r--r--src/GRHydro_HLLE.F90110
-rw-r--r--src/GRHydro_Jacobian_state.c22
-rw-r--r--src/GRHydro_PPMMReconstruct_drv.F9065
-rw-r--r--src/GRHydro_PPMReconstruct_drv.F9053
-rw-r--r--src/GRHydro_ParamCheck.F909
-rw-r--r--src/GRHydro_Prim2Con.F90350
-rw-r--r--src/GRHydro_RegisterVars.cc18
-rw-r--r--src/GRHydro_Source.F90167
-rw-r--r--src/GRHydro_TVDReconstruct_drv.F9023
-rw-r--r--src/GRHydro_TransformTensorBasis.F90211
-rw-r--r--src/GRHydro_TransformTensorBasis.c438
-rw-r--r--src/GRHydro_UpdateMask.F90175
-rw-r--r--src/make.code.defn2
18 files changed, 1503 insertions, 597 deletions
diff --git a/interface.ccl b/interface.ccl
index 3a347bd..1fc2731 100644
--- a/interface.ccl
+++ b/interface.ccl
@@ -7,7 +7,7 @@
####################################################################
implements: GRHydro
-inherits: ADMBase, Boundary, SpaceMask, ADMMacros, Tmunubase, HydroBase, Coordinates
+inherits: ADMBase, Boundary, SpaceMask, ADMMacros, Tmunubase, HydroBase
#INCLUDES SOURCE: GRHydro_EMTensor.inc in CalcTmunu.inc
#INCLUDES: GRHydro_EMTensor_temps.inc in CalcTmunu_temps.inc
diff --git a/schedule.ccl b/schedule.ccl
index 1c64d4f..208648b 100644
--- a/schedule.ccl
+++ b/schedule.ccl
@@ -184,13 +184,20 @@ if (!CCTK_Equals(initial_shift,"none"))
### Storage for local tensor quantities ###
##############################################
-STORAGE: lvel[3]
-if(CCTK_Equals(Bvec_evolution_method,"GRHydro")) {
- STORAGE: lBvec[3]
+# the official test is to test Coordinates::general_coordinates, however
+# at schedule time, this is not yet set or accessible if we really insist on
+# running with Coordinates but with a Cartesian (trivial) coordinate system
+# _and_ we really want to safe this memory then it has to be turned off at
+# runtime via CCTK_GroupStorageDecrease
+if(CCTK_IsImplementationActive("Coordinates")) {
+ STORAGE: lvel[3]
+ if(CCTK_Equals(Bvec_evolution_method,"GRHydro")) {
+ STORAGE: lBvec[3]
+ }
+ STORAGE: local_metric[3]
+ STORAGE: local_extrinsic_curvature
+ STORAGE: local_shift
}
-STORAGE: local_metric[3]
-STORAGE: local_extrinsic_curvature
-STORAGE: local_shift
##############################################
### Storage for the conformal state scalar ###
@@ -226,11 +233,13 @@ schedule GRHydro_ParamCheck AT PARAMCHECK
LANG: Fortran
} "Check parameters"
-schedule GRHydro_check_Jacobian_state AT BASEGRID AFTER (TmunuBase_SetStressEnergyState Coordinates_SetGlobalCoords_Group)
-{
- LANG: C
- OPTIONS: GLOBAL
-} "Test state of Jacobians"
+if(CCTK_IsImplementationActive("Coordinates")) {
+ schedule GRHydro_check_Jacobian_state AT BASEGRID AFTER (TmunuBase_SetStressEnergyState Coordinates_SetGlobalCoords_Group)
+ {
+ LANG: C
+ OPTIONS: GLOBAL
+ } "Test state of Jacobians"
+}
######################################
### Standard symmetry registration ###
@@ -501,39 +510,41 @@ schedule GRHydro_SetupDescriptors AT CCTK_Initial BEFORE HydroBase_Initial
#####################################################################
-schedule GRHydroTransformPrimToLocalBasis AT INITIAL AFTER (HydroBase_Initial, ADMBase_PostInitial) BEFORE HydroBase_Prim2ConInitial
-{
- LANG: FORTRAN
-} "Transform primitive vars to local tensor basis."
+if(CCTK_IsImplementationActive("Coordinates")) {
+ schedule GRHydroTransformPrimToLocalBasis AT INITIAL AFTER (HydroBase_Initial, ADMBase_PostInitial) BEFORE HydroBase_Prim2ConInitial
+ {
+ LANG: C
+ } "Transform primitive vars to local tensor basis."
-schedule GRHydroTransformADMToLocalBasis AT INITIAL AFTER HydroBase_Initial BEFORE GRHydroTransformPrimToLocalBasis
-{
- LANG: FORTRAN
-} "Transform ADM metric, extr. curv. and shift to local tensor basis."
+ schedule GRHydroTransformADMToLocalBasis AT INITIAL AFTER HydroBase_Initial BEFORE GRHydroTransformPrimToLocalBasis
+ {
+ LANG: C
+ } "Transform ADM metric, extr. curv. and shift to local tensor basis."
-schedule GRHydroTransformADMToLocalBasis IN ADMBase_SetADMVars
-{
- LANG: FORTRAN
-} "Transform metric and shift to local tensor basis."
+ schedule GRHydroTransformADMToLocalBasis IN ADMBase_SetADMVars
+ {
+ LANG: C
+ } "Transform metric and shift to local tensor basis."
-#schedule GRHydroTransformADMToLocalBasis IN CTG_Convert_to_ADM AFTER CTGBase_Convert_CTG_to_ADM
-#{
-# LANG: FORTRAN
-#} "Transform metric and shift to local tensor basis."
+ #schedule GRHydroTransformADMToLocalBasis IN CTG_Convert_to_ADM AFTER CTGBase_Convert_CTG_to_ADM
+ #{
+ # LANG: C
+ #} "Transform metric and shift to local tensor basis."
-#schedule GRHydroTransformADMToLocalBasis IN MoL_Step BEFORE MoL_CalcRHS
-#{
-# LANG: FORTRAN
-#} "Transform metric and shift to local tensor basis."
+ #schedule GRHydroTransformADMToLocalBasis IN MoL_Step BEFORE MoL_CalcRHS
+ #{
+ # LANG: C
+ #} "Transform metric and shift to local tensor basis."
-schedule GRHydroTransformPrimToGlobalBasis IN HydroBase_PostStep AFTER HydroBase_Con2Prim
-{
- LANG: FORTRAN
-} "Transform primitive vars to global tensor basis."
+ schedule GRHydroTransformPrimToGlobalBasis IN HydroBase_PostStep AFTER HydroBase_Con2Prim
+ {
+ LANG: C
+ } "Transform primitive vars to global tensor basis."
+}
schedule group GRHydroRHS IN HydroBase_RHS
diff --git a/src/GRHydro_Boundaries.F90 b/src/GRHydro_Boundaries.F90
index 0a1b3d8..a432d09 100644
--- a/src/GRHydro_Boundaries.F90
+++ b/src/GRHydro_Boundaries.F90
@@ -55,6 +55,7 @@ subroutine GRHydro_InitSymBound(CCTK_ARGUMENTS)
integer, dimension(3) :: sym
integer :: ierr = 0
integer :: itracer
+ CCTK_INT :: GRHydro_UseGeneralCoordinates, general_coordinates
character(len=100) tracername
character(len=100) tracerindex
@@ -62,6 +63,8 @@ subroutine GRHydro_InitSymBound(CCTK_ARGUMENTS)
sym(1) = 1
sym(2) = 1
sym(3) = 1
+
+ general_coordinates = GRHydro_UseGeneralCoordinates(cctkGH)
call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::rho")
call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::press")
@@ -94,7 +97,11 @@ subroutine GRHydro_InitSymBound(CCTK_ARGUMENTS)
sym(2) = 1
sym(3) = 1
- call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::lvel[0]")
+ if (general_coordinates .ne. 0) then
+ call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::lvel[0]")
+ else
+ call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::vel[0]")
+ endif
call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::scon[0]")
if(evolve_mhd.ne.0) then
call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::Bvec[0]")
@@ -105,7 +112,11 @@ subroutine GRHydro_InitSymBound(CCTK_ARGUMENTS)
sym(2) = -1
sym(3) = 1
- call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::lvel[1]")
+ if (general_coordinates .ne. 0) then
+ call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::lvel[1]")
+ else
+ call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::vel[1]")
+ endif
call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::scon[1]")
if(evolve_mhd.ne.0) then
call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::Bvec[1]")
@@ -116,7 +127,11 @@ subroutine GRHydro_InitSymBound(CCTK_ARGUMENTS)
sym(2) = 1
sym(3) = -1
- call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::lvel[2]")
+ if (general_coordinates .ne. 0) then
+ call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::lvel[2]")
+ else
+ call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::vel[2]")
+ endif
call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::scon[2]")
if(evolve_mhd.ne.0) then
call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::Bvec[2]")
@@ -158,12 +173,15 @@ subroutine GRHydro_Boundaries(CCTK_ARGUMENTS)
integer :: ierr
CCTK_REAL :: pi = 3.141569d0
integer :: i,j,k
+ CCTK_INT :: GRHydro_UseGeneralCoordinates, general_coordinates
CCTK_INT, parameter :: faces=CCTK_ALL_FACES
CCTK_INT, parameter :: ione=1
sw = GRHydro_stencil
+ general_coordinates = GRHydro_UseGeneralCoordinates(cctkGH)
+
!!$Flat boundaries if required
if (CCTK_EQUALS(bound,"flat")) then
@@ -181,11 +199,21 @@ subroutine GRHydro_Boundaries(CCTK_ARGUMENTS)
"HydroBase::press", "Flat")
ierr = Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
"HydroBase::eps", "Flat")
- ierr = Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "GRHydro::lvel", "Flat")
- if(evolve_mhd.ne.0) then
+ if (general_coordinates .ne. 0) then
ierr = Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "GRHydro::lBvec", "Flat")
+ "GRHydro::lvel", "Flat")
+ else
+ ierr = Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::vel", "Flat")
+ endif
+ if(evolve_mhd.ne.0) then
+ if (general_coordinates .ne. 0) then
+ ierr = Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::lBvec", "Flat")
+ else
+ ierr = Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::Bvec", "Flat")
+ endif
ierr = Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
"GRHydro::Bcons", "Flat")
if(clean_divergence.ne.0) then
@@ -236,8 +264,13 @@ subroutine GRHydro_Boundaries(CCTK_ARGUMENTS)
ierr = Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
"HydroBase::vel", "None")
if(evolve_mhd.ne.0) then
- ierr = Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "GRHydro::lBvec", "None")
+ if (general_coordinates .ne. 0) then
+ ierr = Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::lBvec", "None")
+ else
+ ierr = Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::Bvec", "None")
+ endif
ierr = Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
"GRHydro::Bcons", "None")
if(clean_divergence.ne.0) then
diff --git a/src/GRHydro_Con2Prim.F90 b/src/GRHydro_Con2Prim.F90
index 3c51302..db03717 100644
--- a/src/GRHydro_Con2Prim.F90
+++ b/src/GRHydro_Con2Prim.F90
@@ -61,6 +61,14 @@ subroutine Conservative2Primitive(CCTK_ARGUMENTS)
CCTK_REAL :: local_min_tracer
CCTK_REAL :: local_perc_ptol
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
! begin EOS Omni vars
integer :: n,keytemp,anyerr,keyerr(1)
real*8 :: xpress(1),xeps(1),xtemp(1),xye(1)
@@ -68,6 +76,25 @@ subroutine Conservative2Primitive(CCTK_ARGUMENTS)
xpress = 0.0d0;xeps = 0.0d0;xtemp = 0.0d0;xye = 0.0d0
! end EOS Omni vars
+ ! save memory when MP is not used
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ vup => lvel
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ vup => vel
+ end if
+
call SpaceMask_GetTypeBits(type_bits, "Hydro_Atmosphere")
call SpaceMask_GetStateBits(atmosphere, "Hydro_Atmosphere", "in_atmosphere")
type2_bits = -1
@@ -101,11 +128,11 @@ subroutine Conservative2Primitive(CCTK_ARGUMENTS)
epsnegative = .false.
- det = SPATIAL_DETERMINANT(gaa(i,j,k),gab(i,j,k),gac(i,j,k), \
- gbb(i,j,k),gbc(i,j,k),gcc(i,j,k))
+ det = SPATIAL_DETERMINANT(g11(i,j,k),g12(i,j,k),g13(i,j,k), \
+ g22(i,j,k),g23(i,j,k),g33(i,j,k))
call UpperMetric(uxx,uxy,uxz,uyy,uyz,uzz,det,&
- gaa(i,j,k),gab(i,j,k),gac(i,j,k),gbb(i,j,k),&
- gbc(i,j,k),gcc(i,j,k))
+ g11(i,j,k),g12(i,j,k),g13(i,j,k),g22(i,j,k),&
+ g23(i,j,k),g33(i,j,k))
!!$ if (det < 0.e0) then
!!$ call CCTK_WARN(0, "nan produced (det negative)")
@@ -135,7 +162,7 @@ subroutine Conservative2Primitive(CCTK_ARGUMENTS)
dens(i,j,k) = sqrt(det)*GRHydro_rho_min !/(1.d0+GRHydro_atmo_tolerance)
rho(i,j,k) = GRHydro_rho_min
scon(i,j,k,:) = 0.d0
- lvel(i,j,k,:) = 0.d0
+ vup(i,j,k,:) = 0.d0
w_lorentz(i,j,k) = 1.d0
if(evolve_temper.ne.0) then
@@ -165,15 +192,15 @@ subroutine Conservative2Primitive(CCTK_ARGUMENTS)
if(evolve_temper.eq.0) then
call Con2Prim_pt(GRHydro_eos_handle, dens(i,j,k),scon(i,j,k,1),scon(i,j,k,2), &
- scon(i,j,k,3),tau(i,j,k),rho(i,j,k),lvel(i,j,k,1),lvel(i,j,k,2), &
- lvel(i,j,k,3),eps(i,j,k),press(i,j,k),w_lorentz(i,j,k), &
+ scon(i,j,k,3),tau(i,j,k),rho(i,j,k),vup(i,j,k,1),vup(i,j,k,2), &
+ vup(i,j,k,3),eps(i,j,k),press(i,j,k),w_lorentz(i,j,k), &
uxx,uxy,uxz,uyy,uyz,uzz,det,x(i,j,k),y(i,j,k), &
z(i,j,k),r(i,j,k),epsnegative,GRHydro_rho_min,pmin, epsmin, &
GRHydro_reflevel, GRHydro_C2P_failed(i,j,k))
else
call Con2Prim_pt_hot(i,j,k,GRHydro_eos_handle, dens(i,j,k),scon(i,j,k,1),&
- scon(i,j,k,2),scon(i,j,k,3),tau(i,j,k),Y_e_con(i,j,k),rho(i,j,k),lvel(i,j,k,1),&
- lvel(i,j,k,2),lvel(i,j,k,3),eps(i,j,k),temperature(i,j,k),y_e(i,j,k),&
+ scon(i,j,k,2),scon(i,j,k,3),tau(i,j,k),Y_e_con(i,j,k),rho(i,j,k),vup(i,j,k,1),&
+ vup(i,j,k,2),vup(i,j,k,3),eps(i,j,k),temperature(i,j,k),y_e(i,j,k),&
press(i,j,k),w_lorentz(i,j,k), &
uxx,uxy,uxz,uyy,uyz,uzz,det,x(i,j,k),y(i,j,k), &
z(i,j,k),r(i,j,k),epsnegative,GRHydro_rho_min,pmin, epsmin, &
@@ -186,7 +213,7 @@ subroutine Conservative2Primitive(CCTK_ARGUMENTS)
local_perc_ptol = GRHydro_perc_ptol*100.0d0
call Con2Prim_pt_hot(i,j,k,GRHydro_eos_handle, dens(i,j,k),scon(i,j,k,1),&
scon(i,j,k,2),scon(i,j,k,3),tau(i,j,k),Y_e_con(i,j,k),rho(i,j,k),&
- lvel(i,j,k,1),lvel(i,j,k,2), lvel(i,j,k,3),eps(i,j,k),&
+ vup(i,j,k,1),vup(i,j,k,2), vup(i,j,k,3),eps(i,j,k),&
temperature(i,j,k),y_e(i,j,k),press(i,j,k),w_lorentz(i,j,k), &
uxx,uxy,uxz,uyy,uyz,uzz,det,x(i,j,k),y(i,j,k), &
z(i,j,k),r(i,j,k),epsnegative,GRHydro_rho_min,pmin, epsmin, &
@@ -237,7 +264,7 @@ subroutine Conservative2Primitive(CCTK_ARGUMENTS)
dens(i,j,k) = sqrt(det)*GRHydro_rho_min !/(1.d0+GRHydro_atmo_tolerance)
rho(i,j,k) = GRHydro_rho_min
scon(i,j,k,:) = 0.d0
- lvel(i,j,k,:) = 0.d0
+ vup(i,j,k,:) = 0.d0
w_lorentz(i,j,k) = 1.d0
call EOS_Omni_press(GRHydro_polytrope_handle,keytemp,GRHydro_eos_rf_prec,n,&
@@ -259,8 +286,8 @@ subroutine Conservative2Primitive(CCTK_ARGUMENTS)
!$OMP END CRITICAL
call Con2Prim_ptPolytype(GRHydro_polytrope_handle, &
dens(i,j,k), scon(i,j,k,1), scon(i,j,k,2), scon(i,j,k,3), &
- tau(i,j,k), rho(i,j,k), lvel(i,j,k,1), lvel(i,j,k,2), &
- lvel(i,j,k,3), eps(i,j,k), press(i,j,k), w_lorentz(i,j,k), &
+ tau(i,j,k), rho(i,j,k), vup(i,j,k,1), vup(i,j,k,2), &
+ vup(i,j,k,3), eps(i,j,k), press(i,j,k), w_lorentz(i,j,k), &
uxx, uxy, uxz, uyy, uyz, uzz, det, x(i,j,k), y(i,j,k), &
z(i,j,k), r(i,j,k),GRHydro_rho_min, GRHydro_reflevel, GRHydro_C2P_failed(i,j,k))
#endif
@@ -1011,6 +1038,12 @@ subroutine Conservative2PrimitiveBounds(CCTK_ARGUMENTS)
CCTK_REAL :: local_min_tracer
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+
! begin EOS Omni vars
integer :: n,keytemp,anyerr,keyerr(1)
real*8 :: xpress,xtemp,xye,xeps
@@ -1018,6 +1051,23 @@ subroutine Conservative2PrimitiveBounds(CCTK_ARGUMENTS)
xpress=0.0d0;xtemp=0.0d0;xye=0.0d0;xeps=0.0d0
! end EOS Omni vars
+ ! save memory when MP is not used
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ 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
+ end if
+
! this is a poly call
call EOS_Omni_press(GRHydro_polytrope_handle,keytemp,GRHydro_eos_rf_prec,n,&
GRHydro_rho_min,1.0d0,xtemp,xye,pmin,keyerr,anyerr)
@@ -1048,18 +1098,18 @@ subroutine Conservative2PrimitiveBounds(CCTK_ARGUMENTS)
if (SpaceMask_CheckStateBitsF90(space_mask, i, j, k, type_bits, atmosphere) .or. &
GRHydro_enable_internal_excision /= 0 .and. (hydro_excision_mask(i,j,k) .ne. 0)) cycle
- gxxl = 0.5d0 * (gaa(i,j,k) + gaa(i-xoffset,j-yoffset,k-zoffset))
- gxyl = 0.5d0 * (gab(i,j,k) + gab(i-xoffset,j-yoffset,k-zoffset))
- gxzl = 0.5d0 * (gac(i,j,k) + gac(i-xoffset,j-yoffset,k-zoffset))
- gyyl = 0.5d0 * (gbb(i,j,k) + gbb(i-xoffset,j-yoffset,k-zoffset))
- gyzl = 0.5d0 * (gbc(i,j,k) + gbc(i-xoffset,j-yoffset,k-zoffset))
- gzzl = 0.5d0 * (gcc(i,j,k) + gcc(i-xoffset,j-yoffset,k-zoffset))
- gxxr = 0.5d0 * (gaa(i,j,k) + gaa(i+xoffset,j+yoffset,k+zoffset))
- gxyr = 0.5d0 * (gab(i,j,k) + gab(i+xoffset,j+yoffset,k+zoffset))
- gxzr = 0.5d0 * (gac(i,j,k) + gac(i+xoffset,j+yoffset,k+zoffset))
- gyyr = 0.5d0 * (gbb(i,j,k) + gbb(i+xoffset,j+yoffset,k+zoffset))
- gyzr = 0.5d0 * (gbc(i,j,k) + gbc(i+xoffset,j+yoffset,k+zoffset))
- gzzr = 0.5d0 * (gcc(i,j,k) + gcc(i+xoffset,j+yoffset,k+zoffset))
+ gxxl = 0.5d0 * (g11(i,j,k) + g11(i-xoffset,j-yoffset,k-zoffset))
+ gxyl = 0.5d0 * (g12(i,j,k) + g12(i-xoffset,j-yoffset,k-zoffset))
+ gxzl = 0.5d0 * (g13(i,j,k) + g13(i-xoffset,j-yoffset,k-zoffset))
+ gyyl = 0.5d0 * (g22(i,j,k) + g22(i-xoffset,j-yoffset,k-zoffset))
+ gyzl = 0.5d0 * (g23(i,j,k) + g23(i-xoffset,j-yoffset,k-zoffset))
+ gzzl = 0.5d0 * (g33(i,j,k) + g33(i-xoffset,j-yoffset,k-zoffset))
+ gxxr = 0.5d0 * (g11(i,j,k) + g11(i+xoffset,j+yoffset,k+zoffset))
+ gxyr = 0.5d0 * (g12(i,j,k) + g12(i+xoffset,j+yoffset,k+zoffset))
+ gxzr = 0.5d0 * (g13(i,j,k) + g13(i+xoffset,j+yoffset,k+zoffset))
+ gyyr = 0.5d0 * (g22(i,j,k) + g22(i+xoffset,j+yoffset,k+zoffset))
+ gyzr = 0.5d0 * (g23(i,j,k) + g23(i+xoffset,j+yoffset,k+zoffset))
+ gzzr = 0.5d0 * (g33(i,j,k) + g33(i+xoffset,j+yoffset,k+zoffset))
epsnegative = .false.
@@ -1222,6 +1272,33 @@ subroutine Conservative2PrimitivePolytype(CCTK_ARGUMENTS)
CCTK_REAL :: local_min_tracer
! character(len=400) :: warnline
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
+ ! save memory when MP is not used
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ vup => lvel
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ vup => vel
+ end if
+
call SpaceMask_GetTypeBits(type_bits, "Hydro_Atmosphere")
call SpaceMask_GetStateBits(atmosphere, "Hydro_Atmosphere", "in_atmosphere")
@@ -1251,11 +1328,11 @@ subroutine Conservative2PrimitivePolytype(CCTK_ARGUMENTS)
if (SpaceMask_CheckStateBitsF90(space_mask, i, j, k, type_bits, atmosphere) .or. &
GRHydro_enable_internal_excision /= 0 .and. (hydro_excision_mask(i,j,k) .ne. 0)) cycle
- det = SPATIAL_DETERMINANT(gaa(i,j,k),gab(i,j,k),gac(i,j,k),\
- gbb(i,j,k),gbc(i,j,k),gcc(i,j,k))
+ det = SPATIAL_DETERMINANT(g11(i,j,k),g12(i,j,k),g13(i,j,k),\
+ g22(i,j,k),g23(i,j,k),g33(i,j,k))
call UpperMetric(uxx,uxy,uxz,uyy,uyz,uzz,det,&
- gaa(i,j,k),gab(i,j,k),gac(i,j,k),gbb(i,j,k),&
- gbc(i,j,k),gcc(i,j,k))
+ g11(i,j,k),g12(i,j,k),g13(i,j,k),g22(i,j,k),&
+ g23(i,j,k),g33(i,j,k))
if (evolve_tracer .ne. 0) then
do itracer=1,number_of_tracers
@@ -1277,8 +1354,8 @@ subroutine Conservative2PrimitivePolytype(CCTK_ARGUMENTS)
call Con2Prim_ptPolytype(GRHydro_eos_handle, dens(i,j,k),&
scon(i,j,k,1),scon(i,j,k,2), &
- scon(i,j,k,3),tau(i,j,k),rho(i,j,k),lvel(i,j,k,1),lvel(i,j,k,2), &
- lvel(i,j,k,3),eps(i,j,k),press(i,j,k),w_lorentz(i,j,k), &
+ scon(i,j,k,3),tau(i,j,k),rho(i,j,k),vup(i,j,k,1),vup(i,j,k,2), &
+ vup(i,j,k,3),eps(i,j,k),press(i,j,k),w_lorentz(i,j,k), &
uxx,uxy,uxz,uyy,uyz,uzz,det,x(i,j,k),y(i,j,k), &
z(i,j,k),r(i,j,k),GRHydro_rho_min, GRHydro_reflevel, GRHydro_C2P_failed(i,j,k))
@@ -1583,6 +1660,28 @@ subroutine Con2PrimBoundsPolytype(CCTK_ARGUMENTS)
CCTK_INT :: type_bits, atmosphere
CCTK_INT :: type2_bits
+
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ 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
+ end if
call SpaceMask_GetTypeBits(type_bits, "Hydro_Atmosphere")
call SpaceMask_GetStateBits(atmosphere, "Hydro_Atmosphere", "in_atmosphere")
@@ -1600,18 +1699,18 @@ subroutine Con2PrimBoundsPolytype(CCTK_ARGUMENTS)
if (SpaceMask_CheckStateBitsF90(space_mask, i, j, k, type_bits, atmosphere) .or. &
GRHydro_enable_internal_excision /= 0 .and. (hydro_excision_mask(i,j,k) .ne. 0)) cycle
- gxxl = 0.5d0 * (gaa(i,j,k) + gaa(i-xoffset,j-yoffset,k-zoffset))
- gxyl = 0.5d0 * (gab(i,j,k) + gab(i-xoffset,j-yoffset,k-zoffset))
- gxzl = 0.5d0 * (gac(i,j,k) + gac(i-xoffset,j-yoffset,k-zoffset))
- gyyl = 0.5d0 * (gbb(i,j,k) + gbb(i-xoffset,j-yoffset,k-zoffset))
- gyzl = 0.5d0 * (gbc(i,j,k) + gbc(i-xoffset,j-yoffset,k-zoffset))
- gzzl = 0.5d0 * (gcc(i,j,k) + gcc(i-xoffset,j-yoffset,k-zoffset))
- gxxr = 0.5d0 * (gaa(i,j,k) + gaa(i+xoffset,j+yoffset,k+zoffset))
- gxyr = 0.5d0 * (gab(i,j,k) + gab(i+xoffset,j+yoffset,k+zoffset))
- gxzr = 0.5d0 * (gac(i,j,k) + gac(i+xoffset,j+yoffset,k+zoffset))
- gyyr = 0.5d0 * (gbb(i,j,k) + gbb(i+xoffset,j+yoffset,k+zoffset))
- gyzr = 0.5d0 * (gbc(i,j,k) + gbc(i+xoffset,j+yoffset,k+zoffset))
- gzzr = 0.5d0 * (gcc(i,j,k) + gcc(i+xoffset,j+yoffset,k+zoffset))
+ gxxl = 0.5d0 * (g11(i,j,k) + g11(i-xoffset,j-yoffset,k-zoffset))
+ gxyl = 0.5d0 * (g12(i,j,k) + g12(i-xoffset,j-yoffset,k-zoffset))
+ gxzl = 0.5d0 * (g13(i,j,k) + g13(i-xoffset,j-yoffset,k-zoffset))
+ gyyl = 0.5d0 * (g22(i,j,k) + g22(i-xoffset,j-yoffset,k-zoffset))
+ gyzl = 0.5d0 * (g23(i,j,k) + g23(i-xoffset,j-yoffset,k-zoffset))
+ gzzl = 0.5d0 * (g33(i,j,k) + g33(i-xoffset,j-yoffset,k-zoffset))
+ gxxr = 0.5d0 * (g11(i,j,k) + g11(i+xoffset,j+yoffset,k+zoffset))
+ gxyr = 0.5d0 * (g12(i,j,k) + g12(i+xoffset,j+yoffset,k+zoffset))
+ gxzr = 0.5d0 * (g13(i,j,k) + g13(i+xoffset,j+yoffset,k+zoffset))
+ gyyr = 0.5d0 * (g22(i,j,k) + g22(i+xoffset,j+yoffset,k+zoffset))
+ gyzr = 0.5d0 * (g23(i,j,k) + g23(i+xoffset,j+yoffset,k+zoffset))
+ gzzr = 0.5d0 * (g33(i,j,k) + g33(i+xoffset,j+yoffset,k+zoffset))
avg_detl = SPATIAL_DETERMINANT(gxxl,gxyl,gxzl,gyyl, gyzl,gzzl)
avg_detr = SPATIAL_DETERMINANT(gxxr,gxyr,gxzr,gyyr, gyzr,gzzr)
@@ -1677,6 +1776,28 @@ subroutine Con2PrimBoundsTracer(CCTK_ARGUMENTS)
uxxr, uxyr, uxzr, uyyr, uyzr, uzzr
CCTK_REAL :: gxxl,gxyl,gxzl,gyyl,gyzl,gzzl,avg_detl,&
gxxr,gxyr,gxzr,gyyr,gyzr,gzzr,avg_detr
+
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ 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
+ end if
nx = cctk_lsh(1)
ny = cctk_lsh(2)
@@ -1686,18 +1807,18 @@ subroutine Con2PrimBoundsTracer(CCTK_ARGUMENTS)
do j = GRHydro_stencil, ny - GRHydro_stencil + 1
do i = GRHydro_stencil, nx - GRHydro_stencil + 1
- gxxl = 0.5d0 * (gaa(i,j,k) + gaa(i-xoffset,j-yoffset,k-zoffset))
- gxyl = 0.5d0 * (gab(i,j,k) + gab(i-xoffset,j-yoffset,k-zoffset))
- gxzl = 0.5d0 * (gac(i,j,k) + gac(i-xoffset,j-yoffset,k-zoffset))
- gyyl = 0.5d0 * (gbb(i,j,k) + gbb(i-xoffset,j-yoffset,k-zoffset))
- gyzl = 0.5d0 * (gbc(i,j,k) + gbc(i-xoffset,j-yoffset,k-zoffset))
- gzzl = 0.5d0 * (gcc(i,j,k) + gcc(i-xoffset,j-yoffset,k-zoffset))
- gxxr = 0.5d0 * (gaa(i,j,k) + gaa(i+xoffset,j+yoffset,k+zoffset))
- gxyr = 0.5d0 * (gab(i,j,k) + gab(i+xoffset,j+yoffset,k+zoffset))
- gxzr = 0.5d0 * (gac(i,j,k) + gac(i+xoffset,j+yoffset,k+zoffset))
- gyyr = 0.5d0 * (gbb(i,j,k) + gbb(i+xoffset,j+yoffset,k+zoffset))
- gyzr = 0.5d0 * (gbc(i,j,k) + gbc(i+xoffset,j+yoffset,k+zoffset))
- gzzr = 0.5d0 * (gcc(i,j,k) + gcc(i+xoffset,j+yoffset,k+zoffset))
+ gxxl = 0.5d0 * (g11(i,j,k) + g11(i-xoffset,j-yoffset,k-zoffset))
+ gxyl = 0.5d0 * (g12(i,j,k) + g12(i-xoffset,j-yoffset,k-zoffset))
+ gxzl = 0.5d0 * (g13(i,j,k) + g13(i-xoffset,j-yoffset,k-zoffset))
+ gyyl = 0.5d0 * (g22(i,j,k) + g22(i-xoffset,j-yoffset,k-zoffset))
+ gyzl = 0.5d0 * (g23(i,j,k) + g23(i-xoffset,j-yoffset,k-zoffset))
+ gzzl = 0.5d0 * (g33(i,j,k) + g33(i-xoffset,j-yoffset,k-zoffset))
+ gxxr = 0.5d0 * (g11(i,j,k) + g11(i+xoffset,j+yoffset,k+zoffset))
+ gxyr = 0.5d0 * (g12(i,j,k) + g12(i+xoffset,j+yoffset,k+zoffset))
+ gxzr = 0.5d0 * (g13(i,j,k) + g13(i+xoffset,j+yoffset,k+zoffset))
+ gyyr = 0.5d0 * (g22(i,j,k) + g22(i+xoffset,j+yoffset,k+zoffset))
+ gyzr = 0.5d0 * (g23(i,j,k) + g23(i+xoffset,j+yoffset,k+zoffset))
+ gzzr = 0.5d0 * (g33(i,j,k) + g33(i+xoffset,j+yoffset,k+zoffset))
avg_detl = SPATIAL_DETERMINANT(gxxl,gxyl,gxzl,gyyl, gyzl,gzzl)
avg_detr = SPATIAL_DETERMINANT(gxxr,gxyr,gxzr,gyyr, gyzr,gzzr)
@@ -1846,6 +1967,17 @@ subroutine check_GRHydro_C2P_failed(CCTK_ARGUMENTS)
integer :: i, j, k, nx, ny, nz
character(len=100) warnline
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ vup => lvel
+ else
+ vup => vel
+ end if
+
! call CCTK_INFO("Checking the C2P failure mask.")
nx = cctk_lsh(1)
@@ -1878,7 +2010,7 @@ subroutine check_GRHydro_C2P_failed(CCTK_ARGUMENTS)
write(warnline,'(a20,g16.7)') 'radius: ',r(i,j,k)
call CCTK_WARN(1,warnline)
write(warnline,'(a20,3g16.7)') 'velocities: ',&
- lvel(i,j,k,1),lvel(i,j,k,2),lvel(i,j,k,3)
+ vup(i,j,k,1),vup(i,j,k,2),vup(i,j,k,3)
call CCTK_WARN(0,warnline)
!$OMP END CRITICAL
diff --git a/src/GRHydro_EoSChangeGamma.F90 b/src/GRHydro_EoSChangeGamma.F90
index d1c022c..dda0070 100644
--- a/src/GRHydro_EoSChangeGamma.F90
+++ b/src/GRHydro_EoSChangeGamma.F90
@@ -14,9 +14,9 @@
#include "cctk_Arguments.h"
#include "GRHydro_Macros.h"
-#define velx(i,j,k) lvel(i,j,k,1)
-#define vely(i,j,k) lvel(i,j,k,2)
-#define velz(i,j,k) lvel(i,j,k,3)
+#define velx(i,j,k) vup(i,j,k,1)
+#define vely(i,j,k) vup(i,j,k,2)
+#define velz(i,j,k) vup(i,j,k,3)
#define sx(i,j,k) scon(i,j,k,1)
#define sy(i,j,k) scon(i,j,k,2)
#define sz(i,j,k) scon(i,j,k,3)
@@ -50,7 +50,15 @@ subroutine GRHydro_EoSChangeGamma(CCTK_ARGUMENTS)
CCTK_REAL :: det
CCTK_REAL :: local_gamma
-
+
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
!!$ Set up the fluid constants
! begin EOS Omni vars
integer :: n,keytemp,anyerr,keyerr(1)
@@ -64,6 +72,25 @@ subroutine GRHydro_EoSChangeGamma(CCTK_ARGUMENTS)
call EOS_Omni_EpsFromPress(GRHydro_polytrope_handle,keytemp,GRHydro_eos_rf_prec,n,&
1.0d0,1.0d0,xtemp,xye,xpress,xeps,keyerr,anyerr)
+ ! save memory when MP is not used
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => g33
+ vup => lvel
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ vup => vel
+ end if
+
local_Gamma = 1.0d0 + xpress/xeps
press = press_gf * poly_k_cgs * &
(rho * inv_rho_gf)**local_Gamma
@@ -78,10 +105,10 @@ subroutine GRHydro_EoSChangeGamma(CCTK_ARGUMENTS)
do j = 1, cctk_lsh(2)
do i = 1, cctk_lsh(1)
- det = SPATIAL_DETERMINANT(gaa(i,j,k),gab(i,j,k),gac(i,j,k),\
- gbb(i,j,k),gbc(i,j,k),gcc(i,j,k))
- call prim2conpolytype(GRHydro_polytrope_handle,gaa(i,j,k),gab(i,j,k),&
- gac(i,j,k),gbb(i,j,k),gbc(i,j,k),gcc(i,j,k),&
+ det = SPATIAL_DETERMINANT(g11(i,j,k),g12(i,j,k),g13(i,j,k),\
+ g22(i,j,k),g23(i,j,k),g33(i,j,k))
+ call prim2conpolytype(GRHydro_polytrope_handle,g11(i,j,k),g12(i,j,k),&
+ g13(i,j,k),g22(i,j,k),g23(i,j,k),g33(i,j,k),&
det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
tau(i,j,k),rho(i,j,k),velx(i,j,k),vely(i,j,k),velz(i,j,k),&
eps(i,j,k),press(i,j,k),w_lorentz(i,j,k))
@@ -212,6 +239,15 @@ subroutine GRHydro_EoSChangeGammaK_Shibata(CCTK_ARGUMENTS)
CCTK_REAL, dimension(cctk_lsh(1),cctk_lsh(2),cctk_lsh(3)) :: Q
character(len=100) infoline
+
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
! begin EOS Omni vars
integer :: n,keytemp,anyerr,keyerr(1)
real*8 :: xpress,xeps,xtemp,xye
@@ -226,6 +262,25 @@ subroutine GRHydro_EoSChangeGammaK_Shibata(CCTK_ARGUMENTS)
call EOS_Omni_EpsFromPress(GRHydro_polytrope_handle,keytemp,GRHydro_eos_rf_prec,n,&
1.0d0,1.0d0,xtemp,xye,xpress,xeps,keyerr,anyerr)
+ ! save memory when MP is not used
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ vup => lvel
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ vup => vel
+ end if
+
local_Gamma = 1.0d0 + xpress/xeps
local_K = xpress
@@ -242,10 +297,10 @@ subroutine GRHydro_EoSChangeGammaK_Shibata(CCTK_ARGUMENTS)
do j = 1, cctk_lsh(2)
do i = 1, cctk_lsh(1)
- det = SPATIAL_DETERMINANT(gaa(i,j,k),gab(i,j,k),gac(i,j,k),\
- gbb(i,j,k),gbc(i,j,k),gcc(i,j,k))
- call prim2con(GRHydro_eos_handle,gaa(i,j,k),gab(i,j,k),&
- gac(i,j,k),gbb(i,j,k),gbc(i,j,k),gcc(i,j,k),&
+ det = SPATIAL_DETERMINANT(g11(i,j,k),g12(i,j,k),g13(i,j,k),\
+ g22(i,j,k),g23(i,j,k),g33(i,j,k))
+ call prim2con(GRHydro_eos_handle,g11(i,j,k),g12(i,j,k),&
+ g13(i,j,k),g22(i,j,k),g23(i,j,k),g33(i,j,k),&
det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
tau(i,j,k),rho(i,j,k),velx(i,j,k),vely(i,j,k),velz(i,j,k),&
eps(i,j,k),press(i,j,k),w_lorentz(i,j,k))
diff --git a/src/GRHydro_HLLE.F90 b/src/GRHydro_HLLE.F90
index ee6c0ad..474a2aa 100644
--- a/src/GRHydro_HLLE.F90
+++ b/src/GRHydro_HLLE.F90
@@ -50,6 +50,37 @@ subroutine GRHydro_HLLE(CCTK_ARGUMENTS)
CCTK_INT :: type_bits, trivial, not_trivial
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET betaa, betab, betac
+ TARGET betax, betay, betaz
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: beta1, beta2, beta3
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ beta1 => betaa
+ beta2 => betab
+ beta3 => betac
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ beta1 => betax
+ beta2 => betay
+ beta3 => betaz
+ end if
+
if (flux_direction == 1) then
call SpaceMask_GetTypeBits(type_bits, "Hydro_RiemannProblemX")
call SpaceMask_GetStateBits(trivial, "Hydro_RiemannProblemX", &
@@ -104,26 +135,26 @@ subroutine GRHydro_HLLE(CCTK_ARGUMENTS)
!!$ left and right points.
if (flux_direction == 1) then
- avg_beta = 0.5d0 * (betaa(i+xoffset,j+yoffset,k+zoffset) + &
- betaa(i,j,k))
+ avg_beta = 0.5d0 * (beta1(i+xoffset,j+yoffset,k+zoffset) + &
+ beta1(i,j,k))
else if (flux_direction == 2) then
- avg_beta = 0.5d0 * (betab(i+xoffset,j+yoffset,k+zoffset) + &
- betab(i,j,k))
+ avg_beta = 0.5d0 * (beta2(i+xoffset,j+yoffset,k+zoffset) + &
+ beta2(i,j,k))
else if (flux_direction == 3) then
- avg_beta = 0.5d0 * (betac(i+xoffset,j+yoffset,k+zoffset) + &
- betac(i,j,k))
+ avg_beta = 0.5d0 * (beta3(i+xoffset,j+yoffset,k+zoffset) + &
+ beta3(i,j,k))
else
call CCTK_WARN(0, "Flux direction not x,y,z")
end if
avg_alp = 0.5 * (alp(i,j,k) + alp(i+xoffset,j+yoffset,k+zoffset))
- gxxh = 0.5d0 * (gaa(i+xoffset,j+yoffset,k+zoffset) + gaa(i,j,k))
- gxyh = 0.5d0 * (gab(i+xoffset,j+yoffset,k+zoffset) + gab(i,j,k))
- gxzh = 0.5d0 * (gac(i+xoffset,j+yoffset,k+zoffset) + gac(i,j,k))
- gyyh = 0.5d0 * (gbb(i+xoffset,j+yoffset,k+zoffset) + gbb(i,j,k))
- gyzh = 0.5d0 * (gbc(i+xoffset,j+yoffset,k+zoffset) + gbc(i,j,k))
- gzzh = 0.5d0 * (gcc(i+xoffset,j+yoffset,k+zoffset) + gcc(i,j,k))
+ gxxh = 0.5d0 * (g11(i+xoffset,j+yoffset,k+zoffset) + g11(i,j,k))
+ gxyh = 0.5d0 * (g12(i+xoffset,j+yoffset,k+zoffset) + g12(i,j,k))
+ gxzh = 0.5d0 * (g13(i+xoffset,j+yoffset,k+zoffset) + g13(i,j,k))
+ gyyh = 0.5d0 * (g22(i+xoffset,j+yoffset,k+zoffset) + g22(i,j,k))
+ gyzh = 0.5d0 * (g23(i+xoffset,j+yoffset,k+zoffset) + g23(i,j,k))
+ gzzh = 0.5d0 * (g33(i+xoffset,j+yoffset,k+zoffset) + g33(i,j,k))
avg_det = SPATIAL_DETERMINANT(gxxh,gxyh,gxzh,\
gyyh,gyzh,gzzh)
@@ -427,6 +458,37 @@ subroutine GRHydro_HLLE_Tracer(CCTK_ARGUMENTS)
CCTK_INT :: type_bits, trivial, not_trivial
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET betaa, betab, betac
+ TARGET betax, betay, betaz
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: beta1, beta2, beta3
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ beta1 => betaa
+ beta2 => betab
+ beta3 => betac
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ beta1 => betax
+ beta2 => betay
+ beta3 => betaz
+ end if
+
if (flux_direction == 1) then
call SpaceMask_GetTypeBits(type_bits, "Hydro_RiemannProblemX")
call SpaceMask_GetStateBits(trivial, "Hydro_RiemannProblemX", &
@@ -467,26 +529,26 @@ subroutine GRHydro_HLLE_Tracer(CCTK_ARGUMENTS)
!!$ left and right points.
if (flux_direction == 1) then
- avg_beta = 0.5d0 * (betaa(i+xoffset,j+yoffset,k+zoffset) + &
- betaa(i,j,k))
+ avg_beta = 0.5d0 * (beta1(i+xoffset,j+yoffset,k+zoffset) + &
+ beta1(i,j,k))
else if (flux_direction == 2) then
- avg_beta = 0.5d0 * (betab(i+xoffset,j+yoffset,k+zoffset) + &
- betab(i,j,k))
+ avg_beta = 0.5d0 * (beta2(i+xoffset,j+yoffset,k+zoffset) + &
+ beta2(i,j,k))
else if (flux_direction == 3) then
- avg_beta = 0.5d0 * (betac(i+xoffset,j+yoffset,k+zoffset) + &
- betac(i,j,k))
+ avg_beta = 0.5d0 * (beta3(i+xoffset,j+yoffset,k+zoffset) + &
+ beta3(i,j,k))
else
call CCTK_WARN(0, "Flux direction not x,y,z")
end if
avg_alp = 0.5 * (alp(i,j,k) + alp(i+xoffset,j+yoffset,k+zoffset))
- gxxh = 0.5d0 * (gaa(i+xoffset,j+yoffset,k+zoffset) + gaa(i,j,k))
- gxyh = 0.5d0 * (gab(i+xoffset,j+yoffset,k+zoffset) + gab(i,j,k))
- gxzh = 0.5d0 * (gac(i+xoffset,j+yoffset,k+zoffset) + gac(i,j,k))
- gyyh = 0.5d0 * (gbb(i+xoffset,j+yoffset,k+zoffset) + gbb(i,j,k))
- gyzh = 0.5d0 * (gbc(i+xoffset,j+yoffset,k+zoffset) + gbc(i,j,k))
- gzzh = 0.5d0 * (gcc(i+xoffset,j+yoffset,k+zoffset) + gcc(i,j,k))
+ gxxh = 0.5d0 * (g11(i+xoffset,j+yoffset,k+zoffset) + g11(i,j,k))
+ gxyh = 0.5d0 * (g12(i+xoffset,j+yoffset,k+zoffset) + g12(i,j,k))
+ gxzh = 0.5d0 * (g13(i+xoffset,j+yoffset,k+zoffset) + g13(i,j,k))
+ gyyh = 0.5d0 * (g22(i+xoffset,j+yoffset,k+zoffset) + g22(i,j,k))
+ gyzh = 0.5d0 * (g23(i+xoffset,j+yoffset,k+zoffset) + g23(i,j,k))
+ gzzh = 0.5d0 * (g33(i+xoffset,j+yoffset,k+zoffset) + g33(i,j,k))
avg_det = SPATIAL_DETERMINANT(gxxh,gxyh,gxzh,\
gyyh,gyzh,gzzh)
diff --git a/src/GRHydro_Jacobian_state.c b/src/GRHydro_Jacobian_state.c
index 4dd6f47..0c26460 100644
--- a/src/GRHydro_Jacobian_state.c
+++ b/src/GRHydro_Jacobian_state.c
@@ -1,3 +1,5 @@
+#include <assert.h>
+
#include "cctk.h"
#include "cctk_Arguments.h"
#include "cctk_Parameters.h"
@@ -15,13 +17,29 @@ GRHydro_check_Jacobian_state (CCTK_ARGUMENTS)
DECLARE_CCTK_PARAMETERS
int ierr;
+ static CCTK_INT idxJacobian_state = -1, idxiJacobian_state = -1;
+
+ if (!CCTK_IsImplementationActive("Coordinates"))
+ return; /* Multipatch infrastructure not active */
+
+ if (idxJacobian_state == -1)
+ {
+ idxJacobian_state = CCTK_VarIndex("Coordinates::jacobian_state");
+ assert(idxJacobian_state >= 0);
+ }
+
+ if (idxiJacobian_state == -1)
+ {
+ idxiJacobian_state = CCTK_VarIndex("Coordinates::inverse_jacobian_state");
+ assert(idxiJacobian_state >= 0);
+ }
- if (*jacobian_state == 0)
+ if (*(CCTK_INT *)CCTK_VarDataPtrI(cctkGH, 0, idxJacobian_state) == 0)
{
CCTK_WARN(0, "GRHydro requires storage for Jacobians. Please tell your Coordinates implementation to store the Jacobians!");
}
- if (*inverse_jacobian_state == 0)
+ if (*(CCTK_INT *)CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian_state) == 0)
{
CCTK_WARN(0, "GRHydro requires storage for inverse Jacobians. Please tell your Coordinates implementation to store the inverse Jacobians!");
}
diff --git a/src/GRHydro_PPMMReconstruct_drv.F90 b/src/GRHydro_PPMMReconstruct_drv.F90
index a8058cc..2eecf6f 100644
--- a/src/GRHydro_PPMMReconstruct_drv.F90
+++ b/src/GRHydro_PPMMReconstruct_drv.F90
@@ -14,9 +14,9 @@
#include "SpaceMask.h"
-#define velx(i,j,k) lvel(i,j,k,1)
-#define vely(i,j,k) lvel(i,j,k,2)
-#define velz(i,j,k) lvel(i,j,k,3)
+#define velx(i,j,k) vup(i,j,k,1)
+#define vely(i,j,k) vup(i,j,k,2)
+#define velz(i,j,k) vup(i,j,k,3)
#define sx(i,j,k) scon(i,j,k,1)
#define sy(i,j,k) scon(i,j,k,2)
#define sz(i,j,k) scon(i,j,k,3)
@@ -64,6 +64,41 @@ subroutine GRHydro_PPMMReconstruct_drv(CCTK_ARGUMENTS)
CCTK_INT :: ierr
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET betaa, betab, betac
+ TARGET betax, betay, betaz
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: beta1, beta2, beta3
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ beta1 => betaa
+ beta2 => betab
+ beta3 => betac
+ vup => lvel
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ beta1 => betax
+ beta2 => betay
+ beta3 => betaz
+ vup => vel
+ end if
+
allocate(trivial_rp(cctk_lsh(1),cctk_lsh(2),cctk_lsh(3)),STAT=ierr)
if (ierr .ne. 0) then
call CCTK_WARN(0, "Allocation problems with trivial_rp")
@@ -152,8 +187,8 @@ subroutine GRHydro_PPMMReconstruct_drv(CCTK_ARGUMENTS)
rhoplus(:,j,k),velxplus(:,j,k),velyplus(:,j,k),velzplus(:,j,k),&
Bvecxplus(:,j,k),Bvecyplus(:,j,k),Bveczplus(:,j,k),psidcplus(:,j,k),epsplus(:,j,k),&
1,trivial_rp(:,j,k), hydro_excision_mask(:,j,k),&
- gxx(:,j,k), gxy(:,j,k), gxz(:,j,k), gyy(:,j,k), gyz(:,j,k), &
- gzz(:,j,k), betaa(:,j,k), alp(:,j,k),&
+ g11(:,j,k), g12(:,j,k), g13(:,j,k), g22(:,j,k), g23(:,j,k), &
+ g33(:,j,k), beta1(:,j,k), alp(:,j,k),&
w_lorentz(:,j,k), &
1, j, k, nx, ny, nz, GRHydro_mppm_eigenvalue_x_left, &
GRHydro_mppm_eigenvalue_x_right, &
@@ -167,8 +202,8 @@ subroutine GRHydro_PPMMReconstruct_drv(CCTK_ARGUMENTS)
rhoplus(:,j,k),velxplus(:,j,k),velyplus(:,j,k),velzplus(:,j,k),&
Bvecxplus(:,j,k),Bvecyplus(:,j,k),Bveczplus(:,j,k),dump(:,j,k),epsplus(:,j,k),&
0,trivial_rp(:,j,k), hydro_excision_mask(:,j,k),&
- gxx(:,j,k), gxy(:,j,k), gxz(:,j,k), gyy(:,j,k), gyz(:,j,k), &
- gzz(:,j,k), betaa(:,j,k), alp(:,j,k),&
+ g11(:,j,k), g12(:,j,k), g13(:,j,k), g22(:,j,k), g23(:,j,k), &
+ g33(:,j,k), beta1(:,j,k), alp(:,j,k),&
w_lorentz(:,j,k), &
1, j, k, nx, ny, nz, GRHydro_mppm_eigenvalue_x_left, &
GRHydro_mppm_eigenvalue_x_right, &
@@ -223,8 +258,8 @@ subroutine GRHydro_PPMMReconstruct_drv(CCTK_ARGUMENTS)
rhoplus(j,:,k),velyplus(j,:,k),velzplus(j,:,k),velxplus(j,:,k),&
Bvecyplus(j,:,k),Bveczplus(j,:,k),Bvecxplus(j,:,k),psidcplus(j,:,k),epsplus(j,:,k),&
1,trivial_rp(j,:,k), hydro_excision_mask(j,:,k),&
- gyy(j,:,k), gyz(j,:,k), gxy(j,:,k), gzz(j,:,k), gxz(j,:,k), &
- gxx(j,:,k), betab(j,:,k), alp(j,:,k),&
+ g22(j,:,k), g23(j,:,k), g12(j,:,k), g33(j,:,k), g13(j,:,k), &
+ g11(j,:,k), beta2(j,:,k), alp(j,:,k),&
w_lorentz(j,:,k), &
2, j, k, nx, ny, nz, GRHydro_mppm_eigenvalue_y_left, &
GRHydro_mppm_eigenvalue_y_right, &
@@ -238,8 +273,8 @@ subroutine GRHydro_PPMMReconstruct_drv(CCTK_ARGUMENTS)
rhoplus(j,:,k),velyplus(j,:,k),velzplus(j,:,k),velxplus(j,:,k),&
Bvecyplus(j,:,k),Bveczplus(j,:,k),Bvecxplus(j,:,k),dump(j,:,k),epsplus(j,:,k),&
0,trivial_rp(j,:,k), hydro_excision_mask(j,:,k),&
- gyy(j,:,k), gyz(j,:,k), gxy(j,:,k), gzz(j,:,k), gxz(j,:,k), &
- gxx(j,:,k), betab(j,:,k), alp(j,:,k),&
+ g22(j,:,k), g23(j,:,k), g12(j,:,k), g33(j,:,k), g13(j,:,k), &
+ g11(j,:,k), beta2(j,:,k), alp(j,:,k),&
w_lorentz(j,:,k), &
2, j, k, nx, ny, nz, GRHydro_mppm_eigenvalue_y_left, &
GRHydro_mppm_eigenvalue_y_right, &
@@ -293,8 +328,8 @@ subroutine GRHydro_PPMMReconstruct_drv(CCTK_ARGUMENTS)
rhoplus(j,k,:),velzplus(j,k,:),velxplus(j,k,:),velyplus(j,k,:),&
Bveczplus(j,k,:),Bvecxplus(j,k,:),Bvecyplus(j,k,:),psidcplus(j,k,:),epsplus(j,k,:),&
1,trivial_rp(j,k,:), hydro_excision_mask(j,k,:),&
- gzz(j,k,:), gxz(j,k,:), gyz(j,k,:), gxx(j,k,:), gxy(j,k,:), &
- gyy(j,k,:), betac(j,k,:), alp(j,k,:),&
+ g33(j,k,:), g13(j,k,:), g23(j,k,:), g11(j,k,:), g12(j,k,:), &
+ g22(j,k,:), beta3(j,k,:), alp(j,k,:),&
w_lorentz(j,k,:), &
3, j, k, nx, ny, nz, GRHydro_mppm_eigenvalue_z_left, &
GRHydro_mppm_eigenvalue_z_right, &
@@ -308,8 +343,8 @@ subroutine GRHydro_PPMMReconstruct_drv(CCTK_ARGUMENTS)
rhoplus(j,k,:),velzplus(j,k,:),velxplus(j,k,:),velyplus(j,k,:),&
Bveczplus(j,k,:),Bvecxplus(j,k,:),Bvecyplus(j,k,:),dump(j,k,:),epsplus(j,k,:),&
0,trivial_rp(j,k,:), hydro_excision_mask(j,k,:),&
- gzz(j,k,:), gxz(j,k,:), gyz(j,k,:), gxx(j,k,:), gxy(j,k,:), &
- gyy(j,k,:), betac(j,k,:), alp(j,k,:),&
+ g33(j,k,:), g13(j,k,:), g23(j,k,:), g11(j,k,:), g12(j,k,:), &
+ g22(j,k,:), beta3(j,k,:), alp(j,k,:),&
w_lorentz(j,k,:), &
3, j, k, nx, ny, nz, GRHydro_mppm_eigenvalue_z_left, &
GRHydro_mppm_eigenvalue_z_right, &
diff --git a/src/GRHydro_PPMReconstruct_drv.F90 b/src/GRHydro_PPMReconstruct_drv.F90
index 2ecbb71..aff5b7d 100644
--- a/src/GRHydro_PPMReconstruct_drv.F90
+++ b/src/GRHydro_PPMReconstruct_drv.F90
@@ -14,9 +14,9 @@
#include "SpaceMask.h"
-#define velx(i,j,k) lvel(i,j,k,1)
-#define vely(i,j,k) lvel(i,j,k,2)
-#define velz(i,j,k) lvel(i,j,k,3)
+#define velx(i,j,k) vup(i,j,k,1)
+#define vely(i,j,k) vup(i,j,k,2)
+#define velz(i,j,k) vup(i,j,k,3)
#define sx(i,j,k) scon(i,j,k,1)
#define sy(i,j,k) scon(i,j,k,2)
#define sz(i,j,k) scon(i,j,k,3)
@@ -55,6 +55,41 @@ subroutine GRHydro_PPMReconstruct_drv(CCTK_ARGUMENTS)
CCTK_INT :: ierr
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET betaa, betab, betac
+ TARGET betax, betay, betaz
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: beta1, beta2, beta3
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ beta1 => betaa
+ beta2 => betab
+ beta3 => betac
+ vup => lvel
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ beta1 => betax
+ beta2 => betay
+ beta3 => betaz
+ vup => vel
+ end if
+
allocate(trivial_rp(cctk_lsh(1),cctk_lsh(2),cctk_lsh(3)),STAT=ierr)
if (ierr .ne. 0) then
call CCTK_WARN(0, "Allocation problems with trivial_rp")
@@ -125,8 +160,8 @@ subroutine GRHydro_PPMReconstruct_drv(CCTK_ARGUMENTS)
velzminus(:,j,k),epsminus(:,j,k),rhoplus(:,j,k),&
velxplus(:,j,k),velyplus(:,j,k),velzplus(:,j,k),epsplus(:,j,k),&
trivial_rp(:,j,k), hydro_excision_mask(:,j,k),&
- gaa(:,j,k), gab(:,j,k), gac(:,j,k), gbb(:,j,k), gbc(:,j,k), &
- gcc(:,j,k), betaa(:,j,k), alp(:,j,k),&
+ gxx(:,j,k), g12(:,j,k), g13(:,j,k), g22(:,j,k), g23(:,j,k), &
+ g33(:,j,k), beta1(:,j,k), alp(:,j,k),&
w_lorentz(:,j,k), &
1, j, k, nx, ny, nz, GRHydro_mppm_eigenvalue_x_left, &
GRHydro_mppm_eigenvalue_x_right, &
@@ -176,8 +211,8 @@ subroutine GRHydro_PPMReconstruct_drv(CCTK_ARGUMENTS)
velxminus(j,:,k),epsminus(j,:,k),rhoplus(j,:,k),&
velyplus(j,:,k),velzplus(j,:,k),velxplus(j,:,k),epsplus(j,:,k),&
trivial_rp(j,:,k), hydro_excision_mask(j,:,k),&
- gbb(j,:,k), gbc(j,:,k), gab(j,:,k), gcc(j,:,k), gac(j,:,k), &
- gaa(j,:,k), betab(j,:,k), alp(j,:,k),&
+ g22(j,:,k), g23(j,:,k), g12(j,:,k), g33(j,:,k), g13(j,:,k), &
+ gxx(j,:,k), beta2(j,:,k), alp(j,:,k),&
w_lorentz(j,:,k), &
2, j, k, nx, ny, nz, GRHydro_mppm_eigenvalue_y_left, &
GRHydro_mppm_eigenvalue_y_right, &
@@ -227,8 +262,8 @@ subroutine GRHydro_PPMReconstruct_drv(CCTK_ARGUMENTS)
velyminus(j,k,:),epsminus(j,k,:),rhoplus(j,k,:),&
velzplus(j,k,:),velxplus(j,k,:),velyplus(j,k,:),epsplus(j,k,:),&
trivial_rp(j,k,:), hydro_excision_mask(j,k,:),&
- gcc(j,k,:), gac(j,k,:), gbc(j,k,:), gaa(j,k,:), gab(j,k,:), &
- gbb(j,k,:), betac(j,k,:), alp(j,k,:),&
+ g33(j,k,:), g13(j,k,:), g23(j,k,:), gxx(j,k,:), g12(j,k,:), &
+ g22(j,k,:), beta3(j,k,:), alp(j,k,:),&
w_lorentz(j,k,:), &
3, j, k, nx, ny, nz, GRHydro_mppm_eigenvalue_z_left, &
GRHydro_mppm_eigenvalue_z_right, &
diff --git a/src/GRHydro_ParamCheck.F90 b/src/GRHydro_ParamCheck.F90
index 181a1cb..9310448 100644
--- a/src/GRHydro_ParamCheck.F90
+++ b/src/GRHydro_ParamCheck.F90
@@ -35,6 +35,8 @@ subroutine GRHydro_ParamCheck(CCTK_ARGUMENTS)
DECLARE_CCTK_PARAMETERS
DECLARE_CCTK_FUNCTIONS
+ integer :: coordinates_is_active
+
if (GRHydro_stencil > minval(cctk_nghostzones)) then
call CCTK_PARAMWARN("The stencil is larger than the number of ghost zones. Answer will be dependent on processor number...")
end if
@@ -104,6 +106,13 @@ subroutine GRHydro_ParamCheck(CCTK_ARGUMENTS)
evolve_temper = 0
endif
+ call CCTK_IsImplementationActive(coordinates_is_active, "Coordinates")
+ ! this test is somewhat overzealous but we cannot access
+ ! coordinates::general_coordinates yet since it is only set in BaseGrid
+ if (CCTK_Equals(riemann_solver,"HLLE").eq.0.and.coordinates_is_active.ne.0) then
+ call CCTK_WARN(0, "There is currently no Riemann solver other than HLLE compatible with multipatch!")
+ end if
+
if (CCTK_EQUALS(riemann_solver,"Roe").and.CCTK_EQUALS(Bvec_evolution_method,"GRHydro")) then
call CCTK_PARAMWARN("Roe solver is not implemented yet for MHD")
end if
diff --git a/src/GRHydro_Prim2Con.F90 b/src/GRHydro_Prim2Con.F90
index 2bd2d29..ee82403 100644
--- a/src/GRHydro_Prim2Con.F90
+++ b/src/GRHydro_Prim2Con.F90
@@ -13,9 +13,9 @@
#include "cctk_Functions.h"
#include "GRHydro_Macros.h"
-#define velx(i,j,k) lvel(i,j,k,1)
-#define vely(i,j,k) lvel(i,j,k,2)
-#define velz(i,j,k) lvel(i,j,k,3)
+#define velx(i,j,k) vup(i,j,k,1)
+#define vely(i,j,k) vup(i,j,k,2)
+#define velz(i,j,k) vup(i,j,k,3)
#define sx(i,j,k) scon(i,j,k,1)
#define sy(i,j,k) scon(i,j,k,2)
#define sz(i,j,k) scon(i,j,k,3)
@@ -44,44 +44,70 @@ subroutine primitive2conservative(CCTK_ARGUMENTS)
DECLARE_CCTK_PARAMETERS
integer :: i, j, k
- CCTK_REAL :: gaal,gabl,gacl,gbbl,gbcl,gccl,avg_detl,&
- gaar,gabr,gacr,gbbr,gbcr,gccr,avg_detr
+ CCTK_REAL :: g11l,g12l,g13l,g22l,g23l,g33l,avg_detl,&
+ g11r,g12r,g13r,g22r,g23r,g33r,avg_detr
CCTK_REAL :: xtemp(1)
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ vup => lvel
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ vup => vel
+ end if
+
if(evolve_temper.ne.1) then
!$OMP PARALLEL DO PRIVATE(i, j, k, avg_detl, avg_detr,&
- !$OMP gaal,gabl,gacl,gbbl,gbcl,gccl, &
- !$OMP gaar,gabr,gacr,gbbr,gbcr,gccr)
+ !$OMP g11l,g12l,g13l,g22l,g23l,g33l, &
+ !$OMP g11r,g12r,g13r,g22r,g23r,g33r)
do k = GRHydro_stencil,cctk_lsh(3)-GRHydro_stencil+1
do j = GRHydro_stencil,cctk_lsh(2)-GRHydro_stencil+1
do i = GRHydro_stencil,cctk_lsh(1)-GRHydro_stencil+1
- gaal = 0.5d0 * (gaa(i,j,k) + gaa(i-xoffset,j-yoffset,k-zoffset))
- gabl = 0.5d0 * (gab(i,j,k) + gab(i-xoffset,j-yoffset,k-zoffset))
- gacl = 0.5d0 * (gac(i,j,k) + gac(i-xoffset,j-yoffset,k-zoffset))
- gbbl = 0.5d0 * (gbb(i,j,k) + gbb(i-xoffset,j-yoffset,k-zoffset))
- gbcl = 0.5d0 * (gbc(i,j,k) + gbc(i-xoffset,j-yoffset,k-zoffset))
- gccl = 0.5d0 * (gcc(i,j,k) + gcc(i-xoffset,j-yoffset,k-zoffset))
- gaar = 0.5d0 * (gaa(i,j,k) + gaa(i+xoffset,j+yoffset,k+zoffset))
- gabr = 0.5d0 * (gab(i,j,k) + gab(i+xoffset,j+yoffset,k+zoffset))
- gacr = 0.5d0 * (gac(i,j,k) + gac(i+xoffset,j+yoffset,k+zoffset))
- gbbr = 0.5d0 * (gbb(i,j,k) + gbb(i+xoffset,j+yoffset,k+zoffset))
- gbcr = 0.5d0 * (gbc(i,j,k) + gbc(i+xoffset,j+yoffset,k+zoffset))
- gccr = 0.5d0 * (gcc(i,j,k) + gcc(i+xoffset,j+yoffset,k+zoffset))
+ g11l = 0.5d0 * (g11(i,j,k) + g11(i-xoffset,j-yoffset,k-zoffset))
+ g12l = 0.5d0 * (g12(i,j,k) + g12(i-xoffset,j-yoffset,k-zoffset))
+ g13l = 0.5d0 * (g13(i,j,k) + g13(i-xoffset,j-yoffset,k-zoffset))
+ g22l = 0.5d0 * (g22(i,j,k) + g22(i-xoffset,j-yoffset,k-zoffset))
+ g23l = 0.5d0 * (g23(i,j,k) + g23(i-xoffset,j-yoffset,k-zoffset))
+ g33l = 0.5d0 * (g33(i,j,k) + g33(i-xoffset,j-yoffset,k-zoffset))
+ g11r = 0.5d0 * (g11(i,j,k) + g11(i+xoffset,j+yoffset,k+zoffset))
+ g12r = 0.5d0 * (g12(i,j,k) + g12(i+xoffset,j+yoffset,k+zoffset))
+ g13r = 0.5d0 * (g13(i,j,k) + g13(i+xoffset,j+yoffset,k+zoffset))
+ g22r = 0.5d0 * (g22(i,j,k) + g22(i+xoffset,j+yoffset,k+zoffset))
+ g23r = 0.5d0 * (g23(i,j,k) + g23(i+xoffset,j+yoffset,k+zoffset))
+ g33r = 0.5d0 * (g33(i,j,k) + g33(i+xoffset,j+yoffset,k+zoffset))
- avg_detl = SPATIAL_DETERMINANT(gaal,gabl,gacl,gbbl, gbcl,gccl)
- avg_detr = SPATIAL_DETERMINANT(gaar,gabr,gacr,gbbr, gbcr,gccr)
+ avg_detl = SPATIAL_DETERMINANT(g11l,g12l,g13l,g22l, g23l,g33l)
+ avg_detr = SPATIAL_DETERMINANT(g11r,g12r,g13r,g22r, g23r,g33r)
- call prim2con(GRHydro_eos_handle, gaal,gabl,gacl,gbbl,&
- gbcl,gccl, &
+ call prim2con(GRHydro_eos_handle, g11l,g12l,g13l,g22l,&
+ g23l,g33l, &
avg_detl,densminus(i,j,k),sxminus(i,j,k),&
syminus(i,j,k),szminus(i,j,k),tauminus(i,j,k),&
rhominus(i,j,k), &
velxminus(i,j,k),velyminus(i,j,k),velzminus(i,j,k),&
epsminus(i,j,k),pressminus(i,j,k),w_lorentzminus(i, j, k))
- call prim2con(GRHydro_eos_handle, gaar,gabr,gacr,&
- gbbr,gbcr,gccr, &
+ call prim2con(GRHydro_eos_handle, g11r,g12r,g13r,&
+ g22r,g23r,g33r, &
avg_detr, densplus(i,j,k),sxplus(i,j,k),&
syplus(i,j,k),szplus(i,j ,k),tauplus(i,j,k),&
rhoplus(i,j,k),velxplus(i,j,k),velyplus(i,j,k),&
@@ -94,27 +120,27 @@ subroutine primitive2conservative(CCTK_ARGUMENTS)
!$OMP END PARALLEL DO
else
!$OMP PARALLEL DO PRIVATE(i, j, k, avg_detl, avg_detr, xtemp,&
- !$OMP gaal,gabl,gacl,gbbl,gbcl,gccl, &
- !$OMP gaar,gabr,gacr,gbbr,gbcr,gccr)
+ !$OMP g11l,g12l,g13l,g22l,g23l,g33l, &
+ !$OMP g11r,g12r,g13r,g22r,g23r,g33r)
do k = GRHydro_stencil,cctk_lsh(3)-GRHydro_stencil+1
do j = GRHydro_stencil,cctk_lsh(2)-GRHydro_stencil+1
do i = GRHydro_stencil,cctk_lsh(1)-GRHydro_stencil+1
- gaal = 0.5d0 * (gaa(i,j,k) + gaa(i-xoffset,j-yoffset,k-zoffset))
- gabl = 0.5d0 * (gab(i,j,k) + gab(i-xoffset,j-yoffset,k-zoffset))
- gacl = 0.5d0 * (gac(i,j,k) + gac(i-xoffset,j-yoffset,k-zoffset))
- gbbl = 0.5d0 * (gbb(i,j,k) + gbb(i-xoffset,j-yoffset,k-zoffset))
- gbcl = 0.5d0 * (gbc(i,j,k) + gbc(i-xoffset,j-yoffset,k-zoffset))
- gccl = 0.5d0 * (gcc(i,j,k) + gcc(i-xoffset,j-yoffset,k-zoffset))
- gaar = 0.5d0 * (gaa(i,j,k) + gaa(i+xoffset,j+yoffset,k+zoffset))
- gabr = 0.5d0 * (gab(i,j,k) + gab(i+xoffset,j+yoffset,k+zoffset))
- gacr = 0.5d0 * (gac(i,j,k) + gac(i+xoffset,j+yoffset,k+zoffset))
- gbbr = 0.5d0 * (gbb(i,j,k) + gbb(i+xoffset,j+yoffset,k+zoffset))
- gbcr = 0.5d0 * (gbc(i,j,k) + gbc(i+xoffset,j+yoffset,k+zoffset))
- gccr = 0.5d0 * (gcc(i,j,k) + gcc(i+xoffset,j+yoffset,k+zoffset))
+ g11l = 0.5d0 * (g11(i,j,k) + g11(i-xoffset,j-yoffset,k-zoffset))
+ g12l = 0.5d0 * (g12(i,j,k) + g12(i-xoffset,j-yoffset,k-zoffset))
+ g13l = 0.5d0 * (g13(i,j,k) + g13(i-xoffset,j-yoffset,k-zoffset))
+ g22l = 0.5d0 * (g22(i,j,k) + g22(i-xoffset,j-yoffset,k-zoffset))
+ g23l = 0.5d0 * (g23(i,j,k) + g23(i-xoffset,j-yoffset,k-zoffset))
+ g33l = 0.5d0 * (g33(i,j,k) + g33(i-xoffset,j-yoffset,k-zoffset))
+ g11r = 0.5d0 * (g11(i,j,k) + g11(i+xoffset,j+yoffset,k+zoffset))
+ g12r = 0.5d0 * (g12(i,j,k) + g12(i+xoffset,j+yoffset,k+zoffset))
+ g13r = 0.5d0 * (g13(i,j,k) + g13(i+xoffset,j+yoffset,k+zoffset))
+ g22r = 0.5d0 * (g22(i,j,k) + g22(i+xoffset,j+yoffset,k+zoffset))
+ g23r = 0.5d0 * (g23(i,j,k) + g23(i+xoffset,j+yoffset,k+zoffset))
+ g33r = 0.5d0 * (g33(i,j,k) + g33(i+xoffset,j+yoffset,k+zoffset))
- avg_detl = SPATIAL_DETERMINANT(gaal,gabl,gacl,gbbl, gbcl,gccl)
- avg_detr = SPATIAL_DETERMINANT(gaar,gabr,gacr,gbbr, gbcr,gccr)
+ avg_detl = SPATIAL_DETERMINANT(g11l,g12l,g13l,g22l, g23l,g33l)
+ avg_detr = SPATIAL_DETERMINANT(g11r,g12r,g13r,g22r, g23r,g33r)
! we do not have plus/minus vars for temperature since
! eps is reconstructed. Hence, we do not update the
@@ -124,8 +150,8 @@ subroutine primitive2conservative(CCTK_ARGUMENTS)
xtemp(1) = 0.5d0*(temperature(i,j,k) + &
temperature(i-xoffset,j-yoffset,k-zoffset))
call prim2con_hot(GRHydro_eos_handle, GRHydro_reflevel,&
- i,j,k,x(i,j,k),y(i,j,k),z(i,j,k),gaal,gabl,gacl,gbbl,&
- gbcl,gccl, &
+ i,j,k,x(i,j,k),y(i,j,k),z(i,j,k),g11l,g12l,g13l,g22l,&
+ g23l,g33l, &
avg_detl,densminus(i,j,k),sxminus(i,j,k),&
syminus(i,j,k),szminus(i,j,k),tauminus(i,j,k),&
rhominus(i,j,k), &
@@ -141,8 +167,8 @@ subroutine primitive2conservative(CCTK_ARGUMENTS)
xtemp(1) = 0.5d0*(temperature(i,j,k) + &
temperature(i+xoffset,j+yoffset,k+zoffset))
call prim2con_hot(GRHydro_eos_handle, GRHydro_reflevel, &
- i,j,k,x(i,j,k),y(i,j,k),z(i,j,k),gaar,gabr,gacr,&
- gbbr,gbcr,gccr, &
+ i,j,k,x(i,j,k),y(i,j,k),z(i,j,k),g11r,g12r,g13r,&
+ g22r,g23r,g33r, &
avg_detr, densplus(i,j,k),sxplus(i,j,k),&
syplus(i,j,k),szplus(i,j ,k),tauplus(i,j,k),&
rhoplus(i,j,k),velxplus(i,j,k),velyplus(i,j,k),&
@@ -347,18 +373,44 @@ subroutine Primitive2ConservativeCells(CCTK_ARGUMENTS)
CCTK_REAL :: det
character(len=512) :: warnline
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ vup => lvel
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ vup => vel
+ end if
+
if(evolve_temper.ne.1) then
!$OMP PARALLEL DO PRIVATE(i, j, k, det)
do k = 1,cctk_lsh(3)
do j = 1,cctk_lsh(2)
do i = 1,cctk_lsh(1)
- det = SPATIAL_DETERMINANT(gaa(i,j,k),gab(i,j,k),gac(i,j,k), \
- gbb(i,j,k),gbc(i,j,k),gcc(i,j,k))
+ det = SPATIAL_DETERMINANT(g11(i,j,k),g12(i,j,k),g13(i,j,k), \
+ g22(i,j,k),g23(i,j,k),g33(i,j,k))
- call prim2con(GRHydro_eos_handle,gaa(i,j,k),&
- gab(i,j,k),gac(i,j,k),&
- gbb(i,j,k),gbc(i,j,k),gcc(i,j,k),&
+ call prim2con(GRHydro_eos_handle,g11(i,j,k),&
+ g12(i,j,k),g13(i,j,k),&
+ g22(i,j,k),g23(i,j,k),g33(i,j,k),&
det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
tau(i,j,k),rho(i,j,k),velx(i,j,k),vely(i,j,k),velz(i,j,k),&
eps(i,j,k),press(i,j,k),w_lorentz(i,j,k))
@@ -372,13 +424,13 @@ subroutine Primitive2ConservativeCells(CCTK_ARGUMENTS)
do j = 1,cctk_lsh(2)
do i = 1,cctk_lsh(1)
- det = SPATIAL_DETERMINANT(gaa(i,j,k),gab(i,j,k),gac(i,j,k), \
- gbb(i,j,k),gbc(i,j,k),gcc(i,j,k))
+ det = SPATIAL_DETERMINANT(g11(i,j,k),g12(i,j,k),g13(i,j,k), \
+ g22(i,j,k),g23(i,j,k),g33(i,j,k))
call prim2con_hot(GRHydro_eos_handle,GRHydro_reflevel,i,j,k,&
- x(i,j,k),y(i,j,k),z(i,j,k),gaa(i,j,k),&
- gab(i,j,k),gac(i,j,k),&
- gbb(i,j,k),gbc(i,j,k),gcc(i,j,k),&
+ x(i,j,k),y(i,j,k),z(i,j,k),g11(i,j,k),&
+ g12(i,j,k),g13(i,j,k),&
+ g22(i,j,k),g23(i,j,k),g33(i,j,k),&
det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
tau(i,j,k),rho(i,j,k),velx(i,j,k),vely(i,j,k),velz(i,j,k),&
eps(i,j,k),press(i,j,k),w_lorentz(i,j,k), &
@@ -429,40 +481,66 @@ subroutine Prim2ConservativePolytype(CCTK_ARGUMENTS)
DECLARE_CCTK_PARAMETERS
integer :: i, j, k
- CCTK_REAL :: gaal,gabl,gacl,gbbl,gbcl,gccl,avg_detl,&
- gaar,gabr,gacr,gbbr,gbcr,gccr,avg_detr
+ CCTK_REAL :: g11l,g12l,g13l,g22l,g23l,g33l,avg_detl,&
+ g11r,g12r,g13r,g22r,g23r,g33r,avg_detr
+
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ vup => lvel
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ vup => vel
+ end if
- !$OMP PARALLEL DO PRIVATE(i, j, k, gaal,gabl,gacl,gbbl,gbcl,gccl,avg_detl,&
- !$OMP gaar,gabr,gacr,gbbr,gbcr,gccr,avg_detr)
+ !$OMP PARALLEL DO PRIVATE(i, j, k, g11l,g12l,g13l,g22l,g23l,g33l,avg_detl,&
+ !$OMP g11r,g12r,g13r,g22r,g23r,g33r,avg_detr)
do k = GRHydro_stencil,cctk_lsh(3)-GRHydro_stencil+1
do j = GRHydro_stencil,cctk_lsh(2)-GRHydro_stencil+1
do i = GRHydro_stencil,cctk_lsh(1)-GRHydro_stencil+1
- gaal = 0.5d0 * (gaa(i,j,k) + gaa(i-xoffset,j-yoffset,k-zoffset))
- gabl = 0.5d0 * (gab(i,j,k) + gab(i-xoffset,j-yoffset,k-zoffset))
- gacl = 0.5d0 * (gac(i,j,k) + gac(i-xoffset,j-yoffset,k-zoffset))
- gbbl = 0.5d0 * (gbb(i,j,k) + gbb(i-xoffset,j-yoffset,k-zoffset))
- gbcl = 0.5d0 * (gbc(i,j,k) + gbc(i-xoffset,j-yoffset,k-zoffset))
- gccl = 0.5d0 * (gcc(i,j,k) + gcc(i-xoffset,j-yoffset,k-zoffset))
- gaar = 0.5d0 * (gaa(i,j,k) + gaa(i+xoffset,j+yoffset,k+zoffset))
- gabr = 0.5d0 * (gab(i,j,k) + gab(i+xoffset,j+yoffset,k+zoffset))
- gacr = 0.5d0 * (gac(i,j,k) + gac(i+xoffset,j+yoffset,k+zoffset))
- gbbr = 0.5d0 * (gbb(i,j,k) + gbb(i+xoffset,j+yoffset,k+zoffset))
- gbcr = 0.5d0 * (gbc(i,j,k) + gbc(i+xoffset,j+yoffset,k+zoffset))
- gccr = 0.5d0 * (gcc(i,j,k) + gcc(i+xoffset,j+yoffset,k+zoffset))
-
- avg_detl = SPATIAL_DETERMINANT(gaal,gabl,gacl,gbbl, gbcl,gccl)
- avg_detr = SPATIAL_DETERMINANT(gaar,gabr,gacr,gbbr, gbcr,gccr)
-
- call prim2conpolytype(GRHydro_eos_handle, gaal,gabl,gacl,&
- gbbl,gbcl,gccl, &
+ g11l = 0.5d0 * (g11(i,j,k) + g11(i-xoffset,j-yoffset,k-zoffset))
+ g12l = 0.5d0 * (g12(i,j,k) + g12(i-xoffset,j-yoffset,k-zoffset))
+ g13l = 0.5d0 * (g13(i,j,k) + g13(i-xoffset,j-yoffset,k-zoffset))
+ g22l = 0.5d0 * (g22(i,j,k) + g22(i-xoffset,j-yoffset,k-zoffset))
+ g23l = 0.5d0 * (g23(i,j,k) + g23(i-xoffset,j-yoffset,k-zoffset))
+ g33l = 0.5d0 * (g33(i,j,k) + g33(i-xoffset,j-yoffset,k-zoffset))
+ g11r = 0.5d0 * (g11(i,j,k) + g11(i+xoffset,j+yoffset,k+zoffset))
+ g12r = 0.5d0 * (g12(i,j,k) + g12(i+xoffset,j+yoffset,k+zoffset))
+ g13r = 0.5d0 * (g13(i,j,k) + g13(i+xoffset,j+yoffset,k+zoffset))
+ g22r = 0.5d0 * (g22(i,j,k) + g22(i+xoffset,j+yoffset,k+zoffset))
+ g23r = 0.5d0 * (g23(i,j,k) + g23(i+xoffset,j+yoffset,k+zoffset))
+ g33r = 0.5d0 * (g33(i,j,k) + g33(i+xoffset,j+yoffset,k+zoffset))
+
+ avg_detl = SPATIAL_DETERMINANT(g11l,g12l,g13l,g22l, g23l,g33l)
+ avg_detr = SPATIAL_DETERMINANT(g11r,g12r,g13r,g22r, g23r,g33r)
+
+ call prim2conpolytype(GRHydro_eos_handle, g11l,g12l,g13l,&
+ g22l,g23l,g33l, &
avg_detl,densminus(i,j,k),sxminus(i,j,k),&
syminus(i,j,k),szminus(i,j,k),tauminus(i,j,k),rhominus(i,j,k), &
velxminus(i,j,k),velyminus(i,j,k),velzminus(i,j,k),&
epsminus(i,j,k),pressminus(i,j,k),w_lorentzminus(i, j, k))
- call prim2conpolytype(GRHydro_eos_handle, gaar,gabr,gacr,&
- gbbr,gbcr,gccr, &
+ call prim2conpolytype(GRHydro_eos_handle, g11r,g12r,g13r,&
+ g22r,g23r,g33r, &
avg_detr, densplus(i,j,k),sxplus(i,j,k),&
syplus(i,j,k),szplus(i,j ,k),tauplus(i,j,k),&
rhoplus(i,j,k),velxplus(i,j,k),velyplus(i,j,k),&
@@ -580,17 +658,43 @@ subroutine Primitive2ConservativePolyCells(CCTK_ARGUMENTS)
CCTK_INT :: i, j, k
CCTK_REAL :: det
+
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ vup => lvel
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ vup => vel
+ end if
!$OMP PARALLEL DO PRIVATE(i, j, k, det)
do k = 1,cctk_lsh(3)
do j = 1,cctk_lsh(2)
do i = 1,cctk_lsh(1)
- det = SPATIAL_DETERMINANT(gaa(i,j,k),gab(i,j,k),gac(i,j,k),\
- gbb(i,j,k),gbc(i,j,k),gcc(i,j,k))
+ det = SPATIAL_DETERMINANT(g11(i,j,k),g12(i,j,k),g13(i,j,k),\
+ g22(i,j,k),g23(i,j,k),g33(i,j,k))
- call prim2conpolytype(GRHydro_eos_handle,gaa(i,j,k),gab(i,j,k),&
- gac(i,j,k),gbb(i,j,k),gbc(i,j,k),gcc(i,j,k),&
+ call prim2conpolytype(GRHydro_eos_handle,g11(i,j,k),g12(i,j,k),&
+ g13(i,j,k),g22(i,j,k),g23(i,j,k),g33(i,j,k),&
det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
tau(i,j,k),rho(i,j,k),velx(i,j,k),vely(i,j,k),velz(i,j,k),&
eps(i,j,k),press(i,j,k),w_lorentz(i,j,k))
@@ -637,46 +741,68 @@ subroutine Prim2ConservativeTracer(CCTK_ARGUMENTS)
DECLARE_CCTK_PARAMETERS
integer :: i, j, k
- CCTK_REAL :: gaal,gabl,gacl,gbbl,gbcl,gccl,avg_detl,&
- gaar,gabr,gacr,gbbr,gbcr,gccr,avg_detr
+ CCTK_REAL :: g11l,g12l,g13l,g22l,g23l,g33l,avg_detl,&
+ g11r,g12r,g13r,g22r,g23r,g33r,avg_detr
+
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ 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
+ end if
do k = GRHydro_stencil,cctk_lsh(3)-GRHydro_stencil+1
do j = GRHydro_stencil,cctk_lsh(2)-GRHydro_stencil+1
do i = GRHydro_stencil,cctk_lsh(1)-GRHydro_stencil+1
- gaal = 0.5d0 * (gaa(i,j,k) + gaa(i-xoffset,j-yoffset,k-zoffset))
- gabl = 0.5d0 * (gab(i,j,k) + gab(i-xoffset,j-yoffset,k-zoffset))
- gacl = 0.5d0 * (gac(i,j,k) + gac(i-xoffset,j-yoffset,k-zoffset))
- gbbl = 0.5d0 * (gbb(i,j,k) + gbb(i-xoffset,j-yoffset,k-zoffset))
- gbcl = 0.5d0 * (gbc(i,j,k) + gbc(i-xoffset,j-yoffset,k-zoffset))
- gccl = 0.5d0 * (gcc(i,j,k) + gcc(i-xoffset,j-yoffset,k-zoffset))
- gaar = 0.5d0 * (gaa(i,j,k) + gaa(i+xoffset,j+yoffset,k+zoffset))
- gabr = 0.5d0 * (gab(i,j,k) + gab(i+xoffset,j+yoffset,k+zoffset))
- gacr = 0.5d0 * (gac(i,j,k) + gac(i+xoffset,j+yoffset,k+zoffset))
- gbbr = 0.5d0 * (gbb(i,j,k) + gbb(i+xoffset,j+yoffset,k+zoffset))
- gbcr = 0.5d0 * (gbc(i,j,k) + gbc(i+xoffset,j+yoffset,k+zoffset))
- gccr = 0.5d0 * (gcc(i,j,k) + gcc(i+xoffset,j+yoffset,k+zoffset))
-
- avg_detl = SPATIAL_DETERMINANT(gaal,gabl,gacl,gbbl, gbcl,gccl)
- avg_detr = SPATIAL_DETERMINANT(gaar,gabr,gacr,gbbr, gbcr,gccr)
+ g11l = 0.5d0 * (g11(i,j,k) + g11(i-xoffset,j-yoffset,k-zoffset))
+ g12l = 0.5d0 * (g12(i,j,k) + g12(i-xoffset,j-yoffset,k-zoffset))
+ g13l = 0.5d0 * (g13(i,j,k) + g13(i-xoffset,j-yoffset,k-zoffset))
+ g22l = 0.5d0 * (g22(i,j,k) + g22(i-xoffset,j-yoffset,k-zoffset))
+ g23l = 0.5d0 * (g23(i,j,k) + g23(i-xoffset,j-yoffset,k-zoffset))
+ g33l = 0.5d0 * (g33(i,j,k) + g33(i-xoffset,j-yoffset,k-zoffset))
+ g11r = 0.5d0 * (g11(i,j,k) + g11(i+xoffset,j+yoffset,k+zoffset))
+ g12r = 0.5d0 * (g12(i,j,k) + g12(i+xoffset,j+yoffset,k+zoffset))
+ g13r = 0.5d0 * (g13(i,j,k) + g13(i+xoffset,j+yoffset,k+zoffset))
+ g22r = 0.5d0 * (g22(i,j,k) + g22(i+xoffset,j+yoffset,k+zoffset))
+ g23r = 0.5d0 * (g23(i,j,k) + g23(i+xoffset,j+yoffset,k+zoffset))
+ g33r = 0.5d0 * (g33(i,j,k) + g33(i+xoffset,j+yoffset,k+zoffset))
+
+ avg_detl = SPATIAL_DETERMINANT(g11l,g12l,g13l,g22l, g23l,g33l)
+ avg_detr = SPATIAL_DETERMINANT(g11r,g12r,g13r,g22r, g23r,g33r)
cons_tracerplus(i,j,k,:) = tracerplus(i,j,k,:) * &
sqrt(avg_detr) * rhoplus(i,j,k) / &
sqrt(1.d0 - &
- (gaar * velxplus(i,j,k)**2 + &
- gbbr * velyplus(i,j,k)**2 + &
- gccr * velzplus(i,j,k)**2 + &
- 2.d0 * (gabr * velxplus(i,j,k) * velyplus(i,j,k) + &
- gacr * velxplus(i,j,k) * velzplus(i,j,k) + &
- gbcr * velyplus(i,j,k) * velzplus(i,j,k) ) ) )
+ (g11r * velxplus(i,j,k)**2 + &
+ g22r * velyplus(i,j,k)**2 + &
+ g33r * velzplus(i,j,k)**2 + &
+ 2.d0 * (g12r * velxplus(i,j,k) * velyplus(i,j,k) + &
+ g13r * velxplus(i,j,k) * velzplus(i,j,k) + &
+ g23r * velyplus(i,j,k) * velzplus(i,j,k) ) ) )
cons_tracerminus(i,j,k,:) = tracerminus(i,j,k,:) * &
sqrt(avg_detl) * rhominus(i,j,k) / &
sqrt(1.d0 - &
- (gaal * velxminus(i,j,k)**2 + &
- gbbl * velyminus(i,j,k)**2 + &
- gccl * velzminus(i,j,k)**2 + &
- 2.d0 * (gabl * velxminus(i,j,k) * velyminus(i,j,k) + &
- gacl * velxminus(i,j,k) * velzminus(i,j,k) + &
- gbcl * velyminus(i,j,k) * velzminus(i,j,k) ) ) )
+ (g11l * velxminus(i,j,k)**2 + &
+ g22l * velyminus(i,j,k)**2 + &
+ g33l * velzminus(i,j,k)**2 + &
+ 2.d0 * (g12l * velxminus(i,j,k) * velyminus(i,j,k) + &
+ g13l * velxminus(i,j,k) * velzminus(i,j,k) + &
+ g23l * velyminus(i,j,k) * velzminus(i,j,k) ) ) )
end do
end do
diff --git a/src/GRHydro_RegisterVars.cc b/src/GRHydro_RegisterVars.cc
index 5e91721..43346ed 100644
--- a/src/GRHydro_RegisterVars.cc
+++ b/src/GRHydro_RegisterVars.cc
@@ -13,6 +13,8 @@
using namespace std;
+extern "C" CCTK_INT GRHydro_UseGeneralCoordinates(const cGH * cctkGH);
+
// Utility functions to register variables with MoL
// Note: We could check for the return value here, but MoL issues a
// level 0 warning in that case anyway. If that changes in the
@@ -37,6 +39,8 @@ extern "C"void GRHydro_Register(CCTK_ARGUMENTS)
DECLARE_CCTK_ARGUMENTS;
DECLARE_CCTK_PARAMETERS;
+ const int general_coordinates = GRHydro_UseGeneralCoordinates(cctkGH);
+
// We need some aliased functions, so we first check if they are available
string needed_funs[5] = {"MoLRegisterEvolvedGroup",
"MoLRegisterConstrainedGroup",
@@ -55,11 +59,13 @@ extern "C"void GRHydro_Register(CCTK_ARGUMENTS)
register_constrained("HydroBase::eps");
register_constrained("HydroBase::w_lorentz");
register_constrained("HydroBase::vel");
- register_constrained("GRHydro::lvel");
+ if (general_coordinates) {
+ register_constrained("GRHydro::lvel");
- register_constrained("grhydro::local_shift");
- register_constrained("grhydro::local_metric");
- register_constrained("grhydro::local_extrinsic_curvature");
+ register_constrained("grhydro::local_shift");
+ register_constrained("grhydro::local_metric");
+ register_constrained("grhydro::local_extrinsic_curvature");
+ }
if (CCTK_EQUALS(evolution_method, "GRHydro"))
{
@@ -69,7 +75,9 @@ extern "C"void GRHydro_Register(CCTK_ARGUMENTS)
if (CCTK_EQUALS(Bvec_evolution_method, "GRHydro")) {
register_constrained("HydroBase::Bvec");
- register_constrained("GRHydro::lBvec");
+ if (general_coordinates) {
+ register_constrained("GRHydro::lBvec");
+ }
register_evolved("GRHydro::Bcons", "GRHydro::Bconsrhs");
if(clean_divergence) {
register_evolved("GRHydro::psidc" , "GRHydro::psidcrhs");
diff --git a/src/GRHydro_Source.F90 b/src/GRHydro_Source.F90
index 969e88f..71dd75a 100644
--- a/src/GRHydro_Source.F90
+++ b/src/GRHydro_Source.F90
@@ -27,9 +27,9 @@
#include "cctk_Arguments.h"
#include "GRHydro_Macros.h"
-#define vela(i,j,k) lvel(i,j,k,1)
-#define velb(i,j,k) lvel(i,j,k,2)
-#define velc(i,j,k) lvel(i,j,k,3)
+#define vela(i,j,k) vup(i,j,k,1)
+#define velb(i,j,k) vup(i,j,k,2)
+#define velc(i,j,k) vup(i,j,k,3)
/*@@
@routine SourceTerms
@date Sat Jan 26 02:04:21 2002
@@ -76,6 +76,41 @@ subroutine SourceTerms(CCTK_ARGUMENTS)
logical, allocatable, dimension (:,:,:) :: force_spatial_second_order
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET betaa, betab, betac
+ TARGET betax, betay, betaz
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: beta1, beta2, beta3
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ beta1 => betaa
+ beta2 => betab
+ beta3 => betac
+ vup => lvel
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ beta1 => betax
+ beta2 => betay
+ beta3 => betaz
+ vup => vel
+ end if
+
one = 1.0d0
two = 2.0d0
half = 0.5d0
@@ -156,12 +191,12 @@ subroutine SourceTerms(CCTK_ARGUMENTS)
!!$ Set the metric terms.
- localgaa = gaa(i,j,k)
- localgab = gab(i,j,k)
- localgac = gac(i,j,k)
- localgbb = gbb(i,j,k)
- localgbc = gbc(i,j,k)
- localgcc = gcc(i,j,k)
+ localgaa = g11(i,j,k)
+ localgab = g12(i,j,k)
+ localgac = g13(i,j,k)
+ localgbb = g22(i,j,k)
+ localgbc = g23(i,j,k)
+ localgcc = g33(i,j,k)
det = SPATIAL_DETERMINANT(localgaa, localgab, localgac,\
localgbb, localgbc, localgcc)
@@ -175,37 +210,37 @@ subroutine SourceTerms(CCTK_ARGUMENTS)
rhoenthalpyW2 = (rho(i,j,k)*(one + eps(i,j,k)) + press(i,j,k))*&
w_lorentz(i,j,k)**2
- shifta = betaa(i,j,k)
- shiftb = betab(i,j,k)
- shiftc = betac(i,j,k)
+ shifta = beta1(i,j,k)
+ shiftb = beta2(i,j,k)
+ shiftc = beta3(i,j,k)
if (local_spatial_order .eq. 2) then
- da_betaa = DIFF_X_2(betaa)
- da_betab = DIFF_X_2(betab)
- da_betac = DIFF_X_2(betac)
+ da_betaa = DIFF_X_2(beta1)
+ da_betab = DIFF_X_2(beta2)
+ da_betac = DIFF_X_2(beta3)
- db_betaa = DIFF_Y_2(betaa)
- db_betab = DIFF_Y_2(betab)
- db_betac = DIFF_Y_2(betac)
+ db_betaa = DIFF_Y_2(beta1)
+ db_betab = DIFF_Y_2(beta2)
+ db_betac = DIFF_Y_2(beta3)
- dc_betaa = DIFF_Z_2(betaa)
- dc_betab = DIFF_Z_2(betab)
- dc_betac = DIFF_Z_2(betac)
+ dc_betaa = DIFF_Z_2(beta1)
+ dc_betab = DIFF_Z_2(beta2)
+ dc_betac = DIFF_Z_2(beta3)
else
- da_betaa = DIFF_X_4(betaa)
- da_betab = DIFF_X_4(betab)
- da_betac = DIFF_X_4(betac)
+ da_betaa = DIFF_X_4(beta1)
+ da_betab = DIFF_X_4(beta2)
+ da_betac = DIFF_X_4(beta3)
- db_betaa = DIFF_Y_4(betaa)
- db_betab = DIFF_Y_4(betab)
- db_betac = DIFF_Y_4(betac)
+ db_betaa = DIFF_Y_4(beta1)
+ db_betab = DIFF_Y_4(beta2)
+ db_betac = DIFF_Y_4(beta3)
- dc_betaa = DIFF_Z_4(betaa)
- dc_betab = DIFF_Z_4(betab)
- dc_betac = DIFF_Z_4(betac)
+ dc_betaa = DIFF_Z_4(beta1)
+ dc_betab = DIFF_Z_4(beta2)
+ dc_betac = DIFF_Z_4(beta3)
end if
@@ -261,45 +296,45 @@ subroutine SourceTerms(CCTK_ARGUMENTS)
if (local_spatial_order .eq. 2) then
- da_gaa = DIFF_X_2(gaa)
- da_gab = DIFF_X_2(gab)
- da_gac = DIFF_X_2(gac)
- da_gbb = DIFF_X_2(gbb)
- da_gbc = DIFF_X_2(gbc)
- da_gcc = DIFF_X_2(gcc)
- db_gaa = DIFF_Y_2(gaa)
- db_gab = DIFF_Y_2(gab)
- db_gac = DIFF_Y_2(gac)
- db_gbb = DIFF_Y_2(gbb)
- db_gbc = DIFF_Y_2(gbc)
- db_gcc = DIFF_Y_2(gcc)
- dc_gaa = DIFF_Z_2(gaa)
- dc_gab = DIFF_Z_2(gab)
- dc_gac = DIFF_Z_2(gac)
- dc_gbb = DIFF_Z_2(gbb)
- dc_gbc = DIFF_Z_2(gbc)
- dc_gcc = DIFF_Z_2(gcc)
+ da_gaa = DIFF_X_2(g11)
+ da_gab = DIFF_X_2(g12)
+ da_gac = DIFF_X_2(g13)
+ da_gbb = DIFF_X_2(g22)
+ da_gbc = DIFF_X_2(g23)
+ da_gcc = DIFF_X_2(g33)
+ db_gaa = DIFF_Y_2(g11)
+ db_gab = DIFF_Y_2(g12)
+ db_gac = DIFF_Y_2(g13)
+ db_gbb = DIFF_Y_2(g22)
+ db_gbc = DIFF_Y_2(g23)
+ db_gcc = DIFF_Y_2(g33)
+ dc_gaa = DIFF_Z_2(g11)
+ dc_gab = DIFF_Z_2(g12)
+ dc_gac = DIFF_Z_2(g13)
+ dc_gbb = DIFF_Z_2(g22)
+ dc_gbc = DIFF_Z_2(g23)
+ dc_gcc = DIFF_Z_2(g33)
else
- da_gaa = DIFF_X_4(gaa)
- da_gab = DIFF_X_4(gab)
- da_gac = DIFF_X_4(gac)
- da_gbb = DIFF_X_4(gbb)
- da_gbc = DIFF_X_4(gbc)
- da_gcc = DIFF_X_4(gcc)
- db_gaa = DIFF_Y_4(gaa)
- db_gab = DIFF_Y_4(gab)
- db_gac = DIFF_Y_4(gac)
- db_gbb = DIFF_Y_4(gbb)
- db_gbc = DIFF_Y_4(gbc)
- db_gcc = DIFF_Y_4(gcc)
- dc_gaa = DIFF_Z_4(gaa)
- dc_gab = DIFF_Z_4(gab)
- dc_gac = DIFF_Z_4(gac)
- dc_gbb = DIFF_Z_4(gbb)
- dc_gbc = DIFF_Z_4(gbc)
- dc_gcc = DIFF_Z_4(gcc)
+ da_gaa = DIFF_X_4(g11)
+ da_gab = DIFF_X_4(g12)
+ da_gac = DIFF_X_4(g13)
+ da_gbb = DIFF_X_4(g22)
+ da_gbc = DIFF_X_4(g23)
+ da_gcc = DIFF_X_4(g33)
+ db_gaa = DIFF_Y_4(g11)
+ db_gab = DIFF_Y_4(g12)
+ db_gac = DIFF_Y_4(g13)
+ db_gbb = DIFF_Y_4(g22)
+ db_gbc = DIFF_Y_4(g23)
+ db_gcc = DIFF_Y_4(g33)
+ dc_gaa = DIFF_Z_4(g11)
+ dc_gab = DIFF_Z_4(g12)
+ dc_gac = DIFF_Z_4(g13)
+ dc_gbb = DIFF_Z_4(g22)
+ dc_gbc = DIFF_Z_4(g23)
+ dc_gcc = DIFF_Z_4(g33)
end if
diff --git a/src/GRHydro_TVDReconstruct_drv.F90 b/src/GRHydro_TVDReconstruct_drv.F90
index 96a71db..97db410 100644
--- a/src/GRHydro_TVDReconstruct_drv.F90
+++ b/src/GRHydro_TVDReconstruct_drv.F90
@@ -14,9 +14,9 @@
#include "SpaceMask.h"
-#define velx(i,j,k) lvel(i,j,k,1)
-#define vely(i,j,k) lvel(i,j,k,2)
-#define velz(i,j,k) lvel(i,j,k,3)
+#define velx(i,j,k) vup(i,j,k,1)
+#define vely(i,j,k) vup(i,j,k,2)
+#define velz(i,j,k) vup(i,j,k,3)
#define sx(i,j,k) scon(i,j,k,1)
#define sy(i,j,k) scon(i,j,k,2)
#define sz(i,j,k) scon(i,j,k,3)
@@ -62,6 +62,17 @@ subroutine GRHydro_TVDReconstruct_drv(CCTK_ARGUMENTS)
CCTK_INT :: ierr
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET vel, lvel
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ vup => lvel
+ else
+ vup => vel
+ end if
+
allocate(trivial_rp(cctk_lsh(1),cctk_lsh(2),cctk_lsh(3)),STAT=ierr)
if (ierr .ne. 0) then
call CCTK_WARN(0, "Allocation problems with trivial_rp")
@@ -155,11 +166,11 @@ subroutine GRHydro_TVDReconstruct_drv(CCTK_ARGUMENTS)
rho, rhoplus, rhominus, trivial_rp, hydro_excision_mask)
call tvdreconstruct(nx, ny, nz, xoffset, yoffset, zoffset, &
- lvel(:,:,:,1), velxplus, velxminus, trivial_rp, hydro_excision_mask)
+ vup(:,:,:,1), velxplus, velxminus, trivial_rp, hydro_excision_mask)
call tvdreconstruct(nx, ny, nz, xoffset, yoffset, zoffset, &
- lvel(:,:,:,2), velyplus, velyminus, trivial_rp, hydro_excision_mask)
+ vup(:,:,:,2), velyplus, velyminus, trivial_rp, hydro_excision_mask)
call tvdreconstruct(nx, ny, nz, xoffset, yoffset, zoffset, &
- lvel(:,:,:,3), velzplus, velzminus, trivial_rp, hydro_excision_mask)
+ vup(:,:,:,3), velzplus, velzminus, trivial_rp, hydro_excision_mask)
call tvdreconstruct(nx, ny, nz, xoffset, yoffset, zoffset, &
eps, epsplus, epsminus, trivial_rp, hydro_excision_mask)
if(evolve_mhd.ne.0) then
diff --git a/src/GRHydro_TransformTensorBasis.F90 b/src/GRHydro_TransformTensorBasis.F90
deleted file mode 100644
index 1aeda46..0000000
--- a/src/GRHydro_TransformTensorBasis.F90
+++ /dev/null
@@ -1,211 +0,0 @@
-#include "cctk.h"
-#include "cctk_Parameters.h"
-#include "cctk_Arguments.h"
-
-
-subroutine GRHydroTransformADMToLocalBasis(CCTK_ARGUMENTS)
-
- implicit none
-
- DECLARE_CCTK_ARGUMENTS
- DECLARE_CCTK_PARAMETERS
-
- integer :: i,j,k
-
- if (jacobian_state .eq. 0) then
- call CCTK_WARN(0,"No storage for Jacobians allocated! Tell your coordinates implemetation to store Jacobians!")
- end if
-
- if (inverse_jacobian_state .eq. 0) then
- call CCTK_WARN(0,"No storage for Jacobians allocated! Tell your coordinates implemetation to store Jacobians!")
- end if
-
- !$OMP PARALLEL DO PRIVATE(i,j,k)
- do k=1,cctk_lsh(3)
- do j=1,cctk_lsh(2)
- do i=1,cctk_lsh(1)
- gaa(i,j,k) = iJ11(i,j,k)**2 * gxx(i,j,k) + &
- 2.0d0 * iJ11(i,j,k) * iJ21(i,j,k) * gxy(i,j,k) + &
- 2.0d0 * iJ11(i,j,k) * iJ31(i,j,k) * gxz(i,j,k) + iJ21(i,j,k)**2 * gyy(i,j,k) + &
- 2.0d0 * iJ21(i,j,k) * iJ31(i,j,k) * gyz(i,j,k) + iJ31(i,j,k)**2 * gzz(i,j,k)
-
- gab(i,j,k) = iJ11(i,j,k) * iJ12(i,j,k) * gxx(i,j,k) + &
- (iJ11(i,j,k) * iJ22(i,j,k) + iJ21(i,j,k) * iJ12(i,j,k)) * gxy(i,j,k) + &
- (iJ11(i,j,k) * iJ32(i,j,k) + iJ31(i,j,k) * iJ12(i,j,k)) * gxz(i,j,k) + &
- iJ21(i,j,k) * iJ22(i,j,k) * gyy(i,j,k) + (iJ21(i,j,k) * iJ32(i,j,k) + &
- iJ31(i,j,k) * iJ22(i,j,k)) * gyz(i,j,k) + iJ31(i,j,k) * iJ32(i,j,k) * gzz(i,j,k)
-
- gac(i,j,k) = iJ11(i,j,k) * iJ13(i,j,k) * gxx(i,j,k) + (iJ11(i,j,k) * iJ23(i,j,k) + &
- iJ21(i,j,k) * iJ13(i,j,k)) * gxy(i,j,k) + &
- (iJ11(i,j,k) * iJ33(i,j,k) + iJ31(i,j,k) * iJ13(i,j,k)) * gxz(i,j,k) + &
- iJ21(i,j,k) * iJ23(i,j,k) * gyy(i,j,k) + &
- (iJ21(i,j,k) * iJ33(i,j,k) + iJ31(i,j,k) * iJ23(i,j,k)) * gyz(i,j,k) + &
- iJ31(i,j,k) * iJ33(i,j,k) * gzz(i,j,k)
-
- gbb(i,j,k) = iJ12(i,j,k)**2 * gxx(i,j,k) + &
- 2.0d0 * iJ12(i,j,k) * iJ22(i,j,k) * gxy(i,j,k) + &
- 2.0d0 * iJ12(i,j,k) * iJ32(i,j,k) * gxz(i,j,k) + iJ22(i,j,k)**2 * gyy(i,j,k) + &
- 2.0d0 * iJ22(i,j,k) * iJ32(i,j,k) * gyz(i,j,k) + iJ32(i,j,k)**2 * gzz(i,j,k)
-
- gbc(i,j,k) = iJ12(i,j,k) * iJ13(i,j,k) * gxx(i,j,k) + &
- (iJ12(i,j,k) * iJ23(i,j,k) + iJ22(i,j,k) * iJ13(i,j,k)) * gxy(i,j,k) + &
- (iJ12(i,j,k) * iJ33(i,j,k) + iJ32(i,j,k) * iJ13(i,j,k)) * gxz(i,j,k) + &
- iJ22(i,j,k) * iJ23(i,j,k) * gyy(i,j,k) + &
- (iJ22(i,j,k)* iJ33(i,j,k) + iJ32(i,j,k) * iJ23(i,j,k)) * gyz(i,j,k) + &
- iJ32(i,j,k) * iJ33(i,j,k) * gzz(i,j,k)
-
- gcc(i,j,k) = iJ13(i,j,k)**2 * gxx(i,j,k) + &
- 2.0d0 * iJ13(i,j,k) * iJ23(i,j,k) * gxy(i,j,k) + &
- 2.0d0 * iJ13(i,j,k) * iJ33(i,j,k) * gxz(i,j,k) + &
- iJ23(i,j,k)**2 * gyy(i,j,k) + &
- 2.0d0 * iJ23(i,j,k) * iJ33(i,j,k) * gyz(i,j,k) + &
- iJ33(i,j,k)**2 * gzz(i,j,k)
-
- ! Transform extrinsic curvature from global to local basis.
- ! Since extrinsic has covariant indices, use inverse Jacobian
- kaa(i,j,k) = iJ11(i,j,k)**2 * kxx(i,j,k) + &
- 2.0d0 * iJ11(i,j,k) * iJ21(i,j,k) * kxy(i,j,k) + &
- 2.0d0 * iJ11(i,j,k) * iJ31(i,j,k) * kxz(i,j,k) + &
- iJ21(i,j,k)**2 * kyy(i,j,k) + &
- 2.0d0 * iJ21(i,j,k) * iJ31(i,j,k) * kyz(i,j,k) + &
- iJ31(i,j,k)**2 * kzz(i,j,k)
-
- kab(i,j,k) = iJ11(i,j,k) * iJ12(i,j,k) * kxx(i,j,k) + &
- (iJ11(i,j,k) * iJ22(i,j,k) + iJ21(i,j,k) * iJ12(i,j,k)) * kxy(i,j,k) + &
- (iJ11(i,j,k) * iJ32(i,j,k) + iJ31(i,j,k) * iJ12(i,j,k)) * kxz(i,j,k) + &
- iJ21(i,j,k) * iJ22(i,j,k) * kyy(i,j,k) + &
- (iJ21(i,j,k) * iJ32(i,j,k) + iJ31(i,j,k) * iJ22(i,j,k)) * kyz(i,j,k) + &
- iJ31(i,j,k) * iJ32(i,j,k) * kzz(i,j,k)
-
-
- kac(i,j,k) = iJ11(i,j,k) * iJ13(i,j,k) * kxx(i,j,k) + &
- (iJ11(i,j,k) * iJ23(i,j,k) + iJ21(i,j,k) * iJ13(i,j,k)) * kxy(i,j,k) + &
- (iJ11(i,j,k) * iJ33(i,j,k) + iJ31(i,j,k) * iJ13(i,j,k)) * kxz(i,j,k) + &
- iJ21(i,j,k) * iJ23(i,j,k) * kyy(i,j,k) + &
- (iJ21(i,j,k) * iJ33(i,j,k) + iJ31(i,j,k) * iJ23(i,j,k)) * kyz(i,j,k) + &
- iJ31(i,j,k) * iJ33(i,j,k) * kzz(i,j,k)
-
- kbb(i,j,k) = iJ12(i,j,k)**2 * kxx(i,j,k) + &
- 2.0d0 * iJ12(i,j,k) * iJ22(i,j,k) * kxy(i,j,k) + &
- 2.0d0 * iJ12(i,j,k) * iJ32(i,j,k) * kxz(i,j,k) + &
- iJ22(i,j,k)**2 * kyy(i,j,k) + &
- 2.0d0 * iJ22(i,j,k) * iJ32(i,j,k) * kyz(i,j,k) + &
- iJ32(i,j,k)**2 * kzz(i,j,k)
-
- kbc(i,j,k) = iJ12(i,j,k) * iJ13(i,j,k) * kxx(i,j,k) + &
- (iJ12(i,j,k) * iJ23(i,j,k) + iJ22(i,j,k) * iJ13(i,j,k)) * kxy(i,j,k) + &
- (iJ12(i,j,k) * iJ33(i,j,k) + iJ32(i,j,k) * iJ13(i,j,k)) * kxz(i,j,k) + &
- iJ22(i,j,k) * iJ23(i,j,k) * kyy(i,j,k) + &
- (iJ22(i,j,k) * iJ33(i,j,k) + iJ32(i,j,k) * iJ23(i,j,k)) * kyz(i,j,k) + &
- iJ32(i,j,k) * iJ33(i,j,k) * kzz(i,j,k)
-
- kcc(i,j,k) = iJ13(i,j,k)**2 * kxx(i,j,k) + &
- 2.0d0 * iJ13(i,j,k) * iJ23(i,j,k) * kxy(i,j,k) + &
- 2.0d0 * iJ13(i,j,k) * iJ33(i,j,k) * kxz(i,j,k) + &
- iJ23(i,j,k)**2 * kyy(i,j,k) + &
- 2.0d0 * iJ23(i,j,k) * iJ33(i,j,k) * kyz(i,j,k) + &
- iJ33(i,j,k)**2 * kzz(i,j,k)
-
- ! Transform shift from global to local basis.
- ! Since shift has contravariant index, use Jacobian
- betaa(i,j,k) = betax(i,j,k)*J11(i,j,k) + &
- betay(i,j,k)*J12(i,j,k) + &
- betaz(i,j,k)*J13(i,j,k)
- betab(i,j,k) = betax(i,j,k)*J21(i,j,k) + &
- betay(i,j,k)*J22(i,j,k) + &
- betaz(i,j,k)*J23(i,j,k)
- betac(i,j,k) = betax(i,j,k)*J31(i,j,k) + &
- betay(i,j,k)*J32(i,j,k) + &
- betaz(i,j,k)*J33(i,j,k)
- enddo
- enddo
- enddo
- !$OMP END PARALLEL DO
-
-end subroutine GRHydroTransformADMToLocalBasis
-
-
-
-subroutine GRHydroTransformPrimToLocalBasis(CCTK_ARGUMENTS)
-
- implicit none
-
- DECLARE_CCTK_ARGUMENTS
- DECLARE_CCTK_PARAMETERS
-
- CCTK_INT :: i,j,k
-
- if (jacobian_state .eq. 0) then
- call CCTK_WARN(0,"No storage for Jacobians allocated! Tell your coordinates implemetation to store Jacobians!")
- end if
-
- if (inverse_jacobian_state .eq. 0) then
- call CCTK_WARN(0,"No storage for Jacobians allocated! Tell your coordinates implemetation to store Jacobians!")
- end if
-
- !call CCTK_INFO("Transforming primitives to local basis.")
-
- !$OMP PARALLEL DO PRIVATE(i, j, k)
- do k = 1, cctk_lsh(3)
- do j = 1, cctk_lsh(2)
- do i = 1, cctk_lsh(1)
- ! Transform primitive velocity from global to local basis.
- ! Since velocity has contravariant index, use Jacobian
- lvel(i,j,k,1) = vel(i,j,k,1)*J11(i,j,k) + vel(i,j,k,2)*J12(i,j,k) + vel(i,j,k,3)*J13(i,j,k)
- lvel(i,j,k,2) = vel(i,j,k,1)*J21(i,j,k) + vel(i,j,k,2)*J22(i,j,k) + vel(i,j,k,3)*J23(i,j,k)
- lvel(i,j,k,3) = vel(i,j,k,1)*J31(i,j,k) + vel(i,j,k,2)*J32(i,j,k) + vel(i,j,k,3)*J33(i,j,k)
-
- ! Transform primitive B-field from global to local basis.
- ! Since B-field has contravariant index, use Jacobian
-! lBvec(i,j,k,1) = Bvec(i,j,k,1)*J11(i,j,k) + Bvec(i,j,k,2)*J12(i,j,k) + Bvec(i,j,k,3)*J13(i,j,k)
-! lBvec(i,j,k,2) = Bvec(i,j,k,1)*J21(i,j,k) + Bvec(i,j,k,2)*J22(i,j,k) + Bvec(i,j,k,3)*J23(i,j,k)
-! lBvec(i,j,k,3) = Bvec(i,j,k,1)*J31(i,j,k) + Bvec(i,j,k,2)*J32(i,j,k) + Bvec(i,j,k,3)*J33(i,j,k)
- end do
- end do
- end do
- !$OMP END PARALLEL DO
-
-end subroutine GRHydroTransformPrimToLocalBasis
-
-
-
-subroutine GRHydroTransformPrimToGlobalBasis(CCTK_ARGUMENTS)
-
- implicit none
-
- DECLARE_CCTK_ARGUMENTS
- DECLARE_CCTK_PARAMETERS
-
- CCTK_INT :: i,j,k
-
- if (jacobian_state .eq. 0) then
- call CCTK_WARN(0,"No storage for Jacobians allocated! Tell your coordinates implemetation to store Jacobians!")
- end if
-
- if (inverse_jacobian_state .eq. 0) then
- call CCTK_WARN(0,"No storage for Jacobians allocated! Tell your coordinates implemetation to store Jacobians!")
- end if
-
- !call CCTK_INFO("Transforming primitives to global basis.")
-
- !$OMP PARALLEL DO PRIVATE(i, j, k)
- do k = 1, cctk_lsh(3)
- do j = 1, cctk_lsh(2)
- do i = 1, cctk_lsh(1)
- ! Transform primitive velocity from local to global basis.
- ! Since velocity has contravariant index, use inverse Jacobian
- vel(i,j,k,1) = lvel(i,j,k,1)*iJ11(i,j,k) + lvel(i,j,k,2)*iJ12(i,j,k) + lvel(i,j,k,3)*iJ13(i,j,k)
- vel(i,j,k,2) = lvel(i,j,k,1)*iJ21(i,j,k) + lvel(i,j,k,2)*iJ22(i,j,k) + lvel(i,j,k,3)*iJ23(i,j,k)
- vel(i,j,k,3) = lvel(i,j,k,1)*iJ31(i,j,k) + lvel(i,j,k,2)*iJ32(i,j,k) + lvel(i,j,k,3)*iJ33(i,j,k)
-
- end do
- end do
- end do
- !$OMP END PARALLEL DO
-
-end subroutine GRHydroTransformPrimToGlobalBasis
-
-
-
-
-
diff --git a/src/GRHydro_TransformTensorBasis.c b/src/GRHydro_TransformTensorBasis.c
new file mode 100644
index 0000000..f36cb36
--- /dev/null
+++ b/src/GRHydro_TransformTensorBasis.c
@@ -0,0 +1,438 @@
+#include <assert.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Arguments.h"
+#include "cctk_Functions.h"
+
+#define SQR(x) ((x)*(x))
+
+/* helper routine to let Fortran code test for the presence of Multipatch.
+ * Required since Fortran cannot access grid scalars via pointers returned by CCTK_VarDataPtrI
+ * Returns 0 when no general coordinates are used
+ * Returns 1 when general coordinates are used
+ */
+CCTK_FCALL CCTK_INT CCTK_FNAME(GRHydro_UseGeneralCoordinates)(CCTK_POINTER ptr_to_cctkGH);
+CCTK_INT GRHydro_UseGeneralCoordinates(const cGH * cctkGH);
+
+CCTK_FCALL CCTK_INT CCTK_FNAME(GRHydro_UseGeneralCoordinates)(CCTK_POINTER ptr_to_cctkGH)
+{
+ return GRHydro_UseGeneralCoordinates(*(cGH **)ptr_to_cctkGH);
+}
+
+CCTK_INT GRHydro_UseGeneralCoordinates(const cGH * cctkGH)
+{
+ static CCTK_INT idxGeneral_coordinates = -1;
+ static CCTK_INT coordinates_active_set = 0;
+ static CCTK_INT coordinates_active;
+
+ if (!coordinates_active_set) {
+ coordinates_active = CCTK_IsImplementationActive("Coordinates");
+ coordinates_active_set = 1;
+ }
+
+ if (idxGeneral_coordinates == -1)
+ {
+ idxGeneral_coordinates = CCTK_VarIndex("Coordinates::general_coordinates");
+ assert(!coordinates_active || idxGeneral_coordinates >= 0);
+ }
+
+ /* are coordinates relly not Cartesian? */
+ return coordinates_active && *(CCTK_INT *)CCTK_VarDataPtrI(cctkGH, 0, idxGeneral_coordinates);
+}
+
+void GRHydroTransformADMToLocalBasis(CCTK_ARGUMENTS)
+{
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ int i,j,k;
+ static CCTK_INT idxJacobian = -1, idxiJacobian = -1;
+ static CCTK_INT idxJacobian_state = -1, idxiJacobian_state = -1;
+ static CCTK_INT idxGeneral_coordinates = -1;
+ CCTK_REAL *J11, *J12, *J13, *J21, *J22, *J23, *J31, *J32, *J33;
+ CCTK_REAL *iJ11, *iJ12, *iJ13, *iJ21, *iJ22, *iJ23, *iJ31, *iJ32, *iJ33;
+
+ if (idxGeneral_coordinates == -1)
+ {
+ idxGeneral_coordinates = CCTK_VarIndex("Coordinates::general_coordinates");
+ assert(idxGeneral_coordinates >= 0);
+ }
+
+ if (!*(CCTK_INT *)CCTK_VarDataPtrI(cctkGH, 0, idxGeneral_coordinates))
+ return; /* corodinates are Cartesian */
+
+ if (idxJacobian == -1)
+ {
+ idxJacobian = CCTK_FirstVarIndex("Coordinates::jacobian");
+ assert(idxJacobian >= 0);
+ }
+
+ if (idxiJacobian == -1)
+ {
+ idxiJacobian = CCTK_FirstVarIndex("Coordinates::inverse_jacobian");
+ assert(idxiJacobian >= 0);
+ }
+
+ if (idxJacobian_state == -1)
+ {
+ idxJacobian_state = CCTK_VarIndex("Coordinates::jacobian_state");
+ assert(idxJacobian_state >= 0);
+ }
+
+ if (idxiJacobian_state == -1)
+ {
+ idxiJacobian_state = CCTK_VarIndex("Coordinates::inverse_jacobian_state");
+ assert(idxiJacobian_state >= 0);
+ }
+
+ if (!*(CCTK_INT *)CCTK_VarDataPtrI(cctkGH, 0, idxJacobian_state))
+ CCTK_WARN(0,"No storage for Jacobians allocated! Tell your coordinates implemetation to store Jacobians!");
+
+ if (!*(CCTK_INT *)CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian_state))
+ CCTK_WARN(0,"No storage for inverse Jacobians allocated! Tell your coordinates implemetation to store inverse Jacobians!");
+
+ /* Cactus guarantess that variables in a group are consecutive, and
+ * ReflectionSymmetry etc. require the order we use */
+ J11 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+0);
+ J12 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+1);
+ J13 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+2);
+ J21 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+3);
+ J22 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+4);
+ J23 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+5);
+ J31 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+6);
+ J32 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+7);
+ J33 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+8);
+ assert(J11 && J12 && J13 && J21 && J22 && J23 && J31 && J32 && J33);
+ iJ11 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+0);
+ iJ12 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+1);
+ iJ13 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+2);
+ iJ21 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+3);
+ iJ22 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+4);
+ iJ23 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+5);
+ iJ31 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+6);
+ iJ32 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+7);
+ iJ33 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+8);
+ assert(iJ11 && iJ12 && iJ13 && iJ21 && iJ22 && iJ23 && iJ31 && iJ32 && iJ33);
+
+ #pragma omp parallel for private (i,j,k)
+ for (k=0 ; k<cctk_lsh[2] ; k++)
+ {
+ for (j=0 ; j<cctk_lsh[1] ; j++)
+ {
+ for (i=0 ; i<cctk_lsh[0] ; i++)
+ {
+ CCTK_INT idx = CCTK_GFINDEX3D(cctkGH, i,j,k);
+
+ gaa[idx] = SQR(iJ11[idx]) * gxx[idx] +
+ 2.0 * iJ11[idx] * iJ21[idx] * gxy[idx] +
+ 2.0 * iJ11[idx] * iJ31[idx] * gxz[idx] + SQR(iJ21[idx]) * gyy[idx] +
+ 2.0 * iJ21[idx] * iJ31[idx] * gyz[idx] + SQR(iJ31[idx]) * gzz[idx];
+
+ gab[idx] = iJ11[idx] * iJ12[idx] * gxx[idx] +
+ (iJ11[idx] * iJ22[idx] + iJ21[idx] * iJ12[idx]) * gxy[idx] +
+ (iJ11[idx] * iJ32[idx] + iJ31[idx] * iJ12[idx]) * gxz[idx] +
+ iJ21[idx] * iJ22[idx] * gyy[idx] + (iJ21[idx] * iJ32[idx] +
+ iJ31[idx] * iJ22[idx]) * gyz[idx] + iJ31[idx] * iJ32[idx] * gzz[idx];
+
+ gac[idx] = iJ11[idx] * iJ13[idx] * gxx[idx] + (iJ11[idx] * iJ23[idx] +
+ iJ21[idx] * iJ13[idx]) * gxy[idx] +
+ (iJ11[idx] * iJ33[idx] + iJ31[idx] * iJ13[idx]) * gxz[idx] +
+ iJ21[idx] * iJ23[idx] * gyy[idx] +
+ (iJ21[idx] * iJ33[idx] + iJ31[idx] * iJ23[idx]) * gyz[idx] +
+ iJ31[idx] * iJ33[idx] * gzz[idx];
+
+ gbb[idx] = SQR(iJ12[idx]) * gxx[idx] +
+ 2.0 * iJ12[idx] * iJ22[idx] * gxy[idx] +
+ 2.0 * iJ12[idx] * iJ32[idx] * gxz[idx] + SQR(iJ22[idx]) * gyy[idx] +
+ 2.0 * iJ22[idx] * iJ32[idx] * gyz[idx] + SQR(iJ32[idx]) * gzz[idx];
+
+ gbc[idx] = iJ12[idx] * iJ13[idx] * gxx[idx] +
+ (iJ12[idx] * iJ23[idx] + iJ22[idx] * iJ13[idx]) * gxy[idx] +
+ (iJ12[idx] * iJ33[idx] + iJ32[idx] * iJ13[idx]) * gxz[idx] +
+ iJ22[idx] * iJ23[idx] * gyy[idx] +
+ (iJ22[idx]* iJ33[idx] + iJ32[idx] * iJ23[idx]) * gyz[idx] +
+ iJ32[idx] * iJ33[idx] * gzz[idx];
+
+ gcc[idx] = SQR(iJ13[idx]) * gxx[idx] +
+ 2.0 * iJ13[idx] * iJ23[idx] * gxy[idx] +
+ 2.0 * iJ13[idx] * iJ33[idx] * gxz[idx] +
+ SQR(iJ23[idx]) * gyy[idx] +
+ 2.0 * iJ23[idx] * iJ33[idx] * gyz[idx] +
+ SQR(iJ33[idx]) * gzz[idx];
+
+ /* Transform extrinsic curvature from global to local basis.
+ * Since extrinsic has covariant indices, use inverse Jacobian */
+ kaa[idx] = SQR(iJ11[idx]) * kxx[idx] +
+ 2.0 * iJ11[idx] * iJ21[idx] * kxy[idx] +
+ 2.0 * iJ11[idx] * iJ31[idx] * kxz[idx] +
+ SQR(iJ21[idx]) * kyy[idx] +
+ 2.0 * iJ21[idx] * iJ31[idx] * kyz[idx] +
+ SQR(iJ31[idx]) * kzz[idx];
+
+ kab[idx] = iJ11[idx] * iJ12[idx] * kxx[idx] +
+ (iJ11[idx] * iJ22[idx] + iJ21[idx] * iJ12[idx]) * kxy[idx] +
+ (iJ11[idx] * iJ32[idx] + iJ31[idx] * iJ12[idx]) * kxz[idx] +
+ iJ21[idx] * iJ22[idx] * kyy[idx] +
+ (iJ21[idx] * iJ32[idx] + iJ31[idx] * iJ22[idx]) * kyz[idx] +
+ iJ31[idx] * iJ32[idx] * kzz[idx];
+
+
+ kac[idx] = iJ11[idx] * iJ13[idx] * kxx[idx] +
+ (iJ11[idx] * iJ23[idx] + iJ21[idx] * iJ13[idx]) * kxy[idx] +
+ (iJ11[idx] * iJ33[idx] + iJ31[idx] * iJ13[idx]) * kxz[idx] +
+ iJ21[idx] * iJ23[idx] * kyy[idx] +
+ (iJ21[idx] * iJ33[idx] + iJ31[idx] * iJ23[idx]) * kyz[idx] +
+ iJ31[idx] * iJ33[idx] * kzz[idx];
+
+ kbb[idx] = SQR(iJ12[idx]) * kxx[idx] +
+ 2.0 * iJ12[idx] * iJ22[idx] * kxy[idx] +
+ 2.0 * iJ12[idx] * iJ32[idx] * kxz[idx] +
+ SQR(iJ22[idx]) * kyy[idx] +
+ 2.0 * iJ22[idx] * iJ32[idx] * kyz[idx] +
+ SQR(iJ32[idx]) * kzz[idx];
+
+ kbc[idx] = iJ12[idx] * iJ13[idx] * kxx[idx] +
+ (iJ12[idx] * iJ23[idx] + iJ22[idx] * iJ13[idx]) * kxy[idx] +
+ (iJ12[idx] * iJ33[idx] + iJ32[idx] * iJ13[idx]) * kxz[idx] +
+ iJ22[idx] * iJ23[idx] * kyy[idx] +
+ (iJ22[idx] * iJ33[idx] + iJ32[idx] * iJ23[idx]) * kyz[idx] +
+ iJ32[idx] * iJ33[idx] * kzz[idx];
+
+ kcc[idx] = SQR(iJ13[idx]) * kxx[idx] +
+ 2.0 * iJ13[idx] * iJ23[idx] * kxy[idx] +
+ 2.0 * iJ13[idx] * iJ33[idx] * kxz[idx] +
+ SQR(iJ23[idx]) * kyy[idx] +
+ 2.0 * iJ23[idx] * iJ33[idx] * kyz[idx] +
+ SQR(iJ33[idx]) * kzz[idx];
+
+ /* Transform shift from global to local basis.
+ * Since shift has contravariant index, use Jacobian */
+ betaa[idx] = betax[idx]*J11[idx] + betay[idx]*J12[idx] + betaz[idx]*J13[idx];
+ betab[idx] = betax[idx]*J21[idx] + betay[idx]*J22[idx] + betaz[idx]*J23[idx];
+ betac[idx] = betax[idx]*J31[idx] + betay[idx]*J32[idx] + betaz[idx]*J33[idx];
+ }
+ }
+ }
+
+}
+
+
+
+void GRHydroTransformPrimToLocalBasis(CCTK_ARGUMENTS)
+{
+
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ CCTK_INT i,j,k;
+ static CCTK_INT idxJacobian = -1, idxiJacobian = -1;
+ static CCTK_INT idxGeneral_coordinates = -1;
+ static CCTK_INT idxJacobian_state = -1, idxiJacobian_state = -1;
+ CCTK_REAL *J11, *J12, *J13, *J21, *J22, *J23, *J31, *J32, *J33;
+ CCTK_REAL *iJ11, *iJ12, *iJ13, *iJ21, *iJ22, *iJ23, *iJ31, *iJ32, *iJ33;
+
+ if (!CCTK_IsImplementationActive("Coordinates"))
+ return; /* Multipatch infrastructure not active */
+
+ if (idxGeneral_coordinates == -1)
+ {
+ idxGeneral_coordinates = CCTK_VarIndex("Coordinates::general_coordinates");
+ assert(idxGeneral_coordinates >= 0);
+ }
+
+ if (!*(CCTK_INT *)CCTK_VarDataPtrI(cctkGH, 0, idxGeneral_coordinates))
+ return; /* corodinates are Cartesian */
+
+ if (idxJacobian == -1)
+ {
+ idxJacobian = CCTK_FirstVarIndex("Coordinates::jacobian");
+ assert(idxJacobian >= 0);
+ }
+
+ if (idxiJacobian == -1)
+ {
+ idxiJacobian = CCTK_FirstVarIndex("Coordinates::inverse_jacobian");
+ assert(idxiJacobian >= 0);
+ }
+
+ if (idxJacobian_state == -1)
+ {
+ idxJacobian_state = CCTK_VarIndex("Coordinates::jacobian_state");
+ assert(idxJacobian_state >= 0);
+ }
+
+ if (idxiJacobian_state == -1)
+ {
+ idxiJacobian_state = CCTK_VarIndex("Coordinates::inverse_jacobian_state");
+ assert(idxiJacobian_state >= 0);
+ }
+
+ if (!*(CCTK_INT *)CCTK_VarDataPtrI(cctkGH, 0, idxJacobian_state))
+ CCTK_WARN(0,"No storage for Jacobians allocated! Tell your coordinates implemetation to store Jacobians!");
+
+ if (!*(CCTK_INT *)CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian_state))
+ CCTK_WARN(0,"No storage for inverse Jacobians allocated! Tell your coordinates implemetation to store inverse Jacobians!");
+
+ /* CCTK_INFO("Transforming primitives to local basis."); */
+
+ /* Cactus guarantess that variables in a group are consecutive, and
+ * ReflectionSymmetry etc. require the order we use */
+ J11 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+0);
+ J12 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+1);
+ J13 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+2);
+ J21 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+3);
+ J22 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+4);
+ J23 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+5);
+ J31 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+6);
+ J32 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+7);
+ J33 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+8);
+ assert(J11 && J12 && J13 && J21 && J22 && J23 && J31 && J32 && J33);
+ iJ11 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+0);
+ iJ12 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+1);
+ iJ13 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+2);
+ iJ21 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+3);
+ iJ22 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+4);
+ iJ23 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+5);
+ iJ31 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+6);
+ iJ32 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+7);
+ iJ33 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+8);
+ assert(iJ11 && iJ12 && iJ13 && iJ21 && iJ22 && iJ23 && iJ31 && iJ32 && iJ33);
+
+ #pragma omp parallel for private (i,j,k)
+ for (k=0 ; k<cctk_lsh[2] ; k++)
+ {
+ for (j=0 ; j<cctk_lsh[1] ; j++)
+ {
+ for (i=0 ; i<cctk_lsh[0] ; i++)
+ {
+ CCTK_INT idx = CCTK_GFINDEX3D(cctkGH, i,j,k);
+ CCTK_INT idx1 = CCTK_VECTGFINDEX3D(cctkGH, i,j,k,0);
+ CCTK_INT idx2 = CCTK_VECTGFINDEX3D(cctkGH, i,j,k,1);
+ CCTK_INT idx3 = CCTK_VECTGFINDEX3D(cctkGH, i,j,k,2);
+
+ /* Transform primitive velocity from global to local basis.
+ * Since velocity has contravariant index, use Jacobian */
+ lvel[idx1] = vel[idx1]*J11[idx] + vel[idx2]*J12[idx] + vel[idx3]*J13[idx];
+ lvel[idx2] = vel[idx1]*J21[idx] + vel[idx2]*J22[idx] + vel[idx3]*J23[idx];
+ lvel[idx3] = vel[idx1]*J31[idx] + vel[idx2]*J32[idx] + vel[idx3]*J33[idx];
+
+ /* Transform primitive B-field from global to local basis.
+ * Since B-field has contravariant index, use Jacobian */
+/* lBvec[idx1] = Bvec[idx1]*J11[idx] + Bvec[idx2]*J12[idx] + Bvec[idx3]*J13[idx]; */
+/* lBvec[idx2] = Bvec[idx1]*J21[idx] + Bvec[idx2]*J22[idx] + Bvec[idx3]*J23[idx]; */
+/* lBvec[idx3] = Bvec[idx1]*J31[idx] + Bvec[idx2]*J32[idx] + Bvec[idx3]*J33[idx]; */
+ }
+ }
+ }
+
+}
+
+
+
+void GRHydroTransformPrimToGlobalBasis(CCTK_ARGUMENTS)
+{
+
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ CCTK_INT i,j,k;
+
+ static CCTK_INT idxJacobian = -1, idxiJacobian = -1;
+ static CCTK_INT idxJacobian_state = -1, idxiJacobian_state = -1;
+ static CCTK_INT idxGeneral_coordinates = -1;
+ CCTK_REAL *J11, *J12, *J13, *J21, *J22, *J23, *J31, *J32, *J33;
+ CCTK_REAL *iJ11, *iJ12, *iJ13, *iJ21, *iJ22, *iJ23, *iJ31, *iJ32, *iJ33;
+
+ if (idxGeneral_coordinates == -1)
+ {
+ idxGeneral_coordinates = CCTK_VarIndex("Coordinates::general_coordinates");
+ assert(idxGeneral_coordinates >= 0);
+ }
+
+ if (!*(CCTK_INT *)CCTK_VarDataPtrI(cctkGH, 0, idxGeneral_coordinates))
+ return; /* corodinates are Cartesian */
+
+ if (idxJacobian == -1)
+ {
+ idxJacobian = CCTK_FirstVarIndex("Coordinates::jacobian");
+ assert(idxJacobian >= 0);
+ }
+
+ if (idxiJacobian == -1)
+ {
+ idxiJacobian = CCTK_FirstVarIndex("Coordinates::inverse_jacobian");
+ assert(idxiJacobian >= 0);
+ }
+
+ if (idxJacobian_state == -1)
+ {
+ idxJacobian_state = CCTK_VarIndex("Coordinates::jacobian_state");
+ assert(idxJacobian_state >= 0);
+ }
+
+ if (idxiJacobian_state == -1)
+ {
+ idxiJacobian_state = CCTK_VarIndex("Coordinates::inverse_jacobian_state");
+ assert(idxiJacobian_state >= 0);
+ }
+
+ if (!*(CCTK_INT *)CCTK_VarDataPtrI(cctkGH, 0, idxJacobian_state))
+ CCTK_WARN(0,"No storage for Jacobians allocated! Tell your coordinates implemetation to store Jacobians!");
+
+ if (!*(CCTK_INT *)CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian_state))
+ CCTK_WARN(0,"No storage for inverse Jacobians allocated! Tell your coordinates implemetation to store inverse Jacobians!");
+
+ /* CCTK_INFO("Transforming primitives to global basis."); */
+
+ /* Cactus guarantess that variables in a group are consecutive, and
+ * ReflectionSymmetry etc. require the order we use */
+ J11 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+0);
+ J12 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+1);
+ J13 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+2);
+ J21 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+3);
+ J22 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+4);
+ J23 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+5);
+ J31 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+6);
+ J32 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+7);
+ J33 = CCTK_VarDataPtrI(cctkGH, 0, idxJacobian+8);
+ assert(J11 && J12 && J13 && J21 && J22 && J23 && J31 && J32 && J33);
+ iJ11 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+0);
+ iJ12 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+1);
+ iJ13 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+2);
+ iJ21 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+3);
+ iJ22 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+4);
+ iJ23 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+5);
+ iJ31 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+6);
+ iJ32 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+7);
+ iJ33 = CCTK_VarDataPtrI(cctkGH, 0, idxiJacobian+8);
+ assert(iJ11 && iJ12 && iJ13 && iJ21 && iJ22 && iJ23 && iJ31 && iJ32 && iJ33);
+
+ #pragma omp parallel for private (i,j,k)
+ for (k=0 ; k<cctk_lsh[2] ; k++)
+ {
+ for (j=0 ; j<cctk_lsh[1] ; j++)
+ {
+ for (i=0 ; i<cctk_lsh[0] ; i++)
+ {
+ CCTK_INT idx = CCTK_GFINDEX3D(cctkGH, i,j,k);
+ CCTK_INT idx1 = CCTK_VECTGFINDEX3D(cctkGH, i,j,k,0);
+ CCTK_INT idx2 = CCTK_VECTGFINDEX3D(cctkGH, i,j,k,1);
+ CCTK_INT idx3 = CCTK_VECTGFINDEX3D(cctkGH, i,j,k,2);
+
+ /* Transform primitive velocity from local to global basis.
+ * Since velocity has contravariant index, use inverse Jacobian */
+ vel[idx1] = lvel[idx1]*iJ11[idx] + lvel[idx2]*iJ12[idx] + lvel[idx3]*iJ13[idx];
+ vel[idx2] = lvel[idx1]*iJ21[idx] + lvel[idx2]*iJ22[idx] + lvel[idx3]*iJ23[idx];
+ vel[idx3] = lvel[idx1]*iJ31[idx] + lvel[idx2]*iJ32[idx] + lvel[idx3]*iJ33[idx];
+
+ }
+ }
+ }
+
+}
+
+
+
+
+
diff --git a/src/GRHydro_UpdateMask.F90 b/src/GRHydro_UpdateMask.F90
index 0bb092c..c8a829e 100644
--- a/src/GRHydro_UpdateMask.F90
+++ b/src/GRHydro_UpdateMask.F90
@@ -14,15 +14,15 @@
#include "GRHydro_Macros.h"
#include "SpaceMask.h"
-#define velx(i,j,k) lvel(i,j,k,1)
-#define vely(i,j,k) lvel(i,j,k,2)
-#define velz(i,j,k) lvel(i,j,k,3)
-#define velx_p(i,j,k) lvel_p(i,j,k,1)
-#define vely_p(i,j,k) lvel_p(i,j,k,2)
-#define velz_p(i,j,k) lvel_p(i,j,k,3)
-#define velx_p_p(i,j,k) lvel_p_p(i,j,k,1)
-#define vely_p_p(i,j,k) lvel_p_p(i,j,k,2)
-#define velz_p_p(i,j,k) lvel_p_p(i,j,k,3)
+#define velx(i,j,k) vup(i,j,k,1)
+#define vely(i,j,k) vup(i,j,k,2)
+#define velz(i,j,k) vup(i,j,k,3)
+#define velx_p(i,j,k) vup_p(i,j,k,1)
+#define vely_p(i,j,k) vup_p(i,j,k,2)
+#define velz_p(i,j,k) vup_p(i,j,k,3)
+#define velx_p_p(i,j,k) vup_p_p(i,j,k,1)
+#define vely_p_p(i,j,k) vup_p_p(i,j,k,2)
+#define velz_p_p(i,j,k) vup_p_p(i,j,k,3)
subroutine GRHydroUpdateAtmosphereMask(CCTK_ARGUMENTS)
@@ -220,6 +220,15 @@ subroutine GRHydro_AtmosphereReset(CCTK_ARGUMENTS)
CCTK_REAL :: det, psi4pt
CCTK_INT :: type_bits, atmosphere, not_atmosphere
+
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+
! begin EOS Omni vars
integer :: n,keytemp,anyerr,keyerr(1)
real*8 :: xpress,xeps,xtemp,xye
@@ -227,6 +236,25 @@ subroutine GRHydro_AtmosphereReset(CCTK_ARGUMENTS)
xpress=0.0d0;xye=0.0d0;xeps=0.0d0;xtemp=0.0d0
! end EOS Omni vars
+ ! save memory when MP is not used
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ vup => lvel
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ vup => vel
+ end if
+
call SpaceMask_GetTypeBits(type_bits, "Hydro_Atmosphere")
call SpaceMask_GetStateBits(atmosphere, "Hydro_Atmosphere",&
"in_atmosphere")
@@ -246,8 +274,8 @@ subroutine GRHydro_AtmosphereReset(CCTK_ARGUMENTS)
velx(i,j,k) = 0.0d0
vely(i,j,k) = 0.0d0
velz(i,j,k) = 0.0d0
- det = SPATIAL_DETERMINANT(gaa(i,j,k), gab(i,j,k), gac(i,j,k), \
- gbb(i,j,k), gbc(i,j,k), gcc(i,j,k))
+ det = SPATIAL_DETERMINANT(g11(i,j,k), g12(i,j,k), g13(i,j,k), \
+ g22(i,j,k), g23(i,j,k), g33(i,j,k))
if(evolve_temper.ne.0) then
! ! set the temperature to be relatively low
@@ -259,8 +287,8 @@ subroutine GRHydro_AtmosphereReset(CCTK_ARGUMENTS)
press(i,j,k),keyerr,anyerr)
call prim2con_hot(GRHydro_eos_handle, GRHydro_reflevel,&
- i,j,k,x(i,j,k),y(i,j,k),z(i,j,k),gaa(i,j,k),gab(i,j,k),&
- gac(i,j,k),gbb(i,j,k),gbc(i,j,k),gcc(i,j,k), &
+ i,j,k,x(i,j,k),y(i,j,k),z(i,j,k),g11(i,j,k),g12(i,j,k),&
+ g13(i,j,k),g22(i,j,k),g23(i,j,k),g33(i,j,k), &
det,dens(i,j,k),scon(i,j,k,1), scon(i,j,k,2), scon(i,j,k,3), &
tau(i,j,k), rho(i,j,k), velx(i,j,k), vely(i,j,k), &
velz(i,j,k), eps(i,j,k), press(i,j,k), w_lorentz(i,j,k),&
@@ -268,8 +296,8 @@ subroutine GRHydro_AtmosphereReset(CCTK_ARGUMENTS)
y_e_con(i,j,k) = dens(i,j,k) * y_e(i,j,k)
else
call prim2conpolytype(GRHydro_polytrope_handle, &
- gaa(i,j,k), gab(i,j,k), gac(i,j,k), &
- gbb(i,j,k), gbc(i,j,k), gcc(i,j,k), det, &
+ g11(i,j,k), g12(i,j,k), g13(i,j,k), &
+ g22(i,j,k), g23(i,j,k), g33(i,j,k), det, &
dens(i,j,k), scon(i,j,k,1), scon(i,j,k,2), scon(i,j,k,3), &
tau(i,j,k), rho(i,j,k), velx(i,j,k), vely(i,j,k), &
velz(i,j,k), eps(i,j,k), press(i,j,k), w_lorentz(i,j,k))
@@ -304,6 +332,29 @@ subroutine GRHydro_InitialAtmosphereReset(CCTK_ARGUMENTS)
CCTK_INT :: type_bits, atmosphere, not_atmosphere
CCTK_INT :: eos_handle
+
+ ! save memory when MP is not used
+ CCTK_INT :: GRHydro_UseGeneralCoordinates
+ TARGET gaa, gab, gac, gbb, gbc, gcc
+ TARGET gxx, gxy, gxz, gyy, gyz, gzz
+ TARGET lvel, vel
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup
+ TARGET gaa_p, gab_p, gac_p, gbb_p, gbc_p, gcc_p
+ TARGET gxx_p, gxy_p, gxz_p, gyy_p, gyz_p, gzz_p
+ TARGET lvel_p, vel_p
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11_p => Null(), g12_p => Null(), &
+ g13_p => Null(), g22_p => Null(), &
+ g23_p => Null(), g33_p => Null()
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup_p => Null()
+ TARGET gaa_p_p, gab_p_p, gac_p_p, gbb_p_p, gbc_p_p, gcc_p_p
+ TARGET gxx_p_p, gxy_p_p, gxz_p_p, gyy_p_p, gyz_p_p, gzz_p_p
+ TARGET lvel_p_p, vel_p_p
+ CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11_p_p => Null(), g12_p_p => Null(), &
+ g13_p_p => Null(), g22_p_p => Null(), &
+ g23_p_p => Null(), g33_p_p => Null()
+ CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup_p_p => Null()
+
! begin EOS Omni vars
integer :: n,keytemp,anyerr,keyerr(1)
real*8 :: xpress,xeps,xtemp,xye
@@ -311,6 +362,64 @@ subroutine GRHydro_InitialAtmosphereReset(CCTK_ARGUMENTS)
xpress=0.0d0;xye=0.0d0;xeps=0.0d0;xtemp=0.0d0
! end EOS Omni vars
+ ! save memory when MP is not used
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11 => gaa
+ g12 => gab
+ g13 => gac
+ g22 => gbb
+ g23 => gbc
+ g33 => gcc
+ vup => lvel
+ else
+ g11 => gxx
+ g12 => gxy
+ g13 => gxz
+ g22 => gyy
+ g23 => gyz
+ g33 => gzz
+ vup => vel
+ end if
+ if (timelevels .gt. 1) then
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11_p => gaa_p
+ g12_p => gab_p
+ g13_p => gac_p
+ g22_p => gbb_p
+ g23_p => gbc_p
+ g33_p => gcc_p
+ vup_p => lvel_p
+ else
+ g11_p => gxx_p
+ g12_p => gxy_p
+ g13_p => gxz_p
+ g22_p => gyy_p
+ g23_p => gyz_p
+ g33_p => gzz_p
+ vup_p => vel_p
+ end if
+ end if
+ if (timelevels .gt. 2) then
+ if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then
+ g11_p_p => gaa_p_p
+ g12_p_p => gab_p_p
+ g13_p_p => gac_p_p
+ g22_p_p => gbb_p_p
+ g23_p_p => gbc_p_p
+ g33_p_p => gcc_p_p
+ vup_p_p => lvel_p_p
+ else
+ g11_p_p => gxx_p_p
+ g12_p_p => gxy_p_p
+ g13_p_p => gxz_p_p
+ g22_p_p => gyy_p_p
+ g23_p_p => gyz_p_p
+ g33_p_p => gzz_p_p
+ vup_p_p => vel_p_p
+ end if
+ end if
+
+
eos_handle = GRHydro_polytrope_handle
call SpaceMask_GetTypeBits(type_bits, "Hydro_Atmosphere")
@@ -330,8 +439,8 @@ subroutine GRHydro_InitialAtmosphereReset(CCTK_ARGUMENTS)
if (rho(i,j,k) .le. rho_min) then
rho(i,j,k) = rho_min
- det = SPATIAL_DETERMINANT(gaa(i,j,k), gab(i,j,k), gac(i,j,k), \
- gbb(i,j,k), gbc(i,j,k), gcc(i,j,k))
+ det = SPATIAL_DETERMINANT(g11(i,j,k), g12(i,j,k), g13(i,j,k), \
+ g22(i,j,k), g23(i,j,k), g33(i,j,k))
velx(i,j,k) = 0.0d0
vely(i,j,k) = 0.0d0
@@ -347,8 +456,8 @@ subroutine GRHydro_InitialAtmosphereReset(CCTK_ARGUMENTS)
press(i,j,k),keyerr,anyerr)
call prim2con_hot(GRHydro_eos_handle, GRHydro_reflevel,&
- i,j,k,x(i,j,k),y(i,j,k),z(i,j,k),gaa(i,j,k),gab(i,j,k),&
- gac(i,j,k),gbb(i,j,k),gbc(i,j,k),gcc(i,j,k), &
+ i,j,k,x(i,j,k),y(i,j,k),z(i,j,k),g11(i,j,k),g12(i,j,k),&
+ g13(i,j,k),g22(i,j,k),g23(i,j,k),g33(i,j,k), &
det,dens(i,j,k),scon(i,j,k,1), scon(i,j,k,2), scon(i,j,k,3), &
tau(i,j,k), rho(i,j,k), velx(i,j,k), vely(i,j,k), &
velz(i,j,k), eps(i,j,k), press(i,j,k), w_lorentz(i,j,k),&
@@ -360,8 +469,8 @@ subroutine GRHydro_InitialAtmosphereReset(CCTK_ARGUMENTS)
call EOS_Omni_EpsFromPress(GRHydro_polytrope_handle,keytemp,GRHydro_eos_rf_prec,n,&
rho(i,j,k),xeps,xtemp,xye,press(i,j,k),eps(i,j,k),keyerr,anyerr)
call prim2conpolytype(eos_handle, &
- gaa(i,j,k), gab(i,j,k), gac(i,j,k), &
- gbb(i,j,k), gbc(i,j,k), gcc(i,j,k), det, &
+ g11(i,j,k), g12(i,j,k), g13(i,j,k), &
+ g22(i,j,k), g23(i,j,k), g33(i,j,k), det, &
dens(i,j,k), scon(i,j,k,1), scon(i,j,k,2), scon(i,j,k,3), &
tau(i,j,k), rho(i,j,k), velx(i,j,k), vely(i,j,k), &
velz(i,j,k), eps(i,j,k), press(i,j,k), w_lorentz(i,j,k))
@@ -374,8 +483,8 @@ subroutine GRHydro_InitialAtmosphereReset(CCTK_ARGUMENTS)
vely_p(i,j,k) = 0.0d0
velz_p(i,j,k) = 0.0d0
- det = SPATIAL_DETERMINANT(gaa_p(i,j,k), gab_p(i,j,k), gac_p(i,j,k), \
- gbb_p(i,j,k), gbc_p(i,j,k), gcc_p(i,j,k))
+ det = SPATIAL_DETERMINANT(g11_p(i,j,k), g12_p(i,j,k), g13_p(i,j,k), \
+ g22_p(i,j,k), g23_p(i,j,k), g33_p(i,j,k))
if(evolve_temper.ne.0) then
! set the temperature to be relatively low
@@ -387,8 +496,8 @@ subroutine GRHydro_InitialAtmosphereReset(CCTK_ARGUMENTS)
press_p(i,j,k),keyerr,anyerr)
call prim2con_hot(GRHydro_eos_handle, GRHydro_reflevel,&
- i,j,k,x(i,j,k),y(i,j,k),z(i,j,k),gaa_p(i,j,k),gab_p(i,j,k),&
- gac_p(i,j,k),gbb_p(i,j,k),gbc_p(i,j,k),gcc_p(i,j,k), &
+ i,j,k,x(i,j,k),y(i,j,k),z(i,j,k),g11_p(i,j,k),g12_p(i,j,k),&
+ g13_p(i,j,k),g22_p(i,j,k),g23_p(i,j,k),g33_p(i,j,k), &
det,dens_p(i,j,k),scon_p(i,j,k,1), scon_p(i,j,k,2), scon_p(i,j,k,3), &
tau_p(i,j,k), rho_p(i,j,k), velx_p(i,j,k), vely_p(i,j,k), &
velz_p(i,j,k), eps_p(i,j,k), press_p(i,j,k), w_lorentz_p(i,j,k),&
@@ -400,8 +509,8 @@ subroutine GRHydro_InitialAtmosphereReset(CCTK_ARGUMENTS)
call EOS_Omni_EpsFromPress(GRHydro_polytrope_handle,keytemp,GRHydro_eos_rf_prec,n,&
rho_p(i,j,k),xeps,xtemp,xye,press_p(i,j,k),eps_p(i,j,k),keyerr,anyerr)
call prim2conpolytype(eos_handle, &
- gaa_p(i,j,k), gab_p(i,j,k), gac_p(i,j,k), &
- gbb_p(i,j,k), gbc_p(i,j,k), gcc_p(i,j,k), det, &
+ g11_p(i,j,k), g12_p(i,j,k), g13_p(i,j,k), &
+ g22_p(i,j,k), g23_p(i,j,k), g33_p(i,j,k), det, &
dens_p(i,j,k), scon_p(i,j,k,1), scon_p(i,j,k,2), scon_p(i,j,k,3), &
tau_p(i,j,k), rho_p(i,j,k), velx_p(i,j,k), vely_p(i,j,k), &
velz_p(i,j,k), eps_p(i,j,k), press_p(i,j,k), w_lorentz_p(i,j,k))
@@ -415,8 +524,8 @@ subroutine GRHydro_InitialAtmosphereReset(CCTK_ARGUMENTS)
velx_p_p(i,j,k) = 0.0d0
vely_p_p(i,j,k) = 0.0d0
velz_p_p(i,j,k) = 0.0d0
- det = SPATIAL_DETERMINANT(gaa_p_p(i,j,k), gab_p_p(i,j,k), gac_p_p(i,j,k), \
- gbb_p_p(i,j,k), gbc_p_p(i,j,k), gcc_p_p(i,j,k))
+ det = SPATIAL_DETERMINANT(g11_p_p(i,j,k), g12_p_p(i,j,k), g13_p_p(i,j,k), \
+ g22_p_p(i,j,k), g23_p_p(i,j,k), g33_p_p(i,j,k))
if(evolve_temper.ne.0) then
! set the temperature to be relatively low
@@ -427,8 +536,8 @@ subroutine GRHydro_InitialAtmosphereReset(CCTK_ARGUMENTS)
rho_p_p(i,j,k),eps_p_p(i,j,k),temperature_p_p(i,j,k),y_e_p_p(i,j,k),&
press_p_p(i,j,k),keyerr,anyerr)
call prim2con_hot(GRHydro_eos_handle, GRHydro_reflevel,&
- i,j,k,x(i,j,k),y(i,j,k),z(i,j,k),gaa_p_p(i,j,k),gab_p_p(i,j,k),&
- gac_p_p(i,j,k),gbb_p_p(i,j,k),gbc_p_p(i,j,k),gcc_p_p(i,j,k), &
+ i,j,k,x(i,j,k),y(i,j,k),z(i,j,k),g11_p_p(i,j,k),g12_p_p(i,j,k),&
+ g13_p_p(i,j,k),g22_p_p(i,j,k),g23_p_p(i,j,k),g33_p_p(i,j,k), &
det,dens_p_p(i,j,k),scon_p_p(i,j,k,1), scon_p_p(i,j,k,2), scon_p_p(i,j,k,3), &
tau_p_p(i,j,k), rho_p_p(i,j,k), velx_p_p(i,j,k), vely_p_p(i,j,k), &
velz_p_p(i,j,k), eps_p_p(i,j,k), press_p_p(i,j,k), w_lorentz_p_p(i,j,k),&
@@ -440,8 +549,8 @@ subroutine GRHydro_InitialAtmosphereReset(CCTK_ARGUMENTS)
call EOS_Omni_EpsFromPress(GRHydro_polytrope_handle,keytemp,GRHydro_eos_rf_prec,n,&
rho_p_p(i,j,k),xeps,xtemp,xye,press_p_p(i,j,k),eps_p_p(i,j,k),keyerr,anyerr)
call prim2conpolytype(eos_handle, &
- gaa_p_p(i,j,k), gab_p_p(i,j,k), gac_p_p(i,j,k), &
- gbb_p_p(i,j,k), gbc_p_p(i,j,k), gcc_p_p(i,j,k), det, &
+ g11_p_p(i,j,k), g12_p_p(i,j,k), g13_p_p(i,j,k), &
+ g22_p_p(i,j,k), g23_p_p(i,j,k), g33_p_p(i,j,k), det, &
dens_p_p(i,j,k), scon_p_p(i,j,k,1), scon_p_p(i,j,k,2), scon_p_p(i,j,k,3), &
tau_p_p(i,j,k), rho_p_p(i,j,k), velx_p_p(i,j,k), vely_p_p(i,j,k), &
velz_p_p(i,j,k), eps_p_p(i,j,k), press_p_p(i,j,k), w_lorentz_p_p(i,j,k))
diff --git a/src/make.code.defn b/src/make.code.defn
index 6ff530b..414313b 100644
--- a/src/make.code.defn
+++ b/src/make.code.defn
@@ -56,7 +56,7 @@ SRCS = Utils.F90 \
GRHydro_TmunuM.F90 \
GRHydro_UpdateMaskM.F90 \
GRHydro_UtilsM.F90 \
- GRHydro_TransformTensorBasis.F90 \
+ GRHydro_TransformTensorBasis.c \
GRHydro_Jacobian_state.c \
GRHydro_PPMMReconstruct_drv.F90\
GRHydro_ENOReconstruct_drv.F90\