diff options
Diffstat (limited to 'src/GRHydro_SourceAM.F90')
-rw-r--r-- | src/GRHydro_SourceAM.F90 | 679 |
1 files changed, 679 insertions, 0 deletions
diff --git a/src/GRHydro_SourceAM.F90 b/src/GRHydro_SourceAM.F90 new file mode 100644 index 0000000..1e0b190 --- /dev/null +++ b/src/GRHydro_SourceAM.F90 @@ -0,0 +1,679 @@ + /*@@ + @file GRHydro_SourceM.F90 + @date Oct 11, 2010 + @author Joshua Faber, Scott Noble, Bruno Mundim, Ian Hawke + @desc + The geometric source terms for the matter evolution + @enddesc + @@*/ + +! Second order f.d. + +#define DIFF_X_2(q) (0.5d0 * (q(i+1,j,k) - q(i-1,j,k)) * idx) +#define DIFF_Y_2(q) (0.5d0 * (q(i,j+1,k) - q(i,j-1,k)) * idy) +#define DIFF_Z_2(q) (0.5d0 * (q(i,j,k+1) - q(i,j,k-1)) * idz) + +! Fourth order f.d. + +#define DIFF_X_4(q) ((-q(i+2,j,k) + 8.d0 * q(i+1,j,k) - 8.d0 * q(i-1,j,k) + \ + q(i-2,j,k)) / 12.d0 * idx) +#define DIFF_Y_4(q) ((-q(i,j+2,k) + 8.d0 * q(i,j+1,k) - 8.d0 * q(i,j-1,k) + \ + q(i,j-2,k)) / 12.d0 * idy) +#define DIFF_Z_4(q) ((-q(i,j,k+2) + 8.d0 * q(i,j,k+1) - 8.d0 * q(i,j,k-1) + \ + q(i,j,k-2)) / 12.d0 * idz) + +#include "cctk.h" +#include "cctk_Parameters.h" +#include "cctk_Arguments.h" +#include "GRHydro_Macros.h" + +#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 Bvecx(i,j,k) Bprim(i,j,k,1) +#define Bvecy(i,j,k) Bprim(i,j,k,2) +#define Bvecz(i,j,k) Bprim(i,j,k,3) +#define Avecx(i,j,k) Avec(i,j,k,1) +#define Avecy(i,j,k) Avec(i,j,k,2) +#define Avecz(i,j,k) Avec(i,j,k,3) +#define Avecrhsx(i,j,k) Avecrhs(i,j,k,1) +#define Avecrhsy(i,j,k) Avecrhs(i,j,k,2) +#define Avecrhsz(i,j,k) Avecrhs(i,j,k,3) + + /*@@ + @routine SourceTermsAM + @date Aug 30, 2010 + @author Tanja Bode, Joshua Faber, Scott Noble, Bruno Mundim, Ian Hawke + @desc + Calculate the geometric source terms and add to the update GFs + @enddesc + @calls + @calledby + @history + Minor alterations of routine from GR3D. + @endhistory + +@@*/ + +subroutine SourceTermsAM(CCTK_ARGUMENTS) + + implicit none + + ! save memory when MP is not used + ! TARGET as to be before DECLARE_CCTK_ARGUMENTS for gcc 4.1 + TARGET gaa, gab, gac, gbb, gbc, gcc + TARGET gxx, gxy, gxz, gyy, gyz, gzz + TARGET kaa, kab, kac, kbb, kbc, kcc + TARGET kxx, kxy, kxz, kyy, kyz, kzz + TARGET betaa, betab, betac + TARGET betax, betay, betaz + TARGET lvel, vel + TARGET lBvec, Bvec + + DECLARE_CCTK_ARGUMENTS + DECLARE_CCTK_PARAMETERS + + CCTK_INT :: i, j, k, nx, ny, nz + CCTK_REAL :: one, two, half + CCTK_REAL :: t00, t0x, t0y, t0z, txx, txy, txz, tyy, tyz, tzz + CCTK_REAL :: sqrtdet, det, uxx, uxy, uxz, uyy, uyz, uzz + CCTK_REAL :: shiftx, shifty, shiftz, velxshift, velyshift, velzshift + CCTK_REAL :: vlowx, vlowy, vlowz + CCTK_REAL :: dx_betax, dx_betay, dx_betaz, dy_betax, dy_betay,& + dy_betaz, dz_betax, dz_betay, dz_betaz + CCTK_REAL :: dx_alp, dy_alp, dz_alp + CCTK_REAL :: tau_source, sx_source, sy_source, sz_source + CCTK_REAL :: localgxx,localgxy,localgxz,localgyy,localgyz,localgzz + CCTK_REAL :: dx_gxx, dx_gxy, dx_gxz, dx_gyy, dx_gyz, dx_gzz + CCTK_REAL :: dy_gxx, dy_gxy, dy_gxz, dy_gyy, dy_gyz, dy_gzz + CCTK_REAL :: dz_gxx, dz_gxy, dz_gxz, dz_gyy, dz_gyz, dz_gzz + CCTK_REAL :: dx, dy, dz, idx, idy, idz + CCTK_REAL :: shiftshiftk, shiftkx, shiftky, shiftkz + CCTK_REAL :: sumTK + CCTK_REAL :: halfshiftdgx, halfshiftdgy, halfshiftdgz + CCTK_REAL :: halfTdgx, halfTdgy, halfTdgz + CCTK_REAL :: invalp, invalp2 + CCTK_REAL :: Avcx_source, Avcy_source, Avcz_source + CCTK_REAL :: dx_det_bydet, dy_det_bydet, dz_det_bydet + CCTK_REAL :: gdg_x, gdg_y, gdg_z !! g^{ik} d_k g_{ij} + + CCTK_REAL :: Bvecxlow,Bvecylow,Bveczlow,bdotv,b2,dum1,dum2,bxlow,bylow,bzlow + CCTK_REAL :: bt,bx,by,bz,rhohstarW2,pstar + + logical, allocatable, dimension (:,:,:) :: force_spatial_second_order + + ! save memory when MP is not used + CCTK_INT :: GRHydro_UseGeneralCoordinates + CCTK_REAL, DIMENSION(:,:,:), POINTER :: g11, g12, g13, g22, g23, g33 + CCTK_REAL, DIMENSION(:,:,:), POINTER :: k11, k12, k13, k22, k23, k33 + CCTK_REAL, DIMENSION(:,:,:), POINTER :: beta1, beta2, beta3 + CCTK_REAL, DIMENSION(:,:,:,:), POINTER :: vup, Bprim + + if (GRHydro_UseGeneralCoordinates(cctkGH).ne.0) then + g11 => gaa + g12 => gab + g13 => gac + g22 => gbb + g23 => gbc + g33 => gcc + k11 => kaa + k12 => kab + k13 => kac + k22 => kbb + k23 => kbc + k33 => kcc + beta1 => betaa + beta2 => betab + beta3 => betac + vup => lvel + Bprim => lBvec + else + g11 => gxx + g12 => gxy + g13 => gxz + g22 => gyy + g23 => gyz + g33 => gzz + k11 => kxx + k12 => kxy + k13 => kxz + k22 => kyy + k23 => kyz + k33 => kzz + beta1 => betax + beta2 => betay + beta3 => betaz + vup => vel + Bprim => Bvec + end if +#define gxx faulty_gxx +#define gxy faulty_gxy +#define gxz faulty_gxz +#define gyy faulty_gyy +#define gyz faulty_gyz +#define gzz faulty_gzz +#define kxx faulty_kxx +#define kxy faulty_kxy +#define kxz faulty_kxz +#define kyy faulty_kyy +#define kyz faulty_kyz +#define kzz faulty_kzz +#define betax faulty_betax +#define betay faulty_betay +#define betaz faulty_betaz +#define gaa faulty_gaa +#define gab faulty_gab +#define gac faulty_gac +#define gbb faulty_gbb +#define gbc faulty_gbc +#define gcc faulty_gcc +#define kaa faulty_kaa +#define kab faulty_kab +#define kac faulty_kac +#define kbb faulty_kbb +#define kbc faulty_kbc +#define kcc faulty_kcc +#define betaa faulty_betaa +#define betab faulty_betab +#define betac faulty_betac +#define vel faulty_vel +#define Bvec faulty_Bvec + + one = 1.0d0 + two = 2.0d0 + half = 0.5d0 + nx = cctk_lsh(1) + ny = cctk_lsh(2) + nz = cctk_lsh(3) + dx = CCTK_DELTA_SPACE(1) + dy = CCTK_DELTA_SPACE(2) + dz = CCTK_DELTA_SPACE(3) + idx = 1.d0/dx + idy = 1.d0/dy + idz = 1.d0/dz + +!!$ Initialize the update terms to be zero. +!!$ This will guarantee that no garbage in the boundaries is updated. + + densrhs = 0.d0 + srhs = 0.d0 + taurhs = 0.d0 + Avecrhs = 0.d0 + + if (evolve_tracer .ne. 0) then + cons_tracerrhs = 0.d0 + end if + + if (evolve_Y_e .ne. 0) then + Y_e_con_rhs = 0.0d0 + endif + + if (clean_divergence .ne. 0) then + psidcrhs=0.d0 + endif + + if (track_divB .ne. 0) then + divB=0.d0 + endif + + if (transport_constraints .ne. 0) then + Evec = 0.d0 + endif + + +!!$ Set up the array for checking the order. We switch to second order +!!$ differencing at boundaries and near excision regions. +!!$ Copied straight from BSSN. + + allocate (force_spatial_second_order(nx,ny,nz)) + force_spatial_second_order = .FALSE. + + if (spatial_order > 2) then + !$OMP PARALLEL DO PRIVATE(i, j, k) + do k = 1 + GRHydro_stencil, nz - GRHydro_stencil + do j = 1 + GRHydro_stencil, ny - GRHydro_stencil + do i = 1 + GRHydro_stencil, nx - GRHydro_stencil + if ((i < 3).or.(i > cctk_lsh(1) - 2).or. & + (j < 3).or.(j > cctk_lsh(2) - 2).or. & + (k < 3).or.(k > cctk_lsh(3) - 2) ) then + force_spatial_second_order(i,j,k) = .TRUE. + else if ( use_mask > 0 ) then + if (minval(emask(i-2:i+2,j-2:j+2,k-2:k+2)) < 0.75d0) then + force_spatial_second_order(i,j,k) = .TRUE. + end if + end if + end do + end do + end do + !$OMP END PARALLEL DO + end if + + !$OMP PARALLEL DO PRIVATE(i, j, k, local_spatial_order,& + !$OMP localgxx,localgxy,localgxz,localgyy,localgyz,localgzz,& + !$OMP det,sqrtdet,shiftx,shifty,shiftz,& + !$OMP dx_betax,dx_betay,dx_betaz,dy_betax,dy_betay,dy_betaz,& + !$OMP dz_betax,dz_betay,dz_betaz,velxshift,velyshift,velzshift,& + !$OMP vlowx,vlowy,vlowz,Bvecxlow,Bvecylow,Bveczlow, & + !$OMP bdotv,b2,dum1,dum2,bxlow,bylow,bzlow,bt,bx,by,bz,rhohstarW2,pstar,& + !$OMP t00,t0x,t0y,t0z,txx,txy,txz,tyy,tyz,tzz,& + !$OMP dx_alp,dy_alp,dz_alp,& + !$OMP tau_source,sx_source,sy_source,sz_source,& + !$OMP dx_det_bydet,dy_det_bydet,dz_det_bydet,& + !$OMP gdg_x,gdg_y,gdg_z,& + !$OMP Avcx_source,Avcy_source,Avcz_source,evolve_Lorenz_gge,& + !$OMP uxx, uxy, uxz, uyy, uyz, uzz,& + !$OMP dx_gxx, dx_gxy, dx_gxz, dx_gyy, dx_gyz, dx_gzz,& + !$OMP dy_gxx, dy_gxy, dy_gxz, dy_gyy, dy_gyz, dy_gzz,& + !$OMP dz_gxx, dz_gxy, dz_gxz, dz_gyy, dz_gyz, dz_gzz,& + !$OMP shiftshiftk,shiftkx,shiftky,shiftkz,& + !$OMP sumTK,halfshiftdgx,halfshiftdgy,halfshiftdgz,& + !$OMP halfTdgx,halfTdgy,halfTdgz,invalp,invalp2) + do k=1 + GRHydro_stencil,nz - GRHydro_stencil + do j=1 + GRHydro_stencil,ny - GRHydro_stencil + do i=1 + GRHydro_stencil,nx - GRHydro_stencil + + local_spatial_order = spatial_order + if (force_spatial_second_order(i,j,k)) then + local_spatial_order = 2 + end if + +!!$ Set the metric terms. + + localgxx = g11(i,j,k) + localgxy = g12(i,j,k) + localgxz = g13(i,j,k) + localgyy = g22(i,j,k) + localgyz = g23(i,j,k) + localgzz = g33(i,j,k) + + det = SPATIAL_DETERMINANT(localgxx, localgxy, localgxz,\ + localgyy, localgyz, localgzz) + sqrtdet = sqrt(det) + call UpperMetric(uxx, uxy, uxz, uyy, uyz, uzz, det, localgxx,& + localgxy, localgxz, localgyy, localgyz, localgzz) + + + shiftx = beta1(i,j,k) + shifty = beta2(i,j,k) + shiftz = beta3(i,j,k) + + if (local_spatial_order .eq. 2) then + + dx_betax = DIFF_X_2(beta1) + dx_betay = DIFF_X_2(beta2) + dx_betaz = DIFF_X_2(beta3) + + dy_betax = DIFF_Y_2(beta1) + dy_betay = DIFF_Y_2(beta2) + dy_betaz = DIFF_Y_2(beta3) + + dz_betax = DIFF_Z_2(beta1) + dz_betay = DIFF_Z_2(beta2) + dz_betaz = DIFF_Z_2(beta3) + + else + + dx_betax = DIFF_X_4(beta1) + dx_betay = DIFF_X_4(beta2) + dx_betaz = DIFF_X_4(beta3) + + dy_betax = DIFF_Y_4(beta1) + dy_betay = DIFF_Y_4(beta2) + dy_betaz = DIFF_Y_4(beta3) + + dz_betax = DIFF_Z_4(beta1) + dz_betay = DIFF_Z_4(beta2) + dz_betaz = DIFF_Z_4(beta3) + + end if + + invalp = 1.0d0 / alp(i,j,k) + invalp2 = invalp**2 + velxshift = velx(i,j,k) - shiftx*invalp + velyshift = vely(i,j,k) - shifty*invalp + velzshift = velz(i,j,k) - shiftz*invalp + + call calc_vlow_blow(localgxx,localgxy,localgxz,localgyy,localgyz,localgzz, & + velx(i,j,k),vely(i,j,k),velz(i,j,k),Bvecx(i,j,k),Bvecy(i,j,k),Bvecz(i,j,k), & + vlowx,vlowy,vlowz,Bvecxlow,Bvecylow,Bveczlow, & + bdotv,b2,dum1,dum2,bxlow,bylow,bzlow) + +!!$ These are the contravariant components + bt = w_lorentz(i,j,k)/alp(i,j,k)*bdotv + bx = Bvecx(i,j,k)/w_lorentz(i,j,k)+w_lorentz(i,j,k)*bdotv*velxshift + by = Bvecy(i,j,k)/w_lorentz(i,j,k)+w_lorentz(i,j,k)*bdotv*velyshift + bz = Bvecz(i,j,k)/w_lorentz(i,j,k)+w_lorentz(i,j,k)*bdotv*velzshift + + rhohstarW2 = (rho(i,j,k)*(one + eps(i,j,k)) + press(i,j,k)+ b2)*& + w_lorentz(i,j,k)**2 + pstar = press(i,j,k)+0.5d0*b2 + +!!$ For a change, these are T^{ij} + + t00 = (rhohstarW2 - pstar)*invalp2-bt**2 + t0x = rhohstarW2*velxshift*invalp +& + pstar*shiftx*invalp2-bt*bx + t0y = rhohstarW2*velyshift*invalp +& + pstar*shifty*invalp2-bt*by + t0z = rhohstarW2*velzshift*invalp +& + pstar*shiftz*invalp2-bt*bz + txx = rhohstarW2*velxshift*velxshift +& + pstar*(uxx - shiftx*shiftx*invalp2)-bx**2 + txy = rhohstarW2*velxshift*velyshift +& + pstar*(uxy - shiftx*shifty*invalp2)-bx*by + txz = rhohstarW2*velxshift*velzshift +& + pstar*(uxz - shiftx*shiftz*invalp2)-bx*bz + tyy = rhohstarW2*velyshift*velyshift +& + pstar*(uyy - shifty*shifty*invalp2)-by**2 + tyz = rhohstarW2*velyshift*velzshift +& + pstar*(uyz - shifty*shiftz*invalp2)-by*bz + tzz = rhohstarW2*velzshift*velzshift +& + pstar*(uzz - shiftz*shiftz*invalp2)-bz**2 + +!!$ Derivatives of the lapse, metric and shift + + if (local_spatial_order .eq. 2) then + + dx_alp = DIFF_X_2(alp) + dy_alp = DIFF_Y_2(alp) + dz_alp = DIFF_Z_2(alp) + + else + + dx_alp = DIFF_X_4(alp) + dy_alp = DIFF_Y_4(alp) + dz_alp = DIFF_Z_4(alp) + + end if + + if (local_spatial_order .eq. 2) then + + dx_gxx = DIFF_X_2(g11) + dx_gxy = DIFF_X_2(g12) + dx_gxz = DIFF_X_2(g13) + dx_gyy = DIFF_X_2(g22) + dx_gyz = DIFF_X_2(g23) + dx_gzz = DIFF_X_2(g33) + dy_gxx = DIFF_Y_2(g11) + dy_gxy = DIFF_Y_2(g12) + dy_gxz = DIFF_Y_2(g13) + dy_gyy = DIFF_Y_2(g22) + dy_gyz = DIFF_Y_2(g23) + dy_gzz = DIFF_Y_2(g33) + dz_gxx = DIFF_Z_2(g11) + dz_gxy = DIFF_Z_2(g12) + dz_gxz = DIFF_Z_2(g13) + dz_gyy = DIFF_Z_2(g22) + dz_gyz = DIFF_Z_2(g23) + dz_gzz = DIFF_Z_2(g33) + + else + + dx_gxx = DIFF_X_4(g11) + dx_gxy = DIFF_X_4(g12) + dx_gxz = DIFF_X_4(g13) + dx_gyy = DIFF_X_4(g22) + dx_gyz = DIFF_X_4(g23) + dx_gzz = DIFF_X_4(g33) + dy_gxx = DIFF_Y_4(g11) + dy_gxy = DIFF_Y_4(g12) + dy_gxz = DIFF_Y_4(g13) + dy_gyy = DIFF_Y_4(g22) + dy_gyz = DIFF_Y_4(g23) + dy_gzz = DIFF_Y_4(g33) + dz_gxx = DIFF_Z_4(g11) + dz_gxy = DIFF_Z_4(g12) + dz_gxz = DIFF_Z_4(g13) + dz_gyy = DIFF_Z_4(g22) + dz_gyz = DIFF_Z_4(g23) + dz_gzz = DIFF_Z_4(g33) + + end if + +!!$ Contract the shift with the extrinsic curvature + + shiftshiftk = shiftx*shiftx*k11(i,j,k) + & + shifty*shifty*k22(i,j,k) + & + shiftz*shiftz*k33(i,j,k) + & + two*(shiftx*shifty*k12(i,j,k) + & + shiftx*shiftz*k13(i,j,k) + & + shifty*shiftz*k23(i,j,k)) + + shiftkx = shiftx*k11(i,j,k) + shifty*k12(i,j,k) + shiftz*k13(i,j,k) + shiftky = shiftx*k12(i,j,k) + shifty*k22(i,j,k) + shiftz*k23(i,j,k) + shiftkz = shiftx*k13(i,j,k) + shifty*k23(i,j,k) + shiftz*k33(i,j,k) + +!!$ Contract the matter terms with the extrinsic curvature + + sumTK = txx*k11(i,j,k) + tyy*k22(i,j,k) + tzz*k33(i,j,k) & + + two*(txy*k12(i,j,k) + txz*k13(i,j,k) + tyz*k23(i,j,k)) + +!!$ Update term for tau + + tau_source = t00* & + (shiftshiftk - (shiftx*dx_alp + shifty*dy_alp + shiftz*dz_alp) )& + + t0x*(-dx_alp + two*shiftkx) & + + t0y*(-dy_alp + two*shiftky) & + + t0z*(-dz_alp + two*shiftkz) & + + sumTK + +!!$ The following looks very little like the terms in the +!!$ standard papers. Take a look in the ThornGuide to see why +!!$ it is really the same thing. + +!!$ Contract the shift with derivatives of the metric + + halfshiftdgx = half*(shiftx*shiftx*dx_gxx + & + shifty*shifty*dx_gyy + shiftz*shiftz*dx_gzz) + & + shiftx*shifty*dx_gxy + shiftx*shiftz*dx_gxz + & + shifty*shiftz*dx_gyz + halfshiftdgy = half*(shiftx*shiftx*dy_gxx + & + shifty*shifty*dy_gyy + shiftz*shiftz*dy_gzz) + & + shiftx*shifty*dy_gxy + shiftx*shiftz*dy_gxz + & + shifty*shiftz*dy_gyz + halfshiftdgz = half*(shiftx*shiftx*dz_gxx + & + shifty*shifty*dz_gyy + shiftz*shiftz*dz_gzz) + & + shiftx*shifty*dz_gxy + shiftx*shiftz*dz_gxz + & + shifty*shiftz*dz_gyz + +!!$ Contract the matter with derivatives of the metric + + halfTdgx = half*(txx*dx_gxx + tyy*dx_gyy + tzz*dx_gzz) +& + txy*dx_gxy + txz*dx_gxz + tyz*dx_gyz + halfTdgy = half*(txx*dy_gxx + tyy*dy_gyy + tzz*dy_gzz) +& + txy*dy_gxy + txz*dy_gxz + tyz*dy_gyz + halfTdgz = half*(txx*dz_gxx + tyy*dz_gyy + tzz*dz_gzz) +& + txy*dz_gxy + txz*dz_gxz + tyz*dz_gyz + + + + + sx_source = t00*& + (halfshiftdgx - alp(i,j,k)*dx_alp) + halfTdgx + & + t0x*(shiftx*dx_gxx + shifty*dx_gxy + shiftz*dx_gxz) +& + t0y*(shiftx*dx_gxy + shifty*dx_gyy + shiftz*dx_gyz) +& + t0z*(shiftx*dx_gxz + shifty*dx_gyz + shiftz*dx_gzz) +& + rhohstarW2*invalp*(vlowx*dx_betax + vlowy*dx_betay + vlowz*dx_betaz) -& + bt*(bxlow*dx_betax + bylow*dx_betay + bzlow*dx_betaz) + + sy_source = t00*& + (halfshiftdgy - alp(i,j,k)*dy_alp) + halfTdgy + & + t0x*(shiftx*dy_gxx + shifty*dy_gxy + shiftz*dy_gxz) +& + t0y*(shiftx*dy_gxy + shifty*dy_gyy + shiftz*dy_gyz) +& + t0z*(shiftx*dy_gxz + shifty*dy_gyz + shiftz*dy_gzz) +& + rhohstarW2*invalp*(vlowx*dy_betax + vlowy*dy_betay + vlowz*dy_betaz) -& + bt*(bxlow*dy_betax + bylow*dy_betay + bzlow*dy_betaz) + + sz_source = t00*& + (halfshiftdgz - alp(i,j,k)*dz_alp) + halfTdgz + & + t0x*(shiftx*dz_gxx + shifty*dz_gxy + shiftz*dz_gxz) +& + t0y*(shiftx*dz_gxy + shifty*dz_gyy + shiftz*dz_gyz) +& + t0z*(shiftx*dz_gxz + shifty*dz_gyz + shiftz*dz_gzz) +& + rhohstarW2*invalp*(vlowx*dz_betax + vlowy*dz_betay + vlowz*dz_betaz) -& + bt*(bxlow*dz_betax + bylow*dz_betay + bzlow*dz_betaz) + + !! B^i and A^i both live in cell centers currently + Avcx_source = sqrtdet*(vely(i,j,k)*Bvecz(i,j,k) - velz(i,j,k)*Bvecy(i,j,k)) + Avcy_source = sqrtdet*(velz(i,j,k)*Bvecx(i,j,k) - velx(i,j,k)*Bvecz(i,j,k)) + Avcz_source = sqrtdet*(velx(i,j,k)*Bvecy(i,j,k) - vely(i,j,k)*Bvecx(i,j,k)) + + if ( evolve_Lorenz_gge.gt.0 ) then + Aphi(i,j,k) = 0.d0 + end if + + densrhs(i,j,k) = 0.d0 + srhs(i,j,k,1) = alp(i,j,k)*sqrtdet*sx_source + srhs(i,j,k,2) = alp(i,j,k)*sqrtdet*sy_source + srhs(i,j,k,3) = alp(i,j,k)*sqrtdet*sz_source + taurhs(i,j,k) = alp(i,j,k)*sqrtdet*tau_source + Avecrhsx(i,j,k) = Avcx_source + Avecrhsy(i,j,k) = Avcy_source + Avecrhsz(i,j,k) = Avcz_source + + enddo + enddo + enddo + !$OMP END PARALLEL DO + + deallocate(force_spatial_second_order) + +#if(0) /* poison edges of domain */ + if(last_iteration_seen .ne. cctk_iteration .or. reflevel .ne. grhydro_reflevel) then + last_iteration_seen = cctk_iteration + reflevel = grhydro_reflevel + mol_substep = 0 + else + mol_substep = mol_substep + 1 + end if + do k = 1, GRHydro_stencil*mol_substep + do j = 1, cctk_lsh(2) + do i = 1, cctk_lsh(1) + dens(i,j,k) = -1d100 + Scon(i,j,k,1) = -1d100 + Scon(i,j,k,2) = -1d100 + Scon(i,j,k,3) = -1d100 + tau(i,j,k) = -1d100 + Avecx(i,j,k) = -1d100 + Avecy(i,j,k) = -1d100 + Avecz(i,j,k) = -1d100 + if ( evolve_Lorenz_gge.gt.0 ) then + Aphi(i,j,k) = -1d100 + end if + end do + end do + end do + do k = cctk_lsh(3)-GRHydro_stencil*mol_substep+1, cctk_lsh(3) + do j = 1, cctk_lsh(2) + do i = 1, cctk_lsh(1) + dens(i,j,k) = -1d100 + Scon(i,j,k,1) = -1d100 + Scon(i,j,k,2) = -1d100 + Scon(i,j,k,3) = -1d100 + tau(i,j,k) = -1d100 + Avecx(i,j,k) = -1d100 + Avecy(i,j,k) = -1d100 + Avecz(i,j,k) = -1d100 + if ( evolve_Lorenz_gge.gt.0 ) then + Aphi(i,j,k) = -1d100 + end if + end do + end do + end do + do i = 1, GRHydro_stencil*mol_substep + do k = 1, cctk_lsh(3) + do j = 1, cctk_lsh(2) + dens(i,j,k) = -1d100 + Scon(i,j,k,1) = -1d100 + Scon(i,j,k,2) = -1d100 + Scon(i,j,k,3) = -1d100 + tau(i,j,k) = -1d100 + Avecx(i,j,k) = -1d100 + Avecy(i,j,k) = -1d100 + Avecz(i,j,k) = -1d100 + if ( evolve_Lorenz_gge.gt.0 ) then + Aphi(i,j,k) = -1d100 + end if + end do + end do + end do + do i = cctk_lsh(1)-GRHydro_stencil*mol_substep+1, cctk_lsh(1) + do k = 1, cctk_lsh(3) + do j = 1, cctk_lsh(2) + dens(i,j,k) = -1d100 + Scon(i,j,k,1) = -1d100 + Scon(i,j,k,2) = -1d100 + Scon(i,j,k,3) = -1d100 + tau(i,j,k) = -1d100 + Avecx(i,j,k) = -1d100 + Avecy(i,j,k) = -1d100 + Avecz(i,j,k) = -1d100 + if ( evolve_Lorenz_gge.gt.0 ) then + Aphi(i,j,k) = -1d100 + end if + end do + end do + end do + do j = 1, GRHydro_stencil*mol_substep + do i = 1, cctk_lsh(1) + do k = 1, cctk_lsh(3) + dens(i,j,k) = -1d100 + Scon(i,j,k,1) = -1d100 + Scon(i,j,k,2) = -1d100 + Scon(i,j,k,3) = -1d100 + tau(i,j,k) = -1d100 + Avecx(i,j,k) = -1d100 + Avecy(i,j,k) = -1d100 + Avecz(i,j,k) = -1d100 + if ( evolve_Lorenz_gge.gt.0 ) then + Aphi(i,j,k) = -1d100 + end if + end do + end do + end do + do j = cctk_lsh(2)-GRHydro_stencil*mol_substep+1, cctk_lsh(2) + do i = 1, cctk_lsh(1) + do k = 1, cctk_lsh(3) + dens(i,j,k) = -1d100 + Scon(i,j,k,1) = -1d100 + Scon(i,j,k,2) = -1d100 + Scon(i,j,k,3) = -1d100 + tau(i,j,k) = -1d100 + Avecx(i,j,k) = -1d100 + Avecy(i,j,k) = -1d100 + Avecz(i,j,k) = -1d100 + if ( evolve_Lorenz_gge.gt.0 ) then + Aphi(i,j,k) = -1d100 + end if + end do + end do + end do +#endif + +#undef faulty_gxx +#undef faulty_gxy +#undef faulty_gxz +#undef faulty_gyy +#undef faulty_gyz +#undef faulty_gzz +#undef faulty_vel +#undef faulty_Bvec +#undef faulty_gxx_p +#undef faulty_gxy_p +#undef faulty_gxz_p +#undef faulty_gyy_p +#undef faulty_gyz_p +#undef faulty_gzz_p +#undef faulty_vel_p +#undef faulty_Bvec_p +#undef faulty_gxx_p_p +#undef faulty_gxy_p_p +#undef faulty_gxz_p_p +#undef faulty_gyy_p_p +#undef faulty_gyz_p_p +#undef faulty_gzz_p_p +#undef faulty_vel_p_p +#undef faulty_Bvec_p_p +end subroutine SourceTermsAM + + + |