From 3ea42c64b03bfe400d31ad11955b4928eae5e2e6 Mon Sep 17 00:00:00 2001 From: Giovanni Bussi <giovanni.bussi@gmail.com> Date: Tue, 20 Jun 2017 08:07:49 +0200 Subject: [PATCH] constants --- src/function/Matheval.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/function/Matheval.cpp b/src/function/Matheval.cpp index af7417540..eea59315d 100644 --- a/src/function/Matheval.cpp +++ b/src/function/Matheval.cpp @@ -33,6 +33,22 @@ using namespace std; namespace PLMD { namespace function { +static std::map<string, double> leptonConstants={ + {"e", std::exp(1.0)}, + {"log2e", 1.0/std::log(2.0)}, + {"log10e", 1.0/std::log(10.0)}, + {"ln2", std::log(2.0)}, + {"ln10", std::log(10.0)}, + {"pi", pi}, + {"pi_2", pi*0.5}, + {"pi_4", pi*0.25}, +// {"1_pi", 1.0/pi}, +// {"2_pi", 2.0/pi}, +// {"2_sqrtpi", 2.0/std::sqrt(pi)}, + {"sqrt2", std::sqrt(2.0)}, + {"sqrt1_2", std::sqrt(0.5)} +}; + //+PLUMEDOC FUNCTION MATHEVAL /* @@ -219,9 +235,9 @@ Matheval::Matheval(const ActionOptions&ao): checkRead(); if(use_lepton) { - func=func+" ; pi=3.14159265358979"; + func=func; log<<" WARNING: you are using lepton as a replacement for libmatheval\n"; - evaluator=new lepton::CompiledExpression(lepton::Parser::parse(func).optimize().createCompiledExpression()); + evaluator=new lepton::CompiledExpression(lepton::Parser::parse(func).optimize(leptonConstants).createCompiledExpression()); } else { #ifdef __PLUMED_HAS_MATHEVAL evaluator=evaluator_create(const_cast<char*>(func.c_str())); @@ -235,7 +251,7 @@ Matheval::Matheval(const ActionOptions&ao): if(use_lepton) { for(unsigned i=0; i<getNumberOfArguments(); i++) evaluator_deriv[i]=new - lepton::CompiledExpression(lepton::Parser::parse(func).differentiate(var[i]).optimize().createCompiledExpression()); + lepton::CompiledExpression(lepton::Parser::parse(func).differentiate(var[i]).optimize(leptonConstants).createCompiledExpression()); } else { #ifdef __PLUMED_HAS_MATHEVAL char **check_names; @@ -266,9 +282,9 @@ Matheval::Matheval(const ActionOptions&ao): for(unsigned i=0; i<var.size(); i++) log.printf(" %s",var[i].c_str()); log.printf("\n"); if(use_lepton) { - log<<" function as parsed by lepton: "<<lepton::Parser::parse(func).optimize()<<"\n"; + log<<" function as parsed by lepton: "<<lepton::Parser::parse(func).optimize(leptonConstants)<<"\n"; log<<" derivatives as computed by lepton:\n"; - for(unsigned i=0; i<var.size(); i++) log<<" "<<lepton::Parser::parse(func).differentiate(var[i]).optimize()<<"\n"; + for(unsigned i=0; i<var.size(); i++) log<<" "<<lepton::Parser::parse(func).differentiate(var[i]).optimize(leptonConstants)<<"\n"; } else { #ifdef __PLUMED_HAS_MATHEVAL log.printf(" function as parsed by matheval: %s\n", evaluator_get_string(evaluator)); -- GitLab