@@ -202,13 +202,14 @@ void MAMMicrophysics::set_grids(
202
202
// from a file and configuring the necessary parameters for the Linoz model.
203
203
{
204
204
linoz_file_name_ = m_params.get <std::string>(" mam4_linoz_file_name" );
205
- std::string linoz_map_file = " " ;
206
- std::vector<std::string> var_names{" o3_clim" , " o3col_clim" , " t_clim" ,
207
- " PmL_clim" , " dPmL_dO3" , " dPmL_dT" ,
208
- " dPmL_dO3col" , " cariolle_pscs" };
205
+ const std::string linoz_map_file =
206
+ m_params.get <std::string>(" aero_microphys_remap_file" , " " );
207
+ const std::vector<std::string> var_names{
208
+ " o3_clim" , " o3col_clim" , " t_clim" , " PmL_clim" ,
209
+ " dPmL_dO3" , " dPmL_dT" , " dPmL_dO3col" , " cariolle_pscs" };
209
210
210
211
// in format YYYYMMDD
211
- int linoz_cyclical_ymd = m_params.get <int >(" mam4_linoz_ymd" );
212
+ const int linoz_cyclical_ymd = m_params.get <int >(" mam4_linoz_ymd" );
212
213
scream::mam_coupling::setup_tracer_data (linoz_data_, linoz_file_name_,
213
214
linoz_cyclical_ymd);
214
215
LinozHorizInterp_ = scream::mam_coupling::create_horiz_remapper (
@@ -245,12 +246,13 @@ void MAMMicrophysics::set_grids(
245
246
246
247
{
247
248
oxid_file_name_ = m_params.get <std::string>(" mam4_oxid_file_name" );
248
- std::string oxid_map_file = " " ;
249
+ const std::string oxid_map_file =
250
+ m_params.get <std::string>(" aero_microphys_remap_file" , " " );
249
251
// NOTE: order matches mam4xx:
250
- std::vector<std::string> var_names{" O3" , " OH" , " NO3" , " HO2" };
252
+ const std::vector<std::string> var_names{" O3" , " OH" , " NO3" , " HO2" };
251
253
252
- // // in format YYYYMMDD
253
- int oxid_ymd = m_params.get <int >(" mam4_oxid_ymd" );
254
+ // in format YYYYMMDD
255
+ const int oxid_ymd = m_params.get <int >(" mam4_oxid_ymd" );
254
256
scream::mam_coupling::setup_tracer_data (tracer_data_, oxid_file_name_,
255
257
oxid_ymd);
256
258
TracerHorizInterp_ = scream::mam_coupling::create_horiz_remapper (
@@ -280,15 +282,15 @@ void MAMMicrophysics::set_grids(
280
282
} // oxid file reader
281
283
282
284
{
283
- // FIXME: I will need to add this file per forcing file.
284
- std::string extfrc_map_file = " " ;
285
+ const std::string extfrc_map_file =
286
+ m_params. get < std::string>( " aero_microphys_remap_file " , " " ) ;
285
287
// NOTE: order of forcing species is important.
286
288
// extfrc_lst(: 9) = {'SO2 ','so4_a1 ','so4_a2
287
289
// ','pom_a4 ','bc_a4 ', 'num_a1 ','num_a2
288
290
// ','num_a4 ','SOAG ' }
289
291
// This order corresponds to files in namelist e3smv2
290
- extfrc_lst_ = {" so2" , " so4_a1" , " so4_a2" , " pom_a4" , " bc_a4" ,
291
- " num_a1" , " num_a2" , " num_a4" , " soag" };
292
+ extfrc_lst_ = {" so2" , " so4_a1" , " so4_a2" , " pom_a4" , " bc_a4" ,
293
+ " num_a1" , " num_a2" , " num_a4" , " soag" };
292
294
293
295
for (const auto &var_name : extfrc_lst_) {
294
296
std::string item_name = " mam4_" + var_name + " _verti_emiss_file_name" ;
@@ -330,11 +332,10 @@ void MAMMicrophysics::set_grids(
330
332
} // var_name vert emissions
331
333
int i = 0 ;
332
334
int offset_emis_ver = 0 ;
333
- for (const auto &var_name : extfrc_lst_)
334
- {
335
+ for (const auto &var_name : extfrc_lst_) {
335
336
const auto file_name = vert_emis_file_name_[var_name];
336
337
const auto var_names = vert_emis_var_names_[var_name];
337
- const int nvars = static_cast <int >(var_names.size ());
338
+ const int nvars = static_cast <int >(var_names.size ());
338
339
339
340
forcings_[i].nsectors = nvars;
340
341
// I am assuming the order of species in extfrc_lst_.
@@ -358,10 +359,10 @@ void MAMMicrophysics::set_grids(
358
359
++i;
359
360
} // end i
360
361
EKAT_REQUIRE_MSG (
361
- offset_emis_ver <= int (mam_coupling::MAX_NUM_VERT_EMISSION_FIELDS),
362
- " Error! Number of fields is bigger than "
363
- " MAX_NUM_VERT_EMISSION_FIELDS. Increase the "
364
- " MAX_NUM_VERT_EMISSION_FIELDS in tracer_reader_utils.hpp \n " );
362
+ offset_emis_ver <= int (mam_coupling::MAX_NUM_VERT_EMISSION_FIELDS),
363
+ " Error! Number of fields is bigger than "
364
+ " MAX_NUM_VERT_EMISSION_FIELDS. Increase the "
365
+ " MAX_NUM_VERT_EMISSION_FIELDS in tracer_reader_utils.hpp \n " );
365
366
366
367
#if defined(ENABLE_OUTPUT_TRACER_FIELDS)
367
368
FieldLayout scalar3d_mid_emis_ver = grid_->get_3d_vector_layout (
@@ -394,12 +395,14 @@ size_t MAMMicrophysics::requested_buffer_size_in_bytes() const {
394
395
void MAMMicrophysics::init_buffers (const ATMBufferManager &buffer_manager) {
395
396
size_t used_mem =
396
397
mam_coupling::init_buffer (buffer_manager, ncol_, nlev_, buffer_);
397
- EKAT_REQUIRE_MSG (
398
- used_mem == requested_buffer_size_in_bytes (),
399
- " Error! Used memory != requested memory for MAMMicrophysics."
400
- " Used memory: " << std::to_string (used_mem) << " ."
401
- " Requested memory: " << std::to_string (requested_buffer_size_in_bytes ()) << " . \n "
402
- );
398
+ EKAT_REQUIRE_MSG (used_mem == requested_buffer_size_in_bytes (),
399
+ " Error! Used memory != requested memory for MAMMicrophysics."
400
+ " Used memory: "
401
+ << std::to_string (used_mem)
402
+ << " ."
403
+ " Requested memory: "
404
+ << std::to_string (requested_buffer_size_in_bytes ())
405
+ << " . \n " );
403
406
}
404
407
405
408
// ================================================================
@@ -555,7 +558,7 @@ void MAMMicrophysics::initialize_impl(const RunType run_type) {
555
558
scream::mam_coupling::update_tracer_data_from_file (
556
559
TracerDataReader_, curr_month, *TracerHorizInterp_, tracer_data_);
557
560
558
- for (int i = 0 ; i < static_cast <int >(extfrc_lst_.size ()); ++i) {
561
+ for (int i = 0 ; i < static_cast <int >(extfrc_lst_.size ()); ++i) {
559
562
scream::mam_coupling::update_tracer_data_from_file (
560
563
VertEmissionsDataReader_[i], curr_month, *VertEmissionsHorizInterp_[i],
561
564
vert_emis_data_[i]);
@@ -723,14 +726,14 @@ void MAMMicrophysics::run_impl(const double dt) {
723
726
// Note: We are following the RRTMGP EAMxx interface to compute the zenith
724
727
// angle. This operation is performed on the host because the routine
725
728
// shr_orb_cosz_c2f has not been ported to C++.
726
- auto ts2 = timestamp ();
729
+ auto ts2 = timestamp ();
727
730
auto orbital_year = m_orbital_year;
728
731
// Note: We need double precision because
729
732
// shr_orb_params_c2f and shr_orb_decl_c2f only support double precision.
730
733
double obliqr, lambm0, mvelpp;
731
- double eccen = m_orbital_eccen;
732
- double obliq = m_orbital_obliq;
733
- double mvelp = m_orbital_mvelp;
734
+ double eccen = m_orbital_eccen;
735
+ double obliq = m_orbital_obliq;
736
+ double mvelp = m_orbital_mvelp;
734
737
// Use the orbital parameters to calculate the solar declination and
735
738
// eccentricity factor
736
739
double delta, eccf;
0 commit comments