ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_WriteERFBdy.cpp File Reference
#include "ERF_WriteERFBdy.H"
#include <AMReX_PlotFileUtil.H>
#include <AMReX_VisMF.H>
#include <AMReX_ParallelDescriptor.H>
#include <AMReX_Print.H>
Include dependency graph for ERF_WriteERFBdy.cpp:

Functions

void InitERFBdyFile (const std::string &bdy_file_name, int ntimes, const Vector< double > &bdy_times, const Box &domain, int nvars, int real_width)
 
void WriteERFBdyTimeSlice (const std::string &bdy_file_name, int itime, const Vector< FArrayBox > &bdy_data_xlo, const Vector< FArrayBox > &bdy_data_xhi, const Vector< FArrayBox > &bdy_data_ylo, const Vector< FArrayBox > &bdy_data_yhi, int nvars)
 

Function Documentation

◆ InitERFBdyFile()

void InitERFBdyFile ( const std::string &  bdy_file_name,
int  ntimes,
const Vector< double > &  bdy_times,
const Box &  domain,
int  nvars,
int  real_width 
)
18 {
19  // Only I/O processor creates the directory and writes header.
20  if (ParallelDescriptor::IOProcessor())
21  {
22  // Create erfbdy directory.
23  if (!amrex::UtilCreateDirectory(bdy_file_name, 0755)) {
24  amrex::CreateDirectoryFailed(bdy_file_name);
25  }
26 
27  // Write Header file.
28  std::string HeaderFileName = bdy_file_name + "/Header";
29  std::ofstream HeaderFile;
30  HeaderFile.open(HeaderFileName.c_str(), std::ofstream::out | std::ofstream::trunc);
31 
32  if (!HeaderFile.good()) {
33  amrex::FileOpenFailed(HeaderFileName);
34  }
35 
36  HeaderFile.precision(17);
37 
38  // Title.
39  HeaderFile << "ERFBdy file for ERF\n";
40 
41  // Metadata.
42  HeaderFile << ntimes << "\n";
43  HeaderFile << nvars << "\n";
44  HeaderFile << real_width << "\n";
45 
46  // Time values.
47  for (int i = 0; i < ntimes; ++i) {
48  HeaderFile << bdy_times[i];
49  if (i < ntimes - 1) {
50  HeaderFile << " ";
51  }
52  }
53  HeaderFile << "\n";
54 
55  // Domain box.
56  HeaderFile << domain.smallEnd(0) << " " << domain.smallEnd(1) << " " << domain.smallEnd(2) << "\n";
57  HeaderFile << domain.bigEnd(0) << " " << domain.bigEnd(1) << " " << domain.bigEnd(2) << "\n";
58 
59  HeaderFile.close();
60  }
61 
62  // Barrier to ensure directory is created before any writes.
63  ParallelDescriptor::Barrier();
64 }
@ nvars
Definition: ERF_DataStruct.H:152
struct @28 out

◆ WriteERFBdyTimeSlice()

void WriteERFBdyTimeSlice ( const std::string &  bdy_file_name,
int  itime,
const Vector< FArrayBox > &  bdy_data_xlo,
const Vector< FArrayBox > &  bdy_data_xhi,
const Vector< FArrayBox > &  bdy_data_ylo,
const Vector< FArrayBox > &  bdy_data_yhi,
int  nvars 
)
73 {
74  // Create time subdirectory.
75  std::string time_dir = bdy_file_name + "/Time_" + Concatenate("", itime, 6);
76 
77  if (ParallelDescriptor::IOProcessor())
78  {
79  if (!amrex::UtilCreateDirectory(time_dir, 0755)) {
80  amrex::CreateDirectoryFailed(time_dir);
81  }
82  }
83 
84  // Barrier to ensure directory exists.
85  ParallelDescriptor::Barrier();
86 
87  // Write each variable for each boundary direction.
88  if (ParallelDescriptor::IOProcessor())
89  {
90  for (int ivar = 0; ivar < nvars; ++ivar)
91  {
92  // X-low boundary.
93  if (bdy_data_xlo.size() > 0 && ivar < bdy_data_xlo.size()) {
94  std::string filename = time_dir + "/BdyData_xlo_var" + std::to_string(ivar);
95  std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary);
96  bdy_data_xlo[ivar].writeOn(ofs);
97  ofs.close();
98  }
99 
100  // X-high boundary.
101  if (bdy_data_xhi.size() > 0 && ivar < bdy_data_xhi.size()) {
102  std::string filename = time_dir + "/BdyData_xhi_var" + std::to_string(ivar);
103  std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary);
104  bdy_data_xhi[ivar].writeOn(ofs);
105  ofs.close();
106  }
107 
108  // Y-low boundary.
109  if (bdy_data_ylo.size() > 0 && ivar < bdy_data_ylo.size()) {
110  std::string filename = time_dir + "/BdyData_ylo_var" + std::to_string(ivar);
111  std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary);
112  bdy_data_ylo[ivar].writeOn(ofs);
113  ofs.close();
114  }
115 
116  // Y-high boundary.
117  if (bdy_data_yhi.size() > 0 && ivar < bdy_data_yhi.size()) {
118  std::string filename = time_dir + "/BdyData_yhi_var" + std::to_string(ivar);
119  std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary);
120  bdy_data_yhi[ivar].writeOn(ofs);
121  ofs.close();
122  }
123  }
124  }
125 
126  // Barrier to ensure all writes complete.
127  ParallelDescriptor::Barrier();
128 }