6 BL_PROFILE(
"make_pi_stage()");
9 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
11 for (MFIter mfi(cons_state,TilingIfNotGPU()); mfi.isValid(); ++mfi)
16 const Box& gbx1 = mfi.growntilebox(1);
18 const Array4<const Real>& cons_arr = cons_state.const_array(mfi);
19 const Array4< Real>& pi_stage_arr = pi_stage.array(mfi);
35 const double time_for_fp,
int ng_cons,
int ng_vel,
36 bool fast_only,
bool vel_and_mom_synced)
38 BL_PROFILE(
"apply_bcs()");
51 if (!vel_and_mom_synced) {
68 ng_cons_to_use = std::max(ng_cons, ng_vel+1);
76 FillIntermediatePatch(level, time_for_fp,
80 ng_cons_to_use, 0, cons_only, scomp_cons, ncomp_cons);
90 if (vel_and_mom_synced) {
100 ng_cons_to_use = std::max(ng_cons, ng_vel+1);
110 ng_cons_to_use = ng_cons;
118 FillIntermediatePatch(level, time_for_fp,
122 ng_cons_to_use, ng_vel, cons_only, scomp_cons, ncomp_cons);
126 const double old_stage_time,
127 const double new_stage_time,
128 const double slow_dt)
137 if (verbose) Print() <<
"Re-making old geometry at old time : " << old_step_time << std::endl;
143 Box terrain_bx(surroundingNodes(fine_geom.Domain())); terrain_bx.grow(z_phys_nd[lev]->nGrow());
144 FArrayBox terrain_fab_old(makeSlab(terrain_bx,2,0),1);
145 FArrayBox terrain_fab_src(makeSlab(terrain_bx,2,0),1);
146 FArrayBox terrain_fab_new(makeSlab(terrain_bx,2,0),1);
148 prob->init_terrain_surface(fine_geom,terrain_fab_old,old_step_time);
149 prob->init_terrain_surface(fine_geom,terrain_fab_src,old_stage_time);
150 prob->init_terrain_surface(fine_geom,terrain_fab_new,new_stage_time);
153 for (MFIter mfi(*z_phys_nd[lev],
false); mfi.isValid(); ++mfi)
155 Box isect = terrain_fab_old.box() & (*z_phys_nd[lev])[mfi].box();
156 ( *z_phys_nd[lev])[mfi].
template copy<RunOn::Device>(terrain_fab_old,isect,0,isect,0,1);
157 (*z_phys_nd_src[lev])[mfi].
template copy<RunOn::Device>(terrain_fab_src,isect,0,isect,0,1);
158 (*z_phys_nd_new[lev])[mfi].
template copy<RunOn::Device>(terrain_fab_new,isect,0,isect,0,1);
162 make_J (fine_geom, *z_phys_nd[lev], *detJ_cc[lev]);
163 make_areas (fine_geom, *z_phys_nd[lev], *ax[lev], *ay[lev], *az[lev]);
165 if (verbose) Print() <<
"Making src geometry at old_stage_time: "
166 << std::setprecision(timeprecision) << old_stage_time << std::endl;
168 make_J (fine_geom, *z_phys_nd_src[lev], *detJ_cc_src[lev]);
169 make_areas (fine_geom, *z_phys_nd_src[lev], *ax_src[lev], *ay_src[lev], *az_src[lev]);
170 make_zcc (fine_geom, *z_phys_nd_src[lev], *z_phys_cc_src[lev]);
172 if (verbose) Print() <<
"Making new geometry at new_stage_time: "
173 << std::setprecision(timeprecision) << new_stage_time << std::endl;
175 make_J (fine_geom, *z_phys_nd_new[lev], *detJ_cc_new[lev]);
177 Real inv_dt = one_d/
static_cast<Real>(slow_dt);
180 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
182 for (MFIter mfi(*z_t_rk[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi)
184 Box gbx = mfi.growntilebox(IntVect(1,1,0));
186 const Array4<Real >& z_t_arr = z_t_rk[lev]->array(mfi);
187 const Array4<Real const>& z_nd_new_arr = z_phys_nd_new[lev]->const_array(mfi);
188 const Array4<Real const>& z_nd_old_arr = z_phys_nd[lev]->const_array(mfi);
194 z_t_arr(i,j,k) =
fourth * inv_dt * (z_nd_new_arr(i+1,j+1,k) - z_nd_old_arr(i+1,j+1,k)
195 +z_nd_new_arr(i ,j+1,k) - z_nd_old_arr( i,j+1,k)
196 +z_nd_new_arr(i+1,j ,k) - z_nd_old_arr(i+1,j ,k)
197 +z_nd_new_arr(i ,j ,k) - z_nd_old_arr(i ,j ,k));
204 Vector<MultiFab>& S_data, std::unique_ptr<MultiFab>& z_t_pert)
207 Box terrain_bx(surroundingNodes(fine_geom.Domain())); terrain_bx.grow(z_phys_nd[lev]->nGrow());
209 if (verbose) Print() <<
"Making geometry at start of substep time: "
210 << std::setprecision(timeprecision) << old_substep_time << std::endl;
211 FArrayBox terrain_fab_old(makeSlab(terrain_bx,2,0),1);
212 prob->init_terrain_surface(fine_geom,terrain_fab_old,old_substep_time);
215 if (verbose) Print() <<
"Making geometry for end of substep time :"
216 << std::setprecision(timeprecision) << new_substep_time << std::endl;
217 FArrayBox terrain_fab_new(makeSlab(terrain_bx,2,0),1);
218 prob->init_terrain_surface(fine_geom,terrain_fab_new,new_substep_time);
221 for (MFIter mfi(*z_phys_nd[lev],
false); mfi.isValid(); ++mfi)
223 Box isect = terrain_fab_old.box() & (*z_phys_nd[lev])[mfi].box();
224 ( *z_phys_nd[lev])[mfi].
template copy<RunOn::Device>(terrain_fab_old,isect,0,isect,0,1);
225 (*z_phys_nd_new[lev])[mfi].
template copy<RunOn::Device>(terrain_fab_new,isect,0,isect,0,1);
229 make_J (fine_geom,*z_phys_nd[lev], *detJ_cc[lev]);
232 make_J (fine_geom,*z_phys_nd_new[lev], *detJ_cc_new[lev]);
234 Real inv_dt = one_d/
static_cast<Real>(dtau);
238 for (MFIter mfi(*z_t_rk[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi)
240 Box gbx = mfi.growntilebox(IntVect(1,1,0));
242 const Array4<Real >& z_t_arr = z_t_rk[lev]->array(mfi);
243 const Array4<Real >& zp_t_arr = z_t_pert->array(mfi);
245 const Array4<Real const>& z_nd_new_arr = z_phys_nd_new[lev]->const_array(mfi);
246 const Array4<Real const>& z_nd_old_arr = z_phys_nd[lev]->const_array(mfi);
252 zp_t_arr(i,j,k) =
fourth * inv_dt * (z_nd_new_arr(i+1,j+1,k) - z_nd_old_arr(i+1,j+1,k)
253 +z_nd_new_arr(i ,j+1,k) - z_nd_old_arr( i,j+1,k)
254 +z_nd_new_arr(i+1,j ,k) - z_nd_old_arr(i+1,j ,k)
255 +z_nd_new_arr(i ,j ,k) - z_nd_old_arr(i ,j ,k));
257 zp_t_arr(i,j,k) -= z_t_arr(i,j,k);
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getExnergivenRTh(const amrex::Real rhotheta, const amrex::Real rdOcp, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:156
#define Rho_comp
Definition: ERF_IndexDefines.H:53
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:54
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:66
const Real rdOcp
Definition: ERF_InitCustomPert_ABL.H:72
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
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);})
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:37
constexpr amrex::Real fourth
Definition: ERF_NumericalConstants.H:42
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:36
amrex::Real Real
Definition: ERF_ShocInterface.H:19
auto make_pi_stage
Definition: ERF_TI_utils.H:4
auto apply_bcs
Definition: ERF_TI_utils.H:34
auto update_terrain_substep
Definition: ERF_TI_utils.H:203
auto update_terrain_stage
Definition: ERF_TI_utils.H:125
void make_areas(const Geometry &geom, MultiFab &z_phys_nd, MultiFab &ax, MultiFab &ay, MultiFab &az)
Definition: ERF_TerrainMetrics.cpp:1170
void make_J(const Geometry &geom, MultiFab &z_phys_nd, MultiFab &detJ_cc)
Definition: ERF_TerrainMetrics.cpp:1132
void make_zcc(const Geometry &geom, MultiFab &z_phys_nd, MultiFab &z_phys_cc)
Definition: ERF_TerrainMetrics.cpp:1237
void make_terrain_fitted_coords(int lev, const Geometry &geom, MultiFab &z_phys_nd, Vector< Real > const &z_levels_h, GpuArray< ERF_BC, AMREX_SPACEDIM *2 > &phys_bc_type, FineTerrain fine_terrain, MultiFab const *z_phys_interp)
Definition: ERF_TerrainMetrics.cpp:324
@ ymom
Definition: ERF_IndexDefines.H:274
@ cons
Definition: ERF_IndexDefines.H:272
@ zmom
Definition: ERF_IndexDefines.H:275
@ xmom
Definition: ERF_IndexDefines.H:273
@ None
Definition: ERF_LSM_Types.H:6