From 4326c3213bdfb3d3408568c4dee6b74d934fe067 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Thu, 7 Aug 2014 06:50:03 -0500 Subject: [PATCH] Also update the parsing of all other builtin functions. --- source/base/function_parser.cc | 111 ++++++++++++------ tests/base/function_parser_07.cc | 54 ++++----- ...nction_parser_07.with_muparser=true.output | 52 ++++---- 3 files changed, 130 insertions(+), 87 deletions(-) diff --git a/source/base/function_parser.cc b/source/base/function_parser.cc index 4c764f8279..7ec61316b7 100644 --- a/source/base/function_parser.cc +++ b/source/base/function_parser.cc @@ -147,62 +147,105 @@ void FunctionParser:: init_muparser() const fp.get().resize(this->n_components); vars.get().resize(var_names.size()); - for (unsigned int i=0; in_components; ++i) + for (unsigned int component=0; componentn_components; ++component) { for (std::map< std::string, double >::const_iterator constant = constants.begin(); constant != constants.end(); ++constant) { - fp.get()[i].DefineConst(constant->first.c_str(), constant->second); + fp.get()[component].DefineConst(constant->first.c_str(), constant->second); } for (unsigned int iv=0;iv(x,y), atan2(x,y)); + eval("atan2 (x,y)",Point<2>(x,y), atan2(x,y)); x=-1.0; y=3.1; - eval("atan2(x,y)",Point<2>(x,y), atan2(x,y)); + eval("atan2 (x,y)",Point<2>(x,y), atan2(x,y)); eval("if (x==1.0,0,y)",Point<2>(1.0,-2.0), 0.0); eval("if (x==1.0,0,y)",Point<2>(1.1,-2.0), -2.0); - eval("int(2.1)",Point<2>(1.1,-2.0), 2.0); - eval("int(-3.8)",Point<2>(1.1,-2.0), -4.0); - - eval("abs(-2.3)",Point<2>(0,0), 2.3); - eval("acos(0.5)",Point<2>(0,0), acos(0.5)); - eval("acosh(0.5)",Point<2>(0,0), acosh(0.5)); - eval("asin(0.5)",Point<2>(0,0), asin(0.5)); - eval("asinh(0.5)",Point<2>(0,0), asinh(0.5)); - eval("atan(0.5)",Point<2>(0,0), atan(0.5)); - eval("atanh(0.5)",Point<2>(0,0), atanh(0.5)); - eval("ceil(0.5)",Point<2>(0,0), ceil(0.5)); - eval("cos(0.5)",Point<2>(0,0), cos(0.5)); - eval("cosh(0.5)",Point<2>(0,0), cosh(0.5)); - eval("cot(0.5)",Point<2>(0,0), 1.0/tan(0.5)); - eval("csc(0.5)",Point<2>(0,0), 1.0/sin(0.5)); - eval("exp(0.5)",Point<2>(0,0), exp(0.5)); - eval("floor(0.5)",Point<2>(0,0), floor(0.5)); - eval("log(0.5)",Point<2>(0,0), log(0.5)); - eval("log10(0.5)",Point<2>(0,0), log(0.5)/log(10.0)); - eval("sec(0.5)",Point<2>(0,0), 1.0/cos(0.5)); - eval("sin(0.5)",Point<2>(0,0), sin(0.5)); - eval("sinh(0.5)",Point<2>(0,0), sinh(0.5)); - eval("sqrt(0.5)",Point<2>(0,0), sqrt(0.5)); - eval("tan(0.5)",Point<2>(0,0), tan(0.5)); - eval("tanh(0.5)",Point<2>(0,0), tanh(0.5)); + eval("int (2.1)",Point<2>(1.1,-2.0), 2.0); + eval("int (-3.8)",Point<2>(1.1,-2.0), -4.0); + + eval("abs (-2.3)",Point<2>(0,0), 2.3); + eval("acos (0.5)",Point<2>(0,0), acos(0.5)); + eval("acosh (0.5)",Point<2>(0,0), acosh(0.5)); + eval("asin (0.5)",Point<2>(0,0), asin(0.5)); + eval("asinh (0.5)",Point<2>(0,0), asinh(0.5)); + eval("atan (0.5)",Point<2>(0,0), atan(0.5)); + eval("atanh (0.5)",Point<2>(0,0), atanh(0.5)); + eval("ceil (0.5)",Point<2>(0,0), ceil(0.5)); + eval("cos (0.5)",Point<2>(0,0), cos(0.5)); + eval("cosh (0.5)",Point<2>(0,0), cosh(0.5)); + eval("cot (0.5)",Point<2>(0,0), 1.0/tan(0.5)); + eval("csc (0.5)",Point<2>(0,0), 1.0/sin(0.5)); + eval("exp (0.5)",Point<2>(0,0), exp(0.5)); + eval("floor (0.5)",Point<2>(0,0), floor(0.5)); + eval("log (0.5)",Point<2>(0,0), log(0.5)); + eval("log10 (0.5)",Point<2>(0,0), log(0.5)/log(10.0)); + eval("sec (0.5)",Point<2>(0,0), 1.0/cos(0.5)); + eval("sin (0.5)",Point<2>(0,0), sin(0.5)); + eval("sinh (0.5)",Point<2>(0,0), sinh(0.5)); + eval("sqrt (0.5)",Point<2>(0,0), sqrt(0.5)); + eval("tan (0.5)",Point<2>(0,0), tan(0.5)); + eval("tanh (0.5)",Point<2>(0,0), tanh(0.5)); } diff --git a/tests/base/function_parser_07.with_muparser=true.output b/tests/base/function_parser_07.with_muparser=true.output index dfbec14eb1..4653eb2ed5 100644 --- a/tests/base/function_parser_07.with_muparser=true.output +++ b/tests/base/function_parser_07.with_muparser=true.output @@ -7,31 +7,31 @@ DEAL::'if (x<1.0 | y<1.0,0,y)' @ 1.50000 1.50000 is 1.50000 ( expected 1.50000 DEAL::'if (x<1.0 | y<1.0,0,y)' @ 1.50000 0.500000 is 0.00000 ( expected 0.00000 ) DEAL::'if (x<1.0 | y<1.0,0,y)' @ 0.500000 -2.00000 is 0.00000 ( expected 0.00000 ) DEAL::'if (x<1.0 & y<1.0,0,y)' @ 1.50000 -2.00000 is -2.00000 ( expected -2.00000 ) -DEAL::'atan2(x,y)' @ 1.00000 -3.10000 is 2.82955 ( expected 2.82955 ) -DEAL::'atan2(x,y)' @ -1.00000 3.10000 is -0.312042 ( expected -0.312042 ) +DEAL::'atan2 (x,y)' @ 1.00000 -3.10000 is 2.82955 ( expected 2.82955 ) +DEAL::'atan2 (x,y)' @ -1.00000 3.10000 is -0.312042 ( expected -0.312042 ) DEAL::'if (x==1.0,0,y)' @ 1.00000 -2.00000 is 0.00000 ( expected 0.00000 ) DEAL::'if (x==1.0,0,y)' @ 1.10000 -2.00000 is -2.00000 ( expected -2.00000 ) -DEAL::'int(2.1)' @ 1.10000 -2.00000 is 2.00000 ( expected 2.00000 ) -DEAL::'int(-3.8)' @ 1.10000 -2.00000 is -4.00000 ( expected -4.00000 ) -DEAL::'abs(-2.3)' @ 0.00000 0.00000 is 2.30000 ( expected 2.30000 ) -DEAL::'acos(0.5)' @ 0.00000 0.00000 is 1.04720 ( expected 1.04720 ) -DEAL::'acosh(0.5)' @ 0.00000 0.00000 is -nan ( expected -nan ) -DEAL::'asin(0.5)' @ 0.00000 0.00000 is 0.523599 ( expected 0.523599 ) -DEAL::'asinh(0.5)' @ 0.00000 0.00000 is 0.481212 ( expected 0.481212 ) -DEAL::'atan(0.5)' @ 0.00000 0.00000 is 0.463648 ( expected 0.463648 ) -DEAL::'atanh(0.5)' @ 0.00000 0.00000 is 0.549306 ( expected 0.549306 ) -DEAL::'ceil(0.5)' @ 0.00000 0.00000 is 1.00000 ( expected 1.00000 ) -DEAL::'cos(0.5)' @ 0.00000 0.00000 is 0.877583 ( expected 0.877583 ) -DEAL::'cosh(0.5)' @ 0.00000 0.00000 is 1.12763 ( expected 1.12763 ) -DEAL::'cot(0.5)' @ 0.00000 0.00000 is 1.83049 ( expected 1.83049 ) -DEAL::'csc(0.5)' @ 0.00000 0.00000 is 2.08583 ( expected 2.08583 ) -DEAL::'exp(0.5)' @ 0.00000 0.00000 is 1.64872 ( expected 1.64872 ) -DEAL::'floor(0.5)' @ 0.00000 0.00000 is 0.00000 ( expected 0.00000 ) -DEAL::'log(0.5)' @ 0.00000 0.00000 is -0.693147 ( expected -0.693147 ) -DEAL::'log10(0.5)' @ 0.00000 0.00000 is -0.301030 ( expected -0.301030 ) -DEAL::'sec(0.5)' @ 0.00000 0.00000 is 1.13949 ( expected 1.13949 ) -DEAL::'sin(0.5)' @ 0.00000 0.00000 is 0.479426 ( expected 0.479426 ) -DEAL::'sinh(0.5)' @ 0.00000 0.00000 is 0.521095 ( expected 0.521095 ) -DEAL::'sqrt(0.5)' @ 0.00000 0.00000 is 0.707107 ( expected 0.707107 ) -DEAL::'tan(0.5)' @ 0.00000 0.00000 is 0.546302 ( expected 0.546302 ) -DEAL::'tanh(0.5)' @ 0.00000 0.00000 is 0.462117 ( expected 0.462117 ) +DEAL::'int (2.1)' @ 1.10000 -2.00000 is 2.00000 ( expected 2.00000 ) +DEAL::'int (-3.8)' @ 1.10000 -2.00000 is -4.00000 ( expected -4.00000 ) +DEAL::'abs (-2.3)' @ 0.00000 0.00000 is 2.30000 ( expected 2.30000 ) +DEAL::'acos (0.5)' @ 0.00000 0.00000 is 1.04720 ( expected 1.04720 ) +DEAL::'acosh (0.5)' @ 0.00000 0.00000 is -nan ( expected -nan ) +DEAL::'asin (0.5)' @ 0.00000 0.00000 is 0.523599 ( expected 0.523599 ) +DEAL::'asinh (0.5)' @ 0.00000 0.00000 is 0.481212 ( expected 0.481212 ) +DEAL::'atan (0.5)' @ 0.00000 0.00000 is 0.463648 ( expected 0.463648 ) +DEAL::'atanh (0.5)' @ 0.00000 0.00000 is 0.549306 ( expected 0.549306 ) +DEAL::'ceil (0.5)' @ 0.00000 0.00000 is 1.00000 ( expected 1.00000 ) +DEAL::'cos (0.5)' @ 0.00000 0.00000 is 0.877583 ( expected 0.877583 ) +DEAL::'cosh (0.5)' @ 0.00000 0.00000 is 1.12763 ( expected 1.12763 ) +DEAL::'cot (0.5)' @ 0.00000 0.00000 is 1.83049 ( expected 1.83049 ) +DEAL::'csc (0.5)' @ 0.00000 0.00000 is 2.08583 ( expected 2.08583 ) +DEAL::'exp (0.5)' @ 0.00000 0.00000 is 1.64872 ( expected 1.64872 ) +DEAL::'floor (0.5)' @ 0.00000 0.00000 is 0.00000 ( expected 0.00000 ) +DEAL::'log (0.5)' @ 0.00000 0.00000 is -0.693147 ( expected -0.693147 ) +DEAL::'log10 (0.5)' @ 0.00000 0.00000 is -0.301030 ( expected -0.301030 ) +DEAL::'sec (0.5)' @ 0.00000 0.00000 is 1.13949 ( expected 1.13949 ) +DEAL::'sin (0.5)' @ 0.00000 0.00000 is 0.479426 ( expected 0.479426 ) +DEAL::'sinh (0.5)' @ 0.00000 0.00000 is 0.521095 ( expected 0.521095 ) +DEAL::'sqrt (0.5)' @ 0.00000 0.00000 is 0.707107 ( expected 0.707107 ) +DEAL::'tan (0.5)' @ 0.00000 0.00000 is 0.546302 ( expected 0.546302 ) +DEAL::'tanh (0.5)' @ 0.00000 0.00000 is 0.462117 ( expected 0.462117 ) -- 2.39.5