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

walter at geodynamics.org walter at geodynamics.org
Wed Oct 11 13:54:00 PDT 2006


Author: walter
Date: 2006-10-11 13:53:59 -0700 (Wed, 11 Oct 2006)
New Revision: 4926

Modified:
   long/3D/Gale/trunk/src/Underworld/
   long/3D/Gale/trunk/src/Underworld/Rheology/src/DruckerPrager.c
   long/3D/Gale/trunk/src/Underworld/Rheology/src/DruckerPrager.h
Log:
 r586 at earth:  boo | 2006-10-11 13:52:08 -0700
  r548 at earth (orig r325):  VincentLemiale | 2006-09-05 23:46:54 -0700
   Adding tensileFailure flag (true/false) which is an indicator of 'mode I' failure mode. This mode (extension) should be avoided when using this model.
   
  
 



Property changes on: long/3D/Gale/trunk/src/Underworld
___________________________________________________________________
Name: svk:merge
   - 9570c393-cf10-0410-b476-9a651db1e55a:/cig:585
c24a034b-ab11-0410-afe6-cfe714e2959e:/trunk:324
   + 9570c393-cf10-0410-b476-9a651db1e55a:/cig:586
c24a034b-ab11-0410-afe6-cfe714e2959e:/trunk:325

Modified: long/3D/Gale/trunk/src/Underworld/Rheology/src/DruckerPrager.c
===================================================================
--- long/3D/Gale/trunk/src/Underworld/Rheology/src/DruckerPrager.c	2006-10-11 20:53:57 UTC (rev 4925)
+++ long/3D/Gale/trunk/src/Underworld/Rheology/src/DruckerPrager.c	2006-10-11 20:53:59 UTC (rev 4926)
@@ -138,23 +138,30 @@
 	
 	/* Setup Variables for Visualisation */
 	self->brightness = Swarm_NewScalarVariable(
-			materialPointsSwarm,
-	"DruckerPragerBrightness",
-	(ArithPointer) &particleExt->brightness - (ArithPointer) &materialPoint,
-	Variable_DataType_Float );
+		materialPointsSwarm,
+		"DruckerPragerBrightness",
+		(ArithPointer) &particleExt->brightness - (ArithPointer) &materialPoint,
+		Variable_DataType_Float );
 	
 	self->opacity = Swarm_NewScalarVariable(
-			materialPointsSwarm,
-	"DruckerPragerOpacity",
-	(ArithPointer) &particleExt->opacity - (ArithPointer) &materialPoint,
-	Variable_DataType_Float );
+		materialPointsSwarm,
+		"DruckerPragerOpacity",
+		(ArithPointer) &particleExt->opacity - (ArithPointer) &materialPoint,
+		Variable_DataType_Float );
 	
 	self->diameter = Swarm_NewScalarVariable(
-			materialPointsSwarm,
-	"DruckerPragerDiameter",
-	(ArithPointer) &particleExt->diameter - (ArithPointer) &materialPoint,
-	Variable_DataType_Float );
+		materialPointsSwarm,
+		"DruckerPragerDiameter",
+		(ArithPointer) &particleExt->diameter - (ArithPointer) &materialPoint,
+		Variable_DataType_Float );
 
+	/* The tensileFailure variable allows to check whether a materialPoint has failed in tensile mode or not */
+	self->tensileFailure = Swarm_NewScalarVariable(
+		materialPointsSwarm,
+		"DruckerPragerTensileFailure",
+		(ArithPointer) &particleExt->tensileFailure - (ArithPointer) &materialPoint,
+		Variable_DataType_Char );
+
 }
 
 void* _DruckerPrager_DefaultNew( Name name ) {
@@ -214,6 +221,7 @@
 	Stg_Component_Build( self->brightness, data, False );
 	Stg_Component_Build( self->opacity, data, False );
 	Stg_Component_Build( self->diameter, data, False );
+	Stg_Component_Build( self->tensileFailure, data, False );
 
 }
 
@@ -231,6 +239,7 @@
 	Stg_Component_Initialise( self->brightness, data, False );
 	Stg_Component_Initialise( self->opacity, data, False );
 	Stg_Component_Initialise( self->diameter, data, False );
+	Stg_Component_Initialise( self->tensileFailure, data, False );
 
 	/* We should only set initial conditions if in regular non-restart mode. If in restart mode, then
 	the particle-based variables will be set correcty when we re-load the Swarm. */
@@ -246,6 +255,7 @@
 			Variable_SetValueFloat( self->diameter->variable,   lParticle_I, 0.0 );
 		
 			Variable_SetValueChar( self->hasYieldedVariable->variable, lParticle_I, False );
+			Variable_SetValueChar( self->tensileFailure->variable,lParticle_I, False );
 		}
 	}	
 }
@@ -275,6 +285,7 @@
 	double                            frictionalStrength;
 	FeVariable*                       pressureField  = self->pressureField;  
 	double                            pressure;
+	DruckerPrager_Particle*           particleExt;
 	
 	/* Get Parameters From Material Extension */
 	cohesion                           = self->cohesion;
@@ -283,6 +294,8 @@
 	frictionCoefficientAfterSoftening  = self->frictionCoefficientAfterSoftening;
 	minimumYieldStress                 = self->minimumYieldStress;
 	
+	particleExt = ExtensionManager_Get( materialPointsSwarm->particleExtensionMgr, materialPoint, self->particleExtHandle );
+
 	FeVariable_InterpolateWithinElement( pressureField, lElement_I, xi, &pressure );
 	
 	/* Strain softening of yield stress - if the strain weakening is not defined then this function returns 
@@ -303,7 +316,9 @@
 	dpCohesion = 6.0 * effectiveCohesion * cos(phi) * oneOverDenominator;
 		
 	frictionalStrength = dpFrictionCoefficient * pressure + dpCohesion ;
-							 
+				
+	particleExt->tensileFailure = (frictionalStrength <= 0.0);
+			 
 	if ( frictionalStrength < minimumYieldStress) 
 		frictionalStrength = minimumYieldStress;
 

Modified: long/3D/Gale/trunk/src/Underworld/Rheology/src/DruckerPrager.h
===================================================================
--- long/3D/Gale/trunk/src/Underworld/Rheology/src/DruckerPrager.h	2006-10-11 20:53:57 UTC (rev 4925)
+++ long/3D/Gale/trunk/src/Underworld/Rheology/src/DruckerPrager.h	2006-10-11 20:53:59 UTC (rev 4926)
@@ -50,9 +50,10 @@
 	extern const Type DruckerPrager_Type;
 
 	typedef struct {
-		float    brightness;
-		float    opacity;
-		float    diameter;
+		float          brightness;
+		float          opacity;
+		float          diameter;
+		Particle_Bool  tensileFailure;
 	}  DruckerPrager_Particle; 
 	
 	/** Rheology class contents - this is defined as a macro so that sub-classes of this class can use this macro at the start of the definition of their struct */
@@ -64,6 +65,7 @@
 		SwarmVariable*                                      brightness;                            \
 		SwarmVariable*                                      opacity;                               \
 		SwarmVariable*                                      diameter;                              \
+		SwarmVariable*                                      tensileFailure;                        \
 		ExtensionInfo_Index                                 particleExtHandle;                     \
 		/* Param passed in */\
 		FeVariable*                                         pressureField;                         \



More information about the cig-commits mailing list