User: cott Date: 2010/11/11 12:02 AM
Added: /EOS_Omni/src/ EOS_Omni_MultiVarCalls.F90
Log: * add a multi-var call
File Changes:
Directory: /EOS_Omni/src/ =========================
File [added]: EOS_Omni_MultiVarCalls.F90 Delta lines: +84 -0 =================================================================== --- EOS_Omni/src/EOS_Omni_MultiVarCalls.F90 (rev 0) +++ EOS_Omni/src/EOS_Omni_MultiVarCalls.F90 2010-11-11 06:02:12 UTC (rev 14) @@ -0,0 +1,84 @@ +#include "cctk.h" +#include "cctk_Parameters.h" +#include "cctk_Arguments.h" +#include "cctk_Functions.h" + +! eoskey: +! 1 --- polytropic EOS +! 2 --- gamma-law EOS +! 3 --- hybrid EOS +! 4 --- finite-T microphysical NSE EOS + + +subroutine EOS_Omni_EOS_short(eoskey,keytemp,rf_precision,npoints,& + rho,eps,temp,ye,press,entropy,cs2,dedt,dpderho,dpdrhoe,munu,& + keyerr,anyerr) + + use EOS_Omni_Module + implicit none + DECLARE_CCTK_PARAMETERS + + CCTK_INT, intent(in) :: eoskey,keytemp,npoints + CCTK_INT, intent(out) :: keyerr(npoints) + CCTK_INT, intent(out) :: anyerr + CCTK_REAL, intent(in) :: rf_precision + CCTK_REAL, intent(in) :: rho(npoints),ye(npoints) + CCTK_REAL, intent(inout) :: eps(npoints), temp(npoints) + CCTK_REAL, intent(out) :: press(npoints) + CCTK_REAL, intent(out) :: entropy(npoints) + CCTK_REAL, intent(out) :: cs2(npoints) + CCTK_REAL, intent(out) :: dedt(npoints) + CCTK_REAL, intent(out) :: dpderho(npoints) + CCTK_REAL, intent(out) :: dpdrhoe(npoints) + CCTK_REAL, intent(out) :: munu(npoints) + + ! local vars + integer :: i + character(256) :: warnstring + ! temporary vars for nuc_eos + real*8 :: xrho,xye,xtemp,xenr,xent + real*8 :: xprs,xmunu,xcs2 + real*8 :: xdedt,xdpderho,xdpdrhoe + + + if(eoskey.ne.4) then + call CCTK_WARN(0,"EOS_Omni_EOS_short currently does not work for this eoskey") + endif + + anyerr = 0 + keyerr(:) = 0 + + do i=1,npoints + + xrho = rho(i) * inv_rho_gf + xtemp = temp(i) + xye = ye(i) + xenr = eps(i) * inv_eps_gf + call nuc_eos_short(xrho,xtemp,xye,xenr,xprs,& + xent,xcs2,xdedt,xdpderho,xdpdrhoe,xmunu,& + keytemp,keyerr(i),rf_precision) + + if(keyerr(i).ne.0) then + anyerr = 1 + endif + + if(keytemp.eq.1.or.keytemp.eq.2) then + eps(i) = xenr * eps_gf + else if(keytemp.eq.2) then + eps(i) = xenr * eps_gf + temp(i) = xtemp + else + temp(i) = xtemp + endif + + press(i) = xprs * press_gf + entropy(i) = xent + cs2(i) = xcs2 + dedt(i) = xdedt * eps_gf + dpderho(i) = xdpderho * press_gf * inv_eps_gf + dpdrhoe(i) = xdpdrhoe * press_gf * inv_rho_gf + munu(i) = xmunu + + enddo + +end subroutine EOS_Omni_EOS_short