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;
295 const int& max_iters,
296 const amrex::Array4<const amrex::Real>& zref_arr,
297 const amrex::Array4<amrex::Real>& z0_arr,
298 const amrex::Array4<const amrex::Real>& umm_arr,
299 const amrex::Array4<const amrex::Real>& ,
300 const amrex::Array4<const amrex::Real>& ,
301 const amrex::Array4<const amrex::Real>& ,
302 const amrex::Array4<amrex::Real>& u_star_arr,
303 const amrex::Array4<amrex::Real>& ,
304 const amrex::Array4<amrex::Real>& t_star_arr,
305 const amrex::Array4<amrex::Real>& q_star_arr,
306 const amrex::Array4<amrex::Real>& ,
307 const amrex::Array4<amrex::Real>& ,
308 const amrex::Array4<amrex::Real>& olen_arr,
309 const amrex::Array4<amrex::Real>& ,
310 const amrex::Array4<amrex::Real>& ,
311 const amrex::Array4<amrex::Real>& ,
312 const amrex::Array4<amrex::Real>& )
const
329 C = std::log(zref / z0_old);
334 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
335 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
336 "Maximum number of MOST roughness iterations reached.");
337 C = std::log(zref /
z0);
342 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
343 t_star_arr(i,j,k) =
zero;
344 q_star_arr(i,j,k) =
zero;
373 const int& max_iters,
374 const amrex::Array4<const amrex::Real>& zref_arr,
375 const amrex::Array4<amrex::Real>& z0_arr,
376 const amrex::Array4<const amrex::Real>& umm_arr,
377 const amrex::Array4<const amrex::Real>& ,
378 const amrex::Array4<const amrex::Real>& ,
379 const amrex::Array4<const amrex::Real>& ,
380 const amrex::Array4<amrex::Real>& u_star_arr,
381 const amrex::Array4<amrex::Real>& ,
382 const amrex::Array4<amrex::Real>& t_star_arr,
383 const amrex::Array4<amrex::Real>& q_star_arr,
384 const amrex::Array4<amrex::Real>& ,
385 const amrex::Array4<amrex::Real>& ,
386 const amrex::Array4<amrex::Real>& olen_arr,
387 const amrex::Array4<amrex::Real>& ,
388 const amrex::Array4<amrex::Real>& ,
389 const amrex::Array4<amrex::Real>& ,
390 const amrex::Array4<amrex::Real>& )
const
397 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
399 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
402 ustar = u_star_arr(i,j,k);
404 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref /
z0);
406 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
407 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
408 "Maximum number of MOST iterations reached.");
413 t_star_arr(i,j,k) =
zero;
414 q_star_arr(i,j,k) =
zero;
443 const int& max_iters,
444 const amrex::Array4<const amrex::Real>& zref_arr,
445 const amrex::Array4<amrex::Real>& z0_arr,
446 const amrex::Array4<const amrex::Real>& umm_arr,
447 const amrex::Array4<const amrex::Real>& ,
448 const amrex::Array4<const amrex::Real>& ,
449 const amrex::Array4<const amrex::Real>& ,
450 const amrex::Array4<amrex::Real>& u_star_arr,
451 const amrex::Array4<amrex::Real>& ,
452 const amrex::Array4<amrex::Real>& t_star_arr,
453 const amrex::Array4<amrex::Real>& q_star_arr,
454 const amrex::Array4<amrex::Real>& ,
455 const amrex::Array4<amrex::Real>& ,
456 const amrex::Array4<amrex::Real>& olen_arr,
457 const amrex::Array4<amrex::Real>& ,
458 const amrex::Array4<amrex::Real>& Hwave_arr,
459 const amrex::Array4<amrex::Real>& Lwave_arr,
460 const amrex::Array4<amrex::Real>& eta_arr)
const
468 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
469 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
470 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
471 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
472 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
474 ustar = u_star_arr(i,j,k);
475 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) )
477 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref /
z0);
479 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
480 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
481 "Maximum number of MOST iterations reached.");
486 t_star_arr(i,j,k) =
zero;
487 q_star_arr(i,j,k) =
zero;
494 #ifdef AMREX_USE_FLOAT
525 const int& max_iters,
526 const amrex::Array4<const amrex::Real>& zref_arr,
527 const amrex::Array4<const amrex::Real>& z0_arr,
528 const amrex::Array4<const amrex::Real>& umm_arr,
529 const amrex::Array4<const amrex::Real>& tm_arr,
530 const amrex::Array4<const amrex::Real>& tvm_arr,
531 const amrex::Array4<const amrex::Real>& qvm_arr,
532 const amrex::Array4<amrex::Real>& u_star_arr,
533 const amrex::Array4<amrex::Real>& w_star_arr,
534 const amrex::Array4<amrex::Real>& t_star_arr,
535 const amrex::Array4<amrex::Real>& q_star_arr,
536 const amrex::Array4<amrex::Real>& t_surf_arr,
537 const amrex::Array4<amrex::Real>& q_surf_arr,
538 const amrex::Array4<amrex::Real>& olen_arr,
539 const amrex::Array4<amrex::Real>& pblh_arr,
540 const amrex::Array4<amrex::Real>& ,
541 const amrex::Array4<amrex::Real>& ,
542 const amrex::Array4<amrex::Real>& )
const
556 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
558 Olen = olen_arr(i,j,k);
564 ustar = u_star_arr(i,j,k);
566 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
567 (std::log(zref / z0_arr(i,j,k)) - psi_h);
571 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
573 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
574 umm = std::max(umm,
WSMIN);
580 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref / z0_arr(i,j,k)) - psi_m);
582 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
583 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
584 "Maximum number of MOST iterations reached.");
587 olen_arr(i,j,k) = Olen;
589 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
593 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
596 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
597 (std::log(zref / z0_arr(i,j,k)) - psi_h);
634 const int& max_iters,
635 const amrex::Array4<const amrex::Real>& zref_arr,
636 const amrex::Array4<amrex::Real>& z0_arr,
637 const amrex::Array4<const amrex::Real>& umm_arr,
638 const amrex::Array4<const amrex::Real>& tm_arr,
639 const amrex::Array4<const amrex::Real>& tvm_arr,
640 const amrex::Array4<const amrex::Real>& qvm_arr,
641 const amrex::Array4<amrex::Real>& u_star_arr,
642 const amrex::Array4<amrex::Real>& w_star_arr,
643 const amrex::Array4<amrex::Real>& t_star_arr,
644 const amrex::Array4<amrex::Real>& q_star_arr,
645 const amrex::Array4<amrex::Real>& t_surf_arr,
646 const amrex::Array4<amrex::Real>& q_surf_arr,
647 const amrex::Array4<amrex::Real>& olen_arr,
648 const amrex::Array4<amrex::Real>& pblh_arr,
649 const amrex::Array4<amrex::Real>& ,
650 const amrex::Array4<amrex::Real>& ,
651 const amrex::Array4<amrex::Real>& )
const
666 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
668 Olen = olen_arr(i,j,k);
674 ustar = u_star_arr(i,j,k);
684 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
685 (std::log(zref / z0_arr(i,j,k)) - psi_h);
689 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
691 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
692 umm = std::max(umm,
WSMIN);
698 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
700 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
701 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
702 "Maximum number of MOST iterations reached.");
706 olen_arr(i,j,k) = Olen;
708 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
712 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
715 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
716 (std::log(zref / z0_arr(i,j,k)) - psi_h);
752 const int& max_iters,
753 const amrex::Array4<const amrex::Real>& zref_arr,
754 const amrex::Array4<amrex::Real>& z0_arr,
755 const amrex::Array4<const amrex::Real>& umm_arr,
756 const amrex::Array4<const amrex::Real>& tm_arr,
757 const amrex::Array4<const amrex::Real>& tvm_arr,
758 const amrex::Array4<const amrex::Real>& qvm_arr,
759 const amrex::Array4<amrex::Real>& u_star_arr,
760 const amrex::Array4<amrex::Real>& w_star_arr,
761 const amrex::Array4<amrex::Real>& t_star_arr,
762 const amrex::Array4<amrex::Real>& q_star_arr,
763 const amrex::Array4<amrex::Real>& t_surf_arr,
764 const amrex::Array4<amrex::Real>& q_surf_arr,
765 const amrex::Array4<amrex::Real>& olen_arr,
766 const amrex::Array4<amrex::Real>& pblh_arr,
767 const amrex::Array4<amrex::Real>& ,
768 const amrex::Array4<amrex::Real>& ,
769 const amrex::Array4<amrex::Real>& )
const
784 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
786 Olen = olen_arr(i,j,k);
792 ustar = u_star_arr(i,j,k);
795 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
796 (std::log(zref / z0_arr(i,j,k)) - psi_h);
800 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
802 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
803 umm = std::max(umm,
WSMIN);
809 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
811 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
812 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
813 "Maximum number of MOST iterations reached.");
817 olen_arr(i,j,k) = Olen;
819 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
823 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
826 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
827 (std::log(zref / z0_arr(i,j,k)) - psi_h);
860 const int& max_iters,
861 const amrex::Array4<const amrex::Real>& zref_arr,
862 const amrex::Array4<amrex::Real>& z0_arr,
863 const amrex::Array4<const amrex::Real>& umm_arr,
864 const amrex::Array4<const amrex::Real>& tm_arr,
865 const amrex::Array4<const amrex::Real>& tvm_arr,
866 const amrex::Array4<const amrex::Real>& qvm_arr,
867 const amrex::Array4<amrex::Real>& u_star_arr,
868 const amrex::Array4<amrex::Real>& w_star_arr,
869 const amrex::Array4<amrex::Real>& t_star_arr,
870 const amrex::Array4<amrex::Real>& q_star_arr,
871 const amrex::Array4<amrex::Real>& t_surf_arr,
872 const amrex::Array4<amrex::Real>& q_surf_arr,
873 const amrex::Array4<amrex::Real>& olen_arr,
874 const amrex::Array4<amrex::Real>& pblh_arr,
875 const amrex::Array4<amrex::Real>& ,
876 const amrex::Array4<amrex::Real>& ,
877 const amrex::Array4<amrex::Real>& )
const
892 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
894 Olen = olen_arr(i,j,k);
900 ustar = u_star_arr(i,j,k);
903 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
904 (std::log(zref / z0_arr(i,j,k)) - psi_h);
908 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
910 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
911 umm = std::max(umm,
WSMIN);
917 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
919 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
920 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
921 "Maximum number of MOST iterations reached.");
925 olen_arr(i,j,k) = Olen;
927 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
931 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
934 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
935 (std::log(zref / z0_arr(i,j,k)) - psi_h);
968 const int& max_iters,
969 const amrex::Array4<const amrex::Real>& zref_arr,
970 const amrex::Array4<amrex::Real>& z0_arr,
971 const amrex::Array4<const amrex::Real>& umm_arr,
972 const amrex::Array4<const amrex::Real>& tm_arr,
973 const amrex::Array4<const amrex::Real>& tvm_arr,
974 const amrex::Array4<const amrex::Real>& qvm_arr,
975 const amrex::Array4<amrex::Real>& u_star_arr,
976 const amrex::Array4<amrex::Real>& w_star_arr,
977 const amrex::Array4<amrex::Real>& t_star_arr,
978 const amrex::Array4<amrex::Real>& q_star_arr,
979 const amrex::Array4<amrex::Real>& t_surf_arr,
980 const amrex::Array4<amrex::Real>& q_surf_arr,
981 const amrex::Array4<amrex::Real>& olen_arr,
982 const amrex::Array4<amrex::Real>& pblh_arr,
983 const amrex::Array4<amrex::Real>& Hwave_arr,
984 const amrex::Array4<amrex::Real>& Lwave_arr,
985 const amrex::Array4<amrex::Real>& eta_arr)
const
999 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1000 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1001 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1002 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1005 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
1007 Olen = olen_arr(i,j,k);
1013 ustar = u_star_arr(i,j,k);
1014 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) )
1017 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1018 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1022 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1024 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1025 umm = std::max(umm,
WSMIN);
1031 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
1033 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1034 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1035 "Maximum number of MOST iterations reached.");
1039 olen_arr(i,j,k) = Olen;
1041 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
1045 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1048 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1049 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1058 #ifdef AMREX_USE_FLOAT
1089 const int& max_iters,
1090 const amrex::Array4<const amrex::Real>& zref_arr,
1091 const amrex::Array4<const amrex::Real>& z0_arr,
1092 const amrex::Array4<const amrex::Real>& umm_arr,
1093 const amrex::Array4<const amrex::Real>& tm_arr,
1094 const amrex::Array4<const amrex::Real>& tvm_arr,
1095 const amrex::Array4<const amrex::Real>& qvm_arr,
1096 const amrex::Array4<amrex::Real>& u_star_arr,
1097 const amrex::Array4<amrex::Real>& w_star_arr,
1098 const amrex::Array4<amrex::Real>& t_star_arr,
1099 const amrex::Array4<amrex::Real>& q_star_arr,
1100 const amrex::Array4<amrex::Real>& t_surf_arr,
1101 const amrex::Array4<amrex::Real>& q_surf_arr,
1102 const amrex::Array4<amrex::Real>& olen_arr,
1103 const amrex::Array4<amrex::Real>& pblh_arr,
1104 const amrex::Array4<amrex::Real>& ,
1105 const amrex::Array4<amrex::Real>& ,
1106 const amrex::Array4<amrex::Real>& )
const
1122 zeta = zref / olen_arr(i,j,k);
1126 if (q_surf_arr(i,j,k) >
zero) {
1127 qv_s = q_surf_arr(i,j,k);
1131 qv_s = qvm_arr(i,j,k);
1133 qv_a = qvm_arr(i,j,k);
1143 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1145 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1147 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1148 umm = std::max(umm,
WSMIN);
1155 ( (thv_a - thv_s) / (umm * umm) );
1176 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1177 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1178 "Maximum number of MOST iterations reached.");
1181 olen_arr(i,j,k) = zref / zeta;
1182 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1183 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1186 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1189 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1227 const int& max_iters,
1228 const amrex::Array4<const amrex::Real>& zref_arr,
1229 const amrex::Array4<amrex::Real>& z0_arr,
1230 const amrex::Array4<const amrex::Real>& umm_arr,
1231 const amrex::Array4<const amrex::Real>& tm_arr,
1232 const amrex::Array4<const amrex::Real>& tvm_arr,
1233 const amrex::Array4<const amrex::Real>& qvm_arr,
1234 const amrex::Array4<amrex::Real>& u_star_arr,
1235 const amrex::Array4<amrex::Real>& w_star_arr,
1236 const amrex::Array4<amrex::Real>& t_star_arr,
1237 const amrex::Array4<amrex::Real>& q_star_arr,
1238 const amrex::Array4<amrex::Real>& t_surf_arr,
1239 const amrex::Array4<amrex::Real>& q_surf_arr,
1240 const amrex::Array4<amrex::Real>& olen_arr,
1241 const amrex::Array4<amrex::Real>& pblh_arr,
1242 const amrex::Array4<amrex::Real>& ,
1243 const amrex::Array4<amrex::Real>& ,
1244 const amrex::Array4<amrex::Real>& )
const
1262 zeta = zref / olen_arr(i,j,k);
1266 if (q_surf_arr(i,j,k) >
zero) {
1267 qv_s = q_surf_arr(i,j,k);
1271 qv_s = qvm_arr(i,j,k);
1273 qv_a = qvm_arr(i,j,k);
1283 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1285 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1287 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1288 umm = std::max(umm,
WSMIN);
1295 ( (thv_a - thv_s) / (umm * umm) );
1315 C = std::log(zref / z0_old);
1327 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
1328 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
1329 "Maximum number of MOST roughness iterations reached.");
1330 C = std::log(zref /
z0);
1340 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1341 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1342 "Maximum number of MOST iterations reached.");
1346 olen_arr(i,j,k) = zref / zeta;
1347 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1348 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1351 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1354 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1392 const int& max_iters,
1393 const amrex::Array4<const amrex::Real>& zref_arr,
1394 const amrex::Array4<amrex::Real>& z0_arr,
1395 const amrex::Array4<const amrex::Real>& umm_arr,
1396 const amrex::Array4<const amrex::Real>& tm_arr,
1397 const amrex::Array4<const amrex::Real>& tvm_arr,
1398 const amrex::Array4<const amrex::Real>& qvm_arr,
1399 const amrex::Array4<amrex::Real>& u_star_arr,
1400 const amrex::Array4<amrex::Real>& w_star_arr,
1401 const amrex::Array4<amrex::Real>& t_star_arr,
1402 const amrex::Array4<amrex::Real>& q_star_arr,
1403 const amrex::Array4<amrex::Real>& t_surf_arr,
1404 const amrex::Array4<amrex::Real>& q_surf_arr,
1405 const amrex::Array4<amrex::Real>& olen_arr,
1406 const amrex::Array4<amrex::Real>& pblh_arr,
1407 const amrex::Array4<amrex::Real>& ,
1408 const amrex::Array4<amrex::Real>& ,
1409 const amrex::Array4<amrex::Real>& )
const
1427 zeta = zref / olen_arr(i,j,k);
1431 if (q_surf_arr(i,j,k) >
zero) {
1432 qv_s = q_surf_arr(i,j,k);
1436 qv_s = qvm_arr(i,j,k);
1438 qv_a = qvm_arr(i,j,k);
1448 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1450 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1452 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1453 umm = std::max(umm,
WSMIN);
1460 ( (thv_a - thv_s) / (umm * umm) );
1480 C = std::log(zref / z0_old);
1485 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
1486 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
1487 "Maximum number of MOST roughness iterations reached.");
1488 C = std::log(zref /
z0);
1498 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1499 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1500 "Maximum number of MOST iterations reached.");
1504 olen_arr(i,j,k) = zref / zeta;
1505 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1506 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1509 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1512 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1547 const int& max_iters,
1548 const amrex::Array4<const amrex::Real>& zref_arr,
1549 const amrex::Array4<amrex::Real>& z0_arr,
1550 const amrex::Array4<const amrex::Real>& umm_arr,
1551 const amrex::Array4<const amrex::Real>& tm_arr,
1552 const amrex::Array4<const amrex::Real>& tvm_arr,
1553 const amrex::Array4<const amrex::Real>& qvm_arr,
1554 const amrex::Array4<amrex::Real>& u_star_arr,
1555 const amrex::Array4<amrex::Real>& w_star_arr,
1556 const amrex::Array4<amrex::Real>& t_star_arr,
1557 const amrex::Array4<amrex::Real>& q_star_arr,
1558 const amrex::Array4<amrex::Real>& t_surf_arr,
1559 const amrex::Array4<amrex::Real>& q_surf_arr,
1560 const amrex::Array4<amrex::Real>& olen_arr,
1561 const amrex::Array4<amrex::Real>& pblh_arr,
1562 const amrex::Array4<amrex::Real>& ,
1563 const amrex::Array4<amrex::Real>& ,
1564 const amrex::Array4<amrex::Real>& )
const
1580 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
1582 Olen = olen_arr(i,j,k);
1589 ustar = u_star_arr(i,j,k);
1591 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1592 (std::log(zref /
z0) - psi_h);
1595 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1596 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1600 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1602 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1603 umm = std::max(umm,
WSMIN);
1606 if ( (((Olen >=
zero) && (Oleno <=
zero)) ||
1607 ((Olen <=
zero) && (Oleno >=
zero))) &&
1608 std::fabs(Olen) + std::fabs(Oleno) <
amrex::Real(1.0)) {
1609 Olen =
myhalf * (Olen + Oleno);
1615 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
1617 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1618 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1619 "Maximum number of MOST iterations reached.");
1623 olen_arr(i,j,k) = Olen;
1624 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1625 (std::log(zref /
z0) - psi_h);
1628 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1631 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1632 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1665 const int& max_iters,
1666 const amrex::Array4<const amrex::Real>& zref_arr,
1667 const amrex::Array4<amrex::Real>& z0_arr,
1668 const amrex::Array4<const amrex::Real>& umm_arr,
1669 const amrex::Array4<const amrex::Real>& tm_arr,
1670 const amrex::Array4<const amrex::Real>& tvm_arr,
1671 const amrex::Array4<const amrex::Real>& qvm_arr,
1672 const amrex::Array4<amrex::Real>& u_star_arr,
1673 const amrex::Array4<amrex::Real>& w_star_arr,
1674 const amrex::Array4<amrex::Real>& t_star_arr,
1675 const amrex::Array4<amrex::Real>& q_star_arr,
1676 const amrex::Array4<amrex::Real>& t_surf_arr,
1677 const amrex::Array4<amrex::Real>& q_surf_arr,
1678 const amrex::Array4<amrex::Real>& olen_arr,
1679 const amrex::Array4<amrex::Real>& pblh_arr,
1680 const amrex::Array4<amrex::Real>& Hwave_arr,
1681 const amrex::Array4<amrex::Real>& Lwave_arr,
1682 const amrex::Array4<amrex::Real>& eta_arr)
const
1697 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1698 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1699 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1700 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1703 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
1705 Olen = olen_arr(i,j,k);
1712 ustar = u_star_arr(i,j,k);
1713 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) )
1715 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1716 (std::log(zref /
z0) - psi_h);
1719 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1720 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1724 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1726 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1727 umm = std::max(umm,
WSMIN);
1730 if ( (((Olen >=
zero) && (Oleno <=
zero)) ||
1731 ((Olen <=
zero) && (Oleno >=
zero))) &&
1732 std::fabs(Olen) + std::fabs(Oleno) <
amrex::Real(1.0)) {
1733 Olen =
myhalf * (Olen + Oleno);
1739 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
1741 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1742 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1743 "Maximum number of MOST iterations reached.");
1747 olen_arr(i,j,k) = Olen;
1748 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1749 (std::log(zref /
z0) - psi_h);
1752 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1755 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1756 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1765 #ifdef AMREX_USE_FLOAT
1789 const amrex::Array4<const amrex::Real>& cons_arr,
1790 const amrex::Array4<const amrex::Real>& velx_arr,
1791 const amrex::Array4<const amrex::Real>& vely_arr,
1792 const amrex::Array4<const amrex::Real>& umm_arr,
1793 const amrex::Array4<const amrex::Real>& qvm_arr,
1794 const amrex::Array4<const amrex::Real>& u_star_arr,
1795 const amrex::Array4<const amrex::Real>& q_star_arr,
1796 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
1808 wsp_mean = std::max(wsp_mean,
WSMIN);
1816 -
rho*qstar*ustar*(num1+num2)/((qv_mean-qv_surf)*wsp_mean) :
zero;
1827 const amrex::Array4<const amrex::Real>& cons_arr,
1828 const amrex::Array4<const amrex::Real>& velx_arr,
1829 const amrex::Array4<const amrex::Real>& vely_arr,
1830 const amrex::Array4<const amrex::Real>& umm_arr,
1831 const amrex::Array4<const amrex::Real>& tm_arr,
1832 const amrex::Array4<const amrex::Real>& u_star_arr,
1833 const amrex::Array4<const amrex::Real>& t_star_arr,
1834 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
1846 wsp_mean = std::max(wsp_mean,
WSMIN);
1854 -
rho*tstar*ustar*(num1+num2)/((theta_mean-theta_surf)*wsp_mean) :
zero;
1865 const amrex::Array4<const amrex::Real>& cons_arr,
1866 const amrex::Array4<const amrex::Real>& velx_arr,
1867 const amrex::Array4<const amrex::Real>& vely_arr,
1868 const amrex::Array4<const amrex::Real>& umm_arr,
1869 const amrex::Array4<const amrex::Real>& um_arr,
1870 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1874 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
1880 wsp_mean = std::max(wsp_mean,
WSMIN);
1891 amrex::Real stressx = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1902 const amrex::Array4<const amrex::Real>& cons_arr,
1903 const amrex::Array4<const amrex::Real>& velx_arr,
1904 const amrex::Array4<const amrex::Real>& vely_arr,
1905 const amrex::Array4<const amrex::Real>& umm_arr,
1906 const amrex::Array4<const amrex::Real>& vm_arr,
1907 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1910 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
1917 wsp_mean = std::max(wsp_mean,
WSMIN);
1928 amrex::Real stressy = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1934 #ifdef AMREX_USE_FLOAT
1956 const amrex::Array4<const amrex::Real>& ,
1957 const amrex::Array4<const amrex::Real>& ,
1958 const amrex::Array4<const amrex::Real>& ,
1959 const amrex::Array4<const amrex::Real>& ,
1960 const amrex::Array4<const amrex::Real>& ,
1961 const amrex::Array4<const amrex::Real>& ,
1962 const amrex::Array4<const amrex::Real>& ,
1963 const amrex::Array4<const amrex::Real>& )
const
1977 const amrex::Array4<const amrex::Real>& cons_arr,
1978 const amrex::Array4<const amrex::Real>& ,
1979 const amrex::Array4<const amrex::Real>& ,
1980 const amrex::Array4<const amrex::Real>& umm_arr,
1981 const amrex::Array4<const amrex::Real>& tm_arr,
1982 const amrex::Array4<const amrex::Real>& ,
1983 const amrex::Array4<const amrex::Real>& ,
1984 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
1994 amrex::Real moflux = -
rho * Ch * wsp_mean * (theta_mean - theta_surf);
2005 const amrex::Array4<const amrex::Real>& cons_arr,
2006 const amrex::Array4<const amrex::Real>& velx_arr,
2007 const amrex::Array4<const amrex::Real>& vely_arr,
2008 const amrex::Array4<const amrex::Real>& umm_arr,
2009 const amrex::Array4<const amrex::Real>& ,
2010 const amrex::Array4<const amrex::Real>& )
const
2014 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2041 const amrex::Array4<const amrex::Real>& cons_arr,
2042 const amrex::Array4<const amrex::Real>& velx_arr,
2043 const amrex::Array4<const amrex::Real>& vely_arr,
2044 const amrex::Array4<const amrex::Real>& umm_arr,
2045 const amrex::Array4<const amrex::Real>& ,
2046 const amrex::Array4<const amrex::Real>& )
const
2049 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2091 const amrex::Array4<const amrex::Real>& cons_arr,
2092 const amrex::Array4<const amrex::Real>& ,
2093 const amrex::Array4<const amrex::Real>& ,
2094 const amrex::Array4<const amrex::Real>& ,
2095 const amrex::Array4<const amrex::Real>& ,
2096 const amrex::Array4<const amrex::Real>& ,
2097 const amrex::Array4<const amrex::Real>& q_star_arr,
2098 const amrex::Array4<const amrex::Real>& )
const
2115 const amrex::Array4<const amrex::Real>& cons_arr,
2116 const amrex::Array4<const amrex::Real>& ,
2117 const amrex::Array4<const amrex::Real>& ,
2118 const amrex::Array4<const amrex::Real>& ,
2119 const amrex::Array4<const amrex::Real>& ,
2120 const amrex::Array4<const amrex::Real>& ,
2121 const amrex::Array4<const amrex::Real>& t_star_arr,
2122 const amrex::Array4<const amrex::Real>& )
const
2139 const amrex::Array4<const amrex::Real>& cons_arr,
2140 const amrex::Array4<const amrex::Real>& velx_arr,
2141 const amrex::Array4<const amrex::Real>& vely_arr,
2142 const amrex::Array4<const amrex::Real>& ,
2143 const amrex::Array4<const amrex::Real>& ,
2144 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2148 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2166 const amrex::Array4<const amrex::Real>& cons_arr,
2167 const amrex::Array4<const amrex::Real>& velx_arr,
2168 const amrex::Array4<const amrex::Real>& vely_arr,
2169 const amrex::Array4<const amrex::Real>& ,
2170 const amrex::Array4<const amrex::Real>& ,
2171 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2174 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2188 #ifdef AMREX_USE_FLOAT
2217 const amrex::Array4<const amrex::Real>& cons_arr,
2218 const amrex::Array4<const amrex::Real>& velx_arr,
2219 const amrex::Array4<const amrex::Real>& vely_arr,
2220 const amrex::Array4<const amrex::Real>& ,
2221 const amrex::Array4<const amrex::Real>& ,
2222 const amrex::Array4<const amrex::Real>& ,
2223 const amrex::Array4<const amrex::Real>& ,
2224 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2245 const amrex::Array4<const amrex::Real>& cons_arr,
2246 const amrex::Array4<const amrex::Real>& velx_arr,
2247 const amrex::Array4<const amrex::Real>& vely_arr,
2248 const amrex::Array4<const amrex::Real>& ,
2249 const amrex::Array4<const amrex::Real>& ,
2250 const amrex::Array4<const amrex::Real>& ,
2251 const amrex::Array4<const amrex::Real>& ,
2252 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2273 const amrex::Array4<const amrex::Real>& cons_arr,
2274 const amrex::Array4<const amrex::Real>& velx_arr,
2275 const amrex::Array4<const amrex::Real>& vely_arr,
2276 const amrex::Array4<const amrex::Real>& ,
2277 const amrex::Array4<const amrex::Real>& ,
2278 const amrex::Array4<const amrex::Real>& )
const
2283 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2299 const amrex::Array4<const amrex::Real>& cons_arr,
2300 const amrex::Array4<const amrex::Real>& velx_arr,
2301 const amrex::Array4<const amrex::Real>& vely_arr,
2302 const amrex::Array4<const amrex::Real>& ,
2303 const amrex::Array4<const amrex::Real>& ,
2304 const amrex::Array4<const amrex::Real>& )
const
2308 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2339 const amrex::Array4<const amrex::Real>& cons_arr,
2340 const amrex::Array4<const amrex::Real>& velx_arr,
2341 const amrex::Array4<const amrex::Real>& vely_arr,
2342 const amrex::Array4<const amrex::Real>& ,
2343 const amrex::Array4<const amrex::Real>& ,
2344 const amrex::Array4<const amrex::Real>& ,
2345 const amrex::Array4<const amrex::Real>& q_star_arr,
2346 const amrex::Array4<const amrex::Real>& )
const
2354 amrex::Real wsp = std::sqrt(velx*velx + vely*vely);
2368 const amrex::Array4<const amrex::Real>& cons_arr,
2369 const amrex::Array4<const amrex::Real>& velx_arr,
2370 const amrex::Array4<const amrex::Real>& vely_arr,
2371 const amrex::Array4<const amrex::Real>& ,
2372 const amrex::Array4<const amrex::Real>& ,
2373 const amrex::Array4<const amrex::Real>& ,
2374 const amrex::Array4<const amrex::Real>& t_star_arr,
2375 const amrex::Array4<const amrex::Real>& )
const
2383 amrex::Real wsp = std::sqrt(velx*velx + vely*vely);
2397 const amrex::Array4<const amrex::Real>& cons_arr,
2398 const amrex::Array4<const amrex::Real>& velx_arr,
2399 const amrex::Array4<const amrex::Real>& vely_arr,
2400 const amrex::Array4<const amrex::Real>& ,
2401 const amrex::Array4<const amrex::Real>& ,
2402 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2406 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2424 const amrex::Array4<const amrex::Real>& cons_arr,
2425 const amrex::Array4<const amrex::Real>& velx_arr,
2426 const amrex::Array4<const amrex::Real>& vely_arr,
2427 const amrex::Array4<const amrex::Real>& ,
2428 const amrex::Array4<const amrex::Real>& ,
2429 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2432 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2446 #ifdef AMREX_USE_FLOAT
2469 const amrex::Array4<const amrex::Real>& cons_arr,
2470 const amrex::Array4<const amrex::Real>& ,
2471 const amrex::Array4<const amrex::Real>& ,
2472 const amrex::Array4<const amrex::Real>& ,
2473 const amrex::Array4<const amrex::Real>& qvm_arr,
2474 const amrex::Array4<const amrex::Real>& ,
2475 const amrex::Array4<const amrex::Real>& q_star_arr,
2476 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2494 const amrex::Array4<const amrex::Real>& cons_arr,
2495 const amrex::Array4<const amrex::Real>& ,
2496 const amrex::Array4<const amrex::Real>& ,
2497 const amrex::Array4<const amrex::Real>& ,
2498 const amrex::Array4<const amrex::Real>& tm_arr,
2499 const amrex::Array4<const amrex::Real>& ,
2500 const amrex::Array4<const amrex::Real>& t_star_arr,
2501 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2519 const amrex::Array4<const amrex::Real>& cons_arr,
2520 const amrex::Array4<const amrex::Real>& ,
2521 const amrex::Array4<const amrex::Real>& ,
2522 const amrex::Array4<const amrex::Real>& ,
2523 const amrex::Array4<const amrex::Real>& ,
2524 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2540 const amrex::Array4<const amrex::Real>& ,
2541 const amrex::Array4<const amrex::Real>& ,
2542 const amrex::Array4<const amrex::Real>& ,
2543 const amrex::Array4<const amrex::Real>& ,
2544 const amrex::Array4<const amrex::Real>& ,
2545 const amrex::Array4<const amrex::Real>& )
const
2554 #ifdef AMREX_USE_FLOAT
constexpr amrex::Real three
Definition: ERF_Constants.H:9
constexpr amrex::Real KAPPA
Definition: ERF_Constants.H:31
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:16
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:32
constexpr amrex::Real PIoTwo
Definition: ERF_Constants.H:17
@ 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:193
@ theta
Definition: ERF_MM5.H:20
@ qv
Definition: ERF_Kessler.H:28
Definition: ERF_MOSTStress.H:189
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:270
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:269
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:359
similarity_funs sfuns
Definition: ERF_MOSTStress.H:419
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:421
most_data mdata
Definition: ERF_MOSTStress.H:418
adiabatic_donelan(amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:360
const amrex::Real tol
Definition: ERF_MOSTStress.H:420
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:370
Definition: ERF_MOSTStress.H:278
similarity_funs sfuns
Definition: ERF_MOSTStress.H:349
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:350
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:351
adiabatic_mod_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth)
Definition: ERF_MOSTStress.H:279
most_data mdata
Definition: ERF_MOSTStress.H:348
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:292
Definition: ERF_MOSTStress.H:429
const amrex::Real eps
Definition: ERF_MOSTStress.H:497
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:440
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:499
most_data mdata
Definition: ERF_MOSTStress.H:491
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:501
similarity_funs sfuns
Definition: ERF_MOSTStress.H:492
const amrex::Real tol
Definition: ERF_MOSTStress.H:493
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:500
adiabatic_wave_coupled(amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:430
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:2201
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:2270
bulk_coeff_flux(amrex::Real m_Cd, amrex::Real m_Ch, amrex::Real m_Cq)
Definition: ERF_MOSTStress.H:2202
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:2214
most_data mdata
Definition: ERF_MOSTStress.H:2320
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:2242
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:2296
Definition: ERF_MOSTStress.H:2080
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:2136
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:2088
custom_flux(bool specified_rho_surf)
Definition: ERF_MOSTStress.H:2081
const bool fluxes_include_rho
Definition: ERF_MOSTStress.H:2193
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:2112
const amrex::Real eps
Definition: ERF_MOSTStress.H:2191
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:2163
Definition: ERF_MOSTStress.H:1947
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:2002
donelan_flux()
Definition: ERF_MOSTStress.H:1948
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:2038
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:1974
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:1953
Definition: ERF_MOSTStress.H:1780
moeng_flux()
Definition: ERF_MOSTStress.H:1781
const amrex::Real eps
Definition: ERF_MOSTStress.H:1937
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:1862
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1939
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:1824
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:1786
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:1899
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:2328
rico_flux(amrex::Real l_theta_z0, amrex::Real l_qsat_z0)
Definition: ERF_MOSTStress.H:2329
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:2336
amrex::Real qsat_z0
Definition: ERF_MOSTStress.H:2452
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:2365
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:2394
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:2421
const amrex::Real eps
Definition: ERF_MOSTStress.H:2449
amrex::Real theta_z0
Definition: ERF_MOSTStress.H:2451
Definition: ERF_MOSTStress.H:2460
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:2537
rotate_flux()
Definition: ERF_MOSTStress.H:2461
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:2516
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:2491
const amrex::Real eps
Definition: ERF_MOSTStress.H:2557
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:2466
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:614
const amrex::Real tol
Definition: ERF_MOSTStress.H:724
surface_flux_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:615
similarity_funs sfuns
Definition: ERF_MOSTStress.H:723
most_data mdata
Definition: ERF_MOSTStress.H:721
bool spec_qflux
Definition: ERF_MOSTStress.H:722
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:631
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:725
Definition: ERF_MOSTStress.H:844
bool spec_qflux
Definition: ERF_MOSTStress.H:941
const amrex::Real tol
Definition: ERF_MOSTStress.H:943
surface_flux_donelan(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:845
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:944
most_data mdata
Definition: ERF_MOSTStress.H:940
similarity_funs sfuns
Definition: ERF_MOSTStress.H:942
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:857
Definition: ERF_MOSTStress.H:733
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:749
surface_flux_mod_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool cons_qflux)
Definition: ERF_MOSTStress.H:734
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:836
most_data mdata
Definition: ERF_MOSTStress.H:832
bool spec_qflux
Definition: ERF_MOSTStress.H:833
const amrex::Real tol
Definition: ERF_MOSTStress.H:835
similarity_funs sfuns
Definition: ERF_MOSTStress.H:834
Definition: ERF_MOSTStress.H:952
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1065
surface_flux_wave_coupled(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:953
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:1064
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:1063
most_data mdata
Definition: ERF_MOSTStress.H:1054
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1056
const amrex::Real tol
Definition: ERF_MOSTStress.H:1057
bool spec_qflux
Definition: ERF_MOSTStress.H:1055
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:965
const amrex::Real eps
Definition: ERF_MOSTStress.H:1061
Definition: ERF_MOSTStress.H:509
similarity_funs sfuns
Definition: ERF_MOSTStress.H:604
surface_flux(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:510
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:522
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:606
most_data mdata
Definition: ERF_MOSTStress.H:602
const amrex::Real tol
Definition: ERF_MOSTStress.H:605
bool spec_qflux
Definition: ERF_MOSTStress.H:603
Definition: ERF_MOSTStress.H:1207
most_data mdata
Definition: ERF_MOSTStress.H:1359
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:1224
bool spec_qflux
Definition: ERF_MOSTStress.H:1360
surface_temp_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:1208
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:1363
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1364
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1365
const amrex::Real tol
Definition: ERF_MOSTStress.H:1362
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1361
Definition: ERF_MOSTStress.H:1531
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1639
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:1544
most_data mdata
Definition: ERF_MOSTStress.H:1637
const amrex::Real tol
Definition: ERF_MOSTStress.H:1640
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1641
bool spec_qflux
Definition: ERF_MOSTStress.H:1638
surface_temp_donelan(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1532
Definition: ERF_MOSTStress.H:1373
surface_temp_mod_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool cons_qflux)
Definition: ERF_MOSTStress.H:1374
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1519
const amrex::Real tol
Definition: ERF_MOSTStress.H:1520
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:1521
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1523
most_data mdata
Definition: ERF_MOSTStress.H:1517
bool spec_qflux
Definition: ERF_MOSTStress.H:1518
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:1389
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1522
Definition: ERF_MOSTStress.H:1649
const amrex::Real eps
Definition: ERF_MOSTStress.H:1768
surface_temp_wave_coupled(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1650
const amrex::Real tol
Definition: ERF_MOSTStress.H:1764
most_data mdata
Definition: ERF_MOSTStress.H:1761
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:1662
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:1770
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1763
bool spec_qflux
Definition: ERF_MOSTStress.H:1762
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:1771
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1772
Definition: ERF_MOSTStress.H:1073
surface_temp(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1074
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1196
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:1086
const amrex::Real tol
Definition: ERF_MOSTStress.H:1197
bool spec_qflux
Definition: ERF_MOSTStress.H:1195
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1198
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1199
most_data mdata
Definition: ERF_MOSTStress.H:1194