389 for (
int k = 0; k < km; ++k) {
393 allold += QQ(k) + QQ2(k);
396 precip1[0] =
Real(0.0);
397 precip2[0] =
Real(0.0);
398 if (allold <=
Real(0.0)) {
403 for (
int k = 0; k < km; ++k) {
404 ZI(k + 1) = ZI(k) +
DZ(k);
407 auto rebuild = [&]() {
410 WI(1) =
Real(0.5) * (WW(1) + WW(0));
411 for (
int k = 2; k < km - 1; ++k) {
412 WI(k) =
Real(9.0) /
Real(16.0) * (WW(k) + WW(k - 1))
413 -
Real(1.0) /
Real(16.0) * (WW(k + 1) + WW(k - 2));
415 WI(km - 1) =
Real(0.5) * (WW(km - 1) + WW(km - 2));
418 for (
int k = 1; k < km; ++k) {
419 if (WW(k) ==
Real(0.0)) WI(k) = WW(k - 1);
423 for (
int k = km - 1; k >= 0; --k) {
424 const Real decfl = (WI(k + 1) - WI(k)) * dt /
DZ(k);
426 WI(k) = WI(k + 1) - con1 *
DZ(k) / dt;
430 for (
int k = 0; k <= km; ++k) {
431 ZA(k) = ZI(k) - WI(k) * dt;
433 for (
int k = 0; k < km; ++k) {
434 DZA(k) = ZA(k + 1) - ZA(k);
435 QA(k) = QQ(k) *
DZ(k) / DZA(k);
436 QA2(k) = QQ2(k) *
DZ(k) / DZA(k);
437 QR(k) = QA(k) / DEN(k);
438 QR2(k) = QA2(k) / DEN(k);
440 DZA(km) = ZI(km) - ZA(km);
448 for (
int k = 0; k < km; ++k) {
449 Real rslope, rslopeb, rslope2, rslope3, vt, n0sfac_dummy;
453 bvts,
pvts, rslope, rslopeb, rslope2, rslope3, vt,
459 rslope, rslopeb, rslope2, rslope3, vt);
462 for (
int k = 0; k < km; ++k) {
465 ? (WA(k) *
QR(k) + WA2(k) * QR2(k)) / tmpq
467 WW(k) =
Real(0.5) * (WD(k) + WA(k));
473 for (
int ist = 0; ist < 2; ++ist) {
474 const int qn_comp = (ist == 0)
477 const int qa_comp = (ist == 0)
481 return sed_cell(i_s, j_s, klo_s + k, qn_comp);
484 return sed_node(i_s, j_s, klo_s + k, qa_comp);
486 Real* precip_dst = (ist == 0) ? precip1 : precip2;
490 QMI(km) = qa_src(km);
491 QPI(km) = qa_src(km);
492 for (
int k = 1; k < km; ++k) {
493 const Real dip = (qa_src(k + 1) - qa_src(k)) / (DZA(k + 1) + DZA(k));
494 const Real dim = (qa_src(k) - qa_src(k - 1)) / (DZA(k - 1) + DZA(k));
495 if (dip * dim <=
Real(0.0)) {
499 QPI(k) = qa_src(k) +
Real(0.5) * (dip + dim) * DZA(k);
500 QMI(k) =
Real(2.0) * qa_src(k) - QPI(k);
501 if (QPI(k) <
Real(0.0) || QMI(k) <
Real(0.0)) {
508 for (
int k = 0; k < km; ++k) {
509 qn_dst(k) =
Real(0.0);
513 for (
int k = 0; k < km; ++k) {
520 kb = amrex::max(kb - 1, 0);
521 kt = amrex::max(kt - 1, 0);
523 if (ZI(k) >= ZA(km))
break;
525 for (
int kk = kb; kk < km; ++kk) {
526 if (ZI(k) <= ZA(kk + 1)) {
531 for (
int kk = kt; kk < km; ++kk) {
532 if (ZI(k + 1) <= ZA(kk)) {
547 const Real tl = (ZI(k) - ZA(kb)) / DZA(kb);
548 const Real th = (ZI(k + 1) - ZA(kb)) / DZA(kb);
549 const Real qqd =
Real(0.5) * (QPI(kb) - QMI(kb));
550 qn_dst(k) = (qqd * th * th + QMI(kb) * th
551 - qqd * tl * tl - QMI(kb) * tl) / (th - tl);
552 }
else if (kt > kb) {
553 const Real tl = (ZI(k) - ZA(kb)) / DZA(kb);
554 const Real qqd =
Real(0.5) * (QPI(kb) - QMI(kb));
555 const Real qql = qqd * tl * tl + QMI(kb) * tl;
556 const Real dql = qa_src(kb) - qql;
557 Real zsum = (
Real(1.0) - tl) * DZA(kb);
559 for (
int m = kb + 1; m < kt; ++m) {
561 qsum += qa_src(m) * DZA(m);
563 const Real th = (ZI(k + 1) - ZA(kt)) / DZA(kt);
564 const Real dqh =
Real(0.5) * (QPI(kt) - QMI(kt)) * th * th + QMI(kt) * th;
565 zsum += th * DZA(kt);
566 qsum += dqh * DZA(kt);
567 qn_dst(k) =
qsum / zsum;
571 precip_dst[0] =
Real(0.0);
572 for (
int k = 0; k < km; ++k) {
573 if (ZA(k) <
Real(0.0) && ZA(k + 1) <
Real(0.0)) {
574 precip_dst[0] += qa_src(k) * DZA(k);
575 }
else if (ZA(k) <
Real(0.0) && ZA(k + 1) >=
Real(0.0)) {
576 precip_dst[0] += qa_src(k) * (
Real(0.0) - ZA(k));
584 for (
int k = 0; k < km; ++k) {
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void wdm6_slope_snow_cell(Real qs, Real den, Real denfac, Real t, Real pidn0s_arg, Real alpha_arg, Real n0smax_arg, Real n0s_arg, Real t0c_arg, Real qcrmin_arg, Real rslopesmax_arg, Real rslopesbmax_arg, Real rslopes2max_arg, Real rslopes3max_arg, Real bvts_arg, Real pvts_arg, Real &rslope, Real &rslopeb, Real &rslope2, Real &rslope3, Real &vt, Real &n0sfac)
Definition: ERF_AdvanceWDM6.cpp:217
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void wdm6_slope_graup_cell(Real qg, Real den, Real denfac, Real pidn0g_arg, Real qcrmin_arg, Real rslopegmax_arg, Real rslopegbmax_arg, Real rslopeg2max_arg, Real rslopeg3max_arg, Real bvtg_arg, Real pvtg_arg, Real &rslope, Real &rslopeb, Real &rslope2, Real &rslope3, Real &vt)
Definition: ERF_AdvanceWDM6.cpp:247
@ n0s
Definition: ERF_AdvanceMorrison.cpp:43
@ QR
Definition: ERF_IndexDefines.H:142
constexpr int DZ
Definition: ERF_TwoStreamColumn.H:599
@ qn2
Definition: ERF_AdvanceWDM6.cpp:271
@ was
Definition: ERF_AdvanceWDM6.cpp:271
@ tk
Definition: ERF_AdvanceWDM6.cpp:272
@ qn
Definition: ERF_AdvanceWDM6.cpp:271
@ wa2
Definition: ERF_AdvanceWDM6.cpp:271
@ qr2
Definition: ERF_AdvanceWDM6.cpp:271
@ work_col
Definition: ERF_AdvanceWDM6.cpp:272
@ denfac
Definition: ERF_AdvanceWDM6.cpp:272
@ rq2_col
Definition: ERF_AdvanceWDM6.cpp:272
@ wa
Definition: ERF_AdvanceWDM6.cpp:271
@ qq
Definition: ERF_AdvanceWDM6.cpp:271
@ qq2
Definition: ERF_AdvanceWDM6.cpp:271
@ wd
Definition: ERF_AdvanceWDM6.cpp:271
@ rq_col
Definition: ERF_AdvanceWDM6.cpp:272
@ dz
Definition: ERF_AdvanceWDM6.cpp:272
@ zi
Definition: ERF_AdvanceWDM6.cpp:276
@ qa2
Definition: ERF_AdvanceWDM6.cpp:276
@ qpi
Definition: ERF_AdvanceWDM6.cpp:276
@ qa
Definition: ERF_AdvanceWDM6.cpp:276
@ za
Definition: ERF_AdvanceWDM6.cpp:276
@ wi
Definition: ERF_AdvanceWDM6.cpp:276
@ qmi
Definition: ERF_AdvanceWDM6.cpp:276
@ dza
Definition: ERF_AdvanceWDM6.cpp:276
@ qsum
Definition: ERF_WSM6.H:323
real(kind=kind_phys), save rslopes3max
Definition: ERF_module_mp_wdm6.F90:100
real(kind=kind_phys), save rslopegmax
Definition: ERF_module_mp_wdm6.F90:100
real(kind=kind_phys), save rslopesmax
Definition: ERF_module_mp_wdm6.F90:100
real(kind=kind_phys), parameter, private n0smax
Definition: ERF_module_mp_wdm6.F90:60
real(kind=kind_phys), parameter, private alpha
Definition: ERF_module_mp_wdm6.F90:62
real(kind=kind_phys), save pidn0s
Definition: ERF_module_mp_wdm6.F90:100
real(kind=kind_phys), save rslopeg3max
Definition: ERF_module_mp_wdm6.F90:100
real(kind=kind_phys), save pvtg
Definition: ERF_module_mp_wdm6.F90:100
real(kind=kind_phys), save bvtg
Definition: ERF_module_mp_wdm6.F90:100
real(kind=kind_phys), save pvts
Definition: ERF_module_mp_wdm6.F90:100
real(kind=kind_phys), save rslopeg2max
Definition: ERF_module_mp_wdm6.F90:100
real(kind=kind_phys), parameter, private bvts
Definition: ERF_module_mp_wdm6.F90:66
real(kind=kind_phys), save rslopesbmax
Definition: ERF_module_mp_wdm6.F90:100
real(kind=kind_phys), save pidn0g
Definition: ERF_module_mp_wdm6.F90:100
real(kind=kind_phys), save rslopegbmax
Definition: ERF_module_mp_wdm6.F90:100
real(kind=kind_phys), save rslopes2max
Definition: ERF_module_mp_wdm6.F90:100
real(kind=kind_phys), parameter, private qcrmin
Definition: ERF_module_mp_wdm6.F90:85