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/amrex::Real(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  // Release k-distribution data and memory pool
58  if (rrtmgp::initialized) {
60  }
61  // Note that Kokkos is now finalized in main.cpp
62  }
63 
64  virtual
65  void
66  Init (const amrex::Geometry& geom,
67  const amrex::BoxArray& ba,
68  amrex::MultiFab* cons_in) override
69  {
70  // Ensure the boxes span klo -> khi
71  int klo = geom.Domain().smallEnd(2);
72  int khi = geom.Domain().bigEnd(2);
73 
74  // Reset vector of offsets for columnar data
75  m_nlay = geom.Domain().length(2);
76 
77  m_ncol = 0;
78  m_col_offsets.clear();
79  m_col_offsets.resize(int(ba.size()));
80  for (amrex::MFIter mfi(*cons_in); mfi.isValid(); ++mfi) {
81  const amrex::Box& vbx = mfi.validbox();
82  AMREX_ALWAYS_ASSERT_WITH_MESSAGE((klo == vbx.smallEnd(2)) &&
83  (khi == vbx.bigEnd(2)),
84  "Vertical decomposition with radiation is not allowed.");
85  int nx = vbx.length(0);
86  int ny = vbx.length(1);
87  m_col_offsets[mfi.index()] = m_ncol;
88  m_ncol += nx * ny;
89  }
90 
91  // Recompute the effective chunk size from the user's request rather than
92  // clamping the stored value in place. Init() is called again for every
93  // MakeNewLevelFromScratch / MakeNewLevelFromCoarse / RemakeLevel on the same
94  // Radiation object, so an in-place clamp could only ever shrink: a rank that
95  // owned no boxes at some Init (m_ncol == 0) would pin the chunk size at zero
96  // and then spin forever in the run_impl chunk loop once a regrid handed it
97  // real boxes. Deriving from the immutable request instead lets the chunk size
98  // grow back. It is zero only when m_ncol is zero, and a rank with no columns
99  // does no radiation work.
101  };
102 
103  virtual
104  void
105  Run (int& level,
106  int& step,
107  double& time,
108  const double& dt,
109  const amrex::BoxArray& ba,
110  amrex::Geometry& geom,
111  amrex::MultiFab* cons_in,
112  amrex::iMultiFab* lmask,
113  amrex::MultiFab* t_surf,
114  amrex::Vector<amrex::MultiFab*>& lsm_input_ptrs,
115  amrex::Vector<amrex::MultiFab*>& lsm_output_ptrs,
116  amrex::MultiFab* qheating_rates,
117  amrex::MultiFab* rad_fluxes,
118  amrex::MultiFab* z_phys,
119  amrex::MultiFab* lat_ptr,
120  amrex::MultiFab* lon_ptr,
121  const bool updated_lsm) override
122  {
123  set_grids(level, step, time, dt, ba, geom,
124  cons_in, lmask, t_surf,
125  lsm_input_ptrs, qheating_rates,
126  rad_fluxes, z_phys, lat_ptr, lon_ptr,
127  updated_lsm);
128  rad_run_impl(lsm_output_ptrs);
129  }
130 
131  // Set the grid info for columnar data in KOKKOS
132  void
133  set_grids (int& level,
134  int& step,
135  double& time,
136  const double& dt,
137  const amrex::BoxArray& ba,
138  amrex::Geometry& geom,
139  amrex::MultiFab* cons_in,
140  amrex::iMultiFab* lmask,
141  amrex::MultiFab* t_surf,
142  amrex::Vector<amrex::MultiFab*>& lsm_input_ptrs,
143  amrex::MultiFab* qheating_rates,
144  amrex::MultiFab* rad_fluxes,
145  amrex::MultiFab* z_phys,
146  amrex::MultiFab* lat,
147  amrex::MultiFab* lon,
148  const bool updated_lsm);
149 
150  // Initialize the temporary variables
151  void
152  alloc_buffers ();
153 
154  // Clear the temporary variables
155  void
156  dealloc_buffers ();
157 
158  // Fill KOKKOS Views from AMReX MultiFabs
159  void
160  mf_to_kokkos_buffers(amrex::iMultiFab* lmask,
161  amrex::MultiFab* t_surf,
162  amrex::Vector<amrex::MultiFab*>& lsm_input_ptrs);
163 
164  // Fill AMReX MultiFabs from KOKKOS Views
165  void
166  kokkos_buffers_to_mf (amrex::Vector<amrex::MultiFab*>& lsm_output_ptrs);
167 
168  // Write the rrtmgp fluxes
169  void
171 
172  // Initialize the implementation
173  void
174  initialize_impl ();
175 
176  // Run the implementation
177  void
178  run_impl ();
179 
180  // Finalize the implementation
181  void
182  finalize_impl (amrex::Vector<amrex::MultiFab*>& lsm_output_ptrs);
183 
184  // Wrapper for implementation steps
185  void
186  rad_run_impl (amrex::Vector<amrex::MultiFab*>& lsm_output_ptrs)
187  {
188  if (m_update_rad) {
189  amrex::Print() << "Radiation advancing level " << m_lev << " at (YY-MM-DD SS) " << m_orbital_year << '-'
190  << m_orbital_mon << '-' << m_orbital_day << ' ' << m_orbital_sec << " ...";
191  this->initialize_impl();
192  this->run_impl();
193  this->finalize_impl(lsm_output_ptrs);
194  amrex::Print() << "DONE\n";
195  }
196  }
197 
198  // Get names input varnames for lsm
199  virtual
200  amrex::Vector<std::string>
202  {
203  return m_lsm_input_names;
204  }
205 
206  // Get names output varnames for lsm
207  virtual
208  amrex::Vector<std::string>
210  {
211  return m_lsm_output_names;
212  }
213 
214  // Populate datalog structures
215  void
217 
218  // Write datalog
219  virtual
220  void
221  WriteDataLog (const double &time) override;
222 
223 private:
224 
225  // Process interface vars from ERF/AMReX
226  //===================================================================================
227 
228  // Grid level
229  int m_lev;
230 
231  // Step number
232  int m_step;
233 
234  // Current time
235  double m_time;
236 
237  // Timestep at given level
238  double m_dt;
239 
240  // Geometry at given level
241  amrex::Geometry m_geom;
242 
243  // BoxArray at given level
244  amrex::BoxArray m_ba;
245 
246  // Are we updating radiation?
247  bool m_update_rad = false;
248 
249  // Are we writing out the fluxes?
250  bool m_rad_write_fluxes = false;
251 
252  // Do we have moisture and cold comps?
253  bool m_moist = false;
254  bool m_ice = false;
255  int m_qi_comp = -1;
256 
257  // Do we have a land surface model?
258  bool m_lsm = false;
259 
260  // List of input parameter names
261  amrex::Vector<std::string> m_lsm_input_names = {"t_sfc" , "sfc_emis" ,
262  "sfc_alb_dir_vis", "sfc_alb_dir_nir",
263  "sfc_alb_dif_vis", "sfc_alb_dif_nir"};
264 
265  // List of output parameter names
266  amrex::Vector<std::string> m_lsm_output_names = {"cos_zenith_angle" , "sw_flux_dn" ,
267  "sw_flux_dn_dir_vis", "sw_flux_dn_dir_nir",
268  "sw_flux_dn_dif_vis", "sw_flux_dn_dif_nir",
269  "lw_flux_dn"};
270 
271  // T surf if no LSM is available
273 
274  // Pointer to the CC conserved vars
275  amrex::MultiFab* m_cons_in = nullptr;
276 
277  // Pointer to the radiation source terms
278  amrex::MultiFab* m_qheating_rates = nullptr;
279 
280  // Pointer to the radiation fluxes
281  amrex::MultiFab* m_rad_fluxes = nullptr;
282 
283  // Pointer to the terrain heights
284  amrex::MultiFab* m_z_phys = nullptr;
285 
286  // Pointer to latitude and longitude
287  amrex::MultiFab* m_lat = nullptr;
288  amrex::MultiFab* m_lon = nullptr;
289 
290  // Constant lat/lon if the above MFs are not valid
293 
294  // Holds output from KOKKOS views used in the datalog
295  amrex::MultiFab datalog_mf;
296 
297  // Path, data file, and coefficient file for K-distribution
298  std::string rrtmgp_file_path = ".";
299  std::string rrtmgp_coeffs_sw = "rrtmgp-data-sw-g224-2018-12-04.nc";
300  std::string rrtmgp_coeffs_lw = "rrtmgp-data-lw-g256-2018-12-04.nc";
301  std::string rrtmgp_cloud_optics_sw = "rrtmgp-cloud-optics-coeffs-sw.nc";
302  std::string rrtmgp_cloud_optics_lw = "rrtmgp-cloud-optics-coeffs-lw.nc";
307 
308  // Active gases
309  int m_ngas = 8;
310  const std::vector<std::string> m_gas_names = {"H2O", "CO2", "O3", "N2O",
311  "CO" , "CH4", "O2", "N2" };
312  const std::vector<amrex::Real> m_mol_weight_gas = {amrex::Real(18.01528), amrex::Real(44.00950), amrex::Real(47.9982), amrex::Real(44.0128),
313  amrex::Real(28.01010), amrex::Real(16.04246), amrex::Real(31.9980), amrex::Real(28.0134)}; // g/mol
314 
315  // Prescribed greenhouse gas surface concentrations in moles / moles air
317  amrex::Vector<amrex::Real> m_o3vmr;
323  //amrex::Real m_f11vmr = amrex::Real(768.7644e-12);
324  //amrex::Real m_f12vmr = amrex::Real(531.2820e-12);
325 
328  std::vector<std::string> gas_names_offset;
329 
330  GasConcsK<amrex::Real, layout_t, KokkosDefaultDevice> m_gas_concs;
331 
332  // Process interface vars modeled after EAMXX
333  //===================================================================================
334 
335  // Keep track of number of columns and levels
336  int m_ncol;
337  int m_nlay;
338 
339  // Offsets for MultiFab <-> KOKKOS transfer
340  amrex::Vector<int> m_col_offsets;
341 
342  // Whether we use aerosol forcing in radiation.
343  // Aerosol plumbing is currently not implemented; this hook is retained so a
344  // future aerosol scheme can wire in without reintroducing the parameter.
345  // Setting it true today triggers an abort in the Radiation constructor.
346  bool m_do_aerosol_rad = false;
347 
348  // Whether we do extra aerosol forcing calls
349  bool m_extra_clnsky_diag = false;
351 
352  // The orbital year, used for zenith angle calculations:
353  // If > 0, use constant orbital year for duration of simulation
354  // If < 0, use year from timestamp for orbital parameters
355  int m_orbital_year = -9999;
356  int m_orbital_mon = -9999;
357  int m_orbital_day = -9999;
358  int m_orbital_sec = -9999;
359 
360  // Orbital parameters, used for zenith angle calculations.
361  // If >= 0, bypass computation based on orbital year and use fixed parameters
362  // If < 0, compute based on orbital year, specified above
363  bool m_fixed_orbital_year = false;
364  amrex::Real m_orbital_eccen = -amrex::Real(9999.); // Eccentricity
365  amrex::Real m_orbital_obliq = -amrex::Real(9999.); // Obliquity
366  amrex::Real m_orbital_mvelp = -amrex::Real(9999.); // Vernal Equinox Mean Longitude of Perihelion
367 
368  // Value for prescribing an invariant solar constant (i.e. total solar irradiance
369  // at TOA). Used for idealized experiments such as RCE. This is only used when a
370  // positive value is supplied.
372 
373  // Fixed solar zenith angle to use for shortwave calculations
374  // This is only used if a positive value is supplied
376 
377  // Dimensions to be read from lookup data
382 
383  // Rad frequency in number of steps
385 
386  // Number of columns to process per RRTMGP chunk (controls peak memory).
387  // m_ncol_chunk_requested is the user's erf.rad_ncol_chunk; it is set once in the
388  // constructor and never modified thereafter, so it is a valid upper bound on the
389  // chunk size for every level and every regrid. m_ncol_chunk is the effective chunk
390  // size for the current grids and is recomputed from the request in each Init();
391  // it is zero exactly when this rank owns no columns.
393  int m_ncol_chunk = 1024;
394 
395  // Number of vars for s_mem allocation
396  int m_rad_nvar = 12;
397 
398  // Whether or not to do subcolumn sampling of cloud state for MCICA
399  bool m_do_subcol_sampling = true;
400 
401  // 1d size (1 or nlay)
403 
404  // 1d size (ncol)
419 
420  // 2d size (ncol, nlay)
437 
438  // 2d size (ncol, nlay+1)
462 
463  // 3d size (ncol, nlay+1, nswbands)
468 
469  // 3d size (ncol, nlay+1, nlwbands)
472 
473  // 2d size (ncol, nswbands)
476 
477  // Aerosol optical properties. Dormant scaffolding kept so a future aerosol
478  // coupling (e.g. SPA, prescribed aerosol climatology) can populate these
479  // without re-adding members. Only allocated when m_do_aerosol_rad is true,
480  // which currently aborts in the constructor; when aerosol coupling is
481  // wired in, remove the abort and pass these into rrtmgp_main.
482  //
483  // 3d size (ncol, nlay, n[sw,lw]bands)
488 };
489 #endif
const int khi
Definition: ERF_InitCustomPert_Bubble.H:21
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(m_cloud_chamber_config.active, "Cloud Chamber: initializer reached without a parsed configuration")
Kokkos::View< RealT *, KokkosDefaultDevice > real1d_k
Definition: ERF_Kokkos.H:18
Kokkos::View< RealT ***, layout_t, KokkosDefaultDevice > real3d_k
Definition: ERF_Kokkos.H:20
Kokkos::View< RealT **, layout_t, KokkosDefaultDevice > real2d_k
Definition: ERF_Kokkos.H:19
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_RadiationInterface.H:14
Definition: ERF_Radiation.H:45
real3d_k sw_bnd_flux_dn
Definition: ERF_Radiation.H:465
amrex::MultiFab * m_lon
Definition: ERF_Radiation.H:288
real2d_k lw_flux_up
Definition: ERF_Radiation.H:445
virtual amrex::Vector< std::string > get_lsm_output_varnames() override
Definition: ERF_Radiation.H:209
real3d_k aero_tau_sw
Definition: ERF_Radiation.H:484
int m_o3_size
Definition: ERF_Radiation.H:326
real3d_k sw_bnd_flux_dir
Definition: ERF_Radiation.H:466
real2d_k sw_clnsky_flux_dn
Definition: ERF_Radiation.H:454
std::string rrtmgp_coeffs_file_sw
Definition: ERF_Radiation.H:303
std::string rrtmgp_coeffs_sw
Definition: ERF_Radiation.H:299
real2d_k d_tint
Definition: ERF_Radiation.H:439
real2d_k lw_clnclrsky_flux_dn
Definition: ERF_Radiation.H:457
int m_rad_freq_in_steps
Definition: ERF_Radiation.H:384
real2d_k lwp
Definition: ERF_Radiation.H:431
real1d_k lw_src
Definition: ERF_Radiation.H:418
real2d_k eff_radius_qi
Definition: ERF_Radiation.H:430
void dealloc_buffers()
Definition: ERF_Radiation.cpp:385
real1d_k m_gas_mol_weights
Definition: ERF_Radiation.H:327
amrex::Real m_lon_cons
Definition: ERF_Radiation.H:292
void initialize_impl()
Definition: ERF_Radiation.cpp:1052
int m_nswbands
Definition: ERF_Radiation.H:378
bool m_do_aerosol_rad
Definition: ERF_Radiation.H:346
std::string rrtmgp_coeffs_lw
Definition: ERF_Radiation.H:300
bool m_moist
Definition: ERF_Radiation.H:253
std::string rrtmgp_cloud_optics_file_lw
Definition: ERF_Radiation.H:306
amrex::MultiFab * m_cons_in
Definition: ERF_Radiation.H:275
amrex::MultiFab datalog_mf
Definition: ERF_Radiation.H:295
Radiation(const int &lev, SolverChoice &sc)
Definition: ERF_Radiation.cpp:20
int m_ncol_chunk_requested
Definition: ERF_Radiation.H:392
real2d_k sw_heating
Definition: ERF_Radiation.H:433
bool m_lsm
Definition: ERF_Radiation.H:258
bool m_do_subcol_sampling
Definition: ERF_Radiation.H:399
real3d_k lw_bnd_flux_dn
Definition: ERF_Radiation.H:471
bool m_rad_write_fluxes
Definition: ERF_Radiation.H:250
real3d_k sw_bnd_flux_up
Definition: ERF_Radiation.H:464
real2d_k qv_lay
Definition: ERF_Radiation.H:425
int m_qi_comp
Definition: ERF_Radiation.H:255
std::string rrtmgp_cloud_optics_file_sw
Definition: ERF_Radiation.H:305
amrex::Vector< std::string > m_lsm_output_names
Definition: ERF_Radiation.H:266
void run_impl()
Definition: ERF_Radiation.cpp:1077
real2d_k sw_clnclrsky_flux_dn_dir
Definition: ERF_Radiation.H:449
real1d_k sfc_flux_dif_vis
Definition: ERF_Radiation.H:412
int m_step
Definition: ERF_Radiation.H:232
real2d_k lw_clnclrsky_flux_up
Definition: ERF_Radiation.H:456
void set_grids(int &level, int &step, double &time, const double &dt, const amrex::BoxArray &ba, amrex::Geometry &geom, amrex::MultiFab *cons_in, amrex::iMultiFab *lmask, amrex::MultiFab *t_surf, amrex::Vector< amrex::MultiFab * > &lsm_input_ptrs, amrex::MultiFab *qheating_rates, amrex::MultiFab *rad_fluxes, amrex::MultiFab *z_phys, amrex::MultiFab *lat, amrex::MultiFab *lon, const bool updated_lsm)
Definition: ERF_Radiation.cpp:160
real1d_k lat
Definition: ERF_Radiation.H:414
void populateDatalogMF()
Definition: ERF_Radiation.cpp:811
real2d_k qi_lay
Definition: ERF_Radiation.H:427
real2d_k sw_clrsky_flux_up
Definition: ERF_Radiation.H:450
amrex::Real m_orbital_mvelp
Definition: ERF_Radiation.H:366
real2d_k t_lev
Definition: ERF_Radiation.H:441
amrex::Vector< amrex::Real > m_o3vmr
Definition: ERF_Radiation.H:317
real1d_k o3_lay
Definition: ERF_Radiation.H:402
std::string rrtmgp_cloud_optics_sw
Definition: ERF_Radiation.H:301
real1d_k sfc_alb_dif_vis
Definition: ERF_Radiation.H:408
int m_nlwgpts
Definition: ERF_Radiation.H:381
real1d_k mu0
Definition: ERF_Radiation.H:405
real2d_k cldfrac_tot
Definition: ERF_Radiation.H:428
real1d_k sfc_flux_dir_nir
Definition: ERF_Radiation.H:411
amrex::MultiFab * m_z_phys
Definition: ERF_Radiation.H:284
real2d_k sw_clnclrsky_flux_up
Definition: ERF_Radiation.H:447
real3d_k aero_g_sw
Definition: ERF_Radiation.H:486
real2d_k sw_flux_up
Definition: ERF_Radiation.H:442
std::string rrtmgp_cloud_optics_lw
Definition: ERF_Radiation.H:302
amrex::MultiFab * m_rad_fluxes
Definition: ERF_Radiation.H:281
real3d_k sw_bnd_flux_dif
Definition: ERF_Radiation.H:467
real2d_k sfc_alb_dif
Definition: ERF_Radiation.H:475
amrex::Real m_co2vmr
Definition: ERF_Radiation.H:316
bool m_extra_clnsky_diag
Definition: ERF_Radiation.H:349
real1d_k sfc_alb_dif_nir
Definition: ERF_Radiation.H:409
virtual void Init(const amrex::Geometry &geom, const amrex::BoxArray &ba, amrex::MultiFab *cons_in) override
Definition: ERF_Radiation.H:66
real2d_k lw_clnsky_flux_dn
Definition: ERF_Radiation.H:461
amrex::BoxArray m_ba
Definition: ERF_Radiation.H:244
real2d_k p_lay
Definition: ERF_Radiation.H:422
real2d_k r_lay
Definition: ERF_Radiation.H:421
int m_ncol
Definition: ERF_Radiation.H:336
real2d_k sw_flux_dn_dir
Definition: ERF_Radiation.H:444
const std::vector< amrex::Real > m_mol_weight_gas
Definition: ERF_Radiation.H:312
amrex::Real m_lat_cons
Definition: ERF_Radiation.H:291
amrex::Real m_fixed_total_solar_irradiance
Definition: ERF_Radiation.H:371
void kokkos_buffers_to_mf(amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs)
Definition: ERF_Radiation.cpp:691
std::vector< std::string > gas_names_offset
Definition: ERF_Radiation.H:328
real2d_k sw_clrsky_flux_dn
Definition: ERF_Radiation.H:451
virtual amrex::Vector< std::string > get_lsm_input_varnames() override
Definition: ERF_Radiation.H:201
int m_orbital_mon
Definition: ERF_Radiation.H:356
real3d_k aero_ssa_sw
Definition: ERF_Radiation.H:485
real2d_k sw_clnsky_flux_dn_dir
Definition: ERF_Radiation.H:455
amrex::Real m_o2vmr
Definition: ERF_Radiation.H:321
void rad_run_impl(amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs)
Definition: ERF_Radiation.H:186
GasConcsK< amrex::Real, layout_t, KokkosDefaultDevice > m_gas_concs
Definition: ERF_Radiation.H:330
amrex::MultiFab * m_qheating_rates
Definition: ERF_Radiation.H:278
double m_dt
Definition: ERF_Radiation.H:238
real2d_k qc_lay
Definition: ERF_Radiation.H:426
real2d_k lw_clrsky_flux_up
Definition: ERF_Radiation.H:458
amrex::Real m_n2ovmr
Definition: ERF_Radiation.H:318
amrex::Real m_rad_t_sfc
Definition: ERF_Radiation.H:272
std::string rrtmgp_file_path
Definition: ERF_Radiation.H:298
real2d_k sw_flux_dn
Definition: ERF_Radiation.H:443
void mf_to_kokkos_buffers(amrex::iMultiFab *lmask, amrex::MultiFab *t_surf, amrex::Vector< amrex::MultiFab * > &lsm_input_ptrs)
Definition: ERF_Radiation.cpp:475
int m_nlwbands
Definition: ERF_Radiation.H:379
real2d_k lw_clrsky_flux_dn
Definition: ERF_Radiation.H:459
amrex::Real m_orbital_eccen
Definition: ERF_Radiation.H:364
void finalize_impl(amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs)
Definition: ERF_Radiation.cpp:1384
amrex::Real m_covmr
Definition: ERF_Radiation.H:319
int m_orbital_sec
Definition: ERF_Radiation.H:358
real2d_k z_del
Definition: ERF_Radiation.H:424
real3d_k aero_tau_lw
Definition: ERF_Radiation.H:487
int m_ncol_chunk
Definition: ERF_Radiation.H:393
real2d_k lw_flux_dn
Definition: ERF_Radiation.H:446
~Radiation()
Definition: ERF_Radiation.H:55
real2d_k sw_clrsky_flux_dn_dir
Definition: ERF_Radiation.H:452
void write_rrtmgp_fluxes()
Definition: ERF_Radiation.cpp:771
std::string rrtmgp_coeffs_file_lw
Definition: ERF_Radiation.H:304
int m_lev
Definition: ERF_Radiation.H:229
virtual void Run(int &level, int &step, double &time, const double &dt, const amrex::BoxArray &ba, amrex::Geometry &geom, amrex::MultiFab *cons_in, amrex::iMultiFab *lmask, amrex::MultiFab *t_surf, amrex::Vector< amrex::MultiFab * > &lsm_input_ptrs, amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs, amrex::MultiFab *qheating_rates, amrex::MultiFab *rad_fluxes, amrex::MultiFab *z_phys, amrex::MultiFab *lat_ptr, amrex::MultiFab *lon_ptr, const bool updated_lsm) override
Definition: ERF_Radiation.H:105
real1d_k sfc_flux_dif_nir
Definition: ERF_Radiation.H:413
int m_ngas
Definition: ERF_Radiation.H:309
real2d_k lw_heating
Definition: ERF_Radiation.H:434
real1d_k sfc_alb_dir_nir
Definition: ERF_Radiation.H:407
real2d_k lw_clnsky_flux_up
Definition: ERF_Radiation.H:460
amrex::Real m_ch4vmr
Definition: ERF_Radiation.H:320
bool m_update_rad
Definition: ERF_Radiation.H:247
real2d_k sfc_alb_dir
Definition: ERF_Radiation.H:474
bool m_ice
Definition: ERF_Radiation.H:254
amrex::Real m_fixed_solar_zenith_angle
Definition: ERF_Radiation.H:375
real1d_k lon
Definition: ERF_Radiation.H:415
int m_orbital_day
Definition: ERF_Radiation.H:357
real1d_k sfc_emis
Definition: ERF_Radiation.H:416
amrex::Real m_orbital_obliq
Definition: ERF_Radiation.H:365
amrex::Real m_n2vmr
Definition: ERF_Radiation.H:322
virtual void WriteDataLog(const double &time) override
Definition: ERF_Radiation.cpp:917
bool m_fixed_orbital_year
Definition: ERF_Radiation.H:363
real2d_k sw_clnsky_flux_up
Definition: ERF_Radiation.H:453
int m_nlay
Definition: ERF_Radiation.H:337
real3d_k lw_bnd_flux_up
Definition: ERF_Radiation.H:470
int m_nswgpts
Definition: ERF_Radiation.H:380
real1d_k sfc_alb_dir_vis
Definition: ERF_Radiation.H:406
const std::vector< std::string > m_gas_names
Definition: ERF_Radiation.H:310
real2d_k sw_clrsky_heating
Definition: ERF_Radiation.H:435
bool m_extra_clnclrsky_diag
Definition: ERF_Radiation.H:350
real2d_k t_lay
Definition: ERF_Radiation.H:423
real1d_k sfc_flux_dir_vis
Definition: ERF_Radiation.H:410
real2d_k iwp
Definition: ERF_Radiation.H:432
amrex::Geometry m_geom
Definition: ERF_Radiation.H:241
amrex::MultiFab * m_lat
Definition: ERF_Radiation.H:287
real2d_k p_lev
Definition: ERF_Radiation.H:440
real2d_k lw_clrsky_heating
Definition: ERF_Radiation.H:436
real2d_k eff_radius_qc
Definition: ERF_Radiation.H:429
int m_rad_nvar
Definition: ERF_Radiation.H:396
amrex::Vector< int > m_col_offsets
Definition: ERF_Radiation.H:340
real1d_k t_sfc
Definition: ERF_Radiation.H:417
void alloc_buffers()
Definition: ERF_Radiation.cpp:233
double m_time
Definition: ERF_Radiation.H:235
int m_orbital_year
Definition: ERF_Radiation.H:355
real2d_k sw_clnclrsky_flux_dn
Definition: ERF_Radiation.H:448
amrex::Vector< std::string > m_lsm_input_names
Definition: ERF_Radiation.H:261
@ t_surf
Definition: ERF_OceanSurf.H:14
void rrtmgp_finalize()
Definition: ERF_RRTMGP_Interface.cpp:266
bool initialized
Definition: ERF_RRTMGP_Interface.cpp:24
Definition: ERF_DataStruct.H:241