Initialize staggered z-levels and grid spacing for all levels.
35 int max_level = zlevels_stag.size()-1;
37 for (
int lev = 0; lev <= max_level; lev++)
39 auto dx = geom[lev].CellSizeArray();
40 const Box& domain = geom[lev].Domain();
41 int nz = domain.length(2);
43 zlevels_stag[lev].resize(nz+1);
45 stretched_dz_h[lev].resize(domain.length(2));
47 if (grid_stretching_ratio == 0 && !(dz0 > 0)) {
49 for (
int k = 0; k < nz+1; k++)
51 zlevels_stag[lev][k] = k *
dx[2];
53 for (
int k = 0; k < nz; k++)
55 stretched_dz_h[lev][k] =
dx[2];
57 }
else if (lev == 0 && grid_stretching_ratio == 0) {
61 #ifdef AMREX_USE_FLOAT
66 const Real depth = geom[lev].ProbHi(2) - zsurf;
70 "Newton iterations to determine the grid stretching factor failed!\n");
72 Print() <<
"Note: erf.initial_dz = " << dz0 <<
" is no thinner than the uniform "
73 <<
"spacing, so the vertical grid is uniform with dz = " << gs.
dz0 << std::endl;
75 Print() <<
"Building a stretched grid with dz0: " << gs.
dz0
76 <<
" and stretching factor: " << gs.
ratio << std::endl;
78 Print() <<
"Stretched grid levels at level : " << lev <<
" is " << zsurf;
79 for (
int k = 0; k < nz+1; k++)
81 zlevels_stag[lev][k] += zsurf;
83 stretched_dz_h[lev][k-1] = zlevels_stag[lev][k] - zlevels_stag[lev][k-1];
84 Print() <<
" " << zlevels_stag[lev][k];
88 }
else if (lev == 0) {
90 zlevels_stag[lev][0] = zsurf;
92 Print() <<
"Stretched grid levels at level : " << lev <<
" is " << zsurf;
93 for (
int k = 1; k < nz+1; k++)
95 stretched_dz_h[lev][k-1] =
dz;
96 zlevels_stag[lev][k] = zlevels_stag[lev][k-1] +
dz;
97 Print() <<
" " << zlevels_stag[lev][k];
98 dz *= grid_stretching_ratio;
100 Print() << std::endl;
101 }
else if (lev > 0) {
102 int rr = ref_ratio[lev-1][2];
104 for (
int k = 0; k < nz; k++)
106 stretched_dz_h[lev][k] = (zlevels_stag[lev][k+1] - zlevels_stag[lev][k]);
115 int n_zlevels =
pp.countval(
"terrain_z_levels");
118 int nz = geom[0].Domain().length(2);
119 if (n_zlevels != nz+1) {
120 Print() <<
"You supplied " << n_zlevels <<
" staggered terrain_z_levels " << std::endl;
121 Print() <<
"but n_cell+1 in the z-direction is " << nz+1 << std::endl;
122 Abort(
"You must specify a z_level for every value of k");
125 if (grid_stretching_ratio > 0) {
126 Print() <<
"Note: Found terrain_z_levels, ignoring grid_stretching_ratio" << std::endl;
127 }
else if (dz0 > 0) {
128 Print() <<
"Note: Found terrain_z_levels, ignoring initial_dz" << std::endl;
131 pp.getarr(
"terrain_z_levels", zlevels_stag[0], 0, nz+1);
138 for (
int lev = 1; lev <= max_level; lev++) {
139 int rr = ref_ratio[lev-1][2];
143 for (
int lev = 0; lev <= max_level; lev++) {
144 int nz_zlevs = zlevels_stag[lev].size();
145 for (
int k = 0; k < nz_zlevs-1; k++)
147 stretched_dz_h[lev][k] = (zlevels_stag[lev][k+1] - zlevels_stag[lev][k]);
152 for (
int lev = 0; lev <= max_level; lev++) {
153 stretched_dz_d[lev].resize(stretched_dz_h[lev].size());
154 Gpu::copy(Gpu::hostToDevice, stretched_dz_h[lev].begin(), stretched_dz_h[lev].end(), stretched_dz_d[lev].begin());
const Real dx
Definition: ERF_InitCustomPert_ABL.H:44
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(m_cloud_chamber_config.active, "Cloud Chamber: initializer reached without a parsed configuration")
AMREX_FORCE_INLINE void expand_and_interpolate_1d(amrex::Vector< amrex::Real > &znew, const amrex::Vector< amrex::Real > &zorig, int refine_fac, bool destag=false)
Definition: ERF_Interpolation_1D.H:89
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ dz
Definition: ERF_AdvanceWDM6.cpp:272
GeometricStretch build_geometric_zlevels(amrex::Vector< amrex::Real > &zlevels, amrex::Real dz0, amrex::Real z_top, amrex::Real tol)
Fill a staggered z-level array with a geometrically stretched grid.
Definition: ERF_GridUtils.H:274
real(c_double), private rr
Definition: ERF_module_mp_morr_two_moment.F90:224
A geometrically stretched vertical grid: dz_k = dz0 * ratio^k.
Definition: ERF_GridUtils.H:172
amrex::Real ratio
layer-to-layer stretch factor
Definition: ERF_GridUtils.H:174
bool converged
true when |residual| <= tol
Definition: ERF_GridUtils.H:177
bool uniform
true when the requested dz0 could not be honored
Definition: ERF_GridUtils.H:176
amrex::Real dz0
thickness of the first layer, as actually used
Definition: ERF_GridUtils.H:173