diff options
author | rhaas <rhaas@c83d129a-5a75-4d5a-9c4d-ed3a5855bf45> | 2013-01-14 14:23:23 +0000 |
---|---|---|
committer | rhaas <rhaas@c83d129a-5a75-4d5a-9c4d-ed3a5855bf45> | 2013-01-14 14:23:23 +0000 |
commit | e6697d32350c5dab48bf59d2b36989e3ef15f21e (patch) | |
tree | 01f336b3978ddb3ccaa800f16250f77d59c00467 /src | |
parent | 4284e5495d1162cf347be5bd109ee6d271d46179 (diff) |
GRHydro: call polytrope EOS in a region dominated by mag. field.
From: Bruno Coutinho Mundim <bcmsma@astro.rit.edu>
git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinEvolve/GRHydro/trunk@451 c83d129a-5a75-4d5a-9c4d-ed3a5855bf45
Diffstat (limited to 'src')
-rw-r--r-- | src/GRHydro_Con2PrimM.F90 | 72 |
1 files changed, 60 insertions, 12 deletions
diff --git a/src/GRHydro_Con2PrimM.F90 b/src/GRHydro_Con2PrimM.F90 index 9e4552e..2ceef13 100644 --- a/src/GRHydro_Con2PrimM.F90 +++ b/src/GRHydro_Con2PrimM.F90 @@ -93,6 +93,8 @@ subroutine Conservative2PrimitiveM(CCTK_ARGUMENTS) CCTK_REAL :: velx_tmp, vely_tmp, velz_tmp, w_lorentz_tmp CCTK_REAL :: Bvecx_tmp, Bvecy_tmp, Bvecz_tmp + CCTK_REAL :: bdotv, magpress + ! Assume 3-metric is positive definite. Check deep inside the horizon ! if this is actually satisfied and if it is not then cast the metric !as conformally flat only for con2prim inversion purposes. @@ -166,7 +168,7 @@ subroutine Conservative2PrimitiveM(CCTK_ARGUMENTS) !$OMP sdet,d2,s2,oob,bscon,bxhat,byhat,bzhat, & !$OMP bhatscon,Wm,Wm0,Wm_resid,Wmold,s2m,s2m0,s2m_resid,s2mold,s2max, & !$OMP taum,niter,rho_tmp,press_tmp,eps_tmp,velx_tmp,vely_tmp,velz_tmp, & - !$OMP w_lorentz_tmp,Bvecx_tmp,Bvecy_tmp,Bvecz_tmp) + !$OMP w_lorentz_tmp,Bvecx_tmp,Bvecy_tmp,Bvecz_tmp,bdotv,magpress) do k = 1, nz do j = 1, ny do i = 1, nx @@ -345,6 +347,18 @@ subroutine Conservative2PrimitiveM(CCTK_ARGUMENTS) epsnegative,GRHydro_C2P_failed(i,j,k)) if(GRHydro_C2P_failed(i,j,k).ne.0) then + + xrho=1.0d0; xtemp=0.0d0; xeps=1.0d0 + call EOS_Omni_press(GRHydro_polytrope_handle,keytemp,GRHydro_eos_rf_prec,n,& + xrho,xeps,xtemp,xye,xpress,keyerr,anyerr) + local_K = xpress(1); + + xrho=10.0d0; xeps=1.0d0 + call EOS_Omni_press(GRHydro_polytrope_handle,keytemp,GRHydro_eos_rf_prec,n,& + xrho,xeps,xtemp,xye,xpress,keyerr,anyerr) + local_pgam=log(xpress(1)/local_K)/log(xrho(1)) + sc = local_K*dens(i,j,k) + if(sdet.ge.sqrtdet_thr) then GRHydro_C2P_failed(i,j,k) = 0 @@ -358,17 +372,6 @@ subroutine Conservative2PrimitiveM(CCTK_ARGUMENTS) Bvecx_tmp = Bprim(i,j,k,1) Bvecy_tmp = Bprim(i,j,k,2) Bvecz_tmp = Bprim(i,j,k,3) - - xrho=1.0d0; xtemp=0.0d0; xeps=1.0d0 - call EOS_Omni_press(GRHydro_polytrope_handle,keytemp,GRHydro_eos_rf_prec,n,& - xrho,xeps,xtemp,xye,xpress,keyerr,anyerr) - local_K = xpress(1); - - xrho=10.0d0; xeps=1.0d0 - call EOS_Omni_press(GRHydro_polytrope_handle,keytemp,GRHydro_eos_rf_prec,n,& - xrho,xeps,xtemp,xye,xpress,keyerr,anyerr) - local_pgam=log(xpress(1)/local_K)/log(xrho(1)) - sc = local_K*dens(i,j,k) call GRHydro_Con2PrimM_Polytype_pt(GRHydro_eos_handle, local_pgam, & dens(i,j,k),scon(i,j,k,1),scon(i,j,k,2),scon(i,j,k,3), sc, & @@ -391,6 +394,51 @@ subroutine Conservative2PrimitiveM(CCTK_ARGUMENTS) cycle end if end if + + bdotv=g11(i,j,k)*Bprim(i,j,k,1)*vup(i,j,k,1)+ & + g22(i,j,k)*Bprim(i,j,k,2)*vup(i,j,k,2)+ & + g33(i,j,k)*Bprim(i,j,k,3)*vup(i,j,k,3)+ & + 2.0*(g12(i,j,k)*Bprim(i,j,k,1)*vup(i,j,k,2)+ & + g13(i,j,k)*Bprim(i,j,k,1)*vup(i,j,k,3)+ & + g23(i,j,k)*Bprim(i,j,k,2)*vup(i,j,k,3)) + + magpress = 0.5d0*(b2/w_lorentz(i,j,k)**2+bdotv**2) + + if(rho(i,j,k)*eps(i,j,k)*max_magnetic_to_gas_pressure_ratio.le.magpress) then + GRHydro_C2P_failed(i,j,k) = 0 + + rho_tmp = rho(i,j,k) + press_tmp = press(i,j,k) + eps_tmp = eps(i,j,k) + velx_tmp = vup(i,j,k,1) + vely_tmp = vup(i,j,k,2) + velz_tmp = vup(i,j,k,3) + w_lorentz_tmp = w_lorentz(i,j,k) + Bvecx_tmp = Bprim(i,j,k,1) + Bvecy_tmp = Bprim(i,j,k,2) + Bvecz_tmp = Bprim(i,j,k,3) + + call GRHydro_Con2PrimM_Polytype_pt(GRHydro_eos_handle, local_pgam, & + dens(i,j,k),scon(i,j,k,1),scon(i,j,k,2),scon(i,j,k,3), sc, & + Bcons(i,j,k,1), Bcons(i,j,k,2), Bcons(i,j,k,3),rho_tmp,& + velx_tmp,vely_tmp,velz_tmp,eps_tmp,press_tmp,& + Bvecx_tmp,Bvecy_tmp,Bvecz_tmp,b2,w_lorentz_tmp,& + g11(i,j,k),g12(i,j,k),g13(i,j,k),g22(i,j,k),g23(i,j,k),g33(i,j,k), & + uxx,uxy,uxz,uyy,uyz,uzz,det, & + epsnegative,GRHydro_C2P_failed(i,j,k)) + + rho(i,j,k) = rho_tmp + press(i,j,k) = press_tmp + eps(i,j,k) = eps_tmp + vup(i,j,k,1) = velx_tmp + vup(i,j,k,2) = vely_tmp + vup(i,j,k,3) = velz_tmp + w_lorentz(i,j,k) = w_lorentz_tmp + Bprim(i,j,k,1) = Bvecx_tmp + Bprim(i,j,k,2) = Bvecy_tmp + Bprim(i,j,k,3) = Bvecz_tmp + cycle + end if end if else ! if(evolve_temper.eq.0) then |