1 #ifndef ERF_MOSTStress_H
2 #define ERF_MOSTStress_H
50 const amrex::Array4<const amrex::Real>& zref_arr,
51 const amrex::Array4<const amrex::Real>& z0_arr,
52 const amrex::Array4<const amrex::Real>& umm_arr,
53 const amrex::Array4<const amrex::Real>& ,
54 const amrex::Array4<const amrex::Real>& ,
55 const amrex::Array4<const amrex::Real>& ,
56 const amrex::Array4<amrex::Real>& u_star_arr,
57 const amrex::Array4<amrex::Real>& ,
58 const amrex::Array4<amrex::Real>& t_star_arr,
59 const amrex::Array4<amrex::Real>& q_star_arr,
60 const amrex::Array4<amrex::Real>& ,
61 const amrex::Array4<amrex::Real>& ,
62 const amrex::Array4<amrex::Real>& olen_arr,
63 const amrex::Array4<amrex::Real>& ,
64 const amrex::Array4<amrex::Real>& ,
65 const amrex::Array4<amrex::Real>& ,
66 const amrex::Array4<amrex::Real>& )
const
69 u_star_arr(i,j,k) =
mdata.
kappa * umm_arr(i,j,k) / std::log(zref_arr(i,j,k) / z0_arr(i,j,k));
70 t_star_arr(i,j,k) =
zero;
71 q_star_arr(i,j,k) =
zero;
119 const int& max_iters,
120 const amrex::Array4<const amrex::Real>& zref_arr,
121 const amrex::Array4<amrex::Real>& z0_arr,
122 const amrex::Array4<const amrex::Real>& umm_arr,
123 const amrex::Array4<const amrex::Real>& tm_arr,
124 const amrex::Array4<const amrex::Real>& ,
125 const amrex::Array4<const amrex::Real>& ,
126 const amrex::Array4<amrex::Real>& u_star_arr,
127 const amrex::Array4<amrex::Real>& ,
128 const amrex::Array4<amrex::Real>& t_star_arr,
129 const amrex::Array4<amrex::Real>& q_star_arr,
130 const amrex::Array4<amrex::Real>& ,
131 const amrex::Array4<amrex::Real>& ,
132 const amrex::Array4<amrex::Real>& olen_arr,
133 const amrex::Array4<amrex::Real>& ,
134 const amrex::Array4<amrex::Real>& ,
135 const amrex::Array4<amrex::Real>& ,
136 const amrex::Array4<amrex::Real>& )
const
153 C = std::log(zref / z0_old);
166 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
168 "Maximum number of MOST roughness iterations reached.");
169 C = std::log(zref /
z0);
174 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
175 t_star_arr(i,j,k) =
zero;
176 q_star_arr(i,j,k) =
zero;
182 #ifdef AMREX_USE_FLOAT
230 const int& max_iters,
231 const amrex::Array4<const amrex::Real>& zref_arr,
232 const amrex::Array4<amrex::Real>& z0_arr,
233 const amrex::Array4<const amrex::Real>& umm_arr,
234 const amrex::Array4<const amrex::Real>& ,
235 const amrex::Array4<const amrex::Real>& ,
236 const amrex::Array4<const amrex::Real>& ,
237 const amrex::Array4<amrex::Real>& u_star_arr,
238 const amrex::Array4<amrex::Real>& ,
239 const amrex::Array4<amrex::Real>& t_star_arr,
240 const amrex::Array4<amrex::Real>& q_star_arr,
241 const amrex::Array4<amrex::Real>& ,
242 const amrex::Array4<amrex::Real>& ,
243 const amrex::Array4<amrex::Real>& olen_arr,
244 const amrex::Array4<amrex::Real>& ,
245 const amrex::Array4<amrex::Real>& ,
246 const amrex::Array4<amrex::Real>& ,
247 const amrex::Array4<amrex::Real>& )
const
264 C = std::log(zref / z0_old);
268 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
270 "Maximum number of MOST roughness iterations reached.");
271 C = std::log(zref /
z0);
276 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
277 t_star_arr(i,j,k) =
zero;
278 q_star_arr(i,j,k) =
zero;
284 #ifdef AMREX_USE_FLOAT
328 const int& max_iters,
329 const amrex::Array4<const amrex::Real>& zref_arr,
330 const amrex::Array4<amrex::Real>& z0_arr,
331 const amrex::Array4<const amrex::Real>& umm_arr,
332 const amrex::Array4<const amrex::Real>& tm_arr,
333 const amrex::Array4<const amrex::Real>& ,
334 const amrex::Array4<const amrex::Real>& ,
335 const amrex::Array4<amrex::Real>& u_star_arr,
336 const amrex::Array4<amrex::Real>& ,
337 const amrex::Array4<amrex::Real>& t_star_arr,
338 const amrex::Array4<amrex::Real>& q_star_arr,
339 const amrex::Array4<amrex::Real>& ,
340 const amrex::Array4<amrex::Real>& ,
341 const amrex::Array4<amrex::Real>& olen_arr,
342 const amrex::Array4<amrex::Real>& ,
343 const amrex::Array4<amrex::Real>& ,
344 const amrex::Array4<amrex::Real>& ,
345 const amrex::Array4<amrex::Real>& )
const
362 C = std::log(zref / z0_old);
367 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
369 "Maximum number of MOST roughness iterations reached.");
370 C = std::log(zref /
z0);
375 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
376 t_star_arr(i,j,k) =
zero;
377 q_star_arr(i,j,k) =
zero;
383 #ifdef AMREX_USE_FLOAT
427 const int& max_iters,
428 const amrex::Array4<const amrex::Real>& zref_arr,
429 const amrex::Array4<amrex::Real>& z0_arr,
430 const amrex::Array4<const amrex::Real>& umm_arr,
431 const amrex::Array4<const amrex::Real>& tm_arr,
432 const amrex::Array4<const amrex::Real>& ,
433 const amrex::Array4<const amrex::Real>& ,
434 const amrex::Array4<amrex::Real>& u_star_arr,
435 const amrex::Array4<amrex::Real>& ,
436 const amrex::Array4<amrex::Real>& t_star_arr,
437 const amrex::Array4<amrex::Real>& q_star_arr,
438 const amrex::Array4<amrex::Real>& ,
439 const amrex::Array4<amrex::Real>& ,
440 const amrex::Array4<amrex::Real>& olen_arr,
441 const amrex::Array4<amrex::Real>& ,
442 const amrex::Array4<amrex::Real>& Hwave_arr,
443 const amrex::Array4<amrex::Real>& Lwave_arr,
444 const amrex::Array4<amrex::Real>& )
const
461 C = std::log(zref / z0_old);
467 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
469 "Maximum number of MOST roughness iterations reached.");
470 C = std::log(zref /
z0);
475 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
476 t_star_arr(i,j,k) =
zero;
477 q_star_arr(i,j,k) =
zero;
483 #ifdef AMREX_USE_FLOAT
488 #ifdef AMREX_USE_FLOAT
533 const int& max_iters,
534 const amrex::Array4<const amrex::Real>& zref_arr,
535 const amrex::Array4<const amrex::Real>& z0_arr,
536 const amrex::Array4<const amrex::Real>& umm_arr,
537 const amrex::Array4<const amrex::Real>& tm_arr,
538 const amrex::Array4<const amrex::Real>& tvm_arr,
539 const amrex::Array4<const amrex::Real>& qvm_arr,
540 const amrex::Array4<amrex::Real>& u_star_arr,
541 const amrex::Array4<amrex::Real>& w_star_arr,
542 const amrex::Array4<amrex::Real>& t_star_arr,
543 const amrex::Array4<amrex::Real>& q_star_arr,
544 const amrex::Array4<amrex::Real>& t_surf_arr,
545 const amrex::Array4<amrex::Real>& q_surf_arr,
546 const amrex::Array4<amrex::Real>& olen_arr,
547 const amrex::Array4<amrex::Real>& pblh_arr,
548 const amrex::Array4<amrex::Real>& ,
549 const amrex::Array4<amrex::Real>& ,
550 const amrex::Array4<amrex::Real>& )
const
564 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
566 Olen = olen_arr(i,j,k);
572 ustar = u_star_arr(i,j,k);
575 (std::log(zref / z0_arr(i,j,k)) - psi_h);
579 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
582 amrex::Real umm_new = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
584 umm = std::max(umm,
WSMIN);
589 Olen = -ustar_floor * ustar_floor * ustar_floor * tvm_arr(i,j,k) /
601 }
while ((std::abs(u_star_arr(i,j,k) -
ustar) >
tol) && iter <= max_iters);
603 "Maximum number of MOST iterations reached.");
606 olen_arr(i,j,k) = Olen;
627 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
628 (std::log(zref / z0_arr(i,j,k)) - psi_h);
686 const int& max_iters,
687 const amrex::Array4<const amrex::Real>& zref_arr,
688 const amrex::Array4<amrex::Real>& z0_arr,
689 const amrex::Array4<const amrex::Real>& umm_arr,
690 const amrex::Array4<const amrex::Real>& tm_arr,
691 const amrex::Array4<const amrex::Real>& tvm_arr,
692 const amrex::Array4<const amrex::Real>& qvm_arr,
693 const amrex::Array4<amrex::Real>& u_star_arr,
694 const amrex::Array4<amrex::Real>& w_star_arr,
695 const amrex::Array4<amrex::Real>& t_star_arr,
696 const amrex::Array4<amrex::Real>& q_star_arr,
697 const amrex::Array4<amrex::Real>& t_surf_arr,
698 const amrex::Array4<amrex::Real>& q_surf_arr,
699 const amrex::Array4<amrex::Real>& olen_arr,
700 const amrex::Array4<amrex::Real>& pblh_arr,
701 const amrex::Array4<amrex::Real>& ,
702 const amrex::Array4<amrex::Real>& ,
703 const amrex::Array4<amrex::Real>& )
const
718 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
720 Olen = olen_arr(i,j,k);
726 ustar = u_star_arr(i,j,k);
738 (std::log(zref /
z0) - psi_h);
742 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
744 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
745 umm = std::max(umm,
WSMIN);
751 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
753 }
while ((std::abs(u_star_arr(i,j,k) -
ustar) >
tol) && iter <= max_iters);
755 "Maximum number of MOST iterations reached.");
759 olen_arr(i,j,k) = Olen;
761 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
765 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
768 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
769 (std::log(zref / z0_arr(i,j,k)) - psi_h);
824 const int& max_iters,
825 const amrex::Array4<const amrex::Real>& zref_arr,
826 const amrex::Array4<amrex::Real>& z0_arr,
827 const amrex::Array4<const amrex::Real>& umm_arr,
828 const amrex::Array4<const amrex::Real>& tm_arr,
829 const amrex::Array4<const amrex::Real>& tvm_arr,
830 const amrex::Array4<const amrex::Real>& qvm_arr,
831 const amrex::Array4<amrex::Real>& u_star_arr,
832 const amrex::Array4<amrex::Real>& w_star_arr,
833 const amrex::Array4<amrex::Real>& t_star_arr,
834 const amrex::Array4<amrex::Real>& q_star_arr,
835 const amrex::Array4<amrex::Real>& t_surf_arr,
836 const amrex::Array4<amrex::Real>& q_surf_arr,
837 const amrex::Array4<amrex::Real>& olen_arr,
838 const amrex::Array4<amrex::Real>& pblh_arr,
839 const amrex::Array4<amrex::Real>& ,
840 const amrex::Array4<amrex::Real>& ,
841 const amrex::Array4<amrex::Real>& )
const
856 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
858 Olen = olen_arr(i,j,k);
864 ustar = u_star_arr(i,j,k);
868 (std::log(zref /
z0) - psi_h);
872 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
874 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
875 umm = std::max(umm,
WSMIN);
881 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
883 }
while ((std::abs(u_star_arr(i,j,k) -
ustar) >
tol) && iter <= max_iters);
885 "Maximum number of MOST iterations reached.");
889 olen_arr(i,j,k) = Olen;
891 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
895 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
898 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
899 (std::log(zref / z0_arr(i,j,k)) - psi_h);
950 const int& max_iters,
951 const amrex::Array4<const amrex::Real>& zref_arr,
952 const amrex::Array4<amrex::Real>& z0_arr,
953 const amrex::Array4<const amrex::Real>& umm_arr,
954 const amrex::Array4<const amrex::Real>& tm_arr,
955 const amrex::Array4<const amrex::Real>& tvm_arr,
956 const amrex::Array4<const amrex::Real>& qvm_arr,
957 const amrex::Array4<amrex::Real>& u_star_arr,
958 const amrex::Array4<amrex::Real>& w_star_arr,
959 const amrex::Array4<amrex::Real>& t_star_arr,
960 const amrex::Array4<amrex::Real>& q_star_arr,
961 const amrex::Array4<amrex::Real>& t_surf_arr,
962 const amrex::Array4<amrex::Real>& q_surf_arr,
963 const amrex::Array4<amrex::Real>& olen_arr,
964 const amrex::Array4<amrex::Real>& pblh_arr,
965 const amrex::Array4<amrex::Real>& ,
966 const amrex::Array4<amrex::Real>& ,
967 const amrex::Array4<amrex::Real>& )
const
982 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
984 Olen = olen_arr(i,j,k);
990 ustar = u_star_arr(i,j,k);
995 (std::log(zref /
z0) - psi_h);
999 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1001 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1002 umm = std::max(umm,
WSMIN);
1008 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
1010 }
while ((std::abs(u_star_arr(i,j,k) -
ustar) >
tol) && iter <= max_iters);
1012 "Maximum number of MOST iterations reached.");
1016 olen_arr(i,j,k) = Olen;
1018 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
1022 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1025 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1026 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1077 const int& max_iters,
1078 const amrex::Array4<const amrex::Real>& zref_arr,
1079 const amrex::Array4<amrex::Real>& z0_arr,
1080 const amrex::Array4<const amrex::Real>& umm_arr,
1081 const amrex::Array4<const amrex::Real>& tm_arr,
1082 const amrex::Array4<const amrex::Real>& tvm_arr,
1083 const amrex::Array4<const amrex::Real>& qvm_arr,
1084 const amrex::Array4<amrex::Real>& u_star_arr,
1085 const amrex::Array4<amrex::Real>& w_star_arr,
1086 const amrex::Array4<amrex::Real>& t_star_arr,
1087 const amrex::Array4<amrex::Real>& q_star_arr,
1088 const amrex::Array4<amrex::Real>& t_surf_arr,
1089 const amrex::Array4<amrex::Real>& q_surf_arr,
1090 const amrex::Array4<amrex::Real>& olen_arr,
1091 const amrex::Array4<amrex::Real>& pblh_arr,
1092 const amrex::Array4<amrex::Real>& Hwave_arr,
1093 const amrex::Array4<amrex::Real>& Lwave_arr,
1094 const amrex::Array4<amrex::Real>& )
const
1109 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
1111 Olen = olen_arr(i,j,k);
1117 ustar = u_star_arr(i,j,k);
1123 (std::log(zref /
z0) - psi_h);
1127 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1129 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1130 umm = std::max(umm,
WSMIN);
1136 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
1138 }
while ((std::abs(u_star_arr(i,j,k) -
ustar) >
tol) && iter <= max_iters);
1140 "Maximum number of MOST iterations reached.");
1144 olen_arr(i,j,k) = Olen;
1146 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
1150 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1153 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1154 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1163 #ifdef AMREX_USE_FLOAT
1214 const int& max_iters,
1215 const amrex::Array4<const amrex::Real>& zref_arr,
1216 const amrex::Array4<const amrex::Real>& z0_arr,
1217 const amrex::Array4<const amrex::Real>& umm_arr,
1218 const amrex::Array4<const amrex::Real>& tm_arr,
1219 const amrex::Array4<const amrex::Real>& tvm_arr,
1220 const amrex::Array4<const amrex::Real>& qvm_arr,
1221 const amrex::Array4<amrex::Real>& u_star_arr,
1222 const amrex::Array4<amrex::Real>& w_star_arr,
1223 const amrex::Array4<amrex::Real>& t_star_arr,
1224 const amrex::Array4<amrex::Real>& q_star_arr,
1225 const amrex::Array4<amrex::Real>& t_surf_arr,
1226 const amrex::Array4<amrex::Real>& q_surf_arr,
1227 const amrex::Array4<amrex::Real>& olen_arr,
1228 const amrex::Array4<amrex::Real>& pblh_arr,
1229 const amrex::Array4<amrex::Real>& ,
1230 const amrex::Array4<amrex::Real>& ,
1231 const amrex::Array4<amrex::Real>& )
const
1248 zeta = zref / olen_arr(i,j,k);
1257 if (qv_s_raw >
zero) {
1272 thv_s = tm_arr(i,j,k) * (
one +
epsv*qv_a);
1274 t_surf = tm_arr(i,j,k);
1289 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1291 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1292 umm = std::max(umm,
WSMIN);
1297 ( (thv_a - thv_s) / (umm * umm) );
1315 zeta = (
one -
alpha) * zeta_old +
alpha * Rib * CmPsim * CmPsim / CmPsih;
1318 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1320 "Maximum number of MOST iterations reached.");
1323 olen_arr(i,j,k) = zref / zeta;
1324 u_star_arr(i,j,k) =
mdata.
kappa * umm / CmPsim;
1325 t_star_arr(i,j,k) =
mdata.
kappa * (t_mean - t_surf) / CmPsih;
1328 (u_star_arr(i,j,k) *
mdata.
kappa) + qv_a_raw;
1335 ? (qv_s_raw - qv_a_raw)
1336 : (qv_a_raw - qv_s_raw);
1337 q_star_arr(i,j,k) =
mdata.
kappa * qv_delta / CmPsih;
1396 const int& max_iters,
1397 const amrex::Array4<const amrex::Real>& zref_arr,
1398 const amrex::Array4<amrex::Real>& z0_arr,
1399 const amrex::Array4<const amrex::Real>& umm_arr,
1400 const amrex::Array4<const amrex::Real>& tm_arr,
1401 const amrex::Array4<const amrex::Real>& tvm_arr,
1402 const amrex::Array4<const amrex::Real>& qvm_arr,
1403 const amrex::Array4<amrex::Real>& u_star_arr,
1404 const amrex::Array4<amrex::Real>& w_star_arr,
1405 const amrex::Array4<amrex::Real>& t_star_arr,
1406 const amrex::Array4<amrex::Real>& q_star_arr,
1407 const amrex::Array4<amrex::Real>& t_surf_arr,
1408 const amrex::Array4<amrex::Real>& q_surf_arr,
1409 const amrex::Array4<amrex::Real>& olen_arr,
1410 const amrex::Array4<amrex::Real>& pblh_arr,
1411 const amrex::Array4<amrex::Real>& ,
1412 const amrex::Array4<amrex::Real>& ,
1413 const amrex::Array4<amrex::Real>& )
const
1433 zeta = zref / olen_arr(i,j,k);
1437 if (q_surf_arr(i,j,k) >
zero) {
1438 qv_s = q_surf_arr(i,j,k);
1442 qv_s = qvm_arr(i,j,k);
1444 qv_a = qvm_arr(i,j,k);
1456 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1458 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1459 umm = std::max(umm,
WSMIN);
1466 ( (thv_a - thv_s) / (umm * umm) );
1486 C = std::log(zref / z0_old);
1500 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
1502 "Maximum number of MOST roughness iterations reached.");
1503 C = std::log(zref /
z0);
1513 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1515 "Maximum number of MOST iterations reached.");
1519 olen_arr(i,j,k) = zref / zeta;
1520 u_star_arr(i,j,k) =
mdata.
kappa * umm / CmPsim;
1521 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / CmPsih;
1524 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1527 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / CmPsih;
1536 #ifdef AMREX_USE_FLOAT
1588 const int& max_iters,
1589 const amrex::Array4<const amrex::Real>& zref_arr,
1590 const amrex::Array4<amrex::Real>& z0_arr,
1591 const amrex::Array4<const amrex::Real>& umm_arr,
1592 const amrex::Array4<const amrex::Real>& tm_arr,
1593 const amrex::Array4<const amrex::Real>& tvm_arr,
1594 const amrex::Array4<const amrex::Real>& qvm_arr,
1595 const amrex::Array4<amrex::Real>& u_star_arr,
1596 const amrex::Array4<amrex::Real>& w_star_arr,
1597 const amrex::Array4<amrex::Real>& t_star_arr,
1598 const amrex::Array4<amrex::Real>& q_star_arr,
1599 const amrex::Array4<amrex::Real>& t_surf_arr,
1600 const amrex::Array4<amrex::Real>& q_surf_arr,
1601 const amrex::Array4<amrex::Real>& olen_arr,
1602 const amrex::Array4<amrex::Real>& pblh_arr,
1603 const amrex::Array4<amrex::Real>& ,
1604 const amrex::Array4<amrex::Real>& ,
1605 const amrex::Array4<amrex::Real>& )
const
1625 zeta = zref / olen_arr(i,j,k);
1629 if (q_surf_arr(i,j,k) >
zero) {
1630 qv_s = q_surf_arr(i,j,k);
1634 qv_s = qvm_arr(i,j,k);
1636 qv_a = qvm_arr(i,j,k);
1648 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1650 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1651 umm = std::max(umm,
WSMIN);
1658 ( (thv_a - thv_s) / (umm * umm) );
1678 C = std::log(zref / z0_old);
1684 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
1686 "Maximum number of MOST roughness iterations reached.");
1687 C = std::log(zref /
z0);
1697 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1699 "Maximum number of MOST iterations reached.");
1703 olen_arr(i,j,k) = zref / zeta;
1704 u_star_arr(i,j,k) =
mdata.
kappa * umm / CmPsim;
1705 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / CmPsih;
1708 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1711 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / CmPsih;
1720 #ifdef AMREX_USE_FLOAT
1768 const int& max_iters,
1769 const amrex::Array4<const amrex::Real>& zref_arr,
1770 const amrex::Array4<amrex::Real>& z0_arr,
1771 const amrex::Array4<const amrex::Real>& umm_arr,
1772 const amrex::Array4<const amrex::Real>& tm_arr,
1773 const amrex::Array4<const amrex::Real>& tvm_arr,
1774 const amrex::Array4<const amrex::Real>& qvm_arr,
1775 const amrex::Array4<amrex::Real>& u_star_arr,
1776 const amrex::Array4<amrex::Real>& w_star_arr,
1777 const amrex::Array4<amrex::Real>& t_star_arr,
1778 const amrex::Array4<amrex::Real>& q_star_arr,
1779 const amrex::Array4<amrex::Real>& t_surf_arr,
1780 const amrex::Array4<amrex::Real>& q_surf_arr,
1781 const amrex::Array4<amrex::Real>& olen_arr,
1782 const amrex::Array4<amrex::Real>& pblh_arr,
1783 const amrex::Array4<amrex::Real>& ,
1784 const amrex::Array4<amrex::Real>& ,
1785 const amrex::Array4<amrex::Real>& )
const
1805 zeta = zref / olen_arr(i,j,k);
1809 if (q_surf_arr(i,j,k) >
zero) {
1810 qv_s = q_surf_arr(i,j,k);
1814 qv_s = qvm_arr(i,j,k);
1816 qv_a = qvm_arr(i,j,k);
1828 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1830 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1831 umm = std::max(umm,
WSMIN);
1838 ( (thv_a - thv_s) / (umm * umm) );
1858 C = std::log(zref / z0_old);
1865 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
1867 "Maximum number of MOST roughness iterations reached.");
1868 C = std::log(zref /
z0);
1878 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1880 "Maximum number of MOST iterations reached.");
1884 olen_arr(i,j,k) = zref / zeta;
1885 u_star_arr(i,j,k) =
mdata.
kappa * umm / CmPsim;
1886 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / CmPsih;
1889 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1892 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / CmPsih;
1901 #ifdef AMREX_USE_FLOAT
1949 const int& max_iters,
1950 const amrex::Array4<const amrex::Real>& zref_arr,
1951 const amrex::Array4<amrex::Real>& z0_arr,
1952 const amrex::Array4<const amrex::Real>& umm_arr,
1953 const amrex::Array4<const amrex::Real>& tm_arr,
1954 const amrex::Array4<const amrex::Real>& tvm_arr,
1955 const amrex::Array4<const amrex::Real>& qvm_arr,
1956 const amrex::Array4<amrex::Real>& u_star_arr,
1957 const amrex::Array4<amrex::Real>& w_star_arr,
1958 const amrex::Array4<amrex::Real>& t_star_arr,
1959 const amrex::Array4<amrex::Real>& q_star_arr,
1960 const amrex::Array4<amrex::Real>& t_surf_arr,
1961 const amrex::Array4<amrex::Real>& q_surf_arr,
1962 const amrex::Array4<amrex::Real>& olen_arr,
1963 const amrex::Array4<amrex::Real>& pblh_arr,
1964 const amrex::Array4<amrex::Real>& Hwave_arr,
1965 const amrex::Array4<amrex::Real>& Lwave_arr,
1966 const amrex::Array4<amrex::Real>& )
const
1986 zeta = zref / olen_arr(i,j,k);
1990 if (q_surf_arr(i,j,k) >
zero) {
1991 qv_s = q_surf_arr(i,j,k);
1995 qv_s = qvm_arr(i,j,k);
1997 qv_a = qvm_arr(i,j,k);
2009 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
2011 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
2012 umm = std::max(umm,
WSMIN);
2019 ( (thv_a - thv_s) / (umm * umm) );
2039 C = std::log(zref / z0_old);
2047 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
2049 "Maximum number of MOST roughness iterations reached.");
2050 C = std::log(zref /
z0);
2060 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
2062 "Maximum number of MOST iterations reached.");
2066 olen_arr(i,j,k) = zref / zeta;
2067 u_star_arr(i,j,k) =
mdata.
kappa * umm / CmPsim;
2068 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / CmPsih;
2071 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
2074 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / CmPsih;
2083 #ifdef AMREX_USE_FLOAT
2104 const bool face_is_low =
true,
2106 const int zhi = 0) {
2127 const amrex::Array4<const amrex::Real>& cons_arr,
2128 const amrex::Array4<const amrex::Real>& velx_arr,
2129 const amrex::Array4<const amrex::Real>& vely_arr,
2130 const amrex::Array4<const amrex::Real>& velz_arr,
2131 const amrex::Array4<const amrex::Real>& umm_arr,
2132 const amrex::Array4<const amrex::Real>& qvm_arr,
2133 const amrex::Array4<const amrex::Real>& u_star_arr,
2134 const amrex::Array4<const amrex::Real>& q_star_arr,
2135 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2143 velx =
myhalf * ( vely_arr(i,j,k) + vely_arr(i ,j+1,k) );
2144 vely =
myhalf * ( velz_arr(i,j,k) + velz_arr(i ,j ,k+1) );
2145 }
else if (dir == 1) {
2147 velx =
myhalf * ( velx_arr(i,j,k) + velx_arr(i+1,j ,k) );
2148 vely =
myhalf * ( velz_arr(i,j,k) + velz_arr(i ,j ,k+1) );
2151 velx =
myhalf * ( velx_arr(i,j,k) + velx_arr(i+1,j ,k) );
2152 vely =
myhalf * ( vely_arr(i,j,k) + vely_arr(i ,j+1,k) );
2160 wsp_mean = std::max(wsp_mean,
WSMIN);
2161 if (dir == 2 && !
is_low) {
2164 qv_surf = qvm_arr(i, j, k);
2192 const amrex::Array4<const amrex::Real>& cons_arr,
2193 const amrex::Array4<const amrex::Real>& velx_arr,
2194 const amrex::Array4<const amrex::Real>& vely_arr,
2195 const amrex::Array4<const amrex::Real>& velz_arr,
2196 const amrex::Array4<const amrex::Real>& umm_arr,
2197 const amrex::Array4<const amrex::Real>& tm_arr,
2198 const amrex::Array4<const amrex::Real>& u_star_arr,
2199 const amrex::Array4<const amrex::Real>& t_star_arr,
2200 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2208 velx =
myhalf * ( vely_arr(i,j,k) + vely_arr(i ,j+1,k) );
2209 vely =
myhalf * ( velz_arr(i,j,k) + velz_arr(i ,j ,k+1) );
2210 }
else if (dir == 1) {
2212 velx =
myhalf * ( velx_arr(i,j,k) + velx_arr(i+1,j ,k) );
2213 vely =
myhalf * ( velz_arr(i,j,k) + velz_arr(i ,j ,k+1) );
2216 velx =
myhalf * ( velx_arr(i,j,k) + velx_arr(i+1,j ,k) );
2217 vely =
myhalf * ( vely_arr(i,j,k) + vely_arr(i ,j+1,k) );
2226 if (dir == 2 && !
is_low) {
2228 theta_mean = theta_surf;
2229 theta_surf = tm_arr(i, j, k);
2232 wsp_mean = std::max(wsp_mean,
WSMIN);
2259 const amrex::Array4<const amrex::Real>& cons_arr,
2260 const amrex::Array4<const amrex::Real>& velx_arr,
2261 const amrex::Array4<const amrex::Real>& vely_arr,
2262 const amrex::Array4<const amrex::Real>& velz_arr,
2263 const amrex::Array4<const amrex::Real>& umm_arr,
2264 const amrex::Array4<const amrex::Real>& um_arr,
2265 const amrex::Array4<const amrex::Real>& vm_arr,
2266 const amrex::Array4<const amrex::Real>& ,
2267 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2272 const int ic = (!
is_low && dir == 0) ? i - 1 : i;
2273 const int jc = (!
is_low && dir == 1) ? j - 1 : j;
2274 const int kc = (!
is_low && dir != 0 && dir != 1) ? k - 1 : k;
2280 velx = vely_arr(ic,j,kc);
2281 vely =
fourth * ( velz_arr(ic,j-1,kc ) + velz_arr(ic,j,kc )
2282 + velz_arr(ic,j-1,kc+1) + velz_arr(ic,j,kc+1) );
2284 umean = vm_arr(ic,j,kc);
2285 ustar =
myhalf * (u_star_arr(ic,j-1,kc) + u_star_arr(ic,j,kc));
2286 wsp_mean =
myhalf * (umm_arr(ic,j-1,kc) + umm_arr(ic,j,kc));
2287 }
else if (dir == 1) {
2290 velx = velx_arr(i,jc,kc);
2291 vely =
fourth * ( velz_arr(i-1,jc,kc ) + velz_arr(i,jc,kc )
2292 + velz_arr(i-1,jc,kc+1) + velz_arr(i,jc,kc+1) );
2294 umean = um_arr(i,jc,kc);
2295 ustar =
myhalf * (u_star_arr(i-1,jc,kc) + u_star_arr(i,jc,kc));
2296 wsp_mean =
myhalf * (umm_arr(i-1,jc,kc) + umm_arr(i,jc,kc));
2299 velx = velx_arr(i,j,kc);
2300 vely =
fourth * ( vely_arr(i-1,j ,kc) + vely_arr(i,j ,kc)
2301 + vely_arr(i-1,j+1,kc) + vely_arr(i,j+1,kc) );
2303 umean = um_arr(i,j,kc);
2304 ustar =
myhalf * (u_star_arr(i-1,j,kc) + u_star_arr(i,j,kc));
2305 wsp_mean =
myhalf * (umm_arr(i-1,j,kc) + umm_arr(i,j,kc));
2307 wsp_mean = std::max(wsp_mean,
WSMIN);
2319 stressx = (
is_low) ? stressx : -stressx;
2338 const amrex::Array4<const amrex::Real>& cons_arr,
2339 const amrex::Array4<const amrex::Real>& velx_arr,
2340 const amrex::Array4<const amrex::Real>& vely_arr,
2341 const amrex::Array4<const amrex::Real>& velz_arr,
2342 const amrex::Array4<const amrex::Real>& umm_arr,
2343 const amrex::Array4<const amrex::Real>& ,
2344 const amrex::Array4<const amrex::Real>& vm_arr,
2345 const amrex::Array4<const amrex::Real>& wm_arr,
2346 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2350 const int ic = (!
is_low && dir == 0) ? i - 1 : i;
2351 const int jc = (!
is_low && dir == 1) ? j - 1 : j;
2352 const int kc = (!
is_low && dir != 0 && dir != 1) ? k - 1 : k;
2358 const int klo = amrex::max(k - 1,
m_zlo);
2359 const int khi = amrex::min(k,
m_zhi);
2360 velx =
fourth * ( vely_arr(ic,j ,
klo) + vely_arr(ic,j+1,
klo)
2361 + vely_arr(ic,j ,
khi) + vely_arr(ic,j+1,
khi) );
2362 vely = velz_arr(ic,j,k);
2364 vmean = wm_arr(ic,j,k);
2366 wsp_mean =
myhalf * (umm_arr(ic,j,
klo) + umm_arr(ic,j,
khi));
2367 }
else if (dir == 1) {
2370 const int klo = amrex::max(k - 1,
m_zlo);
2371 const int khi = amrex::min(k,
m_zhi);
2372 velx =
fourth * ( velx_arr(i ,jc,
klo) + velx_arr(i+1,jc,
klo)
2373 + velx_arr(i ,jc,
khi) + velx_arr(i+1,jc,
khi) );
2374 vely = velz_arr(i,jc,k);
2376 vmean = wm_arr(i,jc,k);
2378 wsp_mean =
myhalf * (umm_arr(i,jc,
klo) + umm_arr(i,jc,
khi));
2381 velx =
fourth * ( velx_arr(i ,j-1,kc) + velx_arr(i+1,j-1,kc)
2382 + velx_arr(i ,j ,kc) + velx_arr(i+1,j ,kc) );
2383 vely = vely_arr(i,j,kc);
2385 vmean = vm_arr(i,j,kc);
2386 ustar =
myhalf * (u_star_arr(i,j-1,kc) + u_star_arr(i,j,kc));
2387 wsp_mean =
myhalf * (umm_arr(i,j-1,kc) + umm_arr(i,j,kc));
2389 wsp_mean = std::max(wsp_mean,
WSMIN);
2401 stressy = (
is_low) ? stressy : -stressy;
2407 #ifdef AMREX_USE_FLOAT
2447 const amrex::Array4<const amrex::Real>& cons_arr,
2448 const amrex::Array4<const amrex::Real>& ,
2449 const amrex::Array4<const amrex::Real>& ,
2450 const amrex::Array4<const amrex::Real>& ,
2451 const amrex::Array4<const amrex::Real>& ,
2452 const amrex::Array4<const amrex::Real>& ,
2453 const amrex::Array4<const amrex::Real>& ,
2454 const amrex::Array4<const amrex::Real>& q_star_arr,
2455 const amrex::Array4<const amrex::Real>& )
const
2480 const amrex::Array4<const amrex::Real>& cons_arr,
2481 const amrex::Array4<const amrex::Real>& ,
2482 const amrex::Array4<const amrex::Real>& ,
2483 const amrex::Array4<const amrex::Real>& ,
2484 const amrex::Array4<const amrex::Real>& ,
2485 const amrex::Array4<const amrex::Real>& ,
2486 const amrex::Array4<const amrex::Real>& ,
2487 const amrex::Array4<const amrex::Real>& t_star_arr,
2488 const amrex::Array4<const amrex::Real>& )
const
2513 const amrex::Array4<const amrex::Real>& cons_arr,
2514 const amrex::Array4<const amrex::Real>& velx_arr,
2515 const amrex::Array4<const amrex::Real>& vely_arr,
2516 const amrex::Array4<const amrex::Real>& ,
2517 const amrex::Array4<const amrex::Real>& ,
2518 const amrex::Array4<const amrex::Real>& ,
2519 const amrex::Array4<const amrex::Real>& ,
2520 const amrex::Array4<const amrex::Real>& ,
2521 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2525 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2551 const amrex::Array4<const amrex::Real>& cons_arr,
2552 const amrex::Array4<const amrex::Real>& velx_arr,
2553 const amrex::Array4<const amrex::Real>& vely_arr,
2554 const amrex::Array4<const amrex::Real>& ,
2555 const amrex::Array4<const amrex::Real>& ,
2556 const amrex::Array4<const amrex::Real>& ,
2557 const amrex::Array4<const amrex::Real>& ,
2558 const amrex::Array4<const amrex::Real>& ,
2559 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2562 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2576 #ifdef AMREX_USE_FLOAT
2620 const amrex::Array4<const amrex::Real>& cons_arr,
2621 const amrex::Array4<const amrex::Real>& velx_arr,
2622 const amrex::Array4<const amrex::Real>& vely_arr,
2623 const amrex::Array4<const amrex::Real>& ,
2624 const amrex::Array4<const amrex::Real>& ,
2625 const amrex::Array4<const amrex::Real>& ,
2626 const amrex::Array4<const amrex::Real>& ,
2627 const amrex::Array4<const amrex::Real>& ,
2628 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2657 const amrex::Array4<const amrex::Real>& cons_arr,
2658 const amrex::Array4<const amrex::Real>& velx_arr,
2659 const amrex::Array4<const amrex::Real>& vely_arr,
2660 const amrex::Array4<const amrex::Real>& ,
2661 const amrex::Array4<const amrex::Real>& ,
2662 const amrex::Array4<const amrex::Real>& ,
2663 const amrex::Array4<const amrex::Real>& ,
2664 const amrex::Array4<const amrex::Real>& ,
2665 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2694 const amrex::Array4<const amrex::Real>& cons_arr,
2695 const amrex::Array4<const amrex::Real>& velx_arr,
2696 const amrex::Array4<const amrex::Real>& vely_arr,
2697 const amrex::Array4<const amrex::Real>& ,
2698 const amrex::Array4<const amrex::Real>& ,
2699 const amrex::Array4<const amrex::Real>& ,
2700 const amrex::Array4<const amrex::Real>& ,
2701 const amrex::Array4<const amrex::Real>& ,
2702 const amrex::Array4<const amrex::Real>& )
const
2707 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2731 const amrex::Array4<const amrex::Real>& cons_arr,
2732 const amrex::Array4<const amrex::Real>& velx_arr,
2733 const amrex::Array4<const amrex::Real>& vely_arr,
2734 const amrex::Array4<const amrex::Real>& ,
2735 const amrex::Array4<const amrex::Real>& ,
2736 const amrex::Array4<const amrex::Real>& ,
2737 const amrex::Array4<const amrex::Real>& ,
2738 const amrex::Array4<const amrex::Real>& ,
2739 const amrex::Array4<const amrex::Real>& )
const
2743 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2788 const amrex::Array4<const amrex::Real>& cons_arr,
2789 const amrex::Array4<const amrex::Real>& velx_arr,
2790 const amrex::Array4<const amrex::Real>& vely_arr,
2791 const amrex::Array4<const amrex::Real>& ,
2792 const amrex::Array4<const amrex::Real>& ,
2793 const amrex::Array4<const amrex::Real>& ,
2794 const amrex::Array4<const amrex::Real>& ,
2795 const amrex::Array4<const amrex::Real>& q_star_arr,
2796 const amrex::Array4<const amrex::Real>& )
const
2804 amrex::Real wsp = std::sqrt(velx*velx + vely*vely);
2826 const amrex::Array4<const amrex::Real>& cons_arr,
2827 const amrex::Array4<const amrex::Real>& velx_arr,
2828 const amrex::Array4<const amrex::Real>& vely_arr,
2829 const amrex::Array4<const amrex::Real>& ,
2830 const amrex::Array4<const amrex::Real>& ,
2831 const amrex::Array4<const amrex::Real>& ,
2832 const amrex::Array4<const amrex::Real>& ,
2833 const amrex::Array4<const amrex::Real>& t_star_arr,
2834 const amrex::Array4<const amrex::Real>& )
const
2842 amrex::Real wsp = std::sqrt(velx*velx + vely*vely);
2864 const amrex::Array4<const amrex::Real>& cons_arr,
2865 const amrex::Array4<const amrex::Real>& velx_arr,
2866 const amrex::Array4<const amrex::Real>& vely_arr,
2867 const amrex::Array4<const amrex::Real>& ,
2868 const amrex::Array4<const amrex::Real>& ,
2869 const amrex::Array4<const amrex::Real>& ,
2870 const amrex::Array4<const amrex::Real>& ,
2871 const amrex::Array4<const amrex::Real>& ,
2872 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2876 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2902 const amrex::Array4<const amrex::Real>& cons_arr,
2903 const amrex::Array4<const amrex::Real>& velx_arr,
2904 const amrex::Array4<const amrex::Real>& vely_arr,
2905 const amrex::Array4<const amrex::Real>& ,
2906 const amrex::Array4<const amrex::Real>& ,
2907 const amrex::Array4<const amrex::Real>& ,
2908 const amrex::Array4<const amrex::Real>& ,
2909 const amrex::Array4<const amrex::Real>& ,
2910 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2913 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2927 #ifdef AMREX_USE_FLOAT
2961 const amrex::Array4<const amrex::Real>& cons_arr,
2962 const amrex::Array4<const amrex::Real>& ,
2963 const amrex::Array4<const amrex::Real>& ,
2964 const amrex::Array4<const amrex::Real>& ,
2965 const amrex::Array4<const amrex::Real>& ,
2966 const amrex::Array4<const amrex::Real>& qvm_arr,
2967 const amrex::Array4<const amrex::Real>& ,
2968 const amrex::Array4<const amrex::Real>& q_star_arr,
2969 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2995 const amrex::Array4<const amrex::Real>& cons_arr,
2996 const amrex::Array4<const amrex::Real>& ,
2997 const amrex::Array4<const amrex::Real>& ,
2998 const amrex::Array4<const amrex::Real>& ,
2999 const amrex::Array4<const amrex::Real>& ,
3000 const amrex::Array4<const amrex::Real>& tm_arr,
3001 const amrex::Array4<const amrex::Real>& ,
3002 const amrex::Array4<const amrex::Real>& t_star_arr,
3003 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
3029 const amrex::Array4<const amrex::Real>& cons_arr,
3030 const amrex::Array4<const amrex::Real>& ,
3031 const amrex::Array4<const amrex::Real>& ,
3032 const amrex::Array4<const amrex::Real>& ,
3033 const amrex::Array4<const amrex::Real>& ,
3034 const amrex::Array4<const amrex::Real>& ,
3035 const amrex::Array4<const amrex::Real>& ,
3036 const amrex::Array4<const amrex::Real>& ,
3037 const amrex::Array4<const amrex::Real>& u_star_arr)
const
3061 const amrex::Array4<const amrex::Real>& ,
3062 const amrex::Array4<const amrex::Real>& ,
3063 const amrex::Array4<const amrex::Real>& ,
3064 const amrex::Array4<const amrex::Real>& ,
3065 const amrex::Array4<const amrex::Real>& ,
3066 const amrex::Array4<const amrex::Real>& ,
3067 const amrex::Array4<const amrex::Real>& ,
3068 const amrex::Array4<const amrex::Real>& ,
3069 const amrex::Array4<const amrex::Real>& )
const
3078 #ifdef AMREX_USE_FLOAT
constexpr amrex::Real epsv
Definition: ERF_Constants.H:52
constexpr amrex::Real bogus_large_value
Definition: ERF_Constants.H:19
#define Rho_comp
Definition: ERF_IndexDefines.H:42
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:43
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:48
Real z0
Definition: ERF_InitCustomPertVels_ScalarAdvDiff.H:8
const int klo
Definition: ERF_InitCustomPert_ABL.H:75
const int khi
Definition: ERF_InitCustomPert_Bubble.H:21
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(m_cloud_chamber_config.active, "Cloud Chamber: initializer reached without a parsed configuration")
constexpr amrex::Real most_min_wind_speed
Definition: ERF_MOSTStress.H:14
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real WaveCoupled_roughness(amrex::Real Hwave, amrex::Real Lwave, amrex::Real eps, amrex::Real ustar, amrex::Real nu, bool visc)
Definition: ERF_MOSTUtils.H:325
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real COARE3_roughness(amrex::Real zref, amrex::Real umm, amrex::Real ustar, amrex::Real nu, bool visc)
Definition: ERF_MOSTUtils.H:262
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Mod_Charnock_roughness(amrex::Real ustar, amrex::Real Cnk_b)
Definition: ERF_MOSTUtils.H:241
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real air_viscosity(amrex::Real T_degK)
Definition: ERF_MOSTUtils.H:198
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Donelan_roughness(amrex::Real ustar, amrex::Real nu, bool visc)
Definition: ERF_MOSTUtils.H:293
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Charnock_roughness(amrex::Real ustar, amrex::Real Cnk_a, amrex::Real nu, bool visc)
Definition: ERF_MOSTUtils.H:217
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:37
constexpr amrex::Real fourth
Definition: ERF_NumericalConstants.H:42
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:36
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:41
amrex::Real Real
Definition: ERF_ShocInterface.H:19
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=amrex::Real(0))
Definition: ERF_Wstar.H:13
@ ustar
Definition: ERF_SLM.H:28
@ qstar
Definition: ERF_SLM.H:30
@ tstar
Definition: ERF_SLM.H:29
@ rho
Definition: ERF_Kessler.H:25
@ theta
Definition: ERF_Kessler.H:26
@ qv
Definition: ERF_Kessler.H:31
@ q
Definition: ERF_WSM6.H:273
Definition: ERF_MOSTStress.H:84
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:187
most_data mdata
Definition: ERF_MOSTStress.H:180
adiabatic_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool use_visc)
Definition: ERF_MOSTStress.H:93
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 > &zref_arr, 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:116
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:185
similarity_funs sfuns
Definition: ERF_MOSTStress.H:181
Definition: ERF_MOSTStress.H:297
similarity_funs sfuns
Definition: ERF_MOSTStress.H:382
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:388
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:386
most_data mdata
Definition: ERF_MOSTStress.H:381
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 > &zref_arr, 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:325
adiabatic_donelan(amrex::Real Tflux, amrex::Real Qvflux, bool use_visc)
Definition: ERF_MOSTStress.H:304
Definition: ERF_MOSTStress.H:195
adiabatic_mod_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool use_visc)
Definition: ERF_MOSTStress.H:203
similarity_funs sfuns
Definition: ERF_MOSTStress.H:283
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:287
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:289
most_data mdata
Definition: ERF_MOSTStress.H:282
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 > &zref_arr, 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:227
Definition: ERF_MOSTStress.H:396
const amrex::Real eps
Definition: ERF_MOSTStress.H:491
adiabatic_wave_coupled(amrex::Real Tflux, amrex::Real Qvflux, bool use_visc)
Definition: ERF_MOSTStress.H:403
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:486
most_data mdata
Definition: ERF_MOSTStress.H:481
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:493
similarity_funs sfuns
Definition: ERF_MOSTStress.H:482
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 > &zref_arr, 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 > &Hwave_arr, const amrex::Array4< amrex::Real > &Lwave_arr, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:424
Definition: ERF_MOSTStress.H:20
adiabatic(amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:27
similarity_funs sfuns
Definition: ERF_MOSTStress.H:76
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 > &zref_arr, 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:46
most_data mdata
Definition: ERF_MOSTStress.H:75
Definition: ERF_MOSTStress.H:2589
bulk_coeff_flux(amrex::Real m_Cd, amrex::Real m_Ch, amrex::Real m_Cq)
Definition: ERF_MOSTStress.H:2597
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_v_flux(const int &i, const int &j, const int &k, const int &, 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 > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &) const
Definition: ERF_MOSTStress.H:2727
most_data mdata
Definition: ERF_MOSTStress.H:2755
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_t_flux(const int &i, const int &j, const int &k, const int &, 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 > &, 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:2653
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_u_flux(const int &i, const int &j, const int &k, const int &, 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 > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &) const
Definition: ERF_MOSTStress.H:2690
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_q_flux(const int &i, const int &j, const int &k, const int &, 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 > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &q_surf_arr) const
Definition: ERF_MOSTStress.H:2616
Definition: ERF_MOSTStress.H:2423
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_t_flux(const int &i, const int &j, const int &k, const int &, 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 > &, const amrex::Array4< const amrex::Real > &t_star_arr, const amrex::Array4< const amrex::Real > &) const
Definition: ERF_MOSTStress.H:2476
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_q_flux(const int &i, const int &j, const int &k, const int &, 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 > &, const amrex::Array4< const amrex::Real > &q_star_arr, const amrex::Array4< const amrex::Real > &) const
Definition: ERF_MOSTStress.H:2443
custom_flux(bool specified_rho_surf)
Definition: ERF_MOSTStress.H:2429
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_v_flux(const int &i, const int &j, const int &k, const int &, 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 > &, 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:2547
const bool fluxes_include_rho
Definition: ERF_MOSTStress.H:2581
const amrex::Real eps
Definition: ERF_MOSTStress.H:2579
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_u_flux(const int &i, const int &j, const int &k, const int &, 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 > &, 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:2509
Definition: ERF_MOSTStress.H:2099
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_v_flux(const int &i, const int &j, const int &k, const int &dir, 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 > &velz_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &vm_arr, const amrex::Array4< const amrex::Real > &wm_arr, const amrex::Array4< const amrex::Real > &u_star_arr) const
Definition: ERF_MOSTStress.H:2334
const amrex::Real eps
Definition: ERF_MOSTStress.H:2410
moeng_flux(const amrex::Real wsmin=0.1, const bool face_is_low=true, const int zlo=0, const int zhi=0)
Definition: ERF_MOSTStress.H:2103
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_t_flux(const int &i, const int &j, const int &k, const int &dir, 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 > &velz_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:2188
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_q_flux(const int &i, const int &j, const int &k, const int &dir, 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 > &velz_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:2123
int m_zhi
Definition: ERF_MOSTStress.H:2415
int m_zlo
Definition: ERF_MOSTStress.H:2414
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_u_flux(const int &i, const int &j, const int &k, const int &dir, 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 > &velz_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &um_arr, const amrex::Array4< const amrex::Real > &vm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &u_star_arr) const
Definition: ERF_MOSTStress.H:2255
amrex::Real WSMIN
Definition: ERF_MOSTStress.H:2413
bool is_low
Definition: ERF_MOSTStress.H:2412
Definition: ERF_MOSTUtils.H:10
amrex::Real surf_moist_flux
Moisture flux.
Definition: ERF_MOSTUtils.H:16
amrex::Real Cnk_b2
Modified Charnock Eq (4) https://doi.org/amrex::Real(10.1175)/JAMC-D-17-amrex::Real(0137....
Definition: ERF_MOSTUtils.H:20
amrex::Real Cnk_b
Modified Charnock derived quantity.
Definition: ERF_MOSTUtils.H:22
amrex::Real Ch
Definition: ERF_MOSTUtils.H:26
amrex::Real Cnk_d
Modified Charnock Eq (4) https://doi.org/amrex::Real(10.1175)/JAMC-D-17-amrex::Real(0137....
Definition: ERF_MOSTUtils.H:21
amrex::Real kappa
von Karman constant
Definition: ERF_MOSTUtils.H:13
amrex::Real gravity
Acceleration due to gravity (m/s^2)
Definition: ERF_MOSTUtils.H:14
amrex::Real Cnk_a
Standard Charnock constant https://doi.org/amrex::Real(10.1175)/JAMC-D-17-amrex::Real(0137....
Definition: ERF_MOSTUtils.H:18
amrex::Real Cd
Definition: ERF_MOSTUtils.H:25
amrex::Real Cq
Definition: ERF_MOSTUtils.H:27
const amrex::Real Bjr_beta
Definition: ERF_MOSTUtils.H:29
amrex::Real Cnk_b1
Modified Charnock Eq (4) https://doi.org/amrex::Real(10.1175)/JAMC-D-17-amrex::Real(0137....
Definition: ERF_MOSTUtils.H:19
bool visc
Use viscous Charnock formulation.
Definition: ERF_MOSTUtils.H:23
amrex::Real surf_temp_flux
Heat flux TODO: decide whether this is <θ'w'> or <θv'w'> under moist conditions.
Definition: ERF_MOSTUtils.H:15
Definition: ERF_MOSTStress.H:2763
rico_flux(amrex::Real l_theta_z0, amrex::Real l_qsat_z0)
Definition: ERF_MOSTStress.H:2770
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_v_flux(const int &i, const int &j, const int &k, const int &, 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 > &, 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:2898
amrex::Real qsat_z0
Definition: ERF_MOSTStress.H:2933
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_q_flux(const int &i, const int &j, const int &k, const int &, 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 > &, 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:2784
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_t_flux(const int &i, const int &j, const int &k, const int &, 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 > &, 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:2822
const amrex::Real eps
Definition: ERF_MOSTStress.H:2930
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_u_flux(const int &i, const int &j, const int &k, const int &, 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 > &, 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:2860
amrex::Real theta_z0
Definition: ERF_MOSTStress.H:2932
Definition: ERF_MOSTStress.H:2941
rotate_flux()
Definition: ERF_MOSTStress.H:2945
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_t_flux(const int &i, const int &j, const int &k, const int &, 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 > &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:2991
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_q_flux(const int &i, const int &j, const int &k, const int &, 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 > &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:2957
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_u_flux(const int &i, const int &j, const int &k, const int &, 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 > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &u_star_arr) const
Definition: ERF_MOSTStress.H:3025
const amrex::Real eps
Definition: ERF_MOSTStress.H:3081
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_v_flux(const int &, 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 amrex::Array4< const amrex::Real > &) const
Definition: ERF_MOSTStress.H:3057
Definition: ERF_MOSTUtils.H:37
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m(amrex::Real zeta) const
Definition: ERF_MOSTUtils.H:102
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h2(amrex::Real zeta) const
Definition: ERF_MOSTUtils.H:74
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h(amrex::Real zeta) const
Definition: ERF_MOSTUtils.H:121
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m2(amrex::Real zeta) const
Definition: ERF_MOSTUtils.H:49
Definition: ERF_MOSTStress.H:648
const amrex::Real tol
Definition: ERF_MOSTStress.H:777
similarity_funs sfuns
Definition: ERF_MOSTStress.H:776
most_data mdata
Definition: ERF_MOSTStress.H:774
bool spec_qflux
Definition: ERF_MOSTStress.H:775
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 > &zref_arr, 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:683
surface_flux_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool use_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:658
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:778
Definition: ERF_MOSTStress.H:916
surface_flux_donelan(amrex::Real Tflux, amrex::Real Qvflux, bool use_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:924
bool spec_qflux
Definition: ERF_MOSTStress.H:1032
const amrex::Real tol
Definition: ERF_MOSTStress.H:1034
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1035
most_data mdata
Definition: ERF_MOSTStress.H:1031
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1033
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 > &zref_arr, 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:947
Definition: ERF_MOSTStress.H:786
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 > &zref_arr, 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:821
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:908
most_data mdata
Definition: ERF_MOSTStress.H:904
surface_flux_mod_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool use_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:795
bool spec_qflux
Definition: ERF_MOSTStress.H:905
const amrex::Real tol
Definition: ERF_MOSTStress.H:907
similarity_funs sfuns
Definition: ERF_MOSTStress.H:906
Definition: ERF_MOSTStress.H:1043
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1168
most_data mdata
Definition: ERF_MOSTStress.H:1159
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1161
const amrex::Real tol
Definition: ERF_MOSTStress.H:1162
surface_flux_wave_coupled(amrex::Real Tflux, amrex::Real Qvflux, bool use_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:1051
bool spec_qflux
Definition: ERF_MOSTStress.H:1160
const amrex::Real eps
Definition: ERF_MOSTStress.H:1166
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 > &zref_arr, 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 > &) const
Definition: ERF_MOSTStress.H:1074
Definition: ERF_MOSTStress.H:501
similarity_funs sfuns
Definition: ERF_MOSTStress.H:636
const amrex::Real USTARMIN
Definition: ERF_MOSTStress.H:639
surface_flux(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:509
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 > &zref_arr, 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:530
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:638
most_data mdata
Definition: ERF_MOSTStress.H:634
const amrex::Real tol
Definition: ERF_MOSTStress.H:637
const amrex::Real alpha
Definition: ERF_MOSTStress.H:640
bool spec_qflux
Definition: ERF_MOSTStress.H:635
Definition: ERF_MOSTStress.H:1358
most_data mdata
Definition: ERF_MOSTStress.H:1532
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 > &zref_arr, 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:1393
bool spec_qflux
Definition: ERF_MOSTStress.H:1533
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:1539
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1541
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1542
surface_temp_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool use_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:1368
const amrex::Real tol
Definition: ERF_MOSTStress.H:1535
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1534
Definition: ERF_MOSTStress.H:1734
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1899
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 > &zref_arr, 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:1765
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:1904
surface_temp_donelan(amrex::Real Tflux, amrex::Real Qvflux, bool use_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:1742
most_data mdata
Definition: ERF_MOSTStress.H:1897
const amrex::Real tol
Definition: ERF_MOSTStress.H:1900
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1907
bool spec_qflux
Definition: ERF_MOSTStress.H:1898
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1906
Definition: ERF_MOSTStress.H:1550
surface_temp_mod_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool use_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:1559
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1718
const amrex::Real tol
Definition: ERF_MOSTStress.H:1719
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:1723
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1726
most_data mdata
Definition: ERF_MOSTStress.H:1716
bool spec_qflux
Definition: ERF_MOSTStress.H:1717
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 > &zref_arr, 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:1585
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1725
Definition: ERF_MOSTStress.H:1915
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:2087
const amrex::Real eps
Definition: ERF_MOSTStress.H:2088
const amrex::Real tol
Definition: ERF_MOSTStress.H:2082
most_data mdata
Definition: ERF_MOSTStress.H:2079
const amrex::Real alpha
Definition: ERF_MOSTStress.H:2090
surface_temp_wave_coupled(amrex::Real Tflux, amrex::Real Qvflux, bool use_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:1923
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 > &zref_arr, 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 > &) const
Definition: ERF_MOSTStress.H:1946
similarity_funs sfuns
Definition: ERF_MOSTStress.H:2081
bool spec_qflux
Definition: ERF_MOSTStress.H:2080
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:2091
Definition: ERF_MOSTStress.H:1176
int dir
Definition: ERF_MOSTStress.H:1345
surface_temp(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux, int face_dir, bool face_is_low)
Definition: ERF_MOSTStress.H:1186
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1344
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 > &zref_arr, 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:1211
const amrex::Real tol
Definition: ERF_MOSTStress.H:1348
bool spec_qflux
Definition: ERF_MOSTStress.H:1343
bool is_low
Definition: ERF_MOSTStress.H:1346
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1349
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1350
most_data mdata
Definition: ERF_MOSTStress.H:1342