1 #ifndef ERF_MOSTStress_H
2 #define ERF_MOSTStress_H
60 return ( (psi_k_m + zeta*zeta*psi_c_m) / (
one + zeta*zeta) );
79 return ( (psi_k_h + zeta*zeta*psi_c_h) / (
one + zeta*zeta) );
101 AMREX_GPU_HOST_DEVICE
155 const amrex::Array4<const amrex::Real>& zref_arr,
156 const amrex::Array4<const amrex::Real>& z0_arr,
157 const amrex::Array4<const amrex::Real>& umm_arr,
158 const amrex::Array4<const amrex::Real>& ,
159 const amrex::Array4<const amrex::Real>& ,
160 const amrex::Array4<const amrex::Real>& ,
161 const amrex::Array4<amrex::Real>& u_star_arr,
162 const amrex::Array4<amrex::Real>& ,
163 const amrex::Array4<amrex::Real>& t_star_arr,
164 const amrex::Array4<amrex::Real>& q_star_arr,
165 const amrex::Array4<amrex::Real>& ,
166 const amrex::Array4<amrex::Real>& ,
167 const amrex::Array4<amrex::Real>& olen_arr,
168 const amrex::Array4<amrex::Real>& ,
169 const amrex::Array4<amrex::Real>& ,
170 const amrex::Array4<amrex::Real>& ,
171 const amrex::Array4<amrex::Real>& )
const
174 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));
175 t_star_arr(i,j,k) =
zero;
176 q_star_arr(i,j,k) =
zero;
207 const int& max_iters,
208 const amrex::Array4<const amrex::Real>& zref_arr,
209 const amrex::Array4<amrex::Real>& z0_arr,
210 const amrex::Array4<const amrex::Real>& umm_arr,
211 const amrex::Array4<const amrex::Real>& tm_arr,
212 const amrex::Array4<const amrex::Real>& ,
213 const amrex::Array4<const amrex::Real>& ,
214 const amrex::Array4<amrex::Real>& u_star_arr,
215 const amrex::Array4<amrex::Real>& ,
216 const amrex::Array4<amrex::Real>& t_star_arr,
217 const amrex::Array4<amrex::Real>& q_star_arr,
218 const amrex::Array4<amrex::Real>& ,
219 const amrex::Array4<amrex::Real>& ,
220 const amrex::Array4<amrex::Real>& olen_arr,
221 const amrex::Array4<amrex::Real>& ,
222 const amrex::Array4<amrex::Real>& ,
223 const amrex::Array4<amrex::Real>& ,
224 const amrex::Array4<amrex::Real>& )
const
241 C = std::log(zref / z0_old);
253 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
254 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
255 "Maximum number of MOST roughness iterations reached.");
256 C = std::log(zref /
z0);
261 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
262 t_star_arr(i,j,k) =
zero;
263 q_star_arr(i,j,k) =
zero;
269 #ifdef AMREX_USE_FLOAT
299 const int& max_iters,
300 const amrex::Array4<const amrex::Real>& zref_arr,
301 const amrex::Array4<amrex::Real>& z0_arr,
302 const amrex::Array4<const amrex::Real>& umm_arr,
303 const amrex::Array4<const amrex::Real>& ,
304 const amrex::Array4<const amrex::Real>& ,
305 const amrex::Array4<const amrex::Real>& ,
306 const amrex::Array4<amrex::Real>& u_star_arr,
307 const amrex::Array4<amrex::Real>& ,
308 const amrex::Array4<amrex::Real>& t_star_arr,
309 const amrex::Array4<amrex::Real>& q_star_arr,
310 const amrex::Array4<amrex::Real>& ,
311 const amrex::Array4<amrex::Real>& ,
312 const amrex::Array4<amrex::Real>& olen_arr,
313 const amrex::Array4<amrex::Real>& ,
314 const amrex::Array4<amrex::Real>& ,
315 const amrex::Array4<amrex::Real>& ,
316 const amrex::Array4<amrex::Real>& )
const
333 C = std::log(zref / z0_old);
338 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
339 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
340 "Maximum number of MOST roughness iterations reached.");
341 C = std::log(zref /
z0);
346 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
347 t_star_arr(i,j,k) =
zero;
348 q_star_arr(i,j,k) =
zero;
354 #ifdef AMREX_USE_FLOAT
381 const int& max_iters,
382 const amrex::Array4<const amrex::Real>& zref_arr,
383 const amrex::Array4<amrex::Real>& z0_arr,
384 const amrex::Array4<const amrex::Real>& umm_arr,
385 const amrex::Array4<const amrex::Real>& ,
386 const amrex::Array4<const amrex::Real>& ,
387 const amrex::Array4<const amrex::Real>& ,
388 const amrex::Array4<amrex::Real>& u_star_arr,
389 const amrex::Array4<amrex::Real>& ,
390 const amrex::Array4<amrex::Real>& t_star_arr,
391 const amrex::Array4<amrex::Real>& q_star_arr,
392 const amrex::Array4<amrex::Real>& ,
393 const amrex::Array4<amrex::Real>& ,
394 const amrex::Array4<amrex::Real>& olen_arr,
395 const amrex::Array4<amrex::Real>& ,
396 const amrex::Array4<amrex::Real>& ,
397 const amrex::Array4<amrex::Real>& ,
398 const amrex::Array4<amrex::Real>& )
const
405 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
407 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
410 ustar = u_star_arr(i,j,k);
412 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref /
z0);
414 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
415 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
416 "Maximum number of MOST iterations reached.");
421 t_star_arr(i,j,k) =
zero;
422 q_star_arr(i,j,k) =
zero;
451 const int& max_iters,
452 const amrex::Array4<const amrex::Real>& zref_arr,
453 const amrex::Array4<amrex::Real>& z0_arr,
454 const amrex::Array4<const amrex::Real>& umm_arr,
455 const amrex::Array4<const amrex::Real>& ,
456 const amrex::Array4<const amrex::Real>& ,
457 const amrex::Array4<const amrex::Real>& ,
458 const amrex::Array4<amrex::Real>& u_star_arr,
459 const amrex::Array4<amrex::Real>& ,
460 const amrex::Array4<amrex::Real>& t_star_arr,
461 const amrex::Array4<amrex::Real>& q_star_arr,
462 const amrex::Array4<amrex::Real>& ,
463 const amrex::Array4<amrex::Real>& ,
464 const amrex::Array4<amrex::Real>& olen_arr,
465 const amrex::Array4<amrex::Real>& ,
466 const amrex::Array4<amrex::Real>& Hwave_arr,
467 const amrex::Array4<amrex::Real>& Lwave_arr,
468 const amrex::Array4<amrex::Real>& eta_arr)
const
476 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
477 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
478 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
479 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
480 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
482 ustar = u_star_arr(i,j,k);
483 z0 = std::min( std::max(
amrex::Real(1200.0) * Hwave_arr(i,j,k) * std::pow( Hwave_arr(i,j,k)/(Lwave_arr(i,j,k)+
eps),
amrex::Real(4.5) )
485 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref /
z0);
487 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
488 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
489 "Maximum number of MOST iterations reached.");
494 t_star_arr(i,j,k) =
zero;
495 q_star_arr(i,j,k) =
zero;
502 #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);
574 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
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));
581 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
582 umm = std::max(umm,
WSMIN);
588 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref / z0_arr(i,j,k)) - psi_m);
590 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
591 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
592 "Maximum number of MOST iterations reached.");
595 olen_arr(i,j,k) = Olen;
597 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
601 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
604 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
605 (std::log(zref / z0_arr(i,j,k)) - psi_h);
642 const int& max_iters,
643 const amrex::Array4<const amrex::Real>& zref_arr,
644 const amrex::Array4<amrex::Real>& z0_arr,
645 const amrex::Array4<const amrex::Real>& umm_arr,
646 const amrex::Array4<const amrex::Real>& tm_arr,
647 const amrex::Array4<const amrex::Real>& tvm_arr,
648 const amrex::Array4<const amrex::Real>& qvm_arr,
649 const amrex::Array4<amrex::Real>& u_star_arr,
650 const amrex::Array4<amrex::Real>& w_star_arr,
651 const amrex::Array4<amrex::Real>& t_star_arr,
652 const amrex::Array4<amrex::Real>& q_star_arr,
653 const amrex::Array4<amrex::Real>& t_surf_arr,
654 const amrex::Array4<amrex::Real>& q_surf_arr,
655 const amrex::Array4<amrex::Real>& olen_arr,
656 const amrex::Array4<amrex::Real>& pblh_arr,
657 const amrex::Array4<amrex::Real>& ,
658 const amrex::Array4<amrex::Real>& ,
659 const amrex::Array4<amrex::Real>& )
const
674 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
676 Olen = olen_arr(i,j,k);
682 ustar = u_star_arr(i,j,k);
692 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
693 (std::log(zref / z0_arr(i,j,k)) - psi_h);
697 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
699 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
700 umm = std::max(umm,
WSMIN);
706 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
708 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
709 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
710 "Maximum number of MOST iterations reached.");
714 olen_arr(i,j,k) = Olen;
716 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
720 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
723 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
724 (std::log(zref / z0_arr(i,j,k)) - psi_h);
760 const int& max_iters,
761 const amrex::Array4<const amrex::Real>& zref_arr,
762 const amrex::Array4<amrex::Real>& z0_arr,
763 const amrex::Array4<const amrex::Real>& umm_arr,
764 const amrex::Array4<const amrex::Real>& tm_arr,
765 const amrex::Array4<const amrex::Real>& tvm_arr,
766 const amrex::Array4<const amrex::Real>& qvm_arr,
767 const amrex::Array4<amrex::Real>& u_star_arr,
768 const amrex::Array4<amrex::Real>& w_star_arr,
769 const amrex::Array4<amrex::Real>& t_star_arr,
770 const amrex::Array4<amrex::Real>& q_star_arr,
771 const amrex::Array4<amrex::Real>& t_surf_arr,
772 const amrex::Array4<amrex::Real>& q_surf_arr,
773 const amrex::Array4<amrex::Real>& olen_arr,
774 const amrex::Array4<amrex::Real>& pblh_arr,
775 const amrex::Array4<amrex::Real>& ,
776 const amrex::Array4<amrex::Real>& ,
777 const amrex::Array4<amrex::Real>& )
const
792 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
794 Olen = olen_arr(i,j,k);
800 ustar = u_star_arr(i,j,k);
803 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
804 (std::log(zref / z0_arr(i,j,k)) - psi_h);
808 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
810 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
811 umm = std::max(umm,
WSMIN);
817 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
819 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
820 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
821 "Maximum number of MOST iterations reached.");
825 olen_arr(i,j,k) = Olen;
827 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
831 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
834 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
835 (std::log(zref / z0_arr(i,j,k)) - psi_h);
868 const int& max_iters,
869 const amrex::Array4<const amrex::Real>& zref_arr,
870 const amrex::Array4<amrex::Real>& z0_arr,
871 const amrex::Array4<const amrex::Real>& umm_arr,
872 const amrex::Array4<const amrex::Real>& tm_arr,
873 const amrex::Array4<const amrex::Real>& tvm_arr,
874 const amrex::Array4<const amrex::Real>& qvm_arr,
875 const amrex::Array4<amrex::Real>& u_star_arr,
876 const amrex::Array4<amrex::Real>& w_star_arr,
877 const amrex::Array4<amrex::Real>& t_star_arr,
878 const amrex::Array4<amrex::Real>& q_star_arr,
879 const amrex::Array4<amrex::Real>& t_surf_arr,
880 const amrex::Array4<amrex::Real>& q_surf_arr,
881 const amrex::Array4<amrex::Real>& olen_arr,
882 const amrex::Array4<amrex::Real>& pblh_arr,
883 const amrex::Array4<amrex::Real>& ,
884 const amrex::Array4<amrex::Real>& ,
885 const amrex::Array4<amrex::Real>& )
const
900 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
902 Olen = olen_arr(i,j,k);
908 ustar = u_star_arr(i,j,k);
911 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
912 (std::log(zref / z0_arr(i,j,k)) - psi_h);
916 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
918 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
919 umm = std::max(umm,
WSMIN);
925 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
927 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
928 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
929 "Maximum number of MOST iterations reached.");
933 olen_arr(i,j,k) = Olen;
935 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
939 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
942 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
943 (std::log(zref / z0_arr(i,j,k)) - psi_h);
976 const int& max_iters,
977 const amrex::Array4<const amrex::Real>& zref_arr,
978 const amrex::Array4<amrex::Real>& z0_arr,
979 const amrex::Array4<const amrex::Real>& umm_arr,
980 const amrex::Array4<const amrex::Real>& tm_arr,
981 const amrex::Array4<const amrex::Real>& tvm_arr,
982 const amrex::Array4<const amrex::Real>& qvm_arr,
983 const amrex::Array4<amrex::Real>& u_star_arr,
984 const amrex::Array4<amrex::Real>& w_star_arr,
985 const amrex::Array4<amrex::Real>& t_star_arr,
986 const amrex::Array4<amrex::Real>& q_star_arr,
987 const amrex::Array4<amrex::Real>& t_surf_arr,
988 const amrex::Array4<amrex::Real>& q_surf_arr,
989 const amrex::Array4<amrex::Real>& olen_arr,
990 const amrex::Array4<amrex::Real>& pblh_arr,
991 const amrex::Array4<amrex::Real>& Hwave_arr,
992 const amrex::Array4<amrex::Real>& Lwave_arr,
993 const amrex::Array4<amrex::Real>& eta_arr)
const
1007 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1008 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1009 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1010 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1013 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
1015 Olen = olen_arr(i,j,k);
1021 ustar = u_star_arr(i,j,k);
1022 z0 = std::min( std::max(
amrex::Real(1200.0) * Hwave_arr(i,j,k) * std::pow( Hwave_arr(i,j,k)/(Lwave_arr(i,j,k)+
eps),
amrex::Real(4.5) )
1025 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1026 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1030 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1032 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1033 umm = std::max(umm,
WSMIN);
1039 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
1041 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1042 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1043 "Maximum number of MOST iterations reached.");
1047 olen_arr(i,j,k) = Olen;
1049 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
1053 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1056 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1057 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1066 #ifdef AMREX_USE_FLOAT
1097 const int& max_iters,
1098 const amrex::Array4<const amrex::Real>& zref_arr,
1099 const amrex::Array4<const amrex::Real>& z0_arr,
1100 const amrex::Array4<const amrex::Real>& umm_arr,
1101 const amrex::Array4<const amrex::Real>& tm_arr,
1102 const amrex::Array4<const amrex::Real>& tvm_arr,
1103 const amrex::Array4<const amrex::Real>& qvm_arr,
1104 const amrex::Array4<amrex::Real>& u_star_arr,
1105 const amrex::Array4<amrex::Real>& w_star_arr,
1106 const amrex::Array4<amrex::Real>& t_star_arr,
1107 const amrex::Array4<amrex::Real>& q_star_arr,
1108 const amrex::Array4<amrex::Real>& t_surf_arr,
1109 const amrex::Array4<amrex::Real>& q_surf_arr,
1110 const amrex::Array4<amrex::Real>& olen_arr,
1111 const amrex::Array4<amrex::Real>& pblh_arr,
1112 const amrex::Array4<amrex::Real>& ,
1113 const amrex::Array4<amrex::Real>& ,
1114 const amrex::Array4<amrex::Real>& )
const
1130 zeta = zref / olen_arr(i,j,k);
1134 if (q_surf_arr(i,j,k) >
zero) {
1135 qv_s = q_surf_arr(i,j,k);
1139 qv_s = qvm_arr(i,j,k);
1141 qv_a = qvm_arr(i,j,k);
1151 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1153 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1155 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1156 umm = std::max(umm,
WSMIN);
1163 ( (thv_a - thv_s) / (umm * umm) );
1184 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1185 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1186 "Maximum number of MOST iterations reached.");
1189 olen_arr(i,j,k) = zref / zeta;
1190 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1191 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1194 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1197 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1235 const int& max_iters,
1236 const amrex::Array4<const amrex::Real>& zref_arr,
1237 const amrex::Array4<amrex::Real>& z0_arr,
1238 const amrex::Array4<const amrex::Real>& umm_arr,
1239 const amrex::Array4<const amrex::Real>& tm_arr,
1240 const amrex::Array4<const amrex::Real>& tvm_arr,
1241 const amrex::Array4<const amrex::Real>& qvm_arr,
1242 const amrex::Array4<amrex::Real>& u_star_arr,
1243 const amrex::Array4<amrex::Real>& w_star_arr,
1244 const amrex::Array4<amrex::Real>& t_star_arr,
1245 const amrex::Array4<amrex::Real>& q_star_arr,
1246 const amrex::Array4<amrex::Real>& t_surf_arr,
1247 const amrex::Array4<amrex::Real>& q_surf_arr,
1248 const amrex::Array4<amrex::Real>& olen_arr,
1249 const amrex::Array4<amrex::Real>& pblh_arr,
1250 const amrex::Array4<amrex::Real>& ,
1251 const amrex::Array4<amrex::Real>& ,
1252 const amrex::Array4<amrex::Real>& )
const
1270 zeta = zref / olen_arr(i,j,k);
1274 if (q_surf_arr(i,j,k) >
zero) {
1275 qv_s = q_surf_arr(i,j,k);
1279 qv_s = qvm_arr(i,j,k);
1281 qv_a = qvm_arr(i,j,k);
1291 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1293 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1295 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1296 umm = std::max(umm,
WSMIN);
1303 ( (thv_a - thv_s) / (umm * umm) );
1323 C = std::log(zref / z0_old);
1335 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
1336 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
1337 "Maximum number of MOST roughness iterations reached.");
1338 C = std::log(zref /
z0);
1348 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1349 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1350 "Maximum number of MOST iterations reached.");
1354 olen_arr(i,j,k) = zref / zeta;
1355 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1356 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1359 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1362 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1371 #ifdef AMREX_USE_FLOAT
1404 const int& max_iters,
1405 const amrex::Array4<const amrex::Real>& zref_arr,
1406 const amrex::Array4<amrex::Real>& z0_arr,
1407 const amrex::Array4<const amrex::Real>& umm_arr,
1408 const amrex::Array4<const amrex::Real>& tm_arr,
1409 const amrex::Array4<const amrex::Real>& tvm_arr,
1410 const amrex::Array4<const amrex::Real>& qvm_arr,
1411 const amrex::Array4<amrex::Real>& u_star_arr,
1412 const amrex::Array4<amrex::Real>& w_star_arr,
1413 const amrex::Array4<amrex::Real>& t_star_arr,
1414 const amrex::Array4<amrex::Real>& q_star_arr,
1415 const amrex::Array4<amrex::Real>& t_surf_arr,
1416 const amrex::Array4<amrex::Real>& q_surf_arr,
1417 const amrex::Array4<amrex::Real>& olen_arr,
1418 const amrex::Array4<amrex::Real>& pblh_arr,
1419 const amrex::Array4<amrex::Real>& ,
1420 const amrex::Array4<amrex::Real>& ,
1421 const amrex::Array4<amrex::Real>& )
const
1439 zeta = zref / olen_arr(i,j,k);
1443 if (q_surf_arr(i,j,k) >
zero) {
1444 qv_s = q_surf_arr(i,j,k);
1448 qv_s = qvm_arr(i,j,k);
1450 qv_a = qvm_arr(i,j,k);
1460 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1462 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1464 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1465 umm = std::max(umm,
WSMIN);
1472 ( (thv_a - thv_s) / (umm * umm) );
1492 C = std::log(zref / z0_old);
1497 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
1498 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
1499 "Maximum number of MOST roughness iterations reached.");
1500 C = std::log(zref /
z0);
1510 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1511 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1512 "Maximum number of MOST iterations reached.");
1516 olen_arr(i,j,k) = zref / zeta;
1517 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1518 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1521 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1524 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1533 #ifdef AMREX_USE_FLOAT
1563 const int& max_iters,
1564 const amrex::Array4<const amrex::Real>& zref_arr,
1565 const amrex::Array4<amrex::Real>& z0_arr,
1566 const amrex::Array4<const amrex::Real>& umm_arr,
1567 const amrex::Array4<const amrex::Real>& tm_arr,
1568 const amrex::Array4<const amrex::Real>& tvm_arr,
1569 const amrex::Array4<const amrex::Real>& qvm_arr,
1570 const amrex::Array4<amrex::Real>& u_star_arr,
1571 const amrex::Array4<amrex::Real>& w_star_arr,
1572 const amrex::Array4<amrex::Real>& t_star_arr,
1573 const amrex::Array4<amrex::Real>& q_star_arr,
1574 const amrex::Array4<amrex::Real>& t_surf_arr,
1575 const amrex::Array4<amrex::Real>& q_surf_arr,
1576 const amrex::Array4<amrex::Real>& olen_arr,
1577 const amrex::Array4<amrex::Real>& pblh_arr,
1578 const amrex::Array4<amrex::Real>& ,
1579 const amrex::Array4<amrex::Real>& ,
1580 const amrex::Array4<amrex::Real>& )
const
1596 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
1598 Olen = olen_arr(i,j,k);
1605 ustar = u_star_arr(i,j,k);
1607 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1608 (std::log(zref /
z0) - psi_h);
1611 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1612 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1616 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1618 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1619 umm = std::max(umm,
WSMIN);
1622 if ( (((Olen >=
zero) && (Oleno <=
zero)) ||
1623 ((Olen <=
zero) && (Oleno >=
zero))) &&
1624 std::fabs(Olen) + std::fabs(Oleno) <
amrex::Real(1.0)) {
1625 Olen =
myhalf * (Olen + Oleno);
1631 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
1633 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1634 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1635 "Maximum number of MOST iterations reached.");
1639 olen_arr(i,j,k) = Olen;
1640 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1641 (std::log(zref /
z0) - psi_h);
1644 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1647 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1648 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1681 const int& max_iters,
1682 const amrex::Array4<const amrex::Real>& zref_arr,
1683 const amrex::Array4<amrex::Real>& z0_arr,
1684 const amrex::Array4<const amrex::Real>& umm_arr,
1685 const amrex::Array4<const amrex::Real>& tm_arr,
1686 const amrex::Array4<const amrex::Real>& tvm_arr,
1687 const amrex::Array4<const amrex::Real>& qvm_arr,
1688 const amrex::Array4<amrex::Real>& u_star_arr,
1689 const amrex::Array4<amrex::Real>& w_star_arr,
1690 const amrex::Array4<amrex::Real>& t_star_arr,
1691 const amrex::Array4<amrex::Real>& q_star_arr,
1692 const amrex::Array4<amrex::Real>& t_surf_arr,
1693 const amrex::Array4<amrex::Real>& q_surf_arr,
1694 const amrex::Array4<amrex::Real>& olen_arr,
1695 const amrex::Array4<amrex::Real>& pblh_arr,
1696 const amrex::Array4<amrex::Real>& Hwave_arr,
1697 const amrex::Array4<amrex::Real>& Lwave_arr,
1698 const amrex::Array4<amrex::Real>& eta_arr)
const
1713 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1714 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1715 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1716 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1719 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
1721 Olen = olen_arr(i,j,k);
1728 ustar = u_star_arr(i,j,k);
1729 z0 = std::min( std::max(
amrex::Real(1200.0) * Hwave_arr(i,j,k) * std::pow( Hwave_arr(i,j,k)/(Lwave_arr(i,j,k)+
eps),
amrex::Real(4.5) )
1731 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1732 (std::log(zref /
z0) - psi_h);
1735 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1736 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1740 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1742 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1743 umm = std::max(umm,
WSMIN);
1746 if ( (((Olen >=
zero) && (Oleno <=
zero)) ||
1747 ((Olen <=
zero) && (Oleno >=
zero))) &&
1748 std::fabs(Olen) + std::fabs(Oleno) <
amrex::Real(1.0)) {
1749 Olen =
myhalf * (Olen + Oleno);
1755 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
1757 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1758 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1759 "Maximum number of MOST iterations reached.");
1763 olen_arr(i,j,k) = Olen;
1764 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1765 (std::log(zref /
z0) - psi_h);
1768 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1771 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1772 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1781 #ifdef AMREX_USE_FLOAT
1805 const amrex::Array4<const amrex::Real>& cons_arr,
1806 const amrex::Array4<const amrex::Real>& velx_arr,
1807 const amrex::Array4<const amrex::Real>& vely_arr,
1808 const amrex::Array4<const amrex::Real>& umm_arr,
1809 const amrex::Array4<const amrex::Real>& qvm_arr,
1810 const amrex::Array4<const amrex::Real>& u_star_arr,
1811 const amrex::Array4<const amrex::Real>& q_star_arr,
1812 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
1824 wsp_mean = std::max(wsp_mean,
WSMIN);
1832 -
rho*qstar*ustar*(num1+num2)/((qv_mean-qv_surf)*wsp_mean) :
zero;
1843 const amrex::Array4<const amrex::Real>& cons_arr,
1844 const amrex::Array4<const amrex::Real>& velx_arr,
1845 const amrex::Array4<const amrex::Real>& vely_arr,
1846 const amrex::Array4<const amrex::Real>& umm_arr,
1847 const amrex::Array4<const amrex::Real>& tm_arr,
1848 const amrex::Array4<const amrex::Real>& u_star_arr,
1849 const amrex::Array4<const amrex::Real>& t_star_arr,
1850 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
1862 wsp_mean = std::max(wsp_mean,
WSMIN);
1870 -
rho*tstar*ustar*(num1+num2)/((theta_mean-theta_surf)*wsp_mean) :
zero;
1881 const amrex::Array4<const amrex::Real>& cons_arr,
1882 const amrex::Array4<const amrex::Real>& velx_arr,
1883 const amrex::Array4<const amrex::Real>& vely_arr,
1884 const amrex::Array4<const amrex::Real>& umm_arr,
1885 const amrex::Array4<const amrex::Real>& um_arr,
1886 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1890 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
1896 wsp_mean = std::max(wsp_mean,
WSMIN);
1907 amrex::Real stressx = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1918 const amrex::Array4<const amrex::Real>& cons_arr,
1919 const amrex::Array4<const amrex::Real>& velx_arr,
1920 const amrex::Array4<const amrex::Real>& vely_arr,
1921 const amrex::Array4<const amrex::Real>& umm_arr,
1922 const amrex::Array4<const amrex::Real>& vm_arr,
1923 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1926 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
1933 wsp_mean = std::max(wsp_mean,
WSMIN);
1944 amrex::Real stressy = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1950 #ifdef AMREX_USE_FLOAT
1972 const amrex::Array4<const amrex::Real>& ,
1973 const amrex::Array4<const amrex::Real>& ,
1974 const amrex::Array4<const amrex::Real>& ,
1975 const amrex::Array4<const amrex::Real>& ,
1976 const amrex::Array4<const amrex::Real>& ,
1977 const amrex::Array4<const amrex::Real>& ,
1978 const amrex::Array4<const amrex::Real>& ,
1979 const amrex::Array4<const amrex::Real>& )
const
1993 const amrex::Array4<const amrex::Real>& cons_arr,
1994 const amrex::Array4<const amrex::Real>& ,
1995 const amrex::Array4<const amrex::Real>& ,
1996 const amrex::Array4<const amrex::Real>& umm_arr,
1997 const amrex::Array4<const amrex::Real>& tm_arr,
1998 const amrex::Array4<const amrex::Real>& ,
1999 const amrex::Array4<const amrex::Real>& ,
2000 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2010 amrex::Real moflux = -
rho * Ch * wsp_mean * (theta_mean - theta_surf);
2021 const amrex::Array4<const amrex::Real>& cons_arr,
2022 const amrex::Array4<const amrex::Real>& velx_arr,
2023 const amrex::Array4<const amrex::Real>& vely_arr,
2024 const amrex::Array4<const amrex::Real>& umm_arr,
2025 const amrex::Array4<const amrex::Real>& ,
2026 const amrex::Array4<const amrex::Real>& )
const
2030 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2057 const amrex::Array4<const amrex::Real>& cons_arr,
2058 const amrex::Array4<const amrex::Real>& velx_arr,
2059 const amrex::Array4<const amrex::Real>& vely_arr,
2060 const amrex::Array4<const amrex::Real>& umm_arr,
2061 const amrex::Array4<const amrex::Real>& ,
2062 const amrex::Array4<const amrex::Real>& )
const
2065 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2107 const amrex::Array4<const amrex::Real>& cons_arr,
2108 const amrex::Array4<const amrex::Real>& ,
2109 const amrex::Array4<const amrex::Real>& ,
2110 const amrex::Array4<const amrex::Real>& ,
2111 const amrex::Array4<const amrex::Real>& ,
2112 const amrex::Array4<const amrex::Real>& ,
2113 const amrex::Array4<const amrex::Real>& q_star_arr,
2114 const amrex::Array4<const amrex::Real>& )
const
2131 const amrex::Array4<const amrex::Real>& cons_arr,
2132 const amrex::Array4<const amrex::Real>& ,
2133 const amrex::Array4<const amrex::Real>& ,
2134 const amrex::Array4<const amrex::Real>& ,
2135 const amrex::Array4<const amrex::Real>& ,
2136 const amrex::Array4<const amrex::Real>& ,
2137 const amrex::Array4<const amrex::Real>& t_star_arr,
2138 const amrex::Array4<const amrex::Real>& )
const
2155 const amrex::Array4<const amrex::Real>& cons_arr,
2156 const amrex::Array4<const amrex::Real>& velx_arr,
2157 const amrex::Array4<const amrex::Real>& vely_arr,
2158 const amrex::Array4<const amrex::Real>& ,
2159 const amrex::Array4<const amrex::Real>& ,
2160 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2164 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2182 const amrex::Array4<const amrex::Real>& cons_arr,
2183 const amrex::Array4<const amrex::Real>& velx_arr,
2184 const amrex::Array4<const amrex::Real>& vely_arr,
2185 const amrex::Array4<const amrex::Real>& ,
2186 const amrex::Array4<const amrex::Real>& ,
2187 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2190 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2204 #ifdef AMREX_USE_FLOAT
2233 const amrex::Array4<const amrex::Real>& cons_arr,
2234 const amrex::Array4<const amrex::Real>& velx_arr,
2235 const amrex::Array4<const amrex::Real>& vely_arr,
2236 const amrex::Array4<const amrex::Real>& ,
2237 const amrex::Array4<const amrex::Real>& ,
2238 const amrex::Array4<const amrex::Real>& ,
2239 const amrex::Array4<const amrex::Real>& ,
2240 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2261 const amrex::Array4<const amrex::Real>& cons_arr,
2262 const amrex::Array4<const amrex::Real>& velx_arr,
2263 const amrex::Array4<const amrex::Real>& vely_arr,
2264 const amrex::Array4<const amrex::Real>& ,
2265 const amrex::Array4<const amrex::Real>& ,
2266 const amrex::Array4<const amrex::Real>& ,
2267 const amrex::Array4<const amrex::Real>& ,
2268 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2289 const amrex::Array4<const amrex::Real>& cons_arr,
2290 const amrex::Array4<const amrex::Real>& velx_arr,
2291 const amrex::Array4<const amrex::Real>& vely_arr,
2292 const amrex::Array4<const amrex::Real>& ,
2293 const amrex::Array4<const amrex::Real>& ,
2294 const amrex::Array4<const amrex::Real>& )
const
2299 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2315 const amrex::Array4<const amrex::Real>& cons_arr,
2316 const amrex::Array4<const amrex::Real>& velx_arr,
2317 const amrex::Array4<const amrex::Real>& vely_arr,
2318 const amrex::Array4<const amrex::Real>& ,
2319 const amrex::Array4<const amrex::Real>& ,
2320 const amrex::Array4<const amrex::Real>& )
const
2324 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2355 const amrex::Array4<const amrex::Real>& cons_arr,
2356 const amrex::Array4<const amrex::Real>& velx_arr,
2357 const amrex::Array4<const amrex::Real>& vely_arr,
2358 const amrex::Array4<const amrex::Real>& ,
2359 const amrex::Array4<const amrex::Real>& ,
2360 const amrex::Array4<const amrex::Real>& ,
2361 const amrex::Array4<const amrex::Real>& q_star_arr,
2362 const amrex::Array4<const amrex::Real>& )
const
2370 amrex::Real wsp = std::sqrt(velx*velx + vely*vely);
2384 const amrex::Array4<const amrex::Real>& cons_arr,
2385 const amrex::Array4<const amrex::Real>& velx_arr,
2386 const amrex::Array4<const amrex::Real>& vely_arr,
2387 const amrex::Array4<const amrex::Real>& ,
2388 const amrex::Array4<const amrex::Real>& ,
2389 const amrex::Array4<const amrex::Real>& ,
2390 const amrex::Array4<const amrex::Real>& t_star_arr,
2391 const amrex::Array4<const amrex::Real>& )
const
2399 amrex::Real wsp = std::sqrt(velx*velx + vely*vely);
2413 const amrex::Array4<const amrex::Real>& cons_arr,
2414 const amrex::Array4<const amrex::Real>& velx_arr,
2415 const amrex::Array4<const amrex::Real>& vely_arr,
2416 const amrex::Array4<const amrex::Real>& ,
2417 const amrex::Array4<const amrex::Real>& ,
2418 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2422 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2440 const amrex::Array4<const amrex::Real>& cons_arr,
2441 const amrex::Array4<const amrex::Real>& velx_arr,
2442 const amrex::Array4<const amrex::Real>& vely_arr,
2443 const amrex::Array4<const amrex::Real>& ,
2444 const amrex::Array4<const amrex::Real>& ,
2445 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2448 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2462 #ifdef AMREX_USE_FLOAT
2485 const amrex::Array4<const amrex::Real>& cons_arr,
2486 const amrex::Array4<const amrex::Real>& ,
2487 const amrex::Array4<const amrex::Real>& ,
2488 const amrex::Array4<const amrex::Real>& ,
2489 const amrex::Array4<const amrex::Real>& qvm_arr,
2490 const amrex::Array4<const amrex::Real>& ,
2491 const amrex::Array4<const amrex::Real>& q_star_arr,
2492 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2510 const amrex::Array4<const amrex::Real>& cons_arr,
2511 const amrex::Array4<const amrex::Real>& ,
2512 const amrex::Array4<const amrex::Real>& ,
2513 const amrex::Array4<const amrex::Real>& ,
2514 const amrex::Array4<const amrex::Real>& tm_arr,
2515 const amrex::Array4<const amrex::Real>& ,
2516 const amrex::Array4<const amrex::Real>& t_star_arr,
2517 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2535 const amrex::Array4<const amrex::Real>& cons_arr,
2536 const amrex::Array4<const amrex::Real>& ,
2537 const amrex::Array4<const amrex::Real>& ,
2538 const amrex::Array4<const amrex::Real>& ,
2539 const amrex::Array4<const amrex::Real>& ,
2540 const amrex::Array4<const amrex::Real>& u_star_arr)
const
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>& ,
2560 const amrex::Array4<const amrex::Real>& ,
2561 const amrex::Array4<const amrex::Real>& )
const
2570 #ifdef AMREX_USE_FLOAT
constexpr amrex::Real three
Definition: ERF_Constants.H:9
constexpr amrex::Real KAPPA
Definition: ERF_Constants.H:39
constexpr amrex::Real two
Definition: ERF_Constants.H:8
constexpr amrex::Real one
Definition: ERF_Constants.H:7
constexpr amrex::Real fourth
Definition: ERF_Constants.H:12
constexpr amrex::Real zero
Definition: ERF_Constants.H:6
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:11
constexpr amrex::Real PI
Definition: ERF_Constants.H:24
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:40
constexpr amrex::Real PIoTwo
Definition: ERF_Constants.H:25
@ num
Definition: ERF_DataStruct.H:24
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
Real z0
Definition: ERF_InitCustomPertVels_ScalarAdvDiff.H:8
rho
Definition: ERF_InitCustomPert_Bubble.H:106
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:129
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
@ Mom_v
Definition: ERF_IndexDefines.H:209
@ theta
Definition: ERF_MM5.H:20
@ qv
Definition: ERF_Kessler.H:29
@ q
Definition: ERF_WSM6.H:169
@ den
Definition: ERF_AdvanceWSM6.cpp:109
Definition: ERF_MOSTStress.H:189
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:274
most_data mdata
Definition: ERF_MOSTStress.H:267
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:204
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:272
similarity_funs sfuns
Definition: ERF_MOSTStress.H:268
adiabatic_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc)
Definition: ERF_MOSTStress.H:190
Definition: ERF_MOSTStress.H:367
similarity_funs sfuns
Definition: ERF_MOSTStress.H:427
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:429
most_data mdata
Definition: ERF_MOSTStress.H:426
adiabatic_donelan(amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:368
const amrex::Real tol
Definition: ERF_MOSTStress.H:428
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:378
Definition: ERF_MOSTStress.H:282
similarity_funs sfuns
Definition: ERF_MOSTStress.H:353
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:357
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:359
adiabatic_mod_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth)
Definition: ERF_MOSTStress.H:283
most_data mdata
Definition: ERF_MOSTStress.H:352
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:296
Definition: ERF_MOSTStress.H:437
const amrex::Real eps
Definition: ERF_MOSTStress.H:505
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 > &Hwave_arr, const amrex::Array4< amrex::Real > &Lwave_arr, const amrex::Array4< amrex::Real > &eta_arr) const
Definition: ERF_MOSTStress.H:448
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:507
most_data mdata
Definition: ERF_MOSTStress.H:499
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:509
similarity_funs sfuns
Definition: ERF_MOSTStress.H:500
const amrex::Real tol
Definition: ERF_MOSTStress.H:501
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:508
adiabatic_wave_coupled(amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:438
Definition: ERF_MOSTStress.H:140
adiabatic(amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:141
similarity_funs sfuns
Definition: ERF_MOSTStress.H:181
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:151
most_data mdata
Definition: ERF_MOSTStress.H:180
Definition: ERF_MOSTStress.H:2217
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 > &) const
Definition: ERF_MOSTStress.H:2286
bulk_coeff_flux(amrex::Real m_Cd, amrex::Real m_Ch, amrex::Real m_Cq)
Definition: ERF_MOSTStress.H:2218
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 > &, 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:2230
most_data mdata
Definition: ERF_MOSTStress.H:2336
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 > &, 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:2258
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 > &) const
Definition: ERF_MOSTStress.H:2312
Definition: ERF_MOSTStress.H:2096
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:2152
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:2104
custom_flux(bool specified_rho_surf)
Definition: ERF_MOSTStress.H:2097
const bool fluxes_include_rho
Definition: ERF_MOSTStress.H:2209
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:2128
const amrex::Real eps
Definition: ERF_MOSTStress.H:2207
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:2179
Definition: ERF_MOSTStress.H:1963
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:2018
donelan_flux()
Definition: ERF_MOSTStress.H:1964
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:2054
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:1990
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:1969
Definition: ERF_MOSTStress.H:1796
moeng_flux()
Definition: ERF_MOSTStress.H:1797
const amrex::Real eps
Definition: ERF_MOSTStress.H:1953
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:1878
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1955
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:1840
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:1802
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:1915
Definition: ERF_MOSTStress.H:13
amrex::Real surf_moist_flux
Moisture flux.
Definition: ERF_MOSTStress.H:19
amrex::Real Cnk_b2
Modified Charnock Eq (4) https://doi.org/amrex::Real(10.1175)/JAMC-D-17-amrex::Real(0137....
Definition: ERF_MOSTStress.H:23
amrex::Real Cnk_b
Definition: ERF_MOSTStress.H:25
amrex::Real Ch
Definition: ERF_MOSTStress.H:29
amrex::Real Cnk_d
Modified Charnock Eq (4) https://doi.org/amrex::Real(10.1175)/JAMC-D-17-amrex::Real(0137....
Definition: ERF_MOSTStress.H:24
amrex::Real kappa
von Karman constant
Definition: ERF_MOSTStress.H:16
amrex::Real gravity
Acceleration due to gravity (m/s^2)
Definition: ERF_MOSTStress.H:17
amrex::Real Cnk_a
Standard Charnock constant https://doi.org/amrex::Real(10.1175)/JAMC-D-17-amrex::Real(0137....
Definition: ERF_MOSTStress.H:21
amrex::Real Cd
Definition: ERF_MOSTStress.H:28
amrex::Real Cq
Definition: ERF_MOSTStress.H:30
const amrex::Real Bjr_beta
Definition: ERF_MOSTStress.H:32
amrex::Real Cnk_b1
Modified Charnock Eq (4) https://doi.org/amrex::Real(10.1175)/JAMC-D-17-amrex::Real(0137....
Definition: ERF_MOSTStress.H:22
amrex::Real z0_const
Roughness height – default constant value(m)
Definition: ERF_MOSTStress.H:15
bool visc
Use viscous Charnock formulation.
Definition: ERF_MOSTStress.H:26
amrex::Real surf_temp_flux
Heat flux TODO: decide whether this is <θ'w'> or <θv'w'> under moist conditions.
Definition: ERF_MOSTStress.H:18
Definition: ERF_MOSTStress.H:2344
rico_flux(amrex::Real l_theta_z0, amrex::Real l_qsat_z0)
Definition: ERF_MOSTStress.H:2345
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 > &, 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:2352
amrex::Real qsat_z0
Definition: ERF_MOSTStress.H:2468
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 > &, 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:2381
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:2410
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:2437
const amrex::Real eps
Definition: ERF_MOSTStress.H:2465
amrex::Real theta_z0
Definition: ERF_MOSTStress.H:2467
Definition: ERF_MOSTStress.H:2476
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:2553
rotate_flux()
Definition: ERF_MOSTStress.H:2477
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:2532
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:2507
const amrex::Real eps
Definition: ERF_MOSTStress.H:2573
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:2482
Definition: ERF_MOSTStress.H:40
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:90
amrex::Real beta_m
Constants from Dyer, BLM, 1974.
Definition: ERF_MOSTStress.H:115
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h2(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:67
amrex::Real beta_h
https://doi.org/amrex::Real(10.1007)/BF00240838
Definition: ERF_MOSTStress.H:116
amrex::Real gamma_h
Definition: ERF_MOSTStress.H:118
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:104
amrex::Real gamma_m
Definition: ERF_MOSTStress.H:117
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m2(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:47
Definition: ERF_MOSTStress.H:622
const amrex::Real tol
Definition: ERF_MOSTStress.H:732
surface_flux_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:623
similarity_funs sfuns
Definition: ERF_MOSTStress.H:731
most_data mdata
Definition: ERF_MOSTStress.H:729
bool spec_qflux
Definition: ERF_MOSTStress.H:730
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:639
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:733
Definition: ERF_MOSTStress.H:852
bool spec_qflux
Definition: ERF_MOSTStress.H:949
const amrex::Real tol
Definition: ERF_MOSTStress.H:951
surface_flux_donelan(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:853
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:952
most_data mdata
Definition: ERF_MOSTStress.H:948
similarity_funs sfuns
Definition: ERF_MOSTStress.H:950
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:865
Definition: ERF_MOSTStress.H:741
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:757
surface_flux_mod_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool cons_qflux)
Definition: ERF_MOSTStress.H:742
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:844
most_data mdata
Definition: ERF_MOSTStress.H:840
bool spec_qflux
Definition: ERF_MOSTStress.H:841
const amrex::Real tol
Definition: ERF_MOSTStress.H:843
similarity_funs sfuns
Definition: ERF_MOSTStress.H:842
Definition: ERF_MOSTStress.H:960
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1073
surface_flux_wave_coupled(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:961
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:1072
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:1071
most_data mdata
Definition: ERF_MOSTStress.H:1062
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1064
const amrex::Real tol
Definition: ERF_MOSTStress.H:1065
bool spec_qflux
Definition: ERF_MOSTStress.H:1063
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 > &eta_arr) const
Definition: ERF_MOSTStress.H:973
const amrex::Real eps
Definition: ERF_MOSTStress.H:1069
Definition: ERF_MOSTStress.H:517
similarity_funs sfuns
Definition: ERF_MOSTStress.H:612
surface_flux(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:518
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< const amrex::Real > &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:614
most_data mdata
Definition: ERF_MOSTStress.H:610
const amrex::Real tol
Definition: ERF_MOSTStress.H:613
bool spec_qflux
Definition: ERF_MOSTStress.H:611
Definition: ERF_MOSTStress.H:1215
most_data mdata
Definition: ERF_MOSTStress.H:1367
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:1232
bool spec_qflux
Definition: ERF_MOSTStress.H:1368
surface_temp_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:1216
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:1374
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1376
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1377
const amrex::Real tol
Definition: ERF_MOSTStress.H:1370
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1369
Definition: ERF_MOSTStress.H:1547
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1655
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:1560
most_data mdata
Definition: ERF_MOSTStress.H:1653
const amrex::Real tol
Definition: ERF_MOSTStress.H:1656
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1657
bool spec_qflux
Definition: ERF_MOSTStress.H:1654
surface_temp_donelan(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1548
Definition: ERF_MOSTStress.H:1385
surface_temp_mod_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool cons_qflux)
Definition: ERF_MOSTStress.H:1386
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1531
const amrex::Real tol
Definition: ERF_MOSTStress.H:1532
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:1536
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1539
most_data mdata
Definition: ERF_MOSTStress.H:1529
bool spec_qflux
Definition: ERF_MOSTStress.H:1530
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:1401
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1538
Definition: ERF_MOSTStress.H:1665
const amrex::Real eps
Definition: ERF_MOSTStress.H:1784
surface_temp_wave_coupled(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1666
const amrex::Real tol
Definition: ERF_MOSTStress.H:1780
most_data mdata
Definition: ERF_MOSTStress.H:1777
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 > &eta_arr) const
Definition: ERF_MOSTStress.H:1678
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:1786
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1779
bool spec_qflux
Definition: ERF_MOSTStress.H:1778
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:1787
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1788
Definition: ERF_MOSTStress.H:1081
surface_temp(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1082
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1204
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:1094
const amrex::Real tol
Definition: ERF_MOSTStress.H:1205
bool spec_qflux
Definition: ERF_MOSTStress.H:1203
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1206
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1207
most_data mdata
Definition: ERF_MOSTStress.H:1202