[cig-commits] r5366 - in long/3D/Gale/trunk: . src/PICellerator/Utils/src

walter at geodynamics.org walter at geodynamics.org
Tue Nov 28 14:00:18 PST 2006


Author: walter
Date: 2006-11-28 14:00:16 -0800 (Tue, 28 Nov 2006)
New Revision: 5366

Added:
   long/3D/Gale/trunk/fountain.xml
   long/3D/Gale/trunk/src/PICellerator/Utils/src/StressBC.c
   long/3D/Gale/trunk/src/PICellerator/Utils/src/StressBC.h
   long/3D/Gale/trunk/src/PICellerator/Utils/src/StressBC.meta
Modified:
   long/3D/Gale/trunk/
   long/3D/Gale/trunk/src/PICellerator/Utils/src/Init.c
   long/3D/Gale/trunk/src/PICellerator/Utils/src/SConscript
   long/3D/Gale/trunk/src/PICellerator/Utils/src/Utils.h
   long/3D/Gale/trunk/src/PICellerator/Utils/src/types.h
Log:
 r1115 at earth:  boo | 2006-11-27 15:23:24 -0800
 First pass at stress BC's.  Everything is hard coded right now



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

Added: long/3D/Gale/trunk/fountain.xml
===================================================================
--- long/3D/Gale/trunk/fountain.xml	2006-11-28 22:00:14 UTC (rev 5365)
+++ long/3D/Gale/trunk/fountain.xml	2006-11-28 22:00:16 UTC (rev 5366)
@@ -0,0 +1,544 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <struct name="components">
+    <struct name="geometry">
+      <param name="Type">MeshGeometry</param>
+      <param name="mesh">mesh-linear</param>
+      <param name="decomp">decomp-linear</param>
+      <param name="sizeI">elementResI</param>
+      <param name="sizeJ">elementResJ</param>
+      <param name="sizeK">elementResK</param>
+      <param name="sizeShift">+1</param>
+    </struct>
+    <struct name="elementTopology">
+      <param name="Type">IJK26Topology</param>
+      <param name="sizeI">elementResI</param>
+      <param name="sizeJ">elementResJ</param>
+      <param name="sizeK">elementResK</param>
+    </struct>
+    <struct name="elementLayout">
+      <param name="Type">HexaEL</param>
+      <param name="Topology">elementTopology</param>
+      <param name="Geometry">geometry</param>
+    </struct>
+    <struct name="bodyNodeTopology">
+      <param name="Type">IJK6Topology</param>
+      <param name="sizeI">elementResI</param>
+      <param name="sizeJ">elementResJ</param>
+      <param name="sizeK">elementResK</param>
+    </struct>
+    <struct name="bodyNodeLayout">
+      <param name="Type">BodyNL</param>
+      <param name="ElementLayout">elementLayout</param>
+      <param name="Topology">bodyNodeTopology</param>
+    </struct>
+    <struct name="decomp-constant">
+      <param name="Type">HexaMD</param>
+      <param name="ElementLayout">elementLayout</param>
+      <param name="NodeLayout">bodyNodeLayout</param>
+      <param name="numPartitionedDims">numPartitionedDims</param>
+    </struct>
+    <struct name="meshLayout-constant">
+      <param name="Type">MeshLayout</param>
+      <param name="ElementLayout">elementLayout</param>
+      <param name="NodeLayout">bodyNodeLayout</param>
+      <param name="MeshDecomp">decomp-constant</param>
+    </struct>
+    <struct name="mesh-constant">
+      <param name="Type">FiniteElement_Mesh</param>
+      <param name="MeshLayout">meshLayout-constant</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="cornerNodeTopology">
+      <param name="Type">IJK6Topology</param>
+      <param name="sizeI">elementResI</param>
+      <param name="sizeJ">elementResJ</param>
+      <param name="sizeK">elementResK</param>
+      <param name="sizeShift">1</param>
+    </struct>
+    <struct name="cornerNodeLayout">
+      <param name="Type">CornerNL</param>
+      <param name="ElementLayout">elementLayout</param>
+      <param name="Topology">cornerNodeTopology</param>
+    </struct>
+    <struct name="decomp-linear">
+      <param name="Type">HexaMD</param>
+      <param name="ElementLayout">elementLayout</param>
+      <param name="NodeLayout">cornerNodeLayout</param>
+      <param name="numPartitionedDims">numPartitionedDims</param>
+    </struct>
+    <struct name="meshLayout-linear">
+      <param name="Type">MeshLayout</param>
+      <param name="ElementLayout">elementLayout</param>
+      <param name="NodeLayout">cornerNodeLayout</param>
+      <param name="MeshDecomp">decomp-linear</param>
+    </struct>
+    <struct name="mesh-linear">
+      <param name="Type">FiniteElement_Mesh</param>
+      <param name="MeshLayout">meshLayout-linear</param>
+      <param name="ElementSize">8</param>
+      <param name="NodeSize">0</param>
+    </struct>
+    <struct name="velocity">
+      <param name="Type">Variable</param>
+      <param name="Rank">Vector</param>
+      <param name="Dependency">decomp-linear</param>
+      <param name="DataType">Double</param>
+      <param name="Count">decomp-linear-nodeDomainCount</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="Count">decomp-linear-nodeDomainCount</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="VelocityXXField">
+      <param name="Type">OperatorFeVariable</param>
+      <param name="Operator">TakeFirstComponent</param>
+      <param name="FeVariable">VelocityField</param>
+    </struct>
+    <struct name="VelocityYYField">
+      <param name="Type">OperatorFeVariable</param>
+      <param name="Operator">TakeSecondComponent</param>
+      <param name="FeVariable">VelocityField</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="StrainRateXXField">
+      <param name="Type">OperatorFeVariable</param>
+      <param name="Operator">TakeFirstComponent</param>
+      <param name="FeVariable">StrainRateField</param>
+    </struct>
+    <struct name="StrainRateYYField">
+      <param name="Type">OperatorFeVariable</param>
+      <param name="Operator">TakeSecondComponent</param>
+      <param name="FeVariable">StrainRateField</param>
+    </struct>
+    <struct name="pressure">
+      <param name="Type">Variable</param>
+      <param name="Rank">Scalar</param>
+      <param name="Dependency">decomp-constant</param>
+      <param name="DataType">Double</param>
+      <param name="Count">decomp-constant-nodeDomainCount</param>
+    </struct>
+    <struct name="pressureDofLayout">
+      <param name="Type">DofLayout</param>
+      <param name="Count">decomp-constant-nodeDomainCount</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="GeometryMesh">mesh-linear</param>
+      <param name="DofLayout">pressureDofLayout</param>
+      <param name="LinkedDofInfo">pressureLinkedDofs</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="FiniteElement_Mesh">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="FiniteElement_Mesh">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="discreteVoronoi">
+      <param name="Type">CellularAutomataVoronoi</param>
+      <param name="resolution">10</param>
+      <param name="diagonalNeighbours">true</param>
+    </struct>
+    <struct name="weights">
+      <param name="Type">DiscreteVoronoiWeights</param>
+      <param name="DiscreteVoronoi">discreteVoronoi</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="FiniteElement_Mesh">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="FiniteElement_Mesh">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="removalRoutine">
+      <param name="Type">DiscreteVoronoiRemove</param>
+      <param name="idealParticleCount">particlesPerCell</param>
+      <param name="DiscreteVoronoi">discreteVoronoi</param>
+    </struct>
+    <struct name="splittingRoutine">
+      <param name="Type">ReseedSplitting</param>
+      <param name="idealParticleCount">particlesPerCell</param>
+      <param name="DiscreteVoronoi">discreteVoronoi</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="buoyancyForceTerm">
+      <param name="Type">BuoyancyForceTerm</param>
+      <param name="ForceVector">mom_force</param>
+      <param name="Swarm">picIntegrationPoints</param>
+      <param name="gravity">gravity</param>
+    </struct>
+    <struct name="stressBC">
+      <param name="Type">StressBC</param>
+      <param name="ForceVector">mom_force</param>
+      <param name="Swarm">picIntegrationPoints</param>
+      <param name="force">10.0</param>
+    </struct>
+    <struct name="background">
+      <param name="Type">Everywhere</param>
+    </struct>
+    <struct name="pdmsShape">
+      <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="pdmsViscosity">
+      <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="pdms">
+      <param name="Type">RheologyMaterial</param>
+      <param name="Shape">pdmsShape</param>
+      <param name="density">1.0</param>
+      <list name="Rheology">
+        <param>pdmsViscosity</param>
+        <param>storeViscosity</param>
+      </list>
+    </struct>
+    <struct name="cartesianGenerator">
+      <param name="Type">CartesianGenerator</param>
+      <param name="decomp">decomp-linear</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="dims">
+        <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="dims">2</param>
+      <param name="cellMesh">mesh-linear</param>
+    </struct>
+  </struct>
+  <list name="plugins">
+    <param>StgFEM_StandardConditionFunctions</param>
+    <param>Underworld_EulerDeform</param>
+  </list>
+  <param name="maxTimeSteps">500</param>
+  <param name="outputEvery">1</param>
+  <param name="dumpEvery">1</param>
+  <param name="outputPath">./output.fountain</param>
+  <param name="dim">2</param>
+  <param name="numPartitionedDims">1</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">1.0f</param>
+  <param name="maxY">0.5f</param>
+  <param name="maxZ">0.3f</param>
+  <param name="elementResI">64</param>
+  <param name="elementResJ">32</param>
+  <param name="elementResK">3</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>
+  <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="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.0</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>
+  <param name="checkpointEvery">1</param>
+  <param name="gravity">1.</param>
+</StGermainData>

Modified: long/3D/Gale/trunk/src/PICellerator/Utils/src/Init.c
===================================================================
--- long/3D/Gale/trunk/src/PICellerator/Utils/src/Init.c	2006-11-28 22:00:14 UTC (rev 5365)
+++ long/3D/Gale/trunk/src/PICellerator/Utils/src/Init.c	2006-11-28 22:00:16 UTC (rev 5366)
@@ -61,6 +61,10 @@
 	Stg_ComponentRegister_Add( componentsRegister, BuoyancyForceTerm_Type,            "0", _BuoyancyForceTerm_DefaultNew );
 
 	RegisterParent( BuoyancyForceTerm_Type,     ForceTerm_Type );
+
+	Stg_ComponentRegister_Add( componentsRegister, StressBC_Type,            "0", _StressBC_DefaultNew );
+
+	RegisterParent( StressBC_Type,     ForceTerm_Type );
 	RegisterParent( MaterialSwarmVariable_Type, SwarmVariable_Type );
 	
 	return True;

Modified: long/3D/Gale/trunk/src/PICellerator/Utils/src/SConscript
===================================================================
--- long/3D/Gale/trunk/src/PICellerator/Utils/src/SConscript	2006-11-28 22:00:14 UTC (rev 5365)
+++ long/3D/Gale/trunk/src/PICellerator/Utils/src/SConscript	2006-11-28 22:00:16 UTC (rev 5366)
@@ -23,6 +23,7 @@
 Finalise.h
 Init.h
 MaterialSwarmVariable.h
+StressBC.h
 types.h
 Utils.h""")
 
@@ -30,10 +31,12 @@
 c_files=Split("""BuoyancyForceTerm.c
 Finalise.c
 Init.c
+StressBC.c
 MaterialSwarmVariable.c""")
 
 
 meta_files=Split("""BuoyancyForceTerm.meta
+StressBC.meta
 MaterialSwarmVariable.meta""")
 
 c_files+=[local_env.Meta(meta_files)]

Added: long/3D/Gale/trunk/src/PICellerator/Utils/src/StressBC.c
===================================================================
--- long/3D/Gale/trunk/src/PICellerator/Utils/src/StressBC.c	2006-11-28 22:00:14 UTC (rev 5365)
+++ long/3D/Gale/trunk/src/PICellerator/Utils/src/StressBC.c	2006-11-28 22:00:16 UTC (rev 5366)
@@ -0,0 +1,381 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003-2006, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street,
+**	Melbourne, 3053, Australia.
+** Copyright (c) 2005-2006, Monash Cluster Computing, Building 28, Monash University Clayton Campus,
+**	Victoria, 3800, Australia
+**
+** Primary Contributing Organisations:
+**	Victorian Partnership for Advanced Computing Ltd, Computational Software Development - http://csd.vpac.org
+**	Australian Computational Earth Systems Simulator - http://www.access.edu.au
+**	Monash Cluster Computing - http://www.mcc.monash.edu.au
+**
+** Contributors:
+**	Robert Turnbull, Research Assistant, Monash University. (robert.turnbull at sci.monash.edu.au)
+**	Patrick D. Sunter, Software Engineer, VPAC. (patrick at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	David May, PhD Student, Monash University (david.may at sci.monash.edu.au)
+**	Vincent Lemiale, Postdoctoral Fellow, Monash University. (vincent.lemiale at sci.monash.edu.au)
+**	Julian Giordani, Research Assistant, Monash University. (julian.giordani at sci.monash.edu.au)
+**	Louis Moresi, Associate Professor, Monash University. (louis.moresi at sci.monash.edu.au)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	David Stegman, Postdoctoral Fellow, Monash University. (david.stegman at sci.monash.edu.au)
+**	Wendy Sharples, PhD Student, Monash University (wendy.sharples at sci.monash.edu.au)
+**
+**  Modified 2006 by Walter Landry (California Institute of Technology)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id$
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgFEM/StgFEM.h>
+#include <PICellerator/Voronoi/Voronoi.h>
+#include <PICellerator/PopulationControl/PopulationControl.h>
+#include <PICellerator/Weights/Weights.h>
+#include <PICellerator/MaterialPoints/MaterialPoints.h>
+
+#include "PICellerator/Utils/types.h"
+#include "PICellerator/Utils/MaterialSwarmVariable.h"
+
+#include "types.h"
+#include "StressBC.h"
+
+#include <assert.h>
+#include <string.h>
+
+/* Textual name of this class */
+const Type StressBC_Type = "StressBC";
+
+StressBC* StressBC_New( 
+		Name                                                name,
+		ForceVector*                                        forceVector,
+		Swarm*                                              integrationSwarm,
+		double                                              force,
+		Bool                                                adjust,
+		Materials_Register*                                 materials_Register )
+{
+	StressBC* self = (StressBC*) _StressBC_DefaultNew( name );
+
+	StressBC_InitAll( 
+			self,
+			forceVector,
+			integrationSwarm,
+			force,
+			adjust,
+			materials_Register );
+
+	return self;
+}
+
+/* Creation implementation / Virtual constructor */
+StressBC* _StressBC_New( 
+		SizeT                                               sizeOfSelf,  
+		Type                                                type,
+		Stg_Class_DeleteFunction*                           _delete,
+		Stg_Class_PrintFunction*                            _print,
+		Stg_Class_CopyFunction*                             _copy, 
+		Stg_Component_DefaultConstructorFunction*           _defaultConstructor,
+		Stg_Component_ConstructFunction*                    _construct,
+		Stg_Component_BuildFunction*                        _build,
+		Stg_Component_InitialiseFunction*                   _initialise,
+		Stg_Component_ExecuteFunction*                      _execute,
+		Stg_Component_DestroyFunction*                      _destroy,
+		ForceTerm_AssembleElementFunction*                  _assembleElement,		
+		StressBC_CalcForceFunction*              _calcForce,
+		Name                                                name )
+{
+	StressBC* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(StressBC) );
+	self = (StressBC*) _ForceTerm_New( 
+		sizeOfSelf, 
+		type, 
+		_delete, 
+		_print, 
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build, 
+		_initialise,
+		_execute,
+		_destroy,
+		_assembleElement,
+		name );
+	
+	/* Virtual info */
+	self->_calcForce = _calcForce;
+	
+	return self;
+}
+
+void _StressBC_Init( 
+		StressBC*                                  self, 
+		double                                              force,
+		Bool                                                adjust,
+		Materials_Register*                                 materials_Register )
+{
+	self->force             = force;
+	self->adjust              = adjust;
+	self->materials_Register  = materials_Register;
+
+}
+
+void StressBC_InitAll( 
+		void*                                               forceTerm,
+		ForceVector*                                        forceVector,
+		Swarm*                                              integrationSwarm,
+		double                                              force,
+		Bool                                                adjust,
+		Materials_Register*                                 materials_Register )
+{
+	StressBC* self = (StressBC*) forceTerm;
+
+	ForceTerm_InitAll( self, forceVector, integrationSwarm, NULL );
+	_StressBC_Init( self, force, adjust, materials_Register );
+}
+
+void _StressBC_Delete( void* forceTerm ) {
+	StressBC* self = (StressBC*)forceTerm;
+	Index i;
+
+	for ( i = 0; i < self->materialSwarmCount; ++i ) {
+		Stg_Class_Delete( self->densitySwarmVariables[i] );
+		Stg_Class_Delete( self->alphaSwarmVariables[i] );
+	}
+	Stg_Class_Delete( self->densitySwarmVariables );
+	Stg_Class_Delete( self->alphaSwarmVariables );
+
+	_ForceTerm_Delete( self );
+}
+
+void _StressBC_Print( void* forceTerm, Stream* stream ) {
+	StressBC* self = (StressBC*)forceTerm;
+	
+	_ForceTerm_Print( self, stream );
+
+	/* General info */
+	Journal_PrintDouble( stream, self->force );
+}
+
+void* _StressBC_DefaultNew( Name name ) {
+	return (void*)_StressBC_New( 
+		sizeof(StressBC), 
+		StressBC_Type,
+		_StressBC_Delete,
+		_StressBC_Print,
+		NULL,
+		_StressBC_DefaultNew,
+		_StressBC_Construct,
+		_StressBC_Build,
+		_StressBC_Initialise,
+		_StressBC_Execute,
+		_StressBC_Destroy,
+		_StressBC_AssembleElement,
+		_StressBC_CalcForce,
+		name );
+}
+
+void _StressBC_Construct( void* forceTerm, Stg_ComponentFactory* cf, void* data ) {
+	StressBC*          self             = (StressBC*)forceTerm;
+	double                      force;
+	Bool                        adjust;
+	Materials_Register*         materials_Register;
+
+	/* Construct Parent */
+	_ForceTerm_Construct( self, cf, data );
+
+	force          = Stg_ComponentFactory_GetDouble( cf, self->name, "force", 0.0 );
+	adjust           = Stg_ComponentFactory_GetBool( cf, self->name, "adjust", False );
+
+	materials_Register = Stg_ObjectList_Get( cf->registerRegister, "Materials_Register" );
+	assert( materials_Register );
+
+	_StressBC_Init( self, force, adjust, materials_Register );
+}
+
+void _StressBC_Build( void* forceTerm, void* data ) {
+	StressBC*               self               = (StressBC*)forceTerm;
+	StressBC_MaterialExt*   materialExt;
+	Material_Index                   material_I;
+	Material*                        material;
+	Materials_Register*              materials_Register = self->materials_Register;
+	IntegrationPointsSwarm*          swarm              = (IntegrationPointsSwarm*)self->integrationSwarm;
+	MaterialPointsSwarm**            materialSwarms;
+	Index                            materialSwarm_I;
+	Name                             name;
+
+	_ForceTerm_Build( self, data );
+
+	/* Sort out material extension stuff */
+	self->materialExtHandle = Materials_Register_AddMaterialExtension( 
+			self->materials_Register, 
+			self->type, 
+			sizeof(StressBC_MaterialExt) );
+	for ( material_I = 0 ; material_I < Materials_Register_GetCount( materials_Register ) ; material_I++) {
+		material = Materials_Register_GetByIndex( materials_Register, material_I );
+		materialExt = ExtensionManager_GetFunc( material->extensionMgr, material, self->materialExtHandle );
+
+		materialExt->density = Dictionary_GetDouble_WithDefault( material->dictionary, "density", 0.0 );
+		materialExt->alpha   = Dictionary_GetDouble_WithDefault( material->dictionary, "alpha",   0.0 );
+	}
+	
+	/* Create Swarm Variables of each material swarm this ip swarm is mapped against */
+	materialSwarms = IntegrationPointMapper_GetMaterialPointsSwarms( swarm->mapper, &(self->materialSwarmCount) );
+	self->densitySwarmVariables = Memory_Alloc_Array( MaterialSwarmVariable*, self->materialSwarmCount, "DensityVariables" );
+	self->alphaSwarmVariables   = Memory_Alloc_Array( MaterialSwarmVariable*, self->materialSwarmCount, "AlphaVariables" );
+	
+	for ( materialSwarm_I = 0; materialSwarm_I < self->materialSwarmCount; ++materialSwarm_I ) {
+		name = Stg_Object_AppendSuffix( materialSwarms[materialSwarm_I], "Density" );
+		self->densitySwarmVariables[materialSwarm_I] = MaterialSwarmVariable_New( 
+				name, 
+				materialSwarms[materialSwarm_I], 
+				1, 
+				self->materials_Register, 
+				self->materialExtHandle, 
+				GetOffsetOfMember( *materialExt, density ) );
+		Memory_Free( name );
+
+		name = Stg_Object_AppendSuffix( materialSwarms[materialSwarm_I], "Alpha" );
+		self->alphaSwarmVariables[materialSwarm_I] = MaterialSwarmVariable_New( 
+				name, 
+				materialSwarms[materialSwarm_I], 
+				1, 
+				self->materials_Register, 
+				self->materialExtHandle, 
+				GetOffsetOfMember( *materialExt, alpha ) );
+		Memory_Free( name );
+	
+		/* Build new Swarm Variables */
+		Stg_Component_Build( self->densitySwarmVariables[materialSwarm_I], data, False );
+		Stg_Component_Build( self->alphaSwarmVariables[materialSwarm_I],   data, False );
+	}
+
+
+}
+
+void _StressBC_Initialise( void* forceTerm, void* data ) {
+	StressBC*             self             = (StressBC*)forceTerm;
+	Index                          i;
+
+	_ForceTerm_Initialise( self, data );
+
+	for ( i = 0; i < self->materialSwarmCount; ++i ) {
+		Stg_Component_Initialise( self->densitySwarmVariables[i], data, False );
+		Stg_Component_Initialise( self->alphaSwarmVariables[i],   data, False );
+	}
+}
+
+void _StressBC_Execute( void* forceTerm, void* data ) {
+	_ForceTerm_Execute( forceTerm, data );
+}
+
+void _StressBC_Destroy( void* forceTerm, void* data ) {
+	_ForceTerm_Destroy( forceTerm, data );
+}
+
+
+void _StressBC_AssembleElement( void* forceTerm, ForceVector* forceVector, Element_LocalIndex lElement_I, double* elForceVec ) {
+	StressBC*               self               = (StressBC*) forceTerm;
+	IntegrationPoint*                particle;
+	StressBC_MaterialExt*   materialExt;
+	Particle_InCellIndex             cParticle_I;
+	Particle_InCellIndex             cellParticleCount;
+	Element_NodeIndex                elementNodeCount;
+	Dimension_Index                  dim                = forceVector->dim;
+	IntegrationPointsSwarm*          swarm              = (IntegrationPointsSwarm*)self->integrationSwarm;
+	FiniteElement_Mesh*              mesh               = forceVector->feVariable->feMesh;
+	Node_ElementLocalIndex           eNode_I;
+	Cell_Index                       cell_I;
+	ElementType*                     elementType;
+	Dof_Index                        nodeDofCount;
+	double                           force;
+	double                           detJac             = 0.0;
+	double                           factor;
+	double                           Ni[8];
+	double*                          xi;
+	Material*                        material;
+	MaterialPoint*                   materialparticle;
+	MaterialPointsSwarm*             materialSwarm;
+
+	double totalWeight = 0.0;
+	double adjustFactor = 0.0;
+
+	elementType       = FeMesh_ElementTypeAt( mesh, lElement_I );
+	elementNodeCount  = elementType->nodeCount;
+	nodeDofCount      = dim;
+	cell_I            = CellLayout_MapElementIdToCellId( swarm->cellLayout, lElement_I );
+	cellParticleCount = swarm->cellParticleCountTbl[cell_I];
+
+	/* adjust & adjustFactor -- 20060411 Alan
+	 *
+	 * The adjust decides whether an adjustFactor should be applied to the resulting factor.
+	 * If on, the total weight of the particles in the cell are scaled to the cell local volume.
+	 *
+	 * This is designed to be used when integrating with swarms which do not cover the whole domain
+	 * (ie - I used it to do dave.m's test of 1 swarm for blob, 1 swarm for background)
+	 */ 
+	if ( self->adjust ) {
+		for( cParticle_I = 0 ; cParticle_I < cellParticleCount ; cParticle_I++ ) {
+			particle = (IntegrationPoint*) Swarm_ParticleInCellAt( swarm, cell_I, cParticle_I );
+			totalWeight += particle->weight;
+		}
+		adjustFactor = swarm->weights->cellLocalVolume / totalWeight;
+	}
+	else {
+		adjustFactor = 1.0;
+	}
+			
+	for( cParticle_I = 0 ; cParticle_I < cellParticleCount ; cParticle_I++ ) {
+		particle = (IntegrationPoint*) Swarm_ParticleInCellAt( swarm, cell_I, cParticle_I );
+		xi       = particle->xi;
+
+		detJac = ElementType_JacobianDeterminant( elementType, mesh, lElement_I, xi, dim );
+		ElementType_EvaluateShapeFunctionsAt( elementType, xi, Ni );
+
+		/* Get parameters */
+		material = IntegrationPointsSwarm_GetMaterialOn( (IntegrationPointsSwarm*) swarm, particle );
+                materialparticle = OneToOneMapper_GetMaterialPoint( swarm->mapper, particle, &materialSwarm );
+
+		/* Calculate Force */
+		force = StressBC_CalcForce( self, (Swarm*)swarm, lElement_I, materialparticle );
+		factor = detJac * particle->weight * adjustFactor * force;
+
+		/* Apply force in verticle direction */
+		for( eNode_I = 0 ; eNode_I < elementNodeCount; eNode_I++ ) { 		
+			elForceVec[ eNode_I * nodeDofCount + J_AXIS ] += factor * Ni[ eNode_I ] ;
+		}
+	}
+	
+}
+
+/* The default implementation is for the force to be constant. */
+double _StressBC_CalcForce( void* forceTerm, Swarm* swarm, Element_DomainIndex dElement_I, void* particle ) {
+	StressBC*               self               = (StressBC*) forceTerm;
+        double *coord;
+
+        coord=((MaterialPoint*)particle)->coord;
+
+        if(coord[0]>0.4 && coord[0]<0.6 && coord[1]<0.1)
+          return self->force;
+	return 0.0;
+}

Added: long/3D/Gale/trunk/src/PICellerator/Utils/src/StressBC.h
===================================================================
--- long/3D/Gale/trunk/src/PICellerator/Utils/src/StressBC.h	2006-11-28 22:00:14 UTC (rev 5365)
+++ long/3D/Gale/trunk/src/PICellerator/Utils/src/StressBC.h	2006-11-28 22:00:16 UTC (rev 5366)
@@ -0,0 +1,130 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003-2006, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street,
+**	Melbourne, 3053, Australia.
+** Copyright (c) 2005-2006, Monash Cluster Computing, Building 28, Monash University Clayton Campus,
+**	Victoria, 3800, Australia
+**
+** Primary Contributing Organisations:
+**	Victorian Partnership for Advanced Computing Ltd, Computational Software Development - http://csd.vpac.org
+**	Australian Computational Earth Systems Simulator - http://www.access.edu.au
+**	Monash Cluster Computing - http://www.mcc.monash.edu.au
+**
+** Contributors:
+**	Robert Turnbull, Research Assistant, Monash University. (robert.turnbull at sci.monash.edu.au)
+**	Patrick D. Sunter, Software Engineer, VPAC. (patrick at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	David May, PhD Student, Monash University (david.may at sci.monash.edu.au)
+**	Vincent Lemiale, Postdoctoral Fellow, Monash University. (vincent.lemiale at sci.monash.edu.au)
+**	Julian Giordani, Research Assistant, Monash University. (julian.giordani at sci.monash.edu.au)
+**	Louis Moresi, Associate Professor, Monash University. (louis.moresi at sci.monash.edu.au)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**	David Stegman, Postdoctoral Fellow, Monash University. (david.stegman at sci.monash.edu.au)
+**	Wendy Sharples, PhD Student, Monash University (wendy.sharples at sci.monash.edu.au)
+**
+**  Modified 2006 by Walter Landry (California Institute of Technology)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+
+
+#ifndef __Gale_Utils_StressBC_h__
+#define __Gale_Utils_StressBC_h__
+
+	typedef double (StressBC_CalcForceFunction) (
+				void* forceTerm, 
+				Swarm* swarm, 
+				Element_LocalIndex lElement_I, 
+				void* particle );
+
+	/** Textual name of this class */
+	extern const Type StressBC_Type;
+
+	typedef struct {
+		double alpha;
+		double density;
+	} StressBC_MaterialExt;
+
+	/** StressBC class contents */
+	#define __StressBC \
+		/* General info */ \
+		__ForceTerm \
+		\
+		/* Virtual info */ \
+		StressBC_CalcForceFunction*              _calcForce;                          \
+		\
+		/* StressBC info */ \
+		double                                              force;                           \
+		Bool                                                adjust;                            \
+		Materials_Register*                                 materials_Register;                \
+		ExtensionInfo_Index                                 materialExtHandle;                 \
+		MaterialSwarmVariable**                             densitySwarmVariables;             \
+		MaterialSwarmVariable**                             alphaSwarmVariables;               \
+		Index                                               materialSwarmCount;
+
+	struct StressBC { __StressBC };
+
+	StressBC* StressBC_New( 
+		Name                                                name,
+		ForceVector*                                        forceVector,
+		Swarm*                                              integrationSwarm,
+		double                                              force,
+		Bool                                                adjust,
+		Materials_Register*                                 materials_Register );
+
+	StressBC* _StressBC_New( 
+		SizeT                                               sizeOfSelf,  
+		Type                                                type,
+		Stg_Class_DeleteFunction*                           _delete,
+		Stg_Class_PrintFunction*                            _print,
+		Stg_Class_CopyFunction*                             _copy, 
+		Stg_Component_DefaultConstructorFunction*           _defaultConstructor,
+		Stg_Component_ConstructFunction*                    _construct,
+		Stg_Component_BuildFunction*                        _build,
+		Stg_Component_InitialiseFunction*                   _initialise,
+		Stg_Component_ExecuteFunction*                      _execute,
+		Stg_Component_DestroyFunction*                      _destroy,
+		ForceTerm_AssembleElementFunction*                  _assembleElement,		
+		StressBC_CalcForceFunction*              _calcForce,
+		Name                                                name );
+	
+	void StressBC_InitAll( 
+		void*                                               forceTerm,
+		ForceVector*                                        forceVector,
+		Swarm*                                              integrationSwarm,
+		double                                              force,
+		Bool                                                adjust,
+		Materials_Register*                                 materials_Register );
+
+	void _StressBC_Delete( void* forceTerm );
+	void _StressBC_Print( void* forceTerm, Stream* stream );
+
+	void* _StressBC_DefaultNew( Name name ) ;
+void _StressBC_Construct( void* forceTerm, Stg_ComponentFactory* cf, void* data ) ;
+	void _StressBC_Build( void* forceTerm, void* data ) ;
+	void _StressBC_Initialise( void* forceTerm, void* data ) ;
+	void _StressBC_Execute( void* forceTerm, void* data ) ;
+	void _StressBC_Destroy( void* forceTerm, void* data ) ;
+
+	void _StressBC_AssembleElement( void* forceTerm, ForceVector* forceVector, Element_LocalIndex lElement_I, double* elForceVec ) ;
+	double _StressBC_CalcForce( void* forceTerm, Swarm* swarm, Element_LocalIndex lElement_I, void* particle ) ;
+
+	#define StressBC_CalcForce( forceTerm, swarm, lElement_I, particle )\
+		(( (StressBC*) forceTerm )->_calcForce( forceTerm, swarm, lElement_I, particle ) )
+
+#endif

Added: long/3D/Gale/trunk/src/PICellerator/Utils/src/StressBC.meta
===================================================================
--- long/3D/Gale/trunk/src/PICellerator/Utils/src/StressBC.meta	2006-11-28 22:00:14 UTC (rev 5365)
+++ long/3D/Gale/trunk/src/PICellerator/Utils/src/StressBC.meta	2006-11-28 22:00:16 UTC (rev 5366)
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">StressBC</param>
+<param name="Organisation">VPAC and MCC</param>
+<param name="Project">Gale</param>
+<param name="Location">./Gale/Utils/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/PICellerator/WebHome</param>
+<param name="Copyright">Copyright (C) 2005 VPAC and Monash Cluster Computing.</param>
+<param name="License">https://csd.vpac.org/twiki/bin/view/Stgermain/SoftwareLicense http://www.opensource.org/licenses/bsd-license.php</param>
+<param name="Parent">ForceTerm</param>
+<param name="Description">This adds a stress boundary condition.</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">force</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">This corresponds to the $g$ in the equation above.</param>
+	</struct>
+
+</list>
+
+<!-- Add an exmaple XML if possible -->
+<param name="Example">
+		<struct name="buoyancyForceTerm">
+			<param name="Type">StressBC</param>
+			<param name="ForceVector">mom_force</param>
+			<param name="Swarm">materialPoints</param>
+			<param name="force">1.0</param>
+		</struct>
+</param>
+
+</StGermainData>

Modified: long/3D/Gale/trunk/src/PICellerator/Utils/src/Utils.h
===================================================================
--- long/3D/Gale/trunk/src/PICellerator/Utils/src/Utils.h	2006-11-28 22:00:14 UTC (rev 5365)
+++ long/3D/Gale/trunk/src/PICellerator/Utils/src/Utils.h	2006-11-28 22:00:16 UTC (rev 5366)
@@ -46,6 +46,7 @@
 
 	#include "types.h"
 	#include "BuoyancyForceTerm.h"
+	#include "StressBC.h"
 	#include "MaterialSwarmVariable.h"
 
 	#include "Init.h"

Modified: long/3D/Gale/trunk/src/PICellerator/Utils/src/types.h
===================================================================
--- long/3D/Gale/trunk/src/PICellerator/Utils/src/types.h	2006-11-28 22:00:14 UTC (rev 5365)
+++ long/3D/Gale/trunk/src/PICellerator/Utils/src/types.h	2006-11-28 22:00:16 UTC (rev 5366)
@@ -55,6 +55,7 @@
 #define __PICellerator_Utils_types_h__
 	
 	typedef struct BuoyancyForceTerm                BuoyancyForceTerm;
+	typedef struct StressBC                         StressBC;
 	typedef struct MaterialSwarmVariable            MaterialSwarmVariable;
 
 #endif 



More information about the cig-commits mailing list