diff --git a/components/eamxx/cime_config/namelist_defaults_scream.xml b/components/eamxx/cime_config/namelist_defaults_scream.xml index 95b87e3402d..24d77c2b631 100644 --- a/components/eamxx/cime_config/namelist_defaults_scream.xml +++ b/components/eamxx/cime_config/namelist_defaults_scream.xml @@ -501,6 +501,11 @@ be lost if SCREAM_HACK_XML is not enabled. doc="Verbosity level for the atm logger"> info + + warn + false 1e-10 1e-14 diff --git a/components/eamxx/src/control/atmosphere_driver.cpp b/components/eamxx/src/control/atmosphere_driver.cpp index eb0f15bbeb7..a984caf9f07 100644 --- a/components/eamxx/src/control/atmosphere_driver.cpp +++ b/components/eamxx/src/control/atmosphere_driver.cpp @@ -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("Atm Log File","atm.log"); - ci_string log_level_str = driver_options_pl.get("atm_log_level","info"); + ci_string log_level = driver_options_pl.get("atm_log_level","info"); + ci_string flush_level = driver_options_pl.get("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; - m_atm_logger = std::make_shared(log_fname,log_level,m_atm_comm,""); + m_atm_logger = std::make_shared(log_fname,str2lev(log_level),m_atm_comm,""); + m_atm_logger->flush_on(str2lev(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.