Skip to content

Commit ee2ff9f

Browse files
nataraj2asalmgren
andauthored
[Issues] Fixing issues (#3725)
* Fixing GitHub issues * Fixing issues * Fixing issues on surface interpolation * Fixing issues * fixing issues * Fixing compile error * Fixing issues * Correcitng compilation errors * Corecting style errors * Fixing gpu copilation errors --------- Co-authored-by: Ann Almgren <asalmgren@lbl.gov>
1 parent 70f3a9c commit ee2ff9f

11 files changed

Lines changed: 231 additions & 205 deletions

CMake/BuildERFExe.cmake

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,6 @@ function(build_erf_lib erf_lib_name)
459459
${SRC_DIR}/SourceTerms/ERF_MakeSources.cpp
460460
${SRC_DIR}/SourceTerms/ERF_NumericalDiffusion.cpp
461461
${SRC_DIR}/SourceTerms/ERF_ForestDrag.cpp
462-
${SRC_DIR}/SourceTerms/ERF_ApplySurfaceTreatment_BulkCoeff.cpp
463462
${SRC_DIR}/TimeIntegration/ERF_ComputeTimestep.cpp
464463
${SRC_DIR}/TimeIntegration/ERF_Advance.cpp
465464
${SRC_DIR}/TimeIntegration/ERF_TimeStep.cpp

Source/Initialization/ERF_InitForEnsemble.cpp

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ ERF::create_random_perturbations(const int lev,
3838
[=] AMREX_GPU_DEVICE (int i, int j, int k, int n,
3939
const amrex::RandomEngine& engine) noexcept
4040
{
41-
pert_arr(i,j,k,n) = amrex::Random(engine);
41+
pert_arr(i,j,k,n) = amrex::Real(2.0) * amrex::Random(engine) - amrex::Real(1.0);
4242
});
4343
}
4444
}
@@ -195,6 +195,10 @@ void ApplyNeumannBCs(const Geometry& geom,
195195
// -------------------------------------------------
196196
const Box& domain = geom.Domain();
197197

198+
const bool periodic_x = geom.isPeriodic(0);
199+
const bool periodic_y = geom.isPeriodic(1);
200+
const bool periodic_z = geom.isPeriodic(2);
201+
198202
for (MFIter mfi(mf_cc, TilingIfNotGPU()); mfi.isValid(); ++mfi)
199203
{
200204
const Box& gbx = mfi.growntilebox(); // includes ghost cells
@@ -212,15 +216,20 @@ void ApplyNeumannBCs(const Geometry& geom,
212216
int jj = j;
213217
int kk = k;
214218

215-
// Clamp to domain interior (FOExtrap)
216-
ii = amrex::max(domain.smallEnd(0),
217-
amrex::min(i, domain.bigEnd(0)));
219+
if (!periodic_x) {
220+
ii = amrex::max(domain.smallEnd(0),
221+
amrex::min(i, domain.bigEnd(0)));
222+
}
218223

219-
jj = amrex::max(domain.smallEnd(1),
220-
amrex::min(j, domain.bigEnd(1)));
224+
if (!periodic_y) {
225+
jj = amrex::max(domain.smallEnd(1),
226+
amrex::min(j, domain.bigEnd(1)));
227+
}
221228

222-
kk = amrex::max(domain.smallEnd(2),
223-
amrex::min(k, domain.bigEnd(2)));
229+
if (!periodic_z) {
230+
kk = amrex::max(domain.smallEnd(2),
231+
amrex::min(k, domain.bigEnd(2)));
232+
}
224233

225234
arr(i,j,k,n) = arr(ii,jj,kk,n);
226235
});
@@ -573,7 +582,8 @@ MakeFinalMultiFabs (const MultiFab& mf_cc_fine,
573582
MultiFab& cons_pert,
574583
MultiFab& xvel_pert,
575584
MultiFab& yvel_pert,
576-
MultiFab& zvel_pert)
585+
MultiFab& zvel_pert,
586+
const int n_qstate_moist)
577587
{
578588

579589
for (MFIter mfi(cons_pert, TilingIfNotGPU()); mfi.isValid(); ++mfi)
@@ -592,9 +602,9 @@ MakeFinalMultiFabs (const MultiFab& mf_cc_fine,
592602
Real tmp_qrain = mf_cc_fine_arr(i,j,k,7);
593603
cons_pert_arr(i,j,k,Rho_comp) = tmp_rho;
594604
cons_pert_arr(i,j,k,RhoTheta_comp) = tmp_rho*tmp_theta;
595-
cons_pert_arr(i,j,k,RhoQ1_comp) = tmp_rho*tmp_qv;
596-
cons_pert_arr(i,j,k,RhoQ2_comp) = tmp_rho*tmp_qc;
597-
cons_pert_arr(i,j,k,RhoQ3_comp) = tmp_rho*tmp_qrain;
605+
if (n_qstate_moist > 0) cons_pert_arr(i,j,k,RhoQ1_comp) = tmp_rho*tmp_qv;
606+
if (n_qstate_moist > 1) cons_pert_arr(i,j,k,RhoQ2_comp) = tmp_rho*tmp_qc;
607+
if (n_qstate_moist > 2) cons_pert_arr(i,j,k,RhoQ3_comp) = tmp_rho*tmp_qrain;
598608
});
599609
}
600610

@@ -732,5 +742,11 @@ ERF::create_background_state_for_ensemble (int lev,
732742
AddPertToBckgnd(mf_cc_fine, mf_cc_pert, solverChoice.ens_pert_amplitude);
733743
ApplyNeumannBCs(geom_fine, mf_cc_fine);
734744

735-
MakeFinalMultiFabs(mf_cc_fine, cons_pert, xvel_pert, yvel_pert, zvel_pert);
745+
bool use_moisture = (solverChoice.moisture_type != MoistureType::None);
746+
int n_qstate_moist = 0;
747+
if (use_moisture) {
748+
n_qstate_moist = micro->Get_Qstate_Moist_Size();
749+
}
750+
751+
MakeFinalMultiFabs(mf_cc_fine, cons_pert, xvel_pert, yvel_pert, zvel_pert, n_qstate_moist);
736752
}

Source/SourceTerms/ERF_ApplySurfaceTreatment_BulkCoeff.cpp

Lines changed: 0 additions & 88 deletions
This file was deleted.

Source/SourceTerms/ERF_MakeMomSources.cpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ void make_mom_sources (double time_d,
380380
{
381381
Real rho_on_u_face = myhalf * ( cell_data(i,j,k,Rho_comp) + cell_data(i-1,j,k,Rho_comp) );
382382
Real v_loc = fourth * (v(i,j+1,k) + v(i,j,k) + v(i-1,j+1,k) + v(i-1,j,k));
383-
Real w_loc = fourth * (w(i,j,k+1) + w(i,j,k) + w(i,j-1,k+1) + w(i,j-1,k));
383+
Real w_loc = fourth * (w(i,j,k+1) + w(i,j,k) + w(i-1,j,k+1) + w(i-1,j,k));
384384
Real latitude = latlon_arr(i,j,k,0);
385385
Real sphi_loc = std::sin(latitude*PI/Real(180.0));
386386
Real cphi_loc = std::cos(latitude*PI/Real(180.0));
@@ -731,14 +731,6 @@ void make_mom_sources (double time_d,
731731
rho_u_forecast_state, rho_v_forecast_state, rho_w_forecast_state,
732732
cons_forecast_state);
733733
}
734-
if(solverChoice.init_type == InitType::HindCast and solverChoice.hindcast_surface_bcs) {
735-
const Array4<const Real>& surface_state_arr = (*surface_state_at_lev).array(mfi);
736-
ApplySurfaceTreatment_BulkCoeff_Mom(tbx, tby,
737-
xmom_src_arr, ymom_src_arr,
738-
rho_u, rho_v,
739-
cell_data, z_nd_arr,
740-
surface_state_arr);
741-
}
742734
}
743735

744736
// *****************************************************************************

Source/SourceTerms/ERF_MakeSources.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -437,12 +437,6 @@ void make_sources (int level,
437437
ApplySpongeZoneBCsForCC(solverChoice.spongeChoice, geom, bx, cell_src, cell_data, r0, th0, qv0, z_cc_arr, n_qstate);
438438
}
439439

440-
if (solverChoice.init_type == InitType::HindCast and solverChoice.hindcast_surface_bcs) {
441-
const Array4<const Real>& surface_state_arr = (*surface_state_at_lev).array(mfi);
442-
ApplySurfaceTreatment_BulkCoeff_CC(bx, cell_src, cell_data, z_cc_arr, surface_state_arr);
443-
}
444-
445-
446440
// *************************************************************************************
447441
// Real(8.) Add perturbation
448442
// *************************************************************************************

Source/SourceTerms/ERF_SrcHeaders.H

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -239,22 +239,4 @@ void ApplyBndryForcing_Forecast (const SolverChoice& solverChoice,
239239
const amrex::Array4<const amrex::Real>& rho_w_initial_state,
240240
const amrex::Array4<const amrex::Real>& cons_initial_state);
241241

242-
void
243-
ApplySurfaceTreatment_BulkCoeff_Mom (const amrex::Box& tbx,
244-
const amrex::Box& tby,
245-
const amrex::Array4<amrex::Real>& rho_u_rhs,
246-
const amrex::Array4<amrex::Real>& rho_v_rhs,
247-
const amrex::Array4<const amrex::Real>& rho_u,
248-
const amrex::Array4<const amrex::Real>& rho_v,
249-
const amrex::Array4<const amrex::Real>& cons_state,
250-
const amrex::Array4<const amrex::Real>& z_phys_nd,
251-
const amrex::Array4<const amrex::Real>& surface_state_arr);
252-
253-
void
254-
ApplySurfaceTreatment_BulkCoeff_CC (const amrex::Box& bx,
255-
const amrex::Array4<amrex::Real>& cell_rhs,
256-
const amrex::Array4<const amrex::Real>& cons_state,
257-
const amrex::Array4<const amrex::Real>& z_phys_cc,
258-
const amrex::Array4<const amrex::Real>& surface_state_arr);
259-
260242
#endif

Source/SourceTerms/Make.package

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ CEXE_sources += ERF_ApplySpongeZoneBCs_ReadFromFile.cpp
88
CEXE_sources += ERF_NumericalDiffusion.cpp
99
CEXE_sources += ERF_ForestDrag.cpp
1010
CEXE_sources += ERF_ApplyBndryForcing_Forecast.cpp
11-
CEXE_sources += ERF_ApplySurfaceTreatment_BulkCoeff.cpp
1211

1312
ifeq ($(USE_NETCDF),TRUE)
1413
CEXE_sources += ERF_AddMoistNudgingTerms.cpp

Source/Utils/ERF_SurfaceDataInterpolation.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,14 +233,15 @@ ERF::SurfaceDataInterpolation(const int lev,
233233
Abort(ss.str());
234234
}
235235

236-
/*MultiFab& mf_surf_interp = surface_state_interp[lev];
236+
MultiFab& mf_surf_interp = surface_state_interp[lev];
237237

238238
// Fill the time-interpolated forecast states
239239
MultiFab::LinComb(surface_state_interp[lev],
240240
alpha1, surface_state_1[lev], 0,
241241
alpha2, surface_state_2[lev], 0,
242242
0, mf_surf_interp.nComp(), mf_surf_interp.nGrow());
243243

244+
/* debug plotfile dump follows — leave commented out
244245
std::string pltname = "plt_interp_surface";
245246
Vector<std::string> varnames_plot_mf = {"ls_mask", "SST"};
246247

Source/Utils/ERF_WeatherDataInterpolation.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,17 @@ ERF::FillForecastStateMultiFabs(const int lev,
157157
erf_mf_zvel.setVal(0.0);
158158
erf_mf_latlon.setVal(0.0);
159159

160+
// a_z_phys_nd must live on the SAME BoxArray/DistributionMap as the forecast state:
161+
// fabPtr(mfi) resolves by local index, so a stale (pre-regrid) z_phys_nd silently
162+
// returns the wrong FAB rather than failing.
163+
if (a_z_phys_nd) {
164+
AMREX_ALWAYS_ASSERT(amrex::BoxArray(a_z_phys_nd->boxArray()).convert(amrex::IndexType::TheCellType())
165+
== erf_mf_cons.boxArray());
166+
167+
AMREX_ALWAYS_ASSERT(a_z_phys_nd->DistributionMap() ==
168+
erf_mf_cons.DistributionMap());
169+
}
170+
160171
// Interpolate the data on to the ERF mesh
161172

162173
for (MFIter mfi(erf_mf_cons); mfi.isValid(); ++mfi) {

0 commit comments

Comments
 (0)