1 #ifndef ERF_MOSTStress_H
2 #define ERF_MOSTStress_H
47 amrex::Real x = std::pow(1.0 + std::pow(zeta, 2.5), 1.0/2.5);
48 return ( -6.1*std::log(zeta +
x) );
51 amrex::Real psi_k_m = 2.0 * std::log(0.5 * (1.0 +
x)) + log(0.5 * (1.0 +
x *
x)) -
55 - std::sqrt(3.0)*std::atan((2.0*
y + 1.0)/std::sqrt(3.0))
57 return ( (psi_k_m + zeta*zeta*psi_c_m) / (1. + zeta*zeta) );
67 amrex::Real x = std::pow(1.0 + std::pow(zeta, 1.1), 1.0/1.1);
68 return ( -6.1*std::log(zeta +
x) );
74 - std::sqrt(3.0)*std::atan((2.0*
y + 1.0)/std::sqrt(3.0))
76 return ( (psi_k_h + zeta*zeta*psi_c_h) / (1. + zeta*zeta) );
93 return 2.0 * std::log(0.5 * (1.0 +
x)) + log(0.5 * (1.0 +
x *
x)) -
107 return 2.0 * std::log(0.5 * (1.0 +
x));
129 return 1.326e-5*(1. + 6.542e-3*TC + 8.301e-6*TC*TC - 4.84e-9*TC*TC*TC);
154 const amrex::Array4<const amrex::Real>& z0_arr,
155 const amrex::Array4<const amrex::Real>& umm_arr,
156 const amrex::Array4<const amrex::Real>& ,
157 const amrex::Array4<const amrex::Real>& ,
158 const amrex::Array4<const amrex::Real>& ,
159 const amrex::Array4<amrex::Real>& u_star_arr,
160 const amrex::Array4<amrex::Real>& ,
161 const amrex::Array4<amrex::Real>& t_star_arr,
162 const amrex::Array4<amrex::Real>& q_star_arr,
163 const amrex::Array4<amrex::Real>& ,
164 const amrex::Array4<amrex::Real>& ,
165 const amrex::Array4<amrex::Real>& olen_arr,
166 const amrex::Array4<amrex::Real>& ,
167 const amrex::Array4<amrex::Real>& ,
168 const amrex::Array4<amrex::Real>& ,
169 const amrex::Array4<amrex::Real>& )
const
171 olen_arr(i,j,k) = 1.0e16;
173 t_star_arr(i,j,k) = 0.0;
174 q_star_arr(i,j,k) = 0.0;
207 const int& max_iters,
208 const amrex::Array4<amrex::Real>& z0_arr,
209 const amrex::Array4<const amrex::Real>& umm_arr,
210 const amrex::Array4<const amrex::Real>& tm_arr,
211 const amrex::Array4<const amrex::Real>& ,
212 const amrex::Array4<const amrex::Real>& ,
213 const amrex::Array4<amrex::Real>& u_star_arr,
214 const amrex::Array4<amrex::Real>& ,
215 const amrex::Array4<amrex::Real>& t_star_arr,
216 const amrex::Array4<amrex::Real>& q_star_arr,
217 const amrex::Array4<amrex::Real>& ,
218 const amrex::Array4<amrex::Real>& ,
219 const amrex::Array4<amrex::Real>& olen_arr,
220 const amrex::Array4<amrex::Real>& ,
221 const amrex::Array4<amrex::Real>& ,
222 const amrex::Array4<amrex::Real>& ,
223 const amrex::Array4<amrex::Real>& )
const
251 }
while ( (std::abs(z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
252 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
253 "Maximum number of MOST roughness iterations reached.");
258 olen_arr(i,j,k) = 1.0e16;
259 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
260 t_star_arr(i,j,k) = 0.0;
261 q_star_arr(i,j,k) = 0.0;
295 const int& max_iters,
296 const amrex::Array4<amrex::Real>& z0_arr,
297 const amrex::Array4<const amrex::Real>& umm_arr,
298 const amrex::Array4<const amrex::Real>& ,
299 const amrex::Array4<const amrex::Real>& ,
300 const amrex::Array4<const amrex::Real>& ,
301 const amrex::Array4<amrex::Real>& u_star_arr,
302 const amrex::Array4<amrex::Real>& ,
303 const amrex::Array4<amrex::Real>& t_star_arr,
304 const amrex::Array4<amrex::Real>& q_star_arr,
305 const amrex::Array4<amrex::Real>& ,
306 const amrex::Array4<amrex::Real>& ,
307 const amrex::Array4<amrex::Real>& olen_arr,
308 const amrex::Array4<amrex::Real>& ,
309 const amrex::Array4<amrex::Real>& ,
310 const amrex::Array4<amrex::Real>& ,
311 const amrex::Array4<amrex::Real>& )
const
332 }
while ( (std::abs(z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
333 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
334 "Maximum number of MOST roughness iterations reached.");
339 olen_arr(i,j,k) = 1.0e16;
340 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
341 t_star_arr(i,j,k) = 0.0;
342 q_star_arr(i,j,k) = 0.0;
373 const int& max_iters,
374 const amrex::Array4<amrex::Real>& z0_arr,
375 const amrex::Array4<const amrex::Real>& umm_arr,
376 const amrex::Array4<const amrex::Real>& ,
377 const amrex::Array4<const amrex::Real>& ,
378 const amrex::Array4<const amrex::Real>& ,
379 const amrex::Array4<amrex::Real>& u_star_arr,
380 const amrex::Array4<amrex::Real>& ,
381 const amrex::Array4<amrex::Real>& t_star_arr,
382 const amrex::Array4<amrex::Real>& q_star_arr,
383 const amrex::Array4<amrex::Real>& ,
384 const amrex::Array4<amrex::Real>& ,
385 const amrex::Array4<amrex::Real>& olen_arr,
386 const amrex::Array4<amrex::Real>& ,
387 const amrex::Array4<amrex::Real>& ,
388 const amrex::Array4<amrex::Real>& ,
389 const amrex::Array4<amrex::Real>& )
const
396 if (u_star_arr(i,j,k) == 1.E34) {
400 ustar = u_star_arr(i,j,k);
404 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
405 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
406 "Maximum number of MOST iterations reached.");
410 olen_arr(i,j,k) = 1.0e16;
411 t_star_arr(i,j,k) = 0.0;
412 q_star_arr(i,j,k) = 0.0;
443 const int& max_iters,
444 const amrex::Array4<amrex::Real>& z0_arr,
445 const amrex::Array4<const amrex::Real>& umm_arr,
446 const amrex::Array4<const amrex::Real>& ,
447 const amrex::Array4<const amrex::Real>& ,
448 const amrex::Array4<const amrex::Real>& ,
449 const amrex::Array4<amrex::Real>& u_star_arr,
450 const amrex::Array4<amrex::Real>& ,
451 const amrex::Array4<amrex::Real>& t_star_arr,
452 const amrex::Array4<amrex::Real>& q_star_arr,
453 const amrex::Array4<amrex::Real>& ,
454 const amrex::Array4<amrex::Real>& ,
455 const amrex::Array4<amrex::Real>& olen_arr,
456 const amrex::Array4<amrex::Real>& ,
457 const amrex::Array4<amrex::Real>& Hwave_arr,
458 const amrex::Array4<amrex::Real>& Lwave_arr,
459 const amrex::Array4<amrex::Real>& eta_arr)
const
466 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
467 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
468 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
469 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
472 ustar = u_star_arr(i,j,k);
473 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 )
477 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
478 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
479 "Maximum number of MOST iterations reached.");
483 olen_arr(i,j,k) = 1.0e16;
484 t_star_arr(i,j,k) = 0.0;
485 q_star_arr(i,j,k) = 0.0;
521 const int& max_iters,
522 const amrex::Array4<const amrex::Real>& z0_arr,
523 const amrex::Array4<const amrex::Real>& umm_arr,
524 const amrex::Array4<const amrex::Real>& tm_arr,
525 const amrex::Array4<const amrex::Real>& tvm_arr,
526 const amrex::Array4<const amrex::Real>& qvm_arr,
527 const amrex::Array4<amrex::Real>& u_star_arr,
528 const amrex::Array4<amrex::Real>& w_star_arr,
529 const amrex::Array4<amrex::Real>& t_star_arr,
530 const amrex::Array4<amrex::Real>& q_star_arr,
531 const amrex::Array4<amrex::Real>& t_surf_arr,
532 const amrex::Array4<amrex::Real>& q_surf_arr,
533 const amrex::Array4<amrex::Real>& olen_arr,
534 const amrex::Array4<amrex::Real>& pblh_arr,
535 const amrex::Array4<amrex::Real>& ,
536 const amrex::Array4<amrex::Real>& ,
537 const amrex::Array4<amrex::Real>& )
const
549 if (u_star_arr(i,j,k) == 1.E34) {
552 Olen = olen_arr(i,j,k);
558 ustar = u_star_arr(i,j,k);
560 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
561 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
565 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
567 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
568 umm = std::max(umm,
WSMIN);
576 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
577 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
578 "Maximum number of MOST iterations reached.");
581 olen_arr(i,j,k) = Olen;
583 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
587 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
590 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
591 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
630 const int& max_iters,
631 const amrex::Array4<amrex::Real>& z0_arr,
632 const amrex::Array4<const amrex::Real>& umm_arr,
633 const amrex::Array4<const amrex::Real>& tm_arr,
634 const amrex::Array4<const amrex::Real>& tvm_arr,
635 const amrex::Array4<const amrex::Real>& qvm_arr,
636 const amrex::Array4<amrex::Real>& u_star_arr,
637 const amrex::Array4<amrex::Real>& w_star_arr,
638 const amrex::Array4<amrex::Real>& t_star_arr,
639 const amrex::Array4<amrex::Real>& q_star_arr,
640 const amrex::Array4<amrex::Real>& t_surf_arr,
641 const amrex::Array4<amrex::Real>& q_surf_arr,
642 const amrex::Array4<amrex::Real>& olen_arr,
643 const amrex::Array4<amrex::Real>& pblh_arr,
644 const amrex::Array4<amrex::Real>& ,
645 const amrex::Array4<amrex::Real>& ,
646 const amrex::Array4<amrex::Real>& )
const
659 if (u_star_arr(i,j,k) == 1.E34) {
662 Olen = olen_arr(i,j,k);
668 ustar = u_star_arr(i,j,k);
678 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
679 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
683 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
685 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
686 umm = std::max(umm,
WSMIN);
694 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
695 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
696 "Maximum number of MOST iterations reached.");
700 olen_arr(i,j,k) = Olen;
702 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
706 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
709 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
710 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
748 const int& max_iters,
749 const amrex::Array4<amrex::Real>& z0_arr,
750 const amrex::Array4<const amrex::Real>& umm_arr,
751 const amrex::Array4<const amrex::Real>& tm_arr,
752 const amrex::Array4<const amrex::Real>& tvm_arr,
753 const amrex::Array4<const amrex::Real>& qvm_arr,
754 const amrex::Array4<amrex::Real>& u_star_arr,
755 const amrex::Array4<amrex::Real>& w_star_arr,
756 const amrex::Array4<amrex::Real>& t_star_arr,
757 const amrex::Array4<amrex::Real>& q_star_arr,
758 const amrex::Array4<amrex::Real>& t_surf_arr,
759 const amrex::Array4<amrex::Real>& q_surf_arr,
760 const amrex::Array4<amrex::Real>& olen_arr,
761 const amrex::Array4<amrex::Real>& pblh_arr,
762 const amrex::Array4<amrex::Real>& ,
763 const amrex::Array4<amrex::Real>& ,
764 const amrex::Array4<amrex::Real>& )
const
777 if (u_star_arr(i,j,k) == 1.E34) {
780 Olen = olen_arr(i,j,k);
786 ustar = u_star_arr(i,j,k);
789 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
790 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
794 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
796 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
797 umm = std::max(umm,
WSMIN);
805 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
806 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
807 "Maximum number of MOST iterations reached.");
811 olen_arr(i,j,k) = Olen;
813 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
817 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
820 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
821 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
856 const int& max_iters,
857 const amrex::Array4<amrex::Real>& z0_arr,
858 const amrex::Array4<const amrex::Real>& umm_arr,
859 const amrex::Array4<const amrex::Real>& tm_arr,
860 const amrex::Array4<const amrex::Real>& tvm_arr,
861 const amrex::Array4<const amrex::Real>& qvm_arr,
862 const amrex::Array4<amrex::Real>& u_star_arr,
863 const amrex::Array4<amrex::Real>& w_star_arr,
864 const amrex::Array4<amrex::Real>& t_star_arr,
865 const amrex::Array4<amrex::Real>& q_star_arr,
866 const amrex::Array4<amrex::Real>& t_surf_arr,
867 const amrex::Array4<amrex::Real>& q_surf_arr,
868 const amrex::Array4<amrex::Real>& olen_arr,
869 const amrex::Array4<amrex::Real>& pblh_arr,
870 const amrex::Array4<amrex::Real>& ,
871 const amrex::Array4<amrex::Real>& ,
872 const amrex::Array4<amrex::Real>& )
const
885 if (u_star_arr(i,j,k) == 1.E34) {
888 Olen = olen_arr(i,j,k);
894 ustar = u_star_arr(i,j,k);
897 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
898 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
902 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
904 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
905 umm = std::max(umm,
WSMIN);
913 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
914 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
915 "Maximum number of MOST iterations reached.");
919 olen_arr(i,j,k) = Olen;
921 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
925 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
928 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
929 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
964 const int& max_iters,
965 const amrex::Array4<amrex::Real>& z0_arr,
966 const amrex::Array4<const amrex::Real>& umm_arr,
967 const amrex::Array4<const amrex::Real>& tm_arr,
968 const amrex::Array4<const amrex::Real>& tvm_arr,
969 const amrex::Array4<const amrex::Real>& qvm_arr,
970 const amrex::Array4<amrex::Real>& u_star_arr,
971 const amrex::Array4<amrex::Real>& w_star_arr,
972 const amrex::Array4<amrex::Real>& t_star_arr,
973 const amrex::Array4<amrex::Real>& q_star_arr,
974 const amrex::Array4<amrex::Real>& t_surf_arr,
975 const amrex::Array4<amrex::Real>& q_surf_arr,
976 const amrex::Array4<amrex::Real>& olen_arr,
977 const amrex::Array4<amrex::Real>& pblh_arr,
978 const amrex::Array4<amrex::Real>& Hwave_arr,
979 const amrex::Array4<amrex::Real>& Lwave_arr,
980 const amrex::Array4<amrex::Real>& eta_arr)
const
993 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
994 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
995 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
996 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
998 if (u_star_arr(i,j,k) == 1.E34) {
1001 Olen = olen_arr(i,j,k);
1007 ustar = u_star_arr(i,j,k);
1008 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 )
1011 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1012 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1016 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1018 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1019 umm = std::max(umm,
WSMIN);
1027 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1028 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1029 "Maximum number of MOST iterations reached.");
1033 olen_arr(i,j,k) = Olen;
1035 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
1039 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1042 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1043 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1081 const int& max_iters,
1082 const amrex::Array4<const amrex::Real>& z0_arr,
1083 const amrex::Array4<const amrex::Real>& umm_arr,
1084 const amrex::Array4<const amrex::Real>& tm_arr,
1085 const amrex::Array4<const amrex::Real>& tvm_arr,
1086 const amrex::Array4<const amrex::Real>& qvm_arr,
1087 const amrex::Array4<amrex::Real>& u_star_arr,
1088 const amrex::Array4<amrex::Real>& w_star_arr,
1089 const amrex::Array4<amrex::Real>& t_star_arr,
1090 const amrex::Array4<amrex::Real>& q_star_arr,
1091 const amrex::Array4<amrex::Real>& t_surf_arr,
1092 const amrex::Array4<amrex::Real>& q_surf_arr,
1093 const amrex::Array4<amrex::Real>& olen_arr,
1094 const amrex::Array4<amrex::Real>& pblh_arr,
1095 const amrex::Array4<amrex::Real>& ,
1096 const amrex::Array4<amrex::Real>& ,
1097 const amrex::Array4<amrex::Real>& )
const
1111 if (u_star_arr(i,j,k) == 1.E34) { olen_arr(i,j,k) = 1.0e3; }
1116 if (q_surf_arr(i,j,k) > 0.) {
1117 qv_s = q_surf_arr(i,j,k);
1121 qv_s = qvm_arr(i,j,k);
1123 qv_a = qvm_arr(i,j,k);
1133 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1134 amrex::Real tflux = -ustar*tstar*(1 + 0.61*qvm_arr(i,j,k)) + 0.61*tm_arr(i,j,k)*qflux;
1135 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1137 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1138 umm = std::max(umm,
WSMIN);
1142 amrex::Real thv_s = t_surf_arr(i,j,k) * (1.0 + 0.61*qv_s);
1143 amrex::Real thv_a = tm_arr(i,j,k) * (1.0 + 0.61*qv_a);
1145 ( (thv_a - thv_s) / (umm * umm) );
1146 Rib = std::min(std::max(Rib,-4.0),4.0);
1159 num = std::max(C - psi_m, 1.0);
1160 den = std::max(C - psi_h, 1.0);
1166 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1167 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1168 "Maximum number of MOST iterations reached.");
1172 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1173 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1176 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1179 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1219 const int& max_iters,
1220 const amrex::Array4<amrex::Real>& z0_arr,
1221 const amrex::Array4<const amrex::Real>& umm_arr,
1222 const amrex::Array4<const amrex::Real>& tm_arr,
1223 const amrex::Array4<const amrex::Real>& tvm_arr,
1224 const amrex::Array4<const amrex::Real>& qvm_arr,
1225 const amrex::Array4<amrex::Real>& u_star_arr,
1226 const amrex::Array4<amrex::Real>& w_star_arr,
1227 const amrex::Array4<amrex::Real>& t_star_arr,
1228 const amrex::Array4<amrex::Real>& q_star_arr,
1229 const amrex::Array4<amrex::Real>& t_surf_arr,
1230 const amrex::Array4<amrex::Real>& q_surf_arr,
1231 const amrex::Array4<amrex::Real>& olen_arr,
1232 const amrex::Array4<amrex::Real>& pblh_arr,
1233 const amrex::Array4<amrex::Real>& ,
1234 const amrex::Array4<amrex::Real>& ,
1235 const amrex::Array4<amrex::Real>& )
const
1251 if (u_star_arr(i,j,k) == 1.E34) { olen_arr(i,j,k) = 1.0e3; }
1256 if (q_surf_arr(i,j,k) > 0.) {
1257 qv_s = q_surf_arr(i,j,k);
1261 qv_s = qvm_arr(i,j,k);
1263 qv_a = qvm_arr(i,j,k);
1273 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1274 amrex::Real tflux = -ustar*tstar*(1 + 0.61*qvm_arr(i,j,k)) + 0.61*tm_arr(i,j,k)*qflux;
1275 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1277 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1278 umm = std::max(umm,
WSMIN);
1282 amrex::Real thv_s = t_surf_arr(i,j,k) * (1.0 + 0.61*qv_s);
1283 amrex::Real thv_a = tm_arr(i,j,k) * (1.0 + 0.61*qv_a);
1285 ( (thv_a - thv_s) / (umm * umm) );
1286 Rib = std::min(std::max(Rib,-4.0),4.0);
1317 }
while ( (std::abs(z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
1318 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
1319 "Maximum number of MOST roughness iterations reached.");
1323 num = std::max(C - psi_m, 1.0);
1324 den = std::max(C - psi_h, 1.0);
1330 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1331 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1332 "Maximum number of MOST iterations reached.");
1337 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1338 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1341 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1344 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1384 const int& max_iters,
1385 const amrex::Array4<amrex::Real>& z0_arr,
1386 const amrex::Array4<const amrex::Real>& umm_arr,
1387 const amrex::Array4<const amrex::Real>& tm_arr,
1388 const amrex::Array4<const amrex::Real>& tvm_arr,
1389 const amrex::Array4<const amrex::Real>& qvm_arr,
1390 const amrex::Array4<amrex::Real>& u_star_arr,
1391 const amrex::Array4<amrex::Real>& w_star_arr,
1392 const amrex::Array4<amrex::Real>& t_star_arr,
1393 const amrex::Array4<amrex::Real>& q_star_arr,
1394 const amrex::Array4<amrex::Real>& t_surf_arr,
1395 const amrex::Array4<amrex::Real>& q_surf_arr,
1396 const amrex::Array4<amrex::Real>& olen_arr,
1397 const amrex::Array4<amrex::Real>& pblh_arr,
1398 const amrex::Array4<amrex::Real>& ,
1399 const amrex::Array4<amrex::Real>& ,
1400 const amrex::Array4<amrex::Real>& )
const
1416 if (u_star_arr(i,j,k) == 1.E34) { olen_arr(i,j,k) = 1.0e3; }
1421 if (q_surf_arr(i,j,k) > 0.) {
1422 qv_s = q_surf_arr(i,j,k);
1426 qv_s = qvm_arr(i,j,k);
1428 qv_a = qvm_arr(i,j,k);
1438 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1439 amrex::Real tflux = -ustar*tstar*(1 + 0.61*qvm_arr(i,j,k)) + 0.61*tm_arr(i,j,k)*qflux;
1440 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1442 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1443 umm = std::max(umm,
WSMIN);
1447 amrex::Real thv_s = t_surf_arr(i,j,k) * (1.0 + 0.61*qv_s);
1448 amrex::Real thv_a = tm_arr(i,j,k) * (1.0 + 0.61*qv_a);
1450 ( (thv_a - thv_s) / (umm * umm) );
1451 Rib = std::min(std::max(Rib,-4.0),4.0);
1475 }
while ( (std::abs(z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
1476 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
1477 "Maximum number of MOST roughness iterations reached.");
1481 num = std::max(C - psi_m, 1.0);
1482 den = std::max(C - psi_h, 1.0);
1488 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1489 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1490 "Maximum number of MOST iterations reached.");
1495 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1496 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1499 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1502 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1539 const int& max_iters,
1540 const amrex::Array4<amrex::Real>& z0_arr,
1541 const amrex::Array4<const amrex::Real>& umm_arr,
1542 const amrex::Array4<const amrex::Real>& tm_arr,
1543 const amrex::Array4<const amrex::Real>& tvm_arr,
1544 const amrex::Array4<const amrex::Real>& qvm_arr,
1545 const amrex::Array4<amrex::Real>& u_star_arr,
1546 const amrex::Array4<amrex::Real>& w_star_arr,
1547 const amrex::Array4<amrex::Real>& t_star_arr,
1548 const amrex::Array4<amrex::Real>& q_star_arr,
1549 const amrex::Array4<amrex::Real>& t_surf_arr,
1550 const amrex::Array4<amrex::Real>& q_surf_arr,
1551 const amrex::Array4<amrex::Real>& olen_arr,
1552 const amrex::Array4<amrex::Real>& pblh_arr,
1553 const amrex::Array4<amrex::Real>& ,
1554 const amrex::Array4<amrex::Real>& ,
1555 const amrex::Array4<amrex::Real>& )
const
1569 if (u_star_arr(i,j,k) == 1.E34) {
1572 Olen = olen_arr(i,j,k);
1579 ustar = u_star_arr(i,j,k);
1581 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1583 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1585 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1586 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1587 tflux += 0.61*tm_arr(i,j,k) * qflux;
1590 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1592 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1593 umm = std::max(umm,
WSMIN);
1596 if ( (((Olen >= 0.0) && (Oleno <= 0.0)) ||
1597 ((Olen <= 0.0) && (Oleno >= 0.0))) &&
1598 std::fabs(Olen) + std::fabs(Oleno) < 1.) {
1599 Olen = 0.5 * (Olen + Oleno);
1607 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1608 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1609 "Maximum number of MOST iterations reached.");
1613 olen_arr(i,j,k) = Olen;
1614 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1618 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1621 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1622 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1657 const int& max_iters,
1658 const amrex::Array4<amrex::Real>& z0_arr,
1659 const amrex::Array4<const amrex::Real>& umm_arr,
1660 const amrex::Array4<const amrex::Real>& tm_arr,
1661 const amrex::Array4<const amrex::Real>& tvm_arr,
1662 const amrex::Array4<const amrex::Real>& qvm_arr,
1663 const amrex::Array4<amrex::Real>& u_star_arr,
1664 const amrex::Array4<amrex::Real>& w_star_arr,
1665 const amrex::Array4<amrex::Real>& t_star_arr,
1666 const amrex::Array4<amrex::Real>& q_star_arr,
1667 const amrex::Array4<amrex::Real>& t_surf_arr,
1668 const amrex::Array4<amrex::Real>& q_surf_arr,
1669 const amrex::Array4<amrex::Real>& olen_arr,
1670 const amrex::Array4<amrex::Real>& pblh_arr,
1671 const amrex::Array4<amrex::Real>& Hwave_arr,
1672 const amrex::Array4<amrex::Real>& Lwave_arr,
1673 const amrex::Array4<amrex::Real>& eta_arr)
const
1687 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1688 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1689 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1690 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1692 if (u_star_arr(i,j,k) == 1.E34) {
1695 Olen = olen_arr(i,j,k);
1702 ustar = u_star_arr(i,j,k);
1703 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 )
1705 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1707 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1709 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1710 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1711 tflux += 0.61*tm_arr(i,j,k) * qflux;
1714 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1716 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1717 umm = std::max(umm,
WSMIN);
1720 if ( (((Olen >= 0.0) && (Oleno <= 0.0)) ||
1721 ((Olen <= 0.0) && (Oleno >= 0.0))) &&
1722 std::fabs(Olen) + std::fabs(Oleno) < 1.) {
1723 Olen = 0.5 * (Olen + Oleno);
1731 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1732 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1733 "Maximum number of MOST iterations reached.");
1737 olen_arr(i,j,k) = Olen;
1738 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1742 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1745 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1746 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1775 const amrex::Array4<const amrex::Real>& cons_arr,
1776 const amrex::Array4<const amrex::Real>& velx_arr,
1777 const amrex::Array4<const amrex::Real>& vely_arr,
1778 const amrex::Array4<const amrex::Real>& umm_arr,
1779 const amrex::Array4<const amrex::Real>& qvm_arr,
1780 const amrex::Array4<const amrex::Real>& u_star_arr,
1781 const amrex::Array4<const amrex::Real>& q_star_arr,
1782 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
1786 amrex::Real velx = 0.5 * ( velx_arr(i,j,k) + velx_arr(i+1,j ,k) );
1787 amrex::Real vely = 0.5 * ( vely_arr(i,j,k) + vely_arr(i ,j+1,k) );
1794 wsp_mean = std::max(wsp_mean,
WSMIN);
1802 -
rho*qstar*ustar*(num1+num2)/((qv_mean-qv_surf)*wsp_mean) : 0.0;
1813 const amrex::Array4<const amrex::Real>& cons_arr,
1814 const amrex::Array4<const amrex::Real>& velx_arr,
1815 const amrex::Array4<const amrex::Real>& vely_arr,
1816 const amrex::Array4<const amrex::Real>& umm_arr,
1817 const amrex::Array4<const amrex::Real>& tm_arr,
1818 const amrex::Array4<const amrex::Real>& u_star_arr,
1819 const amrex::Array4<const amrex::Real>& t_star_arr,
1820 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
1824 amrex::Real velx = 0.5 * ( velx_arr(i,j,k) + velx_arr(i+1,j ,k) );
1825 amrex::Real vely = 0.5 * ( vely_arr(i,j,k) + vely_arr(i ,j+1,k) );
1832 wsp_mean = std::max(wsp_mean,
WSMIN);
1840 -
rho*tstar*ustar*(num1+num2)/((theta_mean-theta_surf)*wsp_mean) : 0.0;
1851 const amrex::Array4<const amrex::Real>& cons_arr,
1852 const amrex::Array4<const amrex::Real>& velx_arr,
1853 const amrex::Array4<const amrex::Real>& vely_arr,
1854 const amrex::Array4<const amrex::Real>& umm_arr,
1855 const amrex::Array4<const amrex::Real>& um_arr,
1856 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1859 amrex::Real vely = 0.25 * ( vely_arr(i ,j,k) + vely_arr(i ,j+1,k)
1860 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
1864 amrex::Real ustar = 0.5 * ( u_star_arr(i-1,j,k) + u_star_arr(i,j,k) );
1865 amrex::Real wsp_mean = 0.5 * ( umm_arr(i-1,j,k) + umm_arr(i,j,k) );
1866 wsp_mean = std::max(wsp_mean,
WSMIN);
1877 amrex::Real stressx = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1888 const amrex::Array4<const amrex::Real>& cons_arr,
1889 const amrex::Array4<const amrex::Real>& velx_arr,
1890 const amrex::Array4<const amrex::Real>& vely_arr,
1891 const amrex::Array4<const amrex::Real>& umm_arr,
1892 const amrex::Array4<const amrex::Real>& vm_arr,
1893 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1895 amrex::Real velx = 0.25 * ( velx_arr(i,j ,k) + velx_arr(i+1,j ,k)
1896 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
1901 amrex::Real ustar = 0.5 * ( u_star_arr(i,j-1,k) + u_star_arr(i,j,k) );
1902 amrex::Real wsp_mean = 0.5 * ( umm_arr(i,j-1,k) + umm_arr(i,j,k) );
1903 wsp_mean = std::max(wsp_mean,
WSMIN);
1914 amrex::Real stressy = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1938 const amrex::Array4<const amrex::Real>& ,
1939 const amrex::Array4<const amrex::Real>& ,
1940 const amrex::Array4<const amrex::Real>& ,
1941 const amrex::Array4<const amrex::Real>& ,
1942 const amrex::Array4<const amrex::Real>& ,
1943 const amrex::Array4<const amrex::Real>& ,
1944 const amrex::Array4<const amrex::Real>& ,
1945 const amrex::Array4<const amrex::Real>& )
const
1959 const amrex::Array4<const amrex::Real>& cons_arr,
1960 const amrex::Array4<const amrex::Real>& ,
1961 const amrex::Array4<const amrex::Real>& ,
1962 const amrex::Array4<const amrex::Real>& umm_arr,
1963 const amrex::Array4<const amrex::Real>& tm_arr,
1964 const amrex::Array4<const amrex::Real>& ,
1965 const amrex::Array4<const amrex::Real>& ,
1966 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
1975 amrex::Real moflux = -
rho * Ch * wsp_mean * (theta_mean - theta_surf);
1986 const amrex::Array4<const amrex::Real>& cons_arr,
1987 const amrex::Array4<const amrex::Real>& velx_arr,
1988 const amrex::Array4<const amrex::Real>& vely_arr,
1989 const amrex::Array4<const amrex::Real>& umm_arr,
1990 const amrex::Array4<const amrex::Real>& ,
1991 const amrex::Array4<const amrex::Real>& )
const
1994 amrex::Real vely = 0.25 * ( vely_arr(i ,j,k) + vely_arr(i ,j+1,k)
1995 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2001 amrex::Real wsp_mean = 0.5 * ( umm_arr(i-1,j,k) + umm_arr(i,j,k) );
2002 if (wsp_mean <= 5.0) {
2004 }
else if (wsp_mean < 25.0 && wsp_mean > 5.0) {
2005 Cd = 0.001 + c * (wsp_mean - 5.0);
2022 const amrex::Array4<const amrex::Real>& cons_arr,
2023 const amrex::Array4<const amrex::Real>& velx_arr,
2024 const amrex::Array4<const amrex::Real>& vely_arr,
2025 const amrex::Array4<const amrex::Real>& umm_arr,
2026 const amrex::Array4<const amrex::Real>& ,
2027 const amrex::Array4<const amrex::Real>& )
const
2029 amrex::Real velx = 0.25 * ( velx_arr(i,j ,k) + velx_arr(i+1,j ,k)
2030 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2037 amrex::Real wsp_mean = 0.5 * ( umm_arr(i,j-1,k) + umm_arr(i,j,k) );
2038 if (wsp_mean <= 5.0) {
2040 }
else if (wsp_mean < 25.0 && wsp_mean > 5.0) {
2041 Cd = 0.001 + c * (wsp_mean - 5.0);
2072 const amrex::Array4<const amrex::Real>& cons_arr,
2073 const amrex::Array4<const amrex::Real>& ,
2074 const amrex::Array4<const amrex::Real>& ,
2075 const amrex::Array4<const amrex::Real>& ,
2076 const amrex::Array4<const amrex::Real>& ,
2077 const amrex::Array4<const amrex::Real>& ,
2078 const amrex::Array4<const amrex::Real>& q_star_arr,
2079 const amrex::Array4<const amrex::Real>& )
const
2096 const amrex::Array4<const amrex::Real>& cons_arr,
2097 const amrex::Array4<const amrex::Real>& ,
2098 const amrex::Array4<const amrex::Real>& ,
2099 const amrex::Array4<const amrex::Real>& ,
2100 const amrex::Array4<const amrex::Real>& ,
2101 const amrex::Array4<const amrex::Real>& ,
2102 const amrex::Array4<const amrex::Real>& t_star_arr,
2103 const amrex::Array4<const amrex::Real>& )
const
2120 const amrex::Array4<const amrex::Real>& cons_arr,
2121 const amrex::Array4<const amrex::Real>& velx_arr,
2122 const amrex::Array4<const amrex::Real>& vely_arr,
2123 const amrex::Array4<const amrex::Real>& ,
2124 const amrex::Array4<const amrex::Real>& ,
2125 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2128 amrex::Real vely = 0.25 * ( vely_arr(i ,j,k) + vely_arr(i ,j+1,k)
2129 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2132 amrex::Real ustar = 0.5 * ( u_star_arr(i-1,j,k) + u_star_arr(i,j,k) );
2147 const amrex::Array4<const amrex::Real>& cons_arr,
2148 const amrex::Array4<const amrex::Real>& velx_arr,
2149 const amrex::Array4<const amrex::Real>& vely_arr,
2150 const amrex::Array4<const amrex::Real>& ,
2151 const amrex::Array4<const amrex::Real>& ,
2152 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2154 amrex::Real velx = 0.25 * ( velx_arr(i,j ,k) + velx_arr(i+1,j ,k)
2155 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2159 amrex::Real ustar = 0.5 * ( u_star_arr(i,j-1,k) + u_star_arr(i,j,k) );
2187 const amrex::Array4<const amrex::Real>& cons_arr,
2188 const amrex::Array4<const amrex::Real>& ,
2189 const amrex::Array4<const amrex::Real>& ,
2190 const amrex::Array4<const amrex::Real>& ,
2191 const amrex::Array4<const amrex::Real>& qvm_arr,
2192 const amrex::Array4<const amrex::Real>& ,
2193 const amrex::Array4<const amrex::Real>& q_star_arr,
2194 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2201 amrex::Real moflux = (std::abs(qstar) >
eps) ? -
rho * qstar * (qv_mean-qv_surf): 0.0;
2212 const amrex::Array4<const amrex::Real>& cons_arr,
2213 const amrex::Array4<const amrex::Real>& ,
2214 const amrex::Array4<const amrex::Real>& ,
2215 const amrex::Array4<const amrex::Real>& ,
2216 const amrex::Array4<const amrex::Real>& tm_arr,
2217 const amrex::Array4<const amrex::Real>& ,
2218 const amrex::Array4<const amrex::Real>& t_star_arr,
2219 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2226 amrex::Real moflux = (std::abs(tstar) >
eps) ? -
rho * tstar * (theta_mean-theta_surf) : 0.0;
2237 const amrex::Array4<const amrex::Real>& cons_arr,
2238 const amrex::Array4<const amrex::Real>& ,
2239 const amrex::Array4<const amrex::Real>& ,
2240 const amrex::Array4<const amrex::Real>& ,
2241 const amrex::Array4<const amrex::Real>& ,
2242 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2246 amrex::Real ustar = 0.5 * ( u_star_arr(i-1,j,k) + u_star_arr(i,j,k) );
2258 const amrex::Array4<const amrex::Real>& ,
2259 const amrex::Array4<const amrex::Real>& ,
2260 const amrex::Array4<const amrex::Real>& ,
2261 const amrex::Array4<const amrex::Real>& ,
2262 const amrex::Array4<const amrex::Real>& ,
2263 const amrex::Array4<const amrex::Real>& )
const
constexpr amrex::Real KAPPA
Definition: ERF_Constants.H:20
constexpr amrex::Real PI
Definition: ERF_Constants.H:6
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:21
constexpr amrex::Real PIoTwo
Definition: ERF_Constants.H:7
@ num
Definition: ERF_DataStruct.H:22
#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:126
amrex::Real Real
Definition: ERF_ShocInterface.H:16
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:187
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:268
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:204
most_data mdata
Definition: ERF_MOSTStress.H:265
adiabatic_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc)
Definition: ERF_MOSTStress.H:188
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:267
similarity_funs sfuns
Definition: ERF_MOSTStress.H:266
Definition: ERF_MOSTStress.H:357
adiabatic_donelan(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:358
similarity_funs sfuns
Definition: ERF_MOSTStress.H:417
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:419
most_data mdata
Definition: ERF_MOSTStress.H:416
const amrex::Real tol
Definition: ERF_MOSTStress.H:418
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:370
Definition: ERF_MOSTStress.H:276
adiabatic_mod_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth)
Definition: ERF_MOSTStress.H:277
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:292
similarity_funs sfuns
Definition: ERF_MOSTStress.H:347
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:348
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:349
most_data mdata
Definition: ERF_MOSTStress.H:346
Definition: ERF_MOSTStress.H:427
const amrex::Real eps
Definition: ERF_MOSTStress.H:492
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:493
most_data mdata
Definition: ERF_MOSTStress.H:489
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:440
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:495
similarity_funs sfuns
Definition: ERF_MOSTStress.H:490
const amrex::Real tol
Definition: ERF_MOSTStress.H:491
adiabatic_wave_coupled(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:428
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:494
Definition: ERF_MOSTStress.H:137
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:150
similarity_funs sfuns
Definition: ERF_MOSTStress.H:179
adiabatic(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:138
most_data mdata
Definition: ERF_MOSTStress.H:178
Definition: ERF_MOSTStress.H:2061
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:2117
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:2069
custom_flux(bool specified_rho_surf)
Definition: ERF_MOSTStress.H:2062
const bool fluxes_include_rho
Definition: ERF_MOSTStress.H:2170
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:2093
const amrex::Real eps
Definition: ERF_MOSTStress.H:2169
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:2144
Definition: ERF_MOSTStress.H:1929
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:1983
donelan_flux()
Definition: ERF_MOSTStress.H:1930
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:2019
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:1956
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:1935
Definition: ERF_MOSTStress.H:1766
moeng_flux()
Definition: ERF_MOSTStress.H:1767
const amrex::Real eps
Definition: ERF_MOSTStress.H:1920
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:1848
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1921
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:1810
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:1772
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:1885
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:2178
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:2255
rotate_flux()
Definition: ERF_MOSTStress.H:2179
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:2234
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:2209
const amrex::Real eps
Definition: ERF_MOSTStress.H:2272
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:2184
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:87
amrex::Real beta_m
Constants from Dyer, BLM, 1974.
Definition: ERF_MOSTStress.H:112
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h2(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:64
amrex::Real beta_h
https://doi.org/10.1007/BF00240838
Definition: ERF_MOSTStress.H:113
amrex::Real gamma_h
Definition: ERF_MOSTStress.H:115
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:101
amrex::Real gamma_m
Definition: ERF_MOSTStress.H:114
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m2(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:44
Definition: ERF_MOSTStress.H:608
const amrex::Real tol
Definition: ERF_MOSTStress.H:718
similarity_funs sfuns
Definition: ERF_MOSTStress.H:717
most_data mdata
Definition: ERF_MOSTStress.H:715
bool spec_qflux
Definition: ERF_MOSTStress.H:716
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:609
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:719
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:627
Definition: ERF_MOSTStress.H:838
bool spec_qflux
Definition: ERF_MOSTStress.H:935
surface_flux_donelan(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:839
const amrex::Real tol
Definition: ERF_MOSTStress.H:937
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:938
most_data mdata
Definition: ERF_MOSTStress.H:934
similarity_funs sfuns
Definition: ERF_MOSTStress.H:936
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:853
Definition: ERF_MOSTStress.H:727
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:745
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:830
most_data mdata
Definition: ERF_MOSTStress.H:826
bool spec_qflux
Definition: ERF_MOSTStress.H:827
surface_flux_mod_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool cons_qflux)
Definition: ERF_MOSTStress.H:728
const amrex::Real tol
Definition: ERF_MOSTStress.H:829
similarity_funs sfuns
Definition: ERF_MOSTStress.H:828
Definition: ERF_MOSTStress.H:946
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1055
surface_flux_wave_coupled(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:947
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:1054
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:1053
most_data mdata
Definition: ERF_MOSTStress.H:1048
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1050
const amrex::Real tol
Definition: ERF_MOSTStress.H:1051
bool spec_qflux
Definition: ERF_MOSTStress.H:1049
const amrex::Real eps
Definition: ERF_MOSTStress.H:1052
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:961
Definition: ERF_MOSTStress.H:503
similarity_funs sfuns
Definition: ERF_MOSTStress.H:598
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:600
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:518
most_data mdata
Definition: ERF_MOSTStress.H:596
const amrex::Real tol
Definition: ERF_MOSTStress.H:599
bool spec_qflux
Definition: ERF_MOSTStress.H:597
surface_flux(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:504
Definition: ERF_MOSTStress.H:1197
most_data mdata
Definition: ERF_MOSTStress.H:1349
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:1198
bool spec_qflux
Definition: ERF_MOSTStress.H:1350
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:1353
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:1216
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1354
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1355
const amrex::Real tol
Definition: ERF_MOSTStress.H:1352
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1351
Definition: ERF_MOSTStress.H:1521
surface_temp_donelan(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1522
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1629
most_data mdata
Definition: ERF_MOSTStress.H:1627
const amrex::Real tol
Definition: ERF_MOSTStress.H:1630
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1631
bool spec_qflux
Definition: ERF_MOSTStress.H:1628
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:1536
Definition: ERF_MOSTStress.H:1363
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1509
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:1381
const amrex::Real tol
Definition: ERF_MOSTStress.H:1510
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:1511
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1513
surface_temp_mod_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool cons_qflux)
Definition: ERF_MOSTStress.H:1364
most_data mdata
Definition: ERF_MOSTStress.H:1507
bool spec_qflux
Definition: ERF_MOSTStress.H:1508
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1512
Definition: ERF_MOSTStress.H:1639
const amrex::Real eps
Definition: ERF_MOSTStress.H:1755
const amrex::Real tol
Definition: ERF_MOSTStress.H:1754
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:1654
most_data mdata
Definition: ERF_MOSTStress.H:1751
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:1756
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1753
bool spec_qflux
Definition: ERF_MOSTStress.H:1752
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:1757
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1758
surface_temp_wave_coupled(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1640
Definition: ERF_MOSTStress.H:1063
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1186
surface_temp(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1064
const amrex::Real tol
Definition: ERF_MOSTStress.H:1187
bool spec_qflux
Definition: ERF_MOSTStress.H:1185
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:1078
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1188
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1189
most_data mdata
Definition: ERF_MOSTStress.H:1184