1 #ifndef ERF_SAM_UTILS_H_
2 #define ERF_SAM_UTILS_H_
7 #include <AMReX_Array4.H>
8 #include <AMReX_GpuQualifiers.H>
158 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
165 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
171 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
182 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
198 result.theta = rho_theta /
rho;
202 result.qn = result.qcl + result.qci;
203 result.qt = result.qv + result.qn;
207 result.qp = result.qpr + result.qps + result.qpg;
208 result.tabs = thermo.temperature;
213 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
224 const bool use_anelastic_reference_pressure,
230 use_anelastic_reference_pressure,
p0);
232 rho, rho_theta, rho_qv, rho_qcl, rho_qci, rho_qpr, rho_qps, rho_qpg,
238 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
240 const amrex::Array4<const amrex::Real>& states,
241 const amrex::Array4<const amrex::Real>& base,
242 const amrex::Array4<amrex::Real>&
rho,
243 const amrex::Array4<amrex::Real>&
theta,
244 const amrex::Array4<amrex::Real>&
qv,
245 const amrex::Array4<amrex::Real>&
qc,
246 const amrex::Array4<amrex::Real>&
qi,
247 const amrex::Array4<amrex::Real>&
qn,
248 const amrex::Array4<amrex::Real>&
qt,
249 const amrex::Array4<amrex::Real>&
qpr,
250 const amrex::Array4<amrex::Real>&
qps,
251 const amrex::Array4<amrex::Real>&
qpg,
252 const amrex::Array4<amrex::Real>&
qp,
253 const amrex::Array4<amrex::Real>&
tabs,
254 const amrex::Array4<amrex::Real>&
pres,
256 const bool use_anelastic_reference_pressure,
257 const int i,
const int j,
const int k) noexcept
267 use_anelastic_reference_pressure,
p0);
268 rho(i,j,k) = primitive.
rho;
270 qv(i,j,k) = primitive.
qv;
271 qc(i,j,k) = primitive.
qcl;
272 qi(i,j,k) = primitive.
qci;
273 qn(i,j,k) = primitive.
qn;
274 qt(i,j,k) = primitive.
qt;
275 qpr(i,j,k) = primitive.
qpr;
276 qps(i,j,k) = primitive.
qps;
277 qpg(i,j,k) = primitive.
qpg;
278 qp(i,j,k) = primitive.
qp;
284 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
298 result.theta = rho_theta /
rho;
302 result.qn = result.qcl + result.qci;
303 result.qt = result.qv + result.qn;
307 result.qp = result.qpr + result.qps + result.qpg;
313 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
315 const amrex::Array4<amrex::Real>& states_arr,
318 const int& k) noexcept
323 states_arr(i,j,k,
RhoTheta_comp) = primitive.rho * primitive.theta;
332 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
335 return moisture_type == MoistureType::SAM_NoIce ||
336 moisture_type == MoistureType::SAM_NoPrecip_NoIce;
339 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
342 return moisture_type == MoistureType::SAM_NoPrecip_NoIce;
345 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
354 if (SAM_moisture_type == 2) {
363 return an *
tabs - bn;
366 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
372 if (SAM_moisture_type == 2) {
378 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
384 if (SAM_moisture_type == 2) {
390 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
411 if (SAM_moisture_type == 1) {
414 result.delta_qi =
qci;
416 result.qcl += result.delta_qi;
417 result.tabs -= fac_fus * result.delta_qi;
420 result.delta_qc =
qcl;
422 result.qci += result.delta_qc;
423 result.tabs += fac_fus * result.delta_qc;
425 result.delta_qc =
qcl -
qn * result.omn;
426 result.delta_qi =
qci -
qn * (
one - result.omn);
427 result.qcl =
qn * result.omn;
428 result.qci =
qn * (
one - result.omn);
429 result.tabs += fac_fus * result.delta_qc;
434 result.delta_qc =
qcl -
qn;
437 result.tabs += fac_cond * result.delta_qc;
440 result.qn = result.qcl + result.qci;
444 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
453 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
463 return omn * dqsatw + (
one - omn) * dqsati + domn *
qsatw - domn *
qsati;
466 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
473 return -domn *
qn - (
one - omn) * dqsatm;
476 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
487 return -tabs_new + tabs_old + fcond * (
qv - qsatm) - ffus * (
qi - qif);
490 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
497 return -
one - fcond * dqsatm + ffus * dqif;
500 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
512 result.dqca = dtn * auto_r * (qcc -
qcw0);
513 result.dqia = dtn * autos * (qii -
qci0);
517 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
559 result.dprc = dtn * accrcr * qcc * std::pow(
qpr, powr1);
560 result.dpsc = dtn * accrcs * qcc * std::pow(
qps, pows1);
561 result.dpgc = dtn * accrcg * qcc * std::pow(
qpg, powg1);
562 result.dpsi = dtn * accris * qii * std::pow(
qps, pows1);
563 result.dpgi = dtn * accrig * qii * std::pow(
qpg, powg1);
567 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
578 result.
dqc = result.dqca + result.dprc + result.dpsc + result.dpgc;
579 result.dqi = result.dqia + result.dpsi + result.dpgi;
581 const amrex::Real scalec = amrex::min(
qcl, result.dqc) / (result.dqc + eps);
582 const amrex::Real scalei = amrex::min(
qci, result.dqi) / (result.dqi + eps);
584 result.dqca *= scalec;
585 result.dprc *= scalec;
586 result.dpsc *= scalec;
587 result.dpgc *= scalec;
588 result.dqia *= scalei;
589 result.dpsi *= scalei;
590 result.dpgi *= scalei;
591 result.dqc = result.dqca + result.dprc + result.dpsc + result.dpgc;
592 result.dqi = result.dqia + result.dpsi + result.dpgi;
597 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
605 result.
dqpr = (result.dqca + result.dqia) * omp + result.dprc;
606 result.dqps = (result.dqca + result.dqia) * (
one - omp) * (
one - omg) + result.dpsc + result.dpsi;
607 result.dqpg = (result.dqca + result.dqia) * (
one - omp) * omg + result.dpgc + result.dpgi;
611 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
629 result.
dqpr = evapr1_k * std::sqrt(
qpr) + evapr2_k * std::pow(
qpr, powr2);
630 result.dqps = evaps1_k * std::sqrt(
qps) + evaps2_k * std::pow(
qps, pows2);
631 result.dqpg = evapg1_k * std::sqrt(
qpg) + evapg2_k * std::pow(
qpg, powg2);
635 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
644 result.
dqpr = amrex::min(
qpr, result.dqpr);
645 result.dqps = amrex::min(
qps, result.dqps);
646 result.dqpg = amrex::min(
qpg, result.dqpg);
647 result.dqp = result.dqpr + result.dqps + result.dqpg;
651 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
664 if (diagnostics !=
nullptr) {
669 state.
qt = state.
qv + state.
qn;
679 if (
config.sam_moisture_type == 2) {
692 if (diagnostics !=
nullptr) {
693 diagnostics->omn = omn;
694 diagnostics->omp = omp;
695 diagnostics->omg = omg;
707 if (diagnostics !=
nullptr) {
708 diagnostics->autoconversion = source_terms;
709 diagnostics->accretion = accretion_terms;
712 source_terms.
dprc = accretion_terms.
dprc;
713 source_terms.
dpsc = accretion_terms.
dpsc;
714 source_terms.
dpgc = accretion_terms.
dpgc;
715 source_terms.
dpsi = accretion_terms.
dpsi;
716 source_terms.
dpgi = accretion_terms.
dpgi;
718 config.eps, source_terms);
719 if (diagnostics !=
nullptr) {
720 diagnostics->limited_sources = source_terms;
724 if (diagnostics !=
nullptr) {
725 diagnostics->partitioned_sources = source_terms;
731 state.
qcl -= source_terms.
dqc;
732 state.
qci -= source_terms.
dqi;
733 state.
qpr += source_terms.
dqpr;
734 state.
qps += source_terms.
dqps;
735 state.
qpg += source_terms.
dqpg;
738 state.
qt = state.
qv + state.
qn;
744 state.
tabs +=
config.fac_fus * (dqca * (
one - omp) - dqia * omp
745 + source_terms.
dpsc + source_terms.
dpgc);
756 if (diagnostics !=
nullptr) {
757 diagnostics->qsat = qsat;
760 if (state.
qp >
zero && state.
qv < qsat) {
769 evaporation_terms.
dqpr *= supersat_factor;
770 evaporation_terms.
dqps *= supersat_factor;
771 evaporation_terms.
dqpg *= supersat_factor;
776 if (diagnostics !=
nullptr) {
777 diagnostics->evaporation = evaporation_terms;
780 state.
qv += evaporation_terms.
dqp;
781 state.
qpr -= evaporation_terms.
dqpr;
782 state.
qps -= evaporation_terms.
dqps;
783 state.
qpg -= evaporation_terms.
dqpg;
785 state.
qt = state.
qv + state.
qn;
791 +
config.fac_sub * (evaporation_terms.
dqps + evaporation_terms.
dqpg);
800 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
823 row.accrsi = coef1 * coef2 *
esicoef;
830 prefactor *= (
two /
PI);
838 row.accrgi = coef1 * coef2 *
egicoef;
860 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
868 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
884 result.tabs_avg = tabs_k;
885 result.qci_avg = qci_k;
886 result.qp_avg = qp_k;
887 }
else if (k == k_hi + 1) {
888 result.rho_avg = rho_km1;
889 result.tabs_avg = tabs_km1;
890 result.qci_avg = qci_km1;
891 result.qp_avg = qp_km1;
893 result.rho_avg =
myhalf * (rho_km1 + rho_k);
894 result.tabs_avg =
myhalf * (tabs_km1 + tabs_k);
895 result.qci_avg =
myhalf * (qci_km1 + qci_k);
896 result.qp_avg =
myhalf * (qp_km1 + qp_k);
901 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
904 const int& k_hi) noexcept
906 if (face_k <= k_lo) {
909 if (face_k >= k_hi + 1) {
915 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
924 return static_cast<int>(std::ceil(reduced_flux * (dt /
dz) /
myhalf));
927 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
929 const amrex::Array4<const amrex::Real>& rho_array,
930 const amrex::Array4<const amrex::Real>& tabs_array,
931 const amrex::Array4<const amrex::Real>& qp_array,
936 const int& k_hi) noexcept
941 result.
rho_avg = rho_array(i,j,k);
942 result.tabs_avg = tabs_array(i,j,k);
943 result.qp_avg = qp_array(i,j,k);
944 }
else if (k == k_hi + 1) {
945 result.rho_avg = rho_array(i,j,k-1);
946 result.tabs_avg = tabs_array(i,j,k-1);
947 result.qp_avg = qp_array(i,j,k-1);
949 result.rho_avg =
myhalf * (rho_array(i,j,k-1) + rho_array(i,j,k));
950 result.tabs_avg =
myhalf * (tabs_array(i,j,k-1) + tabs_array(i,j,k));
951 result.qp_avg =
myhalf * (qp_array(i,j,k-1) + qp_array(i,j,k));
955 result.qrr = result.omp * result.qp_avg;
956 result.qss = (
one - result.omp) * (
one - result.omg) * result.qp_avg;
957 result.qgg = (
one - result.omp) * result.omg * result.qp_avg;
961 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
966 const amrex::Array4<const amrex::Real>& tabs_array,
967 const amrex::Array4<const amrex::Real>& qpr_array,
968 const amrex::Array4<const amrex::Real>& qps_array,
969 const amrex::Array4<const amrex::Real>& qpg_array,
974 const int& k_hi) noexcept
979 result.
rho_avg = rho_array(i,j,k);
980 result.tabs_avg = tabs_array(i,j,k);
981 result.qpr_avg = qpr_array(i,j,k);
982 result.qps_avg = qps_array(i,j,k);
983 result.qpg_avg = qpg_array(i,j,k);
984 }
else if (k == k_hi + 1) {
985 result.rho_avg = rho_array(i,j,k-1);
986 result.tabs_avg = tabs_array(i,j,k-1);
987 result.qpr_avg = qpr_array(i,j,k-1);
988 result.qps_avg = qps_array(i,j,k-1);
989 result.qpg_avg = qpg_array(i,j,k-1);
991 result.rho_avg =
myhalf * (rho_array(i,j,k-1) + rho_array(i,j,k));
992 result.tabs_avg =
myhalf * (tabs_array(i,j,k-1) + tabs_array(i,j,k));
993 result.qpr_avg =
myhalf * (qpr_array(i,j,k-1) + qpr_array(i,j,k));
994 result.qps_avg =
myhalf * (qps_array(i,j,k-1) + qps_array(i,j,k));
995 result.qpg_avg =
myhalf * (qpg_array(i,j,k-1) + qpg_array(i,j,k));
1000 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
1013 return face_state.omp * vrain * std::pow(face_state.rho_avg * face_state.qrr,
one +
crain)
1014 + (
one - face_state.omp)
1015 * ((
one - face_state.omg) * vsnow * std::pow(face_state.rho_avg * face_state.qss,
one +
csnow)
1016 + face_state.omg * vgrau * std::pow(face_state.rho_avg * face_state.qgg,
one +
cgrau));
1019 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
1033 result.
rain = face_state.omp * vrain * std::pow(face_state.rho_avg * face_state.qrr,
one +
crain);
1034 result.snow = (
one - face_state.omp) * (
one - face_state.omg)
1035 * vsnow * std::pow(face_state.rho_avg * face_state.qss,
one +
csnow);
1036 result.graupel = (
one - face_state.omp) * face_state.omg
1037 * vgrau * std::pow(face_state.rho_avg * face_state.qgg,
one +
cgrau);
1041 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
1052 if (face_state.qpr_avg >
zero) {
1053 result.
rain = vrain * std::pow(face_state.rho_avg * face_state.qpr_avg,
one +
crain);
1055 if (face_state.qps_avg >
zero) {
1056 result.snow = vsnow * std::pow(face_state.rho_avg * face_state.qps_avg,
one +
csnow);
1058 if (face_state.qpg_avg >
zero) {
1059 result.graupel = vgrau * std::pow(face_state.rho_avg * face_state.qpg_avg,
one +
cgrau);
1064 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
1069 return precip_flux * std::sqrt(
rho_0 / rho_avg);
1072 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
1079 precip_fluxes.rain * density_correction,
1080 precip_fluxes.snow * density_correction,
1081 precip_fluxes.graupel * density_correction};
1084 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
1095 rho_donor * amrex::max(
amrex::Real(0.0), q_donor) * detJ_donor / coef;
1096 return amrex::min(raw_flux, available_flux);
1099 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
1109 return dJinv * (
one /
rho) * (fz_hi - fz_lo) * coef;
1112 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
1122 result.snow = component_fluxes.snow * dtn /
rhos *
amrex::Real(1000.0);
1123 result.graupel = component_fluxes.graupel * dtn /
rhog *
amrex::Real(1000.0);
1127 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
constexpr amrex::Real R_v
Definition: ERF_Constants.H:35
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getTgivenRandRTh(const amrex::Real rho, const amrex::Real rhotheta, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:46
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getThgivenTandP(const amrex::Real T, const amrex::Real P, const amrex::Real rdOcp)
Definition: ERF_EOS.H:18
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getPgivenRTh(const amrex::Real rhotheta, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:81
#define Rho_comp
Definition: ERF_IndexDefines.H:39
#define RhoQ4_comp
Definition: ERF_IndexDefines.H:48
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:40
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:46
#define RhoQ3_comp
Definition: ERF_IndexDefines.H:47
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:45
#define RhoQ6_comp
Definition: ERF_IndexDefines.H:50
#define RhoQ5_comp
Definition: ERF_IndexDefines.H:49
Real rho_0
Definition: ERF_InitCustomPert_ABL.H:18
const Real rdOcp
Definition: ERF_InitCustomPert_ABL.H:72
const auto config
Definition: ERF_InitCustomPert_CloudChamber.H:37
Physical constants and tuning parameters used only by the moisture and cloud-physics code.
constexpr amrex::Real csnow
Definition: ERF_MicrophysicsConstants.H:70
constexpr amrex::Real rhog
Definition: ERF_MicrophysicsConstants.H:41
constexpr amrex::Real a_bg
Definition: ERF_MicrophysicsConstants.H:55
constexpr amrex::Real muelq
Definition: ERF_MicrophysicsConstants.H:104
constexpr amrex::Real a_gr
Definition: ERF_MicrophysicsConstants.H:57
constexpr amrex::Real qci0
Definition: ERF_MicrophysicsConstants.H:77
constexpr amrex::Real nzerog
Definition: ERF_MicrophysicsConstants.H:95
constexpr amrex::Real cgrau
Definition: ERF_MicrophysicsConstants.H:71
constexpr amrex::Real tbgmax
Definition: ERF_MicrophysicsConstants.H:49
constexpr amrex::Real betaelq
Definition: ERF_MicrophysicsConstants.H:79
constexpr amrex::Real a_grau
Definition: ERF_MicrophysicsConstants.H:66
constexpr amrex::Real lsub
Definition: ERF_MicrophysicsConstants.H:111
constexpr amrex::Real alphaelq
Definition: ERF_MicrophysicsConstants.H:78
constexpr amrex::Real esicoef
Definition: ERF_MicrophysicsConstants.H:86
constexpr amrex::Real diffelq
Definition: ERF_MicrophysicsConstants.H:102
constexpr amrex::Real therco
Definition: ERF_MicrophysicsConstants.H:103
constexpr amrex::Real b_grau
Definition: ERF_MicrophysicsConstants.H:67
constexpr amrex::Real egccoef
Definition: ERF_MicrophysicsConstants.H:87
constexpr amrex::Real egicoef
Definition: ERF_MicrophysicsConstants.H:88
constexpr amrex::Real b_rain
Definition: ERF_MicrophysicsConstants.H:63
constexpr amrex::Real lcond
Definition: ERF_MicrophysicsConstants.H:109
constexpr amrex::Real qcw0
Definition: ERF_MicrophysicsConstants.H:76
constexpr amrex::Real tprmin
Definition: ERF_MicrophysicsConstants.H:50
constexpr amrex::Real qp_threshold
Definition: ERF_MicrophysicsConstants.H:96
constexpr amrex::Real nzeror
Definition: ERF_MicrophysicsConstants.H:93
constexpr amrex::Real tbgmin
Definition: ERF_MicrophysicsConstants.H:48
constexpr amrex::Real rhos
Definition: ERF_MicrophysicsConstants.H:40
constexpr amrex::Real esccoef
Definition: ERF_MicrophysicsConstants.H:85
constexpr amrex::Real rhor
Definition: ERF_MicrophysicsConstants.H:39
constexpr amrex::Real a_rain
Definition: ERF_MicrophysicsConstants.H:62
constexpr amrex::Real nzeros
Definition: ERF_MicrophysicsConstants.H:94
constexpr amrex::Real a_snow
Definition: ERF_MicrophysicsConstants.H:64
constexpr amrex::Real crain
Definition: ERF_MicrophysicsConstants.H:69
constexpr amrex::Real b_snow
Definition: ERF_MicrophysicsConstants.H:65
constexpr amrex::Real erccoef
Definition: ERF_MicrophysicsConstants.H:84
constexpr amrex::Real tgrmin
Definition: ERF_MicrophysicsConstants.H:52
constexpr amrex::Real a_pr
Definition: ERF_MicrophysicsConstants.H:56
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_esati(amrex::Real t)
Definition: ERF_MicrophysicsUtils.H:67
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE MicrophysicsThermoState diagnose_microphysics_thermo_state(const amrex::Real rho, const amrex::Real rho_theta, const amrex::Real qv, const amrex::Real rdOcp, const bool use_anelastic_reference_pressure, const amrex::Real p0) noexcept
Definition: ERF_MicrophysicsUtils.H:35
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_qsatw(amrex::Real t, amrex::Real p, amrex::Real &qsatw)
Definition: ERF_MicrophysicsUtils.H:264
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_qsati(amrex::Real t, amrex::Real p, amrex::Real &qsati)
Definition: ERF_MicrophysicsUtils.H:254
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_esatw(amrex::Real t, bool use_empirical=false)
Definition: ERF_MicrophysicsUtils.H:159
constexpr amrex::Real three
Definition: ERF_NumericalConstants.H:32
constexpr amrex::Real two
Definition: ERF_NumericalConstants.H:31
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:30
constexpr amrex::Real fourth
Definition: ERF_NumericalConstants.H:35
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:29
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:34
constexpr amrex::Real PI
Definition: ERF_NumericalConstants.H:39
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipSources sam_accretion_rates(const amrex::Real &dtn, const amrex::Real &qcc, const amrex::Real &qii, const amrex::Real &qpr, const amrex::Real &qps, const amrex::Real &qpg, const amrex::Real &powr1, const amrex::Real &pows1, const amrex::Real &powg1, const amrex::Real &omp, const amrex::Real &omg, const amrex::Real &accrrc_k, const amrex::Real &accrsc_k, const amrex::Real &accrsi_k, const amrex::Real &accrgc_k, const amrex::Real &accrgi_k) noexcept
Definition: ERF_SAMUtils.H:518
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipFaceState sam_precip_face_state(const int &SAM_moisture_type, const amrex::Array4< const amrex::Real > &rho_array, const amrex::Array4< const amrex::Real > &tabs_array, const amrex::Array4< const amrex::Real > &qp_array, const int &i, const int &j, const int &k, const int &k_lo, const int &k_hi) noexcept
Definition: ERF_SAMUtils.H:928
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMCloudPhaseChange sam_partition_cloud_phase(const int &SAM_moisture_type, const amrex::Real &tabs, const amrex::Real &qn, const amrex::Real &qcl, const amrex::Real &qci, const amrex::Real fac_cond, const amrex::Real fac_fus, const amrex::Real an, const amrex::Real bn) noexcept
Definition: ERF_SAMUtils.H:391
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_graupel_fraction(const int &SAM_moisture_type, const amrex::Real &tabs) noexcept
Definition: ERF_SAMUtils.H:379
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipFluxComponents sam_precip_flux_components_from_face_state(const SAMPrecipFaceState &face_state, const amrex::Real &vrain, const amrex::Real &vsnow, const amrex::Real &vgrau) noexcept
Definition: ERF_SAMUtils.H:1023
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrimitiveCell sam_copy_state_to_micro_cell(const amrex::Array4< const amrex::Real > &states, const amrex::Array4< const amrex::Real > &base, const amrex::Array4< amrex::Real > &rho, const amrex::Array4< amrex::Real > &theta, const amrex::Array4< amrex::Real > &qv, const amrex::Array4< amrex::Real > &qc, const amrex::Array4< amrex::Real > &qi, const amrex::Array4< amrex::Real > &qn, const amrex::Array4< amrex::Real > &qt, const amrex::Array4< amrex::Real > &qpr, const amrex::Array4< amrex::Real > &qps, const amrex::Array4< amrex::Real > &qpg, const amrex::Array4< amrex::Real > &qp, const amrex::Array4< amrex::Real > &tabs, const amrex::Array4< amrex::Real > &pres, const amrex::Real rdOcp, const bool use_anelastic_reference_pressure, const int i, const int j, const int k) noexcept
Definition: ERF_SAMUtils.H:239
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_mbar_to_pa(const amrex::Real &pres_mbar) noexcept
Definition: ERF_SAMUtils.H:159
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int sam_substep_count_from_reduced_flux(const amrex::Real &reduced_flux, const amrex::Real &dt, const amrex::Real &dz) noexcept
Definition: ERF_SAMUtils.H:916
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipFluxComponents sam_precip_component_fluxes_from_face_state(const SAMPrecipComponentFaceState &face_state, const amrex::Real &vrain, const amrex::Real &vsnow, const amrex::Real &vgrau) noexcept
Definition: ERF_SAMUtils.H:1046
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_precip_rain_fraction(const int &SAM_moisture_type, const amrex::Real &tabs) noexcept
Definition: ERF_SAMUtils.H:367
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_newton_residual(const amrex::Real &tabs_new, const amrex::Real &tabs_old, const amrex::Real fcond, const amrex::Real &qv, const amrex::Real &qsatm, const amrex::Real ffus, const amrex::Real &qi, const amrex::Real &qif) noexcept
Definition: ERF_SAMUtils.H:477
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMSurfaceAccumulation sam_surface_accumulation_from_component_fluxes(const SAMPrecipFluxComponents &component_fluxes, const amrex::Real &dtn) noexcept
Definition: ERF_SAMUtils.H:1116
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_mixed_dqif_dT(const amrex::Real &omn, const amrex::Real &domn, const amrex::Real &qn, const amrex::Real &dqsatm) noexcept
Definition: ERF_SAMUtils.H:467
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMFaceState sam_face_average_state(const int &k, const int &k_lo, const int &k_hi, const amrex::Real &rho_km1, const amrex::Real &rho_k, const amrex::Real tabs_km1, const amrex::Real tabs_k, const amrex::Real &qci_km1, const amrex::Real &qci_k, const amrex::Real qp_km1, const amrex::Real qp_k) noexcept
Definition: ERF_SAMUtils.H:869
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_pa_to_mbar(const amrex::Real &pres_pa) noexcept
Definition: ERF_SAMUtils.H:166
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipSources sam_autoconversion_rates(const amrex::Real &dtn, const amrex::Real &qcc, const amrex::Real &qii, const amrex::Real &coefice_k) noexcept
Definition: ERF_SAMUtils.H:501
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipSources sam_rescale_cloud_sinks(const amrex::Real &qcl, const amrex::Real &qci, const amrex::Real &eps, SAMPrecipSources result) noexcept
Definition: ERF_SAMUtils.H:568
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMCellState sam_precip_cell_update(SAMCellState state, const SAMCoefficientRow &coeffs, const SAMPrecipConfig &config, SAMPrecipCellDiagnostics *diagnostics=nullptr) noexcept
Definition: ERF_SAMUtils.H:652
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_precip_flux_density_corrected(const amrex::Real &precip_flux, const amrex::Real &rho_0, const amrex::Real &rho_avg) noexcept
Definition: ERF_SAMUtils.H:1065
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrimitiveCell sam_cons_to_primitive_with_base_state(const amrex::Real &rho, const amrex::Real &rho_theta, const amrex::Real &rho_qv, const amrex::Real &rho_qcl, const amrex::Real &rho_qci, const amrex::Real &rho_qpr, const amrex::Real &rho_qps, const amrex::Real &rho_qpg, const amrex::Real rdOcp, const bool use_anelastic_reference_pressure, const amrex::Real p0) noexcept
Definition: ERF_SAMUtils.H:214
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool sam_is_no_ice(const MoistureType &moisture_type) noexcept
Definition: ERF_SAMUtils.H:333
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool sam_is_no_precip(const MoistureType &moisture_type) noexcept
Definition: ERF_SAMUtils.H:340
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void sam_primitive_to_cons(const SAMPrimitiveCell &primitive, const amrex::Array4< amrex::Real > &states_arr, const int &i, const int &j, const int &k) noexcept
Definition: ERF_SAMUtils.H:314
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMCoefficientRow sam_compute_coefficient_row(const amrex::Real &rho, const amrex::Real &tabs, const amrex::Real &gamr1, const amrex::Real &gamr2, const amrex::Real &gams1, const amrex::Real &gams2, const amrex::Real &gamg1, const amrex::Real &gamg2) noexcept
Definition: ERF_SAMUtils.H:804
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_limit_precip_component_flux(const amrex::Real &raw_flux, const amrex::Real &rho_donor, const amrex::Real &q_donor, const amrex::Real &detJ_donor, const amrex::Real &coef) noexcept
Definition: ERF_SAMUtils.H:1088
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrimitiveCell sam_cons_to_primitive_with_thermo(const amrex::Real &rho, const amrex::Real &rho_theta, const amrex::Real &rho_qv, const amrex::Real &rho_qcl, const amrex::Real &rho_qci, const amrex::Real &rho_qpr, const amrex::Real &rho_qps, const amrex::Real &rho_qpg, const MicrophysicsThermoState &thermo) noexcept
Definition: ERF_SAMUtils.H:183
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_sedimentation_tendency(const amrex::Real &fz_hi, const amrex::Real &fz_lo, const amrex::Real &rho, const amrex::Real &dJinv, const amrex::Real &coef) noexcept
Definition: ERF_SAMUtils.H:1103
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_cloud_ice_terminal_velocity(const amrex::Real &qci_avg) noexcept
Definition: ERF_SAMUtils.H:861
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMSurfaceAccumulation sam_surface_accumulation(const SAMPrecipFaceState &face_state, const amrex::Real &rho_0, const amrex::Real &vrain, const amrex::Real &vsnow, const amrex::Real &vgrau, const amrex::Real &dtn) noexcept
Definition: ERF_SAMUtils.H:1128
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipSources sam_apply_precip_evaporation_limiter(const amrex::Real &qpr, const amrex::Real &qps, const amrex::Real &qpg, SAMPrecipSources result) noexcept
Definition: ERF_SAMUtils.H:636
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_precip_flux_from_face_state(const SAMPrecipFaceState &face_state, const amrex::Real &vrain, const amrex::Real &vsnow, const amrex::Real &vgrau) noexcept
Definition: ERF_SAMUtils.H:1005
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipComponentFaceState sam_precip_component_face_state(const amrex::Array4< const amrex::Real > &rho_array, const amrex::Array4< const amrex::Real > &tabs_array, const amrex::Array4< const amrex::Real > &qpr_array, const amrex::Array4< const amrex::Real > &qps_array, const amrex::Array4< const amrex::Real > &qpg_array, const int &i, const int &j, const int &k, const int &k_lo, const int &k_hi) noexcept
Definition: ERF_SAMUtils.H:965
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_theta_from_stored_mbar_converted_to_pa(const amrex::Real &tabs, const amrex::Real &pres_mbar, const amrex::Real rdOcp) noexcept
Definition: ERF_SAMUtils.H:172
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipSources sam_partition_autoconverted_precip(SAMPrecipSources result, const amrex::Real &omp, const amrex::Real &omg) noexcept
Definition: ERF_SAMUtils.H:598
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_newton_residual_derivative(const amrex::Real fcond, const amrex::Real ffus, const amrex::Real &dqsatm, const amrex::Real &dqif) noexcept
Definition: ERF_SAMUtils.H:491
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrimitiveCell sam_cons_to_primitive(const amrex::Real &rho, const amrex::Real &rho_theta, const amrex::Real &rho_qv, const amrex::Real &rho_qcl, const amrex::Real &rho_qci, const amrex::Real &rho_qpr, const amrex::Real &rho_qps, const amrex::Real &rho_qpg) noexcept
Definition: ERF_SAMUtils.H:285
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int sam_precip_face_donor_k(const int &face_k, const int &k_lo, const int &k_hi) noexcept
Definition: ERF_SAMUtils.H:902
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_cloud_liquid_fraction(const int &SAM_moisture_type, const amrex::Real &tabs, const amrex::Real an, const amrex::Real bn) noexcept
Definition: ERF_SAMUtils.H:346
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipFluxComponents sam_precip_flux_components_density_corrected(const SAMPrecipFluxComponents &precip_fluxes, const amrex::Real &rho_0, const amrex::Real &rho_avg) noexcept
Definition: ERF_SAMUtils.H:1073
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_mixed_qsat(const amrex::Real &omn, const amrex::Real &qsatw, const amrex::Real &qsati) noexcept
Definition: ERF_SAMUtils.H:445
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipSources sam_precip_evaporation_rates(const amrex::Real &qpr, const amrex::Real &qps, const amrex::Real &qpg, const amrex::Real &powr2, const amrex::Real &pows2, const amrex::Real &powg2, const amrex::Real &evapr1_k, const amrex::Real &evapr2_k, const amrex::Real &evaps1_k, const amrex::Real &evaps2_k, const amrex::Real &evapg1_k, const amrex::Real &evapg2_k) noexcept
Definition: ERF_SAMUtils.H:612
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_mixed_dqsat_dT(const amrex::Real &omn, const amrex::Real &domn, const amrex::Real &qsatw, const amrex::Real &qsati, const amrex::Real &dqsatw, const amrex::Real &dqsati) noexcept
Definition: ERF_SAMUtils.H:454
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ p0_comp
Definition: ERF_IndexDefines.H:77
@ theta
Definition: ERF_SLM.H:19
@ qp
Definition: ERF_Kessler.H:34
@ qcl
Definition: ERF_Kessler.H:32
@ tabs
Definition: ERF_Kessler.H:27
@ pres
Definition: ERF_Kessler.H:28
@ rho
Definition: ERF_Kessler.H:25
@ qt
Definition: ERF_Kessler.H:30
@ qv
Definition: ERF_Kessler.H:31
@ qpg
Definition: ERF_Morrison.H:43
@ qps
Definition: ERF_Morrison.H:42
@ qn
Definition: ERF_Morrison.H:35
@ qpr
Definition: ERF_Morrison.H:41
@ qci
Definition: ERF_Morrison.H:38
@ qc
Definition: ERF_SatAdj.H:42
@ qi
Definition: ERF_WDM6.H:28
@ dz
Definition: ERF_AdvanceWDM6.cpp:272
@ qsatw
Definition: ERF_WSM6.H:340
@ qsati
Definition: ERF_WSM6.H:340
real(c_double), parameter p0
Definition: ERF_module_model_constants.F90:40
Definition: ERF_MicrophysicsUtils.H:22
Definition: ERF_SAMUtils.H:23
amrex::Real delta_qi
Definition: ERF_SAMUtils.H:27
amrex::Real qcl
Definition: ERF_SAMUtils.H:29
amrex::Real qn
Definition: ERF_SAMUtils.H:31
amrex::Real tabs
Definition: ERF_SAMUtils.H:33
amrex::Real qt
Definition: ERF_SAMUtils.H:32
amrex::Real qv
Definition: ERF_SAMUtils.H:28
amrex::Real delta_qv
Definition: ERF_SAMUtils.H:25
amrex::Real delta_qc
Definition: ERF_SAMUtils.H:26
amrex::Real omn
Definition: ERF_SAMUtils.H:24
amrex::Real qci
Definition: ERF_SAMUtils.H:30
Definition: ERF_SAMUtils.H:99
amrex::Real coefice
Definition: ERF_SAMUtils.H:103
amrex::Real evaps2
Definition: ERF_SAMUtils.H:105
amrex::Real accrsi
Definition: ERF_SAMUtils.H:101
amrex::Real accrgc
Definition: ERF_SAMUtils.H:107
amrex::Real accrgi
Definition: ERF_SAMUtils.H:106
amrex::Real accrsc
Definition: ERF_SAMUtils.H:102
amrex::Real evapg1
Definition: ERF_SAMUtils.H:108
amrex::Real evapr1
Definition: ERF_SAMUtils.H:110
amrex::Real evapg2
Definition: ERF_SAMUtils.H:109
amrex::Real accrrc
Definition: ERF_SAMUtils.H:100
amrex::Real evapr2
Definition: ERF_SAMUtils.H:111
amrex::Real evaps1
Definition: ERF_SAMUtils.H:104
Definition: ERF_SAMUtils.H:133
amrex::Real qp_avg
Definition: ERF_SAMUtils.H:137
amrex::Real qci_avg
Definition: ERF_SAMUtils.H:136
amrex::Real tabs_avg
Definition: ERF_SAMUtils.H:135
amrex::Real rho_avg
Definition: ERF_SAMUtils.H:134
Definition: ERF_SAMUtils.H:17
amrex::Real omg
Definition: ERF_SAMUtils.H:20
amrex::Real omp
Definition: ERF_SAMUtils.H:19
amrex::Real omn
Definition: ERF_SAMUtils.H:18
Definition: ERF_SAMUtils.H:87
SAMPrecipSources limited_sources
Definition: ERF_SAMUtils.H:90
amrex::Real omg
Definition: ERF_SAMUtils.H:96
amrex::Real omp
Definition: ERF_SAMUtils.H:95
SAMPrecipSources partitioned_sources
Definition: ERF_SAMUtils.H:91
amrex::Real qsat
Definition: ERF_SAMUtils.H:93
SAMPrecipSources evaporation
Definition: ERF_SAMUtils.H:92
amrex::Real omn
Definition: ERF_SAMUtils.H:94
SAMPrecipSources autoconversion
Definition: ERF_SAMUtils.H:88
SAMPrecipSources accretion
Definition: ERF_SAMUtils.H:89
Definition: ERF_SAMUtils.H:125
amrex::Real qpr_avg
Definition: ERF_SAMUtils.H:128
amrex::Real qpg_avg
Definition: ERF_SAMUtils.H:130
amrex::Real qps_avg
Definition: ERF_SAMUtils.H:129
amrex::Real tabs_avg
Definition: ERF_SAMUtils.H:127
amrex::Real rho_avg
Definition: ERF_SAMUtils.H:126
Definition: ERF_SAMUtils.H:70
bool enable_precip
Definition: ERF_SAMUtils.H:72
amrex::Real fac_cond
Definition: ERF_SAMUtils.H:75
amrex::Real rdOcp
Definition: ERF_SAMUtils.H:74
amrex::Real dtn
Definition: ERF_SAMUtils.H:73
amrex::Real eps
Definition: ERF_SAMUtils.H:78
amrex::Real powr2
Definition: ERF_SAMUtils.H:82
amrex::Real fac_sub
Definition: ERF_SAMUtils.H:77
amrex::Real pows2
Definition: ERF_SAMUtils.H:83
amrex::Real pows1
Definition: ERF_SAMUtils.H:80
amrex::Real fac_fus
Definition: ERF_SAMUtils.H:76
amrex::Real powg2
Definition: ERF_SAMUtils.H:84
amrex::Real powg1
Definition: ERF_SAMUtils.H:81
int sam_moisture_type
Definition: ERF_SAMUtils.H:71
amrex::Real powr1
Definition: ERF_SAMUtils.H:79
Definition: ERF_SAMUtils.H:114
amrex::Real omg
Definition: ERF_SAMUtils.H:119
amrex::Real qss
Definition: ERF_SAMUtils.H:121
amrex::Real qrr
Definition: ERF_SAMUtils.H:120
amrex::Real qp_avg
Definition: ERF_SAMUtils.H:117
amrex::Real rho_avg
Definition: ERF_SAMUtils.H:115
amrex::Real qgg
Definition: ERF_SAMUtils.H:122
amrex::Real tabs_avg
Definition: ERF_SAMUtils.H:116
amrex::Real omp
Definition: ERF_SAMUtils.H:118
Definition: ERF_SAMUtils.H:146
amrex::Real snow
Definition: ERF_SAMUtils.H:148
amrex::Real rain
Definition: ERF_SAMUtils.H:147
amrex::Real graupel
Definition: ERF_SAMUtils.H:149
Definition: ERF_SAMUtils.H:36
amrex::Real dqpg
Definition: ERF_SAMUtils.H:48
amrex::Real dpgc
Definition: ERF_SAMUtils.H:40
amrex::Real dqca
Definition: ERF_SAMUtils.H:37
amrex::Real dqps
Definition: ERF_SAMUtils.H:47
amrex::Real dqp
Definition: ERF_SAMUtils.H:49
amrex::Real dqc
Definition: ERF_SAMUtils.H:44
amrex::Real dpsc
Definition: ERF_SAMUtils.H:39
amrex::Real dpgi
Definition: ERF_SAMUtils.H:43
amrex::Real dprc
Definition: ERF_SAMUtils.H:38
amrex::Real dqia
Definition: ERF_SAMUtils.H:41
amrex::Real dqpr
Definition: ERF_SAMUtils.H:46
amrex::Real dpsi
Definition: ERF_SAMUtils.H:42
amrex::Real dqi
Definition: ERF_SAMUtils.H:45
Definition: ERF_SAMUtils.H:52
amrex::Real theta
Definition: ERF_SAMUtils.H:54
amrex::Real qpr
Definition: ERF_SAMUtils.H:62
amrex::Real qn
Definition: ERF_SAMUtils.H:60
amrex::Real qps
Definition: ERF_SAMUtils.H:63
amrex::Real qci
Definition: ERF_SAMUtils.H:59
amrex::Real qv
Definition: ERF_SAMUtils.H:57
amrex::Real tabs
Definition: ERF_SAMUtils.H:55
amrex::Real qpg
Definition: ERF_SAMUtils.H:64
amrex::Real qt
Definition: ERF_SAMUtils.H:61
amrex::Real qcl
Definition: ERF_SAMUtils.H:58
amrex::Real rho
Definition: ERF_SAMUtils.H:53
amrex::Real pres_mbar
Definition: ERF_SAMUtils.H:56
amrex::Real qp
Definition: ERF_SAMUtils.H:65
Definition: ERF_SAMUtils.H:140
amrex::Real rain
Definition: ERF_SAMUtils.H:141
amrex::Real snow
Definition: ERF_SAMUtils.H:142
amrex::Real graupel
Definition: ERF_SAMUtils.H:143