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;
307 ustar = u_star_arr(i,j,k);
311 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
313 t_star_arr(i,j,k) = 0.0;
314 olen_arr(i,j,k) = 1.0e16;
321 const amrex::Real
tol = 1.0e-5;
344 const int& max_iters,
345 const amrex::Array4<amrex::Real>& z0_arr,
346 const amrex::Array4<const amrex::Real>& umm_arr,
347 const amrex::Array4<const amrex::Real>& ,
348 const amrex::Array4<const amrex::Real>& ,
349 const amrex::Array4<const amrex::Real>& ,
350 const amrex::Array4<amrex::Real>& u_star_arr,
351 const amrex::Array4<amrex::Real>& ,
352 const amrex::Array4<amrex::Real>& t_star_arr,
353 const amrex::Array4<amrex::Real>& ,
354 const amrex::Array4<amrex::Real>& ,
355 const amrex::Array4<amrex::Real>& olen_arr,
356 const amrex::Array4<amrex::Real>& ,
357 const amrex::Array4<amrex::Real>& Hwave_arr,
358 const amrex::Array4<amrex::Real>& Lwave_arr,
359 const amrex::Array4<amrex::Real>& eta_arr)
const
362 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
363 amrex::Real ustar = 0.0;
364 amrex::Real z0 = 0.0;
366 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
367 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
368 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
369 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
372 ustar = u_star_arr(i,j,k);
373 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 )
377 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
379 t_star_arr(i,j,k) = 0.0;
380 olen_arr(i,j,k) = 1.0e16;
387 const amrex::Real
tol = 1.0e-5;
388 const amrex::Real
eps = 1e-15;
413 const int& max_iters,
414 const amrex::Array4<const amrex::Real>& z0_arr,
415 const amrex::Array4<const amrex::Real>& umm_arr,
416 const amrex::Array4<const amrex::Real>& tm_arr,
417 const amrex::Array4<const amrex::Real>& tvm_arr,
418 const amrex::Array4<const amrex::Real>& qvm_arr,
419 const amrex::Array4<amrex::Real>& u_star_arr,
420 const amrex::Array4<amrex::Real>& w_star_arr,
421 const amrex::Array4<amrex::Real>& t_star_arr,
422 const amrex::Array4<amrex::Real>& q_star_arr,
423 const amrex::Array4<amrex::Real>& t_surf_arr,
424 const amrex::Array4<amrex::Real>& olen_arr,
425 const amrex::Array4<amrex::Real>& pblh_arr,
426 const amrex::Array4<amrex::Real>& ,
427 const amrex::Array4<amrex::Real>& ,
428 const amrex::Array4<amrex::Real>& )
const
431 amrex::Real ustar = 0.0;
432 amrex::Real wstar = 0.0;
433 amrex::Real tflux = 0.0;
434 amrex::Real zeta = 0.0;
435 amrex::Real psi_m = 0.0;
436 amrex::Real psi_h = 0.0;
437 amrex::Real Olen = 0.0;
438 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
442 ustar = u_star_arr(i,j,k);
443 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);
446 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
448 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
449 umm = std::max(umm,
WSMIN);
457 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
458 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
461 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
463 olen_arr(i,j,k) = Olen;
469 const amrex::Real
tol = 1.0e-5;
496 const int& max_iters,
497 const amrex::Array4<amrex::Real>& z0_arr,
498 const amrex::Array4<const amrex::Real>& umm_arr,
499 const amrex::Array4<const amrex::Real>& tm_arr,
500 const amrex::Array4<const amrex::Real>& tvm_arr,
501 const amrex::Array4<const amrex::Real>& qvm_arr,
502 const amrex::Array4<amrex::Real>& u_star_arr,
503 const amrex::Array4<amrex::Real>& w_star_arr,
504 const amrex::Array4<amrex::Real>& t_star_arr,
505 const amrex::Array4<amrex::Real>& q_star_arr,
506 const amrex::Array4<amrex::Real>& t_surf_arr,
507 const amrex::Array4<amrex::Real>& olen_arr,
508 const amrex::Array4<amrex::Real>& pblh_arr,
509 const amrex::Array4<amrex::Real>& ,
510 const amrex::Array4<amrex::Real>& ,
511 const amrex::Array4<amrex::Real>& )
const
514 amrex::Real ustar = 0.0;
515 amrex::Real wstar = 0.0;
516 amrex::Real tflux = 0.0;
517 amrex::Real z0 = 0.0;
518 amrex::Real zeta = 0.0;
519 amrex::Real psi_m = 0.0;
520 amrex::Real psi_h = 0.0;
521 amrex::Real Olen = 0.0;
522 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
525 ustar = u_star_arr(i,j,k);
534 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);
537 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
539 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
540 umm = std::max(umm,
WSMIN);
548 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
549 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
552 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
554 olen_arr(i,j,k) = Olen;
561 const amrex::Real
tol = 1.0e-5;
587 const int& max_iters,
588 const amrex::Array4<amrex::Real>& z0_arr,
589 const amrex::Array4<const amrex::Real>& umm_arr,
590 const amrex::Array4<const amrex::Real>& tm_arr,
591 const amrex::Array4<const amrex::Real>& tvm_arr,
592 const amrex::Array4<const amrex::Real>& qvm_arr,
593 const amrex::Array4<amrex::Real>& u_star_arr,
594 const amrex::Array4<amrex::Real>& w_star_arr,
595 const amrex::Array4<amrex::Real>& t_star_arr,
596 const amrex::Array4<amrex::Real>& q_star_arr,
597 const amrex::Array4<amrex::Real>& t_surf_arr,
598 const amrex::Array4<amrex::Real>& olen_arr,
599 const amrex::Array4<amrex::Real>& pblh_arr,
600 const amrex::Array4<amrex::Real>& ,
601 const amrex::Array4<amrex::Real>& ,
602 const amrex::Array4<amrex::Real>& )
const
605 amrex::Real ustar = 0.0;
606 amrex::Real wstar = 0.0;
607 amrex::Real tflux = 0.0;
608 amrex::Real z0 = 0.0;
609 amrex::Real zeta = 0.0;
610 amrex::Real psi_m = 0.0;
611 amrex::Real psi_h = 0.0;
612 amrex::Real Olen = 0.0;
613 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
616 ustar = u_star_arr(i,j,k);
618 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);
621 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
623 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
624 umm = std::max(umm,
WSMIN);
632 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
633 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
636 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
638 olen_arr(i,j,k) = Olen;
645 const amrex::Real
tol = 1.0e-5;
668 const int& max_iters,
669 const amrex::Array4<amrex::Real>& z0_arr,
670 const amrex::Array4<const amrex::Real>& umm_arr,
671 const amrex::Array4<const amrex::Real>& tm_arr,
672 const amrex::Array4<const amrex::Real>& tvm_arr,
673 const amrex::Array4<const amrex::Real>& qvm_arr,
674 const amrex::Array4<amrex::Real>& u_star_arr,
675 const amrex::Array4<amrex::Real>& w_star_arr,
676 const amrex::Array4<amrex::Real>& t_star_arr,
677 const amrex::Array4<amrex::Real>& q_star_arr,
678 const amrex::Array4<amrex::Real>& t_surf_arr,
679 const amrex::Array4<amrex::Real>& olen_arr,
680 const amrex::Array4<amrex::Real>& pblh_arr,
681 const amrex::Array4<amrex::Real>& ,
682 const amrex::Array4<amrex::Real>& ,
683 const amrex::Array4<amrex::Real>& )
const
686 amrex::Real ustar = 0.0;
687 amrex::Real wstar = 0.0;
688 amrex::Real tflux = 0.0;
689 amrex::Real z0 = 0.0;
690 amrex::Real zeta = 0.0;
691 amrex::Real psi_m = 0.0;
692 amrex::Real psi_h = 0.0;
693 amrex::Real Olen = 0.0;
694 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
697 ustar = u_star_arr(i,j,k);
699 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);
702 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
704 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
705 umm = std::max(umm,
WSMIN);
713 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
714 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
717 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
719 olen_arr(i,j,k) = Olen;
726 const amrex::Real
tol = 1.0e-5;
749 const int& max_iters,
750 const amrex::Array4<amrex::Real>& z0_arr,
751 const amrex::Array4<const amrex::Real>& umm_arr,
752 const amrex::Array4<const amrex::Real>& tm_arr,
753 const amrex::Array4<const amrex::Real>& tvm_arr,
754 const amrex::Array4<const amrex::Real>& qvm_arr,
755 const amrex::Array4<amrex::Real>& u_star_arr,
756 const amrex::Array4<amrex::Real>& w_star_arr,
757 const amrex::Array4<amrex::Real>& t_star_arr,
758 const amrex::Array4<amrex::Real>& q_star_arr,
759 const amrex::Array4<amrex::Real>& t_surf_arr,
760 const amrex::Array4<amrex::Real>& olen_arr,
761 const amrex::Array4<amrex::Real>& pblh_arr,
762 const amrex::Array4<amrex::Real>& Hwave_arr,
763 const amrex::Array4<amrex::Real>& Lwave_arr,
764 const amrex::Array4<amrex::Real>& eta_arr)
const
767 amrex::Real ustar = 0.0;
768 amrex::Real wstar = 0.0;
769 amrex::Real tflux = 0.0;
770 amrex::Real z0 = 0.0;
771 amrex::Real zeta = 0.0;
772 amrex::Real psi_m = 0.0;
773 amrex::Real psi_h = 0.0;
774 amrex::Real Olen = 0.0;
776 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
777 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
778 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
779 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
780 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
783 ustar = u_star_arr(i,j,k);
784 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 )
786 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);
789 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
791 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
792 umm = std::max(umm,
WSMIN);
800 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
801 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
804 (u_star_arr(i,j,k) *
mdata.
kappa) + tm_arr(i,j,k);
806 olen_arr(i,j,k) = Olen;
813 const amrex::Real
tol = 1.0e-5;
814 const amrex::Real
eps = 1e-15;
839 const int& max_iters,
840 const amrex::Array4<const amrex::Real>& z0_arr,
841 const amrex::Array4<const amrex::Real>& umm_arr,
842 const amrex::Array4<const amrex::Real>& tm_arr,
843 const amrex::Array4<const amrex::Real>& tvm_arr,
844 const amrex::Array4<const amrex::Real>& qvm_arr,
845 const amrex::Array4<amrex::Real>& u_star_arr,
846 const amrex::Array4<amrex::Real>& w_star_arr,
847 const amrex::Array4<amrex::Real>& t_star_arr,
848 const amrex::Array4<amrex::Real>& q_star_arr,
849 const amrex::Array4<amrex::Real>& t_surf_arr,
850 const amrex::Array4<amrex::Real>& olen_arr,
851 const amrex::Array4<amrex::Real>& pblh_arr,
852 const amrex::Array4<amrex::Real>& ,
853 const amrex::Array4<amrex::Real>& ,
854 const amrex::Array4<amrex::Real>& )
const
857 amrex::Real ustar = 0.0;
858 amrex::Real wstar = 0.0;
859 amrex::Real tflux = 0.0;
860 amrex::Real zeta = 0.0;
861 amrex::Real psi_m = 0.0;
862 amrex::Real psi_h = 0.0;
863 amrex::Real Olen = 0.0;
864 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
867 ustar = u_star_arr(i,j,k);
868 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
869 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
870 tflux *= (1 + 0.61*qvm_arr(i,j,k));
871 tflux += 0.61*tm_arr(i,j,k) * -ustar*q_star_arr(i,j,k);
874 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
876 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
877 umm = std::max(umm,
WSMIN);
885 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
886 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
888 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
889 (std::log(
mdata.
zref / z0_arr(i,j,k)) - psi_h);
890 olen_arr(i,j,k) = Olen;
896 const amrex::Real
tol = 1.0e-5;
923 const int& max_iters,
924 const amrex::Array4<amrex::Real>& z0_arr,
925 const amrex::Array4<const amrex::Real>& umm_arr,
926 const amrex::Array4<const amrex::Real>& tm_arr,
927 const amrex::Array4<const amrex::Real>& tvm_arr,
928 const amrex::Array4<const amrex::Real>& qvm_arr,
929 const amrex::Array4<amrex::Real>& u_star_arr,
930 const amrex::Array4<amrex::Real>& w_star_arr,
931 const amrex::Array4<amrex::Real>& t_star_arr,
932 const amrex::Array4<amrex::Real>& q_star_arr,
933 const amrex::Array4<amrex::Real>& t_surf_arr,
934 const amrex::Array4<amrex::Real>& olen_arr,
935 const amrex::Array4<amrex::Real>& pblh_arr,
936 const amrex::Array4<amrex::Real>& ,
937 const amrex::Array4<amrex::Real>& ,
938 const amrex::Array4<amrex::Real>& )
const
941 amrex::Real ustar = 0.0;
942 amrex::Real wstar = 0.0;
943 amrex::Real z0 = 0.0;
944 amrex::Real tflux = 0.0;
945 amrex::Real zeta = 0.0;
946 amrex::Real psi_m = 0.0;
947 amrex::Real psi_h = 0.0;
948 amrex::Real Olen = 0.0;
949 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
952 ustar = u_star_arr(i,j,k);
961 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
963 tflux *= (1 + 0.61*qvm_arr(i,j,k));
964 tflux += 0.61*tm_arr(i,j,k) * -ustar*q_star_arr(i,j,k);
967 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
969 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
970 umm = std::max(umm,
WSMIN);
978 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
979 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
981 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
983 olen_arr(i,j,k) = Olen;
990 const amrex::Real
tol = 1.0e-5;
1016 const int& max_iters,
1017 const amrex::Array4<amrex::Real>& z0_arr,
1018 const amrex::Array4<const amrex::Real>& umm_arr,
1019 const amrex::Array4<const amrex::Real>& tm_arr,
1020 const amrex::Array4<const amrex::Real>& tvm_arr,
1021 const amrex::Array4<const amrex::Real>& qvm_arr,
1022 const amrex::Array4<amrex::Real>& u_star_arr,
1023 const amrex::Array4<amrex::Real>& w_star_arr,
1024 const amrex::Array4<amrex::Real>& t_star_arr,
1025 const amrex::Array4<amrex::Real>& q_star_arr,
1026 const amrex::Array4<amrex::Real>& t_surf_arr,
1027 const amrex::Array4<amrex::Real>& olen_arr,
1028 const amrex::Array4<amrex::Real>& pblh_arr,
1029 const amrex::Array4<amrex::Real>& ,
1030 const amrex::Array4<amrex::Real>& ,
1031 const amrex::Array4<amrex::Real>& )
const
1034 amrex::Real ustar = 0.0;
1035 amrex::Real wstar = 0.0;
1036 amrex::Real z0 = 0.0;
1037 amrex::Real tflux = 0.0;
1038 amrex::Real zeta = 0.0;
1039 amrex::Real psi_m = 0.0;
1040 amrex::Real psi_h = 0.0;
1041 amrex::Real Olen = 0.0;
1042 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
1045 ustar = u_star_arr(i,j,k);
1047 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1049 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1050 tflux += 0.61*tm_arr(i,j,k) * -ustar*q_star_arr(i,j,k);
1053 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1055 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1056 umm = std::max(umm,
WSMIN);
1064 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1065 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
1067 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1069 olen_arr(i,j,k) = Olen;
1076 const amrex::Real
tol = 1.0e-5;
1099 const int& max_iters,
1100 const amrex::Array4<amrex::Real>& z0_arr,
1101 const amrex::Array4<const amrex::Real>& umm_arr,
1102 const amrex::Array4<const amrex::Real>& tm_arr,
1103 const amrex::Array4<const amrex::Real>& tvm_arr,
1104 const amrex::Array4<const amrex::Real>& qvm_arr,
1105 const amrex::Array4<amrex::Real>& u_star_arr,
1106 const amrex::Array4<amrex::Real>& w_star_arr,
1107 const amrex::Array4<amrex::Real>& t_star_arr,
1108 const amrex::Array4<amrex::Real>& q_star_arr,
1109 const amrex::Array4<amrex::Real>& t_surf_arr,
1110 const amrex::Array4<amrex::Real>& olen_arr,
1111 const amrex::Array4<amrex::Real>& pblh_arr,
1112 const amrex::Array4<amrex::Real>& ,
1113 const amrex::Array4<amrex::Real>& ,
1114 const amrex::Array4<amrex::Real>& )
const
1117 amrex::Real ustar = 0.0;
1118 amrex::Real wstar = 0.0;
1119 amrex::Real z0 = 0.0;
1120 amrex::Real tflux = 0.0;
1121 amrex::Real zeta = 0.0;
1122 amrex::Real psi_m = 0.0;
1123 amrex::Real psi_h = 0.0;
1124 amrex::Real Olen = 0.0;
1125 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
1128 ustar = u_star_arr(i,j,k);
1130 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1132 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1133 tflux += 0.61*tm_arr(i,j,k) * -ustar*q_star_arr(i,j,k);
1136 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1138 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1139 umm = std::max(umm,
WSMIN);
1147 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1148 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
1150 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1152 olen_arr(i,j,k) = Olen;
1159 const amrex::Real
tol = 1.0e-5;
1182 const int& max_iters,
1183 const amrex::Array4<amrex::Real>& z0_arr,
1184 const amrex::Array4<const amrex::Real>& umm_arr,
1185 const amrex::Array4<const amrex::Real>& tm_arr,
1186 const amrex::Array4<const amrex::Real>& tvm_arr,
1187 const amrex::Array4<const amrex::Real>& qvm_arr,
1188 const amrex::Array4<amrex::Real>& u_star_arr,
1189 const amrex::Array4<amrex::Real>& w_star_arr,
1190 const amrex::Array4<amrex::Real>& t_star_arr,
1191 const amrex::Array4<amrex::Real>& q_star_arr,
1192 const amrex::Array4<amrex::Real>& t_surf_arr,
1193 const amrex::Array4<amrex::Real>& olen_arr,
1194 const amrex::Array4<amrex::Real>& pblh_arr,
1195 const amrex::Array4<amrex::Real>& Hwave_arr,
1196 const amrex::Array4<amrex::Real>& Lwave_arr,
1197 const amrex::Array4<amrex::Real>& eta_arr)
const
1200 amrex::Real ustar = 0.0;
1201 amrex::Real wstar = 0.0;
1202 amrex::Real z0 = 0.0;
1203 amrex::Real tflux = 0.0;
1204 amrex::Real zeta = 0.0;
1205 amrex::Real psi_m = 0.0;
1206 amrex::Real psi_h = 0.0;
1207 amrex::Real Olen = 0.0;
1209 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1210 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1211 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1212 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1213 amrex::Real umm = std::max(umm_arr(i,j,k),
WSMIN);
1216 ustar = u_star_arr(i,j,k);
1217 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 )
1219 tflux = -(tm_arr(i,j,k) - t_surf_arr(i,j,k)) * ustar *
mdata.
kappa /
1221 tflux *= (1 + 0.61*qvm_arr(i,j,k));
1222 tflux += 0.61*tm_arr(i,j,k) * -ustar*q_star_arr(i,j,k);
1225 w_star_arr(i,j,k) =
calc_wstar(tflux, pblh_arr(i,j,k), tvm_arr(i,j,k));
1227 umm = std::sqrt(umm_arr(i,j,k)*umm_arr(i,j,k) + wstar*wstar);
1228 umm = std::max(umm,
WSMIN);
1236 }
while ((std::abs(u_star_arr(i,j,k) - ustar) >
tol) && iter <= max_iters);
1237 AMREX_ASSERT_WITH_MESSAGE(iter < max_iters,
"Maximum number of MOST iterations reached.");
1239 t_star_arr(i,j,k) =
mdata.
kappa * (tm_arr(i,j,k) - t_surf_arr(i,j,k)) /
1241 olen_arr(i,j,k) = Olen;
1248 const amrex::Real
tol = 1.0e-5;
1249 const amrex::Real
eps = 1e-15;
1273 const amrex::Real& dz,
1274 const amrex::Real& dz1,
1275 const bool& exp_most,
1276 const amrex::Array4<const amrex::Real>& eta_arr,
1277 const amrex::Array4<const amrex::Real>& cons_arr,
1278 const amrex::Array4<const amrex::Real>& ,
1279 const amrex::Array4<const amrex::Real>& ,
1280 const amrex::Array4<const amrex::Real>& ,
1281 const amrex::Array4<const amrex::Real>& ,
1282 const amrex::Array4<const amrex::Real>& ,
1283 const amrex::Array4<const amrex::Real>& ,
1284 const amrex::Array4<const amrex::Real>& ,
1285 const amrex::Array4<amrex::Real>& dest_arr)
const
1287 amrex::Real
rho, eta;
1290 ic = i < lbound(cons_arr).x ? lbound(cons_arr).x : i;
1291 jc = j < lbound(cons_arr).y ? lbound(cons_arr).y : j;
1292 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
1293 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
1298 amrex::Real deltaz = dz * (
zlo - k);
1301 amrex::Real moflux = 0.0;
1306 dest_arr(i,j,k,icomp+n) = cons_arr(ic,jc,
zlo,
RhoQ1_comp) - rqvgrad * deltaz;
1309 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1310 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1311 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1312 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1314 eta = amrex::max(eta,
eta_eps);
1315 dest_arr(i,j,k,icomp+n) = dest_arr(i,j,
zlo,icomp+n) + moflux*
rho/eta*deltaz;
1329 const amrex::Real& dz,
1330 const amrex::Real& dz1,
1331 const bool& exp_most,
1332 const amrex::Array4<const amrex::Real>& eta_arr,
1333 const amrex::Array4<const amrex::Real>& cons_arr,
1334 const amrex::Array4<const amrex::Real>& velx_arr,
1335 const amrex::Array4<const amrex::Real>& vely_arr,
1336 const amrex::Array4<const amrex::Real>& umm_arr,
1337 const amrex::Array4<const amrex::Real>& tm_arr,
1338 const amrex::Array4<const amrex::Real>& u_star_arr,
1339 const amrex::Array4<const amrex::Real>& t_star_arr,
1340 const amrex::Array4<const amrex::Real>& t_surf_arr,
1341 const amrex::Array4<amrex::Real>& dest_arr)
const
1343 amrex::Real velx, vely,
rho,
theta, eta;
1344 int ix, jx, iy, jy, ic, jc;
1346 ix = i < lbound(velx_arr).x ? lbound(velx_arr).x : i;
1347 jx = j < lbound(velx_arr).y ? lbound(velx_arr).y : j;
1348 ix = ix > ubound(velx_arr).x-1 ? ubound(velx_arr).x-1 : ix;
1349 jx = jx > ubound(velx_arr).y ? ubound(velx_arr).y : jx;
1351 iy = i < lbound(vely_arr).x ? lbound(vely_arr).x : i;
1352 jy = j < lbound(vely_arr).y ? lbound(vely_arr).y : j;
1353 iy = iy > ubound(vely_arr).x ? ubound(vely_arr).x : iy;
1354 jy = jy > ubound(vely_arr).y-1 ? ubound(vely_arr).y-1 : jy;
1356 ic = i < lbound(cons_arr).x ? lbound(cons_arr).x : i;
1357 jc = j < lbound(cons_arr).y ? lbound(cons_arr).y : j;
1358 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
1359 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
1361 velx = 0.5 *( velx_arr(ix,jx,
zlo) + velx_arr(ix+1,jx ,
zlo) );
1362 vely = 0.5 *( vely_arr(iy,jy,
zlo) + vely_arr(iy ,jy+1,
zlo) );
1366 amrex::Real theta_mean = tm_arr(ic,jc,
zlo);
1367 amrex::Real wsp_mean = umm_arr(ic,jc,
zlo);
1368 amrex::Real ustar = u_star_arr(ic,jc,
zlo);
1369 amrex::Real tstar = t_star_arr(ic,jc,
zlo);
1370 amrex::Real theta_surf = t_surf_arr(ic,jc,
zlo);
1372 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1373 amrex::Real num1 = wsp * (theta_mean-theta_surf);
1374 amrex::Real num2 = wsp_mean * (
theta-theta_mean);
1375 amrex::Real deltaz = dz * (
zlo - k);
1377 wsp_mean = std::max(wsp_mean,
WSMIN);
1380 amrex::Real moflux = (std::abs(tstar) >
eps) ?
1381 -
rho*tstar*ustar*(num1+num2)/((theta_mean-theta_surf)*wsp_mean) : 0.0;
1386 dest_arr(i,j,k,icomp+n) = cons_arr(ic,jc,
zlo,
RhoTheta_comp) - rthetagrad * deltaz;
1389 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1390 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1391 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1392 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1394 eta = amrex::max(eta,
eta_eps);
1398 dest_arr(i,j,k,icomp+n) = dest_arr(i,j,
zlo,icomp+n) + moflux*
rho/eta*deltaz;
1411 const amrex::Real& dz,
1412 const amrex::Real& dz1,
1413 const bool& exp_most,
1414 const amrex::Array4<const amrex::Real>& eta_arr,
1415 const amrex::Array4<const amrex::Real>& cons_arr,
1416 const amrex::Array4<const amrex::Real>& velx_arr,
1417 const amrex::Array4<const amrex::Real>& vely_arr,
1418 const amrex::Array4<const amrex::Real>& umm_arr,
1419 const amrex::Array4<const amrex::Real>& um_arr,
1420 const amrex::Array4<const amrex::Real>& u_star_arr,
1421 const amrex::Array4<amrex::Real>& dest_arr)
const
1423 amrex::Real velx, vely,
rho, eta;
1426 int iylo = i <= lbound(vely_arr).x ? lbound(vely_arr).x : i-1;
1427 int iyhi = i > ubound(vely_arr).x ? ubound(vely_arr).x : i;
1429 jy = j < lbound(vely_arr).y ? lbound(vely_arr).y : j;
1430 jy = jy > ubound(vely_arr).y-1 ? ubound(vely_arr).y-1 : jy;
1432 ic = i < lbound(cons_arr).x+1 ? lbound(cons_arr).x+1 : i;
1433 jc = j < lbound(cons_arr).y ? lbound(cons_arr).y : j;
1434 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
1435 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
1437 velx = velx_arr(i,j,
zlo);
1438 vely = 0.25*( vely_arr(iyhi,jy,
zlo)+vely_arr(iyhi,jy+1,
zlo)
1439 + vely_arr(iylo,jy,
zlo)+vely_arr(iylo,jy+1,
zlo) );
1443 amrex::Real umean = um_arr(i,j,
zlo);
1444 amrex::Real wsp_mean = 0.5 * ( umm_arr(ic-1,jc,
zlo) + umm_arr(ic,jc,
zlo) );
1445 amrex::Real ustar = 0.5 * ( u_star_arr(ic-1,jc,
zlo) + u_star_arr(ic,jc,
zlo) );
1451 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1452 amrex::Real num1 = wsp * umean;
1453 amrex::Real num2 = wsp_mean * (velx-umean);
1454 amrex::Real deltaz = dz * (
zlo - k);
1456 wsp_mean = std::max(wsp_mean,
WSMIN);
1459 amrex::Real stressx = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1463 amrex::Real ugrad = (velx_arr(i,j,
zlo+1) - velx) / (0.5*(dz+dz1));
1464 dest_arr(i,j,k,icomp) = velx - ugrad * deltaz;
1467 ie = i < lbound(eta_arr).x+1 ? lbound(eta_arr).x+1 : i;
1468 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1469 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1470 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1473 eta = amrex::max(eta,
eta_eps);
1474 dest_arr(i,j,k,icomp) = dest_arr(i,j,
zlo,icomp) + stressx/eta*deltaz;
1487 const amrex::Real& dz,
1488 const amrex::Real& dz1,
1489 const bool& exp_most,
1490 const amrex::Array4<const amrex::Real>& eta_arr,
1491 const amrex::Array4<const amrex::Real>& cons_arr,
1492 const amrex::Array4<const amrex::Real>& velx_arr,
1493 const amrex::Array4<const amrex::Real>& vely_arr,
1494 const amrex::Array4<const amrex::Real>& umm_arr,
1495 const amrex::Array4<const amrex::Real>& vm_arr,
1496 const amrex::Array4<const amrex::Real>& u_star_arr,
1497 const amrex::Array4<amrex::Real>& dest_arr)
const
1499 amrex::Real velx, vely,
rho, eta;
1502 ix = i < lbound(velx_arr).x ? lbound(velx_arr).x : i;
1503 ix = ix > ubound(velx_arr).x ? ubound(velx_arr).x : ix;
1505 int jxlo = j <= lbound(velx_arr).y ? lbound(velx_arr).y : j-1;
1506 int jxhi = j > ubound(velx_arr).y ? ubound(velx_arr).y : j;
1508 ic = i < lbound(cons_arr).x ? lbound(cons_arr).x : i;
1509 jc = j < lbound(cons_arr).y+1 ? lbound(cons_arr).y+1 : j;
1510 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
1511 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
1513 velx = 0.25*( velx_arr(ix,jxhi,
zlo)+velx_arr(ix+1,jxhi,
zlo)
1514 + velx_arr(ix,jxlo,
zlo)+velx_arr(ix+1,jxlo,
zlo) );
1515 vely = vely_arr(i,j,
zlo);
1519 amrex::Real vmean = vm_arr(i,j,
zlo);
1520 amrex::Real wsp_mean = 0.5 * ( umm_arr(ic,jc-1,
zlo) + umm_arr(ic,jc,
zlo) );
1521 amrex::Real ustar = 0.5 * ( u_star_arr(ic,jc-1,
zlo) + u_star_arr(ic,jc,
zlo) );
1527 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1528 amrex::Real num1 = wsp * vmean;
1529 amrex::Real num2 = wsp_mean * (vely-vmean);
1530 amrex::Real deltaz = dz * (
zlo - k);
1532 wsp_mean = std::max(wsp_mean,
WSMIN);
1535 amrex::Real stressy = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
1539 amrex::Real vgrad = (vely_arr(i,j,
zlo+1) - vely) / (0.5*(dz+dz1));
1540 dest_arr(i,j,k,icomp) = vely - vgrad * deltaz;
1543 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1544 je = j < lbound(eta_arr).y+1 ? lbound(eta_arr).y+1 : j;
1545 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1546 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1549 eta = amrex::max(eta,
eta_eps);
1550 dest_arr(i,j,k,icomp) = dest_arr(i,j,
zlo,icomp) + stressy/eta*deltaz;
1558 const amrex::Real
eps = 1e-15;
1581 const amrex::Real& dz,
1582 const amrex::Real& dz1,
1583 const bool& exp_most,
1584 const amrex::Array4<const amrex::Real>& eta_arr,
1585 const amrex::Array4<const amrex::Real>& cons_arr,
1586 const amrex::Array4<const amrex::Real>& ,
1587 const amrex::Array4<const amrex::Real>& ,
1588 const amrex::Array4<const amrex::Real>& ,
1589 const amrex::Array4<const amrex::Real>& ,
1590 const amrex::Array4<const amrex::Real>& ,
1591 const amrex::Array4<const amrex::Real>& ,
1592 const amrex::Array4<const amrex::Real>& ,
1593 const amrex::Array4<amrex::Real>& dest_arr)
const
1595 amrex::Real
rho, eta;
1598 ic = i < lbound(cons_arr).x ? lbound(cons_arr).x : i;
1599 jc = j < lbound(cons_arr).y ? lbound(cons_arr).y : j;
1600 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
1601 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
1606 amrex::Real deltaz = dz * (
zlo - k);
1609 amrex::Real moflux = 0.0;
1614 dest_arr(i,j,k,icomp+n) = cons_arr(ic,jc,
zlo,
RhoQ1_comp) - rqvgrad * deltaz;
1617 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1618 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1619 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1620 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1622 eta = amrex::max(eta,
eta_eps);
1623 dest_arr(i,j,k,icomp+n) = dest_arr(i,j,
zlo,icomp+n) + moflux*
rho/eta*deltaz;
1637 const amrex::Real& dz,
1638 const amrex::Real& dz1,
1639 const bool& exp_most,
1640 const amrex::Array4<const amrex::Real>& eta_arr,
1641 const amrex::Array4<const amrex::Real>& cons_arr,
1642 const amrex::Array4<const amrex::Real>& ,
1643 const amrex::Array4<const amrex::Real>& ,
1644 const amrex::Array4<const amrex::Real>& umm_arr,
1645 const amrex::Array4<const amrex::Real>& tm_arr,
1646 const amrex::Array4<const amrex::Real>& ,
1647 const amrex::Array4<const amrex::Real>& ,
1648 const amrex::Array4<const amrex::Real>& t_surf_arr,
1649 const amrex::Array4<amrex::Real>& dest_arr)
const
1651 amrex::Real
rho, eta;
1654 ic = i < lbound(cons_arr).x ? lbound(cons_arr).x : i;
1655 jc = j < lbound(cons_arr).y ? lbound(cons_arr).y : j;
1656 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
1657 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
1661 amrex::Real Ch = 0.0012;
1662 amrex::Real wsp_mean = umm_arr(ic,jc,
zlo);
1663 amrex::Real theta_surf = t_surf_arr(ic,jc,
zlo);
1664 amrex::Real theta_mean = tm_arr(ic,jc,
zlo);
1665 amrex::Real deltaz = dz * (
zlo - k);
1668 amrex::Real moflux = -
rho * Ch * wsp_mean * (theta_mean - theta_surf);
1673 dest_arr(i,j,k,icomp+n) = cons_arr(ic,jc,
zlo,
RhoTheta_comp) - rthetagrad * deltaz;
1676 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1677 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1678 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1679 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1681 eta = amrex::max(eta,
eta_eps);
1685 dest_arr(i,j,k,icomp+n) = dest_arr(i,j,
zlo,icomp+n) + moflux*
rho/eta*deltaz;
1698 const amrex::Real& dz,
1699 const amrex::Real& dz1,
1700 const bool& exp_most,
1701 const amrex::Array4<const amrex::Real>& eta_arr,
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>& umm_arr,
1706 const amrex::Array4<const amrex::Real>& ,
1707 const amrex::Array4<const amrex::Real>& ,
1708 const amrex::Array4<amrex::Real>& dest_arr)
const
1710 amrex::Real velx, vely,
rho, eta;
1713 int iylo = i <= lbound(vely_arr).x ? lbound(vely_arr).x : i-1;
1714 int iyhi = i > ubound(vely_arr).x ? ubound(vely_arr).x : i;
1716 jy = j < lbound(vely_arr).y ? lbound(vely_arr).y : j;
1717 jy = jy > ubound(vely_arr).y-1 ? ubound(vely_arr).y-1 : jy;
1719 ic = i < lbound(cons_arr).x+1 ? lbound(cons_arr).x+1 : i;
1720 jc = j < lbound(cons_arr).y ? lbound(cons_arr).y : j;
1721 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
1722 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
1724 velx = velx_arr(i,j,
zlo);
1725 vely = 0.25*( vely_arr(iyhi,jy,
zlo)+vely_arr(iyhi,jy+1,
zlo)
1726 + vely_arr(iylo,jy,
zlo)+vely_arr(iylo,jy+1,
zlo) );
1730 amrex::Real Cd = 0.001;
1731 const amrex::Real c = 7e-5;
1732 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1733 amrex::Real wsp_mean = 0.5 * ( umm_arr(ic-1,jc,
zlo) + umm_arr(ic,jc,
zlo) );
1734 if (wsp_mean <= 5.0) {
1736 }
else if (wsp_mean < 25.0 && wsp_mean > 5.0) {
1737 Cd = 0.001 + c * (wsp_mean - 5.0);
1741 amrex::Real deltaz = dz * (
zlo - k);
1744 amrex::Real stressx = -
rho * Cd * velx * wsp;
1748 amrex::Real ugrad = (velx_arr(i,j,
zlo+1) - velx) / (0.5*(dz+dz1));
1749 dest_arr(i,j,k,icomp) = velx - ugrad * deltaz;
1752 ie = i < lbound(eta_arr).x+1 ? lbound(eta_arr).x+1 : i;
1753 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1754 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1755 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1758 eta = amrex::max(eta,
eta_eps);
1759 dest_arr(i,j,k,icomp) = dest_arr(i,j,
zlo,icomp) + stressx/eta*deltaz;
1772 const amrex::Real& dz,
1773 const amrex::Real& dz1,
1774 const bool& exp_most,
1775 const amrex::Array4<const amrex::Real>& eta_arr,
1776 const amrex::Array4<const amrex::Real>& cons_arr,
1777 const amrex::Array4<const amrex::Real>& velx_arr,
1778 const amrex::Array4<const amrex::Real>& vely_arr,
1779 const amrex::Array4<const amrex::Real>& umm_arr,
1780 const amrex::Array4<const amrex::Real>& ,
1781 const amrex::Array4<const amrex::Real>& ,
1782 const amrex::Array4<amrex::Real>& dest_arr)
const
1784 amrex::Real velx, vely,
rho, eta;
1787 ix = i < lbound(velx_arr).x ? lbound(velx_arr).x : i;
1788 ix = ix > ubound(velx_arr).x ? ubound(velx_arr).x : ix;
1790 int jxlo = j <= lbound(velx_arr).y ? lbound(velx_arr).y : j-1;
1791 int jxhi = j > ubound(velx_arr).y ? ubound(velx_arr).y : j;
1793 ic = i < lbound(cons_arr).x ? lbound(cons_arr).x : i;
1794 jc = j < lbound(cons_arr).y+1 ? lbound(cons_arr).y+1 : j;
1795 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
1796 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
1798 velx = 0.25*( velx_arr(ix,jxhi,
zlo)+velx_arr(ix+1,jxhi,
zlo)
1799 + velx_arr(ix,jxlo,
zlo)+velx_arr(ix+1,jxlo,
zlo) );
1800 vely = vely_arr(i,j,
zlo);
1804 amrex::Real Cd = 0.001;
1805 const amrex::Real c = 7e-5;
1806 amrex::Real wsp = sqrt(velx*velx+vely*vely);
1807 amrex::Real wsp_mean = 0.5 * ( umm_arr(ic,jc-1,
zlo) + umm_arr(ic,jc,
zlo) );
1808 if (wsp_mean <= 5.0) {
1810 }
else if (wsp_mean < 25.0 && wsp_mean > 5.0) {
1811 Cd = 0.001 + c * (wsp_mean - 5.0);
1815 amrex::Real deltaz = dz * (
zlo - k);
1818 amrex::Real stressy = -
rho * Cd * vely * wsp;
1822 amrex::Real vgrad = (vely_arr(i,j,
zlo+1) - vely) / (0.5*(dz+dz1));
1823 dest_arr(i,j,k,icomp) = vely - vgrad * deltaz;
1826 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1827 je = j < lbound(eta_arr).y+1 ? lbound(eta_arr).y+1 : j;
1828 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1829 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1832 eta = amrex::max(eta,
eta_eps);
1833 dest_arr(i,j,k,icomp) = dest_arr(i,j,
zlo,icomp) + stressy/eta*deltaz;
1862 const amrex::Real& dz,
1863 const amrex::Real& dz1,
1864 const bool& exp_most,
1865 const amrex::Array4<const amrex::Real>& eta_arr,
1866 const amrex::Array4<const amrex::Real>& cons_arr,
1867 const amrex::Array4<const amrex::Real>& ,
1868 const amrex::Array4<const amrex::Real>& ,
1869 const amrex::Array4<const amrex::Real>& ,
1870 const amrex::Array4<const amrex::Real>& ,
1871 const amrex::Array4<const amrex::Real>& ,
1872 const amrex::Array4<const amrex::Real>& q_star_arr,
1873 const amrex::Array4<const amrex::Real>& ,
1874 const amrex::Array4<amrex::Real>& dest_arr)
const
1876 amrex::Real
rho, eta;
1879 ic = i < lbound(cons_arr).x ? lbound(cons_arr).x : i;
1880 jc = j < lbound(cons_arr).y ? lbound(cons_arr).y : j;
1881 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
1882 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
1886 amrex::Real qstar = q_star_arr(ic,jc,
zlo);
1887 amrex::Real deltaz = dz * (
zlo - k);
1890 amrex::Real moflux = (std::abs(qstar) >
eps) ?
rho * qstar : 0.0;
1895 dest_arr(i,j,k,icomp+n) = cons_arr(ic,jc,
zlo,
RhoQ1_comp) - rqvgrad * deltaz;
1898 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1899 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1900 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1901 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1903 eta = amrex::max(eta,
eta_eps);
1904 dest_arr(i,j,k,icomp+n) = dest_arr(i,j,
zlo,icomp+n) + moflux*
rho/eta*deltaz;
1918 const amrex::Real& dz,
1919 const amrex::Real& dz1,
1920 const bool& exp_most,
1921 const amrex::Array4<const amrex::Real>& eta_arr,
1922 const amrex::Array4<const amrex::Real>& cons_arr,
1923 const amrex::Array4<const amrex::Real>& ,
1924 const amrex::Array4<const amrex::Real>& ,
1925 const amrex::Array4<const amrex::Real>& ,
1926 const amrex::Array4<const amrex::Real>& ,
1927 const amrex::Array4<const amrex::Real>& ,
1928 const amrex::Array4<const amrex::Real>& t_star_arr,
1929 const amrex::Array4<const amrex::Real>& ,
1930 const amrex::Array4<amrex::Real>& dest_arr)
const
1932 amrex::Real
rho, eta;
1935 ic = i < lbound(cons_arr).x ? lbound(cons_arr).x : i;
1936 jc = j < lbound(cons_arr).y ? lbound(cons_arr).y : j;
1937 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
1938 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
1942 amrex::Real tstar = t_star_arr(ic,jc,
zlo);
1943 amrex::Real deltaz = dz * (
zlo - k);
1946 amrex::Real moflux = (std::abs(tstar) >
eps) ?
rho * tstar : 0.0;
1951 dest_arr(i,j,k,icomp+n) = cons_arr(ic,jc,
zlo,
RhoTheta_comp) - rthetagrad * deltaz;
1954 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
1955 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
1956 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
1957 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
1959 eta = amrex::max(eta,
eta_eps);
1960 dest_arr(i,j,k,icomp+n) = dest_arr(i,j,
zlo,icomp+n) + moflux*
rho/eta*deltaz;
1973 const amrex::Real& dz,
1974 const amrex::Real& dz1,
1975 const bool& exp_most,
1976 const amrex::Array4<const amrex::Real>& eta_arr,
1977 const amrex::Array4<const amrex::Real>& cons_arr,
1978 const amrex::Array4<const amrex::Real>& velx_arr,
1979 const amrex::Array4<const amrex::Real>& vely_arr,
1980 const amrex::Array4<const amrex::Real>& ,
1981 const amrex::Array4<const amrex::Real>& ,
1982 const amrex::Array4<const amrex::Real>& u_star_arr,
1983 const amrex::Array4<amrex::Real>& dest_arr)
const
1985 amrex::Real velx, vely,
rho, eta;
1988 int iylo = i <= lbound(vely_arr).x ? lbound(vely_arr).x : i-1;
1989 int iyhi = i > ubound(vely_arr).x ? ubound(vely_arr).x : i;
1991 jy = j < lbound(vely_arr).y ? lbound(vely_arr).y : j;
1992 jy = jy > ubound(vely_arr).y-1 ? ubound(vely_arr).y-1 : jy;
1994 ic = i < lbound(cons_arr).x+1 ? lbound(cons_arr).x+1 : i;
1995 jc = j < lbound(cons_arr).y ? lbound(cons_arr).y : j;
1996 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
1997 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
1999 velx = velx_arr(i,j,
zlo);
2000 vely = 0.25*( vely_arr(iyhi,jy,
zlo)+vely_arr(iyhi,jy+1,
zlo)
2001 + vely_arr(iylo,jy,
zlo)+vely_arr(iylo,jy+1,
zlo) );
2005 amrex::Real ustar = 0.5 * ( u_star_arr(ic-1,jc,
zlo) + u_star_arr(ic,jc,
zlo) );
2006 amrex::Real wsp = sqrt(velx*velx+vely*vely);
2007 amrex::Real deltaz = dz * (
zlo - k);
2010 amrex::Real stressx = -
rho * ustar * ustar * velx / wsp;
2014 amrex::Real ugrad = (velx_arr(i,j,
zlo+1) - velx) / (0.5*(dz+dz1));
2015 dest_arr(i,j,k,icomp) = velx - ugrad * deltaz;
2018 ie = i < lbound(eta_arr).x+1 ? lbound(eta_arr).x+1 : i;
2019 je = j < lbound(eta_arr).y ? lbound(eta_arr).y : j;
2020 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
2021 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
2024 eta = amrex::max(eta,
eta_eps);
2025 dest_arr(i,j,k,icomp) = dest_arr(i,j,
zlo,icomp) + stressx/eta*deltaz;
2038 const amrex::Real& dz,
2039 const amrex::Real& dz1,
2040 const bool& exp_most,
2041 const amrex::Array4<const amrex::Real>& eta_arr,
2042 const amrex::Array4<const amrex::Real>& cons_arr,
2043 const amrex::Array4<const amrex::Real>& velx_arr,
2044 const amrex::Array4<const amrex::Real>& vely_arr,
2045 const amrex::Array4<const amrex::Real>& ,
2046 const amrex::Array4<const amrex::Real>& ,
2047 const amrex::Array4<const amrex::Real>& u_star_arr,
2048 const amrex::Array4<amrex::Real>& dest_arr)
const
2050 amrex::Real velx, vely,
rho, eta;
2053 ix = i < lbound(velx_arr).x ? lbound(velx_arr).x : i;
2054 ix = ix > ubound(velx_arr).x ? ubound(velx_arr).x : ix;
2056 int jxlo = j <= lbound(velx_arr).y ? lbound(velx_arr).y : j-1;
2057 int jxhi = j > ubound(velx_arr).y ? ubound(velx_arr).y : j;
2059 ic = i < lbound(cons_arr).x ? lbound(cons_arr).x : i;
2060 jc = j < lbound(cons_arr).y+1 ? lbound(cons_arr).y+1 : j;
2061 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
2062 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
2064 velx = 0.25*( velx_arr(ix,jxhi,
zlo)+velx_arr(ix+1,jxhi,
zlo)
2065 + velx_arr(ix,jxlo,
zlo)+velx_arr(ix+1,jxlo,
zlo) );
2066 vely = vely_arr(i,j,
zlo);
2070 amrex::Real ustar = 0.5 * ( u_star_arr(ic,jc-1,
zlo) + u_star_arr(ic,jc,
zlo) );
2071 amrex::Real wsp = sqrt(velx*velx+vely*vely);
2072 amrex::Real deltaz = dz * (
zlo - k);
2075 amrex::Real stressy = -
rho * ustar * ustar * vely / wsp;
2079 amrex::Real vgrad = (vely_arr(i,j,
zlo+1) - vely) / (0.5*(dz+dz1));
2080 dest_arr(i,j,k,icomp) = vely - vgrad * deltaz;
2083 ie = i < lbound(eta_arr).x ? lbound(eta_arr).x : i;
2084 je = j < lbound(eta_arr).y+1 ? lbound(eta_arr).y+1 : j;
2085 ie = ie > ubound(eta_arr).x ? ubound(eta_arr).x : ie;
2086 je = je > ubound(eta_arr).y ? ubound(eta_arr).y : je;
2089 eta = amrex::max(eta,
eta_eps);
2090 dest_arr(i,j,k,icomp) = dest_arr(i,j,
zlo,icomp) + stressy/eta*deltaz;
2098 const amrex::Real
eps = 1e-15;
2119 const amrex::Real& dz,
2120 const amrex::Real& dz1,
2122 const amrex::Array4<const amrex::Real>& ,
2123 const amrex::Array4<const amrex::Real>& cons_arr,
2124 const amrex::Array4<const amrex::Real>& ,
2125 const amrex::Array4<const amrex::Real>& ,
2126 const amrex::Array4<const amrex::Real>& ,
2127 const amrex::Array4<const amrex::Real>& ,
2128 const amrex::Array4<const amrex::Real>& ,
2129 const amrex::Array4<const amrex::Real>& ,
2130 const amrex::Array4<const amrex::Real>& ,
2131 const amrex::Array4<amrex::Real>& dest_arr)
const
2134 ic = i < lbound(cons_arr).x ? lbound(cons_arr).x : i;
2135 jc = j < lbound(cons_arr).y ? lbound(cons_arr).y : j;
2136 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
2137 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
2140 amrex::Real deltaz = dz * (
zlo - k);
2143 dest_arr(i,j,k,icomp+n) = cons_arr(ic,jc,
zlo,
RhoQ1_comp) - rqvgrad * deltaz;
2147 amrex::Real qstar = 0.0;
2148 amrex::Real moflux = (std::abs(qstar) >
eps) ? -
rho * qstar : 0.0;
2161 const amrex::Real& dz,
2162 const amrex::Real& dz1,
2164 const amrex::Array4<const amrex::Real>& ,
2165 const amrex::Array4<const amrex::Real>& cons_arr,
2166 const amrex::Array4<const amrex::Real>& ,
2167 const amrex::Array4<const amrex::Real>& ,
2168 const amrex::Array4<const amrex::Real>& ,
2169 const amrex::Array4<const amrex::Real>& tm_arr,
2170 const amrex::Array4<const amrex::Real>& ,
2171 const amrex::Array4<const amrex::Real>& t_star_arr,
2172 const amrex::Array4<const amrex::Real>& t_surf_arr,
2173 const amrex::Array4<amrex::Real>& dest_arr)
const
2176 ic = i < lbound(cons_arr).x ? lbound(cons_arr).x : i;
2177 jc = j < lbound(cons_arr).y ? lbound(cons_arr).y : j;
2178 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
2179 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
2182 amrex::Real deltaz = dz * (
zlo - k);
2185 dest_arr(i,j,k,icomp+n) = cons_arr(ic,jc,
zlo,
RhoTheta_comp) - rthetagrad * deltaz;
2188 amrex::Real theta_mean = tm_arr(ic,jc,
zlo);
2189 amrex::Real theta_surf = t_surf_arr(ic,jc,
zlo);
2191 amrex::Real tstar = t_star_arr(ic,jc,
zlo);
2192 amrex::Real moflux = (std::abs(tstar) >
eps) ? -
rho * tstar * (theta_mean-theta_surf) : 0.0;
2204 const amrex::Real& dz,
2205 const amrex::Real& dz1,
2207 const amrex::Array4<const amrex::Real>& ,
2208 const amrex::Array4<const amrex::Real>& cons_arr,
2209 const amrex::Array4<const amrex::Real>& velx_arr,
2210 const amrex::Array4<const amrex::Real>& ,
2211 const amrex::Array4<const amrex::Real>& ,
2212 const amrex::Array4<const amrex::Real>& ,
2213 const amrex::Array4<const amrex::Real>& u_star_arr,
2214 const amrex::Array4<amrex::Real>& dest_arr)
const
2217 ic = i < lbound(cons_arr).x+1 ? lbound(cons_arr).x+1 : i;
2218 jc = j < lbound(cons_arr).y ? lbound(cons_arr).y : j;
2219 ic = ic > ubound(cons_arr).x ? ubound(cons_arr).x : ic;
2220 jc = jc > ubound(cons_arr).y ? ubound(cons_arr).y : jc;
2223 amrex::Real deltaz = dz * (
zlo - k);
2224 amrex::Real ugrad = (velx_arr(i,j,
zlo+1) - velx_arr(i,j,
zlo)) / (0.5*(dz+dz1));
2225 dest_arr(i,j,k,icomp) = velx_arr(i,j,
zlo) - ugrad * deltaz;
2230 amrex::Real ustar = 0.5 * ( u_star_arr(ic-1,jc,
zlo) + u_star_arr(ic,jc,
zlo) );
2231 amrex::Real stressx = -
rho * ustar * ustar;
2243 const amrex::Real& dz,
2244 const amrex::Real& dz1,
2246 const amrex::Array4<const amrex::Real>& ,
2247 const amrex::Array4<const amrex::Real>& ,
2248 const amrex::Array4<const amrex::Real>& ,
2249 const amrex::Array4<const amrex::Real>& vely_arr,
2250 const amrex::Array4<const amrex::Real>& ,
2251 const amrex::Array4<const amrex::Real>& ,
2252 const amrex::Array4<const amrex::Real>& ,
2253 const amrex::Array4<amrex::Real>& dest_arr)
const
2256 amrex::Real deltaz = dz * (
zlo - k);
2257 amrex::Real vgrad = (vely_arr(i,j,
zlo+1) - vely_arr(i,j,
zlo)) / (0.5*(dz+dz1));
2258 dest_arr(i,j,k,icomp) = vely_arr(i,j,
zlo) - vgrad * deltaz;
2261 amrex::Real stressy = 0.0;
2268 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
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Donelan_roughness(amrex::Real ustar)
Definition: ERF_MOSTRoughness.H:29
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real COARE3_roughness(amrex::Real zref, amrex::Real umm, amrex::Real ustar)
Definition: ERF_MOSTRoughness.H:9
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real air_viscosity(amrex::Real T_degK)
Definition: ERF_MOSTStress.H: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
@ Theta_v
Definition: ERF_IndexDefines.H:168
@ Q_v
Definition: ERF_IndexDefines.H:171
@ Mom_v
Definition: ERF_IndexDefines.H:167
@ 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:320
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:322
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:319
const amrex::Real tol
Definition: ERF_MOSTStress.H:321
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:330
const amrex::Real eps
Definition: ERF_MOSTStress.H:388
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:341
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:389
most_data mdata
Definition: ERF_MOSTStress.H:385
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:391
adiabatic_wave_coupled(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:331
similarity_funs sfuns
Definition: ERF_MOSTStress.H:386
const amrex::Real tol
Definition: ERF_MOSTStress.H:387
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:390
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:1849
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_v_flux(const int &i, const int &j, const int &k, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &exp_most, const amrex::Array4< const amrex::Real > &eta_arr, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:2034
int zlo
Definition: ERF_MOSTStress.H:2097
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_u_flux(const int &i, const int &j, const int &k, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &exp_most, const amrex::Array4< const amrex::Real > &eta_arr, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:1969
const amrex::Real eta_eps
Definition: ERF_MOSTStress.H:2099
custom_flux(int l_zlo)
Definition: ERF_MOSTStress.H:1850
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_t_flux(const int &i, const int &j, const int &k, const int &n, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &exp_most, const amrex::Array4< const amrex::Real > &eta_arr, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:1913
const amrex::Real eps
Definition: ERF_MOSTStress.H:2098
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_q_flux(const int &i, const int &j, const int &k, const int &n, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &exp_most, const amrex::Array4< const amrex::Real > &eta_arr, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:1857
Definition: ERF_MOSTStress.H:1568
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_u_flux(const int &i, const int &j, const int &k, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &exp_most, const amrex::Array4< const amrex::Real > &eta_arr, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:1694
donelan_flux(int l_zlo)
Definition: ERF_MOSTStress.H:1569
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_t_flux(const int &i, const int &j, const int &k, const int &n, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &exp_most, const amrex::Array4< const amrex::Real > &eta_arr, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:1632
const amrex::Real eta_eps
Definition: ERF_MOSTStress.H:1841
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_v_flux(const int &i, const int &j, const int &k, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &exp_most, const amrex::Array4< const amrex::Real > &eta_arr, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:1768
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_q_flux(const int &i, const int &j, const int &k, const int &n, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &exp_most, const amrex::Array4< const amrex::Real > &eta_arr, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:1576
int zlo
Definition: ERF_MOSTStress.H:1840
Definition: ERF_MOSTStress.H:1260
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_u_flux(const int &i, const int &j, const int &k, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &exp_most, const amrex::Array4< const amrex::Real > &eta_arr, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:1407
moeng_flux(int l_zlo)
Definition: ERF_MOSTStress.H:1261
int zlo
Definition: ERF_MOSTStress.H:1557
const amrex::Real eps
Definition: ERF_MOSTStress.H:1558
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_q_flux(const int &i, const int &j, const int &k, const int &n, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &exp_most, const amrex::Array4< const amrex::Real > &eta_arr, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:1268
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_v_flux(const int &i, const int &j, const int &k, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &exp_most, const amrex::Array4< const amrex::Real > &eta_arr, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:1483
const amrex::Real eta_eps
Definition: ERF_MOSTStress.H:1559
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1560
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_t_flux(const int &i, const int &j, const int &k, const int &n, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &exp_most, const amrex::Array4< const amrex::Real > &eta_arr, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:1324
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:2106
int zlo
Definition: ERF_MOSTStress.H:2267
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_q_flux(const int &i, const int &j, const int &k, const int &n, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &, const amrex::Array4< const amrex::Real > &, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:2114
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_t_flux(const int &i, const int &j, const int &k, const int &n, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &, const amrex::Array4< const amrex::Real > &, 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 amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:2156
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_u_flux(const int &i, const int &j, const int &k, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &cons_arr, const amrex::Array4< const amrex::Real > &velx_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 > &u_star_arr, const amrex::Array4< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:2200
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real compute_v_flux(const int &i, const int &j, const int &k, const int &icomp, const amrex::Real &dz, const amrex::Real &dz1, const bool &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, 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< amrex::Real > &dest_arr) const
Definition: ERF_MOSTStress.H:2239
const amrex::Real eps
Definition: ERF_MOSTStress.H:2268
rotate_flux(int l_zlo)
Definition: ERF_MOSTStress.H:2107
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:478
const amrex::Real tol
Definition: ERF_MOSTStress.H:561
similarity_funs sfuns
Definition: ERF_MOSTStress.H:560
most_data mdata
Definition: ERF_MOSTStress.H:559
surface_flux_charnock(amrex::Real zref, amrex::Real flux, amrex::Real cnk_a, bool cnk_visc)
Definition: ERF_MOSTStress.H:479
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:493
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:562
Definition: ERF_MOSTStress.H:654
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:665
const amrex::Real tol
Definition: ERF_MOSTStress.H:726
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:727
most_data mdata
Definition: ERF_MOSTStress.H:724
similarity_funs sfuns
Definition: ERF_MOSTStress.H:725
surface_flux_donelan(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:655
Definition: ERF_MOSTStress.H:570
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:646
most_data mdata
Definition: ERF_MOSTStress.H:643
surface_flux_mod_charnock(amrex::Real zref, amrex::Real flux, amrex::Real depth)
Definition: ERF_MOSTStress.H:571
const amrex::Real tol
Definition: ERF_MOSTStress.H:645
similarity_funs sfuns
Definition: ERF_MOSTStress.H:644
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:584
Definition: ERF_MOSTStress.H:735
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:817
surface_flux_wave_coupled(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:736
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:746
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:816
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:815
most_data mdata
Definition: ERF_MOSTStress.H:811
similarity_funs sfuns
Definition: ERF_MOSTStress.H:812
const amrex::Real tol
Definition: ERF_MOSTStress.H:813
const amrex::Real eps
Definition: ERF_MOSTStress.H:814
Definition: ERF_MOSTStress.H:399
similarity_funs sfuns
Definition: ERF_MOSTStress.H:468
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:410
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:470
most_data mdata
Definition: ERF_MOSTStress.H:467
surface_flux(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:400
const amrex::Real tol
Definition: ERF_MOSTStress.H:469
Definition: ERF_MOSTStress.H:905
most_data mdata
Definition: ERF_MOSTStress.H:988
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:920
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:991
const amrex::Real tol
Definition: ERF_MOSTStress.H:990
surface_temp_charnock(amrex::Real zref, amrex::Real flux, amrex::Real cnk_a, bool cnk_visc)
Definition: ERF_MOSTStress.H:906
similarity_funs sfuns
Definition: ERF_MOSTStress.H:989
Definition: ERF_MOSTStress.H:1085
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1158
most_data mdata
Definition: ERF_MOSTStress.H:1157
surface_temp_donelan(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:1086
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:1096
const amrex::Real tol
Definition: ERF_MOSTStress.H:1159
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1160
Definition: ERF_MOSTStress.H:999
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1075
surface_temp_mod_charnock(amrex::Real zref, amrex::Real flux, amrex::Real depth)
Definition: ERF_MOSTStress.H:1000
const amrex::Real tol
Definition: ERF_MOSTStress.H:1076
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1077
most_data mdata
Definition: ERF_MOSTStress.H:1074
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:1013
Definition: ERF_MOSTStress.H:1168
const amrex::Real eps
Definition: ERF_MOSTStress.H:1249
const amrex::Real tol
Definition: ERF_MOSTStress.H:1248
most_data mdata
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< 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:1179
const amrex::Real z0_eps
Definition: ERF_MOSTStress.H:1250
similarity_funs sfuns
Definition: ERF_MOSTStress.H:1247
const amrex::Real z0_max
Definition: ERF_MOSTStress.H:1251
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:1252
surface_temp_wave_coupled(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:1169
Definition: ERF_MOSTStress.H:825
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:836
similarity_funs sfuns
Definition: ERF_MOSTStress.H:895
surface_temp(amrex::Real zref, amrex::Real flux)
Definition: ERF_MOSTStress.H:826
const amrex::Real tol
Definition: ERF_MOSTStress.H:896
const amrex::Real WSMIN
Definition: ERF_MOSTStress.H:897
most_data mdata
Definition: ERF_MOSTStress.H:894