eos_temperature_ionization
Module
Description
$Id$
Routine for ideal gas with variable degree of ionization and hence variable mean molecular weight. Here, the ionization fraction, yH, is allocated as an additional auxiliary array in f.
** AUTOMATIC CPARAM.INC GENERATION ************************ Declare (for generation of cparam.inc) the number of f array variables and auxiliary variables added by this module
CPARAM logical, parameter :: leos = .true., leos_ionization = .true., leos_temperature_ionization=.true. CPARAM logical, parameter :: leos_idealgas = .false., leos_chemistry = .false.
MVAR CONTRIBUTION 0 MAUX CONTRIBUTION 1
PENCILS PROVIDED ss; gss(3); ee; pp; lnTT; cs2; nabla_ad; glnTT(3); TT; TT1; gTT(3) PENCILS PROVIDED yH; del2ss; del2lnTT; del2TT; cv; cv1; cp; cp1; gamma; gamma_m1; gamma1 PENCILS PROVIDED mu1; hlnTT(3,3); rho1gpp(3); delta; gradcp(3); del6lnTT PENCILS PROVIDED glnmumol(3); ppvap; csvap2; rho_anel
Quick access
- Variables:
b_ext_eos,bc_lnrho_hdss_z_liso,calc_pencils_eos,calc_pencils_eos_pencpar,calc_pencils_eos_std,chih_ev,chihminus_ev,cp_const,cpdry,cpdry1,cs0,cs20,cs20_tdep_rate,cs2_tdep_ascale_power,cs2bot,cs2top,cvdry,cvdry1,dlnrho0dz,ee_ion,enum_tdep_cs2_type,eos_before_boundary,eos_update_aux,eoscalc,eoscalc_elem,eoscalc_farray,eoscalc_farray_range,eoscalc_pencil,eoscalc_point,eoscalc_point_f,eosperturb,error_cp,fac_cs,find_mass,get_average_pressure,get_cp,get_cv,get_soundspeed,get_ss,get_ss_pencil,get_stratz,getmu,gz_coeff,gztype,ics,icv,idelta,ieosvar1,ieosvar2,ieosvar_count,ieosvars,ifvap,iglobal_cs2,iglobal_glntt,imumol1,inabad,init_eos,input_file,ioncalc,ioninit,isothermal_lnrho_ss,isothmid,ivars_mod,kappa0,kappa_cst,l_cp,l_gamma,l_gamma_m1,lcalc_cp,lcalc_cp_full,lcheminp_eos,lconst_yh,lcp_as_aux,lcs2_tdep,lcs_as_aux,lcs_as_comaux,lcv_as_aux,ldelta_as_aux,leos_isentropic,leos_isobaric,leos_isochoric,leos_isothermal,leos_localisothermal,lgamma_as_aux,lhminus_opacity_correction,lhubble_eos,linterp_pressure,ll1,ll2,lnabad_as_aux,lnpp_bot,lnrho0,lnrho_e,lnrho_e_,lnrho_h,lnrho_he,lnrho_p,lntt_ion,lntt_ion_,lnttlnrho,lnttss,lpp_as_aux,lpres_grad,lrevise_chih_ev,lrevise_chihminus_ev,lss_as_aux,lstratset,mm1,mm2,mu1_0,mu1_full,mu1yhxhe,mudry,mudry1,muvap,muvap1,nabla_ad,nn1,nn2,one_yh_term,opacity_type,pp0,pp_ion,pr_number,pres_corr,pressure_gradient,pressure_gradient_farray,pressure_gradient_point,read_species,read_thermodyn,rgas_cgs,rho0,rho02,rho_e,rho_e_,rho_h,rho_he,rtsafe,rtsafe_pencil,saha,scale_rgas,set_stratz,sigmasbt,srad0,ss_ion,ss_ion1,tau_relax,tdep_cs2_type,temperature_gradient,temperature_hessian,temperature_laplacian,tt_ion,tt_ion_,va2max_eos,va2power_eos,write_thermodyn,xh2,xhe,xhe_term,xtop,yh0,yh_const,yh_term,yhacc,yhmax,yhmin,ymetals- Routines:
bc_ism(),bc_lnrho_hds_z_iso(),bc_lnrho_pressure_z(),bc_lnrho_temp_z(),bc_ss_a2stemp_x(),bc_ss_a2stemp_y(),bc_ss_a2stemp_z(),bc_ss_energy(),bc_ss_flux(),bc_ss_flux_condturb_mean_x(),bc_ss_flux_condturb_x(),bc_ss_flux_condturb_z(),bc_ss_flux_turb(),bc_ss_flux_turb_x(),bc_ss_stemp_x(),bc_ss_stemp_y(),bc_ss_stemp_z(),bc_ss_temp2_z(),bc_ss_temp3_z(),bc_ss_temp_old(),bc_ss_temp_x(),bc_ss_temp_y(),bc_ss_temp_z(),bc_stellar_surface(),eos_before_boundary(),get_average_pressure(),get_gamma_etc(),get_slices_eos(),get_soundspeed(),get_stratz(),getdensity(),getmu(),getpressure(),gettemperature(),init_eos(),initialize_eos(),ioncalc(),isothermal_entropy(),isothermal_lnrho_ss(),pencil_criteria_eos(),pencil_interdep_eos(),read_eos_init_pars(),read_eos_run_pars(),register_eos(),rprint_eos(),select_eos_variable(),temperature_gradient(),temperature_hessian(),temperature_laplacian(),units_eos(),write_eos_init_pars(),write_eos_run_pars()
Needed modules
cdata: $Id$general(keep_compiler_quiet()): $Id$messages: $Id$
Variables
- equationofstate/b_ext_eos (3) [real,private/optional/default=(/0.,0.,0./)]
- equationofstate/calc_pencils_eos [public]
- equationofstate/calc_pencils_eos_pencpar [private]
- equationofstate/calc_pencils_eos_std [private]
- equationofstate/chih_ev [real,private/optional/default=13.6]
- equationofstate/chihminus_ev [real,private/optional/default=0.754]
- equationofstate/cp_const [real,public/optional/default=impossible]
- equationofstate/cp_full (*,*,*) [real,private/allocatable]
- equationofstate/cs0 [real,public/optional/default=impossible]
- equationofstate/cs20 [real,public/optional/default=impossible]
- equationofstate/cs2bot [real,public/optional/default=impossible]
- equationofstate/cs2top [real,public/optional/default=impossible]
- equationofstate/eos_before_boundary [public]
- equationofstate/eoscalc [public]
- equationofstate/eoscalc_farray [private]
- equationofstate/gamma [real,private/optional/default=impossible]
- equationofstate/gamma_m1 [real,private/optional/default=impossible]
- equationofstate/icv [integer,private/optional/default=0]
- equationofstate/idelta [integer,private/optional/default=0]
- equationofstate/igamma [integer,private/optional/default=0]
- equationofstate/ilnrho_cs2 [integer,parameter=5]
- equationofstate/ilnrho_ee [integer,parameter=2]
- equationofstate/ilnrho_eth [integer,parameter=14]
- equationofstate/ilnrho_lntt [integer,parameter=4]
- equationofstate/ilnrho_pp [integer,parameter=3]
- equationofstate/ilnrho_ss [integer,parameter=1]
- equationofstate/ilnrho_tt [integer,parameter=9]
- equationofstate/imass [integer,public/optional/default=0]
- equationofstate/inabad [integer,private/optional/default=0]
- equationofstate/ipp_cs2 [integer,parameter=12]
- equationofstate/ipp_ss [integer,parameter=11]
- equationofstate/irho_cs2 [integer,parameter=6]
- equationofstate/irho_ee [integer,parameter=15]
- equationofstate/irho_eth [integer,parameter=13]
- equationofstate/irho_lntt [integer,parameter=8]
- equationofstate/irho_pp [integer,parameter=16]
- equationofstate/irho_ss [integer,parameter=7]
- equationofstate/irho_tt [integer,parameter=10]
- equationofstate/kappa0 [real,private]
- equationofstate/lcalc_cp [logical,private/optional/default=.false.]
- equationofstate/lcalc_cp_full [logical,private/optional/default=.false.]
- equationofstate/lconst_yh [logical,private/optional/default=.false.]
- equationofstate/lcp_as_aux [logical,private/optional/default=.false.]
- equationofstate/lcs_as_aux [logical,private/optional/default=.false.]
- equationofstate/lcv_as_aux [logical,private/optional/default=.false.]
- equationofstate/ldelta_as_aux [logical,private/optional/default=.false.]
- equationofstate/lgamma_as_aux [logical,private/optional/default=.false.]
- equationofstate/lhminus_opacity_correction [logical,private/optional/default=.false.]
- equationofstate/lnabad_as_aux [logical,private/optional/default=.false.]
- equationofstate/lnpp_bot [real,private/optional/default=0.0]
- equationofstate/lnrho0 [real,public/optional/default=impossible]
- equationofstate/lnrho_e [real,private]
- equationofstate/lnrho_e_ [real,private]
- equationofstate/lnrho_h [real,private]
- equationofstate/lnrho_he [real,private]
- equationofstate/lntt0 [real,public/optional/default=impossible]
- equationofstate/lntt_ion [real,private]
- equationofstate/lntt_ion_ [real,private]
- equationofstate/lpp_as_aux [logical,private/optional/default=.false.]
- equationofstate/lpres_grad [logical,public/optional/default=.false.]
- equationofstate/lrevise_chih_ev [logical,private/optional/default=.false.]
- equationofstate/lrevise_chihminus_ev [logical,private/optional/default=.false.]
- equationofstate/lss_as_aux [logical,private/optional/default=.false.]
- equationofstate/mu1_0 [real,private]
- equationofstate/mu1yhxhe [real,private]
- equationofstate/pp_ion [real,private]
- equationofstate/pr_number [real,public/optional/default=0.7]
- equationofstate/pressure_gradient [public]
- equationofstate/rgas [real,private]
- equationofstate/rho0 [real,public/optional/default=impossible]
- equationofstate/rho_e [real,private]
- equationofstate/rho_e_ [real,private]
- equationofstate/rho_h [real,private]
- equationofstate/rho_he [real,private]
- equationofstate/ss_bot [real,private/optional/default=0.0]
- equationofstate/ss_ion [real,private]
- equationofstate/tau_relax [real,private/optional/default=1.0]
- equationofstate/tt0 [real,private/optional/default=impossible]
- equationofstate/tt_ion [real,private]
- equationofstate/tt_ion_ [real,private]
- equationofstate/ttbot [real,private/optional/default=0.0]
- equationofstate/tttop [real,private/optional/default=0.0]
- equationofstate/va2max_eos [real,private/optional/default=huge1]
- equationofstate/va2power_eos [integer,private/optional/default=5]
- equationofstate/xhe [real,private/optional/default=0.1]
- equationofstate/yh_const [real,private/optional/default=0.0]
- equationofstate/ymetals [real,private/optional/default=0.0]
Subroutines and functions
- subroutine equationofstate/register_eos()
14-jun-03/axel: adapted from register_eos
- Use :
- Call to:
svn_id(),warning(),register_report_aux(),ioncalc(),g2ij(),del6(),fatal_error(),not_implemented()
- subroutine equationofstate/initialize_eos(f)
called by run.f90 after reading parameters, but before the time loop
21-may-14/axel: adapted from eos_entropy
- Parameters:
f (,,*,*) [real,contiguous]
- Use :
- Call to:
warning(),register_report_aux(),ioncalc(),g2ij(),del6(),fatal_error(),not_implemented()
- subroutine equationofstate/pencil_criteria_eos()
All pencils that the EquationOfState module depends on are specified here.
21-may-14/axel: adapted from eos_ionization
EOS is a pencil provider but evolves nothing so it is unlokely that it will require any pencils for it’s own use.
pp pencil if lpp_as_aux
- Call to:
g2ij(),del6(),fatal_error(),ioncalc(),warning(),not_implemented()
- subroutine equationofstate/pencil_interdep_eos(lpencil_in)
dummy (but to be changed)
- Parameters:
lpencil_in (npencils) [logical]
- Call to:
g2ij(),del6(),fatal_error(),ioncalc(),warning(),not_implemented()
- subroutine equationofstate/getmu([f[, mu_tmp]])
Calculate average particle mass in the gas relative to
12-aug-03/tony: implemented dummy
- Parameters:
f (,,*,*) [real,contiguous]
mu_tmp [real,out,]
- Call to:
- subroutine equationofstate/rprint_eos(lreset[, lwrite])
- Parameters:
lreset [logical]
lwrite [logical]
- Call to:
- subroutine equationofstate/init_eos(f)
- Parameters:
f (,,*,*) [real,inout,contiguous]
- Call to:
- subroutine equationofstate/ioncalc(f)
calculate degree of ionization and temperature
- Parameters:
f (,,*,*) [real,contiguous]
- Call to:
- subroutine equationofstate/get_gamma_etc([gamma[, cp[, cv[, f]]]])
- Parameters:
gamma [real,out,]
cp [real,out,]
cv [real,out,]
f (mfarray) [real,in,]
- Call to:
- subroutine equationofstate/units_eos()
If unit_temperature hasn’t been specified explictly in start.in, set it to 1 (Kelvin).
24-jun-06/tobi: coded
- Call to:
- subroutine equationofstate/read_eos_init_pars(iomsg)
- Parameters:
iomsg [character,out]
- Use :
- Call to:
- subroutine equationofstate/write_eos_init_pars(unit)
- Parameters:
unit [integer,in]
- Call to:
- subroutine equationofstate/read_eos_run_pars(iomsg)
- Parameters:
iomsg [character,out]
- Use :
- Call to:
- subroutine equationofstate/write_eos_run_pars(unit)
- Parameters:
unit [integer,in]
- Call to:
- subroutine equationofstate/isothermal_entropy(lnrho, t0, ss)
Isothermal stratification (for lnrho and ss) This routine should be independent of the gravity module used. When entropy is present, this module also initializes entropy.
Sound speed (and hence Temperature), is initialised to the reference value:
sound speed: cs^2_0 from start.in density: rho0 = exp(lnrho0)
- 11-jun-03/tony: extracted from isothermal routine in Density module
to allow isothermal condition for arbitrary density
17-oct-03/nils: works also with leos_ionization=T 18-oct-03/tobi: distributed across ionization modules
- Parameters:
- Call to:
- subroutine equationofstate/bc_ss_flux(f, topbot[, lone_sided])
constant flux boundary condition for entropy (called when bcz=’c1’)
23-jan-2002/wolf: coded 11-jun-2002/axel: moved into the entropy module
8-jul-2002/axel: split old bc_ss into two
- 26-aug-2003/tony: distributed across ionization modules
3-oct-16/MR: added new optional switch lone_sided
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
lone_sided [logical]
- Use :
- Call to:
- subroutine equationofstate/bc_ss_flux_turb(f, topbot)
dummy routine
4-may-2009/axel: dummy routine
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Call to:
- subroutine equationofstate/bc_ss_flux_turb_x(f, topbot)
dummy routine
31-may-2010/axel: dummy routine
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Call to:
- subroutine equationofstate/bc_ss_flux_condturb_x(f, topbot)
23-apr-2014/pete: dummy
- Parameters:
f (,,*,*) [real,contiguous]
topbot [integer,in]
- Call to:
- subroutine equationofstate/bc_ss_flux_condturb_mean_x(f, topbot)
07-jan-2015/pete: dummy
- Parameters:
f (,,*,*) [real,contiguous]
topbot [integer,in]
- Call to:
- subroutine equationofstate/bc_ss_flux_condturb_z(f, topbot)
15-jul-2014/pete: dummy
- Parameters:
f (,,*,*) [real,contiguous]
topbot [integer,in]
- Call to:
- subroutine equationofstate/bc_ss_temp_old(f, topbot)
boundary condition for entropy: constant temperature
23-jan-2002/wolf: coded 11-jun-2002/axel: moved into the entropy module
8-jul-2002/axel: split old bc_ss into two
23-jun-2003/tony: implemented for leos_fixed_ionization 26-aug-2003/tony: distributed across ionization modules
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Use :
- Call to:
- subroutine equationofstate/bc_ss_temp_x(f, topbot)
boundary condition for entropy: constant temperature
3-aug-2002/wolf: coded
26-aug-2003/tony: distributed across ionization modules
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Use :
- Call to:
- subroutine equationofstate/bc_ss_temp_y(f, topbot)
boundary condition for entropy: constant temperature
3-aug-2002/wolf: coded
26-aug-2003/tony: distributed across ionization modules
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Use :
- Call to:
- subroutine equationofstate/bc_ss_temp_z(f, topbot[, lone_sided])
boundary condition for entropy: constant temperature
3-aug-2002/wolf: coded
26-aug-2003/tony: distributed across ionization modules 13-sep-2016/axel: added TTbot, TTtop, to make this work
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
lone_sided [logical]
- Use :
- Call to:
- subroutine equationofstate/bc_lnrho_temp_z(f, topbot)
boundary condition for lnrho and ss: constant temperature
27-sep-2002/axel: coded 19-aug-2005/tobi: distributed across ionization modules
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Use :
- Call to:
- subroutine equationofstate/bc_lnrho_pressure_z(f, topbot)
boundary condition for lnrho: constant pressure
4-apr-2003/axel: coded 1-may-2003/axel: added the same for top boundary
19-aug-2005/tobi: distributed across ionization modules
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Use :
gravity(lnrho_bot(),lnrho_top(),ss_bot(),ss_top()),densitymethods(putlnrho())- Call to:
- subroutine equationofstate/bc_ss_temp2_z(f, topbot)
boundary condition for entropy: constant temperature
3-aug-2002/wolf: coded
26-aug-2003/tony: distributed across ionization modules
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Use :
- Call to:
- subroutine equationofstate/bc_ss_temp3_z(f, topbot)
31-jan-2013/axel: coded to impose cs2bot and dcs2bot at bottom
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Call to:
- subroutine equationofstate/bc_ss_stemp_x(f, topbot)
boundary condition for entropy: symmetric temperature
3-aug-2002/wolf: coded
26-aug-2003/tony: distributed across ionization modules
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Use :
- Call to:
- subroutine equationofstate/bc_ss_stemp_y(f, topbot)
boundary condition for entropy: symmetric temperature
3-aug-2002/wolf: coded
26-aug-2003/tony: distributed across ionization modules
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Use :
- Call to:
- subroutine equationofstate/bc_ss_stemp_z(f, topbot)
boundary condition for entropy: symmetric temperature
3-aug-2002/wolf: coded
26-aug-2003/tony: distributed across ionization modules
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Use :
- Call to:
- subroutine equationofstate/bc_ss_a2stemp_x(f, topbot)
boundary condition for entropy: adopt minimum value for entropy in ghost zone, which satisfies either asymmetric temperature: vanishing 2nd deriv or symmetric temperature to handle shock profiles. Effectively caps temperature in ghost zones while otherwise fluctuating with the outward flow.
22-sep-2010/fred: adapted from bc_ss_stemp_z
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Call to:
- subroutine equationofstate/bc_ss_a2stemp_y(f, topbot)
boundary condition for entropy: adopt minimum value for entropy in ghost zone, which satisfies either asymmetric temperature: vanishing 2nd deriv or symmetric temperature to handle shock profiles. Effectively caps temperature in ghost zones while otherwise fluctuating with the outward flow.
22-sep-2010/fred: adapted from bc_ss_stemp_y
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Call to:
- subroutine equationofstate/bc_ss_a2stemp_z(f, topbot)
boundary condition for entropy: adopt minimum value for entropy in ghost zone, which satisfies either asymmetric temperature: vanishing 2nd deriv or symmetric temperature to handle shock profiles. Effectively caps temperature in ghost zones while otherwise fluctuating with the outward flow.
22-sep-2010/fred: adapted from bc_ss_stemp_z
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Call to:
- subroutine equationofstate/bc_ss_energy(f, topbot)
boundary condition for entropy
may-2002/nils: coded 11-jul-2002/nils: moved into the entropy module 26-aug-2003/tony: distributed across ionization modules
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Call to:
- subroutine equationofstate/bc_stellar_surface(f, topbot)
Boundary condition for density.
- We make both the lower and the upper boundary hydrostatic.
rho1*(dpp/dz) = gravz
- Additionally, we make the lower boundary isentropic
(dss/dz) = 0
- and the upper boundary isothermal
(dlnTT/dz) = 0
At the moment, this is probably only useful for solar surface convection.
11-May-2006/tobi: coded 16-May-2006/tobi: isentropic lower boundary
- Parameters:
f (,,*,*) [real,inout]
topbot [integer,in]
- Use :
gravity(gravz(),gravz_profile(),reduced_top()),densitymethods(getlnrho())- Call to:
- subroutine equationofstate/bc_lnrho_cfb_r_iso(f, topbot)
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Call to:
- subroutine equationofstate/bc_lnrho_hds_z_iso(f, topbot)
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Call to:
- subroutine equationofstate/bc_lnrho_hdss_z_iso(f, topbot)
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
- Call to:
- subroutine equationofstate/bc_ism(f, topbot, j)
30-nov-15/fred: Replaced bc_ctz and bc_cdz. Apply observed scale height locally from Reynolds 1991, Manchester & Taylor 1981 for warm ionized gas - dominant scale height above 500 parsecs. Apply constant local temperature across boundary for entropy. Motivation to prevent numerical spikes in shock fronts, which cannot be absorbed in only three ghost cells, but boundary thermodynamics still responsive to interior dynamics. 06-jun-22/fred update to allow setting scale height in start.in or run.in default is density_scale_factor=impossible so that scale_factor is 0.9, assuming unit_length = 1 kpc and scale is 400 pc. To change scale height add to start_pars or run_pars density_scale_factor=… in dimensionless units Copied from eos_ionization written for entropy - may need revision
- Parameters:
f (,,*,*) [real]
topbot [integer,in]
j [integer]
- Call to: