1 #ifndef MATERIALPROPERTIES_H
2 #define MATERIALPROPERTIES_H
4 #include <AMReX_Enum.H>
5 #include <AMReX_REAL.H>
7 #include <AMReX_MultiFab.H>
38 const amrex::MultiFab&,
39 const amrex::MultiFab& );
43 const amrex::MultiFab&,
44 const amrex::MultiFab& );
60 Species::Name
m_name = Species::Name::none;
99 amrex::Print() <<
"Material properties of " << amrex::getEnumNameString(
m_name) <<
":\n";
100 amrex::Print() <<
" density: " <<
m_density <<
"\n";
101 amrex::Print() <<
" ionization: " <<
m_ionization <<
"\n";
102 amrex::Print() <<
" mol. weight: " <<
m_mol_weight <<
"\n";
103 amrex::Print() <<
" latent heat (vap.): " <<
m_lat_vap <<
"\n";
104 amrex::Print() <<
" Rv: " <<
m_Rv <<
"\n";
105 amrex::Print() <<
" Tc: " <<
m_Tc <<
"\n";
106 amrex::Print() <<
" Tb: " <<
m_Tb <<
"\n";
108 amrex::Print() <<
" mol. Cp coeffs: ";
109 for (
int i = 0; i < 7; i++) { amrex::Print() <<
m_mol_Cp_coeffs[i] <<
", "; }
110 amrex::Print() <<
"\n";
114 AMREX_GPU_HOST_DEVICE
117 AMREX_GPU_HOST_DEVICE
120 AMREX_GPU_HOST_DEVICE
123 AMREX_GPU_HOST_DEVICE
126 AMREX_GPU_HOST_DEVICE
129 AMREX_GPU_HOST_DEVICE
132 AMREX_GPU_HOST_DEVICE
136 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
141 for (
auto i = 0; i < 7; i++) {
149 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
155 auto term1 = 6.0 * std::cbrt(
s_N_av);
163 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
172 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
183 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
193 auto sigma = 1.18e-8 * std::cbrt(mol_weight_v/
m_density);
198 auto T_star = a_T / (eps_v_air/
s_kb);
200 auto omegaD = 1.06036 / std::pow(T_star, 0.1561)
201 + 0.193 / std::exp(0.47635*T_star)
202 + 1.03587 / std::exp(1.52996*T_star)
203 + 1.76474 / std::exp(3.89411*T_star);
205 auto term1 = 3 * std::sqrt(
s_kb*a_T *
s_kb*a_T *
s_kb*a_T);
206 auto term2 = 8.0 * std::sqrt(2*
PI) * a_P * sigma_v_air*sigma_v_air * omegaD;
209 auto retval = term1*term3/term2;
215 AMREX_GPU_HOST AMREX_FORCE_INLINE
222 AMREX_GPU_HOST AMREX_FORCE_INLINE
224 const amrex::MultiFab& a_T,
225 const amrex::MultiFab& a_p )
const
constexpr amrex::Real diffelq
Definition: ERF_Constants.H:73
constexpr amrex::Real PI
Definition: ERF_Constants.H:6
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_MaterialProperties.H:12
AMREX_ENUM(Name, H2O, NaCl, NH42SO4, NH4HSO4, soil, water, agua, none)
Definition: ERF_MaterialProperties.cpp:7
AMREX_GPU_HOST void compute_saturation_pressure_null(MultiFab &, const MultiFab &)
Definition: ERF_MaterialProperties.cpp:9
AMREX_GPU_HOST void compute_saturation_vapfrac_H2O(MultiFab &a_mf_sat_vapfrac, const MultiFab &a_mf_temperature, const MultiFab &a_mf_pressure)
Definition: ERF_MaterialProperties.cpp:32
AMREX_GPU_HOST void compute_saturation_vapfrac_null(MultiFab &, const MultiFab &)
Definition: ERF_MaterialProperties.cpp:29
AMREX_GPU_HOST void compute_saturation_pressure_H2O(MultiFab &a_mf_sat_pressure, const MultiFab &a_mf_temperature)
Definition: ERF_MaterialProperties.cpp:12
Definition: ERF_MaterialProperties.H:48
static constexpr amrex::Real s_mol_weight_air
Definition: ERF_MaterialProperties.H:54
AMREX_GPU_HOST_DEVICE ~MaterialProperties()=default
Default destructor.
amrex::Real m_mol_weight
Definition: ERF_MaterialProperties.H:63
static constexpr amrex::Real s_sigma_air
Definition: ERF_MaterialProperties.H:56
amrex::Real m_Tb
Definition: ERF_MaterialProperties.H:67
amrex::Real m_Nav_by_molweight
Definition: ERF_MaterialProperties.H:68
AMREX_GPU_HOST_DEVICE void setProperties_water()
Set this material to water.
Definition: ERF_MaterialProperties.cpp:122
AMREX_GPU_HOST AMREX_FORCE_INLINE void computeSaturationVapFrac(amrex::MultiFab &a_S, const amrex::MultiFab &a_T, const amrex::MultiFab &a_p) const
Compute saturation vapour fraction.
Definition: ERF_MaterialProperties.H:223
static constexpr amrex::Real s_eps_air_k
Definition: ERF_MaterialProperties.H:58
decltype(saturation_funcs::compute_saturation_pressure_null) * m_saturation_pressure_func
Definition: ERF_MaterialProperties.H:80
AMREX_GPU_HOST AMREX_FORCE_INLINE void computeSaturationPressure(amrex::MultiFab &a_e, const amrex::MultiFab &a_T) const
Compute saturation pressure.
Definition: ERF_MaterialProperties.H:216
AMREX_GPU_HOST_DEVICE void setProperties_NH4HSO4()
Set this material to ammonium bisulfate.
Definition: ERF_MaterialProperties.cpp:158
amrex::Real m_mol_Cp_coeffs[7]
Definition: ERF_MaterialProperties.H:70
amrex::Real m_Tc
Definition: ERF_MaterialProperties.H:66
AMREX_GPU_HOST_DEVICE void setProperties_soil()
Set this material to soil.
Definition: ERF_MaterialProperties.cpp:170
amrex::Real m_Rv
Definition: ERF_MaterialProperties.H:65
AMREX_GPU_HOST_DEVICE void setProperties_NH42SO4()
Set this material to ammonium sulfate.
Definition: ERF_MaterialProperties.cpp:146
AMREX_GPU_HOST_DEVICE MaterialProperties(const Species::Name &a_name)
Constructor.
Definition: ERF_MaterialProperties.cpp:56
AMREX_GPU_HOST void print() const
Print parameters.
Definition: ERF_MaterialProperties.H:98
AMREX_GPU_HOST_DEVICE void setProperties_NaCl()
Set this material to NaCl.
Definition: ERF_MaterialProperties.cpp:134
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real coeffMolecularDiffusion(const amrex::Real a_T, const amrex::Real a_P) const
Return the molecular diffusion coefficient given temperature and pressure.
Definition: ERF_MaterialProperties.H:184
amrex::Real m_ionization
Definition: ERF_MaterialProperties.H:62
bool m_is_water
Definition: ERF_MaterialProperties.H:78
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real coeffCurv(const amrex::Real a_T) const
Return the coeff of curvature given the temperature.
Definition: ERF_MaterialProperties.H:164
AMREX_GPU_HOST_DEVICE void setProperties_H2O()
Set this material to H20.
Definition: ERF_MaterialProperties.cpp:102
AMREX_GPU_HOST_DEVICE void setProperties_agua()
Set this material to agua.
Definition: ERF_MaterialProperties.cpp:128
static constexpr amrex::Real s_N_av
Definition: ERF_MaterialProperties.H:50
bool m_is_soluble
Definition: ERF_MaterialProperties.H:77
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real surfaceTension(const amrex::Real a_T) const
Compute the surface tension coeff given temperature.
Definition: ERF_MaterialProperties.H:150
amrex::Real m_density
Definition: ERF_MaterialProperties.H:61
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real molarHeatCapacity(const amrex::Real a_T) const
Return the molar heat capacity.
Definition: ERF_MaterialProperties.H:137
amrex::Real m_lat_vap
Definition: ERF_MaterialProperties.H:64
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real coeffVPSolute() const
Return the vapour pressure coefficient.
Definition: ERF_MaterialProperties.H:173
Species::Name m_name
Definition: ERF_MaterialProperties.H:60
decltype(saturation_funcs::compute_saturation_vapfrac_null) * m_saturation_vapfrac_func
Definition: ERF_MaterialProperties.H:82
static constexpr amrex::Real s_kb
Definition: ERF_MaterialProperties.H:51