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>
63 Init (
const amrex::Geometry& geom,
64 const amrex::BoxArray& ba,
65 amrex::MultiFab* cons_in)
override
68 int klo = geom.Domain().smallEnd(2);
69 int khi = geom.Domain().bigEnd(2);
72 m_nlay = geom.Domain().length(2);
77 for (amrex::MFIter mfi(*cons_in); mfi.isValid(); ++mfi) {
78 const amrex::Box& vbx = mfi.validbox();
79 AMREX_ALWAYS_ASSERT_WITH_MESSAGE((klo == vbx.smallEnd(2)) &&
80 (khi == vbx.bigEnd(2)),
81 "Vertical decomposition with radiation is not allowed.");
82 int nx = vbx.length(0);
83 int ny = vbx.length(1);
94 const amrex::Real& dt,
95 const amrex::BoxArray& ba,
96 amrex::Geometry& geom,
97 amrex::MultiFab* cons_in,
98 amrex::MultiFab* lsm_fluxes,
99 amrex::MultiFab* lsm_zenith,
100 amrex::Vector<amrex::MultiFab*>& lsm_input_ptrs,
101 amrex::Vector<amrex::MultiFab*>& lsm_output_ptrs,
102 amrex::MultiFab* qheating_rates,
103 amrex::MultiFab* z_phys,
104 amrex::MultiFab*
lat,
105 amrex::MultiFab*
lon)
override
107 set_grids(level, step, time, dt, ba, geom,
108 cons_in, lsm_fluxes, lsm_zenith,
109 lsm_input_ptrs, qheating_rates,
119 const amrex::Real& dt,
120 const amrex::BoxArray& ba,
121 amrex::Geometry& geom,
122 amrex::MultiFab* cons_in,
123 amrex::MultiFab* lsm_fluxes,
124 amrex::MultiFab* lsm_zenith,
125 amrex::Vector<amrex::MultiFab*>& lsm_input_ptrs,
126 amrex::MultiFab* qheating_rates,
127 amrex::MultiFab* z_phys,
128 amrex::MultiFab*
lat,
129 amrex::MultiFab*
lon);
131 template<
typename LandSurfaceModelType>
134 if constexpr(std::is_same_v<LandSurfaceModelType, SLM>)
190 Kokkos::deep_copy(
lw_src, 0.0);
224 finalize_impl (amrex::Vector<amrex::MultiFab*>& lsm_output_ptrs);
231 amrex::Print() <<
"Advancing radiation at level: " <<
m_lev <<
" ...";
235 amrex::Print() <<
"DONE\n";
241 amrex::Vector<std::string>
249 amrex::Vector<std::string>
304 "sfc_alb_dir_vis",
"sfc_alb_dir_nir",
305 "sfc_alb_dif_vis",
"sfc_alb_dif_nir"};
350 const std::vector<std::string>
m_gas_names = {
"H2O",
"CO2",
"O3",
"N2O",
351 "CO" ,
"CH4",
"O2",
"N2" };
353 28.01010, 16.04246, 31.9980, 28.0134};
370 GasConcsK<amrex::Real, layout_t, KokkosDefaultDevice>
m_gas_concs;
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
Definition: ERF_RadiationInterface.H:14
Definition: ERF_Radiation.H:45
real3d_k sw_bnd_flux_dn
Definition: ERF_Radiation.H:494
amrex::MultiFab * m_lon
Definition: ERF_Radiation.H:324
real2d_k lw_flux_up
Definition: ERF_Radiation.H:474
virtual amrex::Vector< std::string > get_lsm_output_varnames() override
Definition: ERF_Radiation.H:250
real3d_k aero_tau_sw
Definition: ERF_Radiation.H:510
int m_o3_size
Definition: ERF_Radiation.H:366
real3d_k sw_bnd_flux_dir
Definition: ERF_Radiation.H:495
real2d_k sw_clnsky_flux_dn
Definition: ERF_Radiation.H:483
std::string rrtmgp_coeffs_file_sw
Definition: ERF_Radiation.H:343
std::string rrtmgp_coeffs_sw
Definition: ERF_Radiation.H:339
real2d_k d_tint
Definition: ERF_Radiation.H:468
real2d_k lw_clnclrsky_flux_dn
Definition: ERF_Radiation.H:486
int m_rad_freq_in_steps
Definition: ERF_Radiation.H:422
real2d_k lwp
Definition: ERF_Radiation.H:460
real3d_k cld_tau_lw_gpt
Definition: ERF_Radiation.H:521
real1d_k lw_src
Definition: ERF_Radiation.H:445
real2d_k eff_radius_qi
Definition: ERF_Radiation.H:458
void dealloc_buffers()
Definition: ERF_Radiation.cpp:311
real1d_k m_gas_mol_weights
Definition: ERF_Radiation.H:367
amrex::Real m_lon_cons
Definition: ERF_Radiation.H:328
void initialize_impl()
Definition: ERF_Radiation.cpp:945
int m_nswbands
Definition: ERF_Radiation.H:416
bool m_do_aerosol_rad
Definition: ERF_Radiation.H:383
std::string rrtmgp_coeffs_lw
Definition: ERF_Radiation.H:340
bool m_moist
Definition: ERF_Radiation.H:296
std::string rrtmgp_cloud_optics_file_lw
Definition: ERF_Radiation.H:346
amrex::MultiFab * m_cons_in
Definition: ERF_Radiation.H:314
amrex::MultiFab datalog_mf
Definition: ERF_Radiation.H:335
Radiation(const int &lev, SolverChoice &sc)
Definition: ERF_Radiation.cpp:19
real2d_k sw_heating
Definition: ERF_Radiation.H:462
bool m_lsm
Definition: ERF_Radiation.H:300
bool m_do_subcol_sampling
Definition: ERF_Radiation.H:425
real3d_k lw_bnd_flux_dn
Definition: ERF_Radiation.H:500
bool m_rad_write_fluxes
Definition: ERF_Radiation.H:291
void set_lsm_inputs(LandSurfaceModelType *model)
Definition: ERF_Radiation.H:132
real3d_k sw_bnd_flux_up
Definition: ERF_Radiation.H:493
real2d_k qv_lay
Definition: ERF_Radiation.H:453
std::string rrtmgp_cloud_optics_file_sw
Definition: ERF_Radiation.H:345
amrex::Vector< std::string > m_lsm_output_names
Definition: ERF_Radiation.H:308
void run_impl()
Definition: ERF_Radiation.cpp:956
real2d_k sw_clnclrsky_flux_dn_dir
Definition: ERF_Radiation.H:478
real1d_k sfc_flux_dif_vis
Definition: ERF_Radiation.H:439
int m_step
Definition: ERF_Radiation.H:273
real2d_k lw_clnclrsky_flux_up
Definition: ERF_Radiation.H:485
real3d_k cld_tau_sw_gpt
Definition: ERF_Radiation.H:520
real1d_k lat
Definition: ERF_Radiation.H:441
void populateDatalogMF()
Definition: ERF_Radiation.cpp:721
real2d_k qi_lay
Definition: ERF_Radiation.H:455
real2d_k sw_clrsky_flux_up
Definition: ERF_Radiation.H:479
amrex::Real m_orbital_mvelp
Definition: ERF_Radiation.H:403
real2d_k t_lev
Definition: ERF_Radiation.H:470
amrex::Vector< amrex::Real > m_o3vmr
Definition: ERF_Radiation.H:357
real1d_k o3_lay
Definition: ERF_Radiation.H:428
std::string rrtmgp_cloud_optics_sw
Definition: ERF_Radiation.H:341
real1d_k sfc_alb_dif_vis
Definition: ERF_Radiation.H:435
int m_nlwgpts
Definition: ERF_Radiation.H:419
real1d_k mu0
Definition: ERF_Radiation.H:432
real2d_k cldfrac_tot
Definition: ERF_Radiation.H:456
real3d_k cld_tau_lw_bnd
Definition: ERF_Radiation.H:517
real1d_k sfc_flux_dir_nir
Definition: ERF_Radiation.H:438
amrex::MultiFab * m_z_phys
Definition: ERF_Radiation.H:320
real2d_k sw_clnclrsky_flux_up
Definition: ERF_Radiation.H:476
real3d_k aero_g_sw
Definition: ERF_Radiation.H:512
real2d_k sw_flux_up
Definition: ERF_Radiation.H:471
std::string rrtmgp_cloud_optics_lw
Definition: ERF_Radiation.H:342
real3d_k sw_bnd_flux_dif
Definition: ERF_Radiation.H:496
real2d_k sfc_alb_dif
Definition: ERF_Radiation.H:504
amrex::Real m_co2vmr
Definition: ERF_Radiation.H:356
bool m_extra_clnsky_diag
Definition: ERF_Radiation.H:386
real2d_k emis_sfc
Definition: ERF_Radiation.H:507
real1d_k sfc_alb_dif_nir
Definition: ERF_Radiation.H:436
amrex::MultiFab * m_lsm_fluxes
Definition: ERF_Radiation.H:331
virtual void Init(const amrex::Geometry &geom, const amrex::BoxArray &ba, amrex::MultiFab *cons_in) override
Definition: ERF_Radiation.H:63
real2d_k lw_clnsky_flux_dn
Definition: ERF_Radiation.H:490
amrex::BoxArray m_ba
Definition: ERF_Radiation.H:285
real2d_k p_lay
Definition: ERF_Radiation.H:449
real2d_k r_lay
Definition: ERF_Radiation.H:448
int m_ncol
Definition: ERF_Radiation.H:376
real2d_k sw_flux_dn_dir
Definition: ERF_Radiation.H:473
const std::vector< amrex::Real > m_mol_weight_gas
Definition: ERF_Radiation.H:352
amrex::Real m_lat_cons
Definition: ERF_Radiation.H:327
amrex::Real m_fixed_total_solar_irradiance
Definition: ERF_Radiation.H:408
void kokkos_buffers_to_mf(amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs)
Definition: ERF_Radiation.cpp:591
std::vector< std::string > gas_names_offset
Definition: ERF_Radiation.H:368
real2d_k sw_clrsky_flux_dn
Definition: ERF_Radiation.H:480
amrex::Real m_dt
Definition: ERF_Radiation.H:279
virtual amrex::Vector< std::string > get_lsm_input_varnames() override
Definition: ERF_Radiation.H:242
int m_orbital_mon
Definition: ERF_Radiation.H:393
real3d_k aero_ssa_sw
Definition: ERF_Radiation.H:511
real2d_k sw_clnsky_flux_dn_dir
Definition: ERF_Radiation.H:484
amrex::Real m_o2vmr
Definition: ERF_Radiation.H:361
void rad_run_impl(amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs)
Definition: ERF_Radiation.H:228
GasConcsK< amrex::Real, layout_t, KokkosDefaultDevice > m_gas_concs
Definition: ERF_Radiation.H:370
amrex::MultiFab * m_qheating_rates
Definition: ERF_Radiation.H:317
real2d_k qc_lay
Definition: ERF_Radiation.H:454
virtual void WriteDataLog(const amrex::Real &time) override
Definition: ERF_Radiation.cpp:810
real2d_k lw_clrsky_flux_up
Definition: ERF_Radiation.H:487
amrex::Real m_n2ovmr
Definition: ERF_Radiation.H:358
amrex::Real m_rad_t_sfc
Definition: ERF_Radiation.H:311
std::string rrtmgp_file_path
Definition: ERF_Radiation.H:338
real2d_k sw_flux_dn
Definition: ERF_Radiation.H:472
amrex::MultiFab * m_lsm_zenith
Definition: ERF_Radiation.H:332
int m_nlwbands
Definition: ERF_Radiation.H:417
real2d_k tmp2d
Definition: ERF_Radiation.H:459
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:91
real2d_k lw_clrsky_flux_dn
Definition: ERF_Radiation.H:488
amrex::Real m_orbital_eccen
Definition: ERF_Radiation.H:401
void finalize_impl(amrex::Vector< amrex::MultiFab * > &lsm_output_ptrs)
Definition: ERF_Radiation.cpp:1213
amrex::Real m_covmr
Definition: ERF_Radiation.H:359
int m_orbital_sec
Definition: ERF_Radiation.H:395
real2d_k z_del
Definition: ERF_Radiation.H:451
real2d_k p_del
Definition: ERF_Radiation.H:452
real3d_k aero_tau_lw
Definition: ERF_Radiation.H:513
real2d_k lw_flux_dn
Definition: ERF_Radiation.H:475
~Radiation()
Definition: ERF_Radiation.H:55
void mf_to_kokkos_buffers(amrex::Vector< amrex::MultiFab * > &lsm_input_ptrs)
Definition: ERF_Radiation.cpp:419
real2d_k sw_clrsky_flux_dn_dir
Definition: ERF_Radiation.H:481
void write_rrtmgp_fluxes()
Definition: ERF_Radiation.cpp:680
std::string rrtmgp_coeffs_file_lw
Definition: ERF_Radiation.H:344
int m_lev
Definition: ERF_Radiation.H:270
real1d_k sfc_flux_dif_nir
Definition: ERF_Radiation.H:440
int m_ngas
Definition: ERF_Radiation.H:349
real2d_k lw_heating
Definition: ERF_Radiation.H:463
real1d_k sfc_alb_dir_nir
Definition: ERF_Radiation.H:434
real2d_k lw_clnsky_flux_up
Definition: ERF_Radiation.H:489
amrex::Real m_ch4vmr
Definition: ERF_Radiation.H:360
bool m_update_rad
Definition: ERF_Radiation.H:288
real2d_k sfc_alb_dir
Definition: ERF_Radiation.H:503
bool m_ice
Definition: ERF_Radiation.H:297
amrex::Real m_fixed_solar_zenith_angle
Definition: ERF_Radiation.H:412
real1d_k lon
Definition: ERF_Radiation.H:442
int m_orbital_day
Definition: ERF_Radiation.H:394
real1d_k sfc_emis
Definition: ERF_Radiation.H:443
amrex::Real m_orbital_obliq
Definition: ERF_Radiation.H:402
amrex::Real m_n2vmr
Definition: ERF_Radiation.H:362
real3d_k cld_tau_sw_bnd
Definition: ERF_Radiation.H:516
bool m_fixed_orbital_year
Definition: ERF_Radiation.H:400
real2d_k sw_clnsky_flux_up
Definition: ERF_Radiation.H:482
int m_nlay
Definition: ERF_Radiation.H:377
real3d_k lw_bnd_flux_up
Definition: ERF_Radiation.H:499
int m_nswgpts
Definition: ERF_Radiation.H:418
bool m_first_step
Definition: ERF_Radiation.H:293
real1d_k sfc_alb_dir_vis
Definition: ERF_Radiation.H:433
const std::vector< std::string > m_gas_names
Definition: ERF_Radiation.H:350
real2d_k sw_clrsky_heating
Definition: ERF_Radiation.H:464
bool m_extra_clnclrsky_diag
Definition: ERF_Radiation.H:387
real2d_k t_lay
Definition: ERF_Radiation.H:450
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:118
real1d_k sfc_flux_dir_vis
Definition: ERF_Radiation.H:437
real2d_k iwp
Definition: ERF_Radiation.H:461
amrex::Geometry m_geom
Definition: ERF_Radiation.H:282
amrex::MultiFab * m_lat
Definition: ERF_Radiation.H:323
real2d_k p_lev
Definition: ERF_Radiation.H:469
real2d_k lw_clrsky_heating
Definition: ERF_Radiation.H:465
real2d_k eff_radius_qc
Definition: ERF_Radiation.H:457
real1d_k cosine_zenith
Definition: ERF_Radiation.H:431
amrex::Vector< int > m_col_offsets
Definition: ERF_Radiation.H:380
real1d_k t_sfc
Definition: ERF_Radiation.H:444
void alloc_buffers()
Definition: ERF_Radiation.cpp:185
int m_orbital_year
Definition: ERF_Radiation.H:392
real2d_k sw_clnclrsky_flux_dn
Definition: ERF_Radiation.H:477
amrex::Vector< std::string > m_lsm_input_names
Definition: ERF_Radiation.H:303
amrex::Real m_time
Definition: ERF_Radiation.H:276
Definition: ERF_DataStruct.H:123