From 2fbb92dca17e624c6d3c4f51caa412a585b10c32 Mon Sep 17 00:00:00 2001 From: MaxThevenet Date: Wed, 2 Dec 2020 09:43:11 +0100 Subject: More parser-enabled ParmParse.query and ParmParse.get (#1501) * Parser can be used for most input parameters, including charge and mass * update documentation for the math parser * eol * remove typo and update doc for parser * Apply suggestions from code review Co-authored-by: Axel Huebl Co-authored-by: Axel Huebl --- Source/Utils/WarpXUtil.cpp | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) (limited to 'Source/Utils/WarpXUtil.cpp') diff --git a/Source/Utils/WarpXUtil.cpp b/Source/Utils/WarpXUtil.cpp index 4372c132e..7b66b416e 100644 --- a/Source/Utils/WarpXUtil.cpp +++ b/Source/Utils/WarpXUtil.cpp @@ -21,7 +21,7 @@ void ReadBoostedFrameParameters(Real& gamma_boost, Real& beta_boost, Vector& boost_direction) { ParmParse pp("warpx"); - pp.query("gamma_boost", gamma_boost); + queryWithParser(pp, "gamma_boost", gamma_boost); if( gamma_boost > 1. ) { beta_boost = std::sqrt(1.-1./pow(gamma_boost,2)); std::string s; @@ -178,7 +178,7 @@ namespace WarpXUtilIO{ } } -void Store_parserString(amrex::ParmParse& pp, std::string query_string, +void Store_parserString(const amrex::ParmParse& pp, std::string query_string, std::string& stored_string) { std::vector f; @@ -200,10 +200,28 @@ WarpXParser makeParser (std::string const& parse_function, std::vectorc_str(), v)) { - parser.setConstant(*it, v); - it = symbols.erase(it); + parser.setConstant(*it, v); + it = symbols.erase(it); + } else if (std::strcmp(it->c_str(), "q_e") == 0) { + parser.setConstant(*it, PhysConst::q_e); + it = symbols.erase(it); + } else if (std::strcmp(it->c_str(), "m_e") == 0) { + parser.setConstant(*it, PhysConst::m_e); + it = symbols.erase(it); + } else if (std::strcmp(it->c_str(), "m_p") == 0) { + parser.setConstant(*it, PhysConst::m_p); + it = symbols.erase(it); + } else if (std::strcmp(it->c_str(), "epsilon0") == 0) { + parser.setConstant(*it, PhysConst::ep0); + it = symbols.erase(it); + } else if (std::strcmp(it->c_str(), "clight") == 0) { + parser.setConstant(*it, PhysConst::c); + it = symbols.erase(it); + } else if (std::strcmp(it->c_str(), "pi") == 0) { + parser.setConstant(*it, MathConst::pi); + it = symbols.erase(it); } else { - ++it; + ++it; } } for (auto const& s : symbols) { @@ -213,7 +231,7 @@ WarpXParser makeParser (std::string const& parse_function, std::vector