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< Real > &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< Real > &  bdy_times,
const Box &  domain,
int  nvars,
int  real_width 
)
15 {
16  // Only I/O processor creates the directory and writes header.
17  if (ParallelDescriptor::IOProcessor())
18  {
19  // Create erfbdy directory.
20  if (!amrex::UtilCreateDirectory(bdy_file_name, 0755)) {
21  amrex::CreateDirectoryFailed(bdy_file_name);
22  }
23 
24  // Write Header file.
25  std::string HeaderFileName = bdy_file_name + "/Header";
26  std::ofstream HeaderFile;
27  HeaderFile.open(HeaderFileName.c_str(), std::ofstream::out | std::ofstream::trunc);
28 
29  if (!HeaderFile.good()) {
30  amrex::FileOpenFailed(HeaderFileName);
31  }
32 
33  HeaderFile.precision(17);
34 
35  // Title.
36  HeaderFile << "ERFBdy file for ERF\n";
37 
38  // Metadata.
39  HeaderFile << ntimes << "\n";
40  HeaderFile << nvars << "\n";
41  HeaderFile << real_width << "\n";
42 
43  // Time values.
44  for (int i = 0; i < ntimes; ++i) {
45  HeaderFile << bdy_times[i];
46  if (i < ntimes - 1) {
47  HeaderFile << " ";
48  }
49  }
50  HeaderFile << "\n";
51 
52  // Domain box.
53  HeaderFile << domain.smallEnd(0) << " " << domain.smallEnd(1) << " " << domain.smallEnd(2) << "\n";
54  HeaderFile << domain.bigEnd(0) << " " << domain.bigEnd(1) << " " << domain.bigEnd(2) << "\n";
55 
56  HeaderFile.close();
57  }
58 
59  // Barrier to ensure directory is created before any writes.
60  ParallelDescriptor::Barrier();
61 }
@ nvars
Definition: ERF_DataStruct.H:98
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 
)
70 {
71  // Create time subdirectory.
72  std::string time_dir = bdy_file_name + "/Time_" + Concatenate("", itime, 6);
73 
74  if (ParallelDescriptor::IOProcessor())
75  {
76  if (!amrex::UtilCreateDirectory(time_dir, 0755)) {
77  amrex::CreateDirectoryFailed(time_dir);
78  }
79  }
80 
81  // Barrier to ensure directory exists.
82  ParallelDescriptor::Barrier();
83 
84  // Write each variable for each boundary direction.
85  if (ParallelDescriptor::IOProcessor())
86  {
87  for (int ivar = 0; ivar < nvars; ++ivar)
88  {
89  // X-low boundary.
90  if (bdy_data_xlo.size() > 0 && ivar < bdy_data_xlo.size()) {
91  std::string filename = time_dir + "/BdyData_xlo_var" + std::to_string(ivar);
92  std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary);
93  bdy_data_xlo[ivar].writeOn(ofs);
94  ofs.close();
95  }
96 
97  // X-high boundary.
98  if (bdy_data_xhi.size() > 0 && ivar < bdy_data_xhi.size()) {
99  std::string filename = time_dir + "/BdyData_xhi_var" + std::to_string(ivar);
100  std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary);
101  bdy_data_xhi[ivar].writeOn(ofs);
102  ofs.close();
103  }
104 
105  // Y-low boundary.
106  if (bdy_data_ylo.size() > 0 && ivar < bdy_data_ylo.size()) {
107  std::string filename = time_dir + "/BdyData_ylo_var" + std::to_string(ivar);
108  std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary);
109  bdy_data_ylo[ivar].writeOn(ofs);
110  ofs.close();
111  }
112 
113  // Y-high boundary.
114  if (bdy_data_yhi.size() > 0 && ivar < bdy_data_yhi.size()) {
115  std::string filename = time_dir + "/BdyData_yhi_var" + std::to_string(ivar);
116  std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary);
117  bdy_data_yhi[ivar].writeOn(ofs);
118  ofs.close();
119  }
120  }
121  }
122 
123  // Barrier to ensure all writes complete.
124  ParallelDescriptor::Barrier();
125 }