1225 if (
m_ncol == 0) {
return; }
1228 const auto ncol =
m_ncol;
1229 const auto nlay =
m_nlay;
1235 double obliqr, lambm0, mvelpp;
1243 mvelp, obliqr, lambm0, mvelpp);
1249 orbital_decl(calday, eccen, mvelpp, lambm0, obliqr, delta, eccf);
1253 if (fixed_total_solar_irradiance >= 0){
1254 eccf = fixed_total_solar_irradiance/
Real(1360.9);
1262 Vector<real2d_k> vmr_full_vec(
m_ngas);
1263 for (
int igas(0); igas <
m_ngas; ++igas) {
1265 vmr_full_vec[igas] =
real2d_k(
"vmr_full_" +
name, ncol, nlay);
1266 auto tmp2d = vmr_full_vec[igas];
1268 if (
name ==
"H2O") {
1270 Kokkos::parallel_for(Kokkos::MDRangePolicy<Kokkos::Rank<2>>({0, 0}, {ncol, nlay}),
1271 KOKKOS_LAMBDA (
int icol,
int ilay)
1273 tmp2d(icol,ilay) = qv_lay_d(icol,ilay) *
mwdair/gas_mol_weight;
1275 }
else if (
name ==
"CO2") {
1276 Kokkos::deep_copy(tmp2d,
m_co2vmr);
1277 }
else if (
name ==
"O3") {
1279 Kokkos::deep_copy(tmp2d,
m_o3vmr[0] );
1282 Kokkos::parallel_for(Kokkos::MDRangePolicy<Kokkos::Rank<2>>({0, 0}, {ncol, nlay}),
1283 KOKKOS_LAMBDA (
int icol,
int ilay)
1285 tmp2d(icol,ilay) = o3_lay_d(ilay);
1288 }
else if (
name ==
"N2O") {
1289 Kokkos::deep_copy(tmp2d,
m_n2ovmr);
1290 }
else if (
name ==
"CO") {
1291 Kokkos::deep_copy(tmp2d,
m_covmr );
1292 }
else if (
name ==
"CH4") {
1293 Kokkos::deep_copy(tmp2d,
m_ch4vmr);
1294 }
else if (
name ==
"O2") {
1295 Kokkos::deep_copy(tmp2d,
m_o2vmr );
1296 }
else if (
name ==
"N2") {
1297 Kokkos::deep_copy(tmp2d,
m_n2vmr );
1299 Abort(
"Radiation: Unknown gas component.");
1309 auto h_mu0 = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(),
mu0);
1313 auto h_lat = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(),
lat);
1314 auto h_lon = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(),
lon);
1315 double dt = double(
m_dt);
1317 Kokkos::parallel_for(Kokkos::RangePolicy<Kokkos::Serial>(0, ncol),
1318 [&,PI_d=
PI] (
int icol)
1321 double lat_col = h_lat(icol)*PI_d/
Real(180.0);
1322 double lon_col = h_lon(icol)*PI_d/
Real(180.0);
1323 double lcalday = calday;
1324 double ldelta = delta;
1325 double dt_avg =
static_cast<double>(rad_freq_in_steps) * dt;
1329 Kokkos::deep_copy(
mu0, h_mu0);
1336 Table2D<Real,Order::C> lwp_tab(
lwp.data(), {0,0}, {static_cast<int>(lwp.extent(0)),static_cast<int>(lwp.extent(1))});
1337 Table2D<Real,Order::C> iwp_tab(
iwp.data(), {0,0}, {static_cast<int>(iwp.extent(0)),static_cast<int>(iwp.extent(1))});
1338 Kokkos::parallel_for(Kokkos::MDRangePolicy<Kokkos::Rank<2>>({0, 0}, {ncol, nlay}),
1339 KOKKOS_LAMBDA (
int icol,
int ilay)
1341 lwp_tab(icol,ilay) *=
Real(1.e3);
1342 iwp_tab(icol,ilay) *=
Real(1.e3);
1353 for (
int col_s = 0; col_s < ncol; col_s += ncol_chunk) {
1354 const int ncol_c = std::min(ncol_chunk, ncol - col_s);
1355 const int col_e = col_s + ncol_c;
1356 auto cr = std::make_pair(col_s, col_e);
1373 const int stride2_nlay = nlay;
1374 const int stride2_nlayp1 = nlay + 1;
1375 real2d_k p_lay_c (
p_lay.data() + col_s*stride2_nlay, ncol_c, nlay);
1376 real2d_k t_lay_c (
t_lay.data() + col_s*stride2_nlay, ncol_c, nlay);
1377 real2d_k r_lay_c (
r_lay.data() + col_s*stride2_nlay, ncol_c, nlay);
1378 real2d_k z_del_c (
z_del.data() + col_s*stride2_nlay, ncol_c, nlay);
1379 real2d_k lwp_c (
lwp.data() + col_s*stride2_nlay, ncol_c, nlay);
1380 real2d_k iwp_c (
iwp.data() + col_s*stride2_nlay, ncol_c, nlay);
1388 real2d_k p_lev_c (
p_lev.data() + col_s*stride2_nlayp1, ncol_c, nlay+1);
1389 real2d_k t_lev_c (
t_lev.data() + col_s*stride2_nlayp1, ncol_c, nlay+1);
1397 real2d_k sw_clrsky_flux_up_c, sw_clrsky_flux_dn_c, sw_clrsky_flux_dn_dir_c;
1398 real2d_k lw_clrsky_flux_up_c, lw_clrsky_flux_dn_c;
1414 real2d_k sw_clnclrsky_flux_up_c, sw_clnclrsky_flux_dn_c, sw_clnclrsky_flux_dn_dir_c;
1415 real2d_k lw_clnclrsky_flux_up_c, lw_clnclrsky_flux_dn_c;
1423 sw_clnclrsky_flux_up_c =
real2d_k(
"sw_clnclrsky_flux_up_c" , 1, 1);
1424 sw_clnclrsky_flux_dn_c =
real2d_k(
"sw_clnclrsky_flux_dn_c" , 1, 1);
1425 sw_clnclrsky_flux_dn_dir_c =
real2d_k(
"sw_clnclrsky_flux_dn_dir_c", 1, 1);
1426 lw_clnclrsky_flux_up_c =
real2d_k(
"lw_clnclrsky_flux_up_c" , 1, 1);
1427 lw_clnclrsky_flux_dn_c =
real2d_k(
"lw_clnclrsky_flux_dn_c" , 1, 1);
1430 real2d_k sw_clnsky_flux_up_c, sw_clnsky_flux_dn_c, sw_clnsky_flux_dn_dir_c;
1431 real2d_k lw_clnsky_flux_up_c, lw_clnsky_flux_dn_c;
1439 sw_clnsky_flux_up_c =
real2d_k(
"sw_clnsky_flux_up_c" , 1, 1);
1440 sw_clnsky_flux_dn_c =
real2d_k(
"sw_clnsky_flux_dn_c" , 1, 1);
1441 sw_clnsky_flux_dn_dir_c =
real2d_k(
"sw_clnsky_flux_dn_dir_c", 1, 1);
1442 lw_clnsky_flux_up_c =
real2d_k(
"lw_clnsky_flux_up_c" , 1, 1);
1443 lw_clnsky_flux_dn_c =
real2d_k(
"lw_clnsky_flux_dn_c" , 1, 1);
1462 for (
int igas = 0; igas <
m_ngas; ++igas) {
1463 real2d_k vmr_c(
"vmr_c", ncol_c, nlay);
1464 auto vmr_full = vmr_full_vec[igas];
1466 Kokkos::parallel_for(Kokkos::MDRangePolicy<Kokkos::Rank<2>>({0, 0}, {ncol_c, nlay}),
1467 KOKKOS_LAMBDA (
int i,
int j) {
1468 vmr_c(i, j) = vmr_full(
cs + i, j);
1475 sfc_alb_dir_vis_c, sfc_alb_dir_nir_c,
1476 sfc_alb_dif_vis_c, sfc_alb_dif_nir_c,
1477 sfc_alb_dir_c , sfc_alb_dif_c);
1484 sfc_alb_dir_c, sfc_alb_dif_c, mu0_c,
1485 t_sfc_c, sfc_emis_c, lw_src_c,
1486 lwp_c, iwp_c, eff_radius_qc_c, eff_radius_qi_c, cldfrac_tot_c,
1487 sw_flux_up_c, sw_flux_dn_c, sw_flux_dn_dir_c,
1488 lw_flux_up_c, lw_flux_dn_c,
1489 sw_clnclrsky_flux_up_c, sw_clnclrsky_flux_dn_c, sw_clnclrsky_flux_dn_dir_c,
1490 sw_clrsky_flux_up_c, sw_clrsky_flux_dn_c, sw_clrsky_flux_dn_dir_c,
1491 sw_clnsky_flux_up_c, sw_clnsky_flux_dn_c, sw_clnsky_flux_dn_dir_c,
1492 lw_clnclrsky_flux_up_c, lw_clnclrsky_flux_dn_c,
1493 lw_clrsky_flux_up_c, lw_clrsky_flux_dn_c,
1494 lw_clnsky_flux_up_c, lw_clnsky_flux_dn_c,
1495 sw_bnd_flux_up_c, sw_bnd_flux_dn_c, sw_bnd_flux_dir_c,
1496 lw_bnd_flux_up_c, lw_bnd_flux_dn_c,
1504 Kokkos::parallel_for(Kokkos::MDRangePolicy<Kokkos::Rank<3>>({0, 0, 0}, {ncol_c, nlay+1, nswbands}),
1505 KOKKOS_LAMBDA (
int icol,
int ilay,
int ibnd)
1507 sw_bnd_flux_dif_c(icol,ilay,ibnd) = sw_bnd_flux_dn_c(icol,ilay,ibnd) - sw_bnd_flux_dir_c(icol,ilay,ibnd);
1510 sw_bnd_flux_dir_c , sw_bnd_flux_dif_c ,
1511 sfc_flux_dir_vis_c, sfc_flux_dir_nir_c,
1512 sfc_flux_dif_vis_c, sfc_flux_dif_nir_c);
1514 gas_concs_c.reset();
constexpr amrex::Real mwdair
Definition: ERF_Constants.H:66
constexpr amrex::Real PI
Definition: ERF_NumericalConstants.H:39
AMREX_GPU_HOST AMREX_FORCE_INLINE double orbital_calday(int year, int mon, int day, int sec)
Definition: ERF_OrbCosZenith.H:485
AMREX_GPU_HOST AMREX_FORCE_INLINE double orbital_cos_zenith(double &jday, double &lat, double &lon, double &declin, double dt_avg=-one, double uniform_angle=-one, double constant_zenith_angle_deg=-one)
Definition: ERF_OrbCosZenith.H:620
AMREX_GPU_HOST AMREX_FORCE_INLINE void orbital_decl(double &calday, double &eccen, double &mvelpp, double &lambm0, double &obliqr, double &delta, double &eccf)
Definition: ERF_OrbCosZenith.H:18
AMREX_GPU_HOST AMREX_FORCE_INLINE void orbital_params(int &iyear_AD, double &eccen, double &obliq, double &mvelp, double &obliqr, double &lambm0, double &mvelpp)
Definition: ERF_OrbCosZenith.H:84
std::string name
Definition: ERF_Plotfile2DCatalog.cpp:101
double m_dt
Definition: ERF_Radiation.H:284
real(c_double), private cs
Definition: ERF_module_mp_morr_two_moment.F90:203
void rrtmgp_main(const int ncol, const int nlay, real2d_k &p_lay, real2d_k &t_lay, real2d_k &p_lev, real2d_k &t_lev, gas_concs_t &gas_concs, real2d_k &sfc_alb_dir, real2d_k &sfc_alb_dif, real1d_k &mu0, real1d_k &t_sfc, real1d_k &sfc_emis, real1d_k &lw_src, real2d_k &lwp, real2d_k &iwp, real2d_k &rel, real2d_k &rei, real2d_k &cldfrac, real2d_k &sw_flux_up, real2d_k &sw_flux_dn, real2d_k &sw_flux_dn_dir, real2d_k &lw_flux_up, real2d_k &lw_flux_dn, real2d_k &sw_clnclrsky_flux_up, real2d_k &sw_clnclrsky_flux_dn, real2d_k &sw_clnclrsky_flux_dn_dir, real2d_k &sw_clrsky_flux_up, real2d_k &sw_clrsky_flux_dn, real2d_k &sw_clrsky_flux_dn_dir, real2d_k &sw_clnsky_flux_up, real2d_k &sw_clnsky_flux_dn, real2d_k &sw_clnsky_flux_dn_dir, real2d_k &lw_clnclrsky_flux_up, real2d_k &lw_clnclrsky_flux_dn, real2d_k &lw_clrsky_flux_up, real2d_k &lw_clrsky_flux_dn, real2d_k &lw_clnsky_flux_up, real2d_k &lw_clnsky_flux_dn, real3d_k &sw_bnd_flux_up, real3d_k &sw_bnd_flux_dn, real3d_k &sw_bnd_flux_dn_dir, real3d_k &lw_bnd_flux_up, real3d_k &lw_bnd_flux_dn, const RealT tsi_scaling, const bool extra_clnclrsky_diag, const bool extra_clnsky_diag)
Definition: ERF_RRTMGP_Interface.cpp:393
void compute_band_by_band_surface_albedos(const int ncol, const int nswbands, real1d_k &sfc_alb_dir_vis, real1d_k &sfc_alb_dir_nir, real1d_k &sfc_alb_dif_vis, real1d_k &sfc_alb_dif_nir, real2d_k &sfc_alb_dir, real2d_k &sfc_alb_dif)
Definition: ERF_RRTMGP_Interface.cpp:291
void compute_broadband_surface_fluxes(const int ncol, const int kbot, const int nswbands, real3d_k &sw_bnd_flux_dir, real3d_k &sw_bnd_flux_dif, real1d_k &sfc_flux_dir_vis, real1d_k &sfc_flux_dir_nir, real1d_k &sfc_flux_dif_vis, real1d_k &sfc_flux_dif_nir)
Definition: ERF_RRTMGP_Interface.cpp:335
void mixing_ratio_to_cloud_mass(View1 const &mixing_ratio, View2 const &cloud_fraction, View3 const &rho, View4 const &dz, View5 const &cloud_mass)
Definition: ERF_RRTMGP_Utils.H:12