266 BL_PROFILE(
"ERF::WriteBndryPlanes::write_planes");
276 bool writes_temperature =
false;
277 bool writes_qv =
false;
279 if (
name ==
"temperature") { writes_temperature =
true; }
280 if (
name ==
"qv") { writes_qv =
true; }
282 if (writes_temperature && !writes_qv) {
283 Abort(
"erf.bndry_output_var_names writes temperature but not qv in a moist run: the"
284 " temperature includes qv, and the reader needs the qv planes to convert it back"
285 " to theta. Add qv to erf.bndry_output_var_names, or write theta instead of"
290 const std::string chkname =
291 m_filename + Concatenate(
"/bndry_output", t_step);
295 const std::string level_prefix =
"Level_";
296 PreBuildDirectorHierarchy(chkname, level_prefix, 1,
true);
301 DistributionMapping dm{ba};
304 Box target_box_shifted(IntVect(0,0,0),new_hi);
305 BoxArray ba_shifted(target_box_shifted);
310 std::string filename = MultiFabFileFullPrefix(
bndry_lev, chkname, level_prefix, var_name);
313 if (var_name ==
"velocity") {
314 ncomp = AMREX_SPACEDIM;
324 if (var_name ==
"density")
328 }
else if (var_name ==
"temperature") {
330 for (MFIter mfi(Temp, TilingIfNotGPU()); mfi.isValid(); ++mfi)
332 const Box& bx = mfi.growntilebox(
m_out_rad);
333 Real time =
static_cast<Real>(time_d);
342 bndry.copyFrom(Temp, nghost, 0, 0, ncomp,
m_geom[
bndry_lev].periodicity());
343 }
else if (var_name ==
"theta") {
345 for (MFIter mfi(Temp, TilingIfNotGPU()); mfi.isValid(); ++mfi)
347 const Box& bx = mfi.growntilebox(
m_out_rad);
350 bndry.copyFrom(Temp, nghost, 0, 0, ncomp,
m_geom[
bndry_lev].periodicity());
351 }
else if (var_name ==
"scalar") {
353 for (MFIter mfi(Temp, TilingIfNotGPU()); mfi.isValid(); ++mfi)
355 const Box& bx = mfi.growntilebox(
m_out_rad);
358 bndry.copyFrom(Temp, nghost, 0, 0, ncomp,
m_geom[
bndry_lev].periodicity());
359 }
else if (var_name ==
"ke") {
361 for (MFIter mfi(Temp, TilingIfNotGPU()); mfi.isValid(); ++mfi)
363 const Box& bx = mfi.growntilebox(
m_out_rad);
366 bndry.copyFrom(Temp, nghost, 0, 0, ncomp,
m_geom[
bndry_lev].periodicity());
367 }
else if (var_name ==
"qv") {
370 for (MFIter mfi(Temp, TilingIfNotGPU()); mfi.isValid(); ++mfi)
372 const Box& bx = mfi.growntilebox(
m_out_rad);
378 bndry.copyFrom(Temp, nghost, 0, 0, ncomp,
m_geom[
bndry_lev].periodicity());
379 }
else if (var_name ==
"qc") {
382 for (MFIter mfi(Temp, TilingIfNotGPU()); mfi.isValid(); ++mfi)
384 const Box& bx = mfi.growntilebox(
m_out_rad);
390 bndry.copyFrom(Temp, nghost, 0, 0, ncomp,
m_geom[
bndry_lev].periodicity());
391 }
else if (var_name ==
"velocity") {
392 MultiFab Vel(
S.boxArray(),
S.DistributionMap(), 3,
m_out_rad);
394 bndry.copyFrom(Vel, nghost, 0, 0, ncomp,
m_geom[
bndry_lev].periodicity());
397 Error(
"Don't know how to output this variable");
400 for (OrientationIter oit; oit !=
nullptr; ++oit) {
402 if (ori.coordDir() < 2) {
403 std::string facename = Concatenate(filename +
'_', ori, 1);
404 br_shift(oit, bndry, bndry_shifted);
405 bndry_shifted[ori].write(facename);
412 if (ParallelDescriptor::IOProcessor()) {
417 std::ofstream out(tmp_file, std::ios::out | std::ios::trunc);
423 Abort(
"WriteBndryPlanes: cannot write " + tmp_file);
426 std::filesystem::rename(tmp_file,
m_time_file, ec);
428 Abort(
"WriteBndryPlanes: cannot replace " +
m_time_file +
" with " + tmp_file +
": " + ec.message());
433 std::ofstream oftime(
m_time_file, std::ios::out | std::ios::app);
434 oftime << std::setprecision(17) << t_step <<
' ' << time_d <<
'\n';
#define RhoScalar_comp
Definition: ERF_IndexDefines.H:57
#define Rho_comp
Definition: ERF_IndexDefines.H:53
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:54
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:67
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:66
#define RhoKE_comp
Definition: ERF_IndexDefines.H:55
std::string name
Definition: ERF_Plotfile2DCatalog.cpp:116
void br_shift(OrientationIter oit, const BndryRegister &b1, BndryRegister &b2)
Definition: ERF_WriteBndryPlanes.cpp:29
const int m_extent_rad
Definition: ERF_WriteBndryPlanes.H:79
constexpr int S
Definition: ERF_TwoStreamColumn.H:604
@ xvel
Definition: ERF_IndexDefines.H:255
@ cons
Definition: ERF_IndexDefines.H:254
@ zvel
Definition: ERF_IndexDefines.H:257
@ yvel
Definition: ERF_IndexDefines.H:256
void erf_derrhodivide(const Box &bx, FArrayBox &derfab, const FArrayBox &datfab, const int scalar_index)
Definition: ERF_Derive.cpp:183
void erf_dermoisttemp(const Box &bx, FArrayBox &derfab, int, int, const FArrayBox &datfab, const FArrayBox &, const Geometry &, Real, const int *, const int)
Definition: ERF_Derive.cpp:281
void erf_dertemp(const Box &bx, FArrayBox &derfab, int, int, const FArrayBox &datfab, const FArrayBox &, const Geometry &, Real, const int *, const int)
Definition: ERF_Derive.cpp:258