Skip to content

Commit 4b477de

Browse files
authored
make sponge see actual z -- now is correct for terrain (#2165)
* make sponge see actual z -- now is correct for terrain * oops -- missed some in first commit * remove unused variables
1 parent a8f1d10 commit 4b477de

5 files changed

+31
-36
lines changed

Source/SourceTerms/ERF_ApplySpongeZoneBCs.cpp

+9-14
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ ApplySpongeZoneBCsForCC (
99
const Geometry geom,
1010
const Box& bx,
1111
const Array4<Real>& cell_rhs,
12-
const Array4<const Real>& cell_data)
12+
const Array4<const Real>& cell_data,
13+
const Array4<const Real>& z_phys_cc)
1314
{
1415
// Domain cell size and real bounds
1516
auto dx = geom.CellSizeArray();
@@ -46,8 +47,6 @@ ApplySpongeZoneBCsForCC (
4647
int domhi_x = domain.bigEnd(0) + 1;
4748
int domlo_y = domain.smallEnd(1);
4849
int domhi_y = domain.bigEnd(1) + 1;
49-
int domlo_z = domain.smallEnd(2);
50-
int domhi_z = domain.bigEnd(2) + 1;
5150

5251
if(use_xlo_sponge_damping)AMREX_ALWAYS_ASSERT(xlo_sponge_end > ProbLoArr[0]);
5352
if(use_xhi_sponge_damping)AMREX_ALWAYS_ASSERT(xhi_sponge_start < ProbHiArr[0]);
@@ -60,11 +59,10 @@ ApplySpongeZoneBCsForCC (
6059
{
6160
int ii = amrex::min(amrex::max(i, domlo_x), domhi_x);
6261
int jj = amrex::min(amrex::max(j, domlo_y), domhi_y);
63-
int kk = amrex::min(amrex::max(k, domlo_z), domhi_z);
6462

6563
Real x = ProbLoArr[0] + (ii+0.5) * dx[0];
6664
Real y = ProbLoArr[1] + (jj+0.5) * dx[1];
67-
Real z = ProbLoArr[2] + (kk+0.5) * dx[2];
65+
Real z = z_phys_cc(i,j,k);
6866

6967
// x left sponge
7068
if(use_xlo_sponge_damping){
@@ -125,7 +123,9 @@ ApplySpongeZoneBCsForMom (
125123
const Array4<Real>& rho_w_rhs,
126124
const Array4<const Real>& rho_u,
127125
const Array4<const Real>& rho_v,
128-
const Array4<const Real>& rho_w)
126+
const Array4<const Real>& rho_w,
127+
const Array4<const Real>& z_phys_nd,
128+
const Array4<const Real>& z_phys_cc)
129129
{
130130
// Domain cell size and real bounds
131131
auto dx = geom.CellSizeArray();
@@ -165,8 +165,6 @@ ApplySpongeZoneBCsForMom (
165165
int domhi_x = domain.bigEnd(0) + 1;
166166
int domlo_y = domain.smallEnd(1);
167167
int domhi_y = domain.bigEnd(1) + 1;
168-
int domlo_z = domain.smallEnd(2);
169-
int domhi_z = domain.bigEnd(2) + 1;
170168

171169
if(use_xlo_sponge_damping)AMREX_ALWAYS_ASSERT(xlo_sponge_end > ProbLoArr[0]);
172170
if(use_xhi_sponge_damping)AMREX_ALWAYS_ASSERT(xhi_sponge_start < ProbHiArr[0]);
@@ -179,11 +177,10 @@ ApplySpongeZoneBCsForMom (
179177
{
180178
int ii = amrex::min(amrex::max(i, domlo_x), domhi_x);
181179
int jj = amrex::min(amrex::max(j, domlo_y), domhi_y);
182-
int kk = amrex::min(amrex::max(k, domlo_z), domhi_z);
183180

184181
Real x = ProbLoArr[0] + ii * dx[0];
185182
Real y = ProbLoArr[1] + (jj+0.5) * dx[1];
186-
Real z = ProbLoArr[2] + (kk+0.5) * dx[2];
183+
Real z = z_phys_cc(i,j,k);
187184

188185
// x lo sponge
189186
if(use_xlo_sponge_damping){
@@ -238,11 +235,10 @@ ApplySpongeZoneBCsForMom (
238235
{
239236
int ii = amrex::min(amrex::max(i, domlo_x), domhi_x);
240237
int jj = amrex::min(amrex::max(j, domlo_y), domhi_y);
241-
int kk = amrex::min(amrex::max(k, domlo_z), domhi_z);
242238

243239
Real x = ProbLoArr[0] + (ii+0.5) * dx[0];
244240
Real y = ProbLoArr[1] + jj * dx[1];
245-
Real z = ProbLoArr[2] + (kk+0.5) * dx[2];
241+
Real z = z_phys_cc(i,j,k);
246242

247243
// x lo sponge
248244
if(use_xlo_sponge_damping){
@@ -297,11 +293,10 @@ ApplySpongeZoneBCsForMom (
297293
{
298294
int ii = amrex::min(amrex::max(i, domlo_x), domhi_x);
299295
int jj = amrex::min(amrex::max(j, domlo_y), domhi_y);
300-
int kk = amrex::min(amrex::max(k, domlo_z), domhi_z);
301296

302297
Real x = ProbLoArr[0] + (ii+0.5) * dx[0];
303298
Real y = ProbLoArr[1] + (jj+0.5) * dx[1];
304-
Real z = ProbLoArr[2] + kk * dx[2];
299+
Real z = z_phys_nd(i,j,k);
305300

306301
// x left sponge
307302
if(use_xlo_sponge_damping){

Source/SourceTerms/ERF_ApplySpongeZoneBCs_ReadFromFile.cpp

+3-6
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ ApplySpongeZoneBCsForMom_ReadFromFile (
1111
const Box& tbx,
1212
const Box& tby,
1313
const Array4<const Real>& cell_data,
14+
const Array4<const Real>& z_phys_cc,
1415
const Array4<Real>& rho_u_rhs,
1516
const Array4<Real>& rho_v_rhs,
1617
const Array4<const Real>& rho_u,
@@ -43,8 +44,6 @@ ApplySpongeZoneBCsForMom_ReadFromFile (
4344
int domhi_x = domain.bigEnd(0) + 1;
4445
int domlo_y = domain.smallEnd(1);
4546
int domhi_y = domain.bigEnd(1) + 1;
46-
int domlo_z = domain.smallEnd(2);
47-
int domhi_z = domain.bigEnd(2) + 1;
4847

4948
Real* ubar_sponge = d_sponge_ptrs_at_lev[Sponge::ubar_sponge];
5049
Real* vbar_sponge = d_sponge_ptrs_at_lev[Sponge::vbar_sponge];
@@ -60,11 +59,10 @@ ApplySpongeZoneBCsForMom_ReadFromFile (
6059
{
6160
int ii = amrex::min(amrex::max(i, domlo_x), domhi_x);
6261
int jj = amrex::min(amrex::max(j, domlo_y), domhi_y);
63-
int kk = amrex::min(amrex::max(k, domlo_z), domhi_z);
6462

6563
Real x = ProbLoArr[0] + ii * dx[0];
6664
Real y = ProbLoArr[1] + (jj+0.5) * dx[1];
67-
Real z = ProbLoArr[2] + (kk+0.5) * dx[2];
65+
Real z = z_phys_cc(i,j,k);
6866

6967
// x lo sponge
7068
if(use_xlo_sponge_damping){
@@ -119,11 +117,10 @@ ApplySpongeZoneBCsForMom_ReadFromFile (
119117
{
120118
int ii = amrex::min(amrex::max(i, domlo_x), domhi_x);
121119
int jj = amrex::min(amrex::max(j, domlo_y), domhi_y);
122-
int kk = amrex::min(amrex::max(k, domlo_z), domhi_z);
123120

124121
Real x = ProbLoArr[0] + (ii+0.5) * dx[0];
125122
Real y = ProbLoArr[1] + jj * dx[1];
126-
Real z = ProbLoArr[2] + (kk+0.5) * dx[2];
123+
Real z = z_phys_cc(i,j,k);
127124

128125
// x lo sponge
129126
if(use_xlo_sponge_damping){

Source/SourceTerms/ERF_MakeMomSources.cpp

+7-8
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,7 @@ void make_mom_sources (int level,
9090
// 9. Forest canopy
9191
// 10. Immersed Forcing
9292
// *****************************************************************************
93-
//const bool l_use_ndiff = solverChoice.use_num_diff;
94-
const bool l_use_zphys = (z_phys_nd != nullptr);
93+
//const bool l_use_ndiff = solverChoice.use_num_diff;
9594

9695
if (solverChoice.terrain_type == TerrainType::ImmersedForcing) {
9796
if (solverChoice.do_forest_drag) {
@@ -240,10 +239,8 @@ void make_mom_sources (int level,
240239
const Array4<const Real>& t_blank_arr = (terrain_blank) ? terrain_blank->const_array(mfi) :
241240
Array4<const Real>{};
242241

243-
const Array4<const Real>& z_nd_arr = (l_use_zphys) ? z_phys_nd->const_array(mfi) :
244-
Array4<const Real>{};
245-
const Array4<const Real>& z_cc_arr = (l_use_zphys) ? z_phys_cc->const_array(mfi) :
246-
Array4<const Real>{};
242+
const Array4<const Real>& z_nd_arr = z_phys_nd->const_array(mfi);
243+
const Array4<const Real>& z_cc_arr = z_phys_cc->const_array(mfi);
247244

248245
// *****************************************************************************
249246
// 2. Add CORIOLIS forcing (this assumes east is +x, north is +y)
@@ -493,12 +490,14 @@ void make_mom_sources (int level,
493490
if(solverChoice.spongeChoice.sponge_type == "input_sponge")
494491
{
495492
ApplySpongeZoneBCsForMom_ReadFromFile(solverChoice.spongeChoice, geom, tbx, tby, cell_data,
496-
xmom_src_arr, ymom_src_arr, rho_u, rho_v, d_sponge_ptrs_at_lev);
493+
z_cc_arr, xmom_src_arr, ymom_src_arr,
494+
rho_u, rho_v, d_sponge_ptrs_at_lev);
497495
}
498496
else
499497
{
500498
ApplySpongeZoneBCsForMom(solverChoice.spongeChoice, geom, tbx, tby, tbz,
501-
xmom_src_arr, ymom_src_arr, zmom_src_arr, rho_u, rho_v, rho_w);
499+
xmom_src_arr, ymom_src_arr, zmom_src_arr, rho_u, rho_v, rho_w,
500+
z_nd_arr, z_cc_arr);
502501
}
503502

504503
// *****************************************************************************

Source/SourceTerms/ERF_MakeSources.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ void make_sources (int level,
188188
const Array4<const Real> & cell_prim = S_prim.array(mfi);
189189
const Array4<Real> & cell_src = source.array(mfi);
190190

191-
const Array4<const Real>& z_cc_arr = (z_phys_cc) ? z_phys_cc->const_array(mfi) : Array4<Real>{};
191+
const Array4<const Real>& z_cc_arr = z_phys_cc->const_array(mfi);
192192

193193
const Array4<const Real>& t_blank_arr = (terrain_blank) ? terrain_blank->const_array(mfi) :
194194
Array4<const Real>{};
@@ -211,8 +211,6 @@ void make_sources (int level,
211211
// *************************************************************************************
212212
// 3. Add Rayleigh damping for (rho theta)
213213
// *************************************************************************************
214-
Real zlo = geom.ProbLo(2);
215-
Real dz = geom.CellSize(2);
216214
Real ztop = solverChoice.rayleigh_ztop;
217215
Real zdamp = solverChoice.rayleigh_zdamp;
218216
Real dampcoef = solverChoice.rayleigh_dampcoef;
@@ -223,7 +221,7 @@ void make_sources (int level,
223221
int np = PrimTheta_comp;
224222
ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept
225223
{
226-
Real zcc = (z_cc_arr) ? z_cc_arr(i,j,k) : zlo + (k+0.5)*dz;
224+
Real zcc = z_cc_arr(i,j,k);
227225
Real zfrac = 1 - (ztop - zcc) / zdamp;
228226
if (zfrac > 0) {
229227
Real theta = cell_prim(i,j,k,np);
@@ -362,7 +360,7 @@ void make_sources (int level,
362360
// 7. Add sponging
363361
// *************************************************************************************
364362
if(!(solverChoice.spongeChoice.sponge_type == "input_sponge")){
365-
ApplySpongeZoneBCsForCC(solverChoice.spongeChoice, geom, bx, cell_src, cell_data);
363+
ApplySpongeZoneBCsForCC(solverChoice.spongeChoice, geom, bx, cell_src, cell_data, z_cc_arr);
366364
}
367365

368366
// *************************************************************************************
@@ -417,7 +415,9 @@ void make_sources (int level,
417415
// *************************************************************************************
418416
// 10. Add Immersed source terms
419417
// *************************************************************************************
420-
if (solverChoice.terrain_type == TerrainType::ImmersedForcing) {
418+
if (solverChoice.terrain_type == TerrainType::ImmersedForcing)
419+
{
420+
Real dz = geom.CellSize(2);
421421
const Real drag_coefficient = 10.0/dz;
422422
const Real CdT = drag_coefficient;
423423
const Real U_s = 1.0;

Source/SourceTerms/ERF_SrcHeaders.H

+6-2
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ void ApplySpongeZoneBCsForCC (const SpongeChoice& spongeChoice,
105105
const amrex::Geometry geom,
106106
const amrex::Box& bx,
107107
const amrex::Array4<amrex::Real>& cell_rhs,
108-
const amrex::Array4<const amrex::Real>& cell_data);
108+
const amrex::Array4<const amrex::Real>& cell_data,
109+
const amrex::Array4<const amrex::Real>& z_phys_cc);
109110

110111
void ApplySpongeZoneBCsForMom (const SpongeChoice& spongeChoice,
111112
const amrex::Geometry geom,
@@ -117,13 +118,16 @@ void ApplySpongeZoneBCsForMom (const SpongeChoice& spongeChoice,
117118
const amrex::Array4<amrex::Real>& rho_w_rhs,
118119
const amrex::Array4<const amrex::Real>& rho_u,
119120
const amrex::Array4<const amrex::Real>& rho_v,
120-
const amrex::Array4<const amrex::Real>& rho_w);
121+
const amrex::Array4<const amrex::Real>& rho_w,
122+
const amrex::Array4<const amrex::Real>& z_phys_nd,
123+
const amrex::Array4<const amrex::Real>& z_phys_cc);
121124

122125
void ApplySpongeZoneBCsForMom_ReadFromFile (const SpongeChoice& spongeChoice,
123126
const amrex::Geometry geom,
124127
const amrex::Box& tbx,
125128
const amrex::Box& tby,
126129
const amrex::Array4<const amrex::Real>& cell_data,
130+
const amrex::Array4<const amrex::Real>& z_phys_cc,
127131
const amrex::Array4<amrex::Real>& rho_u_rhs,
128132
const amrex::Array4<amrex::Real>& rho_v_rhs,
129133
const amrex::Array4<const amrex::Real>& rho_u,

0 commit comments

Comments
 (0)