[cig-commits] commit: Have both minimumViscosity and maxStrainRate for DruckerPrager

Mercurial hg at geodynamics.org
Sun Jul 18 12:28:07 PDT 2010


changeset:   852:652bd7f1a08c
tag:         tip
user:        Walter Landry <wlandry at caltech.edu>
date:        Sun Jul 18 12:25:43 2010 -0700
files:       Rheology/src/DruckerPrager.c Rheology/src/DruckerPrager.h
description:
Have both minimumViscosity and maxStrainRate for DruckerPrager


diff -r 377d6be0734f -r 652bd7f1a08c Rheology/src/DruckerPrager.c
--- a/Rheology/src/DruckerPrager.c	Mon Jul 12 15:53:42 2010 -0700
+++ b/Rheology/src/DruckerPrager.c	Sun Jul 18 12:25:43 2010 -0700
@@ -78,6 +78,7 @@ DruckerPrager* DruckerPrager_New(
 	SwarmVariable*        swarmPressure,
 	double                minimumYieldStress,
 	double                minimumViscosity,
+	double                maxStrainRate,
 	double                frictionCoefficient,
 	double                frictionCoefficientAfterSoftening,
         double                boundaryCohesion,
@@ -113,6 +114,7 @@ DruckerPrager* DruckerPrager_New(
                         boundaryBack,
                         minimumYieldStress,
                         minimumViscosity,
+                        maxStrainRate,
                         hydrostaticTerm );
    self->isConstructed = True;
    return self;
@@ -151,6 +153,7 @@ void _DruckerPrager_Init(
                 Bool                      boundaryBack,
                 double                    minimumYieldStress,
                 double                    minimumViscosity,
+                double                    maxStrainRate,
                 HydrostaticTerm*          hydrostaticTerm )
 {
 	DruckerPrager_Particle*   particleExt;
@@ -163,6 +166,7 @@ void _DruckerPrager_Init(
 	self->frictionCoefficient = frictionCoefficient;
 	self->minimumYieldStress  = minimumYieldStress;
 	self->minimumViscosity    = minimumViscosity;
+	self->maxStrainRate       = maxStrainRate;
 	self->swarmPressure       = swarmPressure;
 	
 	/* Strain softening of Cohesion and friction - (linear
@@ -182,6 +186,7 @@ void _DruckerPrager_Init(
 
 	self->minimumYieldStress = minimumYieldStress;
 	self->minimumViscosity = minimumViscosity;
+	self->maxStrainRate = maxStrainRate;
         self->hydrostaticTerm=hydrostaticTerm;
 
 	/* Update Drawing Parameters */
@@ -265,6 +270,7 @@ void _DruckerPrager_AssignFromXML( void*
                         Stg_ComponentFactory_GetBool(  cf,  self->name, (Dictionary_Entry_Key)"boundaryBack", False ),
 			Stg_ComponentFactory_GetDouble( cf, self->name, (Dictionary_Entry_Key)"minimumYieldStress", 0.0 ),
 			Stg_ComponentFactory_GetDouble( cf, self->name, (Dictionary_Entry_Key)"minimumViscosity", 0.0),
+			Stg_ComponentFactory_GetDouble( cf, self->name, (Dictionary_Entry_Key)"maxStrainRate", 0.0),
                         Stg_ComponentFactory_ConstructByKey( cf, self->name, 
                                                              (Dictionary_Entry_Key)"HydrostaticTerm", HydrostaticTerm, False, data ) );
 }
@@ -352,6 +358,7 @@ double _DruckerPrager_GetYieldCriterion(
 	double                            frictionCoefficientAfterSoftening;
 	double                            minimumYieldStress;
 	double                            minimumViscosity;
+	double                            maxStrainRate;
 	double                            effectiveCohesion;
 	double                            effectiveFrictionCoefficient;
 	double                            frictionalStrength;
@@ -372,6 +379,7 @@ double _DruckerPrager_GetYieldCriterion(
 	frictionCoefficientAfterSoftening  = self->frictionCoefficientAfterSoftening;
 	minimumYieldStress                 = self->minimumYieldStress;
 	minimumViscosity                   = self->minimumViscosity;
+	maxStrainRate                      = self->maxStrainRate;
 	
 	particleExt = ExtensionManager_Get( materialPointsSwarm->particleExtensionMgr, materialPoint, self->particleExtHandle );
 
@@ -481,8 +489,18 @@ void _DruckerPrager_HasYielded(
 		double                           yieldIndicator )
 {
    DruckerPrager* self = (DruckerPrager*)rheology;
+   double strainRate=self->strainRateSecondInvariant;
    double old_viscosity = ConstitutiveMatrix_GetIsotropicViscosity( constitutiveMatrix );
-   double viscosity = yieldCriterion/(2*self->strainRateSecondInvariant);
+   double viscosity;
+
+   if(self->maxStrainRate>0 && strainRate>self->maxStrainRate)
+     {
+       viscosity=yieldCriterion/(2*self->maxStrainRate);
+     }
+   else
+     {
+       viscosity = yieldCriterion/(2*strainRate);
+     }
 
    if(viscosity<self->minimumViscosity)
      viscosity=self->minimumViscosity;
@@ -490,9 +508,7 @@ void _DruckerPrager_HasYielded(
    ConstitutiveMatrix_SetIsotropicViscosity( constitutiveMatrix, viscosity );
 
    if( constitutiveMatrix->sle && constitutiveMatrix->sle->nlFormJacobian ) {
-
       constitutiveMatrix->derivs[8] += old_viscosity * self->curFrictionCoef / yieldIndicator;
-
    }
 
 }
diff -r 377d6be0734f -r 652bd7f1a08c Rheology/src/DruckerPrager.h
--- a/Rheology/src/DruckerPrager.h	Mon Jul 12 15:53:42 2010 -0700
+++ b/Rheology/src/DruckerPrager.h	Sun Jul 18 12:25:43 2010 -0700
@@ -72,6 +72,7 @@
       SwarmVariable*                                      swarmPressure;                         \
       double                                              minimumYieldStress;                    \
       double                                              minimumViscosity;                      \
+      double                                              maxStrainRate;                      \
       double                                              frictionCoefficient;                   \
       double                                              frictionCoefficientAfterSoftening;     \
 		double                                              boundaryCohesion;                              \
@@ -105,6 +106,7 @@
       SwarmVariable*        swarmPressure,
       double                minimumYieldStress,
       double                minimumViscosity,
+      double                maxStrainRate,
       double                frictionCoefficient,
       double                frictionCoefficientAfterSoftening,
       double                                              boundaryCohesion,
@@ -159,6 +161,7 @@
                 Bool                      boundaryBack,
                 double                    minimumYieldStress,
                 double                    minimumViscosity,
+                double                    maxStrainRate,
                 HydrostaticTerm*          hydrostaticTerm );
 
 



More information about the CIG-COMMITS mailing list