Skip to content

Commit

Permalink
Merge Pull Request #2760 from E3SM-Project/scream/bartgol/eamxx/logge…
Browse files Browse the repository at this point in the history
…r-flush-level

Automatically Merged using E3SM Pull Request AutoTester
PR Title: EAMxx: add possibility of auto-flushing the atm logger
PR Author: bartgol
PR LABELS: infrastructure, AT: AUTOMERGE, code usability
  • Loading branch information
E3SM-Autotester authored Mar 15, 2024
2 parents d5c1ea6 + b04af6b commit 0459aca
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 18 deletions.
5 changes: 5 additions & 0 deletions components/eamxx/cime_config/namelist_defaults_scream.xml
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,11 @@ be lost if SCREAM_HACK_XML is not enabled.
doc="Verbosity level for the atm logger">
info
</atm_log_level>
<atm_flush_level type="string"
valid_values="trace,debug,info,warn,error"
doc="Verbosity level that triggers automatic flush of the atm logger">
warn
</atm_flush_level>
<output_to_screen type="logical">false</output_to_screen>
<mass_column_conservation_error_tolerance>1e-10</mass_column_conservation_error_tolerance>
<energy_column_conservation_error_tolerance>1e-14</energy_column_conservation_error_tolerance>
Expand Down
41 changes: 23 additions & 18 deletions components/eamxx/src/control/atmosphere_driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -941,29 +941,34 @@ void AtmosphereDriver::create_logger () {
auto& driver_options_pl = m_atm_params.sublist("driver_options");

ci_string log_fname = driver_options_pl.get<std::string>("Atm Log File","atm.log");
ci_string log_level_str = driver_options_pl.get<std::string>("atm_log_level","info");
ci_string log_level = driver_options_pl.get<std::string>("atm_log_level","info");
ci_string flush_level = driver_options_pl.get<std::string>("atm_flush_level","warn");
EKAT_REQUIRE_MSG (log_fname!="",
"Invalid string for 'Atm Log File': '" + log_fname + "'.\n");

LogLevel log_level;
if (log_level_str=="trace") {
log_level = LogLevel::trace;
} else if (log_level_str=="debug") {
log_level = LogLevel::debug;
} else if (log_level_str=="info") {
log_level = LogLevel::info;
} else if (log_level_str=="warn") {
log_level = LogLevel::warn;
} else if (log_level_str=="err") {
log_level = LogLevel::err;
} else if (log_level_str=="off") {
log_level = LogLevel::off;
} else {
EKAT_ERROR_MSG ("Invalid choice for 'atm_log_level': " + log_level_str + "\n");
}
auto str2lev = [](const std::string& s, const std::string& name) {
LogLevel lev;
if (s=="trace") {
lev = LogLevel::trace;
} else if (s=="debug") {
lev = LogLevel::debug;
} else if (s=="info") {
lev = LogLevel::info;
} else if (s=="warn") {
lev = LogLevel::warn;
} else if (s=="err") {
lev = LogLevel::err;
} else if (s=="off") {
lev = LogLevel::off;
} else {
EKAT_ERROR_MSG ("Invalid choice for '" + name + "': " + s + "\n");
}
return lev;
};

using logger_t = Logger<LogBasicFile,LogRootRank>;
m_atm_logger = std::make_shared<logger_t>(log_fname,log_level,m_atm_comm,"");
m_atm_logger = std::make_shared<logger_t>(log_fname,str2lev(log_level,"atm_log_level"),m_atm_comm,"");
m_atm_logger->flush_on(str2lev(flush_level,"atm_flush_level"));
m_atm_logger->set_no_format();

// In CIME runs, this is already set to false, so atm log does not pollute e3sm.loc.
Expand Down

0 comments on commit 0459aca

Please sign in to comment.