[cig-commits] commit: mergine changes in v1.2.x into dev

Mercurial hg at geodynamics.org
Mon Nov 24 11:35:42 PST 2008


changeset:   133:655079d64226
tag:         tip
parent:      127:f1d86bddcb11
parent:      132:a7c1a91e1ea8
user:        Julian Giordani <julian.giordani at sci.monash.edu.au>
date:        Wed Nov 05 14:52:49 2008 +1100
files:       MaterialPoints/src/ParticleFeVariable.c
description:
mergine changes in v1.2.x into dev


diff -r f1d86bddcb11 -r 655079d64226 MaterialPoints/src/IntegrationPointMapper.meta
--- a/MaterialPoints/src/IntegrationPointMapper.meta	Fri Oct 31 14:08:51 2008 +1100
+++ b/MaterialPoints/src/IntegrationPointMapper.meta	Wed Nov 05 14:52:49 2008 +1100
@@ -13,10 +13,7 @@
 <param name="Parent">Stg_Component</param>
 <param name="Reference">...</param>
 <param name="Summary">...</param>
-<param name="Description">...</param>
-
-<!--Now the interesting stuff-->
-
+<param name="Description">IntegrationPointMapper is an abstract class which enables a mapping between PIC integration points (used for assembly of numerical objects) and material points (advecting particle which store the constitutive information of the fluid). This abstract class defines basic data structures and methods which all mappers have in common, thus this is a handy API for developers.</param>
 
 <list name="Params">
 
@@ -27,12 +24,11 @@
 		<param name="Essential">True</param>
 		<param name="Name">IntegrationPointsSwarm</param>
 		<param name="Type">IntegrationPointsSwarm</param>
-		<param name="Description">...</param>
+		<param name="Description">The integration point swarm, which will me mapped.</param>
 	</struct>
 
 
 </list>
-<!-- Add an exmaple XML if possible -->
-<param name="Example">...</param>
+<param name="Example">N/A</param>
 
 </StGermainData>
diff -r f1d86bddcb11 -r 655079d64226 MaterialPoints/src/IntegrationPointsSwarm.meta
--- a/MaterialPoints/src/IntegrationPointsSwarm.meta	Fri Oct 31 14:08:51 2008 +1100
+++ b/MaterialPoints/src/IntegrationPointsSwarm.meta	Wed Nov 05 14:52:49 2008 +1100
@@ -15,8 +15,6 @@
 <param name="Summary">...</param>
 <param name="Description">A specific swarm used for integration which is "aware" of the materials used. A mapper relationship links
 it with the physical material swarm(s) of which can actually be advected.</param>
-
-<!--Now the interesting stuff-->
 
 <list name="Params">
 	<struct>
@@ -56,6 +54,18 @@ it with the physical material swarm(s) o
 	</struct>
 
 </list>
-<param name="Example">...</param>
+<param name="Example">
+<![CDATA[
+	<struct name="picIntegrationPoints">
+		<param name="Type">IntegrationPointsSwarm</param>
+		<param name="CellLayout">elementCellLayout</param>
+		<param name="ParticleLayout">localLayout</param>
+		<param name="FeMesh">elementMesh</param>
+		<param name="WeightsCalculator">weights</param>
+		<param name="TimeIntegrator">timeIntegrator</param>
+		<param name="IntegrationPointMapper">mapper</param>
+	</struct>
+	]]>
+</param>
 
 </StGermainData>
diff -r f1d86bddcb11 -r 655079d64226 MaterialPoints/src/MaterialPointsSwarm.meta
--- a/MaterialPoints/src/MaterialPointsSwarm.meta	Fri Oct 31 14:08:51 2008 +1100
+++ b/MaterialPoints/src/MaterialPointsSwarm.meta	Wed Nov 05 14:52:49 2008 +1100
@@ -14,11 +14,10 @@
 <param name="Reference">...</param>
 <param name="Summary">...</param>
 <param name="Description">Represents a set of points which track materials in the domain. It can be advected during the simulation
-and can be population controlled for load balancing purposes.
+and can be population controlled for load balancing purposes. This component adds 2 variables to a generic swarm point data structure: <br/>
+(1) the global position: called "PositionX", "PositionY", "PositionZ"<br/>
+(2) the material index of the point: called "MaterialIndex".
 </param>
-
-<!--Now the interesting stuff-->
-
 
 <list name="Params">
 </list>
@@ -59,7 +58,26 @@ and can be population controlled for loa
 		spread across the entire domain and will be assigned materials according to the all the materials. </param>
 	</struct>
 </list>
-<!-- Add an exmaple XML if possible -->
-<param name="Example">...</param>
+<param name="Example">
+
+<![CDATA[
+	<struct name="materialSwarm">
+		<param name="Type">MaterialPointsSwarm</param>
+		<param name="CellLayout">elementCellLayout</param>
+		<param name="ParticleLayout">materialSwarmParticleLayout</param>
+		<param name="FeMesh">elementMesh</param>
+		<!-- this list comes from a swarm definition -->
+		<list name="ParticleCommHandlers">
+			<param>pMovementHandler</param>
+			<param>pShadowSync</param>
+		</list>
+
+		<!-- These guys may or may not be created -->
+		<param name="SplittingRoutine">splittingRoutine</param>
+		<param name="RemovalRoutine">removalRoutine</param>
+		<param name="EscapedRoutine">escapedRoutine</param>
+	</struct>
+	]]>
+</param>
 
 </StGermainData>
diff -r f1d86bddcb11 -r 655079d64226 MaterialPoints/src/ParticleFeVariable.c
--- a/MaterialPoints/src/ParticleFeVariable.c	Fri Oct 31 14:08:51 2008 +1100
+++ b/MaterialPoints/src/ParticleFeVariable.c	Wed Nov 05 14:52:49 2008 +1100
@@ -225,13 +225,10 @@ void _ParticleFeVariable_Build( void* ma
 	ParticleFeVariable* self = (ParticleFeVariable*) materialFeVariable;
 	int dataSize;
 
+	ForceTerm_SetAssembleElementFunction( self->assemblyTerm, ParticleFeVariable_AssembleElement );
 #if 0
 	if( self->useDeriv )
-#endif
 	   ForceTerm_SetAssembleElementFunction( self->assemblyTerm, ParticleFeVariable_AssembleElement_Deriv );
-#if 0
-	else
-	   ForceTerm_SetAssembleElementFunction( self->assemblyTerm, ParticleFeVariable_AssembleElement );
 #endif
 	
 	Stg_Component_Build( self->feMesh, data, False );
@@ -322,7 +319,8 @@ void ParticleFeVariable_AssembleElement(
 	Node_Index                 node_I;
 	Dof_Index                  dofCount          = self->fieldComponentCount;
 	Dof_Index                  dof_I;
-	double                     shapeFunc[8];
+	Dof_Index                  dim               = self->dim;
+	double                     shapeFunc[8], detJac;
 	double                     particleValue[9];
 
 	cellParticleCount = swarm->cellParticleCountTbl[ cell_I ];
@@ -334,16 +332,55 @@ void ParticleFeVariable_AssembleElement(
 		self->currentParticleIndex = swarm->cellParticleTbl[cell_I][cParticle_I];
 		ParticleFeVariable_ValueAtParticle( self, swarm, lElement_I, particle, particleValue );
 
+		/* get shape function and detJac */
 		ElementType_EvaluateShapeFunctionsAt( elementType, particle->xi, shapeFunc );
+		detJac = ElementType_JacobianDeterminant( elementType, mesh, lElement_I, particle->xi, dim );
 
 		for ( dof_I = 0 ; dof_I < dofCount ; dof_I++ ) {
 			for ( node_I = 0 ; node_I < elementNodeCount ; node_I++ ) {
-				elForceVector[ node_I * dofCount + dof_I ] += shapeFunc[ node_I ] * particleValue[ dof_I ]; 
+				elForceVector[ node_I * dofCount + dof_I ] += particle->weight * detJac * shapeFunc[ node_I ] * particleValue[ dof_I ]; 
 			}
 		}
 	}
 }
 
+void ParticleFeVariable_AssembleElementShapeFunc( void* _forceTerm, ForceVector* forceVector, Element_LocalIndex lElement_I, double* elForceVector ) {
+	ForceTerm*                 forceTerm         = (ForceTerm*) _forceTerm;
+	ParticleFeVariable*        self              = Stg_CheckType( forceVector->feVariable, ParticleFeVariable );
+	Swarm*                     swarm             = forceTerm->integrationSwarm;
+	FeMesh*        		   mesh              = self->feMesh;
+	Element_NodeIndex          elementNodeCount  = FeMesh_GetElementNodeSize( mesh, lElement_I );
+	ElementType*               elementType       = FeMesh_GetElementType( mesh, lElement_I );
+	Cell_Index                 cell_I            = CellLayout_MapElementIdToCellId( swarm->cellLayout, lElement_I );
+	int                        dim = Mesh_GetDimSize( mesh );
+	Particle_InCellIndex       cellParticleCount;
+	Particle_InCellIndex       cParticle_I;
+	IntegrationPoint*          particle;
+	double                     detJac;
+	double                     shapeFunc[8];
+	Node_Index                 node_I;
+	Dof_Index                  dofCount          = self->fieldComponentCount;
+	Dof_Index                  dof_I;
+
+	cellParticleCount = swarm->cellParticleCountTbl[ cell_I ];
+	
+	for( cParticle_I = 0 ; cParticle_I < cellParticleCount; cParticle_I++ ) {
+		/* Find this particle in the element */
+		particle = (IntegrationPoint*) Swarm_ParticleInCellAt( swarm, cell_I, cParticle_I );
+
+		ElementType_EvaluateShapeFunctionsAt( elementType, particle->xi, shapeFunc );
+		detJac = ElementType_JacobianDeterminant( elementType, mesh, lElement_I, particle->xi, dim );
+
+		for ( dof_I = 0 ; dof_I < dofCount ; dof_I++ ) {
+			for ( node_I = 0 ; node_I < elementNodeCount ; node_I++ ) {
+			   elForceVector[ node_I * dofCount + dof_I ] += particle->weight * detJac * shapeFunc[node_I];
+			}
+		}
+	}
+}
+
+#if 0
+Commented out 31Oct08, by Julian. I don't think this is the way this guy should work
 void ParticleFeVariable_AssembleElement_Deriv( void* _forceTerm, ForceVector* forceVector, Element_LocalIndex lElement_I, double* elForceVector ) 
 {
 	ForceTerm*                 forceTerm         = (ForceTerm*) _forceTerm;
@@ -383,44 +420,6 @@ void ParticleFeVariable_AssembleElement_
 			}
 		}
 	}
-
 	Memory_Free( self->GNx );
 }
-
-void ParticleFeVariable_AssembleElementShapeFunc( void* _forceTerm, ForceVector* forceVector, Element_LocalIndex lElement_I, double* elForceVector ) 
-{
-	ForceTerm*                 forceTerm         = (ForceTerm*) _forceTerm;
-	ParticleFeVariable*        self              = Stg_CheckType( forceVector->feVariable, ParticleFeVariable );
-	Swarm*                     swarm             = forceTerm->integrationSwarm;
-	FeMesh*        		   mesh              = self->feMesh;
-	Element_NodeIndex          elementNodeCount  = FeMesh_GetElementNodeSize( mesh, lElement_I );
-	ElementType*               elementType       = FeMesh_GetElementType( mesh, lElement_I );
-	Cell_Index                 cell_I            = CellLayout_MapElementIdToCellId( swarm->cellLayout, lElement_I );
-	int                        dim = Mesh_GetDimSize( mesh );
-	Particle_InCellIndex       cellParticleCount;
-	Particle_InCellIndex       cParticle_I;
-	IntegrationPoint*          particle;
-	double                     detJac;
-	Node_Index                 node_I;
-	Dof_Index                  dofCount          = self->fieldComponentCount;
-	Dof_Index                  dof_I;
-
-	self->GNx = Memory_Alloc_2DArray( double, dim, elementNodeCount, "GNx" );
-	cellParticleCount = swarm->cellParticleCountTbl[ cell_I ];
-	
-	for( cParticle_I = 0 ; cParticle_I < cellParticleCount; cParticle_I++ ) {
-		/* Find this particle in the element */
-		particle = (IntegrationPoint*) Swarm_ParticleInCellAt( swarm, cell_I, cParticle_I );
-
-		ElementType_ShapeFunctionsGlobalDerivs( elementType, mesh, lElement_I,
-							particle->xi, dim, &detJac, self->GNx );
-
-		for ( dof_I = 0 ; dof_I < dofCount ; dof_I++ ) {
-			for ( node_I = 0 ; node_I < elementNodeCount ; node_I++ ) {
-			   elForceVector[ node_I * dofCount + dof_I ] += particle->weight * detJac;
-			}
-		}
-	}
-
-	Memory_Free( self->GNx );
-}
+#endif
diff -r f1d86bddcb11 -r 655079d64226 MaterialPoints/src/ParticleFeVariable.meta
--- a/MaterialPoints/src/ParticleFeVariable.meta	Fri Oct 31 14:08:51 2008 +1100
+++ b/MaterialPoints/src/ParticleFeVariable.meta	Wed Nov 05 14:52:49 2008 +1100
@@ -13,10 +13,7 @@
 <param name="Parent">FeVariable</param>
 <param name="Reference">...</param>
 <param name="Summary">...</param>
-<param name="Description">...</param>
-
-<!--Now the interesting stuff-->
-
+<param name="Description">An abstract class which maps particle variables onto a mesh through the operator $\hat{\phi} = \frac{\sum_{n}N(\zeta)\phi(\zeta)}{\sum_{n}N(\zeta)}$<br/>, where $\hat{\phi}$ is the new mesh variable, $N$ are shape functions and $\phi$ is a particle value. <br/>This class sets up a domain-wide massMatrix (really a vector), forceVector and solutionVector. The massMatrix is the denominator of the equation, while the foceVector is the numerator. <br>This variable is evaluated at the end of the Solve_EP</param>
 
 <list name="Params">
 
@@ -27,32 +24,23 @@
 		<param name="Essential">True</param>
 		<param name="Name">Swarm</param>
 		<param name="Type">Swarm</param>
-		<param name="Description">...</param>
+		<param name="Description">The swarm to take shape function and particle values from</param>
 	</struct>
-
-<!-- PLEASE, check the above struct information is accurate, in line number 162 of the c file and then remove this comment afterwards -->
 
 	<struct>
 		<param name="Essential">True</param>
 		<param name="Name">Context</param>
 		<param name="Type">FiniteElementContext</param>
-		<param name="Description">...</param>
+		<param name="Description">The context, is required for adding an EP</param>
 	</struct>
-
-<!-- PLEASE, check the above struct information is accurate, in line number 163 of the c file and then remove this comment afterwards -->
 
 	<struct>
 		<param name="Essential">True</param>
 		<param name="Name">Mesh</param>
 		<param name="Type">FeMesh</param>
-		<param name="Description">...</param>
+		<param name="Description">The mesh to map the particle values to.</param>
 	</struct>
-
-<!-- PLEASE, check the above struct information is accurate, in line number 164 of the c file and then remove this comment afterwards -->
-
-
 </list>
-<!-- Add an exmaple XML if possible -->
-<param name="Example">...</param>
+<param name="Example">N/A, see ViscosityField</param>
 
 </StGermainData>
diff -r f1d86bddcb11 -r 655079d64226 Utils/src/MaterialSwarmVariable.meta
--- a/Utils/src/MaterialSwarmVariable.meta	Fri Oct 31 14:08:51 2008 +1100
+++ b/Utils/src/MaterialSwarmVariable.meta	Wed Nov 05 14:52:49 2008 +1100
@@ -21,6 +21,6 @@
 <list name="Dependencies">
 </list>
 <!-- Add an exmaple XML if possible -->
-<param name="Example">...</param>
+<param name="Example">N/A</param>
 
 </StGermainData>
diff -r f1d86bddcb11 -r 655079d64226 Weights/src/ConstantWeights.meta
--- a/Weights/src/ConstantWeights.meta	Fri Oct 31 14:08:51 2008 +1100
+++ b/Weights/src/ConstantWeights.meta	Wed Nov 05 14:52:49 2008 +1100
@@ -13,10 +13,7 @@
 <param name="Parent">WeightsCalculator</param>
 <param name="Reference">...</param>
 <param name="Summary">...</param>
-<param name="Description">...</param>
-
-<!--Now the interesting stuff-->
-
+<param name="Description">This sets the integration weight of each particle, within a cell, to be an equal share of the cell's weight.</param>
 
 <list name="Params">
 
@@ -25,7 +22,6 @@
 <list name="Dependencies">
 
 </list>
-<!-- Add an exmaple XML if possible -->
-<param name="Example">...</param>
+<param name="Example">N/A</param>
 
 </StGermainData>
diff -r f1d86bddcb11 -r 655079d64226 Weights/src/IterativeWeights.meta
--- a/Weights/src/IterativeWeights.meta	Fri Oct 31 14:08:51 2008 +1100
+++ b/Weights/src/IterativeWeights.meta	Wed Nov 05 14:52:49 2008 +1100
@@ -11,31 +11,29 @@
 <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">ConstantWeights</param>
-<param name="Reference">...</param>
+<param name="Reference">IterativeWeights is an implementation of Frederic Dufour's weights routine from Ellipsis which is described
+ * in his PhD Thesis Section 2.6.1 pp. 63-66</param>
 <param name="Summary">...</param>
-<param name="Description">...</param>
-
-<!--Now the interesting stuff-->
-
+<param name="Description">This performs Dufour's iterative weights calculation over the particles in a cell. See Reference for details</param>
 
 <list name="Params">
 	<struct>
 		<param name="Name">maxIterations</param>
 		<param name="Type">UnsignedInt</param>
 		<param name="Default">10</param>
-		<param name="Description">...</param>
+		<param name="Description">Iterations of algorithm to run over the cell</param>
 	</struct>
 	<struct>
 		<param name="Name">tolerance</param>
 		<param name="Type">Double</param>
 		<param name="Default">0.01</param>
-		<param name="Description">...</param>
+		<param name="Description">Tolerance of constraint error</param>
 	</struct>
 	<struct>
 		<param name="Name">alpha</param>
 		<param name="Type">Double</param>
 		<param name="Default">0.8</param>
-		<param name="Description">...</param>
+		<param name="Description">Weight adjustment factor</param>
 	</struct>
 
 </list>
@@ -45,14 +43,19 @@
 		<param name="Essential">No</param>
 		<param name="Name">InitialWeights</param>
 		<param name="Type">WeightsCalculator</param>
-		<param name="Description">...</param>
+		<param name="Description">An optional initial weighting for the algorithm</param>
 	</struct>
 
-<!-- PLEASE, check the above struct information is accurate, in line number 173 of the c file and then remove this comment afterwards -->
-
 
 </list>
-<!-- Add an exmaple XML if possible -->
-<param name="Example">...</param>
+<param name="Example">
+<![CDATA[
+	<struct name="weights">
+			<param name="Type">IterativeWeights</param>
+			<param name="maxIterations">100</param>
+			<param name="tolerance">0.001</param>
+		</struct>
+]]>
+</param>
 
 </StGermainData>



More information about the CIG-COMMITS mailing list