[cig-commits] r12735 - in long/3D/Gale/trunk: . input/benchmarks src/StgFEM/plugins/StandardConditionFunctions

walter at geodynamics.org walter at geodynamics.org
Wed Aug 27 13:43:39 PDT 2008


Author: walter
Date: 2008-08-27 13:43:39 -0700 (Wed, 27 Aug 2008)
New Revision: 12735

Added:
   long/3D/Gale/trunk/input/benchmarks/geomod_2008_brittle.xml
Modified:
   long/3D/Gale/trunk/
   long/3D/Gale/trunk/input/benchmarks/geomod_2008_unstable_shortening_vfriction.xml
   long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c
   long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.h
Log:
 r2322 at earth:  boo | 2008-08-27 12:57:13 -0700
 Make geomod2008 unstable shortening and brittle work.  Has unsightly hacks that need fixing



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

Added: long/3D/Gale/trunk/input/benchmarks/geomod_2008_brittle.xml
===================================================================
--- long/3D/Gale/trunk/input/benchmarks/geomod_2008_brittle.xml	                        (rev 0)
+++ long/3D/Gale/trunk/input/benchmarks/geomod_2008_brittle.xml	2008-08-27 20:43:39 UTC (rev 12735)
@@ -0,0 +1,663 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="mesh-constant">
+      <param name="Type">FeMesh</param>
+      <param name="elementType">constant</param>
+    </struct>
+    <struct name="constantMesh-generator">
+      <param name="Type">C0Generator</param>
+      <param name="mesh">mesh-constant</param>
+      <param name="elementMesh">mesh-linear</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-constant</param>
+      <param name="Rank">Scalar</param>
+      <param name="DataType">Double</param>
+    </struct>
+    <struct name="pressureDofLayout">
+      <param name="Type">DofLayout</param>
+      <param name="mesh">mesh-constant</param>
+      <list name="BaseVariables">
+        <param>pressure</param>
+      </list>
+    </struct>
+    <struct name="PressureField">
+      <param name="Type">FeVariable</param>
+      <param name="FEMesh">mesh-constant</param>
+      <param name="DofLayout">pressureDofLayout</param>
+      <param name="LinkedDofInfo">pressureLinkedDofs</param>
+    </struct>
+
+    <struct name="nodalPressure">
+      <param name="Type">MeshVariable</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="Rank">Scalar</param>
+      <param name="DataType">Double</param>
+    </struct>
+    <struct name="nodalPressureDofLayout">
+      <param name="Type">DofLayout</param>
+      <param name="mesh">mesh-linear</param>
+      <list name="BaseVariables">
+        <param>nodalPressure</param>
+      </list>
+    </struct>
+    <struct name="NodalPressureField">
+      <param name="Type">FeVariable</param>
+      <param name="FEMesh">mesh-linear</param>
+      <param name="DofLayout">nodalPressureDofLayout</param>
+      <param name="LinkedDofInfo">nodalPressureLinkedDofs</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="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">linearTolerance</param>
+      <param name="maxIterations">maxUzawaIterations</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="buoyancyForceTerm">
+      <param name="Type">BuoyancyForceTerm</param>
+      <param name="ForceVector">mom_force</param>
+      <param name="Swarm">picIntegrationPoints</param>
+      <param name="gravity">9.81</param>
+    </struct>
+    <struct name="backgroundShape">
+      <param name="Type">Everywhere</param>
+    </struct>
+    <struct name="beadsShape">
+      <param name="Type">Box</param>
+      <param name="startX">minX</param>
+      <param name="endX">maxX</param>
+      <param name="startY">0.01</param>
+      <param name="endY">0.02</param>
+      <param name="startZ">minZ</param>
+      <param name="endZ">maxZ</param>
+    </struct>
+
+    <struct name="sandShape">
+      <param name="Type">Intersection</param>
+      <list name="shapes">
+        <param>backgroundShape</param>
+        <param>!beadsShape</param>
+      </list>
+    </struct>
+
+
+    <struct name="sandStrainWeakening">
+      <param name="Type">StrainWeakening</param>
+      <param name="TimeIntegrator">timeIntegrator</param>
+      <param name="MaterialPointsSwarm">materialSwarm</param>
+      <param name="initialSofteningStrain">0.5</param>
+      <param name="finalSofteningStrain">1.0</param>
+      <param name="initialDamageFraction">0.0</param>
+      <param name="initialDamageWavenumber">0.5</param>
+      <param name="initialDamageFactor">0.5</param>
+      <param name="healingRate">0.0</param>
+    </struct>
+    <struct name="sandYielding">
+      <param name="Type">MohrCoulomb</param>
+      <param name="PressureField">NodalPressureField</param>
+      <param name="VelocityGradientsField">VelocityGradientsField</param>
+      <param name="MaterialPointsSwarm">materialSwarm</param>
+      <param name="Context">context</param>
+      <param name="StrainWeakening">sandStrainWeakening</param>
+      <param name="cohesion">30.0</param>
+      <param name="cohesionAfterSoftening">30</param>
+      <!-- Angle of internal friction = 35 degrees -->
+      <param name="frictionCoefficient">0.70020753821</param>
+      <param name="frictionCoefficientAfterSoftening">0.70020753821</param>
+    </struct>
+
+    <struct name="sandViscosity">
+      <param name="Type">MaterialViscosity</param>
+      <param name="eta0">1.0e12</param>
+    </struct>
+    <struct name="beadsStrainWeakening">
+      <param name="Type">StrainWeakening</param>
+      <param name="TimeIntegrator">timeIntegrator</param>
+      <param name="MaterialPointsSwarm">materialSwarm</param>
+      <param name="initialSofteningStrain">0.5</param>
+      <param name="finalSofteningStrain">1.0</param>
+      <param name="initialDamageFraction">0.0</param>
+      <param name="initialDamageWavenumber">0.5</param>
+      <param name="initialDamageFactor">0.5</param>
+      <param name="healingRate">0.0</param>
+    </struct>
+    <struct name="beadsYielding">
+      <param name="Type">MohrCoulomb</param>
+      <param name="PressureField">NodalPressureField</param>
+      <param name="VelocityGradientsField">VelocityGradientsField</param>
+      <param name="MaterialPointsSwarm">materialSwarm</param>
+      <param name="Context">context</param>
+      <param name="StrainWeakening">beadsStrainWeakening</param>
+      <param name="cohesion">30.0</param>
+      <param name="cohesionAfterSoftening">30</param>
+      <param name="frictionCoefficient">0.466307658155</param>
+      <param name="frictionCoefficientAfterSoftening">0.466307658155</param>
+    </struct>
+    <struct name="beadsViscosity">
+      <param name="Type">MaterialViscosity</param>
+      <param name="eta0">1.0e12</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="sand">
+      <param name="Type">RheologyMaterial</param>
+      <param name="Shape">sandShape</param>
+      <param name="density">1560</param>
+      <list name="Rheology">
+        <param>sandViscosity</param>
+        <param>sandYielding</param>
+        <param>storeViscosity</param>
+        <param>storeStress</param>
+      </list>
+    </struct>
+    <struct name="beads">
+      <param name="Type">RheologyMaterial</param>
+      <param name="Shape">beadsShape</param>
+      <param name="density">1890</param>
+      <list name="Rheology">
+        <param>beadsViscosity</param>
+        <param>beadsYielding</param>
+        <param>storeViscosity</param>
+        <param>storeStress</param>
+      </list>
+    </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="pressureRemesher">
+      <param name="Type">CellRemesher</param>
+      <param name="mesh">mesh-constant</param>
+      <param name="meshType">regular</param>
+      <param name="dim">3</param>
+      <param name="cellMesh">mesh-linear</param>
+    </struct>
+    <struct name="conditionFunctions">
+      <param name="Type">StgFEM_StandardConditionFunctions</param>
+    </struct>
+
+  </struct>
+  <list name="plugins">
+<!--     <param>Gale_SurfaceProcess</param> -->
+    <param>Underworld_EulerDeform</param>
+    <param>Underworld_VTKOutput</param>
+  </list>
+  <param name="maxTimeSteps">5000</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output.geomod_brittle</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">0.35f</param>
+  <param name="maxY">0.03f</param>
+  <param name="maxZ">1.0f</param>
+  <param name="elementResI">128</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-constant</param>
+        <param name="remesher">pressureRemesher</param>
+        <param name="velocityField">VelocityField</param>
+        <list name="fields">
+          <struct>
+            <param name="field">PressureField</param>
+            <param name="variable">pressure</param>
+          </struct>
+        </list>
+      </struct>
+      <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>
+        </list>
+      </struct>
+    </list>
+  </struct>
+  <struct name="SurfaceProcess">
+    <param name="mesh">mesh-linear</param>
+  </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>
+            <!-- 2.5 cm/hr -->
+            <param name="value">6.94444444444e-6</param>
+<!--             <param name="value">0.0</param> -->
+          </struct>
+          <struct>
+            <param name="name">vy</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>
+            <!-- 2.5 cm/hr -->
+<!--             <param name="value">-6.94444444444e-6</param> -->
+            <param name="value">0</param>
+          </struct>
+
+
+          <struct>
+            <param name="name">vy</param>
+            <param name="type">double</param>
+            <param name="value">0</param>
+          </struct>
+
+<!--           <struct> -->
+<!--             <param name="name">vy</param> -->
+<!--             <param name="type">func</param> -->
+<!--             <param name="value">StaticFriction2</param> -->
+<!--           </struct> -->
+
+
+        </list>
+      </struct>
+      <struct>
+        <param name="type">WallVC</param>
+        <param name="wall">bottom</param>
+        <list name="variables">
+
+          <struct>
+            <param name="name">vx</param>
+            <param name="type">func</param>
+            <param name="value">StaticFriction</param>
+          </struct>
+
+          <struct>
+            <param name="name">vy</param>
+            <param name="type">double</param>
+            <param name="value">0</param>
+          </struct>
+        </list>
+      </struct>
+
+
+    </list>
+  </struct>
+
+  <struct name="stressICs">
+    <param name="type">CompositeVC</param>
+    <list name="vcList">
+      <struct>
+        <param name="type">AllNodesVC</param>
+        <list name="variables">
+          <struct>
+            <param name="name">stress</param>
+            <param name="type">double</param>
+            <param name="value">0.0</param>
+          </struct>
+        </list>
+      </struct> 
+    </list>
+  </struct>
+
+<!--   <param name="checkpointEvery">1</param> -->
+  <param name="dtFactor">1.0</param>
+
+  <param name="maxUzawaIterations">20000</param>
+  <param name="linearTolerance">1.0e-5</param>
+
+  <param name="StaticFrictionCoefficient">0.26</param>
+  <param name="StaticFrictionNormalDim">1</param>
+  <param name="StaticFrictionTangentDim">0</param>
+
+  <param name="StepFunctionProduct1Start">-100</param>
+  <param name="StepFunctionProduct1End">0.23</param>
+  <param name="StepFunctionProduct1Value">6.94444444444e-6</param>
+  <param name="StepFunctionProduct1Dim">0</param>
+
+
+
+  <param name="StaticFriction2Coefficient">0.26</param>
+  <param name="StaticFriction2NormalDim">0</param>
+  <param name="StaticFriction2TangentDim">1</param>
+  
+
+  <param name="journal.info">True</param>
+  <param name="journal.debug">True</param>
+  <param name="journal-level.info">2</param>
+  <param name="journal-level.debug">2</param>
+  <param name="diffusionCoefficient">1.0e-8</param>
+</StGermainData>

Modified: long/3D/Gale/trunk/input/benchmarks/geomod_2008_unstable_shortening_vfriction.xml
===================================================================
--- long/3D/Gale/trunk/input/benchmarks/geomod_2008_unstable_shortening_vfriction.xml	2008-08-27 20:43:35 UTC (rev 12734)
+++ long/3D/Gale/trunk/input/benchmarks/geomod_2008_unstable_shortening_vfriction.xml	2008-08-27 20:43:39 UTC (rev 12735)
@@ -73,16 +73,6 @@
       <param name="IC">velocityICs</param>
       <param name="LinkedDofInfo">velocityLinkedDofs</param>
     </struct>
-
-    <struct name="OldVelocityField">
-      <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>
@@ -565,6 +555,8 @@
           <struct>
             <param name="name">vx</param>
             <param name="type">double</param>
+            <!-- 2.5 cm/hr -->
+<!--             <param name="value">6.94444444444e-6</param> -->
             <param name="value">0.0</param>
           </struct>
           <struct>
@@ -583,13 +575,14 @@
             <param name="type">double</param>
             <!-- 2.5 cm/hr -->
             <param name="value">-6.94444444444e-6</param>
+<!--             <param name="value">0</param> -->
           </struct>
 
 
           <struct>
             <param name="name">vy</param>
-            <param name="type">double</param>
-            <param name="value">0</param>
+            <param name="type">func</param>
+            <param name="value">StaticFriction2</param>
           </struct>
 
 
@@ -643,6 +636,19 @@
   <param name="StaticFrictionCoefficient">0.26</param>
   <param name="StaticFrictionNormalDim">1</param>
   <param name="StaticFrictionTangentDim">0</param>
+  <param name="StaticFrictionUpperV">-6.94444444444e-6</param>
+
+  <param name="StepFunctionProduct1Start">-100</param>
+  <param name="StepFunctionProduct1End">0.3499999999</param>
+  <param name="StepFunctionProduct1Value">0</param>
+<!--   <param name="StepFunctionProduct1Value">6.94444444444e-6</param> -->
+  <param name="StepFunctionProduct1Dim">0</param>
+
+
+
+  <param name="StaticFriction2Coefficient">0.26</param>
+  <param name="StaticFriction2NormalDim">0</param>
+  <param name="StaticFriction2TangentDim">1</param>
   
 
   <param name="journal.info">True</param>

Modified: long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c
===================================================================
--- long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c	2008-08-27 20:43:35 UTC (rev 12734)
+++ long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c	2008-08-27 20:43:39 UTC (rev 12735)
@@ -148,6 +148,9 @@
 	condFunc = ConditionFunction_New(StgFEM_StandardConditionFunctions_StaticFriction,
                                          "StaticFriction");
 	ConditionFunction_Register_Add( context->condFunc_Register, condFunc );
+	condFunc = ConditionFunction_New(StgFEM_StandardConditionFunctions_StaticFriction2,
+                                         "StaticFriction2");
+	ConditionFunction_Register_Add( context->condFunc_Register, condFunc );
 }
 
 void* _StgFEM_StandardConditionFunctions_DefaultNew( Name name ) {
@@ -1539,8 +1542,8 @@
 
 void StgFEM_StandardConditionFunctions_StaticFriction_Internal
 (Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result,
- double boundary_v, double coefficient,
- unsigned normal_dim, unsigned tangent_dim) {
+ double boundary_v, double boundary_upper_v, double boundary_lower_v,
+ double coefficient, unsigned normal_dim, unsigned tangent_dim) {
   FiniteElementContext * context = (FiniteElementContext*)_context;
   FeVariable* velocityField = NULL;
   FeVariable* stressField = NULL;
@@ -1551,7 +1554,11 @@
   double* coord;
   double stress[9], p, v[3], viscosity, normal_stress, yield_stress,
     tangent_stress;
+  Grid* grid;
+  Node_GlobalIndex	node_gI = 0;
+  unsigned		inds[3];
   
+  
   velocityField = (FeVariable*)FieldVariable_Register_GetByName
     ( context->fieldVariable_Register, "VelocityField" );
   stressField = (FeVariable*)FieldVariable_Register_GetByName
@@ -1577,9 +1584,23 @@
 
   yield_stress=(normal_stress+p)*coefficient;
 
-  if(context->nonLinearIteration_I==NULL
-     || *(context->nonLinearIteration_I)==0 || p==0)
+  node_gI = Mesh_DomainToGlobal( feMesh, MT_VERTEX, node_lI );
+  RegularMeshUtils_Node_1DTo3D( feMesh, node_gI, inds );
+  
+  grid = *(Grid**)ExtensionManager_Get( feMesh->info, feMesh, 
+                                        ExtensionManager_GetHandle( feMesh->info, "vertexGrid" ) );
+  
+  if(inds[tangent_dim]==0)
     {
+      *result=boundary_lower_v;
+    }
+  else if(inds[tangent_dim]==(grid->sizes[tangent_dim]-1) && node_lI!=2192)
+    {
+      *result=boundary_upper_v;
+    }
+  else if(context->nonLinearIteration_I==NULL
+          || *(context->nonLinearIteration_I)==0 || p==0)
+    {
       *result=boundary_v;
     }      
   else if(fabs(tangent_stress)<yield_stress)
@@ -1588,37 +1609,39 @@
     }
   else
     {
-      Node_GlobalIndex	node_gI = 0;
       Node_LocalIndex temp_node;
-      unsigned		inds[3];
       double *temp_coord, delta, v_off[3];
 
-      node_gI = Mesh_DomainToGlobal( feMesh, MT_VERTEX, node_lI );
-      RegularMeshUtils_Node_1DTo3D( feMesh, node_gI, inds );
-      
-      if(inds[normal_dim]==0)
-        ++inds[normal_dim];
-      else
-        --inds[normal_dim];
+        {
+          if(inds[normal_dim]==0)
+            ++inds[normal_dim];
+          else
+            --inds[normal_dim];
+          
+          node_gI=RegularMeshUtils_Node_3DTo1D(feMesh, inds);
+          Mesh_GlobalToDomain(feMesh, MT_VERTEX, node_gI, &temp_node);
+          
+          FeVariable_GetValueAtNode(velocityField,temp_node,v_off);
+          temp_coord=Mesh_GetVertex(feMesh, temp_node);
+          
+          delta=fabs(temp_coord[normal_dim]-coord[normal_dim]);
 
-      node_gI=RegularMeshUtils_Node_3DTo1D(feMesh, inds);
-      Mesh_GlobalToDomain(feMesh, MT_VERTEX, node_gI, &temp_node);
-
-      FeVariable_GetValueAtNode(velocityField,temp_node,v_off);
-      temp_coord=Mesh_GetVertex(feMesh, temp_node);
-
-      delta=temp_coord[normal_dim]-coord[normal_dim];
-
-      *result=v_off[tangent_dim]-delta*yield_stress/viscosity;
-
-      /* If the yield stress is negative (e.g. the pressure is negative),
-         then the boundary moves in lockstep with the element above
-         it. */
-      if(yield_stress<0)
-        *result=v_off[tangent_dim];
-
-      if((*result-boundary_v)*(v_off[tangent_dim]-boundary_v)<0)
-        *result=boundary_v;
+          /* Make sure that we always make the velocity closer to the
+             boundary velocity */
+          if(v_off[tangent_dim]>boundary_v)
+            *result=v_off[tangent_dim]-delta*yield_stress/viscosity;
+          else
+            *result=v_off[tangent_dim]+delta*yield_stress/viscosity;
+          
+          /* If the yield stress is negative (e.g. the pressure is
+             negative), then the boundary moves in lockstep with the
+             element above it. */
+          if(yield_stress<0)
+            *result=v_off[tangent_dim];
+          
+          if((*result-boundary_v)*(v_off[tangent_dim]-boundary_v)<0)
+            *result=boundary_v;
+        }
     }
 }
 
@@ -1629,10 +1652,24 @@
   FiniteElementContext * context = (FiniteElementContext*)_context;
   Dictionary* dictionary = context->dictionary;
   unsigned normal_dim, tangent_dim;
-  double boundary_v,coefficient;
+  double boundary_v,boundary_upper_v,boundary_lower_v,coefficient,
+    nonsense_number;
 
-  boundary_v =
-    Dictionary_GetDouble_WithDefault(dictionary,"StaticFrictionV",0.0 );
+  nonsense_number=-345.225287;
+
+  StG_FEM_StandardConditionFunctions_StepFunctionProduct1(node_lI,var_I,
+                                                          _context,&boundary_v);
+  boundary_upper_v =
+    Dictionary_GetDouble_WithDefault(dictionary,
+                                     "StaticFrictionUpperV",nonsense_number);
+  if(boundary_upper_v==nonsense_number)
+    boundary_upper_v=boundary_v;
+  boundary_lower_v =
+    Dictionary_GetDouble_WithDefault(dictionary,
+                                     "StaticFrictionLowerV",nonsense_number);
+  if(boundary_lower_v==nonsense_number)
+    boundary_lower_v=boundary_v;
+
   coefficient =
     Dictionary_GetDouble_WithDefault(dictionary,
                                      "StaticFrictionCoefficient",0.0);
@@ -1644,11 +1681,56 @@
                                           "StaticFrictionTangentDim",0);
 
   StgFEM_StandardConditionFunctions_StaticFriction_Internal
-    (node_lI,var_I,_context,_result,boundary_v,coefficient,normal_dim,
-     tangent_dim);
+    (node_lI,var_I,_context,_result,boundary_v,boundary_upper_v,
+     boundary_lower_v,coefficient,normal_dim,tangent_dim);
 }
 
 
+void StgFEM_StandardConditionFunctions_StaticFriction2(Node_LocalIndex node_lI,
+                                                      Variable_Index var_I,
+                                                      void* _context,
+                                                      void* _result ) {
+  FiniteElementContext * context = (FiniteElementContext*)_context;
+  Dictionary* dictionary = context->dictionary;
+  unsigned normal_dim, tangent_dim;
+  double boundary_v,boundary_upper_v,boundary_lower_v,coefficient,
+    nonsense_number;
+
+  nonsense_number=-345.225287;
+
+  StG_FEM_StandardConditionFunctions_StepFunctionProduct2(node_lI,var_I,
+                                                          _context,&boundary_v);
+
+  /* We have to do this song and dance with nonsense_number, because
+     it stores the default and reuses it later, instead of lettting me
+     specify a new one each time. */
+  boundary_upper_v =
+    Dictionary_GetDouble_WithDefault(dictionary,
+                                     "StaticFriction2UpperV",nonsense_number);
+  if(boundary_upper_v==nonsense_number)
+    boundary_upper_v=boundary_v;
+  boundary_lower_v =
+    Dictionary_GetDouble_WithDefault(dictionary,
+                                     "StaticFriction2LowerV",nonsense_number);
+  if(boundary_lower_v==nonsense_number)
+    boundary_lower_v=boundary_v;
+
+  coefficient =
+    Dictionary_GetDouble_WithDefault(dictionary,
+                                     "StaticFriction2Coefficient",0.0);
+  normal_dim =
+    Dictionary_GetUnsignedInt_WithDefault(dictionary,
+                                          "StaticFriction2NormalDim",0);
+  tangent_dim =
+    Dictionary_GetUnsignedInt_WithDefault(dictionary,
+                                          "StaticFriction2TangentDim",0);
+
+  StgFEM_StandardConditionFunctions_StaticFriction_Internal
+    (node_lI,var_I,_context,_result,boundary_v,boundary_upper_v,
+     boundary_lower_v,coefficient,normal_dim,tangent_dim);
+}
+
+
 Bool StgFEM_StandardConditionFunctions_Init( int* argc, char** argv[] ) {
   Stg_ComponentRegister* componentsRegister = Stg_ComponentRegister_Get_ComponentRegister();
   Stg_ComponentRegister_Add(componentsRegister,

Modified: long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.h
===================================================================
--- long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.h	2008-08-27 20:43:35 UTC (rev 12734)
+++ long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.h	2008-08-27 20:43:39 UTC (rev 12735)
@@ -95,5 +95,6 @@
 void StgFEM_StandardConditionFunctions_ERF( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result );
 void StgFEM_StandardConditionFunctions_ERFC( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result );
 void StgFEM_StandardConditionFunctions_StaticFriction( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result );
+void StgFEM_StandardConditionFunctions_StaticFriction2( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result );
 
 #endif	



More information about the cig-commits mailing list