76 return mode == _3dMat || mode == _PlaneStrain;
86 if ( result !=
IRRT_OK )
return result;
88 if ( result !=
IRRT_OK )
return result;
121 return princStress.
at(isurf) - this->
sigT;
123 double volumetricStress;
124 double DPYieldStressInShear =
tau0 +
H *strainSpaceHardeningVariables.
at(4);
130 return 3. *
alpha * volumetricStress + sqrt(JTwo) - DPYieldStressInShear;
147 answer.
at(1) = t.
at(1, isurf) * t.
at(1, isurf);
148 answer.
at(2) = t.
at(2, isurf) * t.
at(2, isurf);
149 answer.
at(3) = t.
at(3, isurf) * t.
at(3, isurf);
150 answer.
at(4) = t.
at(2, isurf) * t.
at(3, isurf);
151 answer.
at(5) = t.
at(1, isurf) * t.
at(3, isurf);
152 answer.
at(6) = t.
at(1, isurf) * t.
at(2, isurf);
160 answer.
at(1) =
alphaPsi + deviatoricStress.
at(1) / 2. / sqrtJTwo;
161 answer.
at(2) =
alphaPsi + deviatoricStress.
at(2) / 2. / sqrtJTwo;
162 answer.
at(3) =
alphaPsi + deviatoricStress.
at(3) / 2. / sqrtJTwo;
163 answer.
at(4) = stressVector.
at(4) / sqrtJTwo;
164 answer.
at(5) = stressVector.
at(5) / sqrtJTwo;
165 answer.
at(6) = stressVector.
at(6) / sqrtJTwo;
176 gradientMatrix.
resize(6, 6);
179 gradientMatrix.
resize(4, 4);
185 gradientMatrix.
zero();
190 double JTwo, sqrtJTwo;
194 sqrtJTwo = sqrt(JTwo);
197 for (
int i = 1; i <= 6; i++ ) {
198 for (
int j = i; j <= 6; j++ ) {
199 if ( ( i == 1 && j == 1 ) || ( i == 2 && j == 2 ) || ( i == 3 && j == 3 ) ) {
201 }
else if ( ( i == 4 && j == 4 ) || ( i == 5 && j == 5 ) || ( i == 6 && j == 6 ) ) {
203 }
else if ( i <= 3 && j <= 3 ) {
208 gradientMatrix.
at(i, j) = 0.5 / JTwo * ( c1 * sqrtJTwo - deviatoricStress.
at(i) * deviatoricStress.
at(j) / 2. / sqrtJTwo );
213 for (
int i = 1; i <= 4; i++ ) {
214 for (
int j = i; j <= 4; j++ ) {
215 if ( ( i == 1 && j == 1 ) || ( i == 2 && j == 2 ) || ( i == 3 && j == 3 ) ) {
217 }
else if ( ( i == 4 && j == 4 ) ) {
219 }
else if ( i <= 3 && j <= 3 ) {
224 gradientMatrix.
at(i, j) = 0.5 / JTwo * ( c1 * sqrtJTwo - deviatoricStress.
at(i) * deviatoricStress.
at(j) / 2. / sqrtJTwo );
249 if ( dlambda.
at(4) > 0. ) {
261 answer.
at(1) = this->
H;
270 gradientMatrix.
resize(size, 1);
271 gradientMatrix.
zero();
286 answer.
resize(1, actSurf);
289 if ( ( indx = activeConditionMap.
at(4) ) ) {
290 if ( dlambda.
at(4) > 0. ) {
301 if ( type == IST_DamageScalar ) {
307 }
else if ( type == IST_DamageTensor ) {
static int giveSizeOfVoigtSymVector(MaterialMode mmode)
Returns the size of symmetric part of a reduced stress/strain vector according to given mode...
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
static void computePrincipalValues(FloatArray &answer, const FloatArray &s, stressStrainPrincMode mode)
Common functions for convenience.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
#define _IFT_DruckerPragerCutMat_omegaCrit
Critical damage.
virtual int giveSizeOfReducedHardeningVarsVector(GaussPoint *) const
virtual ~DruckerPragerCutMat()
LinearElasticMaterial * linearElasticMaterial
Reference to bulk (undamaged) material.
For computing principal stresses.
double tau0
Initial yield stress under pure shear.
LinearElasticMaterial * giveLinearElasticMaterial()
Returns a reference to the basic elastic material.
#define _IFT_DruckerPragerCutMat_alpha
Friction coefficient (DP model)
int nsurf
Number of yield surfaces.
double & at(int i)
Coefficient access function.
virtual void computeReducedSKGradientMatrix(FloatMatrix &gradientMatrix, int isurf, GaussPoint *gp, const FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVariables)
computes mixed derivative of load function with respect to stress and hardening variables ...
virtual void computeStressGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &stressVector, const FloatArray &stressSpaceHardeningVars)
Computes the stress gradient of yield/loading function (df/d_sigma).
#define _IFT_DruckerPragerCutMat_yieldTol
Tolerance of the error in the yield criterion.
virtual void computeReducedElasticModuli(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep)
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void computeKGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVariables)
Computes the derivative of yield/loading function with respect to kappa_1, kappa_2 etc...
#define _IFT_DruckerPragerCutMat_tau0
Initial yield stress under pure shear (DP model)
enum oofem::MPlasticMaterial2::plastType plType
virtual void computeReducedHardeningVarsSigmaGradient(FloatMatrix &answer, GaussPoint *gp, const IntArray &activeConditionMap, const FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVars, const FloatArray &dlambda)
computes dk(i)/dsig(j) gradient matrix
MaterialMode
Type representing material mode of integration point.
DruckerPragerCutMat(int n, Domain *d)
virtual void computeReducedSSGradientMatrix(FloatMatrix &gradientMatrix, int isurf, GaussPoint *gp, const FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVariables)
Computes second derivative of yield/loading function with respect to stress.
This class implements associated Material Status to MPlasticMaterial.
static void computePrincipalValDir(FloatArray &answer, FloatMatrix &dir, const FloatArray &s, stressStrainPrincMode mode)
Computes principal values and directions of stress or strain vector.
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
functType
Type that allows to distinguish between yield function and loading function.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
double a
Parameter for damage computation from cumulative plastic strain.
virtual void computeStrainHardeningVarsIncrement(FloatArray &answer, GaussPoint *gp, const FloatArray &stress, const FloatArray &dlambda, const FloatArray &dplasticStrain, const IntArray &activeConditionMap)
Compute dot(kappa_1), dot(kappa_2) etc.
const char * __MaterialModeToString(MaterialMode _value)
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
double yieldTol
Tolerance of the error in the yield criterion.
#define _IFT_DruckerPragerCutMat_a
Exponent in damage law.
#define _IFT_DruckerPragerCutMat_sigT
Uniaxial tensile strength for cut-off, (Rankine plasticity model)
double omegaCrit
Maximum damage value.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
This class implements an isotropic linear elastic material in a finite element problem.
enum oofem::MPlasticMaterial2::ReturnMappingAlgoType rmType
double at(int i, int j) const
Coefficient access function.
Abstract base class representing a material status information.
virtual void computeReducedHardeningVarsLamGradient(FloatMatrix &answer, GaussPoint *gp, int actSurf, const IntArray &activeConditionMap, const FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVars, const FloatArray &dlambda)
computes dKappa_i/dLambda_j
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
double H
Hardening modulus.
IRResultType
Type defining the return values of InputRecord reading operations.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
static double computeSecondStressInvariant(const FloatArray &s)
#define _IFT_DruckerPragerCutMat_h
Hardening modulus (DP model)
void zero()
Zeroes all coefficients of receiver.
double alpha
Friction coefficient.
static double computeDeviatoricVolumetricSplit(FloatArray &dev, const FloatArray &s)
Computes split of receiver into deviatoric and volumetric part.
double alphaPsi
Dilatancy coefficient (allowing non-associated plasticity).
double G
Elastic shear modulus.
void zero()
Zeroes all coefficient of receiver.
Domain * giveDomain() const
#define _IFT_DruckerPragerCutMat_alphapsi
REGISTER_Material(DummyMaterial)
#define _IFT_DruckerPragerCutMat_newtonIter
Maximum number of iterations in lambda search.
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
the oofem namespace is to define a context or scope in which all oofem names are defined.
void symmetrized()
Initializes the lower half of the receiver according to the upper half.
virtual double computeYieldValueAt(GaussPoint *gp, int isurf, const FloatArray &stressVector, const FloatArray &strainSpaceHardeningVariables)
Computes the value of yield function.
int newtonIter
Maximum number of iterations in lambda search.
double sigT
Uniaxial tensile strength for cut-off.
Class representing integration point in finite element program.
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
Class representing solution step.
This class represents a base class for non-associated multisurface plasticity.
double K
Elastic bulk modulus.
void resize(int s)
Resizes receiver towards requested size.