ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
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 void Init(const amrex::Geometry& geom,
19  const amrex::BoxArray& ba,
20  amrex::MultiFab* cons_in) = 0;
21 
22  virtual void Run(int& level,
23  int& step,
24  amrex::Real& time,
25  const amrex::Real& dt,
26  const amrex::BoxArray& ba,
27  amrex::Geometry& geom,
28  amrex::MultiFab* cons_in,
29  amrex::MultiFab* lsm_fluxes,
30  amrex::MultiFab* lsm_zenith,
31  amrex::MultiFab* qheating_rates,
32  amrex::MultiFab* z_phys,
33  amrex::MultiFab* lat,
34  amrex::MultiFab* lon) = 0;
35 
36  virtual void WriteDataLog(const amrex::Real &time) = 0;
37 
38  void setupDataLog()
39  {
40  amrex::ParmParse pp("erf.rad");
41  if (pp.contains("datalog")) {
42  pp.query("datalog", datalogname);
43 
45  }
46  }
47 
48  void setDataLogFrequency(const int nstep) {
49  datalog_int = nstep;
50  }
51 
52  bool hasDatalog() { return (datalog != nullptr && datalog->good()); }
53 
54 protected:
55  std::unique_ptr<std::fstream> datalog = nullptr;
56  std::string datalogname;
57 
58  int datalog_int = -1; // datalog frequency in steps
59 
60 private:
61  void setRecordDataInfo (const std::string& filename)
62  {
63  datalog = std::make_unique<std::fstream>();
64  if (amrex::ParallelDescriptor::IOProcessor())
65  {
66  datalog->open(filename.c_str(),std::ios::out|std::ios::app);
67  if (!datalog->good()) {
68  amrex::FileOpenFailed(filename);
69  }
70  datalogname = filename;
71  }
72  amrex::ParallelDescriptor::Barrier("ERF::Radiation::setRecordDataInfo");
73  }
74 };
75 
76 #endif
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real pp(amrex::Real y)
Definition: ERF_MicrophysicsUtils.H:219
Definition: ERF_RadiationInterface.H:14
bool hasDatalog()
Definition: ERF_RadiationInterface.H:52
std::string datalogname
Definition: ERF_RadiationInterface.H:56
std::unique_ptr< std::fstream > datalog
Definition: ERF_RadiationInterface.H:55
void setupDataLog()
Definition: ERF_RadiationInterface.H:38
void setDataLogFrequency(const int nstep)
Definition: ERF_RadiationInterface.H:48
virtual void Init(const amrex::Geometry &geom, const amrex::BoxArray &ba, amrex::MultiFab *cons_in)=0
int datalog_int
Definition: ERF_RadiationInterface.H:58
virtual ~IRadiation()=default
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::MultiFab *lsm_fluxes, amrex::MultiFab *lsm_zenith, amrex::MultiFab *qheating_rates, amrex::MultiFab *z_phys, amrex::MultiFab *lat, amrex::MultiFab *lon)=0
void setRecordDataInfo(const std::string &filename)
Definition: ERF_RadiationInterface.H:61
virtual void WriteDataLog(const amrex::Real &time)=0