17 ParallelDescriptor::ReduceRealMin(&
dt_tmp[0],
dt_tmp.size());
35 "REMORA::ComputeDt: computed a non-positive, "
36 "non-finite, or unusably large level-0 dt");
39 const Real
eps = Real(1.e-3)*
dt_0;
94#pragma omp parallel if (Gpu::notInLaunchRegion())
100 const Box&
bx =
mfi.tilebox();
119 Real
inv_adv = amrex::max(amrex::Math::abs(u(
i,
j,
k,0)) *
pm(
i,
j,0),
120 amrex::Math::abs(u(
i,
j,
k,1)) *
pn(
i,
j,0));
130 const Real
c = std::sqrt(
grav * amrex::Math::abs(
h(
i,
j,0,0)));
143 ParallelDescriptor::ReduceRealMax(
inv, 2);
155 amrex::Print() <<
"Using cfl = " <<
cfl << std::endl;
157 amrex::Print() <<
" advective limit at level " <<
level <<
": " <<
estdt_adv << std::endl;
159 amrex::Print() <<
" advective limit at level " <<
level <<
": none (velocity is zero)" << std::endl;
162 amrex::Print() <<
" gravity wave limit at level " <<
level <<
": " <<
estdt_bt
163 <<
" (ndtfast = " <<
ndtfast <<
")" << std::endl;
165 amrex::Print() <<
" gravity wave limit at level " <<
level <<
": none (no wet cell has a depth)" << std::endl;
169 amrex::Print() <<
"Slow dt at level " <<
level <<
" would be: " <<
estdt_lowM << std::endl;
171 amrex::Print() <<
"Slow dt at level " <<
level <<
" would be undefined " << std::endl;
173 amrex::Print() <<
"Fixed dt at level " <<
level <<
" is: " <<
fixed_dt << std::endl;
175 amrex::Print() <<
"Slow dt at level " <<
level <<
": " <<
estdt_lowM << std::endl;
188 amrex::Abort(
"REMORA::estTimeStep: cannot estimate a timestep at level " +
189 std::to_string(
level) +
". No wet cell (mskr > 0.5) has a nonzero "
190 "depth, so neither the advective nor the gravity wave limit is "
191 "defined. Check the bathymetry and the land mask, or set "
constexpr amrex::Real bogus_large_value
constexpr amrex::Real zero
mf_h setVal(geomdata.ProbHi(2))
static amrex::Real fixed_dt
User specified fixed baroclinic time step.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_h
multilevel data container for current step's z velocities (largely unused; W stored separately)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_pm
horizontal scaling factor: 1 / dx (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_mskr
land/sea mask at cell centers (2D)
amrex::Real stop_time
Whether max_step was set in the inputs; the default above is not a distinguishable sentinel.
amrex::Vector< amrex::MultiFab * > zvel_new
multilevel data container for current step's z velocities (largely unused; W stored separately)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Hz
Width of cells in the vertical (z-) direction (3D, Hz in ROMS)
amrex::Vector< amrex::MultiFab * > yvel_new
multilevel data container for current step's y velocities (v in ROMS)
amrex::Vector< amrex::MultiFab * > xvel_new
multilevel data container for current step's x velocities (u in ROMS)
amrex::Vector< int > nsubsteps
How many substeps on each level?
void ComputeDt()
a wrapper for estTimeStep()
static amrex::Real change_max
Fraction maximum change in subsequent time steps.
amrex::Vector< amrex::Real > t_new
new time at each level
static int ndtfast
User specified, number of barotropic steps per baroclinic step.
amrex::Real estTimeStep(int lev) const
compute dt from CFL considerations
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_pn
horizontal scaling factor: 1 / dy (2D)
static amrex::Real cfl
CFL condition.
static int verbose
Verbosity level of output.
amrex::Vector< amrex::Real > dt
time step at each level