[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