[cig-commits] commit: Make thermal components work

Mercurial hg at geodynamics.org
Sat Nov 19 10:50:17 PST 2011


changeset:   409:b63e17b87036
tag:         tip
user:        Walter Landry <wlandry at caltech.edu>
date:        Sat Nov 19 10:50:05 2011 -0800
files:       json_parser/add_components.cxx json_parser/add_defaults.cxx
description:
Make thermal components work


diff -r 05f8d922b06f -r b63e17b87036 json_parser/add_components.cxx
--- a/json_parser/add_components.cxx	Sat Nov 19 10:34:34 2011 -0800
+++ b/json_parser/add_components.cxx	Sat Nov 19 10:50:05 2011 -0800
@@ -13,33 +13,18 @@ public:
 };
 
 void add_components(json_spirit::Object &o,
-                    const json_spirit::Object &components,
-                    const std::string &enable_key, const bool &default_enable)
+                    const json_spirit::Object &components)
 {
-  bool enable(default_enable);
-  for(json_spirit::Object::const_iterator i=o.begin(); i!=o.end(); ++i)
+  /* Only add a component if it is not already there */
+  json_spirit::Object temp;
+  for(json_spirit::Object::const_iterator i=components.begin();
+      i!=components.end(); ++i)
     {
-      if(i->name_==enable_key)
+      if(std::find_if(o.begin(),o.end(),Compare_Name(i->name_))==o.end())
         {
-          if(i->value_.type()!=json_spirit::bool_type)
-            throw std::runtime_error(("The field " + enable_key +
-                                      "must be either true or false (no quotes)").c_str());
-          enable=i->value_.get_bool();
-          break;
+          temp.push_back(*i);
         }
     }
-  json_spirit::Object temp;
-  if(enable)
-    {
-      for(json_spirit::Object::const_iterator i=components.begin();
-          i!=components.end(); ++i)
-        {
-          if(std::find_if(o.begin(),o.end(),Compare_Name(i->name_))==o.end())
-            {
-              temp.push_back(*i);
-            }
-        }
-      temp.insert(temp.end(),o.begin(),o.end());
-      temp.swap(o);
-    }
+  temp.insert(temp.end(),o.begin(),o.end());
+  temp.swap(o);
 }
diff -r 05f8d922b06f -r b63e17b87036 json_parser/add_defaults.cxx
--- a/json_parser/add_defaults.cxx	Sat Nov 19 10:34:34 2011 -0800
+++ b/json_parser/add_defaults.cxx	Sat Nov 19 10:50:05 2011 -0800
@@ -2,13 +2,7 @@
 #include <stdexcept>
 
 void add_components(json_spirit::Object &root,
-                    const json_spirit::Object &components,
-                    const std::string &enable, const bool &default_enable);
-void add_components(json_spirit::Object &root,
-                    const json_spirit::Object &components)
-{
-  add_components(root,components,"",true);
-}
+                    const json_spirit::Object &components);
 
 void add_defaults(json_spirit::Value &root)
 {
@@ -297,24 +291,6 @@ void add_defaults(json_spirit::Value &ro
     "    \"DofLayout\": \"pressureDofLayout\","
     "    \"LinkedDofInfo\": \"pressureLinkedDofs\""
     "},"
-    // "\"StressField\":"
-    // "{"
-    // "    \"Type\": \"StressField\","
-    // "    \"StrainRateField\": \"StrainRateField\","
-    // "    \"Context\": \"context\","
-    // "    \"ConstitutiveMatrix\": \"constitutiveMatrix\","
-    // "    \"Swarm\": \"gaussSwarm\","
-    // "    \"Mesh\": \"v-T-mesh\","
-    // "    \"IC\": \"stressICs\""
-    // "},"
-    // "\"ViscosityField\":"
-    // "{"
-    // "    \"Type\": \"ViscosityField\","
-    // "    \"Context\": \"context\","
-    // "    \"Swarm\": \"gaussSwarm\","
-    // "    \"Mesh\": \"v-T-mesh\","
-    // "    \"ConstitutiveMatrix\": \"constitutiveMatrix\""
-    // "},"
     "\"solutionVelocity\":"
     "{"
     "    \"Type\": \"SolutionVector\","
@@ -418,12 +394,148 @@ void add_defaults(json_spirit::Value &ro
     "}"
     "}");
 
-  json_spirit::Value toolbox, plugins, basic, stokes;
+  std::string thermal_components
+    ("{"
+     "\"temperature\":"
+     "{"
+     "\"Type\": \"MeshVariable\","
+     "\"Rank\": \"Scalar\","
+     "\"DataType\": \"Double\","
+     "\"mesh\": \"v-T-mesh\""
+     "},"
+     "\"temperatureBCs\":"
+     "{"
+     "\"Type\": \"CompositeVC\","
+     "\"Data\": \"v-T-mesh\""
+     "},"
+     "\"temperatureICs\":"
+     "{"
+     "\"Type\": \"CompositeVC\","
+     "\"Data\": \"v-T-mesh\""
+     "},"
+     "\"temperatureDofLayout\":"
+     "{"
+     "\"Type\": \"DofLayout\","
+     "\"mesh\": \"v-T-mesh\","
+     "\"BaseVariables\":"
+     "["
+     "\"temperature\""
+     "]"
+     "},"
+     "\"TemperatureField\":"
+     "{"
+     "\"Type\": \"FeVariable\","
+     "\"FEMesh\": \"v-T-mesh\","
+     "\"DofLayout\": \"temperatureDofLayout\","
+     "\"BC\": \"temperatureBCs\","
+     "\"IC\": \"temperatureICs\","
+     "\"LinkedDofInfo\": \"temperatureLinkedDofs\""
+     "},"
+     "\"TemperatureGradientsField\":"
+     "{"
+     "\"Type\": \"OperatorFeVariable\","
+     "\"Operator\": \"Gradient\","
+     "\"FeVariable\": \"TemperatureField\""
+     "},"
+
+     "\"displacement\":"
+     "{"
+     "\"Type\": \"MeshVariable\","
+     "\"Rank\": \"Vector\","
+     "\"DataType\": \"Double\","
+     "\"mesh\": \"v-T-mesh\","
+     "\"VectorComponentCount\": \"dim\","
+     "\"names\" : ["
+     "\"dx\","
+     "\"dy\","
+     "\"dz\""
+     "]"
+     "},"
+     "\"displacementBCs\":"
+     "{"
+     "\"Type\": \"CompositeVC\","
+     "\"Data\": \"v-T-mesh\""
+     "},"
+     "\"displacementICs\":"
+     "{"
+     "\"Type\": \"CompositeVC\","
+     "\"Data\": \"v-T-mesh\""
+     "},"
+     "\"displacementDofLayout\":"
+     "{"
+     "\"Type\": \"DofLayout\","
+     "\"mesh\": \"v-T-mesh\","
+     "\"BaseVariableCount\": \"dim\","
+     "\"BaseVariables\":"
+     "["
+     "\"dx\","
+     "\"dy\","
+     "\"dz\""
+     "]"
+     "},"
+     "\"DisplacementField\":"
+     "{"
+     "\"Type\": \"FeVariable\","
+     "\"FEMesh\": \"v-T-mesh\","
+     "\"DofLayout\": \"displacementDofLayout\","
+     "\"BC\": \"displacementBCs\","
+     "\"IC\": \"displacementICs\""
+     "},"
+
+     "\"residual\":"
+     "{"
+     "\"Type\": \"ForceVector\","
+     "\"FeVariable\": \"TemperatureField\""
+     "},"
+     "\"massMatrix\":"
+     "{"
+     "\"Type\": \"ForceVector\","
+     "\"FeVariable\": \"TemperatureField\""
+     "},"
+     "\"predictorMulticorrector\":"
+     "{"
+     "\"Type\": \"AdvDiffMulticorrector\""
+     "},"
+     "\"EnergyEqn\":"
+     "{"
+     "\"Type\": \"AdvectionDiffusionSLE\","
+     "\"SLE_Solver\": \"predictorMulticorrector\","
+     "\"Context\": \"context\","
+     "\"PhiField\": \"TemperatureField\","
+     "\"Residual\": \"residual\","
+     "\"MassMatrix\": \"massMatrix\","
+     "\"courantFactor\": \"0.25\""
+     "},"
+     "\"lumpedMassMatrixForceTerm\":"
+     "{"
+     "\"Type\": \"LumpedMassMatrixForceTerm\","
+     "\"Swarm\": \"gaussSwarm\","
+     "\"ForceVector\": \"massMatrix\""
+     "},"
+     "\"defaultResidualForceTerm\":"
+     "{"
+     "\"Type\": \"AdvDiffResidualForceTerm\","
+     "\"Swarm\": \"gaussSwarm\","
+     "\"ForceVector\": \"residual\","
+     "\"ExtraInfo\": \"EnergyEqn\","
+     "\"VelocityField\": \"VelocityField\","
+     "\"defaultDiffusivity\": \"defaultDiffusivity\","
+     "\"UpwindXiFunction\": \"Exact\""
+     "},"
+     "\"internalHeatingTerm\":"
+     "{"
+     "\"Type\": \"RadiogenicHeatingTerm\","
+     "\"ForceVector\": \"residual\","
+     "\"Swarm\": \"gaussSwarm\""
+     "}"
+     "}");
+
+  json_spirit::Value toolbox, plugins, basic, stokes, thermal;
   json_spirit::read_or_throw(toolbox_string,toolbox);
   json_spirit::read_or_throw(plugins_string,plugins);
   json_spirit::read_or_throw(basic_components,basic);
   json_spirit::read_or_throw(stokes_components,stokes);
-  // json_spirit::read_or_throw(thermal_components,thermal);
+  json_spirit::read_or_throw(thermal_components,thermal);
 
   json_spirit::Object &o(root.get_obj());
 
@@ -462,19 +574,32 @@ void add_defaults(json_spirit::Value &ro
 
   /* Add the standard components */
   /* First find the components */
+  json_spirit::Object::iterator components(o.end());
+  bool enable_thermal(false), enable_stokes(true);
   for(json_spirit::Object::iterator i=o.begin(); i!=o.end(); ++i)
     {
       if(i->name_=="components")
+        components=i;
+      else if(i->name_=="enable-stokes")
         {
-          if(i->value_.type()!=json_spirit::obj_type)
-            throw std::runtime_error("The field 'components' must be an object");
-          /* New components get prepended, so add in reverse order */
-          // add_components(i->value_.get_obj(),thermal.get_obj(),
-          //                "enable-thermal",false);
-          add_components(i->value_.get_obj(),stokes.get_obj(),
-                         "enable-stokes",true);
-          add_components(i->value_.get_obj(),basic.get_obj());
-          break;
+          if(i->value_.type()!=json_spirit::bool_type)
+            throw std::runtime_error("The field enable-stokes must be either"
+                                     "true or false (no quotes)");
+          enable_stokes=i->value_.get_bool();
+        }
+      else if(i->name_=="enable-thermal")
+        {
+          if(i->value_.type()!=json_spirit::bool_type)
+            throw std::runtime_error("The field enable-thermal must be either"
+                                     "true or false (no quotes)");
+          enable_thermal=i->value_.get_bool();
         }
     }
+
+  /* New components get prepended, so add in reverse order */
+  if(enable_thermal)
+    add_components(components->value_.get_obj(),thermal.get_obj());
+  if(enable_stokes)
+    add_components(components->value_.get_obj(),stokes.get_obj());
+  add_components(components->value_.get_obj(),basic.get_obj());
 }



More information about the CIG-COMMITS mailing list