1 #ifndef MATERIALPROPERTIES_H
2 #define MATERIALPROPERTIES_H
4 #include <AMReX_Enum.H>
5 #include <AMReX_REAL.H>
7 #include <AMReX_MultiFab.H>
42 const amrex::MultiFab&,
43 const amrex::MultiFab& );
48 const amrex::MultiFab&,
49 const amrex::MultiFab& );
53 const amrex::MultiFab&,
54 const amrex::MultiFab& );
72 #ifdef AMREX_USE_FLOAT
95 std::numeric_limits<amrex::Real>::max(),
96 std::numeric_limits<amrex::Real>::max(),
97 std::numeric_limits<amrex::Real>::max(),
98 std::numeric_limits<amrex::Real>::max(),
99 std::numeric_limits<amrex::Real>::max(),
100 std::numeric_limits<amrex::Real>::max() };
106 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
111 for (
auto i = 0; i < 7; i++) {
119 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
133 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
142 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
153 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
168 auto T_star = a_T / (eps_v_air/
s_kb);
175 auto term1 = 3 * std::sqrt(
s_kb*a_T *
s_kb*a_T *
s_kb*a_T);
176 auto term2 =
amrex::Real(8.0) * std::sqrt(2*
PI) * a_P * sigma_v_air*sigma_v_air * omegaD;
179 auto retval = term1*term3/term2;
189 Species::Name
m_name = Species::Name::none;
198 AMREX_GPU_HOST_DEVICE
202 AMREX_GPU_HOST_DEVICE
206 AMREX_GPU_HOST_DEVICE
212 amrex::Print() <<
"Material properties of " << amrex::getEnumNameString(
m_name) <<
":\n";
213 amrex::Print() <<
" density: " <<
m_density <<
"\n";
214 amrex::Print() <<
" ionization: " <<
m_ionization <<
"\n";
215 amrex::Print() <<
" mol. weight: " <<
m_mol_weight <<
"\n";
216 amrex::Print() <<
" latent heat (vap.): " <<
m_lat_vap <<
"\n";
217 amrex::Print() <<
" latent heat (fus.): " <<
m_lat_fus <<
"\n";
218 amrex::Print() <<
" Rv: " <<
m_Rv <<
"\n";
219 amrex::Print() <<
" Tc: " <<
m_Tc <<
"\n";
220 amrex::Print() <<
" Tb: " <<
m_Tb <<
"\n";
222 amrex::Print() <<
" mol. Cp coeffs: ";
223 for (
int i = 0; i < 7; i++) { amrex::Print() <<
m_mol_Cp_coeffs[i] <<
", "; }
224 amrex::Print() <<
"\n";
228 AMREX_GPU_HOST_DEVICE
231 AMREX_GPU_HOST_DEVICE
234 AMREX_GPU_HOST_DEVICE
237 AMREX_GPU_HOST_DEVICE
240 AMREX_GPU_HOST_DEVICE
243 AMREX_GPU_HOST_DEVICE
246 AMREX_GPU_HOST_DEVICE
249 AMREX_GPU_HOST_DEVICE
253 AMREX_GPU_HOST AMREX_FORCE_INLINE
260 AMREX_GPU_HOST AMREX_FORCE_INLINE
262 const amrex::MultiFab& a_T,
263 const amrex::MultiFab& a_p )
const
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real diffelq
Definition: ERF_Constants.H:116
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
constexpr amrex::Real PI
Definition: ERF_Constants.H:42
amrex::Real sigma
Definition: ERF_InitCustomPert_DataAssimilation_ISV.H:11
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_MaterialProperties.H:12
AMREX_ENUM(Name, H2O, ice, 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:62
AMREX_GPU_HOST void compute_saturation_vapfrac_null(MultiFab &, const MultiFab &, const MultiFab &)
Definition: ERF_MaterialProperties.cpp:52
AMREX_GPU_HOST void compute_saturation_pressure_H2O(MultiFab &a_mf_sat_pressure, const MultiFab &a_mf_temperature)
Definition: ERF_MaterialProperties.cpp:18
AMREX_GPU_HOST void compute_saturation_pressure_ice(MultiFab &a_mf_sat_pressure, const MultiFab &a_mf_temperature)
Definition: ERF_MaterialProperties.cpp:35
AMREX_GPU_HOST void compute_saturation_vapfrac_ice(MultiFab &a_mf_sat_vapfrac, const MultiFab &a_mf_temperature, const MultiFab &a_mf_pressure)
Definition: ERF_MaterialProperties.cpp:85
Base structure containing material property constants and methods for GPU usage.
Definition: ERF_MaterialProperties.H:60
amrex::Real m_mol_weight
Definition: ERF_MaterialProperties.H:85
bool m_is_water
Definition: ERF_MaterialProperties.H:102
bool m_is_INP
Definition: ERF_MaterialProperties.H:103
static constexpr amrex::Real s_sigma_air
Definition: ERF_MaterialProperties.H:68
amrex::Real m_mol_Cp_coeffs[7]
Definition: ERF_MaterialProperties.H:94
static constexpr amrex::Real s_mol_weight_air
Definition: ERF_MaterialProperties.H:66
static constexpr amrex::Real s_kb
Definition: ERF_MaterialProperties.H:63
amrex::Real m_Rv
Definition: ERF_MaterialProperties.H:88
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:107
static constexpr amrex::Real s_eps_air_k
Definition: ERF_MaterialProperties.H:70
amrex::Real m_Nav_by_molweight
Definition: ERF_MaterialProperties.H:91
amrex::Real m_lat_fus
Definition: ERF_MaterialProperties.H:87
amrex::Real m_ionization
Definition: ERF_MaterialProperties.H:84
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:134
amrex::Real m_Tb
Definition: ERF_MaterialProperties.H:90
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:154
amrex::Real m_density
Definition: ERF_MaterialProperties.H:83
bool m_is_soluble
Definition: ERF_MaterialProperties.H:101
static constexpr amrex::Real s_N_av
Definition: ERF_MaterialProperties.H:62
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real coeffVPSolute() const
Return the vapour pressure coefficient.
Definition: ERF_MaterialProperties.H:143
amrex::Real m_lat_vap
Definition: ERF_MaterialProperties.H:86
amrex::Real m_Tc
Definition: ERF_MaterialProperties.H:89
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:120
Definition: ERF_MaterialProperties.H:187
AMREX_GPU_HOST_DEVICE ~MaterialProperties()=default
Default destructor.
AMREX_GPU_HOST_DEVICE void setProperties_water()
Set this material to water.
Definition: ERF_MaterialProperties.cpp:210
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:261
decltype(saturation_funcs::compute_saturation_pressure_null) * m_saturation_pressure_func
Definition: ERF_MaterialProperties.H:192
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:254
AMREX_GPU_HOST_DEVICE void setProperties_ice()
Set this material to ice.
Definition: ERF_MaterialProperties.cpp:190
AMREX_GPU_HOST_DEVICE void setProperties_NH4HSO4()
Set this material to ammonium bisulfate.
Definition: ERF_MaterialProperties.cpp:246
AMREX_GPU_HOST_DEVICE void setProperties_soil()
Set this material to soil.
Definition: ERF_MaterialProperties.cpp:258
AMREX_GPU_HOST_DEVICE void setProperties_NH42SO4()
Set this material to ammonium sulfate.
Definition: ERF_MaterialProperties.cpp:234
AMREX_GPU_HOST_DEVICE MaterialProperties(const Species::Name &a_name)
Constructor.
Definition: ERF_MaterialProperties.cpp:114
AMREX_GPU_HOST void print() const
Print parameters.
Definition: ERF_MaterialProperties.H:211
AMREX_GPU_HOST_DEVICE void setProperties_NaCl()
Set this material to NaCl.
Definition: ERF_MaterialProperties.cpp:222
AMREX_GPU_HOST_DEVICE void setProperties_H2O()
Set this material to H20.
Definition: ERF_MaterialProperties.cpp:169
AMREX_GPU_HOST_DEVICE void setProperties_agua()
Set this material to agua.
Definition: ERF_MaterialProperties.cpp:216
Species::Name m_name
Definition: ERF_MaterialProperties.H:189
decltype(saturation_funcs::compute_saturation_vapfrac_null) * m_saturation_vapfrac_func
Definition: ERF_MaterialProperties.H:195