1 #ifndef ERF_MOSTStress_H
2 #define ERF_MOSTStress_H
45 amrex::Real
x = std::sqrt(std::sqrt(1.0 -
gamma_m * zeta));
46 return 2.0 * std::log(0.5 * (1.0 +
x)) + log(0.5 * (1.0 +
x *
x)) -
59 amrex::Real
x = std::sqrt(1.0 -
gamma_h * zeta);
60 return 2.0 * std::log(0.5 * (1.0 +
x));
81 amrex::Real TC = T_degK - 273.15;
82 return 1.326e-5*(1. + 6.542e-3*TC + 8.301e-6*TC*TC - 4.84e-9*TC*TC*TC);
105 const amrex::Array4<const amrex::Real>& z0_arr,
106 const amrex::Array4<const amrex::Real>& umm_arr,
107 const amrex::Array4<const amrex::Real>& ,
108 const amrex::Array4<const amrex::Real>& ,
109 const amrex::Array4<const amrex::Real>& ,
110 const amrex::Array4<amrex::Real>& u_star_arr,
111 const amrex::Array4<amrex::Real>& ,
112 const amrex::Array4<amrex::Real>& t_star_arr,
113 const amrex::Array4<amrex::Real>& ,
114 const amrex::Array4<amrex::Real>& ,
115 const amrex::Array4<amrex::Real>& olen_arr,
116 const amrex::Array4<amrex::Real>& ,
117 const amrex::Array4<amrex::Real>& ,
118 const amrex::Array4<amrex::Real>& ,
119 const amrex::Array4<amrex::Real>& )
const
122 t_star_arr(i,j,k) = 0.0;
123 olen_arr(i,j,k) = 1.0e16;
154 const int& max_iters,
155 const amrex::Array4<amrex::Real>& z0_arr,
156 const amrex::Array4<const amrex::Real>& umm_arr,
157 const amrex::Array4<const amrex::Real>& tm_arr,
158 const amrex::Array4<const amrex::Real>& ,
159 const amrex::Array4<const amrex::Real>& ,
160 const amrex::Array4<amrex::Real>& u_star_arr,
161 const amrex::Array4<amrex::Real>& ,
162 const amrex::Array4<amrex::Real>& t_star_arr,
163 const amrex::Array4<amrex::Real>& ,
164 const amrex::Array4<amrex::Real>& ,
165 const amrex::Array4<amrex::Real>& olen_arr,
166 const amrex::Array4<amrex::Real>& ,
167 const amrex::Array4<amrex::Real>& ,
168 const amrex::Array4<amrex::Real>& ,
169 const amrex::Array4<amrex::Real>& )
const
172 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
173 amrex::Real ustar = 0.0;
174 amrex::Real z0 = 0.0;
177 ustar = u_star_arr(i,j,k);
188 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
190 t_star_arr(i,j,k) = 0.0;
191 olen_arr(i,j,k) = 1.0e16;
198 const amrex::Real
tol = 1.0e-5;
224 const int& max_iters,
225 const amrex::Array4<amrex::Real>& z0_arr,
226 const amrex::Array4<const amrex::Real>& umm_arr,
227 const amrex::Array4<const amrex::Real>& ,
228 const amrex::Array4<const amrex::Real>& ,
229 const amrex::Array4<const amrex::Real>& ,
230 const amrex::Array4<amrex::Real>& u_star_arr,
231 const amrex::Array4<amrex::Real>& ,
232 const amrex::Array4<amrex::Real>& t_star_arr,
233 const amrex::Array4<amrex::Real>& ,
234 const amrex::Array4<amrex::Real>& ,
235 const amrex::Array4<amrex::Real>& olen_arr,
236 const amrex::Array4<amrex::Real>& ,
237 const amrex::Array4<amrex::Real>& ,
238 const amrex::Array4<amrex::Real>& ,
239 const amrex::Array4<amrex::Real>& )
const
242 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
243 amrex::Real ustar = 0.0;
244 amrex::Real z0 = 0.0;
247 ustar = u_star_arr(i,j,k);
251 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
253 t_star_arr(i,j,k) = 0.0;
254 olen_arr(i,j,k) = 1.0e16;
261 const amrex::Real
tol = 1.0e-5;
284 const int& max_iters,
285 const amrex::Array4<amrex::Real>& z0_arr,
286 const amrex::Array4<const amrex::Real>& umm_arr,
287 const amrex::Array4<const amrex::Real>& ,
288 const amrex::Array4<const amrex::Real>& ,
289 const amrex::Array4<const amrex::Real>& ,
290 const amrex::Array4<amrex::Real>& u_star_arr,
291 const amrex::Array4<amrex::Real>& ,
292 const amrex::Array4<amrex::Real>& t_star_arr,
293 const amrex::Array4<amrex::Real>& ,
294 const amrex::Array4<amrex::Real>& ,
295 const amrex::Array4<amrex::Real>& olen_arr,
296 const amrex::Array4<amrex::Real>& ,
297 const amrex::Array4<amrex::Real>& ,
298 const amrex::Array4<amrex::Real>& ,
299 const amrex::Array4<amrex::Real>& )
const
302 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
303 amrex::Real ustar = 0.0;
304 amrex::Real z0 = 0.0;
306 if (u_star_arr(i,j,k) == 1.E34) {
310 ustar = u_star_arr(i,j,k);
314 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
316 t_star_arr(i,j,k) = 0.0;
317 olen_arr(i,j,k) = 1.0e16;
324 const amrex::Real
tol = 1.0e-5;
347 const int& max_iters,
348 const amrex::Array4<amrex::Real>& z0_arr,
349 const amrex::Array4<const amrex::Real>& umm_arr,
350 const amrex::Array4<const amrex::Real>& ,
351 const amrex::Array4<const amrex::Real>& ,
352 const amrex::Array4<const amrex::Real>& ,
353 const amrex::Array4<amrex::Real>& u_star_arr,
354 const amrex::Array4<amrex::Real>& ,
355 const amrex::Array4<amrex::Real>& t_star_arr,
356 const amrex::Array4<amrex::Real>& ,
357 const amrex::Array4<amrex::Real>& ,
358 const amrex::Array4<amrex::Real>& olen_arr,
359 const amrex::Array4<amrex::Real>& ,
360 const amrex::Array4<amrex::Real>& Hwave_arr,
361 const amrex::Array4<amrex::Real>& Lwave_arr,
362 const amrex::Array4<amrex::Real>& eta_arr)
const
365 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
366 amrex::Real ustar = 0.0;
367 amrex::Real z0 = 0.0;
369 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
370 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
371 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
372 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
375 ustar = u_star_arr(i,j,k);
376 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 )
380 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
382 t_star_arr(i,j,k) = 0.0;
383 olen_arr(i,j,k) = 1.0e16;
390 const amrex::Real
tol = 1.0e-5;
391 const amrex::Real
eps = 1e-15;
416 const int& max_iters,
417 const amrex::Array4<const amrex::Real>& z0_arr,
418 const amrex::Array4<const amrex::Real>& umm_arr,
419 const amrex::Array4<const amrex::Real>& tm_arr,
420 const amrex::Array4<const amrex::Real>& tvm_arr,
421 const amrex::Array4<const amrex::Real>& qvm_arr,
422 const amrex::Array4<amrex::Real>& u_star_arr,
423 const amrex::Array4<amrex::Real>& w_star_arr,
424 const amrex::Array4<amrex::Real>& t_star_arr,
425 const amrex::Array4<amrex::Real>& q_star_arr,
426 const amrex::Array4<amrex::Real>& t_surf_arr,
427 const amrex::Array4<amrex::Real>& olen_arr,
428 const amrex::Array4<amrex::Real>& pblh_arr,
429 const amrex::Array4<amrex::Real>& ,
430 const amrex::Array4<amrex::Real>& ,
431 const amrex::Array4<amrex::Real>& )
const
434 amrex::Real ustar = 0.0;
435 amrex::Real wstar = 0.0;
436 amrex::Real tflux = 0.0;
437 amrex::Real zeta = 0.0;
438 amrex::Real psi_m = 0.0;
439 amrex::Real psi_h = 0.0;
440 amrex::Real Olen = 0.0;
441 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
442 if (u_star_arr(i,j,k) == 1.E34) {
445 Olen = olen_arr(i,j,k);
451 ustar = u_star_arr(i,j,k);
452 tflux =
mdata.
surf_temp_flux*(1 + 0.61*qvm_arr(i,j,k)) - 0.61*tm_arr(i,j,k)*ustar*q_star_arr(i,j,k);
455 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
457 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
458 umm = std::max(umm,
WSMIN);
466 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
467 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
470 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
472 olen_arr(i,j,k) = Olen;
478 const amrex::Real
tol = 1.0e-5;
505 const int& max_iters,
506 const amrex::Array4<amrex::Real>& z0_arr,
507 const amrex::Array4<const amrex::Real>& umm_arr,
508 const amrex::Array4<const amrex::Real>& tm_arr,
509 const amrex::Array4<const amrex::Real>& tvm_arr,
510 const amrex::Array4<const amrex::Real>& qvm_arr,
511 const amrex::Array4<amrex::Real>& u_star_arr,
512 const amrex::Array4<amrex::Real>& w_star_arr,
513 const amrex::Array4<amrex::Real>& t_star_arr,
514 const amrex::Array4<amrex::Real>& q_star_arr,
515 const amrex::Array4<amrex::Real>& t_surf_arr,
516 const amrex::Array4<amrex::Real>& olen_arr,
517 const amrex::Array4<amrex::Real>& pblh_arr,
518 const amrex::Array4<amrex::Real>& ,
519 const amrex::Array4<amrex::Real>& ,
520 const amrex::Array4<amrex::Real>& )
const
523 amrex::Real ustar = 0.0;
524 amrex::Real wstar = 0.0;
525 amrex::Real tflux = 0.0;
526 amrex::Real z0 = 0.0;
527 amrex::Real zeta = 0.0;
528 amrex::Real psi_m = 0.0;
529 amrex::Real psi_h = 0.0;
530 amrex::Real Olen = 0.0;
531 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
532 if (u_star_arr(i,j,k) == 1.E34) {
535 Olen = olen_arr(i,j,k);
541 ustar = u_star_arr(i,j,k);
550 tflux =
mdata.
surf_temp_flux*(1 + 0.61*qvm_arr(i,j,k)) - 0.61*tm_arr(i,j,k)*ustar*q_star_arr(i,j,k);
553 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
555 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
556 umm = std::max(umm,
WSMIN);
564 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
565 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
568 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
570 olen_arr(i,j,k) = Olen;
577 const amrex::Real
tol = 1.0e-5;
603 const int& max_iters,
604 const amrex::Array4<amrex::Real>& z0_arr,
605 const amrex::Array4<const amrex::Real>& umm_arr,
606 const amrex::Array4<const amrex::Real>& tm_arr,
607 const amrex::Array4<const amrex::Real>& tvm_arr,
608 const amrex::Array4<const amrex::Real>& qvm_arr,
609 const amrex::Array4<amrex::Real>& u_star_arr,
610 const amrex::Array4<amrex::Real>& w_star_arr,
611 const amrex::Array4<amrex::Real>& t_star_arr,
612 const amrex::Array4<amrex::Real>& q_star_arr,
613 const amrex::Array4<amrex::Real>& t_surf_arr,
614 const amrex::Array4<amrex::Real>& olen_arr,
615 const amrex::Array4<amrex::Real>& pblh_arr,
616 const amrex::Array4<amrex::Real>& ,
617 const amrex::Array4<amrex::Real>& ,
618 const amrex::Array4<amrex::Real>& )
const
621 amrex::Real ustar = 0.0;
622 amrex::Real wstar = 0.0;
623 amrex::Real tflux = 0.0;
624 amrex::Real z0 = 0.0;
625 amrex::Real zeta = 0.0;
626 amrex::Real psi_m = 0.0;
627 amrex::Real psi_h = 0.0;
628 amrex::Real Olen = 0.0;
629 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
630 if (u_star_arr(i,j,k) == 1.E34) {
633 Olen = olen_arr(i,j,k);
639 ustar = u_star_arr(i,j,k);
641 tflux =
mdata.
surf_temp_flux*(1 + 0.61*qvm_arr(i,j,k)) - 0.61*tm_arr(i,j,k)*ustar*q_star_arr(i,j,k);
644 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
646 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
647 umm = std::max(umm,
WSMIN);
655 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
656 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
659 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
661 olen_arr(i,j,k) = Olen;
668 const amrex::Real
tol = 1.0e-5;
691 const int& max_iters,
692 const amrex::Array4<amrex::Real>& z0_arr,
693 const amrex::Array4<const amrex::Real>& umm_arr,
694 const amrex::Array4<const amrex::Real>& tm_arr,
695 const amrex::Array4<const amrex::Real>& tvm_arr,
696 const amrex::Array4<const amrex::Real>& qvm_arr,
697 const amrex::Array4<amrex::Real>& u_star_arr,
698 const amrex::Array4<amrex::Real>& w_star_arr,
699 const amrex::Array4<amrex::Real>& t_star_arr,
700 const amrex::Array4<amrex::Real>& q_star_arr,
701 const amrex::Array4<amrex::Real>& t_surf_arr,
702 const amrex::Array4<amrex::Real>& olen_arr,
703 const amrex::Array4<amrex::Real>& pblh_arr,
704 const amrex::Array4<amrex::Real>& ,
705 const amrex::Array4<amrex::Real>& ,
706 const amrex::Array4<amrex::Real>& )
const
709 amrex::Real ustar = 0.0;
710 amrex::Real wstar = 0.0;
711 amrex::Real tflux = 0.0;
712 amrex::Real z0 = 0.0;
713 amrex::Real zeta = 0.0;
714 amrex::Real psi_m = 0.0;
715 amrex::Real psi_h = 0.0;
716 amrex::Real Olen = 0.0;
717 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
718 if (u_star_arr(i,j,k) == 1.E34) {
721 Olen = olen_arr(i,j,k);
727 ustar = u_star_arr(i,j,k);
729 tflux =
mdata.
surf_temp_flux*(1 + 0.61*qvm_arr(i,j,k)) - 0.61*tm_arr(i,j,k)*ustar*q_star_arr(i,j,k);
732 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
734 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
735 umm = std::max(umm,
WSMIN);
743 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
744 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
747 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
749 olen_arr(i,j,k) = Olen;
756 const amrex::Real
tol = 1.0e-5;
779 const int& max_iters,
780 const amrex::Array4<amrex::Real>& z0_arr,
781 const amrex::Array4<const amrex::Real>& umm_arr,
782 const amrex::Array4<const amrex::Real>& tm_arr,
783 const amrex::Array4<const amrex::Real>& tvm_arr,
784 const amrex::Array4<const amrex::Real>& qvm_arr,
785 const amrex::Array4<amrex::Real>& u_star_arr,
786 const amrex::Array4<amrex::Real>& w_star_arr,
787 const amrex::Array4<amrex::Real>& t_star_arr,
788 const amrex::Array4<amrex::Real>& q_star_arr,
789 const amrex::Array4<amrex::Real>& t_surf_arr,
790 const amrex::Array4<amrex::Real>& olen_arr,
791 const amrex::Array4<amrex::Real>& pblh_arr,
792 const amrex::Array4<amrex::Real>& Hwave_arr,
793 const amrex::Array4<amrex::Real>& Lwave_arr,
794 const amrex::Array4<amrex::Real>& eta_arr)
const
797 amrex::Real ustar = 0.0;
798 amrex::Real wstar = 0.0;
799 amrex::Real tflux = 0.0;
800 amrex::Real z0 = 0.0;
801 amrex::Real zeta = 0.0;
802 amrex::Real psi_m = 0.0;
803 amrex::Real psi_h = 0.0;
804 amrex::Real Olen = 0.0;
806 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
807 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
808 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
809 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
810 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
811 if (u_star_arr(i,j,k) == 1.E34) {
814 Olen = olen_arr(i,j,k);
820 ustar = u_star_arr(i,j,k);
821 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 )
823 tflux =
mdata.
surf_temp_flux*(1 + 0.61*qvm_arr(i,j,k)) - 0.61*tm_arr(i,j,k)*ustar*q_star_arr(i,j,k);
826 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
828 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
829 umm = std::max(umm,
WSMIN);
837 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
838 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
841 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
843 olen_arr(i,j,k) = Olen;
850 const amrex::Real
tol = 1.0e-5;
851 const amrex::Real
eps = 1e-15;
876 const int& max_iters,
877 const amrex::Array4<const amrex::Real>& z0_arr,
878 const amrex::Array4<const amrex::Real>& umm_arr,
879 const amrex::Array4<const amrex::Real>& tm_arr,
880 const amrex::Array4<const amrex::Real>& tvm_arr,
881 const amrex::Array4<const amrex::Real>& qvm_arr,
882 const amrex::Array4<amrex::Real>& u_star_arr,
883 const amrex::Array4<amrex::Real>& w_star_arr,
884 const amrex::Array4<amrex::Real>& t_star_arr,
885 const amrex::Array4<amrex::Real>& q_star_arr,
886 const amrex::Array4<amrex::Real>& t_surf_arr,
887 const amrex::Array4<amrex::Real>& olen_arr,
888 const amrex::Array4<amrex::Real>& pblh_arr,
889 const amrex::Array4<amrex::Real>& ,
890 const amrex::Array4<amrex::Real>& ,
891 const amrex::Array4<amrex::Real>& )
const
894 amrex::Real ustar = 0.0;
895 amrex::Real wstar = 0.0;
896 amrex::Real tflux = 0.0;
897 amrex::Real zeta = 0.0;
898 amrex::Real psi_m = 0.0;
899 amrex::Real psi_h = 0.0;
900 amrex::Real Olen = 0.0;
901 amrex::Real Oleno = 0.0;
902 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
903 if (u_star_arr(i,j,k) == 1.E34) {
906 Olen = olen_arr(i,j,k);
913 ustar = u_star_arr(i,j,k);
914 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
915 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
916 tflux *= (1 + 0.61*qvm_arr(i,j,k));
917 tflux += 0.61*tm_arr(i,j,k) * -ustar*q_star_arr(i,j,k);
920 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
922 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
923 umm = std::max(umm,
WSMIN);
926 if ( ((Olen >= 0.0) && (Oleno <= 0.0)) ||
927 ((Olen <= 0.0) && (Oleno >= 0.0)) ) {
928 Olen = 0.5 * (Olen + Oleno);
936 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
937 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
939 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
940 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
941 olen_arr(i,j,k) = Olen;
947 const amrex::Real
tol = 1.0e-5;
974 const int& max_iters,
975 const amrex::Array4<amrex::Real>& z0_arr,
976 const amrex::Array4<const amrex::Real>& umm_arr,
977 const amrex::Array4<const amrex::Real>& tm_arr,
978 const amrex::Array4<const amrex::Real>& tvm_arr,
979 const amrex::Array4<const amrex::Real>& qvm_arr,
980 const amrex::Array4<amrex::Real>& u_star_arr,
981 const amrex::Array4<amrex::Real>& w_star_arr,
982 const amrex::Array4<amrex::Real>& t_star_arr,
983 const amrex::Array4<amrex::Real>& q_star_arr,
984 const amrex::Array4<amrex::Real>& t_surf_arr,
985 const amrex::Array4<amrex::Real>& olen_arr,
986 const amrex::Array4<amrex::Real>& pblh_arr,
987 const amrex::Array4<amrex::Real>& ,
988 const amrex::Array4<amrex::Real>& ,
989 const amrex::Array4<amrex::Real>& )
const
992 amrex::Real ustar = 0.0;
993 amrex::Real wstar = 0.0;
994 amrex::Real z0 = 0.0;
995 amrex::Real tflux = 0.0;
996 amrex::Real zeta = 0.0;
997 amrex::Real psi_m = 0.0;
998 amrex::Real psi_h = 0.0;
999 amrex::Real Olen = 0.0;
1000 amrex::Real Oleno = 0.0;
1001 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
1002 if (u_star_arr(i,j,k) == 1.E34) {
1005 Olen = olen_arr(i,j,k);
1012 ustar = u_star_arr(i,j,k);
1021 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1023 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1024 tflux += 0.61*tm_arr(i,j,k) * -ustar*q_star_arr(i,j,k);
1027 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1029 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1030 umm = std::max(umm,
WSMIN);
1033 if ( ((Olen >= 0.0) && (Oleno <= 0.0)) ||
1034 ((Olen <= 0.0) && (Oleno >= 0.0)) ) {
1035 Olen = 0.5 * (Olen + Oleno);
1043 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1044 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
1046 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1048 olen_arr(i,j,k) = Olen;
1055 const amrex::Real
tol = 1.0e-5;
1081 const int& max_iters,
1082 const amrex::Array4<amrex::Real>& z0_arr,
1083 const amrex::Array4<const amrex::Real>& umm_arr,
1084 const amrex::Array4<const amrex::Real>& tm_arr,
1085 const amrex::Array4<const amrex::Real>& tvm_arr,
1086 const amrex::Array4<const amrex::Real>& qvm_arr,
1087 const amrex::Array4<amrex::Real>& u_star_arr,
1088 const amrex::Array4<amrex::Real>& w_star_arr,
1089 const amrex::Array4<amrex::Real>& t_star_arr,
1090 const amrex::Array4<amrex::Real>& q_star_arr,
1091 const amrex::Array4<amrex::Real>& t_surf_arr,
1092 const amrex::Array4<amrex::Real>& olen_arr,
1093 const amrex::Array4<amrex::Real>& pblh_arr,
1094 const amrex::Array4<amrex::Real>& ,
1095 const amrex::Array4<amrex::Real>& ,
1096 const amrex::Array4<amrex::Real>& )
const
1099 amrex::Real ustar = 0.0;
1100 amrex::Real wstar = 0.0;
1101 amrex::Real z0 = 0.0;
1102 amrex::Real tflux = 0.0;
1103 amrex::Real zeta = 0.0;
1104 amrex::Real psi_m = 0.0;
1105 amrex::Real psi_h = 0.0;
1106 amrex::Real Olen = 0.0;
1107 amrex::Real Oleno = 0.0;
1108 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
1109 if (u_star_arr(i,j,k) == 1.E34) {
1112 Olen = olen_arr(i,j,k);
1119 ustar = u_star_arr(i,j,k);
1121 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1123 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1124 tflux += 0.61*tm_arr(i,j,k) * -ustar*q_star_arr(i,j,k);
1127 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1129 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1130 umm = std::max(umm,
WSMIN);
1133 if ( ((Olen >= 0.0) && (Oleno <= 0.0)) ||
1134 ((Olen <= 0.0) && (Oleno >= 0.0)) ) {
1135 Olen = 0.5 * (Olen + Oleno);
1143 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1144 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
1146 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1148 olen_arr(i,j,k) = Olen;
1155 const amrex::Real
tol = 1.0e-5;
1178 const int& max_iters,
1179 const amrex::Array4<amrex::Real>& z0_arr,
1180 const amrex::Array4<const amrex::Real>& umm_arr,
1181 const amrex::Array4<const amrex::Real>& tm_arr,
1182 const amrex::Array4<const amrex::Real>& tvm_arr,
1183 const amrex::Array4<const amrex::Real>& qvm_arr,
1184 const amrex::Array4<amrex::Real>& u_star_arr,
1185 const amrex::Array4<amrex::Real>& w_star_arr,
1186 const amrex::Array4<amrex::Real>& t_star_arr,
1187 const amrex::Array4<amrex::Real>& q_star_arr,
1188 const amrex::Array4<amrex::Real>& t_surf_arr,
1189 const amrex::Array4<amrex::Real>& olen_arr,
1190 const amrex::Array4<amrex::Real>& pblh_arr,
1191 const amrex::Array4<amrex::Real>& ,
1192 const amrex::Array4<amrex::Real>& ,
1193 const amrex::Array4<amrex::Real>& )
const
1196 amrex::Real ustar = 0.0;
1197 amrex::Real wstar = 0.0;
1198 amrex::Real z0 = 0.0;
1199 amrex::Real tflux = 0.0;
1200 amrex::Real zeta = 0.0;
1201 amrex::Real psi_m = 0.0;
1202 amrex::Real psi_h = 0.0;
1203 amrex::Real Olen = 0.0;
1204 amrex::Real Oleno = 0.0;
1205 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
1206 if (u_star_arr(i,j,k) == 1.E34) {
1209 Olen = olen_arr(i,j,k);
1216 ustar = u_star_arr(i,j,k);
1218 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1220 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1221 tflux += 0.61*tm_arr(i,j,k) * -ustar*q_star_arr(i,j,k);
1224 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1226 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1227 umm = std::max(umm,
WSMIN);
1230 if ( ((Olen >= 0.0) && (Oleno <= 0.0)) ||
1231 ((Olen <= 0.0) && (Oleno >= 0.0)) ) {
1232 Olen = 0.5 * (Olen + Oleno);
1240 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1241 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
1243 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1245 olen_arr(i,j,k) = Olen;
1252 const amrex::Real
tol = 1.0e-5;
1275 const int& max_iters,
1276 const amrex::Array4<amrex::Real>& z0_arr,
1277 const amrex::Array4<const amrex::Real>& umm_arr,
1278 const amrex::Array4<const amrex::Real>& tm_arr,
1279 const amrex::Array4<const amrex::Real>& tvm_arr,
1280 const amrex::Array4<const amrex::Real>& qvm_arr,
1281 const amrex::Array4<amrex::Real>& u_star_arr,
1282 const amrex::Array4<amrex::Real>& w_star_arr,
1283 const amrex::Array4<amrex::Real>& t_star_arr,
1284 const amrex::Array4<amrex::Real>& q_star_arr,
1285 const amrex::Array4<amrex::Real>& t_surf_arr,
1286 const amrex::Array4<amrex::Real>& olen_arr,
1287 const amrex::Array4<amrex::Real>& pblh_arr,
1288 const amrex::Array4<amrex::Real>& Hwave_arr,
1289 const amrex::Array4<amrex::Real>& Lwave_arr,
1290 const amrex::Array4<amrex::Real>& eta_arr)
const
1293 amrex::Real ustar = 0.0;
1294 amrex::Real wstar = 0.0;
1295 amrex::Real z0 = 0.0;
1296 amrex::Real tflux = 0.0;
1297 amrex::Real zeta = 0.0;
1298 amrex::Real psi_m = 0.0;
1299 amrex::Real psi_h = 0.0;
1300 amrex::Real Olen = 0.0;
1301 amrex::Real Oleno = 0.0;
1303 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1304 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1305 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1306 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1307 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
1308 if (u_star_arr(i,j,k) == 1.E34) {
1311 Olen = olen_arr(i,j,k);
1318 ustar = u_star_arr(i,j,k);
1319 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 )
1321 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1323 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1324 tflux += 0.61*tm_arr(i,j,k) * -ustar*q_star_arr(i,j,k);
1327 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1329 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1330 umm = std::max(umm,
WSMIN);
1333 if ( ((Olen >= 0.0) && (Oleno <= 0.0)) ||
1334 ((Olen <= 0.0) && (Oleno >= 0.0)) ) {
1335 Olen = 0.5 * (Olen + Oleno);
1343 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1344 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
1346 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1348 olen_arr(i,j,k) = Olen;
1355 const amrex::Real
tol = 1.0e-5;
1356 const amrex::Real
eps = 1e-15;
1376 const amrex::Array4<const amrex::Real>& ,
1377 const amrex::Array4<const amrex::Real>& ,
1378 const amrex::Array4<const amrex::Real>& ,
1379 const amrex::Array4<const amrex::Real>& ,
1380 const amrex::Array4<const amrex::Real>& ,
1381 const amrex::Array4<const amrex::Real>& ,
1382 const amrex::Array4<const amrex::Real>& ,
1383 const amrex::Array4<const amrex::Real>& )
const
1386 amrex::Real moflux = 0.0;
1397 const amrex::Array4<const amrex::Real>& cons_arr,
1398 const amrex::Array4<const amrex::Real>& velx_arr,
1399 const amrex::Array4<const amrex::Real>& vely_arr,
1400 const amrex::Array4<const amrex::Real>& umm_arr,
1401 const amrex::Array4<const amrex::Real>& tm_arr,
1402 const amrex::Array4<const amrex::Real>& u_star_arr,
1403 const amrex::Array4<const amrex::Real>& t_star_arr,
1404 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
1408 amrex::Real velx = 0.5 * ( velx_arr(i,j,k) + velx_arr(i+1,j ,k) );
1409 amrex::Real vely = 0.5 * ( vely_arr(i,j,k) + vely_arr(i ,j+1,k) );
1411 amrex::Real theta_mean = tm_arr(i,j,k);
1412 amrex::Real ustar = u_star_arr(i,j,k);
1413 amrex::Real tstar = t_star_arr(i,j,k);
1414 amrex::Real theta_surf = t_surf_arr(i,j,k);
1415 amrex::Real wsp_mean = umm_arr(i,j,k);
1416 wsp_mean = std::max(wsp_mean,
WSMIN);
1418 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1419 amrex::Real num1 = wsp * (theta_mean-theta_surf);
1420 amrex::Real num2 = wsp_mean * (
theta-theta_mean);
1423 amrex::Real moflux = (std::abs(tstar) >
eps) ?
1424 -
rho*tstar*ustar*(num1+num2)/((theta_mean-theta_surf)*wsp_mean) : 0.0;
1435 const amrex::Array4<const amrex::Real>& cons_arr,
1436 const amrex::Array4<const amrex::Real>& velx_arr,
1437 const amrex::Array4<const amrex::Real>& vely_arr,
1438 const amrex::Array4<const amrex::Real>& umm_arr,
1439 const amrex::Array4<const amrex::Real>& um_arr,
1440 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1442 amrex::Real velx = velx_arr(i,j,k);
1443 amrex::Real vely = 0.25 * ( vely_arr(i ,j,k) + vely_arr(i ,j+1,k)
1444 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
1447 amrex::Real umean = um_arr(i,j,k);
1448 amrex::Real ustar = 0.5 * ( u_star_arr(i-1,j,k) + u_star_arr(i,j,k) );
1449 amrex::Real wsp_mean = 0.5 * ( umm_arr(i-1,j,k) + umm_arr(i,j,k) );
1450 wsp_mean = std::max(wsp_mean,
WSMIN);
1456 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1457 amrex::Real num1 = wsp * umean;
1458 amrex::Real num2 = wsp_mean * (velx-umean);
1461 amrex::Real stressx = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1472 const amrex::Array4<const amrex::Real>& cons_arr,
1473 const amrex::Array4<const amrex::Real>& velx_arr,
1474 const amrex::Array4<const amrex::Real>& vely_arr,
1475 const amrex::Array4<const amrex::Real>& umm_arr,
1476 const amrex::Array4<const amrex::Real>& vm_arr,
1477 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1479 amrex::Real velx = 0.25 * ( velx_arr(i,j ,k) + velx_arr(i+1,j ,k)
1480 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
1481 amrex::Real vely = vely_arr(i,j,k);
1484 amrex::Real vmean = vm_arr(i,j,k);
1485 amrex::Real ustar = 0.5 * ( u_star_arr(i,j-1,k) + u_star_arr(i,j,k) );
1486 amrex::Real wsp_mean = 0.5 * ( umm_arr(i,j-1,k) + umm_arr(i,j,k) );
1487 wsp_mean = std::max(wsp_mean,
WSMIN);
1493 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1494 amrex::Real num1 = wsp * vmean;
1495 amrex::Real num2 = wsp_mean * (vely-vmean);
1498 amrex::Real stressy = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1504 const amrex::Real
eps = 1e-15;
1522 const amrex::Array4<const amrex::Real>& ,
1523 const amrex::Array4<const amrex::Real>& ,
1524 const amrex::Array4<const amrex::Real>& ,
1525 const amrex::Array4<const amrex::Real>& ,
1526 const amrex::Array4<const amrex::Real>& ,
1527 const amrex::Array4<const amrex::Real>& ,
1528 const amrex::Array4<const amrex::Real>& ,
1529 const amrex::Array4<const amrex::Real>& )
const
1532 amrex::Real moflux = 0.0;
1543 const amrex::Array4<const amrex::Real>& cons_arr,
1544 const amrex::Array4<const amrex::Real>& ,
1545 const amrex::Array4<const amrex::Real>& ,
1546 const amrex::Array4<const amrex::Real>& umm_arr,
1547 const amrex::Array4<const amrex::Real>& tm_arr,
1548 const amrex::Array4<const amrex::Real>& ,
1549 const amrex::Array4<const amrex::Real>& ,
1550 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
1552 amrex::Real Ch = 0.0012;
1554 amrex::Real theta_surf = t_surf_arr(i,j,k);
1555 amrex::Real theta_mean = tm_arr(i,j,k);
1556 amrex::Real wsp_mean = umm_arr(i,j,k);
1559 amrex::Real moflux = -
rho * Ch * wsp_mean * (theta_mean - theta_surf);
1570 const amrex::Array4<const amrex::Real>& cons_arr,
1571 const amrex::Array4<const amrex::Real>& velx_arr,
1572 const amrex::Array4<const amrex::Real>& vely_arr,
1573 const amrex::Array4<const amrex::Real>& umm_arr,
1574 const amrex::Array4<const amrex::Real>& ,
1575 const amrex::Array4<const amrex::Real>& )
const
1577 amrex::Real velx = velx_arr(i,j,k);
1578 amrex::Real vely = 0.25 * ( vely_arr(i ,j,k) + vely_arr(i ,j+1,k)
1579 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
1582 amrex::Real Cd = 0.001;
1583 const amrex::Real c = 7e-5;
1584 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1585 amrex::Real wsp_mean = 0.5 * ( umm_arr(i-1,j,k) + umm_arr(i,j,k) );
1586 if (wsp_mean <= 5.0) {
1588 }
else if (wsp_mean < 25.0 && wsp_mean > 5.0) {
1589 Cd = 0.001 + c * (wsp_mean - 5.0);
1595 amrex::Real stressx = -
rho * Cd * velx * wsp;
1606 const amrex::Array4<const amrex::Real>& cons_arr,
1607 const amrex::Array4<const amrex::Real>& velx_arr,
1608 const amrex::Array4<const amrex::Real>& vely_arr,
1609 const amrex::Array4<const amrex::Real>& umm_arr,
1610 const amrex::Array4<const amrex::Real>& ,
1611 const amrex::Array4<const amrex::Real>& )
const
1613 amrex::Real velx = 0.25 * ( velx_arr(i,j ,k) + velx_arr(i+1,j ,k)
1614 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
1615 amrex::Real vely = vely_arr(i,j,k);
1618 amrex::Real Cd = 0.001;
1619 const amrex::Real c = 7e-5;
1620 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1621 amrex::Real wsp_mean = 0.5 * ( umm_arr(i,j-1,k) + umm_arr(i,j,k) );
1622 if (wsp_mean <= 5.0) {
1624 }
else if (wsp_mean < 25.0 && wsp_mean > 5.0) {
1625 Cd = 0.001 + c * (wsp_mean - 5.0);
1631 amrex::Real stressy = -
rho * Cd * vely * wsp;
1654 const amrex::Array4<const amrex::Real>& cons_arr,
1655 const amrex::Array4<const amrex::Real>& ,
1656 const amrex::Array4<const amrex::Real>& ,
1657 const amrex::Array4<const amrex::Real>& ,
1658 const amrex::Array4<const amrex::Real>& ,
1659 const amrex::Array4<const amrex::Real>& ,
1660 const amrex::Array4<const amrex::Real>& q_star_arr,
1661 const amrex::Array4<const amrex::Real>& )
const
1664 amrex::Real qstar = q_star_arr(i,j,k);
1667 amrex::Real moflux = (std::abs(qstar) >
eps) ?
rho * qstar : 0.0;
1678 const amrex::Array4<const amrex::Real>& cons_arr,
1679 const amrex::Array4<const amrex::Real>& ,
1680 const amrex::Array4<const amrex::Real>& ,
1681 const amrex::Array4<const amrex::Real>& ,
1682 const amrex::Array4<const amrex::Real>& ,
1683 const amrex::Array4<const amrex::Real>& ,
1684 const amrex::Array4<const amrex::Real>& t_star_arr,
1685 const amrex::Array4<const amrex::Real>& )
const
1688 amrex::Real tstar = t_star_arr(i,j,k);
1691 amrex::Real moflux = (std::abs(tstar) >
eps) ?
rho * tstar : 0.0;
1702 const amrex::Array4<const amrex::Real>& cons_arr,
1703 const amrex::Array4<const amrex::Real>& velx_arr,
1704 const amrex::Array4<const amrex::Real>& vely_arr,
1705 const amrex::Array4<const amrex::Real>& ,
1706 const amrex::Array4<const amrex::Real>& ,
1707 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1709 amrex::Real velx = velx_arr(i,j,k);
1710 amrex::Real vely = 0.25 * ( vely_arr(i ,j,k) + vely_arr(i ,j+1,k)
1711 + vely_arr(i-1,j,k) + vely_arr(i-1,j+1,k) );
1714 amrex::Real ustar = 0.5 * ( u_star_arr(i-1,j,k) + u_star_arr(i,j,k) );
1715 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1718 amrex::Real stressx = -
rho * ustar * ustar * velx / wsp;
1729 const amrex::Array4<const amrex::Real>& cons_arr,
1730 const amrex::Array4<const amrex::Real>& velx_arr,
1731 const amrex::Array4<const amrex::Real>& vely_arr,
1732 const amrex::Array4<const amrex::Real>& ,
1733 const amrex::Array4<const amrex::Real>& ,
1734 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1736 amrex::Real velx = 0.25 * ( velx_arr(i,j ,k) + velx_arr(i+1,j ,k)
1737 + velx_arr(i,j-1,k) + velx_arr(i+1,j-1,k) );
1738 amrex::Real vely = vely_arr(i,j,k);
1741 amrex::Real ustar = 0.5 * ( u_star_arr(i,j-1,k) + u_star_arr(i,j,k) );
1742 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1745 amrex::Real stressy = -
rho * ustar * ustar * vely / wsp;
1751 const amrex::Real
eps = 1e-15;
1768 const amrex::Array4<const amrex::Real>& cons_arr,
1769 const amrex::Array4<const amrex::Real>& ,
1770 const amrex::Array4<const amrex::Real>& ,
1771 const amrex::Array4<const amrex::Real>& ,
1772 const amrex::Array4<const amrex::Real>& ,
1773 const amrex::Array4<const amrex::Real>& ,
1774 const amrex::Array4<const amrex::Real>& ,
1775 const amrex::Array4<const amrex::Real>& )
const
1779 amrex::Real qstar = 0.0;
1780 amrex::Real moflux = (std::abs(qstar) >
eps) ? -
rho * qstar : 0.0;
1791 const amrex::Array4<const amrex::Real>& cons_arr,
1792 const amrex::Array4<const amrex::Real>& ,
1793 const amrex::Array4<const amrex::Real>& ,
1794 const amrex::Array4<const amrex::Real>& ,
1795 const amrex::Array4<const amrex::Real>& tm_arr,
1796 const amrex::Array4<const amrex::Real>& ,
1797 const amrex::Array4<const amrex::Real>& t_star_arr,
1798 const amrex::Array4<const amrex::Real>& t_surf_arr)
const
1801 amrex::Real theta_mean = tm_arr(i,j,k);
1802 amrex::Real theta_surf = t_surf_arr(i,j,k);
1804 amrex::Real tstar = t_star_arr(i,j,k);
1805 amrex::Real moflux = (std::abs(tstar) >
eps) ? -
rho * tstar * (theta_mean-theta_surf) : 0.0;
1816 const amrex::Array4<const amrex::Real>& cons_arr,
1817 const amrex::Array4<const amrex::Real>& ,
1818 const amrex::Array4<const amrex::Real>& ,
1819 const amrex::Array4<const amrex::Real>& ,
1820 const amrex::Array4<const amrex::Real>& ,
1821 const amrex::Array4<const amrex::Real>& u_star_arr)
const
1825 amrex::Real ustar = 0.5 * ( u_star_arr(i-1,j,k) + u_star_arr(i,j,k) );
1826 amrex::Real stressx = -
rho * ustar * ustar;
1837 const amrex::Array4<const amrex::Real>& ,
1838 const amrex::Array4<const amrex::Real>& ,
1839 const amrex::Array4<const amrex::Real>& ,
1840 const amrex::Array4<const amrex::Real>& ,
1841 const amrex::Array4<const amrex::Real>& ,
1842 const amrex::Array4<const amrex::Real>& )
const
1845 amrex::Real stressy = 0.0;
1851 const amrex::Real
eps = 1e-15;
constexpr amrex::Real KAPPA
Definition: ERF_Constants.H:20
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:21
constexpr amrex::Real PIoTwo
Definition: ERF_Constants.H:7
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
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:79
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
Definition: ERF_MOSTStress.H:136
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:199
adiabatic_charnock(amrex::Real zref, amrex::Real flux, amrex::Real cnk_a, bool cnk_visc)
Definition: ERF_MOSTStress.H:137
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 > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &olen_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &) const
Definition: ERF_MOSTStress.H:151
most_data mdata
Definition: ERF_MOSTStress.H:196
const amrex::Real tol
Definition: ERF_MOSTStress.H:198
similarity_funs sfuns
Definition: ERF_MOSTStress.H:197
Definition: ERF_MOSTStress.H:270
similarity_funs sfuns
Definition: ERF_MOSTStress.H:323
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:325
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 > &, 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:281
adiabatic_donelan(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:271
most_data mdata
Definition: ERF_MOSTStress.H:322
const amrex::Real tol
Definition: ERF_MOSTStress.H:324
Definition: ERF_MOSTStress.H:207
adiabatic_mod_charnock(amrex::Real zref, amrex::Real flux, amrex::Real depth)
Definition: ERF_MOSTStress.H:208
similarity_funs sfuns
Definition: ERF_MOSTStress.H:260
const amrex::Real tol
Definition: ERF_MOSTStress.H:261
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:262
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 > &, 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:221
most_data mdata
Definition: ERF_MOSTStress.H:259
Definition: ERF_MOSTStress.H:333
const amrex::Real eps
Definition: ERF_MOSTStress.H:391
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 > &, 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:344
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:392
most_data mdata
Definition: ERF_MOSTStress.H:388
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:394
adiabatic_wave_coupled(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:334
similarity_funs sfuns
Definition: ERF_MOSTStress.H:389
const amrex::Real tol
Definition: ERF_MOSTStress.H:390
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:393
Definition: ERF_MOSTStress.H:90
adiabatic(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:91
similarity_funs sfuns
Definition: ERF_MOSTStress.H:128
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 > &, 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:101
most_data mdata
Definition: ERF_MOSTStress.H:127
Definition: ERF_MOSTStress.H:1645
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:1699
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:1651
custom_flux()
Definition: ERF_MOSTStress.H:1646
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:1675
const amrex::Real eps
Definition: ERF_MOSTStress.H:1751
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:1726
Definition: ERF_MOSTStress.H:1513
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:1567
donelan_flux()
Definition: ERF_MOSTStress.H:1514
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:1603
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:1540
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:1519
Definition: ERF_MOSTStress.H:1367
moeng_flux()
Definition: ERF_MOSTStress.H:1368
const amrex::Real eps
Definition: ERF_MOSTStress.H:1504
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:1432
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1505
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:1394
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:1373
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:1469
Definition: ERF_MOSTStress.H:13
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:23
amrex::Real Cnk_b
Definition: ERF_MOSTStress.H:25
amrex::Real Cnk_d
Modified Charnock Eq (4) https://doi.org/10.1175/JAMC-D-17-0137.1.
Definition: ERF_MOSTStress.H:24
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:21
const amrex::Real Bjr_beta
Definition: ERF_MOSTStress.H:28
amrex::Real Cnk_b1
Modified Charnock Eq (4) https://doi.org/10.1175/JAMC-D-17-0137.1.
Definition: ERF_MOSTStress.H:22
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:26
amrex::Real surf_temp_flux
Heat flux.
Definition: ERF_MOSTStress.H:19
Definition: ERF_MOSTStress.H:1759
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 > &, const amrex::Array4< const amrex::Real > &) const
Definition: ERF_MOSTStress.H:1765
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:1834
rotate_flux()
Definition: ERF_MOSTStress.H:1760
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:1813
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:1788
const amrex::Real eps
Definition: ERF_MOSTStress.H:1851
Definition: ERF_MOSTStress.H:36
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:40
amrex::Real beta_m
Constants from Dyer, BLM, 1974.
Definition: ERF_MOSTStress.H:65
amrex::Real beta_h
https://doi.org/10.1007/BF00240838
Definition: ERF_MOSTStress.H:66
amrex::Real gamma_h
Definition: ERF_MOSTStress.H:68
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:54
amrex::Real gamma_m
Definition: ERF_MOSTStress.H:67
Definition: ERF_MOSTStress.H:487
const amrex::Real tol
Definition: ERF_MOSTStress.H:577
similarity_funs sfuns
Definition: ERF_MOSTStress.H:576
most_data mdata
Definition: ERF_MOSTStress.H:575
surface_flux_charnock(amrex::Real zref, amrex::Real flux, amrex::Real cnk_a, bool cnk_visc)
Definition: ERF_MOSTStress.H:488
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 > &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:502
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:578
Definition: ERF_MOSTStress.H:677
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 > &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:688
const amrex::Real tol
Definition: ERF_MOSTStress.H:756
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:757
most_data mdata
Definition: ERF_MOSTStress.H:754
similarity_funs sfuns
Definition: ERF_MOSTStress.H:755
surface_flux_donelan(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:678
Definition: ERF_MOSTStress.H:586
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:669
most_data mdata
Definition: ERF_MOSTStress.H:666
surface_flux_mod_charnock(amrex::Real zref, amrex::Real flux, amrex::Real depth)
Definition: ERF_MOSTStress.H:587
const amrex::Real tol
Definition: ERF_MOSTStress.H:668
similarity_funs sfuns
Definition: ERF_MOSTStress.H:667
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 > &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:600
Definition: ERF_MOSTStress.H:765
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:854
surface_flux_wave_coupled(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:766
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 > &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:776
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:853
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:852
most_data mdata
Definition: ERF_MOSTStress.H:848
similarity_funs sfuns
Definition: ERF_MOSTStress.H:849
const amrex::Real tol
Definition: ERF_MOSTStress.H:850
const amrex::Real eps
Definition: ERF_MOSTStress.H:851
Definition: ERF_MOSTStress.H:402
similarity_funs sfuns
Definition: ERF_MOSTStress.H:477
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 > &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:413
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:479
most_data mdata
Definition: ERF_MOSTStress.H:476
surface_flux(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:403
const amrex::Real tol
Definition: ERF_MOSTStress.H:478
Definition: ERF_MOSTStress.H:956
most_data mdata
Definition: ERF_MOSTStress.H:1053
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 > &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:971
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1056
const amrex::Real tol
Definition: ERF_MOSTStress.H:1055
surface_temp_charnock(amrex::Real zref, amrex::Real flux, amrex::Real cnk_a, bool cnk_visc)
Definition: ERF_MOSTStress.H:957
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1054
Definition: ERF_MOSTStress.H:1164
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1251
most_data mdata
Definition: ERF_MOSTStress.H:1250
surface_temp_donelan(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:1165
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 > &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:1175
const amrex::Real tol
Definition: ERF_MOSTStress.H:1252
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1253
Definition: ERF_MOSTStress.H:1064
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1154
surface_temp_mod_charnock(amrex::Real zref, amrex::Real flux, amrex::Real depth)
Definition: ERF_MOSTStress.H:1065
const amrex::Real tol
Definition: ERF_MOSTStress.H:1155
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1156
most_data mdata
Definition: ERF_MOSTStress.H:1153
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 > &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:1078
Definition: ERF_MOSTStress.H:1261
const amrex::Real eps
Definition: ERF_MOSTStress.H:1356
const amrex::Real tol
Definition: ERF_MOSTStress.H:1355
most_data mdata
Definition: ERF_MOSTStress.H:1353
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 > &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:1272
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:1357
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1354
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:1358
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1359
surface_temp_wave_coupled(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:1262
Definition: ERF_MOSTStress.H:862
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 > &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:873
similarity_funs sfuns
Definition: ERF_MOSTStress.H:946
surface_temp(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:863
const amrex::Real tol
Definition: ERF_MOSTStress.H:947
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:948
most_data mdata
Definition: ERF_MOSTStress.H:945