1 #ifndef ERF_RADIATION_H
2 #define ERF_RADIATION_H
23 #include <mo_gas_concentrations.h>
25 #include <Kokkos_Core.hpp>
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>
65 Init (
const amrex::Geometry& geom,
66 const amrex::BoxArray& ba,
67 amrex::MultiFab* cons_in)
override
71 int klo = geom.Domain().smallEnd(2);
72 int khi = geom.Domain().bigEnd(2);
77 amrex::Box minimal_box = ba.minimalBox();
90 m_nlay = geom.Domain().length(2);
95 for (amrex::MFIter mfi(*cons_in); mfi.isValid(); ++mfi) {
96 const amrex::Box& vbx = mfi.validbox();
100 (
khi == vbx.bigEnd(2)),
101 "Vertical decomposition with radiation is not allowed.");
102 int nx = vbx.length(0);
103 int ny = vbx.length(1);
134 const amrex::BoxArray& ba,
135 amrex::Geometry& geom,
136 amrex::MultiFab* cons_in,
137 amrex::iMultiFab* lmask,
138 amrex::MultiFab* t_surf,
139 const amrex::Vector<const amrex::MultiFab*>& lsm_input_ptrs,
140 const amrex::Vector<amrex::MultiFab*>& lsm_output_ptrs,
141 amrex::MultiFab* qheating_rates,
142 amrex::MultiFab* rad_fluxes,
143 amrex::MultiFab* z_phys,
144 amrex::MultiFab* lat_ptr,
145 amrex::MultiFab* lon_ptr,
146 const bool updated_lsm,
157 m_nlay == geom.Domain().length(2),
158 "Radiation: m_nlay (" + std::to_string(
m_nlay) +
159 ") doesn't match domain vertical extent (" +
160 std::to_string(geom.Domain().length(2)) +
")");
162 set_grids(level, step, time, dt, ba, geom,
163 cons_in, lmask, t_surf,
164 lsm_input_ptrs, qheating_rates,
165 rad_fluxes, z_phys, lat_ptr, lon_ptr,
180 const amrex::BoxArray& ba,
181 amrex::Geometry& geom,
182 amrex::MultiFab* cons_in,
183 amrex::iMultiFab* lmask,
184 amrex::MultiFab* t_surf,
185 const amrex::Vector<const amrex::MultiFab*>& lsm_input_ptrs,
186 amrex::MultiFab* qheating_rates,
187 amrex::MultiFab* rad_fluxes,
188 amrex::MultiFab* z_phys,
189 amrex::MultiFab*
lat,
190 amrex::MultiFab*
lon,
191 const bool updated_lsm);
204 amrex::MultiFab* t_surf,
205 const amrex::Vector<const amrex::MultiFab*>& lsm_input_ptrs);
225 finalize_impl (
const amrex::Vector<amrex::MultiFab*>& lsm_output_ptrs);
232 amrex::Print() <<
"Radiation advancing level " <<
m_lev <<
" at (YY-MM-DD SS) " <<
m_orbital_year <<
'-'
237 amrex::Print() <<
"DONE\n";
243 amrex::Vector<std::string>
251 amrex::Vector<std::string>
314 "sfc_alb_dir_vis",
"sfc_alb_dir_nir",
315 "sfc_alb_dif_vis",
"sfc_alb_dif_nir"};
319 "sw_flux_dn_dir_vis",
"sw_flux_dn_dir_nir",
320 "sw_flux_dn_dif_vis",
"sw_flux_dn_dif_nir",
363 const std::vector<std::string>
m_gas_names = {
"H2O",
"CO2",
"O3",
"N2O",
364 "CO" ,
"CH4",
"O2",
"N2" };
383 GasConcsK<amrex::Real, layout_t, KokkosDefaultDevice>
m_gas_concs;
constexpr amrex::Real RdoCp
Definition: ERF_Constants.H:53
const int nx
Definition: ERF_InitCustomPertVels_CloudChamber.H:14
const int ny
Definition: ERF_InitCustomPertVels_CloudChamber.H:15
const int klo
Definition: ERF_InitCustomPert_ABL.H:75
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:44
real3d_k sw_bnd_flux_dn
Definition: ERF_Radiation.H:522
amrex::MultiFab * m_lon
Definition: ERF_Radiation.H:341
real2d_k lw_flux_up
Definition: ERF_Radiation.H:502
virtual amrex::Vector< std::string > get_lsm_output_varnames() override
Definition: ERF_Radiation.H:252
real3d_k aero_tau_sw
Definition: ERF_Radiation.H:541
int m_o3_size
Definition: ERF_Radiation.H:379
real3d_k sw_bnd_flux_dir
Definition: ERF_Radiation.H:523
real2d_k sw_clnsky_flux_dn
Definition: ERF_Radiation.H:511
bool is_nested_patch() const override
Definition: ERF_Radiation.H:258
std::string rrtmgp_coeffs_file_sw
Definition: ERF_Radiation.H:356
std::string rrtmgp_coeffs_sw
Definition: ERF_Radiation.H:352
real2d_k d_tint
Definition: ERF_Radiation.H:496
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, const amrex::Vector< const 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:262
real2d_k lw_clnclrsky_flux_dn
Definition: ERF_Radiation.H:514
int m_rad_freq_in_steps
Definition: ERF_Radiation.H:441
void mf_to_kokkos_buffers(amrex::iMultiFab *lmask, amrex::MultiFab *t_surf, const amrex::Vector< const amrex::MultiFab * > &lsm_input_ptrs)
Definition: ERF_Radiation.cpp:580
real2d_k lwp
Definition: ERF_Radiation.H:488
real1d_k lw_src
Definition: ERF_Radiation.H:475
real2d_k eff_radius_qi
Definition: ERF_Radiation.H:487
void dealloc_buffers()
Definition: ERF_Radiation.cpp:490
real1d_k m_gas_mol_weights
Definition: ERF_Radiation.H:380
amrex::Real m_lon_cons
Definition: ERF_Radiation.H:345
void initialize_impl()
Definition: ERF_Radiation.cpp:1205
int m_nswbands
Definition: ERF_Radiation.H:435
bool m_do_aerosol_rad
Definition: ERF_Radiation.H:399
std::string rrtmgp_coeffs_lw
Definition: ERF_Radiation.H:353
void rad_run_impl(const amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs)
Definition: ERF_Radiation.H:229
bool m_moist
Definition: ERF_Radiation.H:305
std::string rrtmgp_cloud_optics_file_lw
Definition: ERF_Radiation.H:359
amrex::MultiFab * m_cons_in
Definition: ERF_Radiation.H:328
amrex::MultiFab datalog_mf
Definition: ERF_Radiation.H:348
Radiation(const int &lev, SolverChoice &sc)
Definition: ERF_Radiation.cpp:85
int m_ncol_chunk_requested
Definition: ERF_Radiation.H:449
real2d_k sw_heating
Definition: ERF_Radiation.H:490
bool m_lsm
Definition: ERF_Radiation.H:310
bool m_do_subcol_sampling
Definition: ERF_Radiation.H:456
real3d_k lw_bnd_flux_dn
Definition: ERF_Radiation.H:528
bool m_rad_write_fluxes
Definition: ERF_Radiation.H:302
real3d_k sw_bnd_flux_up
Definition: ERF_Radiation.H:521
real2d_k qv_lay
Definition: ERF_Radiation.H:482
int m_qi_comp
Definition: ERF_Radiation.H:307
std::string rrtmgp_cloud_optics_file_sw
Definition: ERF_Radiation.H:358
amrex::Vector< std::string > m_lsm_output_names
Definition: ERF_Radiation.H:318
bool m_is_nested_patch
Definition: ERF_Radiation.H:278
void run_impl()
Definition: ERF_Radiation.cpp:1230
real2d_k sw_clnclrsky_flux_dn_dir
Definition: ERF_Radiation.H:506
real1d_k sfc_flux_dif_vis
Definition: ERF_Radiation.H:469
int m_step
Definition: ERF_Radiation.H:284
real2d_k lw_clnclrsky_flux_up
Definition: ERF_Radiation.H:513
real1d_k lat
Definition: ERF_Radiation.H:471
void populateDatalogMF()
Definition: ERF_Radiation.cpp:964
real2d_k qi_lay
Definition: ERF_Radiation.H:484
real2d_k sw_clrsky_flux_up
Definition: ERF_Radiation.H:507
amrex::Real m_orbital_mvelp
Definition: ERF_Radiation.H:420
real2d_k t_lev
Definition: ERF_Radiation.H:498
amrex::Vector< amrex::Real > m_o3vmr
Definition: ERF_Radiation.H:370
real1d_k o3_lay
Definition: ERF_Radiation.H:459
std::string rrtmgp_cloud_optics_sw
Definition: ERF_Radiation.H:354
real1d_k sfc_alb_dif_vis
Definition: ERF_Radiation.H:465
int m_nlwgpts
Definition: ERF_Radiation.H:438
real1d_k mu0
Definition: ERF_Radiation.H:462
real2d_k cldfrac_tot
Definition: ERF_Radiation.H:485
real1d_k sfc_flux_dir_nir
Definition: ERF_Radiation.H:468
amrex::MultiFab * m_z_phys
Definition: ERF_Radiation.H:337
real2d_k sw_clnclrsky_flux_up
Definition: ERF_Radiation.H:504
real3d_k aero_g_sw
Definition: ERF_Radiation.H:543
real2d_k sw_flux_up
Definition: ERF_Radiation.H:499
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, const amrex::Vector< const amrex::MultiFab * > &lsm_input_ptrs, const 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, amrex::Real &declin, amrex::Real &calday) override
Definition: ERF_Radiation.H:130
std::string rrtmgp_cloud_optics_lw
Definition: ERF_Radiation.H:355
amrex::MultiFab * m_rad_fluxes
Definition: ERF_Radiation.H:334
real3d_k sw_bnd_flux_dif
Definition: ERF_Radiation.H:524
real2d_k sfc_alb_dif
Definition: ERF_Radiation.H:532
amrex::Real m_co2vmr
Definition: ERF_Radiation.H:369
bool m_extra_clnsky_diag
Definition: ERF_Radiation.H:402
real1d_k sfc_alb_dif_nir
Definition: ERF_Radiation.H:466
virtual void Init(const amrex::Geometry &geom, const amrex::BoxArray &ba, amrex::MultiFab *cons_in) override
Definition: ERF_Radiation.H:65
real2d_k lw_clnsky_flux_dn
Definition: ERF_Radiation.H:518
void kokkos_buffers_to_mf(const amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs)
Definition: ERF_Radiation.cpp:824
amrex::BoxArray m_ba
Definition: ERF_Radiation.H:296
real2d_k p_lay
Definition: ERF_Radiation.H:479
real2d_k r_lay
Definition: ERF_Radiation.H:478
int m_ncol
Definition: ERF_Radiation.H:389
real2d_k sw_flux_dn_dir
Definition: ERF_Radiation.H:501
const std::vector< amrex::Real > m_mol_weight_gas
Definition: ERF_Radiation.H:365
amrex::Real m_lat_cons
Definition: ERF_Radiation.H:344
amrex::Real m_fixed_total_solar_irradiance
Definition: ERF_Radiation.H:425
std::vector< std::string > gas_names_offset
Definition: ERF_Radiation.H:381
real2d_k sw_clrsky_flux_dn
Definition: ERF_Radiation.H:508
virtual amrex::Vector< std::string > get_lsm_input_varnames() override
Definition: ERF_Radiation.H:244
int m_orbital_mon
Definition: ERF_Radiation.H:409
amrex::Real m_declin
Definition: ERF_Radiation.H:431
real3d_k aero_ssa_sw
Definition: ERF_Radiation.H:542
real2d_k sw_clnsky_flux_dn_dir
Definition: ERF_Radiation.H:512
amrex::Real m_o2vmr
Definition: ERF_Radiation.H:374
GasConcsK< amrex::Real, layout_t, KokkosDefaultDevice > m_gas_concs
Definition: ERF_Radiation.H:383
amrex::MultiFab * m_qheating_rates
Definition: ERF_Radiation.H:331
double m_dt
Definition: ERF_Radiation.H:290
real2d_k qc_lay
Definition: ERF_Radiation.H:483
real2d_k lw_clrsky_flux_up
Definition: ERF_Radiation.H:515
amrex::Real m_n2ovmr
Definition: ERF_Radiation.H:371
amrex::Real m_rad_t_sfc
Definition: ERF_Radiation.H:324
std::string rrtmgp_file_path
Definition: ERF_Radiation.H:351
real2d_k sw_flux_dn
Definition: ERF_Radiation.H:500
int m_nlwbands
Definition: ERF_Radiation.H:436
real2d_k lw_clrsky_flux_dn
Definition: ERF_Radiation.H:516
amrex::Real m_orbital_eccen
Definition: ERF_Radiation.H:418
amrex::Real m_covmr
Definition: ERF_Radiation.H:372
int m_orbital_sec
Definition: ERF_Radiation.H:411
real2d_k z_del
Definition: ERF_Radiation.H:481
real3d_k aero_tau_lw
Definition: ERF_Radiation.H:544
int m_ncol_chunk
Definition: ERF_Radiation.H:450
real2d_k lw_flux_dn
Definition: ERF_Radiation.H:503
~Radiation()
Definition: ERF_Radiation.H:54
real2d_k sw_clrsky_flux_dn_dir
Definition: ERF_Radiation.H:509
void write_rrtmgp_fluxes()
Definition: ERF_Radiation.cpp:924
std::string rrtmgp_coeffs_file_lw
Definition: ERF_Radiation.H:357
int m_lev
Definition: ERF_Radiation.H:281
real1d_k sfc_flux_dif_nir
Definition: ERF_Radiation.H:470
int m_ngas
Definition: ERF_Radiation.H:362
real2d_k lw_heating
Definition: ERF_Radiation.H:491
real1d_k sfc_alb_dir_nir
Definition: ERF_Radiation.H:464
real2d_k lw_clnsky_flux_up
Definition: ERF_Radiation.H:517
amrex::Real m_ch4vmr
Definition: ERF_Radiation.H:373
bool m_update_rad
Definition: ERF_Radiation.H:299
real2d_k sfc_alb_dir
Definition: ERF_Radiation.H:531
bool m_ice
Definition: ERF_Radiation.H:306
amrex::Real m_fixed_solar_zenith_angle
Definition: ERF_Radiation.H:429
real1d_k lon
Definition: ERF_Radiation.H:472
int m_orbital_day
Definition: ERF_Radiation.H:410
real1d_k sfc_emis
Definition: ERF_Radiation.H:473
amrex::Real m_orbital_obliq
Definition: ERF_Radiation.H:419
amrex::Real m_n2vmr
Definition: ERF_Radiation.H:375
virtual void WriteDataLog(const double &time) override
Definition: ERF_Radiation.cpp:1070
bool m_fixed_orbital_year
Definition: ERF_Radiation.H:417
real2d_k sw_clnsky_flux_up
Definition: ERF_Radiation.H:510
int m_nlay
Definition: ERF_Radiation.H:390
real3d_k lw_bnd_flux_up
Definition: ERF_Radiation.H:527
int m_nswgpts
Definition: ERF_Radiation.H:437
real1d_k sfc_alb_dir_vis
Definition: ERF_Radiation.H:463
const std::vector< std::string > m_gas_names
Definition: ERF_Radiation.H:363
real2d_k sw_clrsky_heating
Definition: ERF_Radiation.H:492
bool m_extra_clnclrsky_diag
Definition: ERF_Radiation.H:403
real2d_k t_lay
Definition: ERF_Radiation.H:480
real1d_k sfc_flux_dir_vis
Definition: ERF_Radiation.H:467
real2d_k iwp
Definition: ERF_Radiation.H:489
amrex::Geometry m_geom
Definition: ERF_Radiation.H:293
amrex::MultiFab * m_lat
Definition: ERF_Radiation.H:340
amrex::Real m_rdOcp
Definition: ERF_Radiation.H:325
real2d_k p_lev
Definition: ERF_Radiation.H:497
void finalize_impl(const amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs)
Definition: ERF_Radiation.cpp:1527
real2d_k lw_clrsky_heating
Definition: ERF_Radiation.H:493
real2d_k eff_radius_qc
Definition: ERF_Radiation.H:486
int m_rad_nvar
Definition: ERF_Radiation.H:453
amrex::Vector< int > m_col_offsets
Definition: ERF_Radiation.H:393
bool radiation_updated() const override
Reports whether the last radiation call updated its outputs.
Definition: ERF_Radiation.H:172
real1d_k t_sfc
Definition: ERF_Radiation.H:474
void alloc_buffers()
Definition: ERF_Radiation.cpp:335
double m_time
Definition: ERF_Radiation.H:287
amrex::Real m_calday
Definition: ERF_Radiation.H:432
int m_orbital_year
Definition: ERF_Radiation.H:408
real2d_k sw_clnclrsky_flux_dn
Definition: ERF_Radiation.H:505
amrex::Vector< std::string > m_lsm_input_names
Definition: ERF_Radiation.H:313
void rrtmgp_finalize()
Definition: ERF_RRTMGP_Interface.cpp:275
bool initialized
Definition: ERF_RRTMGP_Interface.cpp:25
Definition: ERF_DataStruct.H:685