1 #ifndef ERF_MOSTStress_H
2 #define ERF_MOSTStress_H
65 return ( (psi_k_m + zeta*zeta*psi_c_m) / (
one + zeta*zeta) );
89 return ( (psi_k_h + zeta*zeta*psi_c_h) / (
one + zeta*zeta) );
102 AMREX_GPU_HOST_DEVICE
121 AMREX_GPU_HOST_DEVICE
192 const amrex::Array4<const amrex::Real>& zref_arr,
193 const amrex::Array4<const amrex::Real>& z0_arr,
194 const amrex::Array4<const amrex::Real>& umm_arr,
195 const amrex::Array4<const amrex::Real>& ,
196 const amrex::Array4<const amrex::Real>& ,
197 const amrex::Array4<const amrex::Real>& ,
198 const amrex::Array4<amrex::Real>& u_star_arr,
199 const amrex::Array4<amrex::Real>& ,
200 const amrex::Array4<amrex::Real>& t_star_arr,
201 const amrex::Array4<amrex::Real>& q_star_arr,
202 const amrex::Array4<amrex::Real>& ,
203 const amrex::Array4<amrex::Real>& ,
204 const amrex::Array4<amrex::Real>& olen_arr,
205 const amrex::Array4<amrex::Real>& ,
206 const amrex::Array4<amrex::Real>& ,
207 const amrex::Array4<amrex::Real>& ,
208 const amrex::Array4<amrex::Real>& )
const
211 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));
212 t_star_arr(i,j,k) =
zero;
213 q_star_arr(i,j,k) =
zero;
261 const int& max_iters,
262 const amrex::Array4<const amrex::Real>& zref_arr,
263 const amrex::Array4<amrex::Real>& z0_arr,
264 const amrex::Array4<const amrex::Real>& umm_arr,
265 const amrex::Array4<const amrex::Real>& tm_arr,
266 const amrex::Array4<const amrex::Real>& ,
267 const amrex::Array4<const amrex::Real>& ,
268 const amrex::Array4<amrex::Real>& u_star_arr,
269 const amrex::Array4<amrex::Real>& ,
270 const amrex::Array4<amrex::Real>& t_star_arr,
271 const amrex::Array4<amrex::Real>& q_star_arr,
272 const amrex::Array4<amrex::Real>& ,
273 const amrex::Array4<amrex::Real>& ,
274 const amrex::Array4<amrex::Real>& olen_arr,
275 const amrex::Array4<amrex::Real>& ,
276 const amrex::Array4<amrex::Real>& ,
277 const amrex::Array4<amrex::Real>& ,
278 const amrex::Array4<amrex::Real>& )
const
295 C = std::log(zref / z0_old);
307 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
309 "Maximum number of MOST roughness iterations reached.");
310 C = std::log(zref /
z0);
315 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
316 t_star_arr(i,j,k) =
zero;
317 q_star_arr(i,j,k) =
zero;
323 #ifdef AMREX_USE_FLOAT
369 const int& max_iters,
370 const amrex::Array4<const amrex::Real>& zref_arr,
371 const amrex::Array4<amrex::Real>& z0_arr,
372 const amrex::Array4<const amrex::Real>& umm_arr,
373 const amrex::Array4<const amrex::Real>& ,
374 const amrex::Array4<const amrex::Real>& ,
375 const amrex::Array4<const amrex::Real>& ,
376 const amrex::Array4<amrex::Real>& u_star_arr,
377 const amrex::Array4<amrex::Real>& ,
378 const amrex::Array4<amrex::Real>& t_star_arr,
379 const amrex::Array4<amrex::Real>& q_star_arr,
380 const amrex::Array4<amrex::Real>& ,
381 const amrex::Array4<amrex::Real>& ,
382 const amrex::Array4<amrex::Real>& olen_arr,
383 const amrex::Array4<amrex::Real>& ,
384 const amrex::Array4<amrex::Real>& ,
385 const amrex::Array4<amrex::Real>& ,
386 const amrex::Array4<amrex::Real>& )
const
403 C = std::log(zref / z0_old);
408 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
410 "Maximum number of MOST roughness iterations reached.");
411 C = std::log(zref /
z0);
416 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
417 t_star_arr(i,j,k) =
zero;
418 q_star_arr(i,j,k) =
zero;
424 #ifdef AMREX_USE_FLOAT
466 const int& max_iters,
467 const amrex::Array4<const amrex::Real>& zref_arr,
468 const amrex::Array4<amrex::Real>& z0_arr,
469 const amrex::Array4<const amrex::Real>& umm_arr,
470 const amrex::Array4<const amrex::Real>& ,
471 const amrex::Array4<const amrex::Real>& ,
472 const amrex::Array4<const amrex::Real>& ,
473 const amrex::Array4<amrex::Real>& u_star_arr,
474 const amrex::Array4<amrex::Real>& ,
475 const amrex::Array4<amrex::Real>& t_star_arr,
476 const amrex::Array4<amrex::Real>& q_star_arr,
477 const amrex::Array4<amrex::Real>& ,
478 const amrex::Array4<amrex::Real>& ,
479 const amrex::Array4<amrex::Real>& olen_arr,
480 const amrex::Array4<amrex::Real>& ,
481 const amrex::Array4<amrex::Real>& ,
482 const amrex::Array4<amrex::Real>& ,
483 const amrex::Array4<amrex::Real>& )
const
490 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
492 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
495 ustar = u_star_arr(i,j,k);
497 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref /
z0);
499 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
501 "Maximum number of MOST iterations reached.");
506 t_star_arr(i,j,k) =
zero;
507 q_star_arr(i,j,k) =
zero;
551 const int& max_iters,
552 const amrex::Array4<const amrex::Real>& zref_arr,
553 const amrex::Array4<amrex::Real>& z0_arr,
554 const amrex::Array4<const amrex::Real>& umm_arr,
555 const amrex::Array4<const amrex::Real>& ,
556 const amrex::Array4<const amrex::Real>& ,
557 const amrex::Array4<const amrex::Real>& ,
558 const amrex::Array4<amrex::Real>& u_star_arr,
559 const amrex::Array4<amrex::Real>& ,
560 const amrex::Array4<amrex::Real>& t_star_arr,
561 const amrex::Array4<amrex::Real>& q_star_arr,
562 const amrex::Array4<amrex::Real>& ,
563 const amrex::Array4<amrex::Real>& ,
564 const amrex::Array4<amrex::Real>& olen_arr,
565 const amrex::Array4<amrex::Real>& ,
566 const amrex::Array4<amrex::Real>& Hwave_arr,
567 const amrex::Array4<amrex::Real>& Lwave_arr,
568 const amrex::Array4<amrex::Real>& eta_arr)
const
576 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
577 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
578 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
579 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
580 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
582 ustar = u_star_arr(i,j,k);
583 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) )
585 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref /
z0);
587 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
589 "Maximum number of MOST iterations reached.");
594 t_star_arr(i,j,k) =
zero;
595 q_star_arr(i,j,k) =
zero;
602 #ifdef AMREX_USE_FLOAT
649 const int& max_iters,
650 const amrex::Array4<const amrex::Real>& zref_arr,
651 const amrex::Array4<const amrex::Real>& z0_arr,
652 const amrex::Array4<const amrex::Real>& umm_arr,
653 const amrex::Array4<const amrex::Real>& tm_arr,
654 const amrex::Array4<const amrex::Real>& tvm_arr,
655 const amrex::Array4<const amrex::Real>& qvm_arr,
656 const amrex::Array4<amrex::Real>& u_star_arr,
657 const amrex::Array4<amrex::Real>& w_star_arr,
658 const amrex::Array4<amrex::Real>& t_star_arr,
659 const amrex::Array4<amrex::Real>& q_star_arr,
660 const amrex::Array4<amrex::Real>& t_surf_arr,
661 const amrex::Array4<amrex::Real>& q_surf_arr,
662 const amrex::Array4<amrex::Real>& olen_arr,
663 const amrex::Array4<amrex::Real>& pblh_arr,
664 const amrex::Array4<amrex::Real>& ,
665 const amrex::Array4<amrex::Real>& ,
666 const amrex::Array4<amrex::Real>& )
const
680 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
682 Olen = olen_arr(i,j,k);
688 ustar = u_star_arr(i,j,k);
690 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
691 (std::log(zref / z0_arr(i,j,k)) - psi_h);
695 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
697 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
698 umm = std::max(umm,
WSMIN);
704 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref / z0_arr(i,j,k)) - psi_m);
706 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
708 "Maximum number of MOST iterations reached.");
711 olen_arr(i,j,k) = Olen;
713 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
717 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
720 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
721 (std::log(zref / z0_arr(i,j,k)) - psi_h);
776 const int& max_iters,
777 const amrex::Array4<const amrex::Real>& zref_arr,
778 const amrex::Array4<amrex::Real>& z0_arr,
779 const amrex::Array4<const amrex::Real>& umm_arr,
780 const amrex::Array4<const amrex::Real>& tm_arr,
781 const amrex::Array4<const amrex::Real>& tvm_arr,
782 const amrex::Array4<const amrex::Real>& qvm_arr,
783 const amrex::Array4<amrex::Real>& u_star_arr,
784 const amrex::Array4<amrex::Real>& w_star_arr,
785 const amrex::Array4<amrex::Real>& t_star_arr,
786 const amrex::Array4<amrex::Real>& q_star_arr,
787 const amrex::Array4<amrex::Real>& t_surf_arr,
788 const amrex::Array4<amrex::Real>& q_surf_arr,
789 const amrex::Array4<amrex::Real>& olen_arr,
790 const amrex::Array4<amrex::Real>& pblh_arr,
791 const amrex::Array4<amrex::Real>& ,
792 const amrex::Array4<amrex::Real>& ,
793 const amrex::Array4<amrex::Real>& )
const
808 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
810 Olen = olen_arr(i,j,k);
816 ustar = u_star_arr(i,j,k);
826 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
827 (std::log(zref / z0_arr(i,j,k)) - psi_h);
831 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
833 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
834 umm = std::max(umm,
WSMIN);
840 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
842 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
844 "Maximum number of MOST iterations reached.");
848 olen_arr(i,j,k) = Olen;
850 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
854 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
857 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
858 (std::log(zref / z0_arr(i,j,k)) - psi_h);
911 const int& max_iters,
912 const amrex::Array4<const amrex::Real>& zref_arr,
913 const amrex::Array4<amrex::Real>& z0_arr,
914 const amrex::Array4<const amrex::Real>& umm_arr,
915 const amrex::Array4<const amrex::Real>& tm_arr,
916 const amrex::Array4<const amrex::Real>& tvm_arr,
917 const amrex::Array4<const amrex::Real>& qvm_arr,
918 const amrex::Array4<amrex::Real>& u_star_arr,
919 const amrex::Array4<amrex::Real>& w_star_arr,
920 const amrex::Array4<amrex::Real>& t_star_arr,
921 const amrex::Array4<amrex::Real>& q_star_arr,
922 const amrex::Array4<amrex::Real>& t_surf_arr,
923 const amrex::Array4<amrex::Real>& q_surf_arr,
924 const amrex::Array4<amrex::Real>& olen_arr,
925 const amrex::Array4<amrex::Real>& pblh_arr,
926 const amrex::Array4<amrex::Real>& ,
927 const amrex::Array4<amrex::Real>& ,
928 const amrex::Array4<amrex::Real>& )
const
943 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
945 Olen = olen_arr(i,j,k);
951 ustar = u_star_arr(i,j,k);
954 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
955 (std::log(zref / z0_arr(i,j,k)) - psi_h);
959 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
961 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
962 umm = std::max(umm,
WSMIN);
968 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
970 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
972 "Maximum number of MOST iterations reached.");
976 olen_arr(i,j,k) = Olen;
978 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
982 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
985 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
986 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1035 const int& max_iters,
1036 const amrex::Array4<const amrex::Real>& zref_arr,
1037 const amrex::Array4<amrex::Real>& z0_arr,
1038 const amrex::Array4<const amrex::Real>& umm_arr,
1039 const amrex::Array4<const amrex::Real>& tm_arr,
1040 const amrex::Array4<const amrex::Real>& tvm_arr,
1041 const amrex::Array4<const amrex::Real>& qvm_arr,
1042 const amrex::Array4<amrex::Real>& u_star_arr,
1043 const amrex::Array4<amrex::Real>& w_star_arr,
1044 const amrex::Array4<amrex::Real>& t_star_arr,
1045 const amrex::Array4<amrex::Real>& q_star_arr,
1046 const amrex::Array4<amrex::Real>& t_surf_arr,
1047 const amrex::Array4<amrex::Real>& q_surf_arr,
1048 const amrex::Array4<amrex::Real>& olen_arr,
1049 const amrex::Array4<amrex::Real>& pblh_arr,
1050 const amrex::Array4<amrex::Real>& ,
1051 const amrex::Array4<amrex::Real>& ,
1052 const amrex::Array4<amrex::Real>& )
const
1067 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
1069 Olen = olen_arr(i,j,k);
1075 ustar = u_star_arr(i,j,k);
1078 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1079 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1083 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1085 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1086 umm = std::max(umm,
WSMIN);
1092 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
1094 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1096 "Maximum number of MOST iterations reached.");
1100 olen_arr(i,j,k) = Olen;
1102 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
1106 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1109 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1110 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1159 const int& max_iters,
1160 const amrex::Array4<const amrex::Real>& zref_arr,
1161 const amrex::Array4<amrex::Real>& z0_arr,
1162 const amrex::Array4<const amrex::Real>& umm_arr,
1163 const amrex::Array4<const amrex::Real>& tm_arr,
1164 const amrex::Array4<const amrex::Real>& tvm_arr,
1165 const amrex::Array4<const amrex::Real>& qvm_arr,
1166 const amrex::Array4<amrex::Real>& u_star_arr,
1167 const amrex::Array4<amrex::Real>& w_star_arr,
1168 const amrex::Array4<amrex::Real>& t_star_arr,
1169 const amrex::Array4<amrex::Real>& q_star_arr,
1170 const amrex::Array4<amrex::Real>& t_surf_arr,
1171 const amrex::Array4<amrex::Real>& q_surf_arr,
1172 const amrex::Array4<amrex::Real>& olen_arr,
1173 const amrex::Array4<amrex::Real>& pblh_arr,
1174 const amrex::Array4<amrex::Real>& Hwave_arr,
1175 const amrex::Array4<amrex::Real>& Lwave_arr,
1176 const amrex::Array4<amrex::Real>& eta_arr)
const
1190 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1191 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1192 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1193 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1196 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
1198 Olen = olen_arr(i,j,k);
1204 ustar = u_star_arr(i,j,k);
1205 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) )
1208 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1209 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1213 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1215 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1216 umm = std::max(umm,
WSMIN);
1222 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
1224 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1226 "Maximum number of MOST iterations reached.");
1230 olen_arr(i,j,k) = Olen;
1232 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
1236 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1239 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1240 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1249 #ifdef AMREX_USE_FLOAT
1296 const int& max_iters,
1297 const amrex::Array4<const amrex::Real>& zref_arr,
1298 const amrex::Array4<const amrex::Real>& z0_arr,
1299 const amrex::Array4<const amrex::Real>& umm_arr,
1300 const amrex::Array4<const amrex::Real>& tm_arr,
1301 const amrex::Array4<const amrex::Real>& tvm_arr,
1302 const amrex::Array4<const amrex::Real>& qvm_arr,
1303 const amrex::Array4<amrex::Real>& u_star_arr,
1304 const amrex::Array4<amrex::Real>& w_star_arr,
1305 const amrex::Array4<amrex::Real>& t_star_arr,
1306 const amrex::Array4<amrex::Real>& q_star_arr,
1307 const amrex::Array4<amrex::Real>& t_surf_arr,
1308 const amrex::Array4<amrex::Real>& q_surf_arr,
1309 const amrex::Array4<amrex::Real>& olen_arr,
1310 const amrex::Array4<amrex::Real>& pblh_arr,
1311 const amrex::Array4<amrex::Real>& ,
1312 const amrex::Array4<amrex::Real>& ,
1313 const amrex::Array4<amrex::Real>& )
const
1329 zeta = zref / olen_arr(i,j,k);
1333 if (q_surf_arr(i,j,k) >
zero) {
1334 qv_s = q_surf_arr(i,j,k);
1338 qv_s = qvm_arr(i,j,k);
1340 qv_a = qvm_arr(i,j,k);
1350 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1352 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1354 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1355 umm = std::max(umm,
WSMIN);
1362 ( (thv_a - thv_s) / (umm * umm) );
1383 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1385 "Maximum number of MOST iterations reached.");
1388 olen_arr(i,j,k) = zref / zeta;
1389 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1390 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1393 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1396 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1452 const int& max_iters,
1453 const amrex::Array4<const amrex::Real>& zref_arr,
1454 const amrex::Array4<amrex::Real>& z0_arr,
1455 const amrex::Array4<const amrex::Real>& umm_arr,
1456 const amrex::Array4<const amrex::Real>& tm_arr,
1457 const amrex::Array4<const amrex::Real>& tvm_arr,
1458 const amrex::Array4<const amrex::Real>& qvm_arr,
1459 const amrex::Array4<amrex::Real>& u_star_arr,
1460 const amrex::Array4<amrex::Real>& w_star_arr,
1461 const amrex::Array4<amrex::Real>& t_star_arr,
1462 const amrex::Array4<amrex::Real>& q_star_arr,
1463 const amrex::Array4<amrex::Real>& t_surf_arr,
1464 const amrex::Array4<amrex::Real>& q_surf_arr,
1465 const amrex::Array4<amrex::Real>& olen_arr,
1466 const amrex::Array4<amrex::Real>& pblh_arr,
1467 const amrex::Array4<amrex::Real>& ,
1468 const amrex::Array4<amrex::Real>& ,
1469 const amrex::Array4<amrex::Real>& )
const
1489 zeta = zref / olen_arr(i,j,k);
1493 if (q_surf_arr(i,j,k) >
zero) {
1494 qv_s = q_surf_arr(i,j,k);
1498 qv_s = qvm_arr(i,j,k);
1500 qv_a = qvm_arr(i,j,k);
1510 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1512 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1514 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1515 umm = std::max(umm,
WSMIN);
1522 ( (thv_a - thv_s) / (umm * umm) );
1542 C = std::log(zref / z0_old);
1554 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
1556 "Maximum number of MOST roughness iterations reached.");
1557 C = std::log(zref /
z0);
1567 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1569 "Maximum number of MOST iterations reached.");
1573 olen_arr(i,j,k) = zref / zeta;
1574 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1575 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1578 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1581 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1590 #ifdef AMREX_USE_FLOAT
1640 const int& max_iters,
1641 const amrex::Array4<const amrex::Real>& zref_arr,
1642 const amrex::Array4<amrex::Real>& z0_arr,
1643 const amrex::Array4<const amrex::Real>& umm_arr,
1644 const amrex::Array4<const amrex::Real>& tm_arr,
1645 const amrex::Array4<const amrex::Real>& tvm_arr,
1646 const amrex::Array4<const amrex::Real>& qvm_arr,
1647 const amrex::Array4<amrex::Real>& u_star_arr,
1648 const amrex::Array4<amrex::Real>& w_star_arr,
1649 const amrex::Array4<amrex::Real>& t_star_arr,
1650 const amrex::Array4<amrex::Real>& q_star_arr,
1651 const amrex::Array4<amrex::Real>& t_surf_arr,
1652 const amrex::Array4<amrex::Real>& q_surf_arr,
1653 const amrex::Array4<amrex::Real>& olen_arr,
1654 const amrex::Array4<amrex::Real>& pblh_arr,
1655 const amrex::Array4<amrex::Real>& ,
1656 const amrex::Array4<amrex::Real>& ,
1657 const amrex::Array4<amrex::Real>& )
const
1677 zeta = zref / olen_arr(i,j,k);
1681 if (q_surf_arr(i,j,k) >
zero) {
1682 qv_s = q_surf_arr(i,j,k);
1686 qv_s = qvm_arr(i,j,k);
1688 qv_a = qvm_arr(i,j,k);
1698 -ustar *
mdata.
kappa * (qv_a - qv_s) / (C - psi_h);
1700 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1702 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1703 umm = std::max(umm,
WSMIN);
1710 ( (thv_a - thv_s) / (umm * umm) );
1730 C = std::log(zref / z0_old);
1735 }
while ( (std::abs(
z0 - z0_old) >
tol_z) && (iter_z <= max_iters) );
1737 "Maximum number of MOST roughness iterations reached.");
1738 C = std::log(zref /
z0);
1748 }
while ( (std::abs(zeta - zeta_old) >
tol) && (iter <= max_iters) );
1750 "Maximum number of MOST iterations reached.");
1754 olen_arr(i,j,k) = zref / zeta;
1755 u_star_arr(i,j,k) =
mdata.
kappa * umm / (C - psi_m);
1756 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) / (C - psi_h);
1759 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1762 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) / (C - psi_h);
1771 #ifdef AMREX_USE_FLOAT
1817 const int& max_iters,
1818 const amrex::Array4<const amrex::Real>& zref_arr,
1819 const amrex::Array4<amrex::Real>& z0_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>& tvm_arr,
1823 const amrex::Array4<const amrex::Real>& qvm_arr,
1824 const amrex::Array4<amrex::Real>& u_star_arr,
1825 const amrex::Array4<amrex::Real>& w_star_arr,
1826 const amrex::Array4<amrex::Real>& t_star_arr,
1827 const amrex::Array4<amrex::Real>& q_star_arr,
1828 const amrex::Array4<amrex::Real>& t_surf_arr,
1829 const amrex::Array4<amrex::Real>& q_surf_arr,
1830 const amrex::Array4<amrex::Real>& olen_arr,
1831 const amrex::Array4<amrex::Real>& pblh_arr,
1832 const amrex::Array4<amrex::Real>& ,
1833 const amrex::Array4<amrex::Real>& ,
1834 const amrex::Array4<amrex::Real>& )
const
1850 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
1852 Olen = olen_arr(i,j,k);
1859 ustar = u_star_arr(i,j,k);
1861 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1862 (std::log(zref /
z0) - psi_h);
1863 tflux *= (
one +
epsv*qvm_arr(i,j,k));
1865 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1866 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1867 tflux +=
epsv * tm_arr(i,j,k) * qflux;
1870 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1872 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1873 umm = std::max(umm,
WSMIN);
1876 if ( (((Olen >=
zero) && (Oleno <=
zero)) ||
1877 ((Olen <=
zero) && (Oleno >=
zero))) &&
1878 std::fabs(Olen) + std::fabs(Oleno) <
amrex::Real(1.0)) {
1879 Olen =
myhalf * (Olen + Oleno);
1885 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
1887 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1889 "Maximum number of MOST iterations reached.");
1893 olen_arr(i,j,k) = Olen;
1894 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1895 (std::log(zref /
z0) - psi_h);
1898 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
1901 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
1902 (std::log(zref / z0_arr(i,j,k)) - psi_h);
1951 const int& max_iters,
1952 const amrex::Array4<const amrex::Real>& zref_arr,
1953 const amrex::Array4<amrex::Real>& z0_arr,
1954 const amrex::Array4<const amrex::Real>& umm_arr,
1955 const amrex::Array4<const amrex::Real>& tm_arr,
1956 const amrex::Array4<const amrex::Real>& tvm_arr,
1957 const amrex::Array4<const amrex::Real>& qvm_arr,
1958 const amrex::Array4<amrex::Real>& u_star_arr,
1959 const amrex::Array4<amrex::Real>& w_star_arr,
1960 const amrex::Array4<amrex::Real>& t_star_arr,
1961 const amrex::Array4<amrex::Real>& q_star_arr,
1962 const amrex::Array4<amrex::Real>& t_surf_arr,
1963 const amrex::Array4<amrex::Real>& q_surf_arr,
1964 const amrex::Array4<amrex::Real>& olen_arr,
1965 const amrex::Array4<amrex::Real>& pblh_arr,
1966 const amrex::Array4<amrex::Real>& Hwave_arr,
1967 const amrex::Array4<amrex::Real>& Lwave_arr,
1968 const amrex::Array4<amrex::Real>& eta_arr)
const
1983 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1984 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1985 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1986 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1989 u_star_arr(i,j,k) =
mdata.
kappa * umm / std::log(zref / z0_arr(i,j,k));
1991 Olen = olen_arr(i,j,k);
1998 ustar = u_star_arr(i,j,k);
1999 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) )
2001 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
2002 (std::log(zref /
z0) - psi_h);
2003 tflux *= (
one +
epsv*qvm_arr(i,j,k));
2005 -(qvm_arr(i,j,k) - q_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
2006 (std::log(zref / z0_arr(i,j,k)) - psi_h);
2007 tflux +=
epsv * tm_arr(i,j,k) * qflux;
2010 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
2012 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
2013 umm = std::max(umm,
WSMIN);
2016 if ( (((Olen >=
zero) && (Oleno <=
zero)) ||
2017 ((Olen <=
zero) && (Oleno >=
zero))) &&
2018 std::fabs(Olen) + std::fabs(Oleno) <
amrex::Real(1.0)) {
2019 Olen =
myhalf * (Olen + Oleno);
2025 u_star_arr(i,j,k) =
mdata.
kappa * umm / (std::log(zref /
z0) - psi_m);
2027 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
2029 "Maximum number of MOST iterations reached.");
2033 olen_arr(i,j,k) = Olen;
2034 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
2035 (std::log(zref /
z0) - psi_h);
2038 (u_star_arr(i,j,k) *
mdata.
kappa) + qvm_arr(i,j,k);
2041 q_star_arr(i,j,k) =
mdata.
kappa * (qvm_arr(i,j,k) - q_surf_arr(i,j,k)) /
2042 (std::log(zref / z0_arr(i,j,k)) - psi_h);
2051 #ifdef AMREX_USE_FLOAT
2085 const amrex::Array4<const amrex::Real>& cons_arr,
2086 const amrex::Array4<const amrex::Real>& velx_arr,
2087 const amrex::Array4<const amrex::Real>& vely_arr,
2088 const amrex::Array4<const amrex::Real>& umm_arr,
2089 const amrex::Array4<const amrex::Real>& qvm_arr,
2090 const amrex::Array4<const amrex::Real>& u_star_arr,
2091 const amrex::Array4<const amrex::Real>& q_star_arr,
2092 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2104 wsp_mean = std::max(wsp_mean,
WSMIN);
2112 -
rho*qstar*ustar*(num1+num2)/((qv_mean-qv_surf)*wsp_mean) :
zero;
2130 const amrex::Array4<const amrex::Real>& cons_arr,
2131 const amrex::Array4<const amrex::Real>& velx_arr,
2132 const amrex::Array4<const amrex::Real>& vely_arr,
2133 const amrex::Array4<const amrex::Real>& umm_arr,
2134 const amrex::Array4<const amrex::Real>& tm_arr,
2135 const amrex::Array4<const amrex::Real>& u_star_arr,
2136 const amrex::Array4<const amrex::Real>& t_star_arr,
2137 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2149 wsp_mean = std::max(wsp_mean,
WSMIN);
2157 -
rho*tstar*ustar*(num1+num2)/((theta_mean-theta_surf)*wsp_mean) :
zero;
2175 const amrex::Array4<const amrex::Real>& cons_arr,
2176 const amrex::Array4<const amrex::Real>& velx_arr,
2177 const amrex::Array4<const amrex::Real>& vely_arr,
2178 const amrex::Array4<const amrex::Real>& umm_arr,
2179 const amrex::Array4<const amrex::Real>& um_arr,
2180 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2184 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2190 wsp_mean = std::max(wsp_mean,
WSMIN);
2201 amrex::Real stressx = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
2219 const amrex::Array4<const amrex::Real>& cons_arr,
2220 const amrex::Array4<const amrex::Real>& velx_arr,
2221 const amrex::Array4<const amrex::Real>& vely_arr,
2222 const amrex::Array4<const amrex::Real>& umm_arr,
2223 const amrex::Array4<const amrex::Real>& vm_arr,
2224 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2227 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2234 wsp_mean = std::max(wsp_mean,
WSMIN);
2245 amrex::Real stressy = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
2251 #ifdef AMREX_USE_FLOAT
2283 const amrex::Array4<const amrex::Real>& ,
2284 const amrex::Array4<const amrex::Real>& ,
2285 const amrex::Array4<const amrex::Real>& ,
2286 const amrex::Array4<const amrex::Real>& ,
2287 const amrex::Array4<const amrex::Real>& ,
2288 const amrex::Array4<const amrex::Real>& ,
2289 const amrex::Array4<const amrex::Real>& ,
2290 const amrex::Array4<const amrex::Real>& )
const
2311 const amrex::Array4<const amrex::Real>& cons_arr,
2312 const amrex::Array4<const amrex::Real>& ,
2313 const amrex::Array4<const amrex::Real>& ,
2314 const amrex::Array4<const amrex::Real>& umm_arr,
2315 const amrex::Array4<const amrex::Real>& tm_arr,
2316 const amrex::Array4<const amrex::Real>& ,
2317 const amrex::Array4<const amrex::Real>& ,
2318 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2328 amrex::Real moflux = -
rho * Ch * wsp_mean * (theta_mean - theta_surf);
2346 const amrex::Array4<const amrex::Real>& cons_arr,
2347 const amrex::Array4<const amrex::Real>& velx_arr,
2348 const amrex::Array4<const amrex::Real>& vely_arr,
2349 const amrex::Array4<const amrex::Real>& umm_arr,
2350 const amrex::Array4<const amrex::Real>& ,
2351 const amrex::Array4<const amrex::Real>& )
const
2355 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2389 const amrex::Array4<const amrex::Real>& cons_arr,
2390 const amrex::Array4<const amrex::Real>& velx_arr,
2391 const amrex::Array4<const amrex::Real>& vely_arr,
2392 const amrex::Array4<const amrex::Real>& umm_arr,
2393 const amrex::Array4<const amrex::Real>& ,
2394 const amrex::Array4<const amrex::Real>& )
const
2397 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2451 const amrex::Array4<const amrex::Real>& cons_arr,
2452 const amrex::Array4<const amrex::Real>& ,
2453 const amrex::Array4<const amrex::Real>& ,
2454 const amrex::Array4<const amrex::Real>& ,
2455 const amrex::Array4<const amrex::Real>& ,
2456 const amrex::Array4<const amrex::Real>& ,
2457 const amrex::Array4<const amrex::Real>& q_star_arr,
2458 const amrex::Array4<const amrex::Real>& )
const
2482 const amrex::Array4<const amrex::Real>& cons_arr,
2483 const amrex::Array4<const amrex::Real>& ,
2484 const amrex::Array4<const amrex::Real>& ,
2485 const amrex::Array4<const amrex::Real>& ,
2486 const amrex::Array4<const amrex::Real>& ,
2487 const amrex::Array4<const amrex::Real>& ,
2488 const amrex::Array4<const amrex::Real>& t_star_arr,
2489 const amrex::Array4<const amrex::Real>& )
const
2513 const amrex::Array4<const amrex::Real>& cons_arr,
2514 const amrex::Array4<const amrex::Real>& velx_arr,
2515 const amrex::Array4<const amrex::Real>& vely_arr,
2516 const amrex::Array4<const amrex::Real>& ,
2517 const amrex::Array4<const amrex::Real>& ,
2518 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2522 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2547 const amrex::Array4<const amrex::Real>& cons_arr,
2548 const amrex::Array4<const amrex::Real>& velx_arr,
2549 const amrex::Array4<const amrex::Real>& vely_arr,
2550 const amrex::Array4<const amrex::Real>& ,
2551 const amrex::Array4<const amrex::Real>& ,
2552 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2555 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2569 #ifdef AMREX_USE_FLOAT
2612 const amrex::Array4<const amrex::Real>& cons_arr,
2613 const amrex::Array4<const amrex::Real>& velx_arr,
2614 const amrex::Array4<const amrex::Real>& vely_arr,
2615 const amrex::Array4<const amrex::Real>& ,
2616 const amrex::Array4<const amrex::Real>& ,
2617 const amrex::Array4<const amrex::Real>& ,
2618 const amrex::Array4<const amrex::Real>& ,
2619 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2647 const amrex::Array4<const amrex::Real>& cons_arr,
2648 const amrex::Array4<const amrex::Real>& velx_arr,
2649 const amrex::Array4<const amrex::Real>& vely_arr,
2650 const amrex::Array4<const amrex::Real>& ,
2651 const amrex::Array4<const amrex::Real>& ,
2652 const amrex::Array4<const amrex::Real>& ,
2653 const amrex::Array4<const amrex::Real>& ,
2654 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2682 const amrex::Array4<const amrex::Real>& cons_arr,
2683 const amrex::Array4<const amrex::Real>& velx_arr,
2684 const amrex::Array4<const amrex::Real>& vely_arr,
2685 const amrex::Array4<const amrex::Real>& ,
2686 const amrex::Array4<const amrex::Real>& ,
2687 const amrex::Array4<const amrex::Real>& )
const
2692 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2715 const amrex::Array4<const amrex::Real>& cons_arr,
2716 const amrex::Array4<const amrex::Real>& velx_arr,
2717 const amrex::Array4<const amrex::Real>& vely_arr,
2718 const amrex::Array4<const amrex::Real>& ,
2719 const amrex::Array4<const amrex::Real>& ,
2720 const amrex::Array4<const amrex::Real>& )
const
2724 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2768 const amrex::Array4<const amrex::Real>& cons_arr,
2769 const amrex::Array4<const amrex::Real>& velx_arr,
2770 const amrex::Array4<const amrex::Real>& vely_arr,
2771 const amrex::Array4<const amrex::Real>& ,
2772 const amrex::Array4<const amrex::Real>& ,
2773 const amrex::Array4<const amrex::Real>& ,
2774 const amrex::Array4<const amrex::Real>& q_star_arr,
2775 const amrex::Array4<const amrex::Real>& )
const
2783 amrex::Real wsp = std::sqrt(velx*velx + vely*vely);
2804 const amrex::Array4<const amrex::Real>& cons_arr,
2805 const amrex::Array4<const amrex::Real>& velx_arr,
2806 const amrex::Array4<const amrex::Real>& vely_arr,
2807 const amrex::Array4<const amrex::Real>& ,
2808 const amrex::Array4<const amrex::Real>& ,
2809 const amrex::Array4<const amrex::Real>& ,
2810 const amrex::Array4<const amrex::Real>& t_star_arr,
2811 const amrex::Array4<const amrex::Real>& )
const
2819 amrex::Real wsp = std::sqrt(velx*velx + vely*vely);
2840 const amrex::Array4<const amrex::Real>& cons_arr,
2841 const amrex::Array4<const amrex::Real>& velx_arr,
2842 const amrex::Array4<const amrex::Real>& vely_arr,
2843 const amrex::Array4<const amrex::Real>& ,
2844 const amrex::Array4<const amrex::Real>& ,
2845 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2849 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
2874 const amrex::Array4<const amrex::Real>& cons_arr,
2875 const amrex::Array4<const amrex::Real>& velx_arr,
2876 const amrex::Array4<const amrex::Real>& vely_arr,
2877 const amrex::Array4<const amrex::Real>& ,
2878 const amrex::Array4<const amrex::Real>& ,
2879 const amrex::Array4<const amrex::Real>& u_star_arr)
const
2882 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
2896 #ifdef AMREX_USE_FLOAT
2929 const amrex::Array4<const amrex::Real>& cons_arr,
2930 const amrex::Array4<const amrex::Real>& ,
2931 const amrex::Array4<const amrex::Real>& ,
2932 const amrex::Array4<const amrex::Real>& ,
2933 const amrex::Array4<const amrex::Real>& qvm_arr,
2934 const amrex::Array4<const amrex::Real>& ,
2935 const amrex::Array4<const amrex::Real>& q_star_arr,
2936 const amrex::Array4<const amrex::Real>& q_surf_arr)
const
2961 const amrex::Array4<const amrex::Real>& cons_arr,
2962 const amrex::Array4<const amrex::Real>& ,
2963 const amrex::Array4<const amrex::Real>& ,
2964 const amrex::Array4<const amrex::Real>& ,
2965 const amrex::Array4<const amrex::Real>& tm_arr,
2966 const amrex::Array4<const amrex::Real>& ,
2967 const amrex::Array4<const amrex::Real>& t_star_arr,
2968 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
2993 const amrex::Array4<const amrex::Real>& cons_arr,
2994 const amrex::Array4<const amrex::Real>& ,
2995 const amrex::Array4<const amrex::Real>& ,
2996 const amrex::Array4<const amrex::Real>& ,
2997 const amrex::Array4<const amrex::Real>& ,
2998 const amrex::Array4<const amrex::Real>& u_star_arr)
const
3021 const amrex::Array4<const amrex::Real>& ,
3022 const amrex::Array4<const amrex::Real>& ,
3023 const amrex::Array4<const amrex::Real>& ,
3024 const amrex::Array4<const amrex::Real>& ,
3025 const amrex::Array4<const amrex::Real>& ,
3026 const amrex::Array4<const amrex::Real>& )
const
3035 #ifdef AMREX_USE_FLOAT
constexpr amrex::Real epsv
Definition: ERF_Constants.H:53
constexpr amrex::Real three
Definition: ERF_Constants.H:11
constexpr amrex::Real KAPPA
Definition: ERF_Constants.H:63
constexpr amrex::Real two
Definition: ERF_Constants.H:10
constexpr amrex::Real bogus_large_value
Definition: ERF_Constants.H:26
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real fourth
Definition: ERF_Constants.H:14
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
constexpr amrex::Real PI
Definition: ERF_Constants.H:42
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:64
constexpr amrex::Real PIoTwo
Definition: ERF_Constants.H:43
@ num
Definition: ERF_DataStruct.H:27
#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:107
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(m_cloud_chamber_config.active, "Cloud Chamber: initializer reached without a parsed configuration")
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Donelan_roughness(amrex::Real ustar)
Definition: ERF_MOSTRoughness.H:35
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real COARE3_roughness(amrex::Real zref, amrex::Real umm, amrex::Real ustar)
Definition: ERF_MOSTRoughness.H:13
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real air_viscosity(amrex::Real T_degK)
Definition: ERF_MOSTStress.H:151
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:211
@ theta
Definition: ERF_SLM.H:20
@ qv
Definition: ERF_Kessler.H:30
@ q
Definition: ERF_WSM6.H:184
@ den
Definition: ERF_AdvanceWSM6.cpp:109
Definition: ERF_MOSTStress.H:226
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:328
most_data mdata
Definition: ERF_MOSTStress.H:321
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:258
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:326
similarity_funs sfuns
Definition: ERF_MOSTStress.H:322
adiabatic_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc)
Definition: ERF_MOSTStress.H:235
Definition: ERF_MOSTStress.H:437
similarity_funs sfuns
Definition: ERF_MOSTStress.H:512
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:514
most_data mdata
Definition: ERF_MOSTStress.H:511
adiabatic_donelan(amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:444
const amrex::Real tol
Definition: ERF_MOSTStress.H:513
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:463
Definition: ERF_MOSTStress.H:336
similarity_funs sfuns
Definition: ERF_MOSTStress.H:423
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:427
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:429
adiabatic_mod_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth)
Definition: ERF_MOSTStress.H:344
most_data mdata
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< 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:366
Definition: ERF_MOSTStress.H:522
const amrex::Real eps
Definition: ERF_MOSTStress.H:605
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:548
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:607
most_data mdata
Definition: ERF_MOSTStress.H:599
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:609
similarity_funs sfuns
Definition: ERF_MOSTStress.H:600
const amrex::Real tol
Definition: ERF_MOSTStress.H:601
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:608
adiabatic_wave_coupled(amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:529
Definition: ERF_MOSTStress.H:162
adiabatic(amrex::Real Tflux, amrex::Real Qvflux)
Definition: ERF_MOSTStress.H:169
similarity_funs sfuns
Definition: ERF_MOSTStress.H:218
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:188
most_data mdata
Definition: ERF_MOSTStress.H:217
Definition: ERF_MOSTStress.H:2582
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:2679
bulk_coeff_flux(amrex::Real m_Cd, amrex::Real m_Ch, amrex::Real m_Cq)
Definition: ERF_MOSTStress.H:2590
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:2609
most_data mdata
Definition: ERF_MOSTStress.H:2736
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:2644
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:2712
Definition: ERF_MOSTStress.H:2428
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:2510
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:2448
custom_flux(bool specified_rho_surf)
Definition: ERF_MOSTStress.H:2434
const bool fluxes_include_rho
Definition: ERF_MOSTStress.H:2574
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:2479
const amrex::Real eps
Definition: ERF_MOSTStress.H:2572
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:2544
Definition: ERF_MOSTStress.H:2264
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:2343
donelan_flux()
Definition: ERF_MOSTStress.H:2268
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:2386
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:2308
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:2280
Definition: ERF_MOSTStress.H:2066
moeng_flux()
Definition: ERF_MOSTStress.H:2070
const amrex::Real eps
Definition: ERF_MOSTStress.H:2254
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:2172
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:2256
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:2127
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:2082
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:2216
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:2744
rico_flux(amrex::Real l_theta_z0, amrex::Real l_qsat_z0)
Definition: ERF_MOSTStress.H:2751
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:2765
amrex::Real qsat_z0
Definition: ERF_MOSTStress.H:2902
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:2801
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:2837
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:2871
const amrex::Real eps
Definition: ERF_MOSTStress.H:2899
amrex::Real theta_z0
Definition: ERF_MOSTStress.H:2901
Definition: ERF_MOSTStress.H:2910
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:3018
rotate_flux()
Definition: ERF_MOSTStress.H:2914
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:2990
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:2958
const amrex::Real eps
Definition: ERF_MOSTStress.H:3038
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:2926
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:105
amrex::Real beta_m
Constants from Dyer, BLM, 1974.
Definition: ERF_MOSTStress.H:135
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h2(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:77
amrex::Real beta_h
https://doi.org/amrex::Real(10.1007)/BF00240838
Definition: ERF_MOSTStress.H:136
amrex::Real gamma_h
Definition: ERF_MOSTStress.H:138
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:124
amrex::Real gamma_m
Definition: ERF_MOSTStress.H:137
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m2(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:52
Definition: ERF_MOSTStress.H:738
const amrex::Real tol
Definition: ERF_MOSTStress.H:866
surface_flux_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:748
similarity_funs sfuns
Definition: ERF_MOSTStress.H:865
most_data mdata
Definition: ERF_MOSTStress.H:863
bool spec_qflux
Definition: ERF_MOSTStress.H:864
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:773
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:867
Definition: ERF_MOSTStress.H:1003
bool spec_qflux
Definition: ERF_MOSTStress.H:1116
const amrex::Real tol
Definition: ERF_MOSTStress.H:1118
surface_flux_donelan(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1011
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1119
most_data mdata
Definition: ERF_MOSTStress.H:1115
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1117
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:1032
Definition: ERF_MOSTStress.H:875
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:908
surface_flux_mod_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool cons_qflux)
Definition: ERF_MOSTStress.H:884
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:995
most_data mdata
Definition: ERF_MOSTStress.H:991
bool spec_qflux
Definition: ERF_MOSTStress.H:992
const amrex::Real tol
Definition: ERF_MOSTStress.H:994
similarity_funs sfuns
Definition: ERF_MOSTStress.H:993
Definition: ERF_MOSTStress.H:1127
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1256
surface_flux_wave_coupled(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1135
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:1255
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:1254
most_data mdata
Definition: ERF_MOSTStress.H:1245
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1247
const amrex::Real tol
Definition: ERF_MOSTStress.H:1248
bool spec_qflux
Definition: ERF_MOSTStress.H:1246
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:1156
const amrex::Real eps
Definition: ERF_MOSTStress.H:1252
Definition: ERF_MOSTStress.H:617
similarity_funs sfuns
Definition: ERF_MOSTStress.H:728
surface_flux(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:625
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:646
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:730
most_data mdata
Definition: ERF_MOSTStress.H:726
const amrex::Real tol
Definition: ERF_MOSTStress.H:729
bool spec_qflux
Definition: ERF_MOSTStress.H:727
Definition: ERF_MOSTStress.H:1414
most_data mdata
Definition: ERF_MOSTStress.H:1586
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:1449
bool spec_qflux
Definition: ERF_MOSTStress.H:1587
surface_temp_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real cnk_a, bool cnk_visc, bool cons_qflux)
Definition: ERF_MOSTStress.H:1424
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:1593
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1595
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1596
const amrex::Real tol
Definition: ERF_MOSTStress.H:1589
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1588
Definition: ERF_MOSTStress.H:1785
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1909
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:1814
most_data mdata
Definition: ERF_MOSTStress.H:1907
const amrex::Real tol
Definition: ERF_MOSTStress.H:1910
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1911
bool spec_qflux
Definition: ERF_MOSTStress.H:1908
surface_temp_donelan(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1793
Definition: ERF_MOSTStress.H:1604
surface_temp_mod_charnock(amrex::Real Tflux, amrex::Real Qvflux, amrex::Real depth, bool cons_qflux)
Definition: ERF_MOSTStress.H:1613
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1769
const amrex::Real tol
Definition: ERF_MOSTStress.H:1770
const amrex::Real tol_z
Definition: ERF_MOSTStress.H:1774
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1777
most_data mdata
Definition: ERF_MOSTStress.H:1767
bool spec_qflux
Definition: ERF_MOSTStress.H:1768
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:1637
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1776
Definition: ERF_MOSTStress.H:1919
const amrex::Real eps
Definition: ERF_MOSTStress.H:2054
surface_temp_wave_coupled(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1927
const amrex::Real tol
Definition: ERF_MOSTStress.H:2050
most_data mdata
Definition: ERF_MOSTStress.H:2047
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:1948
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:2056
similarity_funs sfuns
Definition: ERF_MOSTStress.H:2049
bool spec_qflux
Definition: ERF_MOSTStress.H:2048
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:2057
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:2058
Definition: ERF_MOSTStress.H:1264
surface_temp(amrex::Real Tflux, amrex::Real Qvflux, bool cons_qflux)
Definition: ERF_MOSTStress.H:1272
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1403
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:1293
const amrex::Real tol
Definition: ERF_MOSTStress.H:1404
bool spec_qflux
Definition: ERF_MOSTStress.H:1402
const amrex::Real alpha
Definition: ERF_MOSTStress.H:1405
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1406
most_data mdata
Definition: ERF_MOSTStress.H:1401