ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_NullSurf.H
Go to the documentation of this file.
1 #ifndef ERF_NULLSURF_H
2 #define ERF_NULLSURF_H
3 
4 #include "AMReX_BCRec.H"
5 #include "AMReX_MultiFabUtil.H"
6 #include "AMReX_Geometry.H"
7 #include "ERF_DataStruct.H"
9 
10 enum class LSMTransferMode {
11  RawInput,
13 };
14 
15 class NullSurf {
16 
17  public:
18  NullSurf () {}
19 
20  virtual ~NullSurf () = default;
21 
22  virtual
23  void
24  Define (SolverChoice& /*sc*/) { }
25 
26  virtual
27  void Init (const int& /*lev*/,
28  const amrex::MultiFab& /*cons_in*/,
29  const amrex::Geometry& /*geom*/,
30  const amrex::Geometry& /*geom0*/,
31  amrex::Vector<amrex::BCRec>& /*domain_bcs_type*/,
32  amrex::IntVect& /*refRatio*/,
33  const amrex::Real& /*dt_advance*/,
34  amrex::Vector<amrex::Vector<std::string>>& /*nc_init_file*/) { }
35 
36  virtual void Init (const int& lev,
37  const amrex::MultiFab& cons_in,
38  const amrex::MultiFab& /*u_in*/,
39  const amrex::MultiFab& /*v_in*/,
40  const amrex::Geometry& geom,
41  const amrex::Geometry& geom0,
42  amrex::Vector<amrex::BCRec>& domain_bcs_type,
43  amrex::IntVect& refRatio, const amrex::Real& dt_advance,
44  std::unique_ptr<amrex::MultiFab>& /*z_phys_nd*/,
45  amrex::Vector<amrex::Vector<std::string>>& nc_init_file)
46  {
47  Init(lev, cons_in, geom, geom0,
48  domain_bcs_type, refRatio, dt_advance,
49  nc_init_file);
50  }
51 
52  virtual
53  void
54  Advance (const double& /*dt_advance*/) { }
55 
56  virtual void Advance (const amrex::Real&, const amrex::Real&, const amrex::Real&) { }
57 
58  virtual
59  void
60  Advance_With_State (const int& /*lev*/,
61  amrex::MultiFab& /*cons_in*/,
62  amrex::MultiFab& /*xvel_in*/,
63  amrex::MultiFab& /*yvel_in*/,
64  amrex::MultiFab* /*hfx3_out*/,
65  amrex::MultiFab* /*qfx3_out*/,
66  const SurfacePrecipAccumulationSources& /*precip_sources*/,
67  const amrex::Real& /*elapsed_time*/,
68  const amrex::Real& /*dt_advance*/,
69  const int& /*nstep*/,
70  const bool /*updated_lev0*/,
71  amrex::MultiFab* /*z_nd*/) { }
72 
73  virtual
74  void
75  Plot_Landfile (const int& /*nstep*/) { }
76 
77  virtual
78  void
79  Update_Micro_Vars (amrex::MultiFab& /*cons_in*/) { }
80  virtual void Update_Lsm_Vars (amrex::MultiFab&, amrex::MultiFab&, amrex::MultiFab&) { }
81  virtual void Copy_State_to_Lsm (const amrex::MultiFab&, const amrex::MultiFab&, const amrex::MultiFab&) { }
82  virtual void Copy_Lsm_to_State (amrex::MultiFab&) { }
83 
84  virtual
85  void
86  Update_State_Vars (amrex::MultiFab& /*cons_in*/) { }
87  virtual void set_precip_input (const amrex::MultiFab*) { }
88  virtual void set_terrain_inputs (const amrex::Vector<std::unique_ptr<amrex::MultiFab>>&,
89  const amrex::Vector<std::unique_ptr<amrex::iMultiFab>>&) { }
90  virtual int Lsm_Type () { return 0; }
91  virtual void WriteCheckpoint (const int&, const std::string&) const { }
92  virtual void ReadCheckpoint (const int&, const std::string&) { }
93 
94  virtual
95  void
96  Copy_State_to_Micro (const amrex::MultiFab& /*cons_in*/) { }
97 
98  virtual
99  void
100  Copy_Micro_to_State (amrex::MultiFab& /*cons_in*/) { }
101 
102  virtual
103  amrex::MultiFab*
104  Lsm_Data_Ptr (const int& /*varIdx*/ ) { return nullptr; }
105 
106  virtual
107  amrex::MultiFab*
108  Lsm_Flux_Ptr (const int& /*varIdx*/ ) { return nullptr; }
109 
110  virtual
111  amrex::Geometry
112  Lsm_Geom ( ) { return m_lsm_geom; }
113 
114  virtual
115  int
117 
118  virtual
119  int
121 
122  virtual
123  std::string
124  Lsm_DataName (const int& /*varIdx*/) { return dataname; }
125 
126  virtual
127  std::string
128  Lsm_FluxName (const int& /*varIdx*/) { return fluxname; }
129 
130  virtual
131  int
132  Lsm_DataIndex (const std::string& /*varname*/) { return (-1); }
133 
134  virtual
135  int
136  Lsm_FluxIndex (const std::string& /*varname*/) { return (-1); }
137 
138  virtual
139  std::unordered_map<std::string, std::string>&
141 
142  virtual
143  void
144  Lsm_Set_Lev0_Data_Ptr (const int& /*varIdx*/,
145  amrex::MultiFab* /*lev0_data_ptr*/)
146  {}
147 
148  virtual
149  void
150  Lsm_Set_Lev0_Flux_Ptr (const int& /*varIdx*/,
151  amrex::MultiFab* /*lev0_flux_ptr*/)
152  {}
153 
154  /**
155  * Registers an exposed source data field.
156  */
157  virtual
158  void
159  Lsm_Set_Source_Data_Ptr (const int& /*varIdx*/,
160  amrex::MultiFab* /*source_data_ptr*/)
161  {}
162 
163  /**
164  * Registers an exposed source flux field.
165  */
166  virtual
167  void
168  Lsm_Set_Source_Flux_Ptr (const int& /*varIdx*/,
169  amrex::MultiFab* /*source_flux_ptr*/)
170  {}
171 
172  /**
173  * Returns the number of private state fields required for transfer.
174  */
175  virtual
176  int
177  Lsm_Unmapped_Size () { return 0; }
178 
179  /**
180  * Returns a private state field required for transfer.
181  */
182  virtual
183  amrex::MultiFab*
184  Lsm_Unmapped_Ptr (const int& /*varIdx*/) { return nullptr; }
185 
186  /**
187  * Registers a private source state field.
188  */
189  virtual
190  void
191  Lsm_Set_Source_Unmapped_Ptr (const int& /*varIdx*/,
192  amrex::MultiFab* /*source_data_ptr*/)
193  {}
194 
195  /**
196  * Returns whether the reference-level atmospheric fields have been filled.
197  */
198  virtual
199  bool
200  Lsm_Has_Atmos_State () { return true; }
201 
202  /**
203  * Registers whether the source level's atmospheric fields have been filled.
204  */
205  virtual
206  void
207  Lsm_Set_Source_Has_Atmos_State (bool /*has_atmos_state*/) {}
208 
209  /**
210  * Returns the atmospheric geometry used by coupling fields.
211  */
212  virtual
213  amrex::Geometry
214  Lsm_Atmos_Geom () { return m_lsm_geom; }
215 
216  /**
217  * Transfers exposed state from a source AMR level.
218  */
219  virtual
220  void
221  Lsm_Interpolate_From_Source (const amrex::Geometry& /*source_geom*/,
222  const amrex::Geometry& /*source_lsm_geom*/,
223  const amrex::IntVect& /*ref_ratio*/,
224  LSMTransferMode /*mode*/)
225  {}
226 
227  /**
228  * Rebuilds a land-surface level after its atmospheric grid changes.
229  */
230  virtual
231  void
232  Lsm_Regrid_Level (const int& /*lev*/,
233  const amrex::MultiFab& /*cons_in*/,
234  const amrex::MultiFab& /*u_in*/,
235  const amrex::MultiFab& /*v_in*/,
236  const amrex::Geometry& /*geom*/,
237  const amrex::Geometry& /*geom0*/,
238  amrex::Vector<amrex::BCRec>& /*domain_bcs_type*/,
239  amrex::IntVect& /*refRatio*/,
240  const amrex::Real& /*dt_advance*/,
241  std::unique_ptr<amrex::MultiFab>& /*z_phys_nd*/,
242  amrex::Vector<amrex::Vector<std::string>>& /*nc_init_file*/,
243  const amrex::Geometry& /*source_geom*/,
244  const amrex::Geometry& /*source_lsm_geom*/,
245  const amrex::IntVect& /*source_ref_ratio*/,
246  const bool /*has_source*/)
247  {}
248 
249  virtual
250  bool
251  Get_Update_Status () { return false; }
252 
253  // Whether this level integrates a land model of its own from its own setup data, so
254  // that rebuilding the level would restart that state (Noah-MP; see NOAHMP::Init).
255  [[nodiscard]] virtual
256  bool
257  Runs_Own_Land_Driver () const { return false; }
258 
259  // Scalar LSM step counter (NoahMP itimestep). Persisted in checkpoint so
260  // the LSM substepping schedule survives restart. 0 means "uninitialized".
261  virtual
262  int
263  Get_LSM_Step () const { return 0; }
264 
265  virtual
266  void
267  Set_LSM_Step (int /*step*/) { }
268 
269  // Full LSM prognostic-state restart I/O. No-op for models that carry no
270  // persistent prognostic state beyond their checkpointed MultiFabs.
271  virtual
272  void
273  Write_Lsm_Restart (const std::string& /*dir*/) const { }
274 
275  virtual
276  void
277  Read_Lsm_Restart (const std::string& /*dir*/) { }
278 
279  private:
280  int m_lsm_size = 0;
281  amrex::Geometry m_lsm_geom;
282  std::string dataname = " ";
283  std::string fluxname = " ";
284 
285  std::unordered_map<std::string,std::string> wrfinput_map;
286 };
287 #endif
LSMTransferMode
Definition: ERF_NullSurf.H:10
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_NullSurf.H:15
int m_lsm_size
Definition: ERF_NullSurf.H:280
virtual std::string Lsm_DataName(const int &)
Definition: ERF_NullSurf.H:124
virtual void WriteCheckpoint(const int &, const std::string &) const
Definition: ERF_NullSurf.H:91
virtual bool Runs_Own_Land_Driver() const
Definition: ERF_NullSurf.H:257
virtual void Lsm_Set_Lev0_Flux_Ptr(const int &, amrex::MultiFab *)
Definition: ERF_NullSurf.H:150
virtual void Copy_State_to_Micro(const amrex::MultiFab &)
Definition: ERF_NullSurf.H:96
virtual void Init(const int &, const amrex::MultiFab &, const amrex::Geometry &, const amrex::Geometry &, amrex::Vector< amrex::BCRec > &, amrex::IntVect &, const amrex::Real &, amrex::Vector< amrex::Vector< std::string >> &)
Definition: ERF_NullSurf.H:27
virtual int Lsm_Type()
Definition: ERF_NullSurf.H:90
virtual amrex::MultiFab * Lsm_Data_Ptr(const int &)
Definition: ERF_NullSurf.H:104
virtual int Lsm_Flux_Size()
Definition: ERF_NullSurf.H:120
virtual void Lsm_Set_Source_Unmapped_Ptr(const int &, amrex::MultiFab *)
Definition: ERF_NullSurf.H:191
virtual void Lsm_Interpolate_From_Source(const amrex::Geometry &, const amrex::Geometry &, const amrex::IntVect &, LSMTransferMode)
Definition: ERF_NullSurf.H:221
virtual void Set_LSM_Step(int)
Definition: ERF_NullSurf.H:267
virtual amrex::MultiFab * Lsm_Unmapped_Ptr(const int &)
Definition: ERF_NullSurf.H:184
virtual void Plot_Landfile(const int &)
Definition: ERF_NullSurf.H:75
virtual void Write_Lsm_Restart(const std::string &) const
Definition: ERF_NullSurf.H:273
virtual int Lsm_DataIndex(const std::string &)
Definition: ERF_NullSurf.H:132
virtual void Copy_Micro_to_State(amrex::MultiFab &)
Definition: ERF_NullSurf.H:100
virtual void Lsm_Regrid_Level(const int &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::Geometry &, const amrex::Geometry &, amrex::Vector< amrex::BCRec > &, amrex::IntVect &, const amrex::Real &, std::unique_ptr< amrex::MultiFab > &, amrex::Vector< amrex::Vector< std::string >> &, const amrex::Geometry &, const amrex::Geometry &, const amrex::IntVect &, const bool)
Definition: ERF_NullSurf.H:232
virtual void Define(SolverChoice &)
Definition: ERF_NullSurf.H:24
virtual void Advance(const double &)
Definition: ERF_NullSurf.H:54
virtual void set_terrain_inputs(const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &, const amrex::Vector< std::unique_ptr< amrex::iMultiFab >> &)
Definition: ERF_NullSurf.H:88
std::string fluxname
Definition: ERF_NullSurf.H:283
virtual bool Lsm_Has_Atmos_State()
Definition: ERF_NullSurf.H:200
virtual amrex::MultiFab * Lsm_Flux_Ptr(const int &)
Definition: ERF_NullSurf.H:108
virtual void Lsm_Set_Source_Data_Ptr(const int &, amrex::MultiFab *)
Definition: ERF_NullSurf.H:159
virtual int Get_LSM_Step() const
Definition: ERF_NullSurf.H:263
virtual void Copy_Lsm_to_State(amrex::MultiFab &)
Definition: ERF_NullSurf.H:82
virtual void set_precip_input(const amrex::MultiFab *)
Definition: ERF_NullSurf.H:87
virtual int Lsm_FluxIndex(const std::string &)
Definition: ERF_NullSurf.H:136
virtual void Advance(const amrex::Real &, const amrex::Real &, const amrex::Real &)
Definition: ERF_NullSurf.H:56
virtual void Lsm_Set_Lev0_Data_Ptr(const int &, amrex::MultiFab *)
Definition: ERF_NullSurf.H:144
virtual void Copy_State_to_Lsm(const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &)
Definition: ERF_NullSurf.H:81
virtual void Update_Micro_Vars(amrex::MultiFab &)
Definition: ERF_NullSurf.H:79
NullSurf()
Definition: ERF_NullSurf.H:18
virtual void Init(const int &lev, const amrex::MultiFab &cons_in, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::Geometry &geom, const amrex::Geometry &geom0, amrex::Vector< amrex::BCRec > &domain_bcs_type, amrex::IntVect &refRatio, const amrex::Real &dt_advance, std::unique_ptr< amrex::MultiFab > &, amrex::Vector< amrex::Vector< std::string >> &nc_init_file)
Definition: ERF_NullSurf.H:36
virtual void Lsm_Set_Source_Flux_Ptr(const int &, amrex::MultiFab *)
Definition: ERF_NullSurf.H:168
amrex::Geometry m_lsm_geom
Definition: ERF_NullSurf.H:281
virtual void Advance_With_State(const int &, amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab *, amrex::MultiFab *, const SurfacePrecipAccumulationSources &, const amrex::Real &, const amrex::Real &, const int &, const bool, amrex::MultiFab *)
Definition: ERF_NullSurf.H:60
virtual void Update_Lsm_Vars(amrex::MultiFab &, amrex::MultiFab &, amrex::MultiFab &)
Definition: ERF_NullSurf.H:80
virtual std::unordered_map< std::string, std::string > & Lsm_WRFInputNames()
Definition: ERF_NullSurf.H:140
virtual amrex::Geometry Lsm_Atmos_Geom()
Definition: ERF_NullSurf.H:214
virtual void Read_Lsm_Restart(const std::string &)
Definition: ERF_NullSurf.H:277
virtual int Lsm_Unmapped_Size()
Definition: ERF_NullSurf.H:177
virtual bool Get_Update_Status()
Definition: ERF_NullSurf.H:251
virtual void ReadCheckpoint(const int &, const std::string &)
Definition: ERF_NullSurf.H:92
virtual std::string Lsm_FluxName(const int &)
Definition: ERF_NullSurf.H:128
virtual int Lsm_Data_Size()
Definition: ERF_NullSurf.H:116
virtual void Lsm_Set_Source_Has_Atmos_State(bool)
Definition: ERF_NullSurf.H:207
virtual void Update_State_Vars(amrex::MultiFab &)
Definition: ERF_NullSurf.H:86
std::string dataname
Definition: ERF_NullSurf.H:282
virtual amrex::Geometry Lsm_Geom()
Definition: ERF_NullSurf.H:112
std::unordered_map< std::string, std::string > wrfinput_map
Definition: ERF_NullSurf.H:285
virtual ~NullSurf()=default
Definition: ERF_DataStruct.H:715
Definition: ERF_SurfacePrecipitation.H:34