1 #ifndef ERF_MOSTStress_H
2 #define ERF_MOSTStress_H
46 amrex::Real
x = std::sqrt(std::sqrt(1.0 -
gamma_m * zeta));
47 return 2.0 * std::log(0.5 * (1.0 +
x)) + log(0.5 * (1.0 +
x *
x)) -
60 amrex::Real
x = std::sqrt(1.0 -
gamma_h * zeta);
61 return 2.0 * std::log(0.5 * (1.0 +
x));
82 amrex::Real TC = T_degK - 273.15;
83 return 1.326e-5*(1. + 6.542e-3*TC + 8.301e-6*TC*TC - 4.84e-9*TC*TC*TC);
108 const amrex::Array4<const amrex::Real>& z0_arr,
109 const amrex::Array4<const amrex::Real>& umm_arr,
110 const amrex::Array4<const amrex::Real>& ,
111 const amrex::Array4<const amrex::Real>& ,
112 const amrex::Array4<const amrex::Real>& ,
113 const amrex::Array4<amrex::Real>& u_star_arr,
114 const amrex::Array4<amrex::Real>& ,
115 const amrex::Array4<amrex::Real>& t_star_arr,
116 const amrex::Array4<amrex::Real>& q_star_arr,
117 const amrex::Array4<amrex::Real>& ,
118 const amrex::Array4<amrex::Real>& ,
119 const amrex::Array4<amrex::Real>& olen_arr,
120 const amrex::Array4<amrex::Real>& ,
121 const amrex::Array4<amrex::Real>& ,
122 const amrex::Array4<amrex::Real>& ,
123 const amrex::Array4<amrex::Real>& )
const
126 t_star_arr(i,j,k) = 0.0;
127 q_star_arr(i,j,k) = 0.0;
128 olen_arr(i,j,k) = 1.0e16;
161 const int& max_iters,
162 const amrex::Array4<amrex::Real>& z0_arr,
163 const amrex::Array4<const amrex::Real>& umm_arr,
164 const amrex::Array4<const amrex::Real>& tm_arr,
165 const amrex::Array4<const amrex::Real>& ,
166 const amrex::Array4<const amrex::Real>& ,
167 const amrex::Array4<amrex::Real>& u_star_arr,
168 const amrex::Array4<amrex::Real>& ,
169 const amrex::Array4<amrex::Real>& t_star_arr,
170 const amrex::Array4<amrex::Real>& q_star_arr,
171 const amrex::Array4<amrex::Real>& ,
172 const amrex::Array4<amrex::Real>& ,
173 const amrex::Array4<amrex::Real>& olen_arr,
174 const amrex::Array4<amrex::Real>& ,
175 const amrex::Array4<amrex::Real>& ,
176 const amrex::Array4<amrex::Real>& ,
177 const amrex::Array4<amrex::Real>& )
const
180 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
181 amrex::Real ustar = 0.0;
182 amrex::Real z0 = 0.0;
185 ustar = u_star_arr(i,j,k);
196 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
198 t_star_arr(i,j,k) = 0.0;
199 q_star_arr(i,j,k) = 0.0;
200 olen_arr(i,j,k) = 1.0e16;
207 const amrex::Real
tol = 1.0e-5;
235 const int& max_iters,
236 const amrex::Array4<amrex::Real>& z0_arr,
237 const amrex::Array4<const amrex::Real>& umm_arr,
238 const amrex::Array4<const amrex::Real>& ,
239 const amrex::Array4<const amrex::Real>& ,
240 const amrex::Array4<const amrex::Real>& ,
241 const amrex::Array4<amrex::Real>& u_star_arr,
242 const amrex::Array4<amrex::Real>& ,
243 const amrex::Array4<amrex::Real>& t_star_arr,
244 const amrex::Array4<amrex::Real>& q_star_arr,
245 const amrex::Array4<amrex::Real>& ,
246 const amrex::Array4<amrex::Real>& ,
247 const amrex::Array4<amrex::Real>& olen_arr,
248 const amrex::Array4<amrex::Real>& ,
249 const amrex::Array4<amrex::Real>& ,
250 const amrex::Array4<amrex::Real>& ,
251 const amrex::Array4<amrex::Real>& )
const
254 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
255 amrex::Real ustar = 0.0;
256 amrex::Real z0 = 0.0;
259 ustar = u_star_arr(i,j,k);
263 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
265 t_star_arr(i,j,k) = 0.0;
266 q_star_arr(i,j,k) = 0.0;
267 olen_arr(i,j,k) = 1.0e16;
274 const amrex::Real
tol = 1.0e-5;
299 const int& max_iters,
300 const amrex::Array4<amrex::Real>& z0_arr,
301 const amrex::Array4<const amrex::Real>& umm_arr,
302 const amrex::Array4<const amrex::Real>& ,
303 const amrex::Array4<const amrex::Real>& ,
304 const amrex::Array4<const amrex::Real>& ,
305 const amrex::Array4<amrex::Real>& u_star_arr,
306 const amrex::Array4<amrex::Real>& ,
307 const amrex::Array4<amrex::Real>& t_star_arr,
308 const amrex::Array4<amrex::Real>& q_star_arr,
309 const amrex::Array4<amrex::Real>& ,
310 const amrex::Array4<amrex::Real>& ,
311 const amrex::Array4<amrex::Real>& olen_arr,
312 const amrex::Array4<amrex::Real>& ,
313 const amrex::Array4<amrex::Real>& ,
314 const amrex::Array4<amrex::Real>& ,
315 const amrex::Array4<amrex::Real>& )
const
318 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
319 amrex::Real ustar = 0.0;
320 amrex::Real z0 = 0.0;
322 if (u_star_arr(i,j,k) == 1.E34) {
326 ustar = u_star_arr(i,j,k);
330 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
332 t_star_arr(i,j,k) = 0.0;
333 q_star_arr(i,j,k) = 0.0;
334 olen_arr(i,j,k) = 1.0e16;
341 const amrex::Real
tol = 1.0e-5;
366 const int& max_iters,
367 const amrex::Array4<amrex::Real>& z0_arr,
368 const amrex::Array4<const amrex::Real>& umm_arr,
369 const amrex::Array4<const amrex::Real>& ,
370 const amrex::Array4<const amrex::Real>& ,
371 const amrex::Array4<const amrex::Real>& ,
372 const amrex::Array4<amrex::Real>& u_star_arr,
373 const amrex::Array4<amrex::Real>& ,
374 const amrex::Array4<amrex::Real>& t_star_arr,
375 const amrex::Array4<amrex::Real>& q_star_arr,
376 const amrex::Array4<amrex::Real>& ,
377 const amrex::Array4<amrex::Real>& ,
378 const amrex::Array4<amrex::Real>& olen_arr,
379 const amrex::Array4<amrex::Real>& ,
380 const amrex::Array4<amrex::Real>& Hwave_arr,
381 const amrex::Array4<amrex::Real>& Lwave_arr,
382 const amrex::Array4<amrex::Real>& eta_arr)
const
385 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
386 amrex::Real ustar = 0.0;
387 amrex::Real z0 = 0.0;
389 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
390 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
391 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
392 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
395 ustar = u_star_arr(i,j,k);
396 z0 = std::min( std::max(1200.0 * Hwave_arr(i,j,k) * std::pow( Hwave_arr(i,j,k)/(Lwave_arr(i,j,k)+
eps), 4.5 )
400 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
402 t_star_arr(i,j,k) = 0.0;
403 q_star_arr(i,j,k) = 0.0;
404 olen_arr(i,j,k) = 1.0e16;
411 const amrex::Real
tol = 1.0e-5;
412 const amrex::Real
eps = 1e-15;
441 const int& max_iters,
442 const amrex::Array4<const amrex::Real>& z0_arr,
443 const amrex::Array4<const amrex::Real>& umm_arr,
444 const amrex::Array4<const amrex::Real>& tm_arr,
445 const amrex::Array4<const amrex::Real>& tvm_arr,
446 const amrex::Array4<const amrex::Real>& qvm_arr,
447 const amrex::Array4<amrex::Real>& u_star_arr,
448 const amrex::Array4<amrex::Real>& w_star_arr,
449 const amrex::Array4<amrex::Real>& t_star_arr,
450 const amrex::Array4<amrex::Real>& q_star_arr,
451 const amrex::Array4<amrex::Real>& t_surf_arr,
452 const amrex::Array4<amrex::Real>& q_surf_arr,
453 const amrex::Array4<amrex::Real>& olen_arr,
454 const amrex::Array4<amrex::Real>& pblh_arr,
455 const amrex::Array4<amrex::Real>& ,
456 const amrex::Array4<amrex::Real>& ,
457 const amrex::Array4<amrex::Real>& )
const
460 amrex::Real ustar = 0.0;
461 amrex::Real wstar = 0.0;
462 amrex::Real tflux = 0.0;
463 amrex::Real qflux = 0.0;
464 amrex::Real zeta = 0.0;
465 amrex::Real psi_m = 0.0;
466 amrex::Real psi_h = 0.0;
467 amrex::Real Olen = 0.0;
468 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
469 if (u_star_arr(i,j,k) == 1.E34) {
472 Olen = olen_arr(i,j,k);
478 ustar = u_star_arr(i,j,k);
480 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
481 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
485 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
487 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
488 umm = std::max(umm,
WSMIN);
496 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
497 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
500 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
502 olen_arr(i,j,k) = Olen;
505 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
508 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
509 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
517 const amrex::Real
tol = 1.0e-5;
548 const int& max_iters,
549 const amrex::Array4<amrex::Real>& z0_arr,
550 const amrex::Array4<const amrex::Real>& umm_arr,
551 const amrex::Array4<const amrex::Real>& tm_arr,
552 const amrex::Array4<const amrex::Real>& tvm_arr,
553 const amrex::Array4<const amrex::Real>& qvm_arr,
554 const amrex::Array4<amrex::Real>& u_star_arr,
555 const amrex::Array4<amrex::Real>& w_star_arr,
556 const amrex::Array4<amrex::Real>& t_star_arr,
557 const amrex::Array4<amrex::Real>& q_star_arr,
558 const amrex::Array4<amrex::Real>& t_surf_arr,
559 const amrex::Array4<amrex::Real>& q_surf_arr,
560 const amrex::Array4<amrex::Real>& olen_arr,
561 const amrex::Array4<amrex::Real>& pblh_arr,
562 const amrex::Array4<amrex::Real>& ,
563 const amrex::Array4<amrex::Real>& ,
564 const amrex::Array4<amrex::Real>& )
const
567 amrex::Real ustar = 0.0;
568 amrex::Real wstar = 0.0;
569 amrex::Real tflux = 0.0;
570 amrex::Real qflux = 0.0;
571 amrex::Real z0 = 0.0;
572 amrex::Real zeta = 0.0;
573 amrex::Real psi_m = 0.0;
574 amrex::Real psi_h = 0.0;
575 amrex::Real Olen = 0.0;
576 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
577 if (u_star_arr(i,j,k) == 1.E34) {
580 Olen = olen_arr(i,j,k);
586 ustar = u_star_arr(i,j,k);
596 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
597 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
601 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
603 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
604 umm = std::max(umm,
WSMIN);
612 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
613 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
616 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
618 olen_arr(i,j,k) = Olen;
622 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
625 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
626 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
634 const amrex::Real
tol = 1.0e-5;
664 const int& max_iters,
665 const amrex::Array4<amrex::Real>& z0_arr,
666 const amrex::Array4<const amrex::Real>& umm_arr,
667 const amrex::Array4<const amrex::Real>& tm_arr,
668 const amrex::Array4<const amrex::Real>& tvm_arr,
669 const amrex::Array4<const amrex::Real>& qvm_arr,
670 const amrex::Array4<amrex::Real>& u_star_arr,
671 const amrex::Array4<amrex::Real>& w_star_arr,
672 const amrex::Array4<amrex::Real>& t_star_arr,
673 const amrex::Array4<amrex::Real>& q_star_arr,
674 const amrex::Array4<amrex::Real>& t_surf_arr,
675 const amrex::Array4<amrex::Real>& q_surf_arr,
676 const amrex::Array4<amrex::Real>& olen_arr,
677 const amrex::Array4<amrex::Real>& pblh_arr,
678 const amrex::Array4<amrex::Real>& ,
679 const amrex::Array4<amrex::Real>& ,
680 const amrex::Array4<amrex::Real>& )
const
683 amrex::Real ustar = 0.0;
684 amrex::Real wstar = 0.0;
685 amrex::Real tflux = 0.0;
686 amrex::Real qflux = 0.0;
687 amrex::Real z0 = 0.0;
688 amrex::Real zeta = 0.0;
689 amrex::Real psi_m = 0.0;
690 amrex::Real psi_h = 0.0;
691 amrex::Real Olen = 0.0;
692 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
693 if (u_star_arr(i,j,k) == 1.E34) {
696 Olen = olen_arr(i,j,k);
702 ustar = u_star_arr(i,j,k);
705 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
706 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
710 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
712 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
713 umm = std::max(umm,
WSMIN);
721 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
722 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
725 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
727 olen_arr(i,j,k) = Olen;
731 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
734 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
735 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
743 const amrex::Real
tol = 1.0e-5;
770 const int& max_iters,
771 const amrex::Array4<amrex::Real>& z0_arr,
772 const amrex::Array4<const amrex::Real>& umm_arr,
773 const amrex::Array4<const amrex::Real>& tm_arr,
774 const amrex::Array4<const amrex::Real>& tvm_arr,
775 const amrex::Array4<const amrex::Real>& qvm_arr,
776 const amrex::Array4<amrex::Real>& u_star_arr,
777 const amrex::Array4<amrex::Real>& w_star_arr,
778 const amrex::Array4<amrex::Real>& t_star_arr,
779 const amrex::Array4<amrex::Real>& q_star_arr,
780 const amrex::Array4<amrex::Real>& t_surf_arr,
781 const amrex::Array4<amrex::Real>& q_surf_arr,
782 const amrex::Array4<amrex::Real>& olen_arr,
783 const amrex::Array4<amrex::Real>& pblh_arr,
784 const amrex::Array4<amrex::Real>& ,
785 const amrex::Array4<amrex::Real>& ,
786 const amrex::Array4<amrex::Real>& )
const
789 amrex::Real ustar = 0.0;
790 amrex::Real wstar = 0.0;
791 amrex::Real tflux = 0.0;
792 amrex::Real qflux = 0.0;
793 amrex::Real z0 = 0.0;
794 amrex::Real zeta = 0.0;
795 amrex::Real psi_m = 0.0;
796 amrex::Real psi_h = 0.0;
797 amrex::Real Olen = 0.0;
798 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
799 if (u_star_arr(i,j,k) == 1.E34) {
802 Olen = olen_arr(i,j,k);
808 ustar = u_star_arr(i,j,k);
811 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
812 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
816 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
818 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
819 umm = std::max(umm,
WSMIN);
827 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
828 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
831 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
833 olen_arr(i,j,k) = Olen;
837 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
840 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
841 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
849 const amrex::Real
tol = 1.0e-5;
876 const int& max_iters,
877 const amrex::Array4<amrex::Real>& z0_arr,
878 const amrex::Array4<const amrex::Real>& umm_arr,
879 const amrex::Array4<const amrex::Real>& tm_arr,
880 const amrex::Array4<const amrex::Real>& tvm_arr,
881 const amrex::Array4<const amrex::Real>& qvm_arr,
882 const amrex::Array4<amrex::Real>& u_star_arr,
883 const amrex::Array4<amrex::Real>& w_star_arr,
884 const amrex::Array4<amrex::Real>& t_star_arr,
885 const amrex::Array4<amrex::Real>& q_star_arr,
886 const amrex::Array4<amrex::Real>& t_surf_arr,
887 const amrex::Array4<amrex::Real>& q_surf_arr,
888 const amrex::Array4<amrex::Real>& olen_arr,
889 const amrex::Array4<amrex::Real>& pblh_arr,
890 const amrex::Array4<amrex::Real>& Hwave_arr,
891 const amrex::Array4<amrex::Real>& Lwave_arr,
892 const amrex::Array4<amrex::Real>& eta_arr)
const
895 amrex::Real ustar = 0.0;
896 amrex::Real wstar = 0.0;
897 amrex::Real tflux = 0.0;
898 amrex::Real qflux = 0.0;
899 amrex::Real z0 = 0.0;
900 amrex::Real zeta = 0.0;
901 amrex::Real psi_m = 0.0;
902 amrex::Real psi_h = 0.0;
903 amrex::Real Olen = 0.0;
905 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
906 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
907 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
908 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
909 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
910 if (u_star_arr(i,j,k) == 1.E34) {
913 Olen = olen_arr(i,j,k);
919 ustar = u_star_arr(i,j,k);
920 z0 = std::min( std::max(1200.0 * Hwave_arr(i,j,k) * std::pow( Hwave_arr(i,j,k)/(Lwave_arr(i,j,k)+
eps), 4.5 )
923 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
924 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
928 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
930 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
931 umm = std::max(umm,
WSMIN);
939 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
940 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
943 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
945 olen_arr(i,j,k) = Olen;
949 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
952 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
953 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
961 const amrex::Real
tol = 1.0e-5;
962 const amrex::Real
eps = 1e-15;
991 const int& max_iters,
992 const amrex::Array4<const amrex::Real>& z0_arr,
993 const amrex::Array4<const amrex::Real>& umm_arr,
994 const amrex::Array4<const amrex::Real>& tm_arr,
995 const amrex::Array4<const amrex::Real>& tvm_arr,
996 const amrex::Array4<const amrex::Real>& qvm_arr,
997 const amrex::Array4<amrex::Real>& u_star_arr,
998 const amrex::Array4<amrex::Real>& w_star_arr,
999 const amrex::Array4<amrex::Real>& t_star_arr,
1000 const amrex::Array4<amrex::Real>& q_star_arr,
1001 const amrex::Array4<amrex::Real>& t_surf_arr,
1002 const amrex::Array4<amrex::Real>& q_surf_arr,
1003 const amrex::Array4<amrex::Real>& olen_arr,
1004 const amrex::Array4<amrex::Real>& pblh_arr,
1005 const amrex::Array4<amrex::Real>& ,
1006 const amrex::Array4<amrex::Real>& ,
1007 const amrex::Array4<amrex::Real>& )
const
1010 amrex::Real ustar = 0.0;
1011 amrex::Real wstar = 0.0;
1012 amrex::Real tflux = 0.0;
1013 amrex::Real qflux = 0.0;
1014 amrex::Real zeta = 0.0;
1015 amrex::Real psi_m = 0.0;
1016 amrex::Real psi_h = 0.0;
1017 amrex::Real Olen = 0.0;
1018 amrex::Real Oleno = 0.0;
1019 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
1020 if (u_star_arr(i,j,k) == 1.E34) {
1023 Olen = olen_arr(i,j,k);
1030 ustar = u_star_arr(i,j,k);
1031 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1032 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1033 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1035 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1036 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1037 tflux += 0.61*tm_arr(i,j,k) * qflux;
1040 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1042 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1043 umm = std::max(umm,
WSMIN);
1046 if ( (((Olen >= 0.0) && (Oleno <= 0.0)) ||
1047 ((Olen <= 0.0) && (Oleno >= 0.0))) &&
1048 std::fabs(Olen) + std::fabs(Oleno) < 1.) {
1049 Olen = 0.5 * (Olen + Oleno);
1058 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1059 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
1061 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1062 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1063 olen_arr(i,j,k) = Olen;
1066 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1069 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1070 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1078 const amrex::Real
tol = 1.0e-5;
1109 const int& max_iters,
1110 const amrex::Array4<amrex::Real>& z0_arr,
1111 const amrex::Array4<const amrex::Real>& umm_arr,
1112 const amrex::Array4<const amrex::Real>& tm_arr,
1113 const amrex::Array4<const amrex::Real>& tvm_arr,
1114 const amrex::Array4<const amrex::Real>& qvm_arr,
1115 const amrex::Array4<amrex::Real>& u_star_arr,
1116 const amrex::Array4<amrex::Real>& w_star_arr,
1117 const amrex::Array4<amrex::Real>& t_star_arr,
1118 const amrex::Array4<amrex::Real>& q_star_arr,
1119 const amrex::Array4<amrex::Real>& t_surf_arr,
1120 const amrex::Array4<amrex::Real>& q_surf_arr,
1121 const amrex::Array4<amrex::Real>& olen_arr,
1122 const amrex::Array4<amrex::Real>& pblh_arr,
1123 const amrex::Array4<amrex::Real>& ,
1124 const amrex::Array4<amrex::Real>& ,
1125 const amrex::Array4<amrex::Real>& )
const
1128 amrex::Real ustar = 0.0;
1129 amrex::Real wstar = 0.0;
1130 amrex::Real z0 = 0.0;
1131 amrex::Real tflux = 0.0;
1132 amrex::Real qflux = 0.0;
1133 amrex::Real zeta = 0.0;
1134 amrex::Real psi_m = 0.0;
1135 amrex::Real psi_h = 0.0;
1136 amrex::Real Olen = 0.0;
1137 amrex::Real Oleno = 0.0;
1138 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
1139 if (u_star_arr(i,j,k) == 1.E34) {
1142 Olen = olen_arr(i,j,k);
1149 ustar = u_star_arr(i,j,k);
1158 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1160 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1162 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1163 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1164 tflux += 0.61*tm_arr(i,j,k) * qflux;
1167 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1169 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1170 umm = std::max(umm,
WSMIN);
1173 if ( (((Olen >= 0.0) && (Oleno <= 0.0)) ||
1174 ((Olen <= 0.0) && (Oleno >= 0.0))) &&
1175 std::fabs(Olen) + std::fabs(Oleno) < 1.) {
1176 Olen = 0.5 * (Olen + Oleno);
1184 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1185 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
1187 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1189 olen_arr(i,j,k) = Olen;
1193 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1196 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1197 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1205 const amrex::Real
tol = 1.0e-5;
1235 const int& max_iters,
1236 const amrex::Array4<amrex::Real>& z0_arr,
1237 const amrex::Array4<const amrex::Real>& umm_arr,
1238 const amrex::Array4<const amrex::Real>& tm_arr,
1239 const amrex::Array4<const amrex::Real>& tvm_arr,
1240 const amrex::Array4<const amrex::Real>& qvm_arr,
1241 const amrex::Array4<amrex::Real>& u_star_arr,
1242 const amrex::Array4<amrex::Real>& w_star_arr,
1243 const amrex::Array4<amrex::Real>& t_star_arr,
1244 const amrex::Array4<amrex::Real>& q_star_arr,
1245 const amrex::Array4<amrex::Real>& t_surf_arr,
1246 const amrex::Array4<amrex::Real>& q_surf_arr,
1247 const amrex::Array4<amrex::Real>& olen_arr,
1248 const amrex::Array4<amrex::Real>& pblh_arr,
1249 const amrex::Array4<amrex::Real>& ,
1250 const amrex::Array4<amrex::Real>& ,
1251 const amrex::Array4<amrex::Real>& )
const
1254 amrex::Real ustar = 0.0;
1255 amrex::Real wstar = 0.0;
1256 amrex::Real z0 = 0.0;
1257 amrex::Real tflux = 0.0;
1258 amrex::Real qflux = 0.0;
1259 amrex::Real zeta = 0.0;
1260 amrex::Real psi_m = 0.0;
1261 amrex::Real psi_h = 0.0;
1262 amrex::Real Olen = 0.0;
1263 amrex::Real Oleno = 0.0;
1264 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
1265 if (u_star_arr(i,j,k) == 1.E34) {
1268 Olen = olen_arr(i,j,k);
1275 ustar = u_star_arr(i,j,k);
1277 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1279 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1281 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1282 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1283 tflux += 0.61*tm_arr(i,j,k) * qflux;
1286 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1288 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1289 umm = std::max(umm,
WSMIN);
1292 if ( (((Olen >= 0.0) && (Oleno <= 0.0)) ||
1293 ((Olen <= 0.0) && (Oleno >= 0.0))) &&
1294 std::fabs(Olen) + std::fabs(Oleno) < 1.) {
1295 Olen = 0.5 * (Olen + Oleno);
1303 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1304 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
1306 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1308 olen_arr(i,j,k) = Olen;
1312 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1315 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1316 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1324 const amrex::Real
tol = 1.0e-5;
1351 const int& max_iters,
1352 const amrex::Array4<amrex::Real>& z0_arr,
1353 const amrex::Array4<const amrex::Real>& umm_arr,
1354 const amrex::Array4<const amrex::Real>& tm_arr,
1355 const amrex::Array4<const amrex::Real>& tvm_arr,
1356 const amrex::Array4<const amrex::Real>& qvm_arr,
1357 const amrex::Array4<amrex::Real>& u_star_arr,
1358 const amrex::Array4<amrex::Real>& w_star_arr,
1359 const amrex::Array4<amrex::Real>& t_star_arr,
1360 const amrex::Array4<amrex::Real>& q_star_arr,
1361 const amrex::Array4<amrex::Real>& t_surf_arr,
1362 const amrex::Array4<amrex::Real>& q_surf_arr,
1363 const amrex::Array4<amrex::Real>& olen_arr,
1364 const amrex::Array4<amrex::Real>& pblh_arr,
1365 const amrex::Array4<amrex::Real>& ,
1366 const amrex::Array4<amrex::Real>& ,
1367 const amrex::Array4<amrex::Real>& )
const
1370 amrex::Real ustar = 0.0;
1371 amrex::Real wstar = 0.0;
1372 amrex::Real z0 = 0.0;
1373 amrex::Real tflux = 0.0;
1374 amrex::Real qflux = 0.0;
1375 amrex::Real zeta = 0.0;
1376 amrex::Real psi_m = 0.0;
1377 amrex::Real psi_h = 0.0;
1378 amrex::Real Olen = 0.0;
1379 amrex::Real Oleno = 0.0;
1380 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
1381 if (u_star_arr(i,j,k) == 1.E34) {
1384 Olen = olen_arr(i,j,k);
1391 ustar = u_star_arr(i,j,k);
1393 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1395 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1397 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1398 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1399 tflux += 0.61*tm_arr(i,j,k) * qflux;
1402 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1404 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1405 umm = std::max(umm,
WSMIN);
1408 if ( (((Olen >= 0.0) && (Oleno <= 0.0)) ||
1409 ((Olen <= 0.0) && (Oleno >= 0.0))) &&
1410 std::fabs(Olen) + std::fabs(Oleno) < 1.) {
1411 Olen = 0.5 * (Olen + Oleno);
1419 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1420 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
1422 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1424 olen_arr(i,j,k) = Olen;
1428 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1431 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1432 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1440 const amrex::Real
tol = 1.0e-5;
1467 const int& max_iters,
1468 const amrex::Array4<amrex::Real>& z0_arr,
1469 const amrex::Array4<const amrex::Real>& umm_arr,
1470 const amrex::Array4<const amrex::Real>& tm_arr,
1471 const amrex::Array4<const amrex::Real>& tvm_arr,
1472 const amrex::Array4<const amrex::Real>& qvm_arr,
1473 const amrex::Array4<amrex::Real>& u_star_arr,
1474 const amrex::Array4<amrex::Real>& w_star_arr,
1475 const amrex::Array4<amrex::Real>& t_star_arr,
1476 const amrex::Array4<amrex::Real>& q_star_arr,
1477 const amrex::Array4<amrex::Real>& t_surf_arr,
1478 const amrex::Array4<amrex::Real>& q_surf_arr,
1479 const amrex::Array4<amrex::Real>& olen_arr,
1480 const amrex::Array4<amrex::Real>& pblh_arr,
1481 const amrex::Array4<amrex::Real>& Hwave_arr,
1482 const amrex::Array4<amrex::Real>& Lwave_arr,
1483 const amrex::Array4<amrex::Real>& eta_arr)
const
1486 amrex::Real ustar = 0.0;
1487 amrex::Real wstar = 0.0;
1488 amrex::Real z0 = 0.0;
1489 amrex::Real tflux = 0.0;
1490 amrex::Real qflux = 0.0;
1491 amrex::Real zeta = 0.0;
1492 amrex::Real psi_m = 0.0;
1493 amrex::Real psi_h = 0.0;
1494 amrex::Real Olen = 0.0;
1495 amrex::Real Oleno = 0.0;
1497 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1498 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1499 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1500 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1501 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
1502 if (u_star_arr(i,j,k) == 1.E34) {
1505 Olen = olen_arr(i,j,k);
1512 ustar = u_star_arr(i,j,k);
1513 z0 = std::min( std::max(1200.0 * Hwave_arr(i,j,k) * std::pow( Hwave_arr(i,j,k)/(Lwave_arr(i,j,k)+
eps), 4.5 )
1515 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1517 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1519 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1520 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1521 tflux += 0.61*tm_arr(i,j,k) * qflux;
1524 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1526 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1527 umm = std::max(umm,
WSMIN);
1530 if ( (((Olen >= 0.0) && (Oleno <= 0.0)) ||
1531 ((Olen <= 0.0) && (Oleno >= 0.0))) &&
1532 std::fabs(Olen) + std::fabs(Oleno) < 1.) {
1533 Olen = 0.5 * (Olen + Oleno);
1541 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1542 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
1544 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1546 olen_arr(i,j,k) = Olen;
1550 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1553 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1554 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1562 const amrex::Real
tol = 1.0e-5;
1563 const amrex::Real
eps = 1e-15;
1583 const amrex::Array4<const amrex::Real>& cons_arr,
1584 const amrex::Array4<const amrex::Real>& velx_arr,
1585 const amrex::Array4<const amrex::Real>& vely_arr,
1586 const amrex::Array4<const amrex::Real>& umm_arr,
1587 const amrex::Array4<const amrex::Real>& qvm_arr,
1588 const amrex::Array4<const amrex::Real>& u_star_arr,
1589 const amrex::Array4<const amrex::Real>& q_star_arr,
1590 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
1594 amrex::Real velx = 0.5 * ( velx_arr(i,j,k) + velx_arr(i+1,j ,k) );
1595 amrex::Real vely = 0.5 * ( vely_arr(i,j,k) + vely_arr(i ,j+1,k) );
1597 amrex::Real qv_mean = qvm_arr(i,j,k);
1598 amrex::Real ustar = u_star_arr(i,j,k);
1599 amrex::Real qstar = q_star_arr(i,j,k);
1600 amrex::Real qv_surf = q_surf_arr(i,j,k);
1601 amrex::Real wsp_mean = umm_arr(i,j,k);
1602 wsp_mean = std::max(wsp_mean,
WSMIN);
1604 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1605 amrex::Real num1 = wsp * (qv_mean-qv_surf);
1606 amrex::Real num2 = wsp_mean * (
qv-qv_mean);
1609 amrex::Real moflux = (std::abs(qstar) >
eps) ?
1610 -
rho*qstar*ustar*(num1+num2)/((qv_mean-qv_surf)*wsp_mean) : 0.0;
1621 const amrex::Array4<const amrex::Real>& cons_arr,
1622 const amrex::Array4<const amrex::Real>& velx_arr,
1623 const amrex::Array4<const amrex::Real>& vely_arr,
1624 const amrex::Array4<const amrex::Real>& umm_arr,
1625 const amrex::Array4<const amrex::Real>& tm_arr,
1626 const amrex::Array4<const amrex::Real>& u_star_arr,
1627 const amrex::Array4<const amrex::Real>& t_star_arr,
1628 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
1632 amrex::Real velx = 0.5 * ( velx_arr(i,j,k) + velx_arr(i+1,j ,k) );
1633 amrex::Real vely = 0.5 * ( vely_arr(i,j,k) + vely_arr(i ,j+1,k) );
1635 amrex::Real theta_mean = tm_arr(i,j,k);
1636 amrex::Real ustar = u_star_arr(i,j,k);
1637 amrex::Real tstar = t_star_arr(i,j,k);
1638 amrex::Real theta_surf = t_surf_arr(i,j,k);
1639 amrex::Real wsp_mean = umm_arr(i,j,k);
1640 wsp_mean = std::max(wsp_mean,
WSMIN);
1642 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1643 amrex::Real num1 = wsp * (theta_mean-theta_surf);
1644 amrex::Real num2 = wsp_mean * (
theta-theta_mean);
1647 amrex::Real moflux = (std::abs(tstar) >
eps) ?
1648 -
rho*tstar*ustar*(num1+num2)/((theta_mean-theta_surf)*wsp_mean) : 0.0;
1659 const amrex::Array4<const amrex::Real>& cons_arr,
1660 const amrex::Array4<const amrex::Real>& velx_arr,
1661 const amrex::Array4<const amrex::Real>& vely_arr,
1662 const amrex::Array4<const amrex::Real>& umm_arr,
1663 const amrex::Array4<const amrex::Real>& um_arr,
1664 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1666 amrex::Real velx = velx_arr(i,j,k);
1667 amrex::Real vely = 0.25 * ( vely_arr(i ,j,k) + vely_arr(i ,j+1,k)
1668 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
1671 amrex::Real umean = um_arr(i,j,k);
1672 amrex::Real ustar = 0.5 * ( u_star_arr(i-1,j,k) + u_star_arr(i,j,k) );
1673 amrex::Real wsp_mean = 0.5 * ( umm_arr(i-1,j,k) + umm_arr(i,j,k) );
1674 wsp_mean = std::max(wsp_mean,
WSMIN);
1680 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1681 amrex::Real num1 = wsp * umean;
1682 amrex::Real num2 = wsp_mean * (velx-umean);
1685 amrex::Real stressx = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1696 const amrex::Array4<const amrex::Real>& cons_arr,
1697 const amrex::Array4<const amrex::Real>& velx_arr,
1698 const amrex::Array4<const amrex::Real>& vely_arr,
1699 const amrex::Array4<const amrex::Real>& umm_arr,
1700 const amrex::Array4<const amrex::Real>& vm_arr,
1701 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1703 amrex::Real velx = 0.25 * ( velx_arr(i,j ,k) + velx_arr(i+1,j ,k)
1704 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
1705 amrex::Real vely = vely_arr(i,j,k);
1708 amrex::Real vmean = vm_arr(i,j,k);
1709 amrex::Real ustar = 0.5 * ( u_star_arr(i,j-1,k) + u_star_arr(i,j,k) );
1710 amrex::Real wsp_mean = 0.5 * ( umm_arr(i,j-1,k) + umm_arr(i,j,k) );
1711 wsp_mean = std::max(wsp_mean,
WSMIN);
1717 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1718 amrex::Real num1 = wsp * vmean;
1719 amrex::Real num2 = wsp_mean * (vely-vmean);
1722 amrex::Real stressy = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1728 const amrex::Real
eps = 1e-15;
1746 const amrex::Array4<const amrex::Real>& ,
1747 const amrex::Array4<const amrex::Real>& ,
1748 const amrex::Array4<const amrex::Real>& ,
1749 const amrex::Array4<const amrex::Real>& ,
1750 const amrex::Array4<const amrex::Real>& ,
1751 const amrex::Array4<const amrex::Real>& ,
1752 const amrex::Array4<const amrex::Real>& ,
1753 const amrex::Array4<const amrex::Real>& )
const
1756 amrex::Real moflux = 0.0;
1767 const amrex::Array4<const amrex::Real>& cons_arr,
1768 const amrex::Array4<const amrex::Real>& ,
1769 const amrex::Array4<const amrex::Real>& ,
1770 const amrex::Array4<const amrex::Real>& umm_arr,
1771 const amrex::Array4<const amrex::Real>& tm_arr,
1772 const amrex::Array4<const amrex::Real>& ,
1773 const amrex::Array4<const amrex::Real>& ,
1774 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
1776 amrex::Real Ch = 0.0012;
1778 amrex::Real theta_surf = t_surf_arr(i,j,k);
1779 amrex::Real theta_mean = tm_arr(i,j,k);
1780 amrex::Real wsp_mean = umm_arr(i,j,k);
1783 amrex::Real moflux = -
rho * Ch * wsp_mean * (theta_mean - theta_surf);
1794 const amrex::Array4<const amrex::Real>& cons_arr,
1795 const amrex::Array4<const amrex::Real>& velx_arr,
1796 const amrex::Array4<const amrex::Real>& vely_arr,
1797 const amrex::Array4<const amrex::Real>& umm_arr,
1798 const amrex::Array4<const amrex::Real>& ,
1799 const amrex::Array4<const amrex::Real>& )
const
1801 amrex::Real velx = velx_arr(i,j,k);
1802 amrex::Real vely = 0.25 * ( vely_arr(i ,j,k) + vely_arr(i ,j+1,k)
1803 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
1806 amrex::Real Cd = 0.001;
1807 const amrex::Real c = 7e-5;
1808 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1809 amrex::Real wsp_mean = 0.5 * ( umm_arr(i-1,j,k) + umm_arr(i,j,k) );
1810 if (wsp_mean <= 5.0) {
1812 }
else if (wsp_mean < 25.0 && wsp_mean > 5.0) {
1813 Cd = 0.001 + c * (wsp_mean - 5.0);
1819 amrex::Real stressx = -
rho * Cd * velx * wsp;
1830 const amrex::Array4<const amrex::Real>& cons_arr,
1831 const amrex::Array4<const amrex::Real>& velx_arr,
1832 const amrex::Array4<const amrex::Real>& vely_arr,
1833 const amrex::Array4<const amrex::Real>& umm_arr,
1834 const amrex::Array4<const amrex::Real>& ,
1835 const amrex::Array4<const amrex::Real>& )
const
1837 amrex::Real velx = 0.25 * ( velx_arr(i,j ,k) + velx_arr(i+1,j ,k)
1838 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
1839 amrex::Real vely = vely_arr(i,j,k);
1842 amrex::Real Cd = 0.001;
1843 const amrex::Real c = 7e-5;
1844 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1845 amrex::Real wsp_mean = 0.5 * ( umm_arr(i,j-1,k) + umm_arr(i,j,k) );
1846 if (wsp_mean <= 5.0) {
1848 }
else if (wsp_mean < 25.0 && wsp_mean > 5.0) {
1849 Cd = 0.001 + c * (wsp_mean - 5.0);
1855 amrex::Real stressy = -
rho * Cd * vely * wsp;
1880 const amrex::Array4<const amrex::Real>& cons_arr,
1881 const amrex::Array4<const amrex::Real>& ,
1882 const amrex::Array4<const amrex::Real>& ,
1883 const amrex::Array4<const amrex::Real>& ,
1884 const amrex::Array4<const amrex::Real>& ,
1885 const amrex::Array4<const amrex::Real>& ,
1886 const amrex::Array4<const amrex::Real>& q_star_arr,
1887 const amrex::Array4<const amrex::Real>& )
const
1890 amrex::Real qstar = q_star_arr(i,j,k);
1893 amrex::Real moflux = (std::abs(qstar) >
eps) ?
rho * qstar : 0.0;
1904 const amrex::Array4<const amrex::Real>& cons_arr,
1905 const amrex::Array4<const amrex::Real>& ,
1906 const amrex::Array4<const amrex::Real>& ,
1907 const amrex::Array4<const amrex::Real>& ,
1908 const amrex::Array4<const amrex::Real>& ,
1909 const amrex::Array4<const amrex::Real>& ,
1910 const amrex::Array4<const amrex::Real>& t_star_arr,
1911 const amrex::Array4<const amrex::Real>& )
const
1914 amrex::Real tstar = t_star_arr(i,j,k);
1917 amrex::Real moflux = (std::abs(tstar) >
eps) ?
rho * tstar : 0.0;
1928 const amrex::Array4<const amrex::Real>& cons_arr,
1929 const amrex::Array4<const amrex::Real>& velx_arr,
1930 const amrex::Array4<const amrex::Real>& vely_arr,
1931 const amrex::Array4<const amrex::Real>& ,
1932 const amrex::Array4<const amrex::Real>& ,
1933 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1935 amrex::Real velx = velx_arr(i,j,k);
1936 amrex::Real vely = 0.25 * ( vely_arr(i ,j,k) + vely_arr(i ,j+1,k)
1937 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
1940 amrex::Real ustar = 0.5 * ( u_star_arr(i-1,j,k) + u_star_arr(i,j,k) );
1941 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1944 amrex::Real stressx = -
rho * ustar * ustar * velx / wsp;
1955 const amrex::Array4<const amrex::Real>& cons_arr,
1956 const amrex::Array4<const amrex::Real>& velx_arr,
1957 const amrex::Array4<const amrex::Real>& vely_arr,
1958 const amrex::Array4<const amrex::Real>& ,
1959 const amrex::Array4<const amrex::Real>& ,
1960 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1962 amrex::Real velx = 0.25 * ( velx_arr(i,j ,k) + velx_arr(i+1,j ,k)
1963 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
1964 amrex::Real vely = vely_arr(i,j,k);
1967 amrex::Real ustar = 0.5 * ( u_star_arr(i,j-1,k) + u_star_arr(i,j,k) );
1968 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1971 amrex::Real stressy = -
rho * ustar * ustar * vely / wsp;
1977 const amrex::Real
eps = 1e-15;
1995 const amrex::Array4<const amrex::Real>& cons_arr,
1996 const amrex::Array4<const amrex::Real>& ,
1997 const amrex::Array4<const amrex::Real>& ,
1998 const amrex::Array4<const amrex::Real>& ,
1999 const amrex::Array4<const amrex::Real>& qvm_arr,
2000 const amrex::Array4<const amrex::Real>& ,
2001 const amrex::Array4<const amrex::Real>& q_star_arr,
2002 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2005 amrex::Real qv_mean = qvm_arr(i,j,k);
2006 amrex::Real qv_surf = q_surf_arr(i,j,k);
2008 amrex::Real qstar = q_star_arr(i,j,k);
2009 amrex::Real moflux = (std::abs(qstar) >
eps) ? -
rho * qstar * (qv_mean-qv_surf): 0.0;
2020 const amrex::Array4<const amrex::Real>& cons_arr,
2021 const amrex::Array4<const amrex::Real>& ,
2022 const amrex::Array4<const amrex::Real>& ,
2023 const amrex::Array4<const amrex::Real>& ,
2024 const amrex::Array4<const amrex::Real>& tm_arr,
2025 const amrex::Array4<const amrex::Real>& ,
2026 const amrex::Array4<const amrex::Real>& t_star_arr,
2027 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2030 amrex::Real theta_mean = tm_arr(i,j,k);
2031 amrex::Real theta_surf = t_surf_arr(i,j,k);
2033 amrex::Real tstar = t_star_arr(i,j,k);
2034 amrex::Real moflux = (std::abs(tstar) >
eps) ? -
rho * tstar * (theta_mean-theta_surf) : 0.0;
2045 const amrex::Array4<const amrex::Real>& cons_arr,
2046 const amrex::Array4<const amrex::Real>& ,
2047 const amrex::Array4<const amrex::Real>& ,
2048 const amrex::Array4<const amrex::Real>& ,
2049 const amrex::Array4<const amrex::Real>& ,
2050 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2054 amrex::Real ustar = 0.5 * ( u_star_arr(i-1,j,k) + u_star_arr(i,j,k) );
2055 amrex::Real stressx = -
rho * ustar * ustar;
2066 const amrex::Array4<const amrex::Real>& ,
2067 const amrex::Array4<const amrex::Real>& ,
2068 const amrex::Array4<const amrex::Real>& ,
2069 const amrex::Array4<const amrex::Real>& ,
2070 const amrex::Array4<const amrex::Real>& ,
2071 const amrex::Array4<const amrex::Real>& )
const
2074 amrex::Real stressy = 0.0;
2080 const amrex::Real
eps = 1e-15;
constexpr amrex::Real KAPPA
Definition: ERF_Constants.H:20
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:21
constexpr amrex::Real PIoTwo
Definition: ERF_Constants.H:7
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Donelan_roughness(amrex::Real ustar)
Definition: ERF_MOSTRoughness.H:29
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real COARE3_roughness(amrex::Real zref, amrex::Real umm, amrex::Real ustar)
Definition: ERF_MOSTRoughness.H:9
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real air_viscosity(amrex::Real T_degK)
Definition: ERF_MOSTStress.H:80
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real calc_wstar(const amrex::Real &ust, const amrex::Real &tst, const amrex::Real &qst, const amrex::Real &pblh, const amrex::Real &th, const amrex::Real &thv, const amrex::Real &qv=0.0)
Definition: ERF_Wstar.H:13
@ Mom_v
Definition: ERF_IndexDefines.H:175
@ theta
Definition: ERF_MM5.H:20
@ rho
Definition: ERF_Kessler.H:22
@ qv
Definition: ERF_Kessler.H:28
Definition: ERF_MOSTStress.H:141
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:208
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:158
most_data mdata
Definition: ERF_MOSTStress.H:205
adiabatic_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc)
Definition: ERF_MOSTStress.H:142
const amrex::Real tol
Definition: ERF_MOSTStress.H:207
similarity_funs sfuns
Definition: ERF_MOSTStress.H:206
Definition: ERF_MOSTStress.H:283
adiabatic_donelan(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:284
similarity_funs sfuns
Definition: ERF_MOSTStress.H:340
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:342
most_data mdata
Definition: ERF_MOSTStress.H:339
const amrex::Real tol
Definition: ERF_MOSTStress.H:341
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:296
Definition: ERF_MOSTStress.H:216
adiabatic_mod_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth)
Definition: ERF_MOSTStress.H:217
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:232
similarity_funs sfuns
Definition: ERF_MOSTStress.H:273
const amrex::Real tol
Definition: ERF_MOSTStress.H:274
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:275
most_data mdata
Definition: ERF_MOSTStress.H:272
Definition: ERF_MOSTStress.H:350
const amrex::Real eps
Definition: ERF_MOSTStress.H:412
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:413
most_data mdata
Definition: ERF_MOSTStress.H:409
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &Hwave_arr, const amrex::Array4< amrex::Real > &Lwave_arr, const amrex::Array4< amrex::Real > &eta_arr) const
Definition: ERF_MOSTStress.H:363
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:415
similarity_funs sfuns
Definition: ERF_MOSTStress.H:410
const amrex::Real tol
Definition: ERF_MOSTStress.H:411
adiabatic_wave_coupled(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:351
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:414
Definition: ERF_MOSTStress.H:91
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &, const amrex::Array4< const amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:104
similarity_funs sfuns
Definition: ERF_MOSTStress.H:133
adiabatic(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:92
most_data mdata
Definition: ERF_MOSTStress.H:132
Definition: ERF_MOSTStress.H:1869
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_u_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &velx_arr, const amrex::Array4< const amrex::Real > &vely_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &u_star_arr) const
Definition: ERF_MOSTStress.H:1925
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_q_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &q_star_arr, const amrex::Array4< const amrex::Real > &) const
Definition: ERF_MOSTStress.H:1877
custom_flux(bool specified_rho_surf)
Definition: ERF_MOSTStress.H:1870
const bool fluxes_include_rho
Definition: ERF_MOSTStress.H:1978
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_t_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &t_star_arr, const amrex::Array4< const amrex::Real > &) const
Definition: ERF_MOSTStress.H:1901
const amrex::Real eps
Definition: ERF_MOSTStress.H:1977
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_v_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &velx_arr, const amrex::Array4< const amrex::Real > &vely_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &u_star_arr) const
Definition: ERF_MOSTStress.H:1952
Definition: ERF_MOSTStress.H:1737
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_u_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &velx_arr, const amrex::Array4< const amrex::Real > &vely_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &) const
Definition: ERF_MOSTStress.H:1791
donelan_flux()
Definition: ERF_MOSTStress.H:1738
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_v_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &velx_arr, const amrex::Array4< const amrex::Real > &vely_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &) const
Definition: ERF_MOSTStress.H:1827
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_t_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &t_surf_arr) const
Definition: ERF_MOSTStress.H:1764
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_q_flux(const int &, const int &, const int &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &) const
Definition: ERF_MOSTStress.H:1743
Definition: ERF_MOSTStress.H:1574
moeng_flux()
Definition: ERF_MOSTStress.H:1575
const amrex::Real eps
Definition: ERF_MOSTStress.H:1728
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_u_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &velx_arr, const amrex::Array4< const amrex::Real > &vely_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &um_arr, const amrex::Array4< const amrex::Real > &u_star_arr) const
Definition: ERF_MOSTStress.H:1656
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1729
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_t_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &velx_arr, const amrex::Array4< const amrex::Real > &vely_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &u_star_arr, const amrex::Array4< const amrex::Real > &t_star_arr, const amrex::Array4< const amrex::Real > &t_surf_arr) const
Definition: ERF_MOSTStress.H:1618
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_q_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &velx_arr, const amrex::Array4< const amrex::Real > &vely_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< const amrex::Real > &u_star_arr, const amrex::Array4< const amrex::Real > &q_star_arr, const amrex::Array4< const amrex::Real > &q_surf_arr) const
Definition: ERF_MOSTStress.H:1580
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_v_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &velx_arr, const amrex::Array4< const amrex::Real > &vely_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &vm_arr, const amrex::Array4< const amrex::Real > &u_star_arr) const
Definition: ERF_MOSTStress.H:1693
Definition: ERF_MOSTStress.H:13
amrex::Real surf_moist_flux
Moisture flux.
Definition: ERF_MOSTStress.H:20
amrex::Real zref
Reference height (m)
Definition: ERF_MOSTStress.H:15
amrex::Real Cnk_b2
Modified Charnock Eq (4) https://doi.org/10.1175/JAMC-D-17-0137.1.
Definition: ERF_MOSTStress.H:24
amrex::Real Cnk_b
Definition: ERF_MOSTStress.H:26
amrex::Real Cnk_d
Modified Charnock Eq (4) https://doi.org/10.1175/JAMC-D-17-0137.1.
Definition: ERF_MOSTStress.H:25
amrex::Real kappa
von Karman constant
Definition: ERF_MOSTStress.H:17
amrex::Real gravity
Acceleration due to gravity (m/s^2)
Definition: ERF_MOSTStress.H:18
amrex::Real Cnk_a
Standard Charnock constant https://doi.org/10.1175/JAMC-D-17-0137.1.
Definition: ERF_MOSTStress.H:22
const amrex::Real Bjr_beta
Definition: ERF_MOSTStress.H:29
amrex::Real Cnk_b1
Modified Charnock Eq (4) https://doi.org/10.1175/JAMC-D-17-0137.1.
Definition: ERF_MOSTStress.H:23
amrex::Real z0_const
Roughness height – default constant value(m)
Definition: ERF_MOSTStress.H:16
bool visc
Use viscous Charnock formulation.
Definition: ERF_MOSTStress.H:27
amrex::Real surf_temp_flux
Heat flux.
Definition: ERF_MOSTStress.H:19
Definition: ERF_MOSTStress.H:1986
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_v_flux(const int &, const int &, const int &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &) const
Definition: ERF_MOSTStress.H:2063
rotate_flux()
Definition: ERF_MOSTStress.H:1987
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_u_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &u_star_arr) const
Definition: ERF_MOSTStress.H:2042
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_t_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &t_star_arr, const amrex::Array4< const amrex::Real > &t_surf_arr) const
Definition: ERF_MOSTStress.H:2017
const amrex::Real eps
Definition: ERF_MOSTStress.H:2080
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_q_flux(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &q_star_arr, const amrex::Array4< const amrex::Real > &q_surf_arr) const
Definition: ERF_MOSTStress.H:1992
Definition: ERF_MOSTStress.H:37
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:41
amrex::Real beta_m
Constants from Dyer, BLM, 1974.
Definition: ERF_MOSTStress.H:66
amrex::Real beta_h
https://doi.org/10.1007/BF00240838
Definition: ERF_MOSTStress.H:67
amrex::Real gamma_h
Definition: ERF_MOSTStress.H:69
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:55
amrex::Real gamma_m
Definition: ERF_MOSTStress.H:68
Definition: ERF_MOSTStress.H:526
const amrex::Real tol
Definition: ERF_MOSTStress.H:634
similarity_funs sfuns
Definition: ERF_MOSTStress.H:633
most_data mdata
Definition: ERF_MOSTStress.H:631
bool spec_qflux
Definition: ERF_MOSTStress.H:632
surface_flux_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:527
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:635
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:545
Definition: ERF_MOSTStress.H:752
bool spec_qflux
Definition: ERF_MOSTStress.H:847
surface_flux_donelan(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:753
const amrex::Real tol
Definition: ERF_MOSTStress.H:849
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:850
most_data mdata
Definition: ERF_MOSTStress.H:846
similarity_funs sfuns
Definition: ERF_MOSTStress.H:848
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:767
Definition: ERF_MOSTStress.H:643
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:661
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:744
most_data mdata
Definition: ERF_MOSTStress.H:740
bool spec_qflux
Definition: ERF_MOSTStress.H:741
surface_flux_mod_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool cons_qflux)
Definition: ERF_MOSTStress.H:644
const amrex::Real tol
Definition: ERF_MOSTStress.H:743
similarity_funs sfuns
Definition: ERF_MOSTStress.H:742
Definition: ERF_MOSTStress.H:858
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:965
surface_flux_wave_coupled(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:859
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:964
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:963
most_data mdata
Definition: ERF_MOSTStress.H:958
similarity_funs sfuns
Definition: ERF_MOSTStress.H:960
const amrex::Real tol
Definition: ERF_MOSTStress.H:961
bool spec_qflux
Definition: ERF_MOSTStress.H:959
const amrex::Real eps
Definition: ERF_MOSTStress.H:962
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &Hwave_arr, const amrex::Array4< amrex::Real > &Lwave_arr, const amrex::Array4< amrex::Real > &eta_arr) const
Definition: ERF_MOSTStress.H:873
Definition: ERF_MOSTStress.H:423
similarity_funs sfuns
Definition: ERF_MOSTStress.H:516
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:518
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< const amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:438
most_data mdata
Definition: ERF_MOSTStress.H:514
const amrex::Real tol
Definition: ERF_MOSTStress.H:517
bool spec_qflux
Definition: ERF_MOSTStress.H:515
surface_flux(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:424
Definition: ERF_MOSTStress.H:1087
most_data mdata
Definition: ERF_MOSTStress.H:1202
surface_temp_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:1088
bool spec_qflux
Definition: ERF_MOSTStress.H:1203
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:1106
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1206
const amrex::Real tol
Definition: ERF_MOSTStress.H:1205
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1204
Definition: ERF_MOSTStress.H:1333
surface_temp_donelan(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1334
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1439
most_data mdata
Definition: ERF_MOSTStress.H:1437
const amrex::Real tol
Definition: ERF_MOSTStress.H:1440
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1441
bool spec_qflux
Definition: ERF_MOSTStress.H:1438
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:1348
Definition: ERF_MOSTStress.H:1214
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1323
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:1232
const amrex::Real tol
Definition: ERF_MOSTStress.H:1324
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1325
surface_temp_mod_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool cons_qflux)
Definition: ERF_MOSTStress.H:1215
most_data mdata
Definition: ERF_MOSTStress.H:1321
bool spec_qflux
Definition: ERF_MOSTStress.H:1322
Definition: ERF_MOSTStress.H:1449
const amrex::Real eps
Definition: ERF_MOSTStress.H:1563
const amrex::Real tol
Definition: ERF_MOSTStress.H:1562
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &Hwave_arr, const amrex::Array4< amrex::Real > &Lwave_arr, const amrex::Array4< amrex::Real > &eta_arr) const
Definition: ERF_MOSTStress.H:1464
most_data mdata
Definition: ERF_MOSTStress.H:1559
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:1564
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1561
bool spec_qflux
Definition: ERF_MOSTStress.H:1560
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:1565
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1566
surface_temp_wave_coupled(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1450
Definition: ERF_MOSTStress.H:973
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1077
surface_temp(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:974
const amrex::Real tol
Definition: ERF_MOSTStress.H:1078
bool spec_qflux
Definition: ERF_MOSTStress.H:1076
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< const amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:988
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1079
most_data mdata
Definition: ERF_MOSTStress.H:1075