ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_NullUrban.H
Go to the documentation of this file.
1 #ifndef ERF_NULLURBAN_H
2 #define ERF_NULLURBAN_H
3 
4 #include <memory>
5 #include <string>
6 
7 #include <AMReX_Geometry.H>
8 #include <AMReX_MultiFabUtil.H>
9 
10 #include <ERF_DataStruct.H>
11 
12 class NullUrban {
13 
14 public:
15 
16  NullUrban () = default;
17 
18  virtual ~NullUrban () = default;
19 
20  /**
21  * @brief Defines a no-op urban model.
22  */
23  virtual void Define (SolverChoice& /*sc*/) { }
24 
25  /**
26  * @brief Initializes a no-op urban model.
27  */
28  virtual void Init (const amrex::MultiFab& /*cons_in*/,
29  const amrex::MultiFab& /*u_in*/,
30  const amrex::MultiFab& /*v_in*/,
31  const amrex::Geometry& /*geom*/,
32  const amrex::Real& /*dt_advance*/,
33  const amrex::MultiFab& /*z_phys_nd*/,
34  const amrex::iMultiFab& /*land_type*/,
35  const amrex::MultiFab& /*urb_frac*/) { }
36 
37  /**
38  * @brief Advances a no-op urban model.
39  */
40  virtual void Advance (const amrex::Real& /*dt_advance*/,
41  const amrex::Real& /*time*/,
42  const amrex::Real& /*start_time*/,
43  const amrex::Geometry& /*geom*/,
44  const amrex::MultiFab* /*z_phys_nd*/,
45  amrex::MultiFab& /*eddyDiffs_lev*/,
46  const amrex::Real& /*calday*/) { }
47 
48  /**
49  * @brief Updates no urban coupling fields.
50  */
51  virtual void Update_Urban_Vars (amrex::MultiFab& /*cons_in*/,
52  amrex::MultiFab& /*u_in*/,
53  amrex::MultiFab& /*v_in*/) { }
54 
55  /**
56  * @brief Updates no atmospheric state fields.
57  */
58  virtual void Update_State_Vars (amrex::MultiFab& /*cons_in*/) { }
59 
60  /**
61  * @brief Returns no urban data field.
62  */
63  virtual amrex::MultiFab* Urban_Data_Ptr (const int& /*varIdx*/) { return nullptr; }
64 
65  /**
66  * @brief Returns no urban flux field.
67  */
68  virtual amrex::MultiFab* Urban_Flux_Ptr (const int& /*varIdx*/) { return nullptr; }
69 
70  /**
71  * @brief Returns the null-model geometry.
72  */
73  virtual amrex::Geometry Urban_Geom () { return m_urban_geom; }
74 
75  /**
76  * @brief Returns the number of null-model fields.
77  */
78  virtual int Urban_Data_Size () { return m_urban_size; }
79 
80  /**
81  * @brief Returns a null-model field name.
82  */
83  virtual std::string Urban_DataName (const int& /*varIdx*/) { return varname; }
84 
85  /**
86  * @brief Returns no field index.
87  */
88  virtual int Urban_DataIndex (const std::string& /*varname*/) { return -1; }
89 
90  /**
91  * @brief Accepts no flux input.
92  */
93  virtual void set_flux_inputs (const amrex::Real& /*declin*/) { }
94 
95  /**
96  * @brief Accepts no terrain input.
97  */
98  virtual void set_terrain_inputs (
99  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& /*tsk_in*/,
100  const amrex::Vector<std::unique_ptr<amrex::iMultiFab>>& /*lmask_in*/,
101  const amrex::Vector<std::unique_ptr<amrex::iMultiFab>>& /*land_type_in*/,
102  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& /*urb_frac_in*/,
103  amrex::MultiFab* /*lat_in*/, amrex::MultiFab* /*lon_in*/) { }
104 
105  /**
106  * @brief Writes no checkpoint state.
107  */
108  virtual void WriteCheckpoint (const int& /*lev*/, const std::string& /*checkpointname*/) const { }
109 
110  /**
111  * @brief Reads no checkpoint state.
112  */
113  virtual void ReadCheckpoint (const int& /*lev*/, const std::string& /*checkpointname*/) { }
114 
115 private:
116  int m_urban_size = 1;
117  amrex::Geometry m_urban_geom;
118  std::string varname = " ";
119 };
120 
121 #endif
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_NullUrban.H:12
virtual void Advance(const amrex::Real &, const amrex::Real &, const amrex::Real &, const amrex::Geometry &, const amrex::MultiFab *, amrex::MultiFab &, const amrex::Real &)
Advances a no-op urban model.
Definition: ERF_NullUrban.H:40
NullUrban()=default
virtual amrex::MultiFab * Urban_Data_Ptr(const int &)
Returns no urban data field.
Definition: ERF_NullUrban.H:63
virtual void set_terrain_inputs(const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &, const amrex::Vector< std::unique_ptr< amrex::iMultiFab >> &, const amrex::Vector< std::unique_ptr< amrex::iMultiFab >> &, const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &, amrex::MultiFab *, amrex::MultiFab *)
Accepts no terrain input.
Definition: ERF_NullUrban.H:98
virtual amrex::MultiFab * Urban_Flux_Ptr(const int &)
Returns no urban flux field.
Definition: ERF_NullUrban.H:68
virtual amrex::Geometry Urban_Geom()
Returns the null-model geometry.
Definition: ERF_NullUrban.H:73
virtual int Urban_Data_Size()
Returns the number of null-model fields.
Definition: ERF_NullUrban.H:78
amrex::Geometry m_urban_geom
Definition: ERF_NullUrban.H:117
virtual std::string Urban_DataName(const int &)
Returns a null-model field name.
Definition: ERF_NullUrban.H:83
virtual void Define(SolverChoice &)
Defines a no-op urban model.
Definition: ERF_NullUrban.H:23
int m_urban_size
Definition: ERF_NullUrban.H:116
virtual ~NullUrban()=default
virtual void WriteCheckpoint(const int &, const std::string &) const
Writes no checkpoint state.
Definition: ERF_NullUrban.H:108
virtual void set_flux_inputs(const amrex::Real &)
Accepts no flux input.
Definition: ERF_NullUrban.H:93
virtual void Update_Urban_Vars(amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &)
Updates no urban coupling fields.
Definition: ERF_NullUrban.H:51
virtual void Update_State_Vars(amrex::MultiFab &)
Updates no atmospheric state fields.
Definition: ERF_NullUrban.H:58
virtual void Init(const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::Geometry &, const amrex::Real &, const amrex::MultiFab &, const amrex::iMultiFab &, const amrex::MultiFab &)
Initializes a no-op urban model.
Definition: ERF_NullUrban.H:28
virtual void ReadCheckpoint(const int &, const std::string &)
Reads no checkpoint state.
Definition: ERF_NullUrban.H:113
virtual int Urban_DataIndex(const std::string &)
Returns no field index.
Definition: ERF_NullUrban.H:88
std::string varname
Definition: ERF_NullUrban.H:118
Definition: ERF_DataStruct.H:685