463 const bool l_use_terrain_fitted_coords = (solverChoice.
mesh_type != MeshType::ConstantDz);
465 const Box domain = geom.Domain();
466 const int domain_klo = domain.smallEnd(2);
467 const int domain_khi = domain.bigEnd(2);
469 const GpuArray<Real, AMREX_SPACEDIM>
dxInv = geom.InvCellSizeArray();
474 for ( MFIter mfi(
p); mfi.isValid(); ++mfi)
476 Box tbx = mfi.nodaltilebox(0);
477 Box tby = mfi.nodaltilebox(1);
478 Box tbz = mfi.nodaltilebox(2);
481 if (tbz.smallEnd(2) == domain_klo) {
484 if (tbz.bigEnd(2) == domain_khi+1) {
489 const Array4<const Real>& z_nd_arr = z_phys_nd.const_array(mfi);
490 const Array4<const Real>& z_cc_arr = z_phys_cc.const_array(mfi);
492 const Array4<const Real>& p_arr =
p.const_array(mfi);
494 const Array4< Real>& gpx_arr = gradp[
GpVars::gpx].array(mfi);
495 const Array4< Real>& gpy_arr = gradp[
GpVars::gpy].array(mfi);
496 const Array4< Real>& gpz_arr = gradp[
GpVars::gpz].array(mfi);
498 const Array4<const Real>& mf_ux_arr = mapfac[
MapFacType::u_x]->const_array(mfi);
499 const Array4<const Real>& mf_vy_arr = mapfac[
MapFacType::v_y]->const_array(mfi);
502 [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
504 if (l_use_terrain_fitted_coords) {
505 Real p_lo = p_arr(i-1,j,k);
506 Real p_hi = p_arr(i,j,k);
507 Real dz_int =
myhalf * (z_cc_arr(i,j,k) - z_cc_arr(i-1,j,k));
512 z_cc_arr(i,j,k ), p_arr(i,j,k ),
513 z_cc_arr(i,j,k+1), p_arr(i,j,k+1),
514 z_cc_arr(i,j,k+2), p_arr(i,j,k+2));
516 p_hi -= dz_int * ( ( p_arr(i ,j,k ) - p_arr(i ,j,k-1))
517 / (z_cc_arr(i ,j,k ) - z_cc_arr(i ,j,k-1)) );
521 z_cc_arr(i-1,j,k-2), p_arr(i-1,j,k-2),
522 z_cc_arr(i-1,j,k-1), p_arr(i-1,j,k-1),
523 z_cc_arr(i-1,j,k ), p_arr(i-1,j,k ));
525 p_lo += dz_int * ( ( p_arr(i-1,j,k+1) - p_arr(i-1,j,k ))
526 / (z_cc_arr(i-1,j,k+1) - z_cc_arr(i-1,j,k )) );
528 }
else if (dz_int < 0) {
532 z_cc_arr(i,j,k-2), p_arr(i,j,k-2),
533 z_cc_arr(i,j,k-1), p_arr(i,j,k-1),
534 z_cc_arr(i,j,k ), p_arr(i,j,k ));
536 p_hi -= dz_int * ( ( p_arr(i ,j,k+1) - p_arr(i ,j,k ))
537 / (z_cc_arr(i ,j,k+1) - z_cc_arr(i ,j,k )) );
541 z_cc_arr(i-1,j,k ), p_arr(i-1,j,k ),
542 z_cc_arr(i-1,j,k+1), p_arr(i-1,j,k+1),
543 z_cc_arr(i-1,j,k+2), p_arr(i-1,j,k+2));
545 p_lo += dz_int * ( ( p_arr(i-1,j,k ) - p_arr(i-1,j,k-1))
546 / (z_cc_arr(i-1,j,k ) - z_cc_arr(i-1,j,k-1)) );
549 gpx_arr(i,j,k) =
dxInv[0] * (p_hi - p_lo);
551 gpx_arr(i,j,k) =
dxInv[0] * (p_arr(i,j,k) - p_arr(i-1,j,k));
555 gpx_arr(i,j,k) *= mf_ux_arr(i,j,0);
557 [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
559 if (l_use_terrain_fitted_coords) {
560 Real p_lo = p_arr(i,j-1,k);
561 Real p_hi = p_arr(i,j,k);
562 Real dz_int =
myhalf * (z_cc_arr(i,j,k) - z_cc_arr(i,j-1,k));
567 z_cc_arr(i,j,k ), p_arr(i,j,k ),
568 z_cc_arr(i,j,k+1), p_arr(i,j,k+1),
569 z_cc_arr(i,j,k+2), p_arr(i,j,k+2));
571 p_hi -= dz_int * ( ( p_arr(i,j ,k ) - p_arr(i,j ,k-1))
572 / (z_cc_arr(i,j ,k ) - z_cc_arr(i,j ,k-1)) );
576 z_cc_arr(i,j-1,k-2), p_arr(i,j-1,k-2),
577 z_cc_arr(i,j-1,k-1), p_arr(i,j-1,k-1),
578 z_cc_arr(i,j-1,k ), p_arr(i,j-1,k ));
580 p_lo += dz_int * ( ( p_arr(i,j-1,k+1) - p_arr(i,j-1,k ))
581 / (z_cc_arr(i,j-1,k+1) - z_cc_arr(i,j-1,k )) );
583 }
else if (dz_int < 0) {
587 z_cc_arr(i,j,k-2), p_arr(i,j,k-2),
588 z_cc_arr(i,j,k-1), p_arr(i,j,k-1),
589 z_cc_arr(i,j,k ), p_arr(i,j,k ));
591 p_hi -= dz_int * ( ( p_arr(i,j ,k+1) - p_arr(i,j ,k ))
592 / (z_cc_arr(i,j ,k+1) - z_cc_arr(i,j ,k )) );
596 z_cc_arr(i,j-1,k ), p_arr(i,j-1,k ),
597 z_cc_arr(i,j-1,k+1), p_arr(i,j-1,k+1),
598 z_cc_arr(i,j-1,k+2), p_arr(i,j-1,k+2));
600 p_lo += dz_int * ( ( p_arr(i,j-1,k ) - p_arr(i,j-1,k-1))
601 / (z_cc_arr(i,j-1,k ) - z_cc_arr(i,j-1,k-1)) );
604 gpy_arr(i,j,k) =
dxInv[1] * (p_hi - p_lo);
606 gpy_arr(i,j,k) =
dxInv[1] * (p_arr(i,j,k) - p_arr(i,j-1,k));
610 gpy_arr(i,j,k) *= mf_vy_arr(i,j,0);
612 [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
616 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:11
@ v_y
Definition: ERF_DataStruct.H:25
@ u_x
Definition: ERF_DataStruct.H:24
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:17
ParallelFor(grown_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:370
@ gpz
Definition: ERF_IndexDefines.H:186
@ gpy
Definition: ERF_IndexDefines.H:185
@ gpx
Definition: ERF_IndexDefines.H:184
static MeshType mesh_type
Definition: ERF_DataStruct.H:1134