[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