1 #ifndef ERF_MOSTStress_H
2 #define ERF_MOSTStress_H
51 amrex::Real x = std::pow(1.0 + std::pow(zeta, 2.5), 1.0/2.5);
52 return ( -6.1*std::log(zeta +
x) );
55 amrex::Real psi_k_m = 2.0 * std::log(0.5 * (1.0 +
x)) + log(0.5 * (1.0 +
x *
x)) -
59 - std::sqrt(3.0)*std::atan((2.0*
y + 1.0)/std::sqrt(3.0))
61 return ( (psi_k_m + zeta*zeta*psi_c_m) / (1. + zeta*zeta) );
71 amrex::Real x = std::pow(1.0 + std::pow(zeta, 1.1), 1.0/1.1);
72 return ( -6.1*std::log(zeta +
x) );
78 - std::sqrt(3.0)*std::atan((2.0*
y + 1.0)/std::sqrt(3.0))
80 return ( (psi_k_h + zeta*zeta*psi_c_h) / (1. + zeta*zeta) );
97 return 2.0 * std::log(0.5 * (1.0 +
x)) + log(0.5 * (1.0 +
x *
x)) -
102 AMREX_GPU_HOST_DEVICE
111 return 2.0 * std::log(0.5 * (1.0 +
x));
133 return 1.326e-5*(1. + 6.542e-3*TC + 8.301e-6*TC*TC - 4.84e-9*TC*TC*TC);
158 const amrex::Array4<const amrex::Real>& z0_arr,
159 const amrex::Array4<const amrex::Real>& umm_arr,
160 const amrex::Array4<const amrex::Real>& ,
161 const amrex::Array4<const amrex::Real>& ,
162 const amrex::Array4<const amrex::Real>& ,
163 const amrex::Array4<amrex::Real>& u_star_arr,
164 const amrex::Array4<amrex::Real>& ,
165 const amrex::Array4<amrex::Real>& t_star_arr,
166 const amrex::Array4<amrex::Real>& q_star_arr,
167 const amrex::Array4<amrex::Real>& ,
168 const amrex::Array4<amrex::Real>& ,
169 const amrex::Array4<amrex::Real>& olen_arr,
170 const amrex::Array4<amrex::Real>& ,
171 const amrex::Array4<amrex::Real>& ,
172 const amrex::Array4<amrex::Real>& ,
173 const amrex::Array4<amrex::Real>& )
const
175 olen_arr(i,j,k) = 1.0e16;
177 t_star_arr(i,j,k) = 0.0;
178 q_star_arr(i,j,k) = 0.0;
211 const int& max_iters,
212 const amrex::Array4<amrex::Real>& z0_arr,
213 const amrex::Array4<const amrex::Real>& umm_arr,
214 const amrex::Array4<const amrex::Real>& tm_arr,
215 const amrex::Array4<const amrex::Real>& ,
216 const amrex::Array4<const amrex::Real>& ,
217 const amrex::Array4<amrex::Real>& u_star_arr,
218 const amrex::Array4<amrex::Real>& ,
219 const amrex::Array4<amrex::Real>& t_star_arr,
220 const amrex::Array4<amrex::Real>& q_star_arr,
221 const amrex::Array4<amrex::Real>& ,
222 const amrex::Array4<amrex::Real>& ,
223 const amrex::Array4<amrex::Real>& olen_arr,
224 const amrex::Array4<amrex::Real>& ,
225 const amrex::Array4<amrex::Real>& ,
226 const amrex::Array4<amrex::Real>& ,
227 const amrex::Array4<amrex::Real>& )
const
255 }
while ( (std::abs(z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
256 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
257 "Maximum number of MOST roughness iterations reached.");
262 olen_arr(i,j,k) = 1.0e16;
263 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
264 t_star_arr(i,j,k) = 0.0;
265 q_star_arr(i,j,k) = 0.0;
299 const int& max_iters,
300 const amrex::Array4<amrex::Real>& z0_arr,
301 const amrex::Array4<const amrex::Real>& umm_arr,
302 const amrex::Array4<const amrex::Real>& ,
303 const amrex::Array4<const amrex::Real>& ,
304 const amrex::Array4<const amrex::Real>& ,
305 const amrex::Array4<amrex::Real>& u_star_arr,
306 const amrex::Array4<amrex::Real>& ,
307 const amrex::Array4<amrex::Real>& t_star_arr,
308 const amrex::Array4<amrex::Real>& q_star_arr,
309 const amrex::Array4<amrex::Real>& ,
310 const amrex::Array4<amrex::Real>& ,
311 const amrex::Array4<amrex::Real>& olen_arr,
312 const amrex::Array4<amrex::Real>& ,
313 const amrex::Array4<amrex::Real>& ,
314 const amrex::Array4<amrex::Real>& ,
315 const amrex::Array4<amrex::Real>& )
const
336 }
while ( (std::abs(z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
337 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
338 "Maximum number of MOST roughness iterations reached.");
343 olen_arr(i,j,k) = 1.0e16;
344 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
345 t_star_arr(i,j,k) = 0.0;
346 q_star_arr(i,j,k) = 0.0;
377 const int& max_iters,
378 const amrex::Array4<amrex::Real>& z0_arr,
379 const amrex::Array4<const amrex::Real>& umm_arr,
380 const amrex::Array4<const amrex::Real>& ,
381 const amrex::Array4<const amrex::Real>& ,
382 const amrex::Array4<const amrex::Real>& ,
383 const amrex::Array4<amrex::Real>& u_star_arr,
384 const amrex::Array4<amrex::Real>& ,
385 const amrex::Array4<amrex::Real>& t_star_arr,
386 const amrex::Array4<amrex::Real>& q_star_arr,
387 const amrex::Array4<amrex::Real>& ,
388 const amrex::Array4<amrex::Real>& ,
389 const amrex::Array4<amrex::Real>& olen_arr,
390 const amrex::Array4<amrex::Real>& ,
391 const amrex::Array4<amrex::Real>& ,
392 const amrex::Array4<amrex::Real>& ,
393 const amrex::Array4<amrex::Real>& )
const
400 if (u_star_arr(i,j,k) == 1.E34) {
404 ustar = u_star_arr(i,j,k);
408 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
409 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
410 "Maximum number of MOST iterations reached.");
414 olen_arr(i,j,k) = 1.0e16;
415 t_star_arr(i,j,k) = 0.0;
416 q_star_arr(i,j,k) = 0.0;
447 const int& max_iters,
448 const amrex::Array4<amrex::Real>& z0_arr,
449 const amrex::Array4<const amrex::Real>& umm_arr,
450 const amrex::Array4<const amrex::Real>& ,
451 const amrex::Array4<const amrex::Real>& ,
452 const amrex::Array4<const amrex::Real>& ,
453 const amrex::Array4<amrex::Real>& u_star_arr,
454 const amrex::Array4<amrex::Real>& ,
455 const amrex::Array4<amrex::Real>& t_star_arr,
456 const amrex::Array4<amrex::Real>& q_star_arr,
457 const amrex::Array4<amrex::Real>& ,
458 const amrex::Array4<amrex::Real>& ,
459 const amrex::Array4<amrex::Real>& olen_arr,
460 const amrex::Array4<amrex::Real>& ,
461 const amrex::Array4<amrex::Real>& Hwave_arr,
462 const amrex::Array4<amrex::Real>& Lwave_arr,
463 const amrex::Array4<amrex::Real>& eta_arr)
const
470 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
471 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
472 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
473 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
476 ustar = u_star_arr(i,j,k);
477 z0 = std::min( std::max(1200.0 * Hwave_arr(i,j,k) * std::pow( Hwave_arr(i,j,k)/(Lwave_arr(i,j,k)+
eps), 4.5 )
481 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
482 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
483 "Maximum number of MOST iterations reached.");
487 olen_arr(i,j,k) = 1.0e16;
488 t_star_arr(i,j,k) = 0.0;
489 q_star_arr(i,j,k) = 0.0;
525 const int& max_iters,
526 const amrex::Array4<const amrex::Real>& z0_arr,
527 const amrex::Array4<const amrex::Real>& umm_arr,
528 const amrex::Array4<const amrex::Real>& tm_arr,
529 const amrex::Array4<const amrex::Real>& tvm_arr,
530 const amrex::Array4<const amrex::Real>& qvm_arr,
531 const amrex::Array4<amrex::Real>& u_star_arr,
532 const amrex::Array4<amrex::Real>& w_star_arr,
533 const amrex::Array4<amrex::Real>& t_star_arr,
534 const amrex::Array4<amrex::Real>& q_star_arr,
535 const amrex::Array4<amrex::Real>& t_surf_arr,
536 const amrex::Array4<amrex::Real>& q_surf_arr,
537 const amrex::Array4<amrex::Real>& olen_arr,
538 const amrex::Array4<amrex::Real>& pblh_arr,
539 const amrex::Array4<amrex::Real>& ,
540 const amrex::Array4<amrex::Real>& ,
541 const amrex::Array4<amrex::Real>& )
const
553 if (u_star_arr(i,j,k) == 1.E34) {
556 Olen = olen_arr(i,j,k);
562 ustar = u_star_arr(i,j,k);
564 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
565 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
569 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
571 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
572 umm = std::max(umm,
WSMIN);
580 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
581 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
582 "Maximum number of MOST iterations reached.");
585 olen_arr(i,j,k) = Olen;
587 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
591 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
594 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
595 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
634 const int& max_iters,
635 const amrex::Array4<amrex::Real>& z0_arr,
636 const amrex::Array4<const amrex::Real>& umm_arr,
637 const amrex::Array4<const amrex::Real>& tm_arr,
638 const amrex::Array4<const amrex::Real>& tvm_arr,
639 const amrex::Array4<const amrex::Real>& qvm_arr,
640 const amrex::Array4<amrex::Real>& u_star_arr,
641 const amrex::Array4<amrex::Real>& w_star_arr,
642 const amrex::Array4<amrex::Real>& t_star_arr,
643 const amrex::Array4<amrex::Real>& q_star_arr,
644 const amrex::Array4<amrex::Real>& t_surf_arr,
645 const amrex::Array4<amrex::Real>& q_surf_arr,
646 const amrex::Array4<amrex::Real>& olen_arr,
647 const amrex::Array4<amrex::Real>& pblh_arr,
648 const amrex::Array4<amrex::Real>& ,
649 const amrex::Array4<amrex::Real>& ,
650 const amrex::Array4<amrex::Real>& )
const
663 if (u_star_arr(i,j,k) == 1.E34) {
666 Olen = olen_arr(i,j,k);
672 ustar = u_star_arr(i,j,k);
682 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
683 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
687 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
689 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
690 umm = std::max(umm,
WSMIN);
698 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
699 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
700 "Maximum number of MOST iterations reached.");
704 olen_arr(i,j,k) = Olen;
706 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
710 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
713 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
714 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
752 const int& max_iters,
753 const amrex::Array4<amrex::Real>& z0_arr,
754 const amrex::Array4<const amrex::Real>& umm_arr,
755 const amrex::Array4<const amrex::Real>& tm_arr,
756 const amrex::Array4<const amrex::Real>& tvm_arr,
757 const amrex::Array4<const amrex::Real>& qvm_arr,
758 const amrex::Array4<amrex::Real>& u_star_arr,
759 const amrex::Array4<amrex::Real>& w_star_arr,
760 const amrex::Array4<amrex::Real>& t_star_arr,
761 const amrex::Array4<amrex::Real>& q_star_arr,
762 const amrex::Array4<amrex::Real>& t_surf_arr,
763 const amrex::Array4<amrex::Real>& q_surf_arr,
764 const amrex::Array4<amrex::Real>& olen_arr,
765 const amrex::Array4<amrex::Real>& pblh_arr,
766 const amrex::Array4<amrex::Real>& ,
767 const amrex::Array4<amrex::Real>& ,
768 const amrex::Array4<amrex::Real>& )
const
781 if (u_star_arr(i,j,k) == 1.E34) {
784 Olen = olen_arr(i,j,k);
790 ustar = u_star_arr(i,j,k);
793 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
794 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
798 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
800 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
801 umm = std::max(umm,
WSMIN);
809 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
810 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
811 "Maximum number of MOST iterations reached.");
815 olen_arr(i,j,k) = Olen;
817 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
821 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
824 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
825 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
860 const int& max_iters,
861 const amrex::Array4<amrex::Real>& z0_arr,
862 const amrex::Array4<const amrex::Real>& umm_arr,
863 const amrex::Array4<const amrex::Real>& tm_arr,
864 const amrex::Array4<const amrex::Real>& tvm_arr,
865 const amrex::Array4<const amrex::Real>& qvm_arr,
866 const amrex::Array4<amrex::Real>& u_star_arr,
867 const amrex::Array4<amrex::Real>& w_star_arr,
868 const amrex::Array4<amrex::Real>& t_star_arr,
869 const amrex::Array4<amrex::Real>& q_star_arr,
870 const amrex::Array4<amrex::Real>& t_surf_arr,
871 const amrex::Array4<amrex::Real>& q_surf_arr,
872 const amrex::Array4<amrex::Real>& olen_arr,
873 const amrex::Array4<amrex::Real>& pblh_arr,
874 const amrex::Array4<amrex::Real>& ,
875 const amrex::Array4<amrex::Real>& ,
876 const amrex::Array4<amrex::Real>& )
const
889 if (u_star_arr(i,j,k) == 1.E34) {
892 Olen = olen_arr(i,j,k);
898 ustar = u_star_arr(i,j,k);
901 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
902 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
906 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
908 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
909 umm = std::max(umm,
WSMIN);
917 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
918 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
919 "Maximum number of MOST iterations reached.");
923 olen_arr(i,j,k) = Olen;
925 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
929 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
932 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
933 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
968 const int& max_iters,
969 const amrex::Array4<amrex::Real>& z0_arr,
970 const amrex::Array4<const amrex::Real>& umm_arr,
971 const amrex::Array4<const amrex::Real>& tm_arr,
972 const amrex::Array4<const amrex::Real>& tvm_arr,
973 const amrex::Array4<const amrex::Real>& qvm_arr,
974 const amrex::Array4<amrex::Real>& u_star_arr,
975 const amrex::Array4<amrex::Real>& w_star_arr,
976 const amrex::Array4<amrex::Real>& t_star_arr,
977 const amrex::Array4<amrex::Real>& q_star_arr,
978 const amrex::Array4<amrex::Real>& t_surf_arr,
979 const amrex::Array4<amrex::Real>& q_surf_arr,
980 const amrex::Array4<amrex::Real>& olen_arr,
981 const amrex::Array4<amrex::Real>& pblh_arr,
982 const amrex::Array4<amrex::Real>& Hwave_arr,
983 const amrex::Array4<amrex::Real>& Lwave_arr,
984 const amrex::Array4<amrex::Real>& eta_arr)
const
997 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
998 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
999 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1000 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1002 if (u_star_arr(i,j,k) == 1.E34) {
1005 Olen = olen_arr(i,j,k);
1011 ustar = u_star_arr(i,j,k);
1012 z0 = std::min( std::max(1200.0 * Hwave_arr(i,j,k) * std::pow( Hwave_arr(i,j,k)/(Lwave_arr(i,j,k)+
eps), 4.5 )
1015 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1016 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1020 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1022 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1023 umm = std::max(umm,
WSMIN);
1031 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1032 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1033 "Maximum number of MOST iterations reached.");
1037 olen_arr(i,j,k) = Olen;
1039 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
1043 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1046 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1047 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1085 const int& max_iters,
1086 const amrex::Array4<const amrex::Real>& z0_arr,
1087 const amrex::Array4<const amrex::Real>& umm_arr,
1088 const amrex::Array4<const amrex::Real>& tm_arr,
1089 const amrex::Array4<const amrex::Real>& tvm_arr,
1090 const amrex::Array4<const amrex::Real>& qvm_arr,
1091 const amrex::Array4<amrex::Real>& u_star_arr,
1092 const amrex::Array4<amrex::Real>& w_star_arr,
1093 const amrex::Array4<amrex::Real>& t_star_arr,
1094 const amrex::Array4<amrex::Real>& q_star_arr,
1095 const amrex::Array4<amrex::Real>& t_surf_arr,
1096 const amrex::Array4<amrex::Real>& q_surf_arr,
1097 const amrex::Array4<amrex::Real>& olen_arr,
1098 const amrex::Array4<amrex::Real>& pblh_arr,
1099 const amrex::Array4<amrex::Real>& ,
1100 const amrex::Array4<amrex::Real>& ,
1101 const amrex::Array4<amrex::Real>& )
const
1115 if (u_star_arr(i,j,k) == 1.E34) { olen_arr(i,j,k) = 1.0e3; }
1120 if (q_surf_arr(i,j,k) > 0.) {
1121 qv_s = q_surf_arr(i,j,k);
1125 qv_s = qvm_arr(i,j,k);
1127 qv_a = qvm_arr(i,j,k);
1137 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1138 amrex::Real tflux = -ustar*tstar*(1 + 0.61*qvm_arr(i,j,k)) + 0.61*tm_arr(i,j,k)*qflux;
1139 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1141 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1142 umm = std::max(umm,
WSMIN);
1146 amrex::Real thv_s = t_surf_arr(i,j,k) * (1.0 + 0.61*qv_s);
1147 amrex::Real thv_a = tm_arr(i,j,k) * (1.0 + 0.61*qv_a);
1149 ( (thv_a - thv_s) / (umm * umm) );
1150 Rib = std::min(std::max(Rib,-4.0),4.0);
1163 num = std::max(C - psi_m, 1.0);
1164 den = std::max(C - psi_h, 1.0);
1170 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1171 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1172 "Maximum number of MOST iterations reached.");
1176 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1177 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1180 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1183 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1223 const int& max_iters,
1224 const amrex::Array4<amrex::Real>& z0_arr,
1225 const amrex::Array4<const amrex::Real>& umm_arr,
1226 const amrex::Array4<const amrex::Real>& tm_arr,
1227 const amrex::Array4<const amrex::Real>& tvm_arr,
1228 const amrex::Array4<const amrex::Real>& qvm_arr,
1229 const amrex::Array4<amrex::Real>& u_star_arr,
1230 const amrex::Array4<amrex::Real>& w_star_arr,
1231 const amrex::Array4<amrex::Real>& t_star_arr,
1232 const amrex::Array4<amrex::Real>& q_star_arr,
1233 const amrex::Array4<amrex::Real>& t_surf_arr,
1234 const amrex::Array4<amrex::Real>& q_surf_arr,
1235 const amrex::Array4<amrex::Real>& olen_arr,
1236 const amrex::Array4<amrex::Real>& pblh_arr,
1237 const amrex::Array4<amrex::Real>& ,
1238 const amrex::Array4<amrex::Real>& ,
1239 const amrex::Array4<amrex::Real>& )
const
1255 if (u_star_arr(i,j,k) == 1.E34) { olen_arr(i,j,k) = 1.0e3; }
1260 if (q_surf_arr(i,j,k) > 0.) {
1261 qv_s = q_surf_arr(i,j,k);
1265 qv_s = qvm_arr(i,j,k);
1267 qv_a = qvm_arr(i,j,k);
1277 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1278 amrex::Real tflux = -ustar*tstar*(1 + 0.61*qvm_arr(i,j,k)) + 0.61*tm_arr(i,j,k)*qflux;
1279 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1281 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1282 umm = std::max(umm,
WSMIN);
1286 amrex::Real thv_s = t_surf_arr(i,j,k) * (1.0 + 0.61*qv_s);
1287 amrex::Real thv_a = tm_arr(i,j,k) * (1.0 + 0.61*qv_a);
1289 ( (thv_a - thv_s) / (umm * umm) );
1290 Rib = std::min(std::max(Rib,-4.0),4.0);
1321 }
while ( (std::abs(z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
1322 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
1323 "Maximum number of MOST roughness iterations reached.");
1327 num = std::max(C - psi_m, 1.0);
1328 den = std::max(C - psi_h, 1.0);
1334 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1335 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1336 "Maximum number of MOST iterations reached.");
1341 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1342 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1345 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1348 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1388 const int& max_iters,
1389 const amrex::Array4<amrex::Real>& z0_arr,
1390 const amrex::Array4<const amrex::Real>& umm_arr,
1391 const amrex::Array4<const amrex::Real>& tm_arr,
1392 const amrex::Array4<const amrex::Real>& tvm_arr,
1393 const amrex::Array4<const amrex::Real>& qvm_arr,
1394 const amrex::Array4<amrex::Real>& u_star_arr,
1395 const amrex::Array4<amrex::Real>& w_star_arr,
1396 const amrex::Array4<amrex::Real>& t_star_arr,
1397 const amrex::Array4<amrex::Real>& q_star_arr,
1398 const amrex::Array4<amrex::Real>& t_surf_arr,
1399 const amrex::Array4<amrex::Real>& q_surf_arr,
1400 const amrex::Array4<amrex::Real>& olen_arr,
1401 const amrex::Array4<amrex::Real>& pblh_arr,
1402 const amrex::Array4<amrex::Real>& ,
1403 const amrex::Array4<amrex::Real>& ,
1404 const amrex::Array4<amrex::Real>& )
const
1420 if (u_star_arr(i,j,k) == 1.E34) { olen_arr(i,j,k) = 1.0e3; }
1425 if (q_surf_arr(i,j,k) > 0.) {
1426 qv_s = q_surf_arr(i,j,k);
1430 qv_s = qvm_arr(i,j,k);
1432 qv_a = qvm_arr(i,j,k);
1442 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1443 amrex::Real tflux = -ustar*tstar*(1 + 0.61*qvm_arr(i,j,k)) + 0.61*tm_arr(i,j,k)*qflux;
1444 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1446 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1447 umm = std::max(umm,
WSMIN);
1451 amrex::Real thv_s = t_surf_arr(i,j,k) * (1.0 + 0.61*qv_s);
1452 amrex::Real thv_a = tm_arr(i,j,k) * (1.0 + 0.61*qv_a);
1454 ( (thv_a - thv_s) / (umm * umm) );
1455 Rib = std::min(std::max(Rib,-4.0),4.0);
1479 }
while ( (std::abs(z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
1480 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter_z < max_iters,
1481 "Maximum number of MOST roughness iterations reached.");
1485 num = std::max(C - psi_m, 1.0);
1486 den = std::max(C - psi_h, 1.0);
1492 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1493 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1494 "Maximum number of MOST iterations reached.");
1499 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1500 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1503 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1506 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1543 const int& max_iters,
1544 const amrex::Array4<amrex::Real>& z0_arr,
1545 const amrex::Array4<const amrex::Real>& umm_arr,
1546 const amrex::Array4<const amrex::Real>& tm_arr,
1547 const amrex::Array4<const amrex::Real>& tvm_arr,
1548 const amrex::Array4<const amrex::Real>& qvm_arr,
1549 const amrex::Array4<amrex::Real>& u_star_arr,
1550 const amrex::Array4<amrex::Real>& w_star_arr,
1551 const amrex::Array4<amrex::Real>& t_star_arr,
1552 const amrex::Array4<amrex::Real>& q_star_arr,
1553 const amrex::Array4<amrex::Real>& t_surf_arr,
1554 const amrex::Array4<amrex::Real>& q_surf_arr,
1555 const amrex::Array4<amrex::Real>& olen_arr,
1556 const amrex::Array4<amrex::Real>& pblh_arr,
1557 const amrex::Array4<amrex::Real>& ,
1558 const amrex::Array4<amrex::Real>& ,
1559 const amrex::Array4<amrex::Real>& )
const
1573 if (u_star_arr(i,j,k) == 1.E34) {
1576 Olen = olen_arr(i,j,k);
1583 ustar = u_star_arr(i,j,k);
1585 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1587 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1589 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1590 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1591 tflux += 0.61*tm_arr(i,j,k) * qflux;
1594 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1596 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1597 umm = std::max(umm,
WSMIN);
1600 if ( (((Olen >= 0.0) && (Oleno <= 0.0)) ||
1601 ((Olen <= 0.0) && (Oleno >= 0.0))) &&
1602 std::fabs(Olen) + std::fabs(Oleno) < 1.) {
1603 Olen = 0.5 * (Olen + Oleno);
1611 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1612 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1613 "Maximum number of MOST iterations reached.");
1617 olen_arr(i,j,k) = Olen;
1618 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1622 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1625 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1626 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1661 const int& max_iters,
1662 const amrex::Array4<amrex::Real>& z0_arr,
1663 const amrex::Array4<const amrex::Real>& umm_arr,
1664 const amrex::Array4<const amrex::Real>& tm_arr,
1665 const amrex::Array4<const amrex::Real>& tvm_arr,
1666 const amrex::Array4<const amrex::Real>& qvm_arr,
1667 const amrex::Array4<amrex::Real>& u_star_arr,
1668 const amrex::Array4<amrex::Real>& w_star_arr,
1669 const amrex::Array4<amrex::Real>& t_star_arr,
1670 const amrex::Array4<amrex::Real>& q_star_arr,
1671 const amrex::Array4<amrex::Real>& t_surf_arr,
1672 const amrex::Array4<amrex::Real>& q_surf_arr,
1673 const amrex::Array4<amrex::Real>& olen_arr,
1674 const amrex::Array4<amrex::Real>& pblh_arr,
1675 const amrex::Array4<amrex::Real>& Hwave_arr,
1676 const amrex::Array4<amrex::Real>& Lwave_arr,
1677 const amrex::Array4<amrex::Real>& eta_arr)
const
1691 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1692 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1693 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1694 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1696 if (u_star_arr(i,j,k) == 1.E34) {
1699 Olen = olen_arr(i,j,k);
1706 ustar = u_star_arr(i,j,k);
1707 z0 = std::min( std::max(1200.0 * Hwave_arr(i,j,k) * std::pow( Hwave_arr(i,j,k)/(Lwave_arr(i,j,k)+
eps), 4.5 )
1709 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1711 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1713 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1714 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1715 tflux += 0.61*tm_arr(i,j,k) * qflux;
1718 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1720 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1721 umm = std::max(umm,
WSMIN);
1724 if ( (((Olen >= 0.0) && (Oleno <= 0.0)) ||
1725 ((Olen <= 0.0) && (Oleno >= 0.0))) &&
1726 std::fabs(Olen) + std::fabs(Oleno) < 1.) {
1727 Olen = 0.5 * (Olen + Oleno);
1735 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1736 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(iter < max_iters,
1737 "Maximum number of MOST iterations reached.");
1741 olen_arr(i,j,k) = Olen;
1742 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1746 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1749 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1750 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
1779 const amrex::Array4<const amrex::Real>& cons_arr,
1780 const amrex::Array4<const amrex::Real>& velx_arr,
1781 const amrex::Array4<const amrex::Real>& vely_arr,
1782 const amrex::Array4<const amrex::Real>& umm_arr,
1783 const amrex::Array4<const amrex::Real>& qvm_arr,
1784 const amrex::Array4<const amrex::Real>& u_star_arr,
1785 const amrex::Array4<const amrex::Real>& q_star_arr,
1786 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
1790 amrex::Real velx = 0.5 * ( velx_arr(i,j,k) + velx_arr(i+1,j ,k) );
1791 amrex::Real vely = 0.5 * ( vely_arr(i,j,k) + vely_arr(i ,j+1,k) );
1798 wsp_mean = std::max(wsp_mean,
WSMIN);
1806 -
rho*qstar*ustar*(num1+num2)/((qv_mean-qv_surf)*wsp_mean) : 0.0;
1817 const amrex::Array4<const amrex::Real>& cons_arr,
1818 const amrex::Array4<const amrex::Real>& velx_arr,
1819 const amrex::Array4<const amrex::Real>& vely_arr,
1820 const amrex::Array4<const amrex::Real>& umm_arr,
1821 const amrex::Array4<const amrex::Real>& tm_arr,
1822 const amrex::Array4<const amrex::Real>& u_star_arr,
1823 const amrex::Array4<const amrex::Real>& t_star_arr,
1824 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
1828 amrex::Real velx = 0.5 * ( velx_arr(i,j,k) + velx_arr(i+1,j ,k) );
1829 amrex::Real vely = 0.5 * ( vely_arr(i,j,k) + vely_arr(i ,j+1,k) );
1836 wsp_mean = std::max(wsp_mean,
WSMIN);
1844 -
rho*tstar*ustar*(num1+num2)/((theta_mean-theta_surf)*wsp_mean) : 0.0;
1855 const amrex::Array4<const amrex::Real>& cons_arr,
1856 const amrex::Array4<const amrex::Real>& velx_arr,
1857 const amrex::Array4<const amrex::Real>& vely_arr,
1858 const amrex::Array4<const amrex::Real>& umm_arr,
1859 const amrex::Array4<const amrex::Real>& um_arr,
1860 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1863 amrex::Real vely = 0.25 * ( vely_arr(i ,j,k) + vely_arr(i ,j+1,k)
1864 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
1868 amrex::Real ustar = 0.5 * ( u_star_arr(i-1,j,k) + u_star_arr(i,j,k) );
1869 amrex::Real wsp_mean = 0.5 * ( umm_arr(i-1,j,k) + umm_arr(i,j,k) );
1870 wsp_mean = std::max(wsp_mean,
WSMIN);
1881 amrex::Real stressx = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1892 const amrex::Array4<const amrex::Real>& cons_arr,
1893 const amrex::Array4<const amrex::Real>& velx_arr,
1894 const amrex::Array4<const amrex::Real>& vely_arr,
1895 const amrex::Array4<const amrex::Real>& umm_arr,
1896 const amrex::Array4<const amrex::Real>& vm_arr,
1897 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1899 amrex::Real velx = 0.25 * ( velx_arr(i,j ,k) + velx_arr(i+1,j ,k)
1900 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
1905 amrex::Real ustar = 0.5 * ( u_star_arr(i,j-1,k) + u_star_arr(i,j,k) );
1906 amrex::Real wsp_mean = 0.5 * ( umm_arr(i,j-1,k) + umm_arr(i,j,k) );
1907 wsp_mean = std::max(wsp_mean,
WSMIN);
1918 amrex::Real stressy = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1942 const amrex::Array4<const amrex::Real>& ,
1943 const amrex::Array4<const amrex::Real>& ,
1944 const amrex::Array4<const amrex::Real>& ,
1945 const amrex::Array4<const amrex::Real>& ,
1946 const amrex::Array4<const amrex::Real>& ,
1947 const amrex::Array4<const amrex::Real>& ,
1948 const amrex::Array4<const amrex::Real>& ,
1949 const amrex::Array4<const amrex::Real>& )
const
1963 const amrex::Array4<const amrex::Real>& cons_arr,
1964 const amrex::Array4<const amrex::Real>& ,
1965 const amrex::Array4<const amrex::Real>& ,
1966 const amrex::Array4<const amrex::Real>& umm_arr,
1967 const amrex::Array4<const amrex::Real>& tm_arr,
1968 const amrex::Array4<const amrex::Real>& ,
1969 const amrex::Array4<const amrex::Real>& ,
1970 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
1979 amrex::Real moflux = -
rho * Ch * wsp_mean * (theta_mean - theta_surf);
1990 const amrex::Array4<const amrex::Real>& cons_arr,
1991 const amrex::Array4<const amrex::Real>& velx_arr,
1992 const amrex::Array4<const amrex::Real>& vely_arr,
1993 const amrex::Array4<const amrex::Real>& umm_arr,
1994 const amrex::Array4<const amrex::Real>& ,
1995 const amrex::Array4<const amrex::Real>& )
const
1998 amrex::Real vely = 0.25 * ( vely_arr(i ,j,k) + vely_arr(i ,j+1,k)
1999 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2005 amrex::Real wsp_mean = 0.5 * ( umm_arr(i-1,j,k) + umm_arr(i,j,k) );
2006 if (wsp_mean <= 5.0) {
2008 }
else if (wsp_mean < 25.0 && wsp_mean > 5.0) {
2009 Cd = 0.001 + c * (wsp_mean - 5.0);
2026 const amrex::Array4<const amrex::Real>& cons_arr,
2027 const amrex::Array4<const amrex::Real>& velx_arr,
2028 const amrex::Array4<const amrex::Real>& vely_arr,
2029 const amrex::Array4<const amrex::Real>& umm_arr,
2030 const amrex::Array4<const amrex::Real>& ,
2031 const amrex::Array4<const amrex::Real>& )
const
2033 amrex::Real velx = 0.25 * ( velx_arr(i,j ,k) + velx_arr(i+1,j ,k)
2034 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2041 amrex::Real wsp_mean = 0.5 * ( umm_arr(i,j-1,k) + umm_arr(i,j,k) );
2042 if (wsp_mean <= 5.0) {
2044 }
else if (wsp_mean < 25.0 && wsp_mean > 5.0) {
2045 Cd = 0.001 + c * (wsp_mean - 5.0);
2076 const amrex::Array4<const amrex::Real>& cons_arr,
2077 const amrex::Array4<const amrex::Real>& ,
2078 const amrex::Array4<const amrex::Real>& ,
2079 const amrex::Array4<const amrex::Real>& ,
2080 const amrex::Array4<const amrex::Real>& ,
2081 const amrex::Array4<const amrex::Real>& ,
2082 const amrex::Array4<const amrex::Real>& q_star_arr,
2083 const amrex::Array4<const amrex::Real>& )
const
2100 const amrex::Array4<const amrex::Real>& cons_arr,
2101 const amrex::Array4<const amrex::Real>& ,
2102 const amrex::Array4<const amrex::Real>& ,
2103 const amrex::Array4<const amrex::Real>& ,
2104 const amrex::Array4<const amrex::Real>& ,
2105 const amrex::Array4<const amrex::Real>& ,
2106 const amrex::Array4<const amrex::Real>& t_star_arr,
2107 const amrex::Array4<const amrex::Real>& )
const
2124 const amrex::Array4<const amrex::Real>& cons_arr,
2125 const amrex::Array4<const amrex::Real>& velx_arr,
2126 const amrex::Array4<const amrex::Real>& vely_arr,
2127 const amrex::Array4<const amrex::Real>& ,
2128 const amrex::Array4<const amrex::Real>& ,
2129 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2132 amrex::Real vely = 0.25 * ( vely_arr(i ,j,k) + vely_arr(i ,j+1,k)
2133 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2136 amrex::Real ustar = 0.5 * ( u_star_arr(i-1,j,k) + u_star_arr(i,j,k) );
2151 const amrex::Array4<const amrex::Real>& cons_arr,
2152 const amrex::Array4<const amrex::Real>& velx_arr,
2153 const amrex::Array4<const amrex::Real>& vely_arr,
2154 const amrex::Array4<const amrex::Real>& ,
2155 const amrex::Array4<const amrex::Real>& ,
2156 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2158 amrex::Real velx = 0.25 * ( velx_arr(i,j ,k) + velx_arr(i+1,j ,k)
2159 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2163 amrex::Real ustar = 0.5 * ( u_star_arr(i,j-1,k) + u_star_arr(i,j,k) );
2198 const amrex::Array4<const amrex::Real>& cons_arr,
2199 const amrex::Array4<const amrex::Real>& velx_arr,
2200 const amrex::Array4<const amrex::Real>& vely_arr,
2201 const amrex::Array4<const amrex::Real>& ,
2202 const amrex::Array4<const amrex::Real>& ,
2203 const amrex::Array4<const amrex::Real>& ,
2204 const amrex::Array4<const amrex::Real>& ,
2205 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2210 amrex::Real velx = 0.5 * ( velx_arr(i,j,k) + velx_arr(i+1,j ,k) );
2211 amrex::Real vely = 0.5 * ( vely_arr(i,j,k) + vely_arr(i ,j+1,k) );
2226 const amrex::Array4<const amrex::Real>& cons_arr,
2227 const amrex::Array4<const amrex::Real>& velx_arr,
2228 const amrex::Array4<const amrex::Real>& vely_arr,
2229 const amrex::Array4<const amrex::Real>& ,
2230 const amrex::Array4<const amrex::Real>& ,
2231 const amrex::Array4<const amrex::Real>& ,
2232 const amrex::Array4<const amrex::Real>& ,
2233 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2238 amrex::Real velx = 0.5 * ( velx_arr(i,j,k) + velx_arr(i+1,j ,k) );
2239 amrex::Real vely = 0.5 * ( vely_arr(i,j,k) + vely_arr(i ,j+1,k) );
2254 const amrex::Array4<const amrex::Real>& cons_arr,
2255 const amrex::Array4<const amrex::Real>& velx_arr,
2256 const amrex::Array4<const amrex::Real>& vely_arr,
2257 const amrex::Array4<const amrex::Real>& ,
2258 const amrex::Array4<const amrex::Real>& ,
2259 const amrex::Array4<const amrex::Real>& )
const
2263 amrex::Real vely = 0.25 * ( vely_arr(i ,j,k) + vely_arr(i ,j+1,k)
2264 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2280 const amrex::Array4<const amrex::Real>& cons_arr,
2281 const amrex::Array4<const amrex::Real>& velx_arr,
2282 const amrex::Array4<const amrex::Real>& vely_arr,
2283 const amrex::Array4<const amrex::Real>& ,
2284 const amrex::Array4<const amrex::Real>& ,
2285 const amrex::Array4<const amrex::Real>& )
const
2288 amrex::Real velx = 0.25 * ( velx_arr(i,j ,k) + velx_arr(i+1,j ,k)
2289 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2318 const amrex::Array4<const amrex::Real>& cons_arr,
2319 const amrex::Array4<const amrex::Real>& ,
2320 const amrex::Array4<const amrex::Real>& ,
2321 const amrex::Array4<const amrex::Real>& ,
2322 const amrex::Array4<const amrex::Real>& qvm_arr,
2323 const amrex::Array4<const amrex::Real>& ,
2324 const amrex::Array4<const amrex::Real>& q_star_arr,
2325 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2332 amrex::Real moflux = (std::abs(qstar) >
eps) ? -
rho * qstar * (qv_mean-qv_surf): 0.0;
2343 const amrex::Array4<const amrex::Real>& cons_arr,
2344 const amrex::Array4<const amrex::Real>& ,
2345 const amrex::Array4<const amrex::Real>& ,
2346 const amrex::Array4<const amrex::Real>& ,
2347 const amrex::Array4<const amrex::Real>& tm_arr,
2348 const amrex::Array4<const amrex::Real>& ,
2349 const amrex::Array4<const amrex::Real>& t_star_arr,
2350 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2357 amrex::Real moflux = (std::abs(tstar) >
eps) ? -
rho * tstar * (theta_mean-theta_surf) : 0.0;
2368 const amrex::Array4<const amrex::Real>& cons_arr,
2369 const amrex::Array4<const amrex::Real>& ,
2370 const amrex::Array4<const amrex::Real>& ,
2371 const amrex::Array4<const amrex::Real>& ,
2372 const amrex::Array4<const amrex::Real>& ,
2373 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2377 amrex::Real ustar = 0.5 * ( u_star_arr(i-1,j,k) + u_star_arr(i,j,k) );
2389 const amrex::Array4<const amrex::Real>& ,
2390 const amrex::Array4<const amrex::Real>& ,
2391 const amrex::Array4<const amrex::Real>& ,
2392 const amrex::Array4<const amrex::Real>& ,
2393 const amrex::Array4<const amrex::Real>& ,
2394 const amrex::Array4<const amrex::Real>& )
const
constexpr amrex::Real KAPPA
Definition: ERF_Constants.H:20
constexpr amrex::Real PI
Definition: ERF_Constants.H:6
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:21
constexpr amrex::Real PIoTwo
Definition: ERF_Constants.H:7
@ num
Definition: ERF_DataStruct.H:22
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Donelan_roughness(amrex::Real ustar)
Definition: ERF_MOSTRoughness.H:29
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real COARE3_roughness(amrex::Real zref, amrex::Real umm, amrex::Real ustar)
Definition: ERF_MOSTRoughness.H:9
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real air_viscosity(amrex::Real T_degK)
Definition: ERF_MOSTStress.H:130
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=0.0)
Definition: ERF_Wstar.H:13
@ Mom_v
Definition: ERF_IndexDefines.H:175
@ theta
Definition: ERF_MM5.H:20
@ rho
Definition: ERF_Kessler.H:22
@ qv
Definition: ERF_Kessler.H:28
Definition: ERF_MOSTStress.H:191
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:272
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:208
most_data mdata
Definition: ERF_MOSTStress.H:269
adiabatic_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc)
Definition: ERF_MOSTStress.H:192
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:271
similarity_funs sfuns
Definition: ERF_MOSTStress.H:270
Definition: ERF_MOSTStress.H:361
adiabatic_donelan(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:362
similarity_funs sfuns
Definition: ERF_MOSTStress.H:421
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:423
most_data mdata
Definition: ERF_MOSTStress.H:420
const amrex::Real tol
Definition: ERF_MOSTStress.H:422
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:374
Definition: ERF_MOSTStress.H:280
adiabatic_mod_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth)
Definition: ERF_MOSTStress.H:281
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:296
similarity_funs sfuns
Definition: ERF_MOSTStress.H:351
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:352
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:353
most_data mdata
Definition: ERF_MOSTStress.H:350
Definition: ERF_MOSTStress.H:431
const amrex::Real eps
Definition: ERF_MOSTStress.H:496
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:497
most_data mdata
Definition: ERF_MOSTStress.H:493
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &Hwave_arr, const amrex::Array4< amrex::Real > &Lwave_arr, const amrex::Array4< amrex::Real > &eta_arr) const
Definition: ERF_MOSTStress.H:444
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:499
similarity_funs sfuns
Definition: ERF_MOSTStress.H:494
const amrex::Real tol
Definition: ERF_MOSTStress.H:495
adiabatic_wave_coupled(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:432
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:498
Definition: ERF_MOSTStress.H:141
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &, const amrex::Array4< const amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:154
similarity_funs sfuns
Definition: ERF_MOSTStress.H:183
adiabatic(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:142
most_data mdata
Definition: ERF_MOSTStress.H:182
Definition: ERF_MOSTStress.H:2182
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:2251
bulk_coeff_flux(amrex::Real m_Cd, amrex::Real m_Ch, amrex::Real m_Cq)
Definition: ERF_MOSTStress.H:2183
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:2195
most_data mdata
Definition: ERF_MOSTStress.H:2301
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:2223
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:2277
Definition: ERF_MOSTStress.H:2065
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:2121
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:2073
custom_flux(bool specified_rho_surf)
Definition: ERF_MOSTStress.H:2066
const bool fluxes_include_rho
Definition: ERF_MOSTStress.H:2174
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:2097
const amrex::Real eps
Definition: ERF_MOSTStress.H:2173
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:2148
Definition: ERF_MOSTStress.H:1933
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:1987
donelan_flux()
Definition: ERF_MOSTStress.H:1934
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:2023
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:1960
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:1939
Definition: ERF_MOSTStress.H:1770
moeng_flux()
Definition: ERF_MOSTStress.H:1771
const amrex::Real eps
Definition: ERF_MOSTStress.H:1924
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:1852
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1925
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:1814
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:1776
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:1889
Definition: ERF_MOSTStress.H:13
amrex::Real surf_moist_flux
Moisture flux.
Definition: ERF_MOSTStress.H:20
amrex::Real zref
Reference height (m)
Definition: ERF_MOSTStress.H:15
amrex::Real Cnk_b2
Modified Charnock Eq (4) https://doi.org/10.1175/JAMC-D-17-0137.1.
Definition: ERF_MOSTStress.H:24
amrex::Real Cnk_b
Definition: ERF_MOSTStress.H:26
amrex::Real Ch
Definition: ERF_MOSTStress.H:30
amrex::Real Cnk_d
Modified Charnock Eq (4) https://doi.org/10.1175/JAMC-D-17-0137.1.
Definition: ERF_MOSTStress.H:25
amrex::Real kappa
von Karman constant
Definition: ERF_MOSTStress.H:17
amrex::Real gravity
Acceleration due to gravity (m/s^2)
Definition: ERF_MOSTStress.H:18
amrex::Real Cnk_a
Standard Charnock constant https://doi.org/10.1175/JAMC-D-17-0137.1.
Definition: ERF_MOSTStress.H:22
amrex::Real Cd
Definition: ERF_MOSTStress.H:29
amrex::Real Cq
Definition: ERF_MOSTStress.H:31
const amrex::Real Bjr_beta
Definition: ERF_MOSTStress.H:33
amrex::Real Cnk_b1
Modified Charnock Eq (4) https://doi.org/10.1175/JAMC-D-17-0137.1.
Definition: ERF_MOSTStress.H:23
amrex::Real z0_const
Roughness height – default constant value(m)
Definition: ERF_MOSTStress.H:16
bool visc
Use viscous Charnock formulation.
Definition: ERF_MOSTStress.H:27
amrex::Real surf_temp_flux
Heat flux TODO: decide whether this is <θ'w'> or <θv'w'> under moist conditions.
Definition: ERF_MOSTStress.H:19
Definition: ERF_MOSTStress.H:2309
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:2386
rotate_flux()
Definition: ERF_MOSTStress.H:2310
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:2365
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:2340
const amrex::Real eps
Definition: ERF_MOSTStress.H:2403
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:2315
Definition: ERF_MOSTStress.H:41
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:91
amrex::Real beta_m
Constants from Dyer, BLM, 1974.
Definition: ERF_MOSTStress.H:116
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h2(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:68
amrex::Real beta_h
https://doi.org/10.1007/BF00240838
Definition: ERF_MOSTStress.H:117
amrex::Real gamma_h
Definition: ERF_MOSTStress.H:119
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:105
amrex::Real gamma_m
Definition: ERF_MOSTStress.H:118
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m2(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:48
Definition: ERF_MOSTStress.H:612
const amrex::Real tol
Definition: ERF_MOSTStress.H:722
similarity_funs sfuns
Definition: ERF_MOSTStress.H:721
most_data mdata
Definition: ERF_MOSTStress.H:719
bool spec_qflux
Definition: ERF_MOSTStress.H:720
surface_flux_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:613
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:723
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:631
Definition: ERF_MOSTStress.H:842
bool spec_qflux
Definition: ERF_MOSTStress.H:939
surface_flux_donelan(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:843
const amrex::Real tol
Definition: ERF_MOSTStress.H:941
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:942
most_data mdata
Definition: ERF_MOSTStress.H:938
similarity_funs sfuns
Definition: ERF_MOSTStress.H:940
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:857
Definition: ERF_MOSTStress.H:731
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:749
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:834
most_data mdata
Definition: ERF_MOSTStress.H:830
bool spec_qflux
Definition: ERF_MOSTStress.H:831
surface_flux_mod_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool cons_qflux)
Definition: ERF_MOSTStress.H:732
const amrex::Real tol
Definition: ERF_MOSTStress.H:833
similarity_funs sfuns
Definition: ERF_MOSTStress.H:832
Definition: ERF_MOSTStress.H:950
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1059
surface_flux_wave_coupled(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:951
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:1058
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:1057
most_data mdata
Definition: ERF_MOSTStress.H:1052
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1054
const amrex::Real tol
Definition: ERF_MOSTStress.H:1055
bool spec_qflux
Definition: ERF_MOSTStress.H:1053
const amrex::Real eps
Definition: ERF_MOSTStress.H:1056
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &Hwave_arr, const amrex::Array4< amrex::Real > &Lwave_arr, const amrex::Array4< amrex::Real > &eta_arr) const
Definition: ERF_MOSTStress.H:965
Definition: ERF_MOSTStress.H:507
similarity_funs sfuns
Definition: ERF_MOSTStress.H:602
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:604
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< const amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:522
most_data mdata
Definition: ERF_MOSTStress.H:600
const amrex::Real tol
Definition: ERF_MOSTStress.H:603
bool spec_qflux
Definition: ERF_MOSTStress.H:601
surface_flux(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:508
Definition: ERF_MOSTStress.H:1201
most_data mdata
Definition: ERF_MOSTStress.H:1353
surface_temp_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:1202
bool spec_qflux
Definition: ERF_MOSTStress.H:1354
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:1357
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:1220
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1358
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1359
const amrex::Real tol
Definition: ERF_MOSTStress.H:1356
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1355
Definition: ERF_MOSTStress.H:1525
surface_temp_donelan(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1526
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1633
most_data mdata
Definition: ERF_MOSTStress.H:1631
const amrex::Real tol
Definition: ERF_MOSTStress.H:1634
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1635
bool spec_qflux
Definition: ERF_MOSTStress.H:1632
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:1540
Definition: ERF_MOSTStress.H:1367
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1513
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:1385
const amrex::Real tol
Definition: ERF_MOSTStress.H:1514
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:1515
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1517
surface_temp_mod_charnock(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool cons_qflux)
Definition: ERF_MOSTStress.H:1368
most_data mdata
Definition: ERF_MOSTStress.H:1511
bool spec_qflux
Definition: ERF_MOSTStress.H:1512
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1516
Definition: ERF_MOSTStress.H:1643
const amrex::Real eps
Definition: ERF_MOSTStress.H:1759
const amrex::Real tol
Definition: ERF_MOSTStress.H:1758
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &Hwave_arr, const amrex::Array4< amrex::Real > &Lwave_arr, const amrex::Array4< amrex::Real > &eta_arr) const
Definition: ERF_MOSTStress.H:1658
most_data mdata
Definition: ERF_MOSTStress.H:1755
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:1760
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1757
bool spec_qflux
Definition: ERF_MOSTStress.H:1756
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:1761
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1762
surface_temp_wave_coupled(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1644
Definition: ERF_MOSTStress.H:1067
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1190
surface_temp(amrex::Real zref, amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1068
const amrex::Real tol
Definition: ERF_MOSTStress.H:1191
bool spec_qflux
Definition: ERF_MOSTStress.H:1189
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void iterate_flux(const int &i, const int &j, const int &k, const int &max_iters, const amrex::Array4< const amrex::Real > &z0_arr, const amrex::Array4< const amrex::Real > &umm_arr, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::Array4< const amrex::Real > &tvm_arr, const amrex::Array4< const amrex::Real > &qvm_arr, const amrex::Array4< amrex::Real > &u_star_arr, const amrex::Array4< amrex::Real > &w_star_arr, const amrex::Array4< amrex::Real > &t_star_arr, const amrex::Array4< amrex::Real > &q_star_arr, const amrex::Array4< amrex::Real > &t_surf_arr, const amrex::Array4< amrex::Real > &q_surf_arr, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &pblh_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:1082
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1192
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1193
most_data mdata
Definition: ERF_MOSTStress.H:1188