996 double obliqr, lambm0, mvelpp;
1001 if (eccen >= 0 && obliq >= 0 && mvelp >= 0) {
1006 mvelp, obliqr, lambm0, mvelpp);
1011 static constexpr
double dpy[] = {0.0 , 31.0, 59.0, 90.0, 120.0, 151.0,
1012 181.0, 212.0, 243.0, 273.0, 304.0, 334.0};
1016 if (leap) { calday += 1.0; }
1017 orbital_decl(calday, eccen, mvelpp, lambm0, obliqr, delta, eccf);
1021 if (fixed_total_solar_irradiance >= 0){
1022 eccf = fixed_total_solar_irradiance/1360.9;
1030 for (
int igas(0); igas <
m_ngas; ++igas) {
1031 auto tmp2d = Kokkos::View<RealT**,layout_t,KokkosDefaultMem>(
"tmp2d", ncol, nlay);
1034 if (name ==
"H2O") {
1036 Kokkos::parallel_for(Kokkos::MDRangePolicy<Kokkos::Rank<2>>({0, 0}, {ncol, nlay}),
1037 KOKKOS_LAMBDA (
int icol,
int ilay)
1039 tmp2d(icol,ilay) = qv_lay_d(icol,ilay) *
mwdair/gas_mol_weight;
1041 }
else if (name ==
"CO2") {
1042 Kokkos::deep_copy(tmp2d,
m_co2vmr);
1043 }
else if (name ==
"O3") {
1045 Kokkos::deep_copy(tmp2d,
m_o3vmr[0] );
1048 Kokkos::parallel_for(Kokkos::MDRangePolicy<Kokkos::Rank<2>>({0, 0}, {ncol, nlay}),
1049 KOKKOS_LAMBDA (
int icol,
int ilay)
1051 tmp2d(icol,ilay) = o3_lay_d(ilay);
1054 }
else if (name ==
"N2O") {
1055 Kokkos::deep_copy(tmp2d,
m_n2ovmr);
1056 }
else if (name ==
"CO") {
1057 Kokkos::deep_copy(tmp2d,
m_covmr );
1058 }
else if (name ==
"CH4") {
1059 Kokkos::deep_copy(tmp2d,
m_ch4vmr);
1060 }
else if (name ==
"O2") {
1061 Kokkos::deep_copy(tmp2d,
m_o2vmr );
1062 }
else if (name ==
"N2") {
1063 Kokkos::deep_copy(tmp2d,
m_n2vmr );
1065 Abort(
"Radiation: Unknown gas component.");
1075 auto h_mu0 = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(),
mu0);
1079 auto h_lat = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(),
lat);
1080 auto h_lon = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(),
lon);
1081 double dt = double(
m_dt);
1083 Kokkos::parallel_for(Kokkos::RangePolicy<Kokkos::Serial>(0, ncol),
1087 double lat_col = h_lat(icol)*
PI/180.0;
1088 double lon_col = h_lon(icol)*
PI/180.0;
1089 double lcalday = calday;
1090 double ldelta = delta;
1094 Kokkos::deep_copy(
mu0, h_mu0);
1103 Kokkos::parallel_for(Kokkos::MDRangePolicy<Kokkos::Rank<2>>({0, 0}, {ncol, nlay}),
1104 KOKKOS_LAMBDA (
int icol,
int ilay)
1106 lwp_d(icol,ilay) *= 1.e3;
1107 iwp_d(icol,ilay) *= 1.e3;
1142 Kokkos::deep_copy(
mu0, 0.86);
1164 Kokkos::parallel_for(Kokkos::MDRangePolicy<Kokkos::Rank<2>>({0, 0}, {ncol, nlay}),
1165 KOKKOS_LAMBDA (
int icol,
int ilay)
1168 (
p_lay(icol,ilay) < 900. * 100.) &&
1229 Kokkos::parallel_for(Kokkos::MDRangePolicy<Kokkos::Rank<3>>({0, 0, 0}, {ncol, nlay+1, nswbands}),
1230 KOKKOS_LAMBDA (
int icol,
int ilay,
int ibnd)
1232 sw_bnd_flux_dif_d(icol,ilay,ibnd) = sw_bnd_flux_dn_d(icol,ilay,ibnd) - sw_bnd_flux_dir_d(icol,ilay,ibnd);
static constexpr int ORB_UNDEF_INT
Definition: ERF_Constants.H:96
constexpr amrex::Real mwdair
Definition: ERF_Constants.H:64
constexpr amrex::Real PI
Definition: ERF_Constants.H:6
double real
Definition: ERF_OrbCosZenith.H:9
AMREX_GPU_HOST AMREX_FORCE_INLINE real orbital_cos_zenith(real &jday, real &lat, real &lon, real &declin, real dt_avg=-1., real uniform_angle=-1., real constant_zenith_angle_deg=-1.)
Definition: ERF_OrbCosZenith.H:559
AMREX_GPU_HOST AMREX_FORCE_INLINE void orbital_decl(real &calday, real &eccen, real &mvelpp, real &lambm0, real &obliqr, real &delta, real &eccf)
Definition: ERF_OrbCosZenith.H:15
AMREX_GPU_HOST AMREX_FORCE_INLINE void orbital_params(int &iyear_AD, real &eccen, real &obliq, real &mvelp, real &obliqr, real &lambm0, real &mvelpp)
Definition: ERF_OrbCosZenith.H:81
amrex::Real m_dt
Definition: ERF_Radiation.H:216
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:282
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:326
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
std::unique_ptr< cloud_optics_t > cloud_optics_sw_k
Definition: ERF_RRTMGP_Interface.cpp:18
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, real2d_k &emis_sfc, real1d_k &lw_src, real2d_k &lwp, real2d_k &iwp, real2d_k &rel, real2d_k &rei, real2d_k &cldfrac, real3d_k &aer_tau_sw, real3d_k &aer_ssa_sw, real3d_k &aer_asm_sw, real3d_k &aer_tau_lw, real3d_k &cld_tau_sw_bnd, real3d_k &cld_tau_lw_bnd, real3d_k &cld_tau_sw_gpt, real3d_k &cld_tau_lw_gpt, 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:384