[cig-commits] commit: Update to use muparserx

Mercurial hg at geodynamics.org
Wed Nov 9 00:47:30 PST 2011


changeset:   441:ba95eb221540
tag:         tip
user:        Walter Landry <wlandry at caltech.edu>
date:        Wed Nov 09 00:47:20 2011 -0800
files:       Utils/src/BuoyancyForceTerm.cxx Utils/src/HydrostaticTerm.cxx
description:
Update to use muparserx


diff -r b31e0806821e -r ba95eb221540 Utils/src/BuoyancyForceTerm.cxx
--- a/Utils/src/BuoyancyForceTerm.cxx	Wed Nov 02 15:53:43 2011 -0700
+++ b/Utils/src/BuoyancyForceTerm.cxx	Wed Nov 09 00:47:20 2011 -0800
@@ -50,7 +50,6 @@
 #include <PICellerator/PopulationControl/PopulationControl.h>
 #include <PICellerator/Weights/Weights.h>
 #include <PICellerator/MaterialPoints/MaterialPoints.h>
-#include "muParser.h"
 
 #include "types.h"
 #include "BuoyancyForceTerm.h"
@@ -63,6 +62,7 @@
 #include <assert.h>
 #include <string.h>
 #include <stddef.h>
+#include <sstream>
 
 static std::vector<std::string> densities, alphas;
 
@@ -359,14 +359,6 @@ void _BuoyancyForceTerm_Destroy( void* f
 	_ForceTerm_Destroy( forceTerm, data );
 }
 
-mu::value_type* BuoyancyForceTerm_AddVariable(const mu::char_type *a_szName,
-                                              void *a_pUserData)
-{
-  static std::list<mu::value_type> variables;
-  variables.push_front(0);
-  return &(*(variables.begin()));
-}
-
 void _BuoyancyForceTerm_AssembleElement( void* forceTerm, ForceVector* forceVector, Element_LocalIndex lElement_I, double* elForceVec ) {
 	BuoyancyForceTerm*               self               = (BuoyancyForceTerm*) forceTerm;
 	IntegrationPoint*                particle;
@@ -476,16 +468,14 @@ void _BuoyancyForceTerm_AssembleElement(
 		density_equation = densities[material_index];
                 if(!density_equation.empty())
                   {
-                    mu::Parser d;
-                    d.DefineVar("T",&temperature);
-                    d.DefineVar("p",&pressure);
-                    d.SetVarFactory(BuoyancyForceTerm_AddVariable, &d);
-                    d.SetExpr(density_equation);
-                    density=d.Eval();
+                    std::stringstream ss;
 
-                    Journal_Printf(Journal_MyStream(Info_Type,self),
-                                   "Density Equation T=%g p=%g density=%g\n",
-                                    temperature,pressure,density);
+                    ss << "T=" << temperature
+                       << "; p=" << pressure
+                       << "; " << density_equation;
+                    density=Equation_eval(coord,
+                                          (DomainContext *)(self->context),
+                                          ss.str());
                   }
                 else
                   {
@@ -497,15 +487,14 @@ void _BuoyancyForceTerm_AssembleElement(
 		alpha_equation = alphas[material_index];
                 if(!alpha_equation.empty())
                   {
-                    mu::Parser d;
-                    d.DefineVar("T",&temperature);
-                    d.DefineVar("p",&pressure);
-                    d.SetVarFactory(BuoyancyForceTerm_AddVariable, &d);
-                    d.SetExpr(alpha_equation);
-                    alpha=d.Eval();
-                    Journal_PrintfL(Journal_MyStream(Debug_Type,self),3,
-                                    "Alpha Equation T=%g p=%g alpha=%g\n",
-                                    temperature,pressure,alpha);
+                    std::stringstream ss;
+
+                    ss << "T=" << temperature
+                       << "; p=" << pressure
+                       << "; " << density_equation;
+                    alpha=Equation_eval(coord,
+                                        (DomainContext *)(self->context),
+                                        ss.str());
                   }
                 else
                   {
diff -r b31e0806821e -r ba95eb221540 Utils/src/HydrostaticTerm.cxx
--- a/Utils/src/HydrostaticTerm.cxx	Wed Nov 02 15:53:43 2011 -0700
+++ b/Utils/src/HydrostaticTerm.cxx	Wed Nov 09 00:47:20 2011 -0800
@@ -55,7 +55,6 @@
 #include <string>
 #include "HydrostaticTerm.h"
 #include "MaterialSwarmVariable.h"
-#include "muParser.h"
 
 #include <assert.h>
 #include <string.h>
@@ -350,27 +349,12 @@ double HydrostaticTerm_Temperature(void*
   return T;
 }
 
-mu::value_type* HydrostaticTerm_AddVariable(const mu::char_type *a_szName,
-                                            void *a_pUserData)
-{
-  static std::list<mu::value_type> variables;
-  variables.push_front(0);
-  return &(*(variables.begin()));
-}
-
 double HydrostaticTerm_Density( void* forceTerm, Coord coord)
 {
   HydrostaticTerm *self=(HydrostaticTerm *)forceTerm;
   if(self->density_equation!=NULL && strlen(self->density_equation)!=0)
     {
-      mu::Parser d;
-      d.DefineVar("x", coord); 
-      d.DefineVar("y", coord+1); 
-      d.DefineVar("z", coord+2); 
-      d.DefineVar("t", &(self->context->currentTime));
-      d.SetVarFactory(HydrostaticTerm_AddVariable, &d);
-      d.SetExpr(self->density_equation);
-      return d.Eval();
+      return Equation_eval(coord,(DomainContext*)(self->context),self->density_equation);
     }
   else
     {
@@ -418,14 +402,7 @@ double HydrostaticTerm_Pressure( void* f
   HydrostaticTerm *self=(HydrostaticTerm *)forceTerm;
   if(self->pressure_equation!=NULL && strlen(self->pressure_equation)!=0)
     {
-      mu::Parser p;
-      p.DefineVar("x", coord); 
-      p.DefineVar("y", coord+1); 
-      p.DefineVar("z", coord+2); 
-      p.DefineVar("t", &(self->context->currentTime));
-      p.SetVarFactory(HydrostaticTerm_AddVariable, &p);
-      p.SetExpr(self->pressure_equation);
-      return p.Eval();
+      return Equation_eval(coord,(DomainContext*)(self->context),self->pressure_equation);
     }
   else
     {



More information about the CIG-COMMITS mailing list