ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_RadiationInterface.H
Go to the documentation of this file.
1 #ifndef ERF_RADIATION_INTERFACE_H
2 #define ERF_RADIATION_INTERFACE_H
3 
4 #include <memory>
5 #include <iostream>
6 
7 #include <AMReX_BoxArray.H>
8 #include <AMReX_Geometry.H>
9 #include <AMReX_MultiFab.H>
10 #include <AMReX_ParmParse.H>
11 
12 // Basic interface class for wrapping different radiation models
14 {
15 public:
16  virtual ~IRadiation () = default;
17 
18  virtual
19  void
20  Init (const amrex::Geometry& geom,
21  const amrex::BoxArray& ba,
22  amrex::MultiFab* cons_in) = 0;
23 
24  virtual
25  void
26  Run (int& level,
27  int& step,
28  amrex::Real& time,
29  const amrex::Real& dt,
30  const amrex::BoxArray& ba,
31  amrex::Geometry& geom,
32  amrex::MultiFab* cons_in,
33  amrex::iMultiFab* lmask,
34  amrex::MultiFab* t_surf,
35  amrex::MultiFab* lsm_fluxes,
36  amrex::MultiFab* lsm_zenith,
37  amrex::Vector<amrex::MultiFab*>& lsm_input_ptrs,
38  amrex::Vector<amrex::MultiFab*>& lsm_output_ptrs,
39  amrex::MultiFab* qheating_rates,
40  amrex::MultiFab* rad_fluxes,
41  amrex::MultiFab* z_phys,
42  amrex::MultiFab* lat,
43  amrex::MultiFab* lon) = 0;
44 
45  virtual
46  void
47  WriteDataLog (const amrex::Real& time) = 0;
48 
49  // Get names input varnames for lsm
50  virtual
51  amrex::Vector<std::string>
53  {
54  amrex::Vector<std::string> empty = {" "};
55  return empty;
56  }
57 
58  // Get names output varnames for lsm
59  virtual
60  amrex::Vector<std::string>
62  {
63  amrex::Vector<std::string> empty = {" "};
64  return empty;
65  }
66 
67  void
69  {
70  amrex::ParmParse pp("erf.rad");
71  if (pp.contains("datalog")) {
72  pp.query("datalog", datalogname);
73 
75  }
76  }
77 
78  void
79  setDataLogFrequency (const int nstep) {
80  datalog_int = nstep;
81  }
82 
83  bool
84  hasDatalog () { return (datalog != nullptr && datalog->good()); }
85 
86 protected:
87  std::unique_ptr<std::fstream> datalog = nullptr;
88  std::string datalogname;
89 
90  int datalog_int = -1; // datalog frequency in steps
91 
92 private:
93  void
94  setRecordDataInfo (const std::string& filename)
95  {
96  datalog = std::make_unique<std::fstream>();
97  if (amrex::ParallelDescriptor::IOProcessor())
98  {
99  datalog->open(filename.c_str(),std::ios::out|std::ios::app);
100  if (!datalog->good()) {
101  amrex::FileOpenFailed(filename);
102  }
103  datalogname = filename;
104  }
105  amrex::ParallelDescriptor::Barrier("ERF::Radiation::setRecordDataInfo");
106  }
107 };
108 
109 #endif
struct @19 out
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real pp(amrex::Real y)
Definition: ERF_MicrophysicsUtils.H:233
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_RadiationInterface.H:14
bool hasDatalog()
Definition: ERF_RadiationInterface.H:84
std::string datalogname
Definition: ERF_RadiationInterface.H:88
std::unique_ptr< std::fstream > datalog
Definition: ERF_RadiationInterface.H:87
virtual void Run(int &level, int &step, amrex::Real &time, const amrex::Real &dt, const amrex::BoxArray &ba, amrex::Geometry &geom, amrex::MultiFab *cons_in, amrex::iMultiFab *lmask, amrex::MultiFab *t_surf, amrex::MultiFab *lsm_fluxes, amrex::MultiFab *lsm_zenith, amrex::Vector< amrex::MultiFab * > &lsm_input_ptrs, amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs, amrex::MultiFab *qheating_rates, amrex::MultiFab *rad_fluxes, amrex::MultiFab *z_phys, amrex::MultiFab *lat, amrex::MultiFab *lon)=0
void setupDataLog()
Definition: ERF_RadiationInterface.H:68
void setDataLogFrequency(const int nstep)
Definition: ERF_RadiationInterface.H:79
virtual void Init(const amrex::Geometry &geom, const amrex::BoxArray &ba, amrex::MultiFab *cons_in)=0
int datalog_int
Definition: ERF_RadiationInterface.H:90
virtual ~IRadiation()=default
void setRecordDataInfo(const std::string &filename)
Definition: ERF_RadiationInterface.H:94
virtual void WriteDataLog(const amrex::Real &time)=0
virtual amrex::Vector< std::string > get_lsm_input_varnames()
Definition: ERF_RadiationInterface.H:52
virtual amrex::Vector< std::string > get_lsm_output_varnames()
Definition: ERF_RadiationInterface.H:61