[cig-commits] commit: Add Equation_eval
Mercurial
hg at geodynamics.org
Wed Nov 9 00:55:07 PST 2011
changeset: 631:b590952e873d
user: Walter Landry <wlandry at caltech.edu>
date: Wed Nov 09 00:52:31 2011 -0800
files: Utils/src/Equation.cxx Utils/src/Equation.h
description:
Add Equation_eval
diff -r 2257d527ab57 -r b590952e873d Utils/src/Equation.cxx
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/Equation.cxx Wed Nov 09 00:52:31 2011 -0800
@@ -0,0 +1,45 @@
+/* We have to include mpParser first because StGermin #defines
+ GetParent, which is a function used in mpParser */
+
+#include "mpParser.h"
+#include "StGermain/StGermain.h"
+#include "StgDomain/StgDomain.h"
+
+double Equation_eval(const double *coord, DomainContext *context,
+ const std::string &equation)
+{
+ mup::Value result;
+ try
+ {
+ mup::ParserX p(mup::pckALL_NON_COMPLEX);
+
+ p.DefineConst("x", coord[0]);
+ p.DefineConst("y", coord[1]);
+ if(context->dim==3)
+ p.DefineConst("z", coord[2]);
+ p.DefineConst("t", context->currentTime);
+ p.EnableAutoCreateVar(true);
+ p.SetExpr(equation);
+
+ result=p.Eval();
+
+ if(context->dim==2)
+ Journal_PrintfL(Journal_Register( Info_Type,"Equation"),
+ 2, "Equation %s: x=%g y=%g t=%g result=%g\n",
+ equation.c_str(),coord[0],coord[1],
+ context->currentTime,result.GetFloat());
+ else
+ Journal_PrintfL(Journal_Register( Info_Type,"Equation"),
+ 2, "Equation %s: x=%g y=%g z=%g t=%g result=%g\n",
+ equation.c_str(),coord[0],coord[1],coord[2],
+ context->currentTime,result.GetFloat());
+ }
+ catch (mup::ParserError &e)
+ {
+ Journal_Firewall(false,
+ Journal_Register( Error_Type,"Equation"),
+ "Error when parsing equation: (%s)\n\t%s\n",
+ equation.c_str(),e.GetMsg().c_str());
+ }
+ return result.GetFloat();
+}
diff -r 2257d527ab57 -r b590952e873d Utils/src/Equation.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Utils/src/Equation.h Wed Nov 09 00:52:31 2011 -0800
@@ -0,0 +1,7 @@
+#ifndef __StGermain_Utils_Equation_h__
+#define __StGermain_Utils_Equation_h__
+
+double Equation_eval(const double *coord, DomainContext *context,
+ const std::string &equation);
+
+#endif
More information about the CIG-COMMITS
mailing list