ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
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++ YAKL 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 <YAKL.h>
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  // Constructor
49  Radiation (const int& lev,
50  SolverChoice& sc);
51 
52  // Destructor
53  ~Radiation () = default;
54 
55  virtual void Init(const amrex::Geometry& geom,
56  const amrex::BoxArray& ba,
57  amrex::MultiFab* cons_in) override {};
58 
59  virtual void Run(int& level,
60  int& step,
61  amrex::Real& time,
62  const amrex::Real& dt,
63  const amrex::BoxArray& ba,
64  amrex::Geometry& geom,
65  amrex::MultiFab* cons_in,
66  amrex::MultiFab* lsm_fluxes,
67  amrex::MultiFab* lsm_zenith,
68  amrex::MultiFab* qheating_rates,
69  amrex::MultiFab* z_phys,
70  amrex::MultiFab* lat,
71  amrex::MultiFab* lon) override
72  {
73  set_grids(level, step, time, dt, ba, geom, cons_in, lsm_fluxes, lsm_zenith, qheating_rates, z_phys, lat, lon);
74  rad_run_impl();
75  }
76 
77  // Set the grid info for columnar data in YAKL
78  void
79  set_grids (int& level,
80  int& step,
81  amrex::Real& time,
82  const amrex::Real& dt,
83  const amrex::BoxArray& ba,
84  amrex::Geometry& geom,
85  amrex::MultiFab* cons_in,
86  amrex::MultiFab* lsm_fluxes,
87  amrex::MultiFab* lsm_zenith,
88  amrex::MultiFab* qheating_rates,
89  amrex::MultiFab* z_phys,
90  amrex::MultiFab* lat,
91  amrex::MultiFab* lon);
92 
93  template<typename LandSurfaceModelType>
94  void set_lsm_inputs(LandSurfaceModelType *model)
95  {
96  if constexpr(std::is_same_v<LandSurfaceModelType, SLM>)
97  {
98  if (!m_update_rad)
99  {
100  // skip getting LSM inputs if radiation not updating this timestep
101  return;
102  }
103 
104  // get surface temperature, LW flux, and emissivities from SLM
105  /*
106  auto slm_to_rad_vars = model->export_to_RRTMGP();
107 
108  for (amrex::MFIter mfi(*slm_to_rad_vars[0]); mfi.isValid(); ++mfi) {
109  const auto& vbx = mfi.validbox();
110  const auto& sbx = amrex::makeSlab(vbx, 2, 0);
111 
112  const int nx = vbx.length(0);
113  const int imin = vbx.smallEnd(0);
114  const int jmin = vbx.smallEnd(1);
115  const int offset = m_col_offsets[mfi.index()];
116 
117  const auto &slm_tsurf = slm_to_rad_vars[0]->const_array(mfi);
118  const auto &slm_alb_dir_vis_arr = slm_to_rad_vars[2]->const_array(mfi);
119  const auto &slm_alb_dir_nir_arr = slm_to_rad_vars[4]->const_array(mfi);
120  const auto &slm_IR_emis_arr = slm_to_rad_vars[5]->const_array(mfi);
121  const auto &slm_net_rad_arr = slm_to_rad_vars[6]->const_array(mfi);
122  amrex::ParallelFor(sbx, [=] AMREX_GPU_DEVICE (int i, int j, int k)
123  {
124  // map [i,j,k] 0-based to [icol, ilay] 1-based
125  const int icol = (j-jmin)*nx + (i-imin) + 1 + offset;
126  const int ilay = 1;
127 
128  t_sfc(icol) = slm_tsurf(i, j, k);
129 
130  sfc_alb_dir_vis(icol) = slm_alb_dir_vis_arr(i, j, k);
131  sfc_alb_dir_nir(icol) = slm_alb_dir_nir_arr(i, j, k);
132  sfc_alb_dif_vis(icol) = slm_alb_dir_vis_arr(i, j, k);
133  sfc_alb_dif_nir(icol) = slm_alb_dir_nir_arr(i, j, k);
134 
135  sfc_emis(icol) = slm_IR_emis_arr(i, j, k);
136 
137  //lw_src(icol) = slm_net_rad_arr(i, j, k, SLM_NetRad::net_lwup1);
138  lw_src(icol) = 0.0; // TODO
139  });
140  }
141 
142  // expand sfc_emis and lw_src over nlwbands
143  // TODO: check if this is correct - should emissivity vary based on band?
144  yakl::fortran::parallel_for(yakl::fortran::SimpleBounds<2>(m_nlwbands, m_ncol), YAKL_LAMBDA(const int ibnd, const int icol)
145  {
146  emis_sfc(icol, ibnd) = sfc_emis(icol);
147  });
148  */
149 
150  yakl::memset(emis_sfc, 0.95);
151  yakl::memset(lw_src, 0.0);
152  }
153  }
154 
155  // Initialize the temporary variables
156  void
157  alloc_buffers ();
158 
159  // Clear the temporary variables
160  void
161  dealloc_buffers ();
162 
163  // Fill YAKL Arrays from AMReX MultiFabs
164  void
166 
167  // Fill AMReX MultiFabs from YAKL Arrays
168  void
170 
171  // Write the rrtmgp fluxes
172  void
174 
175  // Initialize the implementation
176  void
177  initialize_impl ();
178 
179  // Run the implementation
180  void
181  run_impl ();
182 
183  // Finalize the implementation
184  void
185  finalize_impl ();
186 
187  // Wrapper for implementation steps
188  void
190  {
191  if (m_update_rad) {
192  amrex::Print() << "Advancing radiation at level: " << m_lev << " ...";
193  this->initialize_impl();
194  this->run_impl();
195  this->finalize_impl();
196  amrex::Print() << "DONE\n";
197  }
198  }
199 
200  void populateDatalogMF();
201 
202  virtual void WriteDataLog(const amrex::Real &time) override;
203 
204 private:
205 
206  // Process interface vars from ERF/AMReX
207  //===================================================================================
208 
209  // Grid level
210  int m_lev;
211 
212  // Step number
213  int m_step;
214 
215  // Current time
216  amrex::Real m_time;
217 
218  // Timestep at given level
219  amrex::Real m_dt;
220 
221  // Geometry at given level
222  amrex::Geometry m_geom;
223 
224  // Boxarray at given level
225  amrex::BoxArray m_ba;
226 
227  // Are we updating radiation?
228  bool m_update_rad = false;
229 
230  // Are we writing out the fluxes?
231  bool m_rad_write_fluxes = false;
232 
233  bool m_first_step = true;
234 
235  // Do we have moisture and cold comps?
236  bool m_moist = false;
237  bool m_ice = false;
238 
239  // Do we have a land surface model?
240  bool m_lsm = false;
241 
242  // Pointer to the CC conserved vars
243  amrex::MultiFab* m_cons_in = nullptr;
244 
245  // Pointer to the radiation source terms
246  amrex::MultiFab* m_qheating_rates = nullptr;
247 
248  // Pointer to the terrain heights
249  amrex::MultiFab* m_z_phys = nullptr;
250 
251  // Pointer to latitude and longitude
252  amrex::MultiFab* m_lat = nullptr;
253  amrex::MultiFab* m_lon = nullptr;
254 
255  // Constant lat/lon if the above MFs are not valid
256  amrex::Real m_lat_cons = 39.809860;
257  amrex::Real m_lon_cons = -98.555183;
258 
259  // Pointer to output data for LSM
260  amrex::MultiFab* m_lsm_fluxes = nullptr;
261  amrex::MultiFab* m_lsm_zenith = nullptr;
262 
263  // Holds output from YAKL arrays used in the datalog
264  amrex::MultiFab datalog_mf;
265 
266  // Path, data file, and coefficient file for K-distribution
267  std::string rrtmgp_file_path = ".";
268  std::string rrtmgp_coeffs_sw = "rrtmgp-data-sw-g224-2018-12-04.nc";
269  std::string rrtmgp_coeffs_lw = "rrtmgp-data-lw-g224-2018-12-04.nc";
270  std::string rrtmgp_cloud_optics_sw = "rrtmgp-cloud-optics-coeffs-sw.nc";
271  std::string rrtmgp_cloud_optics_lw = "rrtmgp-cloud-optics-coeffs-lw.nc";
276 
277  // Active gases
278  int m_ngas = 8;
279  const std::vector<std::string> m_gas_names = {"H2O", "CO2", "O3", "N2O",
280  "CO" , "CH4", "O2", "N2" };
281  const std::vector<amrex::Real> m_mol_weight_gas = {18.01528, 44.00950, 47.9982, 44.0128,
282  28.01010, 16.04246, 31.9980, 28.0134}; // g/mol
283 
284  // Prescribed greenhouse gas surface concentrations in moles / moles air
285  amrex::Real m_co2vmr = 388.717e-6;
286  amrex::Vector<amrex::Real> m_o3vmr;
287  amrex::Real m_n2ovmr = 323.141e-9;
288  amrex::Real m_covmr = 1.0e-7;
289  amrex::Real m_ch4vmr = 1807.851e-9;
290  amrex::Real m_o2vmr = 0.209448;
291  amrex::Real m_n2vmr = 0.7906;
292  //amrex::Real m_f11vmr = 768.7644e-12;
293  //amrex::Real m_f12vmr = 531.2820e-12;
294 
298  GasConcs m_gas_concs;
299 
300  // Process interface vars modeled after EAMXX
301  //===================================================================================
302 
303  // Keep track of number of columns and levels
304  int m_ncol;
305  int m_nlay;
306 
307  // Offsets for MultiFab <-> YAKL transfer
308  amrex::Vector<int> m_col_offsets;
309 
310  // Whether we use aerosol forcing in radiation
311  bool m_do_aerosol_rad = true;
312 
313  // Whether we do extra aerosol forcing calls
314  bool m_extra_clnsky_diag = false;
316 
317  // The orbital year, used for zenith angle calculations:
318  // If > 0, use constant orbital year for duration of simulation
319  // If < 0, use year from timestamp for orbital parameters
320  int m_orbital_year = -9999;
321  int m_orbital_mon = -9999;
322  int m_orbital_day = -9999;
323  int m_orbital_sec = -9999;
324 
325  // Orbital parameters, used for zenith angle calculations.
326  // If >= 0, bypass computation based on orbital year and use fixed parameters
327  // If < 0, compute based on orbital year, specified above
328  bool m_fixed_orbital_year = false;
329  amrex::Real m_orbital_eccen = -9999.; // Eccentricity
330  amrex::Real m_orbital_obliq = -9999.; // Obliquity
331  amrex::Real m_orbital_mvelp = -9999.; // Vernal Equinox Mean Longitude of Perihelion
332 
333  // Value for prescribing an invariant solar constant (i.e. total solar irradiance
334  // at TOA). Used for idealized experiments such as RCE. This is only used when a
335  // positive value is supplied.
336  amrex::Real m_fixed_total_solar_irradiance = -9999.;
337 
338  // Fixed solar zenith angle to use for shortwave calculations
339  // This is only used if a positive value is supplied
340  amrex::Real m_fixed_solar_zenith_angle = -9999.;
341 
342  // Need to hard-code some dimension sizes for now.
343  // TODO: find a better way of configuring this
344  int m_nswbands = 14;
345  int m_nlwbands = 16;
346  int m_nswgpts = 112;
347  int m_nlwgpts = 128;
348 
349  // Rad frequency in number of steps
351 
352  // Whether or not to do subcolumn sampling of cloud state for MCICA
353  bool m_do_subcol_sampling = true;
354 
355  // 1d size (1 or nlay)
356  real1d o3_lay;
357 
358  // 1d size (ncol)
360  real1d mu0;
369  real1d lat;
370  real1d lon;
371  real1d sfc_emis;
372  real1d t_sfc;
373  real1d lw_src;
374 
375  // 2d size (ncol, nlay)
376  real2d r_lay;
377  real2d p_lay;
378  real2d t_lay;
379  real2d z_del;
380  real2d p_del;
381  real2d qv_lay;
382  real2d qc_lay;
383  real2d qi_lay;
384  real2d cldfrac_tot;
387  real2d tmp2d;
388  real2d lwp;
389  real2d iwp;
390  real2d sw_heating;
391  real2d lw_heating;
394 
395  // 2d size (ncol, nlay+1)
396  real2d d_tint;
397  real2d p_lev;
398  real2d t_lev;
399  real2d sw_flux_up;
400  real2d sw_flux_dn;
402  real2d lw_flux_up;
403  real2d lw_flux_dn;
419 
420  // 3d size (ncol, nlay+1, nswbands)
425 
426  // 3d size (ncol, nlay+1, nlwbands)
429 
430  // 2d size (ncol, nswbands)
431  real2d sfc_alb_dir;
432  real2d sfc_alb_dif;
433 
434  // 2d size (ncol, nlwbands)
435  real2d emis_sfc;
436 
437  // 3d size (ncol, nlay, n[sw,lw]bands)
438  real3d aero_tau_sw;
439  real3d aero_ssa_sw;
440  real3d aero_g_sw;
441  real3d aero_tau_lw;
442 
443  // 3d size (ncol, nlay, n[sw,lw]bnds)
446 
447  // 3d size (ncol, nlay, n[sw,lw]gpts)
450 };
451 #endif
Definition: ERF_RadiationInterface.H:14
Definition: ERF_Radiation.H:45
amrex::MultiFab * m_lon
Definition: ERF_Radiation.H:253
real2d z_del
Definition: ERF_Radiation.H:379
real2d qv_lay
Definition: ERF_Radiation.H:381
real1d sfc_flux_dif_nir
Definition: ERF_Radiation.H:368
real2d sw_clrsky_flux_up
Definition: ERF_Radiation.H:407
real1d sfc_alb_dif_vis
Definition: ERF_Radiation.H:363
int m_o3_size
Definition: ERF_Radiation.H:295
real2d sw_clrsky_flux_dn_dir
Definition: ERF_Radiation.H:409
real2d lw_flux_dn
Definition: ERF_Radiation.H:403
std::string rrtmgp_coeffs_file_sw
Definition: ERF_Radiation.H:272
std::string rrtmgp_coeffs_sw
Definition: ERF_Radiation.H:268
real1d sfc_flux_dir_vis
Definition: ERF_Radiation.H:365
int m_rad_freq_in_steps
Definition: ERF_Radiation.H:350
real2d lw_clrsky_heating
Definition: ERF_Radiation.H:393
real2d lw_clrsky_flux_dn
Definition: ERF_Radiation.H:416
real2d sw_clnclrsky_flux_dn
Definition: ERF_Radiation.H:405
void dealloc_buffers()
Definition: ERF_Radiation.cpp:316
amrex::Real m_lon_cons
Definition: ERF_Radiation.H:257
void initialize_impl()
Definition: ERF_Radiation.cpp:843
int m_nswbands
Definition: ERF_Radiation.H:344
bool m_do_aerosol_rad
Definition: ERF_Radiation.H:311
std::string rrtmgp_coeffs_lw
Definition: ERF_Radiation.H:269
bool m_moist
Definition: ERF_Radiation.H:236
real2d sw_clnsky_flux_dn
Definition: ERF_Radiation.H:411
std::string rrtmgp_cloud_optics_file_lw
Definition: ERF_Radiation.H:275
real2d sw_clnsky_flux_up
Definition: ERF_Radiation.H:410
real3d cld_tau_lw_bnd
Definition: ERF_Radiation.H:445
amrex::MultiFab * m_cons_in
Definition: ERF_Radiation.H:243
amrex::MultiFab datalog_mf
Definition: ERF_Radiation.H:264
Radiation(const int &lev, SolverChoice &sc)
Definition: ERF_Radiation.cpp:23
real3d aero_ssa_sw
Definition: ERF_Radiation.H:439
bool m_lsm
Definition: ERF_Radiation.H:240
real2d qi_lay
Definition: ERF_Radiation.H:383
bool m_do_subcol_sampling
Definition: ERF_Radiation.H:353
real1d lw_src
Definition: ERF_Radiation.H:373
bool m_rad_write_fluxes
Definition: ERF_Radiation.H:231
real2d sw_flux_dn_dir
Definition: ERF_Radiation.H:401
real1d sfc_flux_dif_vis
Definition: ERF_Radiation.H:367
real2d lw_clrsky_flux_up
Definition: ERF_Radiation.H:415
void set_lsm_inputs(LandSurfaceModelType *model)
Definition: ERF_Radiation.H:94
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) override
Definition: ERF_Radiation.H:59
real1d lat
Definition: ERF_Radiation.H:369
real2d iwp
Definition: ERF_Radiation.H:389
real2d t_lev
Definition: ERF_Radiation.H:398
std::string rrtmgp_cloud_optics_file_sw
Definition: ERF_Radiation.H:274
void run_impl()
Definition: ERF_Radiation.cpp:854
real2d sw_clnclrsky_flux_dn_dir
Definition: ERF_Radiation.H:406
int m_step
Definition: ERF_Radiation.H:213
void populateDatalogMF()
Definition: ERF_Radiation.cpp:648
real2d lw_clnsky_flux_dn
Definition: ERF_Radiation.H:418
amrex::Real m_orbital_mvelp
Definition: ERF_Radiation.H:331
real2d eff_radius_qc
Definition: ERF_Radiation.H:385
amrex::Vector< amrex::Real > m_o3vmr
Definition: ERF_Radiation.H:286
std::string rrtmgp_cloud_optics_sw
Definition: ERF_Radiation.H:270
void finalize_impl()
Definition: ERF_Radiation.cpp:1087
int m_nlwgpts
Definition: ERF_Radiation.H:347
real3d sw_bnd_flux_dif
Definition: ERF_Radiation.H:424
real2d sw_heating
Definition: ERF_Radiation.H:390
amrex::MultiFab * m_z_phys
Definition: ERF_Radiation.H:249
real1d t_sfc
Definition: ERF_Radiation.H:372
void mf_to_yakl_buffers()
Definition: ERF_Radiation.cpp:422
real2d sfc_alb_dir
Definition: ERF_Radiation.H:431
real3d aero_tau_sw
Definition: ERF_Radiation.H:438
real2d r_lay
Definition: ERF_Radiation.H:376
std::string rrtmgp_cloud_optics_lw
Definition: ERF_Radiation.H:271
amrex::Real m_co2vmr
Definition: ERF_Radiation.H:285
real2d emis_sfc
Definition: ERF_Radiation.H:435
bool m_extra_clnsky_diag
Definition: ERF_Radiation.H:314
real1d o3_lay
Definition: ERF_Radiation.H:356
amrex::MultiFab * m_lsm_fluxes
Definition: ERF_Radiation.H:260
virtual void Init(const amrex::Geometry &geom, const amrex::BoxArray &ba, amrex::MultiFab *cons_in) override
Definition: ERF_Radiation.H:55
amrex::BoxArray m_ba
Definition: ERF_Radiation.H:225
real2d sfc_alb_dif
Definition: ERF_Radiation.H:432
real1d sfc_emis
Definition: ERF_Radiation.H:371
int m_ncol
Definition: ERF_Radiation.H:304
real2d sw_clnclrsky_flux_up
Definition: ERF_Radiation.H:404
const std::vector< amrex::Real > m_mol_weight_gas
Definition: ERF_Radiation.H:281
real3d cld_tau_lw_gpt
Definition: ERF_Radiation.H:449
real1d sfc_flux_dir_nir
Definition: ERF_Radiation.H:366
real1d lon
Definition: ERF_Radiation.H:370
real3d lw_bnd_flux_up
Definition: ERF_Radiation.H:427
amrex::Real m_lat_cons
Definition: ERF_Radiation.H:256
amrex::Real m_fixed_total_solar_irradiance
Definition: ERF_Radiation.H:336
real3d cld_tau_sw_gpt
Definition: ERF_Radiation.H:448
amrex::Real m_dt
Definition: ERF_Radiation.H:219
real3d lw_bnd_flux_dn
Definition: ERF_Radiation.H:428
int m_orbital_mon
Definition: ERF_Radiation.H:321
amrex::Real m_o2vmr
Definition: ERF_Radiation.H:290
real2d lw_flux_up
Definition: ERF_Radiation.H:402
amrex::MultiFab * m_qheating_rates
Definition: ERF_Radiation.H:246
real1d mu0
Definition: ERF_Radiation.H:360
virtual void WriteDataLog(const amrex::Real &time) override
Definition: ERF_Radiation.cpp:708
amrex::Real m_n2ovmr
Definition: ERF_Radiation.H:287
real3d sw_bnd_flux_up
Definition: ERF_Radiation.H:421
real2d sw_clrsky_heating
Definition: ERF_Radiation.H:392
real2d cldfrac_tot
Definition: ERF_Radiation.H:384
real3d aero_tau_lw
Definition: ERF_Radiation.H:441
real3d sw_bnd_flux_dn
Definition: ERF_Radiation.H:422
std::string rrtmgp_file_path
Definition: ERF_Radiation.H:267
real1d cosine_zenith
Definition: ERF_Radiation.H:359
amrex::MultiFab * m_lsm_zenith
Definition: ERF_Radiation.H:261
real2d p_lay
Definition: ERF_Radiation.H:377
int m_nlwbands
Definition: ERF_Radiation.H:345
real2d lw_clnclrsky_flux_up
Definition: ERF_Radiation.H:413
real2d lw_heating
Definition: ERF_Radiation.H:391
amrex::Real m_orbital_eccen
Definition: ERF_Radiation.H:329
real2d lw_clnclrsky_flux_dn
Definition: ERF_Radiation.H:414
real3d aero_g_sw
Definition: ERF_Radiation.H:440
amrex::Real m_covmr
Definition: ERF_Radiation.H:288
int m_orbital_sec
Definition: ERF_Radiation.H:323
real1d sfc_alb_dif_nir
Definition: ERF_Radiation.H:364
void write_rrtmgp_fluxes()
Definition: ERF_Radiation.cpp:614
std::string rrtmgp_coeffs_file_lw
Definition: ERF_Radiation.H:273
int m_lev
Definition: ERF_Radiation.H:210
real1d sfc_alb_dir_vis
Definition: ERF_Radiation.H:361
int m_ngas
Definition: ERF_Radiation.H:278
real2d p_del
Definition: ERF_Radiation.H:380
real2d t_lay
Definition: ERF_Radiation.H:378
void yakl_buffers_to_mf()
Definition: ERF_Radiation.cpp:540
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::MultiFab *qheating_rates, amrex::MultiFab *z_phys, amrex::MultiFab *lat, amrex::MultiFab *lon)
Definition: ERF_Radiation.cpp:119
amrex::Real m_ch4vmr
Definition: ERF_Radiation.H:289
bool m_update_rad
Definition: ERF_Radiation.H:228
bool m_ice
Definition: ERF_Radiation.H:237
amrex::Real m_fixed_solar_zenith_angle
Definition: ERF_Radiation.H:340
real2d sw_flux_up
Definition: ERF_Radiation.H:399
real2d p_lev
Definition: ERF_Radiation.H:397
~Radiation()=default
int m_orbital_day
Definition: ERF_Radiation.H:322
real2d lw_clnsky_flux_up
Definition: ERF_Radiation.H:417
real1d sfc_alb_dir_nir
Definition: ERF_Radiation.H:362
amrex::Real m_orbital_obliq
Definition: ERF_Radiation.H:330
amrex::Real m_n2vmr
Definition: ERF_Radiation.H:291
bool m_fixed_orbital_year
Definition: ERF_Radiation.H:328
int m_nlay
Definition: ERF_Radiation.H:305
real2d lwp
Definition: ERF_Radiation.H:388
int m_nswgpts
Definition: ERF_Radiation.H:346
bool m_first_step
Definition: ERF_Radiation.H:233
const std::vector< std::string > m_gas_names
Definition: ERF_Radiation.H:279
bool m_extra_clnclrsky_diag
Definition: ERF_Radiation.H:315
real2d sw_clnsky_flux_dn_dir
Definition: ERF_Radiation.H:412
void rad_run_impl()
Definition: ERF_Radiation.H:189
amrex::Geometry m_geom
Definition: ERF_Radiation.H:222
amrex::MultiFab * m_lat
Definition: ERF_Radiation.H:252
string1dv gas_names_yakl_offset
Definition: ERF_Radiation.H:297
real3d cld_tau_sw_bnd
Definition: ERF_Radiation.H:444
amrex::Vector< int > m_col_offsets
Definition: ERF_Radiation.H:308
real2d eff_radius_qi
Definition: ERF_Radiation.H:386
real2d tmp2d
Definition: ERF_Radiation.H:387
real2d qc_lay
Definition: ERF_Radiation.H:382
GasConcs m_gas_concs
Definition: ERF_Radiation.H:298
real2d sw_flux_dn
Definition: ERF_Radiation.H:400
void alloc_buffers()
Definition: ERF_Radiation.cpp:197
int m_orbital_year
Definition: ERF_Radiation.H:320
real2d sw_clrsky_flux_dn
Definition: ERF_Radiation.H:408
real2d d_tint
Definition: ERF_Radiation.H:396
real1d m_gas_mol_weights
Definition: ERF_Radiation.H:296
amrex::Real m_time
Definition: ERF_Radiation.H:216
real3d sw_bnd_flux_dir
Definition: ERF_Radiation.H:423
Definition: ERF_DataStruct.H:99