ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_Radiation.H
Go to the documentation of this file.
1 #ifndef ERF_RADIATION_H
2 #define ERF_RADIATION_H
3 
4 /*
5  * RTE-RRTMGP radiation model interface to ERF
6  * The original code is developed by RobertPincus, and the code is open source available at:
7  * https://github.com/earth-system-radiation/rte-rrtmgp
8  * Please reference to the following paper,
9  * https://agupubs.onlinelibrary.wiley.com/doi/10.1029/2019MS001621
10  * NOTE: we use the C++ version of RTE-RRTMGP, which is the implementation of the original Fortran
11  * code using C++ KOKKOS for CUDA, HiP and SYCL application by E3SM ECP team, the C++ version
12  * of the rte-rrtmgp code is located at:
13  * https://github.com/E3SM-Project/rte-rrtmgp
14  * The RTE-RRTMGP uses BSD-3-Clause Open Source License, if you want to make changes,
15  * and modifications to the code, please refer to BSD-3-Clause Open Source License.
16  */
17 
18 #include <ctime>
19 #include <string>
20 #include <vector>
21 #include <memory>
22 
23 #include <mo_gas_concentrations.h>
24 
25 #include <Kokkos_Core.hpp>
26 
27 #include <AMReX_ParmParse.H>
28 #include <AMReX_FArrayBox.H>
29 #include <AMReX_Geometry.H>
30 #include <AMReX_TableData.H>
31 #include <AMReX_MultiFabUtil.H>
32 #include <AMReX_PlotFileUtil.H>
33 
34 #include <ERF_RadiationInterface.H>
35 #include <ERF_RRTMGP_Interface.H>
36 #include <ERF_RRTMGP_Utils.H>
37 #include <ERF_OrbCosZenith.H>
38 #include <ERF_Constants.H>
39 #include <ERF_IndexDefines.H>
40 #include <ERF_DataStruct.H>
41 #include <ERF_EOS.H>
42 
43 #include <ERF_LandSurface.H>
44 
45 class Radiation : public IRadiation {
46 public:
47 
48  #include <ERF_Kokkos.H>
49 
50  // Constructor
51  Radiation (const int& lev,
52  SolverChoice& sc);
53 
54  // Destructor
56  {
57  // Note that Kokkos is now finalized in main.cpp
58  }
59 
60  virtual
61  void
62  Init (const amrex::Geometry& geom,
63  const amrex::BoxArray& ba,
64  amrex::MultiFab* cons_in) override
65  {
66  // Ensure the boxes span klo -> khi
67  int klo = geom.Domain().smallEnd(2);
68  int khi = geom.Domain().bigEnd(2);
69 
70  // Reset vector of offsets for columnar data
71  m_nlay = geom.Domain().length(2);
72 
73  m_ncol = 0;
74  m_col_offsets.clear();
75  m_col_offsets.resize(int(ba.size()));
76  for (amrex::MFIter mfi(*cons_in); mfi.isValid(); ++mfi) {
77  const amrex::Box& vbx = mfi.validbox();
78  AMREX_ALWAYS_ASSERT_WITH_MESSAGE((klo == vbx.smallEnd(2)) &&
79  (khi == vbx.bigEnd(2)),
80  "Vertical decomposition with radiation is not allowed.");
81  int nx = vbx.length(0);
82  int ny = vbx.length(1);
83  m_col_offsets[mfi.index()] = m_ncol;
84  m_ncol += nx * ny;
85  }
86  };
87 
88  virtual
89  void
90  Run (int& level,
91  int& step,
92  amrex::Real& time,
93  const amrex::Real& dt,
94  const amrex::BoxArray& ba,
95  amrex::Geometry& geom,
96  amrex::MultiFab* cons_in,
97  amrex::MultiFab* lsm_fluxes,
98  amrex::MultiFab* lsm_zenith,
99  amrex::Vector<amrex::MultiFab*>& lsm_input_ptrs,
100  amrex::Vector<amrex::MultiFab*>& lsm_output_ptrs,
101  amrex::MultiFab* qheating_rates,
102  amrex::MultiFab* z_phys,
103  amrex::MultiFab* lat,
104  amrex::MultiFab* lon) override
105  {
106  set_grids(level, step, time, dt, ba, geom,
107  cons_in, lsm_fluxes, lsm_zenith,
108  lsm_input_ptrs, qheating_rates,
109  z_phys, lat, lon);
110  rad_run_impl(lsm_output_ptrs);
111  }
112 
113  // Set the grid info for columnar data in KOKKOS
114  void
115  set_grids (int& level,
116  int& step,
117  amrex::Real& time,
118  const amrex::Real& dt,
119  const amrex::BoxArray& ba,
120  amrex::Geometry& geom,
121  amrex::MultiFab* cons_in,
122  amrex::MultiFab* lsm_fluxes,
123  amrex::MultiFab* lsm_zenith,
124  amrex::Vector<amrex::MultiFab*>& lsm_input_ptrs,
125  amrex::MultiFab* qheating_rates,
126  amrex::MultiFab* z_phys,
127  amrex::MultiFab* lat,
128  amrex::MultiFab* lon);
129 
130  // Initialize the temporary variables
131  void
132  alloc_buffers ();
133 
134  // Clear the temporary variables
135  void
136  dealloc_buffers ();
137 
138  // Fill KOKKOS Views from AMReX MultiFabs
139  void
140  mf_to_kokkos_buffers(amrex::Vector<amrex::MultiFab*>& lsm_input_ptrs);
141 
142  // Fill AMReX MultiFabs from KOKKOS Views
143  void
144  kokkos_buffers_to_mf (amrex::Vector<amrex::MultiFab*>& lsm_output_ptrs);
145 
146  // Write the rrtmgp fluxes
147  void
149 
150  // Initialize the implementation
151  void
152  initialize_impl ();
153 
154  // Run the implementation
155  void
156  run_impl ();
157 
158  // Finalize the implementation
159  void
160  finalize_impl (amrex::Vector<amrex::MultiFab*>& lsm_output_ptrs);
161 
162  // Wrapper for implementation steps
163  void
164  rad_run_impl (amrex::Vector<amrex::MultiFab*>& lsm_output_ptrs)
165  {
166  if (m_update_rad) {
167  amrex::Print() << "Advancing radiation at level: " << m_lev << " ...";
168  this->initialize_impl();
169  this->run_impl();
170  this->finalize_impl(lsm_output_ptrs);
171  amrex::Print() << "DONE\n";
172  }
173  }
174 
175  // Get names input varnames for lsm
176  virtual
177  amrex::Vector<std::string>
179  {
180  return m_lsm_input_names;
181  }
182 
183  // Get names output varnames for lsm
184  virtual
185  amrex::Vector<std::string>
187  {
188  return m_lsm_output_names;
189  }
190 
191  // Populate datalog structures
192  void
194 
195  // Write datalog
196  virtual
197  void
198  WriteDataLog (const amrex::Real &time) override;
199 
200 private:
201 
202  // Process interface vars from ERF/AMReX
203  //===================================================================================
204 
205  // Grid level
206  int m_lev;
207 
208  // Step number
209  int m_step;
210 
211  // Current time
213 
214  // Timestep at given level
216 
217  // Geometry at given level
218  amrex::Geometry m_geom;
219 
220  // Boxarray at given level
221  amrex::BoxArray m_ba;
222 
223  // Are we updating radiation?
224  bool m_update_rad = false;
225 
226  // Are we writing out the fluxes?
227  bool m_rad_write_fluxes = false;
228 
229  bool m_first_step = true;
230 
231  // Do we have moisture and cold comps?
232  bool m_moist = false;
233  bool m_ice = false;
234 
235  // Do we have a land surface model?
236  bool m_lsm = false;
237 
238  // List of input parameter names
239  amrex::Vector<std::string> m_lsm_input_names = {"t_sfc" , "sfc_emis" ,
240  "sfc_alb_dir_vis", "sfc_alb_dir_nir",
241  "sfc_alb_dif_vis", "sfc_alb_dif_nir"};
242 
243  // List of output parameter names
244  amrex::Vector<std::string> m_lsm_output_names = {"sw_flux_dn", "lw_flux_dn"};
245 
246  // T surf if no LSM is available
248 
249  // Pointer to the CC conserved vars
250  amrex::MultiFab* m_cons_in = nullptr;
251 
252  // Pointer to the radiation source terms
253  amrex::MultiFab* m_qheating_rates = nullptr;
254 
255  // Pointer to the terrain heights
256  amrex::MultiFab* m_z_phys = nullptr;
257 
258  // Pointer to latitude and longitude
259  amrex::MultiFab* m_lat = nullptr;
260  amrex::MultiFab* m_lon = nullptr;
261 
262  // Constant lat/lon if the above MFs are not valid
263  amrex::Real m_lat_cons = 39.809860;
264  amrex::Real m_lon_cons = -98.555183;
265 
266  // Pointer to output data for LSM
267  amrex::MultiFab* m_lsm_fluxes = nullptr;
268  amrex::MultiFab* m_lsm_zenith = nullptr;
269 
270  // Holds output from KOKKOS views used in the datalog
271  amrex::MultiFab datalog_mf;
272 
273  // Path, data file, and coefficient file for K-distribution
274  std::string rrtmgp_file_path = ".";
275  std::string rrtmgp_coeffs_sw = "rrtmgp-data-sw-g224-2018-12-04.nc";
276  std::string rrtmgp_coeffs_lw = "rrtmgp-data-lw-g224-2018-12-04.nc";
277  std::string rrtmgp_cloud_optics_sw = "rrtmgp-cloud-optics-coeffs-sw.nc";
278  std::string rrtmgp_cloud_optics_lw = "rrtmgp-cloud-optics-coeffs-lw.nc";
283 
284  // Active gases
285  int m_ngas = 8;
286  const std::vector<std::string> m_gas_names = {"H2O", "CO2", "O3", "N2O",
287  "CO" , "CH4", "O2", "N2" };
288  const std::vector<amrex::Real> m_mol_weight_gas = {18.01528, 44.00950, 47.9982, 44.0128,
289  28.01010, 16.04246, 31.9980, 28.0134}; // g/mol
290 
291  // Prescribed greenhouse gas surface concentrations in moles / moles air
292  amrex::Real m_co2vmr = 388.717e-6;
293  amrex::Vector<amrex::Real> m_o3vmr;
294  amrex::Real m_n2ovmr = 323.141e-9;
296  amrex::Real m_ch4vmr = 1807.851e-9;
297  amrex::Real m_o2vmr = 0.209448;
299  //amrex::Real m_f11vmr = 768.7644e-12;
300  //amrex::Real m_f12vmr = 531.2820e-12;
301 
304  std::vector<std::string> gas_names_offset;
305 
306  GasConcsK<amrex::Real, layout_t, KokkosDefaultDevice> m_gas_concs;
307 
308  // Process interface vars modeled after EAMXX
309  //===================================================================================
310 
311  // Keep track of number of columns and levels
312  int m_ncol;
313  int m_nlay;
314 
315  // Offsets for MultiFab <-> KOKKOS transfer
316  amrex::Vector<int> m_col_offsets;
317 
318  // Whether we use aerosol forcing in radiation
319  bool m_do_aerosol_rad = true;
320 
321  // Whether we do extra aerosol forcing calls
322  bool m_extra_clnsky_diag = false;
324 
325  // The orbital year, used for zenith angle calculations:
326  // If > 0, use constant orbital year for duration of simulation
327  // If < 0, use year from timestamp for orbital parameters
328  int m_orbital_year = -9999;
329  int m_orbital_mon = -9999;
330  int m_orbital_day = -9999;
331  int m_orbital_sec = -9999;
332 
333  // Orbital parameters, used for zenith angle calculations.
334  // If >= 0, bypass computation based on orbital year and use fixed parameters
335  // If < 0, compute based on orbital year, specified above
336  bool m_fixed_orbital_year = false;
337  amrex::Real m_orbital_eccen = -9999.; // Eccentricity
338  amrex::Real m_orbital_obliq = -9999.; // Obliquity
339  amrex::Real m_orbital_mvelp = -9999.; // Vernal Equinox Mean Longitude of Perihelion
340 
341  // Value for prescribing an invariant solar constant (i.e. total solar irradiance
342  // at TOA). Used for idealized experiments such as RCE. This is only used when a
343  // positive value is supplied.
345 
346  // Fixed solar zenith angle to use for shortwave calculations
347  // This is only used if a positive value is supplied
349 
350  // Need to hard-code some dimension sizes for now.
351  // TODO: find a better way of configuring this
352  int m_nswbands = 14;
353  int m_nlwbands = 16;
354  int m_nswgpts = 112;
355  int m_nlwgpts = 128;
356 
357  // Rad frequency in number of steps
359 
360  // Whether or not to do subcolumn sampling of cloud state for MCICA
361  bool m_do_subcol_sampling = true;
362 
363  // 1d size (1 or nlay)
365 
366  // 1d size (ncol)
382 
383  // 2d size (ncol, nlay)
402 
403  // 2d size (ncol, nlay+1)
427 
428  // 3d size (ncol, nlay+1, nswbands)
433 
434  // 3d size (ncol, nlay+1, nlwbands)
437 
438  // 2d size (ncol, nswbands)
441 
442  // 2d size (ncol, nlwbands)
444 
445  // 3d size (ncol, nlay, n[sw,lw]bands)
450 
451  // 3d size (ncol, nlay, n[sw,lw]bnds)
454 
455  // 3d size (ncol, nlay, n[sw,lw]gpts)
458 };
459 #endif
Kokkos::View< RealT *, KokkosDefaultDevice > real1d_k
Definition: ERF_Kokkos.H:17
Kokkos::View< RealT ***, layout_t, KokkosDefaultDevice > real3d_k
Definition: ERF_Kokkos.H:19
Kokkos::View< RealT **, layout_t, KokkosDefaultDevice > real2d_k
Definition: ERF_Kokkos.H:18
amrex::Real Real
Definition: ERF_ShocInterface.H:16
Definition: ERF_RadiationInterface.H:14
Definition: ERF_Radiation.H:45
real3d_k sw_bnd_flux_dn
Definition: ERF_Radiation.H:430
amrex::MultiFab * m_lon
Definition: ERF_Radiation.H:260
real2d_k lw_flux_up
Definition: ERF_Radiation.H:410
virtual amrex::Vector< std::string > get_lsm_output_varnames() override
Definition: ERF_Radiation.H:186
real3d_k aero_tau_sw
Definition: ERF_Radiation.H:446
int m_o3_size
Definition: ERF_Radiation.H:302
real3d_k sw_bnd_flux_dir
Definition: ERF_Radiation.H:431
real2d_k sw_clnsky_flux_dn
Definition: ERF_Radiation.H:419
std::string rrtmgp_coeffs_file_sw
Definition: ERF_Radiation.H:279
std::string rrtmgp_coeffs_sw
Definition: ERF_Radiation.H:275
real2d_k d_tint
Definition: ERF_Radiation.H:404
real2d_k lw_clnclrsky_flux_dn
Definition: ERF_Radiation.H:422
int m_rad_freq_in_steps
Definition: ERF_Radiation.H:358
real2d_k lwp
Definition: ERF_Radiation.H:396
real3d_k cld_tau_lw_gpt
Definition: ERF_Radiation.H:457
real1d_k lw_src
Definition: ERF_Radiation.H:381
real2d_k eff_radius_qi
Definition: ERF_Radiation.H:394
void dealloc_buffers()
Definition: ERF_Radiation.cpp:310
real1d_k m_gas_mol_weights
Definition: ERF_Radiation.H:303
amrex::Real m_lon_cons
Definition: ERF_Radiation.H:264
void initialize_impl()
Definition: ERF_Radiation.cpp:951
int m_nswbands
Definition: ERF_Radiation.H:352
bool m_do_aerosol_rad
Definition: ERF_Radiation.H:319
std::string rrtmgp_coeffs_lw
Definition: ERF_Radiation.H:276
bool m_moist
Definition: ERF_Radiation.H:232
std::string rrtmgp_cloud_optics_file_lw
Definition: ERF_Radiation.H:282
amrex::MultiFab * m_cons_in
Definition: ERF_Radiation.H:250
amrex::MultiFab datalog_mf
Definition: ERF_Radiation.H:271
Radiation(const int &lev, SolverChoice &sc)
Definition: ERF_Radiation.cpp:19
real2d_k sw_heating
Definition: ERF_Radiation.H:398
bool m_lsm
Definition: ERF_Radiation.H:236
bool m_do_subcol_sampling
Definition: ERF_Radiation.H:361
real3d_k lw_bnd_flux_dn
Definition: ERF_Radiation.H:436
bool m_rad_write_fluxes
Definition: ERF_Radiation.H:227
real3d_k sw_bnd_flux_up
Definition: ERF_Radiation.H:429
real2d_k qv_lay
Definition: ERF_Radiation.H:389
std::string rrtmgp_cloud_optics_file_sw
Definition: ERF_Radiation.H:281
amrex::Vector< std::string > m_lsm_output_names
Definition: ERF_Radiation.H:244
void run_impl()
Definition: ERF_Radiation.cpp:962
real2d_k sw_clnclrsky_flux_dn_dir
Definition: ERF_Radiation.H:414
real1d_k sfc_flux_dif_vis
Definition: ERF_Radiation.H:375
int m_step
Definition: ERF_Radiation.H:209
real2d_k lw_clnclrsky_flux_up
Definition: ERF_Radiation.H:421
real3d_k cld_tau_sw_gpt
Definition: ERF_Radiation.H:456
real1d_k lat
Definition: ERF_Radiation.H:377
void populateDatalogMF()
Definition: ERF_Radiation.cpp:727
real2d_k qi_lay
Definition: ERF_Radiation.H:391
real2d_k sw_clrsky_flux_up
Definition: ERF_Radiation.H:415
amrex::Real m_orbital_mvelp
Definition: ERF_Radiation.H:339
real2d_k t_lev
Definition: ERF_Radiation.H:406
amrex::Vector< amrex::Real > m_o3vmr
Definition: ERF_Radiation.H:293
real1d_k o3_lay
Definition: ERF_Radiation.H:364
std::string rrtmgp_cloud_optics_sw
Definition: ERF_Radiation.H:277
real1d_k sfc_alb_dif_vis
Definition: ERF_Radiation.H:371
int m_nlwgpts
Definition: ERF_Radiation.H:355
real1d_k mu0
Definition: ERF_Radiation.H:368
real2d_k cldfrac_tot
Definition: ERF_Radiation.H:392
real3d_k cld_tau_lw_bnd
Definition: ERF_Radiation.H:453
real1d_k sfc_flux_dir_nir
Definition: ERF_Radiation.H:374
amrex::MultiFab * m_z_phys
Definition: ERF_Radiation.H:256
real2d_k sw_clnclrsky_flux_up
Definition: ERF_Radiation.H:412
real3d_k aero_g_sw
Definition: ERF_Radiation.H:448
real2d_k sw_flux_up
Definition: ERF_Radiation.H:407
std::string rrtmgp_cloud_optics_lw
Definition: ERF_Radiation.H:278
real3d_k sw_bnd_flux_dif
Definition: ERF_Radiation.H:432
real2d_k sfc_alb_dif
Definition: ERF_Radiation.H:440
amrex::Real m_co2vmr
Definition: ERF_Radiation.H:292
bool m_extra_clnsky_diag
Definition: ERF_Radiation.H:322
real2d_k emis_sfc
Definition: ERF_Radiation.H:443
real1d_k sfc_alb_dif_nir
Definition: ERF_Radiation.H:372
amrex::MultiFab * m_lsm_fluxes
Definition: ERF_Radiation.H:267
virtual void Init(const amrex::Geometry &geom, const amrex::BoxArray &ba, amrex::MultiFab *cons_in) override
Definition: ERF_Radiation.H:62
real2d_k lw_clnsky_flux_dn
Definition: ERF_Radiation.H:426
amrex::BoxArray m_ba
Definition: ERF_Radiation.H:221
real2d_k p_lay
Definition: ERF_Radiation.H:385
real2d_k r_lay
Definition: ERF_Radiation.H:384
int m_ncol
Definition: ERF_Radiation.H:312
real2d_k sw_flux_dn_dir
Definition: ERF_Radiation.H:409
const std::vector< amrex::Real > m_mol_weight_gas
Definition: ERF_Radiation.H:288
amrex::Real m_lat_cons
Definition: ERF_Radiation.H:263
amrex::Real m_fixed_total_solar_irradiance
Definition: ERF_Radiation.H:344
void kokkos_buffers_to_mf(amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs)
Definition: ERF_Radiation.cpp:597
std::vector< std::string > gas_names_offset
Definition: ERF_Radiation.H:304
real2d_k sw_clrsky_flux_dn
Definition: ERF_Radiation.H:416
amrex::Real m_dt
Definition: ERF_Radiation.H:215
virtual amrex::Vector< std::string > get_lsm_input_varnames() override
Definition: ERF_Radiation.H:178
int m_orbital_mon
Definition: ERF_Radiation.H:329
real3d_k aero_ssa_sw
Definition: ERF_Radiation.H:447
real2d_k sw_clnsky_flux_dn_dir
Definition: ERF_Radiation.H:420
amrex::Real m_o2vmr
Definition: ERF_Radiation.H:297
void rad_run_impl(amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs)
Definition: ERF_Radiation.H:164
GasConcsK< amrex::Real, layout_t, KokkosDefaultDevice > m_gas_concs
Definition: ERF_Radiation.H:306
amrex::MultiFab * m_qheating_rates
Definition: ERF_Radiation.H:253
real2d_k qc_lay
Definition: ERF_Radiation.H:390
virtual void WriteDataLog(const amrex::Real &time) override
Definition: ERF_Radiation.cpp:816
real2d_k lw_clrsky_flux_up
Definition: ERF_Radiation.H:423
amrex::Real m_n2ovmr
Definition: ERF_Radiation.H:294
amrex::Real m_rad_t_sfc
Definition: ERF_Radiation.H:247
std::string rrtmgp_file_path
Definition: ERF_Radiation.H:274
real2d_k sw_flux_dn
Definition: ERF_Radiation.H:408
amrex::MultiFab * m_lsm_zenith
Definition: ERF_Radiation.H:268
int m_nlwbands
Definition: ERF_Radiation.H:353
real2d_k tmp2d
Definition: ERF_Radiation.H:395
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::Vector< amrex::MultiFab * > &lsm_input_ptrs, amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs, amrex::MultiFab *qheating_rates, amrex::MultiFab *z_phys, amrex::MultiFab *lat, amrex::MultiFab *lon) override
Definition: ERF_Radiation.H:90
real2d_k lw_clrsky_flux_dn
Definition: ERF_Radiation.H:424
amrex::Real m_orbital_eccen
Definition: ERF_Radiation.H:337
void finalize_impl(amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs)
Definition: ERF_Radiation.cpp:1219
amrex::Real m_covmr
Definition: ERF_Radiation.H:295
int m_orbital_sec
Definition: ERF_Radiation.H:331
real2d_k z_del
Definition: ERF_Radiation.H:387
real2d_k p_del
Definition: ERF_Radiation.H:388
real3d_k aero_tau_lw
Definition: ERF_Radiation.H:449
real2d_k lw_flux_dn
Definition: ERF_Radiation.H:411
~Radiation()
Definition: ERF_Radiation.H:55
void mf_to_kokkos_buffers(amrex::Vector< amrex::MultiFab * > &lsm_input_ptrs)
Definition: ERF_Radiation.cpp:418
real2d_k sw_clrsky_flux_dn_dir
Definition: ERF_Radiation.H:417
void write_rrtmgp_fluxes()
Definition: ERF_Radiation.cpp:686
std::string rrtmgp_coeffs_file_lw
Definition: ERF_Radiation.H:280
int m_lev
Definition: ERF_Radiation.H:206
real1d_k sfc_flux_dif_nir
Definition: ERF_Radiation.H:376
int m_ngas
Definition: ERF_Radiation.H:285
real2d_k lw_heating
Definition: ERF_Radiation.H:399
real1d_k sfc_alb_dir_nir
Definition: ERF_Radiation.H:370
real2d_k lw_clnsky_flux_up
Definition: ERF_Radiation.H:425
amrex::Real m_ch4vmr
Definition: ERF_Radiation.H:296
bool m_update_rad
Definition: ERF_Radiation.H:224
real2d_k sfc_alb_dir
Definition: ERF_Radiation.H:439
bool m_ice
Definition: ERF_Radiation.H:233
amrex::Real m_fixed_solar_zenith_angle
Definition: ERF_Radiation.H:348
real1d_k lon
Definition: ERF_Radiation.H:378
int m_orbital_day
Definition: ERF_Radiation.H:330
real1d_k sfc_emis
Definition: ERF_Radiation.H:379
amrex::Real m_orbital_obliq
Definition: ERF_Radiation.H:338
amrex::Real m_n2vmr
Definition: ERF_Radiation.H:298
real3d_k cld_tau_sw_bnd
Definition: ERF_Radiation.H:452
bool m_fixed_orbital_year
Definition: ERF_Radiation.H:336
real2d_k sw_clnsky_flux_up
Definition: ERF_Radiation.H:418
int m_nlay
Definition: ERF_Radiation.H:313
real3d_k lw_bnd_flux_up
Definition: ERF_Radiation.H:435
int m_nswgpts
Definition: ERF_Radiation.H:354
bool m_first_step
Definition: ERF_Radiation.H:229
real1d_k sfc_alb_dir_vis
Definition: ERF_Radiation.H:369
const std::vector< std::string > m_gas_names
Definition: ERF_Radiation.H:286
real2d_k sw_clrsky_heating
Definition: ERF_Radiation.H:400
bool m_extra_clnclrsky_diag
Definition: ERF_Radiation.H:323
real2d_k t_lay
Definition: ERF_Radiation.H:386
void set_grids(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::Vector< amrex::MultiFab * > &lsm_input_ptrs, amrex::MultiFab *qheating_rates, amrex::MultiFab *z_phys, amrex::MultiFab *lat, amrex::MultiFab *lon)
Definition: ERF_Radiation.cpp:117
real1d_k sfc_flux_dir_vis
Definition: ERF_Radiation.H:373
real2d_k iwp
Definition: ERF_Radiation.H:397
amrex::Geometry m_geom
Definition: ERF_Radiation.H:218
amrex::MultiFab * m_lat
Definition: ERF_Radiation.H:259
real2d_k p_lev
Definition: ERF_Radiation.H:405
real2d_k lw_clrsky_heating
Definition: ERF_Radiation.H:401
real2d_k eff_radius_qc
Definition: ERF_Radiation.H:393
real1d_k cosine_zenith
Definition: ERF_Radiation.H:367
amrex::Vector< int > m_col_offsets
Definition: ERF_Radiation.H:316
real1d_k t_sfc
Definition: ERF_Radiation.H:380
void alloc_buffers()
Definition: ERF_Radiation.cpp:184
int m_orbital_year
Definition: ERF_Radiation.H:328
real2d_k sw_clnclrsky_flux_dn
Definition: ERF_Radiation.H:413
amrex::Vector< std::string > m_lsm_input_names
Definition: ERF_Radiation.H:239
amrex::Real m_time
Definition: ERF_Radiation.H:212
Definition: ERF_DataStruct.H:123