390 for (
int k = 0; k < km; ++k) {
394 allold += QQ(k) + QQ2(k);
397 precip1[0] =
Real(0.0);
398 precip2[0] =
Real(0.0);
399 if (allold <=
Real(0.0)) {
404 for (
int k = 0; k < km; ++k) {
405 ZI(k + 1) = ZI(k) +
DZ(k);
408 auto rebuild = [&]() {
411 WI(1) =
Real(0.5) * (WW(1) + WW(0));
412 for (
int k = 2; k < km - 1; ++k) {
413 WI(k) =
Real(9.0) /
Real(16.0) * (WW(k) + WW(k - 1))
414 -
Real(1.0) /
Real(16.0) * (WW(k + 1) + WW(k - 2));
416 WI(km - 1) =
Real(0.5) * (WW(km - 1) + WW(km - 2));
419 for (
int k = 1; k < km; ++k) {
420 if (WW(k) ==
Real(0.0)) WI(k) = WW(k - 1);
424 for (
int k = km - 1; k >= 0; --k) {
425 const Real decfl = (WI(k + 1) - WI(k)) * dt /
DZ(k);
427 WI(k) = WI(k + 1) - con1 *
DZ(k) / dt;
431 for (
int k = 0; k <= km; ++k) {
432 ZA(k) = ZI(k) - WI(k) * dt;
434 for (
int k = 0; k < km; ++k) {
435 DZA(k) = ZA(k + 1) - ZA(k);
436 QA(k) = QQ(k) *
DZ(k) / DZA(k);
437 QA2(k) = QQ2(k) *
DZ(k) / DZA(k);
438 QR(k) = QA(k) / DEN(k);
439 QR2(k) = QA2(k) / DEN(k);
441 DZA(km) = ZI(km) - ZA(km);
449 for (
int k = 0; k < km; ++k) {
450 Real rslope, rslopeb, rslope2, rslope3, vt, n0sfac_dummy;
454 bvts,
pvts, rslope, rslopeb, rslope2, rslope3, vt,
460 rslope, rslopeb, rslope2, rslope3, vt);
463 for (
int k = 0; k < km; ++k) {
466 ? (WA(k) *
QR(k) + WA2(k) * QR2(k)) / tmpq
468 WW(k) =
Real(0.5) * (WD(k) + WA(k));
474 for (
int ist = 0; ist < 2; ++ist) {
475 const int qn_comp = (ist == 0)
478 const int qa_comp = (ist == 0)
482 return sed_cell(i_s, j_s, klo_s + k, qn_comp);
485 return sed_node(i_s, j_s, klo_s + k, qa_comp);
487 Real* precip_dst = (ist == 0) ? precip1 : precip2;
491 QMI(km) = qa_src(km);
492 QPI(km) = qa_src(km);
493 for (
int k = 1; k < km; ++k) {
494 const Real dip = (qa_src(k + 1) - qa_src(k)) / (DZA(k + 1) + DZA(k));
495 const Real dim = (qa_src(k) - qa_src(k - 1)) / (DZA(k - 1) + DZA(k));
496 if (dip * dim <=
Real(0.0)) {
500 QPI(k) = qa_src(k) +
Real(0.5) * (dip + dim) * DZA(k);
501 QMI(k) =
Real(2.0) * qa_src(k) - QPI(k);
502 if (QPI(k) <
Real(0.0) || QMI(k) <
Real(0.0)) {
509 for (
int k = 0; k < km; ++k) {
510 qn_dst(k) =
Real(0.0);
514 for (
int k = 0; k < km; ++k) {
521 kb = amrex::max(kb - 1, 0);
522 kt = amrex::max(kt - 1, 0);
524 if (ZI(k) >= ZA(km))
break;
526 for (
int kk = kb; kk < km; ++kk) {
527 if (ZI(k) <= ZA(kk + 1)) {
537 bool kt_found =
false;
538 for (
int kk = kt; kk <= km; ++kk) {
539 if (ZI(k + 1) <= ZA(kk)) {
545 if (!kt_found) { kt = km + 1; }
556 const Real tl = (ZI(k) - ZA(kb)) / DZA(kb);
557 const Real th = (ZI(k + 1) - ZA(kb)) / DZA(kb);
558 const Real qqd =
Real(0.5) * (QPI(kb) - QMI(kb));
559 qn_dst(k) = (qqd * th * th + QMI(kb) * th
560 - qqd * tl * tl - QMI(kb) * tl) / (th - tl);
561 }
else if (kt > kb) {
562 const Real tl = (ZI(k) - ZA(kb)) / DZA(kb);
563 const Real qqd =
Real(0.5) * (QPI(kb) - QMI(kb));
564 const Real qql = qqd * tl * tl + QMI(kb) * tl;
565 const Real dql = qa_src(kb) - qql;
566 Real zsum = (
Real(1.0) - tl) * DZA(kb);
568 for (
int m = kb + 1; m < kt; ++m) {
570 qsum += qa_src(m) * DZA(m);
572 const Real th = (ZI(k + 1) - ZA(kt)) / DZA(kt);
573 const Real dqh =
Real(0.5) * (QPI(kt) - QMI(kt)) * th * th + QMI(kt) * th;
574 zsum += th * DZA(kt);
575 qsum += dqh * DZA(kt);
576 qn_dst(k) =
qsum / zsum;
580 precip_dst[0] =
Real(0.0);
581 for (
int k = 0; k < km; ++k) {
582 if (ZA(k) <
Real(0.0) && ZA(k + 1) <
Real(0.0)) {
583 precip_dst[0] += qa_src(k) * DZA(k);
584 }
else if (ZA(k) <
Real(0.0) && ZA(k + 1) >=
Real(0.0)) {
585 precip_dst[0] += qa_src(k) * (
Real(0.0) - ZA(k));
593 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:218
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:248
@ n0s
Definition: ERF_AdvanceMorrison.cpp:43
@ QR
Definition: ERF_IndexDefines.H:182
@ alpha
Definition: ERF_SLM.H:151
constexpr int DZ
Definition: ERF_TwoStreamColumn.H:599
@ qn2
Definition: ERF_AdvanceWDM6.cpp:272
@ was
Definition: ERF_AdvanceWDM6.cpp:272
@ tk
Definition: ERF_AdvanceWDM6.cpp:273
@ qn
Definition: ERF_AdvanceWDM6.cpp:272
@ wa2
Definition: ERF_AdvanceWDM6.cpp:272
@ qr2
Definition: ERF_AdvanceWDM6.cpp:272
@ work_col
Definition: ERF_AdvanceWDM6.cpp:273
@ denfac
Definition: ERF_AdvanceWDM6.cpp:273
@ rq2_col
Definition: ERF_AdvanceWDM6.cpp:273
@ wa
Definition: ERF_AdvanceWDM6.cpp:272
@ qq
Definition: ERF_AdvanceWDM6.cpp:272
@ qq2
Definition: ERF_AdvanceWDM6.cpp:272
@ wd
Definition: ERF_AdvanceWDM6.cpp:272
@ rq_col
Definition: ERF_AdvanceWDM6.cpp:273
@ dz
Definition: ERF_AdvanceWDM6.cpp:273
@ zi
Definition: ERF_AdvanceWDM6.cpp:277
@ qa2
Definition: ERF_AdvanceWDM6.cpp:277
@ qpi
Definition: ERF_AdvanceWDM6.cpp:277
@ qa
Definition: ERF_AdvanceWDM6.cpp:277
@ za
Definition: ERF_AdvanceWDM6.cpp:277
@ wi
Definition: ERF_AdvanceWDM6.cpp:277
@ qmi
Definition: ERF_AdvanceWDM6.cpp:277
@ dza
Definition: ERF_AdvanceWDM6.cpp:277
@ qsum
Definition: ERF_WSM6.H:344
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), 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