387 for (
int k = 0; k < km; ++k) {
391 allold += QQ(k) + QQ2(k);
394 precip1[0] =
Real(0.0);
395 precip2[0] =
Real(0.0);
396 if (allold <=
Real(0.0)) {
401 for (
int k = 0; k < km; ++k) {
402 ZI(k + 1) = ZI(k) + DZ(k);
405 auto rebuild = [&]() {
408 WI(1) =
Real(0.5) * (WW(1) + WW(0));
409 for (
int k = 2; k < km - 1; ++k) {
410 WI(k) =
Real(9.0) /
Real(16.0) * (WW(k) + WW(k - 1))
411 -
Real(1.0) /
Real(16.0) * (WW(k + 1) + WW(k - 2));
413 WI(km - 1) =
Real(0.5) * (WW(km - 1) + WW(km - 2));
416 for (
int k = 1; k < km; ++k) {
417 if (WW(k) ==
Real(0.0)) WI(k) = WW(k - 1);
421 for (
int k = km - 1; k >= 0; --k) {
422 const Real decfl = (WI(k + 1) - WI(k)) * dt / DZ(k);
424 WI(k) = WI(k + 1) - con1 * DZ(k) / dt;
428 for (
int k = 0; k <= km; ++k) {
429 ZA(k) = ZI(k) - WI(k) * dt;
431 for (
int k = 0; k < km; ++k) {
432 DZA(k) = ZA(k + 1) - ZA(k);
433 QA(k) = QQ(k) * DZ(k) / DZA(k);
434 QA2(k) = QQ2(k) * DZ(k) / DZA(k);
435 QR(k) = QA(k) / DEN(k);
436 QR2(k) = QA2(k) / DEN(k);
438 DZA(km) = ZI(km) - ZA(km);
446 for (
int k = 0; k < km; ++k) {
447 Real rslope, rslopeb, rslope2, rslope3, vt, n0sfac_dummy;
451 bvts,
pvts, rslope, rslopeb, rslope2, rslope3, vt,
457 rslope, rslopeb, rslope2, rslope3, vt);
460 for (
int k = 0; k < km; ++k) {
463 ? (WA(k) *
QR(k) + WA2(k) * QR2(k)) / tmpq
465 WW(k) =
Real(0.5) * (WD(k) + WA(k));
471 for (
int ist = 0; ist < 2; ++ist) {
472 const int qn_comp = (ist == 0)
475 const int qa_comp = (ist == 0)
479 return sed_cell(i_s, j_s, klo_s + k, qn_comp);
482 return sed_node(i_s, j_s, klo_s + k, qa_comp);
484 Real* precip_dst = (ist == 0) ? precip1 : precip2;
488 QMI(km) = qa_src(km);
489 QPI(km) = qa_src(km);
490 for (
int k = 1; k < km; ++k) {
491 const Real dip = (qa_src(k + 1) - qa_src(k)) / (DZA(k + 1) + DZA(k));
492 const Real dim = (qa_src(k) - qa_src(k - 1)) / (DZA(k - 1) + DZA(k));
493 if (dip * dim <=
Real(0.0)) {
497 QPI(k) = qa_src(k) +
Real(0.5) * (dip + dim) * DZA(k);
498 QMI(k) =
Real(2.0) * qa_src(k) - QPI(k);
499 if (QPI(k) <
Real(0.0) || QMI(k) <
Real(0.0)) {
506 for (
int k = 0; k < km; ++k) {
507 qn_dst(k) =
Real(0.0);
511 for (
int k = 0; k < km; ++k) {
518 kb = amrex::max(kb - 1, 0);
519 kt = amrex::max(kt - 1, 0);
521 if (ZI(k) >= ZA(km))
break;
523 for (
int kk = kb; kk < km; ++kk) {
524 if (ZI(k) <= ZA(kk + 1)) {
529 for (
int kk = kt; kk < km; ++kk) {
530 if (ZI(k + 1) <= ZA(kk)) {
545 const Real tl = (ZI(k) - ZA(kb)) / DZA(kb);
546 const Real th = (ZI(k + 1) - ZA(kb)) / DZA(kb);
547 const Real qqd =
Real(0.5) * (QPI(kb) - QMI(kb));
548 qn_dst(k) = (qqd * th * th + QMI(kb) * th
549 - qqd * tl * tl - QMI(kb) * tl) / (th - tl);
550 }
else if (kt > kb) {
551 const Real tl = (ZI(k) - ZA(kb)) / DZA(kb);
552 const Real qqd =
Real(0.5) * (QPI(kb) - QMI(kb));
553 const Real qql = qqd * tl * tl + QMI(kb) * tl;
554 const Real dql = qa_src(kb) - qql;
555 Real zsum = (
Real(1.0) - tl) * DZA(kb);
557 for (
int m = kb + 1; m < kt; ++m) {
559 qsum += qa_src(m) * DZA(m);
561 const Real th = (ZI(k + 1) - ZA(kt)) / DZA(kt);
562 const Real dqh =
Real(0.5) * (QPI(kt) - QMI(kt)) * th * th + QMI(kt) * th;
563 zsum += th * DZA(kt);
564 qsum += dqh * DZA(kt);
565 qn_dst(k) =
qsum / zsum;
569 precip_dst[0] =
Real(0.0);
570 for (
int k = 0; k < km; ++k) {
571 if (ZA(k) <
Real(0.0) && ZA(k + 1) <
Real(0.0)) {
572 precip_dst[0] += qa_src(k) * DZA(k);
573 }
else if (ZA(k) <
Real(0.0) && ZA(k + 1) >=
Real(0.0)) {
574 precip_dst[0] += qa_src(k) * (
Real(0.0) - ZA(k));
582 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:215
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:245
@ n0s
Definition: ERF_AdvanceMorrison.cpp:43
@ QR
Definition: ERF_IndexDefines.H:142
@ qn2
Definition: ERF_AdvanceWDM6.cpp:269
@ was
Definition: ERF_AdvanceWDM6.cpp:269
@ tk
Definition: ERF_AdvanceWDM6.cpp:270
@ qn
Definition: ERF_AdvanceWDM6.cpp:269
@ wa2
Definition: ERF_AdvanceWDM6.cpp:269
@ qr2
Definition: ERF_AdvanceWDM6.cpp:269
@ work_col
Definition: ERF_AdvanceWDM6.cpp:270
@ denfac
Definition: ERF_AdvanceWDM6.cpp:270
@ rq2_col
Definition: ERF_AdvanceWDM6.cpp:270
@ wa
Definition: ERF_AdvanceWDM6.cpp:269
@ qq
Definition: ERF_AdvanceWDM6.cpp:269
@ qq2
Definition: ERF_AdvanceWDM6.cpp:269
@ wd
Definition: ERF_AdvanceWDM6.cpp:269
@ rq_col
Definition: ERF_AdvanceWDM6.cpp:270
@ dz
Definition: ERF_AdvanceWDM6.cpp:270
@ zi
Definition: ERF_AdvanceWDM6.cpp:274
@ qa2
Definition: ERF_AdvanceWDM6.cpp:274
@ qpi
Definition: ERF_AdvanceWDM6.cpp:274
@ qa
Definition: ERF_AdvanceWDM6.cpp:274
@ za
Definition: ERF_AdvanceWDM6.cpp:274
@ wi
Definition: ERF_AdvanceWDM6.cpp:274
@ qmi
Definition: ERF_AdvanceWDM6.cpp:274
@ dza
Definition: ERF_AdvanceWDM6.cpp:274
@ qsum
Definition: ERF_WSM6.H:234
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