ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_RRTMGP_Interface.H
Go to the documentation of this file.
1 #ifndef ERF_RRTMGP_INTERFACE_H
2 #define ERF_RRTMGP_INTERFACE_H
3 
4 #include <Kokkos_Core.hpp>
5 
6 #include <AMReX_REAL.H>
7 
8 #include <rrtmgp_const.h>
9 #include <mo_gas_optics_rrtmgp.h>
10 #include <mo_cloud_optics.h>
11 #include <mo_fluxes_byband.h>
12 #include <mo_load_coefficients.h>
13 #include <mo_gas_concentrations.h>
14 #include <mo_gas_optics_rrtmgp.h>
15 #include <mo_cloud_optics.h>
16 #include <mo_rte_sw.h>
17 #include <mo_rte_lw.h>
18 #include <mo_load_cloud_coefficients.h>
19 
20 #include <ERF_RRTMGP_Utils.H>
21 #include <ERF_Constants.H>
22 
23 #include <ERF_Kokkos.H>
24 
25 template <typename T>
26 using view_t = Kokkos::View<T, layout_t, KokkosDefaultDevice>;
27 
28 using pool_t = conv::MemPoolSingleton<RealT, layout_t, KokkosDefaultDevice>;
29 
30 using gas_optics_t = GasOpticsRRTMGPK<RealT, layout_t, KokkosDefaultDevice>;
31 using cloud_optics_t = CloudOpticsK<RealT, layout_t, KokkosDefaultDevice>;
32 using gas_concs_t = GasConcsK<RealT, layout_t, KokkosDefaultDevice>;
33 using fluxes_t = FluxesBybandK<RealT, layout_t, KokkosDefaultDevice>;
34 using fluxes_broadband_t = FluxesBroadbandK<RealT, layout_t, KokkosDefaultDevice>;
35 using optical_props_t = OpticalPropsK<RealT, layout_t, KokkosDefaultDevice>;
36 using optical_props1_t = OpticalProps1sclK<RealT, layout_t, KokkosDefaultDevice>;
37 using optical_props2_t = OpticalProps2strK<RealT, layout_t, KokkosDefaultDevice>;
38 using source_func_t = SourceFuncLWK<RealT, layout_t, KokkosDefaultDevice>;
39 
40 namespace rrtmgp {
41 
42 extern std::unique_ptr<gas_optics_t> k_dist_sw_k;
43 extern std::unique_ptr<gas_optics_t> k_dist_lw_k;
44 
45 extern std::unique_ptr<cloud_optics_t> cloud_optics_sw_k;
46 extern std::unique_ptr<cloud_optics_t> cloud_optics_lw_k;
47 
48 extern bool initialized;
49 
51 get_cloud_optics_sw (const int ncol,
52  const int nlay,
53  cloud_optics_t& cloud_optics,
54  gas_optics_t& kdist,
55  real2d_k& lwp,
56  real2d_k& iwp,
57  real2d_k& rel,
58  real2d_k& rei);
59 
61 get_cloud_optics_lw (const int ncol,
62  const int nlay,
63  cloud_optics_t& cloud_optics,
64  gas_optics_t& kdist,
65  real2d_k& lwp,
66  real2d_k& iwp,
67  real2d_k& rel,
68  real2d_k& rei);
69 
71 get_subsampled_clouds (const int ncol,
72  const int nlay,
73  const int nbnd,
74  const int ngpt,
75  optical_props2_t& cloud_optics,
76  gas_optics_t& kdist,
77  real2d_k& cld,
78  real2d_k& p_lay);
79 
81 get_subsampled_clouds (const int ncol,
82  const int nlay,
83  const int nbnd,
84  const int ngpt,
85  optical_props1_t& cloud_optics,
86  gas_optics_t& kdist,
87  real2d_k& cld,
88  real2d_k& p_lay);
89 
90 void
91 rrtmgp_initialize (gas_concs_t& gas_concs,
92  const std::string& coefficients_file_sw, const std::string& coefficients_file_lw,
93  const std::string& cloud_optics_file_sw, const std::string& cloud_optics_file_lw);
94 
95 
96 void
98 
99 
100 void
101 compute_band_by_band_surface_albedos (const int ncol, const int nswbands,
104  real2d_k& sfc_alb_dir, real2d_k& sfc_alb_dif);
105 
106 
107 void
108 compute_broadband_surface_fluxes (const int ncol, const int kbot, const int nswbands,
109  real3d_k& sw_bnd_flux_dir , real3d_k& sw_bnd_flux_dif ,
110  real1d_k& sfc_flux_dir_vis, real1d_k& sfc_flux_dir_nir,
111  real1d_k& sfc_flux_dif_vis, real1d_k& sfc_flux_dif_nir);
112 
113 
114 void
115 rrtmgp_main (const int ncol, const int nlay,
116  real2d_k& p_lay, real2d_k& t_lay,
117  real2d_k& p_lev, real2d_k& t_lev,
118  gas_concs_t& gas_concs,
119  real2d_k& sfc_alb_dir, real2d_k& sfc_alb_dif, real1d_k& mu0,
120  real1d_k& t_sfc , real2d_k& emis_sfc , real1d_k& lw_src,
121  real2d_k& lwp , real2d_k& iwp ,
122  real2d_k& rel , real2d_k& rei , real2d_k& cldfrac,
123  real3d_k& aer_tau_sw , real3d_k& aer_ssa_sw , real3d_k& aer_asm_sw,
124  real3d_k& aer_tau_lw ,
125  real3d_k& cld_tau_sw_bnd, real3d_k& cld_tau_lw_bnd,
126  real3d_k& cld_tau_sw_gpt, real3d_k& cld_tau_lw_gpt,
127  real2d_k& sw_flux_up , real2d_k& sw_flux_dn , real2d_k& sw_flux_dn_dir,
128  real2d_k& lw_flux_up , real2d_k& lw_flux_dn ,
129  real2d_k& sw_clnclrsky_flux_up, real2d_k& sw_clnclrsky_flux_dn, real2d_k& sw_clnclrsky_flux_dn_dir,
130  real2d_k& sw_clrsky_flux_up , real2d_k& sw_clrsky_flux_dn , real2d_k& sw_clrsky_flux_dn_dir,
131  real2d_k& sw_clnsky_flux_up , real2d_k& sw_clnsky_flux_dn , real2d_k& sw_clnsky_flux_dn_dir,
132  real2d_k& lw_clnclrsky_flux_up, real2d_k& lw_clnclrsky_flux_dn,
133  real2d_k& lw_clrsky_flux_up , real2d_k& lw_clrsky_flux_dn ,
134  real2d_k& lw_clnsky_flux_up , real2d_k& lw_clnsky_flux_dn ,
135  real3d_k& sw_bnd_flux_up , real3d_k& sw_bnd_flux_dn , real3d_k& sw_bnd_flux_dn_dir,
136  real3d_k& lw_bnd_flux_up , real3d_k& lw_bnd_flux_dn,
137  const RealT tsi_scaling,
138  const bool extra_clnclrsky_diag = false, const bool extra_clnsky_diag = false);
139 
140 
141 void
142 rrtmgp_sw (const int ncol, const int nlay,
143  gas_optics_t& k_dist,
144  real2d_k& p_lay, real2d_k& t_lay,
145  real2d_k& p_lev, real2d_k& t_lev,
146  gas_concs_t& gas_concs,
147  real2d_k& sfc_alb_dir, real2d_k& sfc_alb_dif, real1d_k& mu0,
148  optical_props2_t& aerosol, optical_props2_t& clouds,
149  fluxes_t& fluxes,
150  fluxes_broadband_t& clnclrsky_fluxes,
151  fluxes_broadband_t& clrsky_fluxes,
152  fluxes_broadband_t& clnsky_fluxes,
153  const RealT tsi_scaling,
154  const bool extra_clnclrsky_diag,
155  const bool extra_clnsky_diag);
156 
157 
158 void
159 rrtmgp_lw (const int ncol, const int nlay,
160  gas_optics_t& k_dist,
161  real2d_k& p_lay, real2d_k& t_lay,
162  real2d_k& p_lev, real2d_k& t_lev,
163  real1d_k& t_sfc, real2d_k& emis_sfc, real1d_k& lw_src,
164  gas_concs_t& gas_concs,
165  optical_props1_t& aerosol, optical_props1_t& clouds,
166  fluxes_t& fluxes,
167  fluxes_broadband_t& clnclrsky_fluxes,
168  fluxes_broadband_t& clrsky_fluxes,
169  fluxes_broadband_t& clnsky_fluxes,
170  const bool extra_clnclrsky_diag,
171  const bool extra_clnsky_diag);
172 
173 
174 int3d_k
175 get_subcolumn_mask (const int ncol,
176  const int nlay,
177  const int ngpt,
178  real2d_k& cldf,
179  const int overlap_option,
180  int1d_k& seeds);
181 
182 
183 void
184 compute_cloud_area (int ncol,
185  int nlay,
186  int ngpt,
187  RealT pmin,
188  RealT pmax,
189  const real2d_k& pmid,
190  const real3d_k& cld_tau_gpt,
191  real1d_k& cld_area);
192 
193 
194 void
195 compute_aerocom_cloudtop (int ncol, int nlay,
196  const real2d_k& tmid , const real2d_k& pmid,
197  const real2d_k& p_del, const real2d_k& z_del,
198  const real2d_k& qc , const real2d_k& qi,
199  const real2d_k& rel , const real2d_k& rei,
200  const real2d_k& cldfrac_tot, const real2d_k& nc,
201  real1d_k& T_mid_at_cldtop , real1d_k& p_mid_at_cldtop,
202  real1d_k& cldfrac_ice_at_cldtop , real1d_k& cldfrac_liq_at_cldtop,
203  real1d_k& cldfrac_tot_at_cldtop , real1d_k& cdnc_at_cldtop,
204  real1d_k& eff_radius_qc_at_cldtop, real1d_k& eff_radius_qi_at_cldtop);
205 
206 int get_wavelength_index (optical_props_t& kdist, RealT wavelength);
207 int get_wavelength_index_sw (RealT wavelength);
208 int get_wavelength_index_lw (RealT wavelength);
209 
210 } // namespace rrtmgp
211 #endif
Kokkos::View< RealT *, KokkosDefaultDevice > real1d_k
Definition: ERF_Kokkos.H:17
Kokkos::View< int *, KokkosDefaultDevice > int1d_k
Definition: ERF_Kokkos.H:20
amrex::Real RealT
Definition: ERF_Kokkos.H:14
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
Kokkos::View< int ***, layout_t, KokkosDefaultDevice > int3d_k
Definition: ERF_Kokkos.H:22
FluxesBroadbandK< RealT, layout_t, KokkosDefaultDevice > fluxes_broadband_t
Definition: ERF_RRTMGP_Interface.H:34
OpticalProps1sclK< RealT, layout_t, KokkosDefaultDevice > optical_props1_t
Definition: ERF_RRTMGP_Interface.H:36
CloudOpticsK< RealT, layout_t, KokkosDefaultDevice > cloud_optics_t
Definition: ERF_RRTMGP_Interface.H:31
OpticalProps2strK< RealT, layout_t, KokkosDefaultDevice > optical_props2_t
Definition: ERF_RRTMGP_Interface.H:37
FluxesBybandK< RealT, layout_t, KokkosDefaultDevice > fluxes_t
Definition: ERF_RRTMGP_Interface.H:33
OpticalPropsK< RealT, layout_t, KokkosDefaultDevice > optical_props_t
Definition: ERF_RRTMGP_Interface.H:35
GasConcsK< RealT, layout_t, KokkosDefaultDevice > gas_concs_t
Definition: ERF_RRTMGP_Interface.H:32
GasOpticsRRTMGPK< RealT, layout_t, KokkosDefaultDevice > gas_optics_t
Definition: ERF_RRTMGP_Interface.H:30
Kokkos::View< T, layout_t, KokkosDefaultDevice > view_t
Definition: ERF_RRTMGP_Interface.H:26
SourceFuncLWK< RealT, layout_t, KokkosDefaultDevice > source_func_t
Definition: ERF_RRTMGP_Interface.H:38
conv::MemPoolSingleton< RealT, layout_t, KokkosDefaultDevice > pool_t
Definition: ERF_RRTMGP_Interface.H:28
@ sw_flux_dn
Definition: ERF_NOAHMP.H:31
@ lw_flux_dn
Definition: ERF_NOAHMP.H:32
@ t_sfc
Definition: ERF_NOAHMP.H:25
@ sfc_alb_dif_vis
Definition: ERF_NOAHMP.H:29
@ sfc_alb_dir_vis
Definition: ERF_NOAHMP.H:27
@ sfc_alb_dir_nir
Definition: ERF_NOAHMP.H:28
@ sfc_alb_dif_nir
Definition: ERF_NOAHMP.H:30
@ nc
Definition: ERF_Morrison.H:44
@ qc
Definition: ERF_SatAdj.H:36
Definition: ERF_RRTMGP_Interface.cpp:3
void rrtmgp_finalize()
Definition: ERF_RRTMGP_Interface.cpp:266
void rrtmgp_initialize(gas_concs_t &gas_concs_k, const std::string &coefficients_file_sw, const std::string &coefficients_file_lw, const std::string &cloud_optics_file_sw, const std::string &cloud_optics_file_lw)
Definition: ERF_RRTMGP_Interface.cpp:229
int get_wavelength_index_sw(RealT wavelength)
Definition: ERF_RRTMGP_Interface.cpp:1094
int get_wavelength_index_lw(RealT wavelength)
Definition: ERF_RRTMGP_Interface.cpp:1098
void compute_aerocom_cloudtop(int ncol, int nlay, const real2d_k &tmid, const real2d_k &pmid, const real2d_k &p_del, const real2d_k &z_del, const real2d_k &qc, const real2d_k &qi, const real2d_k &rel, const real2d_k &rei, const real2d_k &cldfrac_tot, const real2d_k &nc, real1d_k &T_mid_at_cldtop, real1d_k &p_mid_at_cldtop, real1d_k &cldfrac_ice_at_cldtop, real1d_k &cldfrac_liq_at_cldtop, real1d_k &cldfrac_tot_at_cldtop, real1d_k &cdnc_at_cldtop, real1d_k &eff_radius_qc_at_cldtop, real1d_k &eff_radius_qi_at_cldtop)
Definition: ERF_RRTMGP_Interface.cpp:1132
optical_props1_t get_cloud_optics_lw(const int ncol, const int nlay, cloud_optics_t &cloud_optics, gas_optics_t &kdist, real2d_k &lwp, real2d_k &iwp, real2d_k &rel, real2d_k &rei)
Definition: ERF_RRTMGP_Interface.cpp:62
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
std::unique_ptr< gas_optics_t > k_dist_sw_k
Definition: ERF_RRTMGP_Interface.cpp:10
int get_wavelength_index(optical_props_t &kdist, RealT wavelength)
Definition: ERF_RRTMGP_Interface.cpp:1102
optical_props2_t get_cloud_optics_sw(const int ncol, const int nlay, cloud_optics_t &cloud_optics, gas_optics_t &kdist, real2d_k &lwp, real2d_k &iwp, real2d_k &rel, real2d_k &rei)
Definition: ERF_RRTMGP_Interface.cpp:28
void rrtmgp_sw(const int ncol, const int nlay, gas_optics_t &k_dist, 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, optical_props2_t &aerosol, optical_props2_t &clouds, fluxes_t &fluxes, fluxes_broadband_t &clnclrsky_fluxes, fluxes_broadband_t &clrsky_fluxes, fluxes_broadband_t &clnsky_fluxes, const RealT tsi_scaling, const bool extra_clnclrsky_diag, const bool extra_clnsky_diag)
Definition: ERF_RRTMGP_Interface.cpp:601
std::unique_ptr< gas_optics_t > k_dist_lw_k
Definition: ERF_RRTMGP_Interface.cpp:11
void rrtmgp_lw(const int ncol, const int nlay, gas_optics_t &k_dist, real2d_k &p_lay, real2d_k &t_lay, real2d_k &p_lev, real2d_k &t_lev, real1d_k &t_sfc, real2d_k &emis_sfc, real1d_k &lw_src, gas_concs_t &gas_concs, optical_props1_t &aerosol, optical_props1_t &clouds, fluxes_t &fluxes, fluxes_broadband_t &clnclrsky_fluxes, fluxes_broadband_t &clrsky_fluxes, fluxes_broadband_t &clnsky_fluxes, const bool extra_clnclrsky_diag, const bool extra_clnsky_diag)
Definition: ERF_RRTMGP_Interface.cpp:895
std::unique_ptr< cloud_optics_t > cloud_optics_sw_k
Definition: ERF_RRTMGP_Interface.cpp:18
int3d_k get_subcolumn_mask(const int ncol, const int nlay, const int ngpt, real2d_k &cldf, const int overlap_option, int1d_k &seeds)
Definition: ERF_RRTMGP_Interface.cpp:528
std::unique_ptr< cloud_optics_t > cloud_optics_lw_k
Definition: ERF_RRTMGP_Interface.cpp:19
bool initialized
Definition: ERF_RRTMGP_Interface.cpp:24
optical_props2_t get_subsampled_clouds(const int ncol, const int nlay, const int nbnd, const int ngpt, optical_props2_t &cloud_optics, gas_optics_t &kdist, real2d_k &cld, real2d_k &p_lay)
Definition: ERF_RRTMGP_Interface.cpp:96
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
void compute_cloud_area(int ncol, int nlay, int ngpt, const RealT pmin, const RealT pmax, const real2d_k &pmid, const real3d_k &cld_tau_gpt, real1d_k &cld_area)
Definition: ERF_RRTMGP_Interface.cpp:1057