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 the atmospheric geometry used by coupling fields.
197  */
198  virtual
199  amrex::Geometry
200  Lsm_Atmos_Geom () { return m_lsm_geom; }
201 
202  /**
203  * Transfers exposed state from a source AMR level.
204  */
205  virtual
206  void
207  Lsm_Interpolate_From_Source (const amrex::Geometry& /*source_geom*/,
208  const amrex::Geometry& /*source_lsm_geom*/,
209  const amrex::IntVect& /*ref_ratio*/,
210  LSMTransferMode /*mode*/)
211  {}
212 
213  /**
214  * Rebuilds a land-surface level after its atmospheric grid changes.
215  */
216  virtual
217  void
218  Lsm_Regrid_Level (const int& /*lev*/,
219  const amrex::MultiFab& /*cons_in*/,
220  const amrex::MultiFab& /*u_in*/,
221  const amrex::MultiFab& /*v_in*/,
222  const amrex::Geometry& /*geom*/,
223  const amrex::Geometry& /*geom0*/,
224  amrex::Vector<amrex::BCRec>& /*domain_bcs_type*/,
225  amrex::IntVect& /*refRatio*/,
226  const amrex::Real& /*dt_advance*/,
227  std::unique_ptr<amrex::MultiFab>& /*z_phys_nd*/,
228  amrex::Vector<amrex::Vector<std::string>>& /*nc_init_file*/,
229  const amrex::Geometry& /*source_geom*/,
230  const amrex::Geometry& /*source_lsm_geom*/,
231  const amrex::IntVect& /*source_ref_ratio*/,
232  const bool /*has_source*/)
233  {}
234 
235  virtual
236  bool
237  Get_Update_Status () { return false; }
238 
239  // Whether this level integrates a land model of its own from its own setup data, so
240  // that rebuilding the level would restart that state (Noah-MP; see NOAHMP::Init).
241  [[nodiscard]] virtual
242  bool
243  Runs_Own_Land_Driver () const { return false; }
244 
245  // Scalar LSM step counter (NoahMP itimestep). Persisted in checkpoint so
246  // the LSM substepping schedule survives restart. 0 means "uninitialized".
247  virtual
248  int
249  Get_LSM_Step () const { return 0; }
250 
251  virtual
252  void
253  Set_LSM_Step (int /*step*/) { }
254 
255  // Full LSM prognostic-state restart I/O. No-op for models that carry no
256  // persistent prognostic state beyond their checkpointed MultiFabs.
257  virtual
258  void
259  Write_Lsm_Restart (const std::string& /*dir*/) const { }
260 
261  virtual
262  void
263  Read_Lsm_Restart (const std::string& /*dir*/) { }
264 
265  private:
266  int m_lsm_size = 0;
267  amrex::Geometry m_lsm_geom;
268  std::string dataname = " ";
269  std::string fluxname = " ";
270 
271  std::unordered_map<std::string,std::string> wrfinput_map;
272 };
273 #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:266
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:243
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:207
virtual void Set_LSM_Step(int)
Definition: ERF_NullSurf.H:253
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:259
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:218
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:269
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:249
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:267
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:200
virtual void Read_Lsm_Restart(const std::string &)
Definition: ERF_NullSurf.H:263
virtual int Lsm_Unmapped_Size()
Definition: ERF_NullSurf.H:177
virtual bool Get_Update_Status()
Definition: ERF_NullSurf.H:237
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 Update_State_Vars(amrex::MultiFab &)
Definition: ERF_NullSurf.H:86
std::string dataname
Definition: ERF_NullSurf.H:268
virtual amrex::Geometry Lsm_Geom()
Definition: ERF_NullSurf.H:112
std::unordered_map< std::string, std::string > wrfinput_map
Definition: ERF_NullSurf.H:271
virtual ~NullSurf()=default
Definition: ERF_DataStruct.H:685
Definition: ERF_SurfacePrecipitation.H:34