470 const bool l_use_terrain_fitted_coords = (solverChoice.
mesh_type != MeshType::ConstantDz);
472 const Box domain = geom.Domain();
473 const int domain_klo = domain.smallEnd(2);
474 const int domain_khi = domain.bigEnd(2);
476 const GpuArray<Real, AMREX_SPACEDIM>
dxInv = geom.InvCellSizeArray();
481 for ( MFIter mfi(
p); mfi.isValid(); ++mfi)
483 Box tbx = mfi.nodaltilebox(0);
484 Box tby = mfi.nodaltilebox(1);
485 Box tbz = mfi.nodaltilebox(2);
488 if (tbz.smallEnd(2) == domain_klo) {
491 if (tbz.bigEnd(2) == domain_khi+1) {
496 const Array4<const Real>& z_nd_arr = z_phys_nd.const_array(mfi);
497 const Array4<const Real>& z_cc_arr = z_phys_cc.const_array(mfi);
499 const Array4<const Real>& p_arr =
p.const_array(mfi);
501 const Array4< Real>& gpx_arr = gradp[
GpVars::gpx].array(mfi);
502 const Array4< Real>& gpy_arr = gradp[
GpVars::gpy].array(mfi);
503 const Array4< Real>& gpz_arr = gradp[
GpVars::gpz].array(mfi);
505 const Array4<const Real>& mf_ux_arr = mapfac[
MapFacType::u_x]->const_array(mfi);
506 const Array4<const Real>& mf_vy_arr = mapfac[
MapFacType::v_y]->const_array(mfi);
509 [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
511 if (l_use_terrain_fitted_coords) {
512 Real p_lo = p_arr(i-1,j,k);
513 Real p_hi = p_arr(i,j,k);
514 Real dz_int =
myhalf * (z_cc_arr(i,j,k) - z_cc_arr(i-1,j,k));
519 z_cc_arr(i,j,k ), p_arr(i,j,k ),
520 z_cc_arr(i,j,k+1), p_arr(i,j,k+1),
521 z_cc_arr(i,j,k+2), p_arr(i,j,k+2));
523 p_hi -= dz_int * ( ( p_arr(i ,j,k ) - p_arr(i ,j,k-1))
524 / (z_cc_arr(i ,j,k ) - z_cc_arr(i ,j,k-1)) );
528 z_cc_arr(i-1,j,k-2), p_arr(i-1,j,k-2),
529 z_cc_arr(i-1,j,k-1), p_arr(i-1,j,k-1),
530 z_cc_arr(i-1,j,k ), p_arr(i-1,j,k ));
532 p_lo += dz_int * ( ( p_arr(i-1,j,k+1) - p_arr(i-1,j,k ))
533 / (z_cc_arr(i-1,j,k+1) - z_cc_arr(i-1,j,k )) );
535 }
else if (dz_int < 0) {
539 z_cc_arr(i,j,k-2), p_arr(i,j,k-2),
540 z_cc_arr(i,j,k-1), p_arr(i,j,k-1),
541 z_cc_arr(i,j,k ), p_arr(i,j,k ));
543 p_hi -= dz_int * ( ( p_arr(i ,j,k+1) - p_arr(i ,j,k ))
544 / (z_cc_arr(i ,j,k+1) - z_cc_arr(i ,j,k )) );
548 z_cc_arr(i-1,j,k ), p_arr(i-1,j,k ),
549 z_cc_arr(i-1,j,k+1), p_arr(i-1,j,k+1),
550 z_cc_arr(i-1,j,k+2), p_arr(i-1,j,k+2));
552 p_lo += dz_int * ( ( p_arr(i-1,j,k ) - p_arr(i-1,j,k-1))
553 / (z_cc_arr(i-1,j,k ) - z_cc_arr(i-1,j,k-1)) );
556 gpx_arr(i,j,k) =
dxInv[0] * (p_hi - p_lo);
558 gpx_arr(i,j,k) =
dxInv[0] * (p_arr(i,j,k) - p_arr(i-1,j,k));
562 gpx_arr(i,j,k) *= mf_ux_arr(i,j,0);
564 [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
566 if (l_use_terrain_fitted_coords) {
567 Real p_lo = p_arr(i,j-1,k);
568 Real p_hi = p_arr(i,j,k);
569 Real dz_int =
myhalf * (z_cc_arr(i,j,k) - z_cc_arr(i,j-1,k));
574 z_cc_arr(i,j,k ), p_arr(i,j,k ),
575 z_cc_arr(i,j,k+1), p_arr(i,j,k+1),
576 z_cc_arr(i,j,k+2), p_arr(i,j,k+2));
578 p_hi -= dz_int * ( ( p_arr(i,j ,k ) - p_arr(i,j ,k-1))
579 / (z_cc_arr(i,j ,k ) - z_cc_arr(i,j ,k-1)) );
583 z_cc_arr(i,j-1,k-2), p_arr(i,j-1,k-2),
584 z_cc_arr(i,j-1,k-1), p_arr(i,j-1,k-1),
585 z_cc_arr(i,j-1,k ), p_arr(i,j-1,k ));
587 p_lo += dz_int * ( ( p_arr(i,j-1,k+1) - p_arr(i,j-1,k ))
588 / (z_cc_arr(i,j-1,k+1) - z_cc_arr(i,j-1,k )) );
590 }
else if (dz_int < 0) {
594 z_cc_arr(i,j,k-2), p_arr(i,j,k-2),
595 z_cc_arr(i,j,k-1), p_arr(i,j,k-1),
596 z_cc_arr(i,j,k ), p_arr(i,j,k ));
598 p_hi -= dz_int * ( ( p_arr(i,j ,k+1) - p_arr(i,j ,k ))
599 / (z_cc_arr(i,j ,k+1) - z_cc_arr(i,j ,k )) );
603 z_cc_arr(i,j-1,k ), p_arr(i,j-1,k ),
604 z_cc_arr(i,j-1,k+1), p_arr(i,j-1,k+1),
605 z_cc_arr(i,j-1,k+2), p_arr(i,j-1,k+2));
607 p_lo += dz_int * ( ( p_arr(i,j-1,k ) - p_arr(i,j-1,k-1))
608 / (z_cc_arr(i,j-1,k ) - z_cc_arr(i,j-1,k-1)) );
611 gpy_arr(i,j,k) =
dxInv[1] * (p_hi - p_lo);
613 gpy_arr(i,j,k) =
dxInv[1] * (p_arr(i,j,k) - p_arr(i,j-1,k));
617 gpy_arr(i,j,k) *= mf_vy_arr(i,j,0);
619 [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
623 gpz_arr(i,j,k) =
dxInv[2] * ( p_arr(i,j,k)-p_arr(i,j,k-1) ) / met_h_zeta;
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
@ v_y
Definition: ERF_DataStruct.H:28
@ u_x
Definition: ERF_DataStruct.H:27
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:17
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtKface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:184
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real quad_interp_1d(amrex::Real z, amrex::Real z0, amrex::Real p0, amrex::Real z1, amrex::Real p1, amrex::Real z2, amrex::Real p2)
Definition: ERF_Utils.H:510
@ gpz
Definition: ERF_IndexDefines.H:188
@ gpy
Definition: ERF_IndexDefines.H:187
@ gpx
Definition: ERF_IndexDefines.H:186
static MeshType mesh_type
Vertical mesh representation.
Definition: ERF_DataStruct.H:1377