User: rhaas Date: 2011/09/15 11:46 AM
Modified: /trunk/ param.ccl /trunk/src/ GRHydro_Con2Prim.F90
Log: * improve behavior of CoreCollapseControl upon recovery * improve handling of too-low temperatures in GRHydro
File Changes:
Directory: /trunk/src/ ======================
File [modified]: GRHydro_Con2Prim.F90 Delta lines: +43 -6 =================================================================== --- trunk/src/GRHydro_Con2Prim.F90 2011-09-15 16:45:26 UTC (rev 269) +++ trunk/src/GRHydro_Con2Prim.F90 2011-09-15 16:46:26 UTC (rev 270) @@ -628,8 +628,8 @@ call CCTK_WARN(failinfomode,warnline) write(warnline,"(3i5,1P10E15.6)") ii,jj,kk,x,y,z call CCTK_WARN(failinfomode,warnline) - if(nf.gt.nfudgemax) then - call CCTK_WARN(failinfomode,"EOS error in c2p 0a: injected heat too many times") + if(nf.gt.nfudgemax.and.GRHydro_c2p_reset_eps_tau_hot_eos.ne.1) then + call CCTK_WARN(failinfomode,"EOS error in c2p 1: injected heat too many times") write(warnline,"(3i5,1P10E15.6)") ii,jj,kk,x,y,z call CCTK_WARN(failinfomode,warnline) write(warnline,"(1P10E15.6)") rho,epsilon,temp,ye @@ -639,6 +639,19 @@ write(warnline,"(A10,i5)") "reflevel: ", GRHydro_reflevel call CCTK_WARN(failinfomode,warnline) call CCTK_WARN(failwarnmode,"Aborting!!!") + else + call CCTK_WARN(failinfomode,"EOS error in c2p 1: LAST RESORT -- reset eps and tau based on old temp") + write(warnline,"(3i5,1P10E15.6)") ii,jj,kk,x,y,z + call CCTK_WARN(failinfomode,warnline) + write(warnline,"(1P10E15.6)") rho,epsilon,temp,ye + call CCTK_WARN(failinfomode,warnline) + keytemp = 1 + call EOS_Omni_press(handle,keytemp,GRHydro_eos_rf_prec,n,& + rho,epsilon,temp,ye,xpress,keyerr,anyerr) + tau = ( (rho + rho*epsilon) + xpress ) * w_lorentz**2 - xpress - rho*w_lorentz + write(warnline,"(1P10E15.6)") rho,epsilon,temp,ye + call CCTK_WARN(failinfomode,warnline) + keytemp = 0 endif else call CCTK_WARN(failinfomode,"EOS error in c2p 0") @@ -706,7 +719,7 @@ call CCTK_WARN(failinfomode,warnline) write(warnline,"(3i5,1P10E15.6)") ii,jj,kk,x,y,z call CCTK_WARN(failinfomode,warnline) - if(nf.gt.nfudgemax) then + if(nf.gt.nfudgemax.and.GRHydro_c2p_reset_eps_tau_hot_eos.ne.1) then call CCTK_WARN(failinfomode,"EOS error in c2p 1: injected heat too many times") write(warnline,"(3i5,1P10E15.6)") ii,jj,kk,x,y,z call CCTK_WARN(failinfomode,warnline) @@ -717,6 +730,19 @@ write(warnline,"(A10,i5)") "reflevel: ", GRHydro_reflevel call CCTK_WARN(failinfomode,warnline) call CCTK_WARN(failwarnmode,"Aborting!!!") + else + call CCTK_WARN(failinfomode,"EOS error in c2p 1: LAST RESORT -- reset eps and tau based on old temp") + write(warnline,"(3i5,1P10E15.6)") ii,jj,kk,x,y,z + call CCTK_WARN(failinfomode,warnline) + write(warnline,"(1P10E15.6)") rho,epsilon,temp,ye + call CCTK_WARN(failinfomode,warnline) + keytemp = 1 + call EOS_Omni_press(handle,keytemp,GRHydro_eos_rf_prec,n,& + rho,epsilon,temp,ye,xpress,keyerr,anyerr) + tau = ( (rho + rho*epsilon) + xpress ) * w_lorentz**2 - xpress - rho*w_lorentz + write(warnline,"(1P10E15.6)") rho,epsilon,temp,ye + call CCTK_WARN(failinfomode,warnline) + keytemp = 0 endif else call CCTK_WARN(failinfomode,"EOS error in c2p 1") @@ -789,8 +815,6 @@ ! found for a given epsilon. The amount of times ! we get to this place should be monitored, as this ! 'failsafe' mode creates artificial heat. - write(warnline,"(4i5,1P10E15.6)") GRHydro_reflevel,ii,jj,kk,x,y,z - call CCTK_WARN(0,warnline) nf = 0 do while(anyerr.ne.0.and.nf.le.nfudgemax) anyerr = 0 @@ -804,7 +828,7 @@ call CCTK_WARN(failinfomode,warnline) write(warnline,"(3i5,1P10E15.6)") ii,jj,kk,x,y,z call CCTK_WARN(failinfomode,warnline) - if(nf.gt.nfudgemax) then + if(nf.gt.nfudgemax.and.GRHydro_c2p_reset_eps_tau_hot_eos.ne.1) then call CCTK_WARN(failinfomode,"EOS error in c2p 1: injected heat too many times") write(warnline,"(3i5,1P10E15.6)") ii,jj,kk,x,y,z call CCTK_WARN(failinfomode,warnline) @@ -815,6 +839,19 @@ write(warnline,"(A10,i5)") "reflevel: ", GRHydro_reflevel call CCTK_WARN(failinfomode,warnline) call CCTK_WARN(failwarnmode,"Aborting!!!") + else + call CCTK_WARN(failinfomode,"EOS error in c2p 1: LAST RESORT -- reset eps and tau based on old temp") + write(warnline,"(3i5,1P10E15.6)") ii,jj,kk,x,y,z + call CCTK_WARN(failinfomode,warnline) + write(warnline,"(1P10E15.6)") rho,epsilon,temp,ye + call CCTK_WARN(failinfomode,warnline) + keytemp = 1 + call EOS_Omni_press(handle,keytemp,GRHydro_eos_rf_prec,n,& + rho,epsilon,temp,ye,xpress,keyerr,anyerr) + tau = ( (rho + rho*epsilon) + xpress ) * w_lorentz**2 - xpress - rho*w_lorentz + write(warnline,"(1P10E15.6)") rho,epsilon,temp,ye + call CCTK_WARN(failinfomode,warnline) + keytemp = 0 endif else call CCTK_WARN(failinfomode,"EOS error in c2p 2")
Directory: /trunk/ ==================
File [modified]: param.ccl Delta lines: +4 -0 =================================================================== --- trunk/param.ccl 2011-09-15 16:45:26 UTC (rev 269) +++ trunk/param.ccl 2011-09-15 16:46:26 UTC (rev 270) @@ -267,6 +267,10 @@ boolean GRHydro_eos_hot_eps_fix "Activate quasi-failsafe mode for hot EOSs" STEERABLE=ALWAYS { } "no" + +boolean GRHydro_c2p_reset_eps_tau_hot_eos "As a last resort, reset tau" STEERABLE=ALWAYS +{ +} "no"
REAL GRHydro_hot_atmo_temp "Temperature of the hot atmosphere in MeV" STEERABLE=ALWAYS {