[cig-commits] r14729 - in long/3D/Gale/trunk: . input/cookbook src/Underworld/Rheology/src

walter at geodynamics.org walter at geodynamics.org
Thu Apr 16 06:24:41 PDT 2009


Author: walter
Date: 2009-04-16 06:24:40 -0700 (Thu, 16 Apr 2009)
New Revision: 14729

Added:
   long/3D/Gale/trunk/input/cookbook/non_newtonian.xml
Modified:
   long/3D/Gale/trunk/
   long/3D/Gale/trunk/src/Underworld/Rheology/src/NonNewtonian.c
   long/3D/Gale/trunk/src/Underworld/Rheology/src/NonNewtonian.h
Log:
 r2652 at dante:  boo | 2009-04-16 06:24:43 -0700
 Add refStrainRate, minVis, and maxVis to NonNewtonian, and a cookbook example



Property changes on: long/3D/Gale/trunk
___________________________________________________________________
Name: svk:merge
   - 3a629746-de10-0410-b17b-fd6ecaaa963e:/cig:2650
   + 3a629746-de10-0410-b17b-fd6ecaaa963e:/cig:2652

Added: long/3D/Gale/trunk/input/cookbook/non_newtonian.xml
===================================================================
--- long/3D/Gale/trunk/input/cookbook/non_newtonian.xml	                        (rev 0)
+++ long/3D/Gale/trunk/input/cookbook/non_newtonian.xml	2009-04-16 13:24:40 UTC (rev 14729)
@@ -0,0 +1,720 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="conditionFunctions">
+      <param name="Type">StgFEM_StandardConditionFunctions</param>
+    </struct>
+    <struct name="mesh-linear">
+      <param name="Type">FeMesh</param>
+      <param name="elementType">linear</param>
+    </struct>
+    <struct name="linearMesh-generator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="dim">dim</param>
+      <param name="shadowDepth">shadowDepth</param>
+      <list name="size">
+        <param>elementResI</param>
+        <param>elementResJ</param>
+        <param>elementResK</param>
+      </list>
+      <list name="minCoord">
+        <param>minX</param>
+        <param>minY</param>
+        <param>minZ</param>
+      </list>
+      <list name="maxCoord">
+        <param>maxX</param>
+        <param>maxY</param>
+        <param>maxZ</param>
+      </list>
+    </struct>
+    <struct name="velocity">
+      <param name="Type">MeshVariable</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="Rank">Vector</param>
+      <param name="DataType">Double</param>
+      <param name="VectorComponentCount">dim</param>
+      <list name="names">
+        <param>vx</param>
+        <param>vy</param>
+        <param>vz</param>
+      </list>
+    </struct>
+    <struct name="velocityBCs">
+      <param name="Type">CompositeVC</param>
+      <param name="Data">mesh-linear</param>
+    </struct>
+    <struct name="velocityICs">
+      <param name="Type">CompositeVC</param>
+      <param name="Data">mesh-linear</param>
+    </struct>
+    <struct name="velocityDofLayout">
+      <param name="Type">DofLayout</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="BaseVariableCount">dim</param>
+      <list name="BaseVariables">
+        <param>vx</param>
+        <param>vy</param>
+        <param>vz</param>
+      </list>
+    </struct>
+    <struct name="VelocityField">
+      <param name="Type">FeVariable</param>
+      <param name="FEMesh">mesh-linear</param>
+      <param name="DofLayout">velocityDofLayout</param>
+      <param name="BC">velocityBCs</param>
+      <param name="IC">velocityICs</param>
+      <param name="LinkedDofInfo">velocityLinkedDofs</param>
+    </struct>
+    <struct name="VelocityMagnitudeField">
+      <param name="Type">OperatorFeVariable</param>
+      <param name="Operator">Magnitude</param>
+      <param name="FeVariable">VelocityField</param>
+    </struct>
+    <struct name="VelocityGradientsField">
+      <param name="Type">OperatorFeVariable</param>
+      <param name="Operator">Gradient</param>
+      <param name="FeVariable">VelocityField</param>
+    </struct>
+    <struct name="VelocityGradientsInvariantField">
+      <param name="Type">OperatorFeVariable</param>
+      <param name="Operator">TensorInvariant</param>
+      <param name="FeVariable">VelocityGradientsField</param>
+    </struct>
+    <struct name="StrainRateField">
+      <param name="Type">OperatorFeVariable</param>
+      <param name="Operator">TensorSymmetricPart</param>
+      <param name="FeVariable">VelocityGradientsField</param>
+    </struct>
+    <struct name="VorticityField">
+      <param name="Type">OperatorFeVariable</param>
+      <param name="Operator">TensorAntisymmetricPart</param>
+      <param name="FeVariable">VelocityGradientsField</param>
+    </struct>
+    <struct name="StrainRateInvariantField">
+      <param name="Type">OperatorFeVariable</param>
+      <param name="Operator">SymmetricTensor_Invariant</param>
+      <param name="FeVariable">StrainRateField</param>
+    </struct>
+    <struct name="pressure">
+      <param name="Type">MeshVariable</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="Rank">Scalar</param>
+      <param name="DataType">Double</param>
+    </struct>
+    <struct name="pressureDofLayout">
+      <param name="Type">DofLayout</param>
+      <param name="mesh">mesh-linear</param>
+      <list name="BaseVariables">
+        <param>pressure</param>
+      </list>
+    </struct>
+    <struct name="PressureField">
+      <param name="Type">FeVariable</param>
+      <param name="FEMesh">mesh-linear</param>
+      <param name="DofLayout">pressureDofLayout</param>
+      <param name="LinkedDofInfo">pressureLinkedDofs</param>
+    </struct>
+    <struct name="StressField">
+      <param name="Type">StressField</param>
+      <param name="StrainRateField">StrainRateField</param>
+      <param name="Context">context</param>
+      <param name="ConstitutiveMatrix">constitutiveMatrix</param>
+      <param name="Swarm">picIntegrationPoints</param>
+      <param name="Mesh">mesh-linear</param>
+      <param name="IC">stressICs</param>
+    </struct> 
+    <struct name="ViscosityField">
+      <param name="Type">ViscosityField</param>
+      <param name="Context">context</param>
+      <param name="Swarm">picIntegrationPoints</param>
+      <param name="Mesh">mesh-linear</param>
+      <param name="ConstitutiveMatrix">constitutiveMatrix</param>
+    </struct> 
+    <struct name="cellLayout">
+      <param name="Type">SingleCellLayout</param>
+    </struct>
+    <struct name="particleLayout">
+      <param name="Type">GaussParticleLayout</param>
+    </struct>
+    <struct name="gaussSwarm">
+      <param name="Type">IntegrationPointsSwarm</param>
+      <param name="CellLayout">cellLayout</param>
+      <param name="ParticleLayout">particleLayout</param>
+      <param name="FeMesh">mesh-linear</param>
+      <param name="TimeIntegrator">timeIntegrator</param>
+      <param name="IntegrationPointMapper">gaussMapper</param>
+    </struct>
+    <struct name="gaussMapper">
+      <param name="Type">GaussMapper</param>
+      <param name="IntegrationPointsSwarm">gaussSwarm</param>
+      <param name="MaterialPointsSwarm">gaussMaterialSwarm</param>
+    </struct>
+    <struct name="backgroundLayout">
+      <param name="Type">BackgroundParticleLayout</param>
+    </struct>
+    <struct name="gaussMaterialSwarm">
+      <param name="Type">MaterialPointsSwarm</param>
+      <param name="CellLayout">cellLayout</param>
+      <param name="ParticleLayout">backgroundLayout</param>
+      <param name="FeMesh">mesh-linear</param>
+    </struct>
+    <struct name="timeIntegrator">
+      <param name="Type">TimeIntegrator</param>
+      <param name="order">1</param>
+      <param name="simultaneous">t</param>
+      <param name="Context">context</param>
+    </struct>
+    <struct name="elementCellLayout">
+      <param name="Type">ElementCellLayout</param>
+      <param name="Mesh">mesh-linear</param>
+    </struct>
+    <struct name="weights">
+      <param name="Type">PCDVC</param>
+      <param name="resolutionX">10</param>
+      <param name="resolutionY">10</param>
+      <param name="resolutionZ">10</param>
+      <param name="lowerT">0.6</param>
+      <param name="upperT">25</param>
+      <param name="maxDeletions">3</param>
+      <param name="maxSplits">3</param>
+      <param name="MaterialPointsSwarm">materialSwarm</param>
+    </struct>
+    <struct name="localLayout">
+      <param name="Type">MappedParticleLayout</param>
+    </struct>
+    <struct name="picIntegrationPoints">
+      <param name="Type">IntegrationPointsSwarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">localLayout</param>
+      <param name="FeMesh">mesh-linear</param>
+      <param name="WeightsCalculator">weights</param>
+      <param name="TimeIntegrator">timeIntegrator</param>
+      <param name="IntegrationPointMapper">mapper</param>
+    </struct>
+    <struct name="mapper">
+      <param name="Type">CoincidentMapper</param>
+      <param name="IntegrationPointsSwarm">picIntegrationPoints</param>
+      <param name="MaterialPointsSwarm">materialSwarm</param>
+    </struct>
+    <struct name="materialSwarmParticleLayout">
+      <param name="Type">MeshParticleLayout</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="cellParticleCount">particlesPerCell</param>
+    </struct>
+    <struct name="materialSwarm">
+      <param name="Type">MaterialPointsSwarm</param>
+      <param name="CellLayout">elementCellLayout</param>
+      <param name="ParticleLayout">materialSwarmParticleLayout</param>
+      <param name="FeMesh">mesh-linear</param>
+      <param name="SplittingRoutine">splittingRoutine</param>
+      <param name="RemovalRoutine">removalRoutine</param>
+      <param name="EscapedRoutine">escapedRoutine</param>
+    </struct>
+    <struct name="materialSwarmAdvector">
+      <param name="Type">SwarmAdvector</param>
+      <param name="Swarm">materialSwarm</param>
+      <param name="TimeIntegrator">timeIntegrator</param>
+      <param name="VelocityField">VelocityField</param>
+      <param name="PeriodicBCsManager">periodicBCsManager</param>
+      <param name="allowFallbackToFirstOrder">True</param>
+    </struct>
+    <struct name="splittingRoutine">
+      <param name="Type">ReseedSplitting</param>
+      <param name="idealParticleCount">particlesPerCell</param>
+    </struct>
+    <struct name="solutionVelocity">
+      <param name="Type">SolutionVector</param>
+      <param name="FeVariable">VelocityField</param>
+    </struct>
+    <struct name="solutionPressure">
+      <param name="Type">SolutionVector</param>
+      <param name="FeVariable">PressureField</param>
+    </struct>
+    <struct name="mom_force">
+      <param name="Type">ForceVector</param>
+      <param name="FeVariable">VelocityField</param>
+      <param name="ExtraInfo">context</param>
+    </struct>
+    <struct name="cont_force">
+      <param name="Type">ForceVector</param>
+      <param name="FeVariable">PressureField</param>
+      <param name="ExtraInfo">context</param>
+    </struct>
+    <struct name="k_matrix">
+      <param name="Type">StiffnessMatrix</param>
+      <param name="RowVariable">VelocityField</param>
+      <param name="ColumnVariable">VelocityField</param>
+      <param name="RHS">mom_force</param>
+      <param name="allowZeroElementContributions">False</param>
+    </struct>
+    <struct name="constitutiveMatrix">
+      <param name="Type">ConstitutiveMatrixCartesian</param>
+      <param name="Swarm">picIntegrationPoints</param>
+      <param name="StiffnessMatrix">k_matrix</param>
+    </struct>
+    <struct name="g_matrix">
+      <param name="Type">StiffnessMatrix</param>
+      <param name="RowVariable">VelocityField</param>
+      <param name="ColumnVariable">PressureField</param>
+      <param name="RHS">cont_force</param>
+      <param name="allowZeroElementContributions">False</param>
+    </struct>
+    <struct name="gradientStiffnessMatrixTerm">
+      <param name="Type">GradientStiffnessMatrixTerm</param>
+      <param name="Swarm">gaussSwarm</param>
+      <param name="StiffnessMatrix">g_matrix</param>
+    </struct>
+    <struct name="preconditioner">
+      <param name="Type">StiffnessMatrix</param>
+      <param name="RowVariable">PressureField</param>
+      <param name="ColumnVariable">PressureField</param>
+      <param name="RHS">cont_force</param>
+      <param name="allowZeroElementContributions">True</param>
+    </struct>
+    <struct name="preconditionerTerm">
+      <param name="Type">UzawaPreconditionerTerm</param>
+      <param name="Swarm">picIntegrationPoints</param>
+      <param name="StiffnessMatrix">preconditioner</param>
+    </struct>
+    <struct name="uzawa">
+      <param name="Type">Stokes_SLE_UzawaSolver</param>
+      <param name="Preconditioner">preconditioner</param>
+      <param name="tolerance">1.0e-5</param>
+      <param name="maxIterations">5000</param>
+    </struct>
+    <struct name="stokesEqn">
+      <param name="Type">Stokes_SLE</param>
+      <param name="SLE_Solver">uzawa</param>
+      <param name="Context">context</param>
+      <param name="StressTensorMatrix">k_matrix</param>
+      <param name="GradientMatrix">g_matrix</param>
+      <param name="DivergenceMatrix"></param>
+      <param name="CompressibilityMatrix">c_matrix</param>
+      <param name="VelocityVector">solutionVelocity</param>
+      <param name="PressureVector">solutionPressure</param>
+      <param name="ForceVector">mom_force</param>
+      <param name="ContinuityForceVector">cont_force</param>
+      <param name="killNonConvergent">false</param>
+      <param name="nonLinearMaxIterations">nonLinearMaxIterations</param>
+      <param name="nonLinearTolerance">nonLinearTolerance</param>
+      <param name="makeConvergenceFile">false</param>
+    </struct>
+    <struct name="c_matrix">
+      <param name="Type">StiffnessMatrix</param>
+      <param name="RowVariable">PressureField</param>
+      <param name="ColumnVariable">PressureField</param>
+      <param name="RHS">cont_force</param>
+      <param name="allowZeroElementContributions">True</param>
+    </struct>
+    <struct name="mixedStabiliser">
+      <param name="Type">MixedStabiliserTerm</param>
+      <param name="Swarm">gaussSwarm</param>
+      <param name="picSwarm">picIntegrationPoints</param>
+      <param name="storeVisc">storeViscosity</param>
+      <param name="StiffnessMatrix">c_matrix</param>
+    </struct>
+    <struct name="buoyancyForceTerm">
+      <param name="Type">BuoyancyForceTerm</param>
+      <param name="ForceVector">mom_force</param>
+      <param name="TemperatureField">TemperatureField</param>
+      <param name="Swarm">picIntegrationPoints</param>
+      <param name="gravity">gravity</param>
+    </struct>
+    <struct name="background">
+      <param name="Type">Everywhere</param>
+    </struct>
+    <struct name="escapedRoutine">
+      <param name="Type">EscapedRoutine</param>
+      <param name="idealParticleCount">0</param>
+    </struct>
+    <struct name="velocityRemesher">
+      <param name="Type">StripRemesher</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="meshType">regular</param>
+      <list name="dim">
+        <param>true</param>
+        <param>true</param>
+        <param>true</param>
+      </list>
+    </struct>
+
+    <struct name="boxShape">
+      <param name="Type">Box</param>
+      <param name="startX">minX</param>
+      <param name="endX">maxX</param>
+      <param name="startY">minY</param>
+      <param name="endY">maxY</param>
+      <param name="startZ">minZ</param>
+      <param name="endZ">maxZ</param>
+    </struct>
+    <struct name="backgroundViscosity">
+      <param name="Type">MaterialViscosity</param>
+      <param name="eta0">1.0</param>
+    </struct>
+    <struct name="storeViscosity">
+      <param name="Type">StoreVisc</param>
+      <param name="MaterialPointsSwarm">materialSwarm</param>
+    </struct>
+    <struct name="storeStress">
+      <param name="Type">StoreStress</param>
+      <param name="MaterialPointsSwarm">materialSwarm</param>
+    </struct>
+
+
+    <struct name="sphereShape">
+      <param name="Type">Sphere</param>
+      <param name="CentreX">1.0</param>
+      <param name="CentreY">0.15</param>
+      <param name="radius">0.1</param>
+    </struct>
+
+    <struct name="nonSphereShape">
+      <param name="Type">Intersection</param>
+      <list name="shapes">
+        <param>boxShape</param>
+        <param>!sphereShape</param>
+      </list>
+    </struct>
+
+    <struct name="arrhenius">
+      <param name="Type">Arrhenius</param>
+      <param name="TemperatureField">TemperatureField</param>
+      <param name="eta0">1</param>
+      <param name="activationEnergy">1</param>
+      <param name="activationVolume">0.</param>
+      <param name="referenceTemperature">1</param>
+    </struct>
+    <struct name="nonNewtonian">
+      <param name="Type">NonNewtonian</param>
+      <param name="StrainRateInvariantField">StrainRateInvariantField</param>
+      <param name="stressExponent">3.4</param>
+      <param name="refStrainRate">0.01</param>
+    </struct>
+
+    <struct name="viscous">
+      <param name="Type">RheologyMaterial</param>
+      <param name="Shape">nonSphereShape</param>
+      <param name="density">1.0</param>
+      <param name="alpha">1.0</param>
+      <param name="diffusivity">1.0</param>
+      <list name="heatingElements">
+        <struct>
+          <param name="Q">1.0</param>
+          <param name="lambda">1.0</param>
+        </struct>
+      </list>
+      <list name="Rheology">
+        <param>arrhenius</param>
+        <param>nonNewtonian</param>
+        <param>storeViscosity</param>
+        <param>storeStress</param>
+      </list>
+    </struct>
+
+    <struct name="sphereViscosity">
+      <param name="Type">MaterialViscosity</param>
+      <param name="eta0">10.0</param>
+    </struct>
+
+    <struct name="sphereViscous">
+      <param name="Type">RheologyMaterial</param>
+      <param name="Shape">sphereShape</param>
+      <param name="density">1.0</param>
+      <param name="alpha">10.0</param>
+      <param name="diffusivity">10.0</param>
+      <list name="heatingElements">
+        <struct>
+          <param name="Q">1000.0</param>
+          <param name="lambda">10.0</param>
+        </struct>
+      </list>
+      <list name="Rheology">
+        <param>sphereViscosity</param>
+        <param>storeViscosity</param>
+        <param>storeStress</param>
+      </list>
+    </struct>
+
+
+    <!-- Temperature components -->
+    <struct name="temperature">
+      <param name="Type">MeshVariable</param>
+      <param name="Rank">Scalar</param>
+      <param name="DataType">Double</param>
+      <param name="mesh">mesh-linear</param>
+    </struct>
+    <struct name="temperatureBCs">
+      <param name="Type">CompositeVC</param>
+      <param name="Data">mesh-linear</param>
+    </struct>
+    <struct name="temperatureICs">
+      <param name="Type">CompositeVC</param>
+      <param name="Data">mesh-linear</param>
+    </struct>
+    <struct name="temperatureDofLayout">
+      <param name="Type">DofLayout</param>
+      <param name="mesh">mesh-linear</param>
+      <list name="BaseVariables">
+        <param>temperature</param>
+      </list>
+    </struct>
+    <struct name="TemperatureField">
+      <param name="Type">FeVariable</param>
+      <param name="FEMesh">mesh-linear</param>
+      <param name="DofLayout">temperatureDofLayout</param>
+      <param name="BC">temperatureBCs</param>
+      <param name="IC">temperatureICs</param>
+      <param name="LinkedDofInfo">temperatureLinkedDofs</param>
+    </struct>
+    <struct name="TemperatureGradientsField">
+      <param name="Type">OperatorFeVariable</param>
+      <param name="Operator">Gradient</param>
+      <param name="FeVariable">TemperatureField</param>
+    </struct>
+
+    <!-- Energy Equation -->
+
+    <struct name="residual">
+      <param name="Type">ForceVector</param>
+      <param name="FeVariable">TemperatureField</param>
+    </struct>
+    <struct name="massMatrix">
+      <param name="Type">ForceVector</param>
+      <param name="FeVariable">TemperatureField</param>
+    </struct>
+    <struct name="predictorMulticorrector">
+      <param name="Type">AdvDiffMulticorrector</param>
+    </struct>
+    <struct name="EnergyEqn">
+      <param name="Type">AdvectionDiffusionSLE</param>
+      <param name="SLE_Solver">predictorMulticorrector</param>
+      <param name="Context">context</param>
+      <param name="PhiField">TemperatureField</param>
+      <param name="Residual">residual</param>
+      <param name="MassMatrix">massMatrix</param>
+      <param name="courantFactor">0.25</param>
+    </struct>
+    <struct name="lumpedMassMatrixForceTerm">
+      <param name="Type">LumpedMassMatrixForceTerm</param>
+      <param name="Swarm">gaussSwarm</param>
+      <param name="ForceVector">massMatrix</param>
+    </struct>
+    <struct name="defaultResidualForceTerm">
+      <param name="Type">AdvDiffResidualForceTerm</param>
+      <param name="Swarm">gaussSwarm</param>
+      <param name="ForceVector">residual</param>
+      <param name="ExtraInfo">EnergyEqn</param>
+      <param name="VelocityField">VelocityField</param>
+      <param name="defaultDiffusivity">defaultDiffusivity</param>
+      <param name="UpwindXiFunction">Exact</param>
+    </struct>
+    <struct name="internalHeatingTerm">
+      <param name="Type">RadiogenicHeatingTerm</param>
+      <param name="ForceVector">residual</param>
+      <param name="Swarm">picIntegrationPoints</param>
+    </struct>	
+
+
+  </struct>
+  <list name="plugins">
+    <param>Underworld_EulerDeform</param>
+    <param>Underworld_VTKOutput</param>
+  </list>
+  <param name="maxTimeSteps">10</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output</param>
+  <param name="dim">2</param>
+  <param name="shadowDepth">1</param>
+  <param name="minX">0.0f</param>
+  <param name="minY">0.0f</param>
+  <param name="minZ">0.0f</param>
+  <param name="maxX">2.0f</param>
+  <param name="maxY">0.35f</param>
+  <param name="maxZ">0.3f</param>
+  <param name="elementResI">32</param>
+  <param name="elementResJ">16</param>
+  <param name="elementResK">4</param>
+  <param name="allowUnbalancing">True</param>
+  <param name="buildNodeNeighbourTbl">True</param>
+  <param name="buildElementNeighbourTbl">True</param>
+  <param name="particlesPerCell">30</param>
+  <param name="seed">13</param>
+  <param name="gaussParticlesX">2</param>
+  <param name="gaussParticlesY">2</param>
+  <param name="gaussParticlesZ">2</param>
+  <param name="particlesPerCell">30</param>
+  <struct name="EulerDeform">
+    <list name="systems">
+      <struct>
+        <param name="mesh">mesh-linear</param>
+        <param name="remesher">velocityRemesher</param>
+        <param name="velocityField">VelocityField</param>
+        <param name="wrapTop">True</param>
+        <list name="fields">
+          <struct>
+            <param name="field">VelocityField</param>
+            <param name="variable">velocity</param>
+          </struct>
+          <struct>
+            <param name="field">PressureField</param>
+            <param name="variable">pressure</param>
+          </struct>
+        </list>
+      </struct>
+    </list>
+  </struct>
+  <struct name="velocityBCs">
+    <param name="type">CompositeVC</param>
+    <list name="vcList">
+      <struct>
+        <param name="type">WallVC</param>
+        <param name="wall">front</param>
+        <list name="variables">
+          <struct>
+            <param name="name">vz</param>
+            <param name="type">double</param>
+            <param name="value">0</param>
+          </struct>
+        </list>
+      </struct>
+      <struct>
+        <param name="type">WallVC</param>
+        <param name="wall">back</param>
+        <list name="variables">
+          <struct>
+            <param name="name">vz</param>
+            <param name="type">double</param>
+            <param name="value">0</param>
+          </struct>
+        </list>
+      </struct>
+      <struct>
+        <param name="type">WallVC</param>
+        <param name="wall">left</param>
+        <list name="variables">
+          <struct>
+            <param name="name">vx</param>
+            <param name="type">double</param>
+            <param name="value">0.0</param>
+          </struct>
+        </list>
+      </struct>
+      <struct>
+        <param name="type">WallVC</param>
+        <param name="wall">right</param>
+        <list name="variables">
+          <struct>
+            <param name="name">vx</param>
+            <param name="type">double</param>
+            <param name="value">0.01</param>
+          </struct>
+        </list>
+      </struct>
+      <struct>
+        <param name="type">WallVC</param>
+        <param name="wall">bottom</param>
+        <list name="variables">
+          <struct>
+            <param name="name">vy</param>
+            <param name="type">double</param>
+            <param name="value">0.0</param>
+          </struct>
+        </list>
+      </struct>
+    </list>
+  </struct>
+
+  <struct name="temperatureBCs">
+    <param name="type">CompositeVC</param>
+    <list name="vcList">
+      <struct>
+        <param name="type">WallVC</param>
+        <param name="wall">bottom</param>
+        <list name="variables">
+          <struct>
+            <param name="name">temperature</param>
+            <param name="type">double</param>
+            <param name="value">1.0</param>
+          </struct>
+        </list>
+      </struct>
+      <struct>
+        <param name="type">WallVC</param>
+        <param name="wall">left</param>
+        <list name="variables">
+          <struct>
+            <param name="name">temperature</param>
+            <param name="type">double</param>
+            <param name="value">0.0</param>
+          </struct>
+        </list>
+      </struct>
+      <struct>
+        <param name="type">WallVC</param>
+        <param name="wall">right</param>
+        <list name="variables">
+          <struct>
+            <param name="name">temperature</param>
+            <param name="type">double</param>
+            <param name="value">0.0</param>
+          </struct>
+        </list>
+      </struct>
+      <struct>
+        <param name="type">WallVC</param>
+        <param name="wall">top</param>
+        <list name="variables">
+          <struct>
+            <param name="name">temperature</param>
+            <param name="type">double</param>
+            <param name="value">0.0</param>
+          </struct>
+        </list>
+      </struct>
+      <struct>
+        <param name="type">WallVC</param>
+        <param name="wall">front</param>
+        <list name="variables">
+          <struct>
+            <param name="name">temperature</param>
+            <param name="type">double</param>
+            <param name="value">0.0</param>
+          </struct>
+        </list>
+      </struct> 
+      <struct>
+        <param name="type">WallVC</param>
+        <param name="wall">back</param>
+        <list name="variables">
+          <struct>
+            <param name="name">temperature</param>
+            <param name="type">double</param>
+            <param name="value">0.0</param>
+          </struct>
+        </list>
+      </struct> 
+    </list>
+  </struct>
+  
+  <struct name="temperatureICs">
+    <param name="type">CompositeVC</param>
+    <list name="vcList">
+      <struct>
+        <param name="type">AllNodesVC</param>
+        <list name="variables">
+          <struct>
+            <param name="name">temperature</param>
+            <param name="type">double</param>
+            <param name="value">0.0</param>
+          </struct>
+        </list>
+      </struct> 
+    </list>
+  </struct>
+
+  <param name="checkpointEvery">1</param>
+  <param name="gravity">1.0</param>
+</StGermainData>

Modified: long/3D/Gale/trunk/src/Underworld/Rheology/src/NonNewtonian.c
===================================================================
--- long/3D/Gale/trunk/src/Underworld/Rheology/src/NonNewtonian.c	2009-04-16 04:14:05 UTC (rev 14728)
+++ long/3D/Gale/trunk/src/Underworld/Rheology/src/NonNewtonian.c	2009-04-16 13:24:40 UTC (rev 14729)
@@ -94,10 +94,13 @@
 	return self;
 }
 
-void _NonNewtonian_Init( NonNewtonian* self, FeVariable* strainRateInvField, double stressExponent ) {
+void _NonNewtonian_Init( NonNewtonian* self, FeVariable* strainRateInvField, double stressExponent, double refStrainRate, double maxViscosity, double minViscosity) {
 	self->strainRateInvField = strainRateInvField;
 
 	self->stressExponent = stressExponent;
+	self->refStrainRate = refStrainRate;
+	self->minViscosity = minViscosity;
+	self->maxViscosity = maxViscosity;
 
 	Rheology_SetToNonLinear( self );
 }
@@ -122,6 +125,9 @@
 void _NonNewtonian_Construct( void* rheology, Stg_ComponentFactory* cf, void* data ){
 	NonNewtonian*  self = (NonNewtonian*)rheology;
 	FeVariable*    strainRateInvField;
+        double refStrainRate;
+	Stream* errorStream = Journal_Register( Error_Type,
+                                                NonNewtonian_Type );
 
 	/* Construct Parent */
 	_Rheology_Construct( self, cf, data );
@@ -135,12 +141,20 @@
 		FeVariable, 
 		True,
 		data );
-	/*strainRateInvField = Stg_ComponentFactory_ConstructByKey( cf, self->name,
-				"StrainRateInvariantField", FeVariable, True);*/
+
+        refStrainRate=Stg_ComponentFactory_GetDouble( cf, self->name,
+                                                      "refStrainRate", 0.0 );
+        if(refStrainRate==0.0)
+          Journal_Firewall(0,errorStream,
+                           "refStrainRate must be set to a non-zero number in a NonNewtonian Rheology");
+
 	_NonNewtonian_Init( 
 			self,
 			strainRateInvField,
-			Stg_ComponentFactory_GetDouble( cf, self->name, "stressExponent", 1.0 ) );
+			Stg_ComponentFactory_GetDouble( cf, self->name, "stressExponent", 1.0 ), 
+                        refStrainRate,
+			Stg_ComponentFactory_GetDouble( cf, self->name, "minViscosity", 0.0 ) ,
+			Stg_ComponentFactory_GetDouble( cf, self->name, "maxViscosity", 0.0 ) );
 }
 
 void _NonNewtonian_ModifyConstitutiveMatrix( 
@@ -153,21 +167,38 @@
 {
 	NonNewtonian*	              self              = (NonNewtonian*) rheology;
 	double                        strainRateInv;
+	double                        minVis;
+	double                        maxVis;
 	double                        viscosity;
 	double                        n;
 
-	/* Don't want to yield on the first ever solve */
-	if ( !constitutiveMatrix->previousSolutionExists )
-		return;
-
-	/* Calculate Parameters */
-	FeVariable_InterpolateWithinElement( self->strainRateInvField, lElement_I, xi, &strainRateInv );
 	n = self->stressExponent;
+	minVis = self->minViscosity;
+	maxVis = self->maxViscosity;
 	if ( fabs( n - 1.0 ) < 1.0e-10 )
 		return;
+	if ( !constitutiveMatrix->previousSolutionExists )
+          /* on the first ever solve, use a ref strainrate */
+          {
+            strainRateInv = self->refStrainRate;
+          }
+        else
+          {
+            /* Calculate Parameters */
+            FeVariable_InterpolateWithinElement(self->strainRateInvField,
+                                                lElement_I,xi,&strainRateInv);
+        }
+	/* Calculate New Viscosity */
+	viscosity =ConstitutiveMatrix_GetIsotropicViscosity(constitutiveMatrix);
+	viscosity = pow(2.0*strainRateInv,1.0/n - 1.0) * pow(viscosity,1.0/n);
 
-	/* Calculate New Viscosity */
-	viscosity = ConstitutiveMatrix_GetIsotropicViscosity( constitutiveMatrix );
-	viscosity = pow(2.0 * strainRateInv, 1.0/n - 1.0) * pow(viscosity,1.0/n);
-	ConstitutiveMatrix_SetIsotropicViscosity( constitutiveMatrix, viscosity );
+        if(maxVis!=0 && viscosity>maxVis)
+          {
+            viscosity=maxVis;
+          }
+        if(minVis!=0 && viscosity<minVis)
+          {
+            viscosity=minVis;
+          }
+	ConstitutiveMatrix_SetIsotropicViscosity(constitutiveMatrix,viscosity);
 }

Modified: long/3D/Gale/trunk/src/Underworld/Rheology/src/NonNewtonian.h
===================================================================
--- long/3D/Gale/trunk/src/Underworld/Rheology/src/NonNewtonian.h	2009-04-16 04:14:05 UTC (rev 14728)
+++ long/3D/Gale/trunk/src/Underworld/Rheology/src/NonNewtonian.h	2009-04-16 13:24:40 UTC (rev 14729)
@@ -57,8 +57,13 @@
 		/* Virtual functions go here */ \
 		/* Material Parameters */\
 		FeVariable*                                         strainRateInvField;                      \
-		double                                              stressExponent;  
+		double                                              stressExponent;                           \
+       		double                                              refStrainRate;  \
+       		double                                              minViscosity;  \
+       		double                                              maxViscosity;  \
 
+
+
 	struct NonNewtonian { __NonNewtonian };
 	
 	/** Private Constructor: This will accept all the virtual functions for this class as arguments. */



More information about the CIG-COMMITS mailing list