44 #define YIELD_TOL 1.e-4 46 #define PLASTIC_MATERIAL_MAX_ITERATIONS 90 74 return mode == _3dMat ||
77 mode == _PlaneStress ||
104 FloatArray strainVectorR, plasticStrainVectorR;
126 this->
closestPointReturn(fullStressVector, activeConditionMap, gamma, gp, strainVectorR,
127 plasticStrainVectorR, strainSpaceHardeningVariables, tStep);
129 this->
cuttingPlaneReturn(fullStressVector, activeConditionMap, gamma, gp, strainVectorR,
130 plasticStrainVectorR, strainSpaceHardeningVariables, tStep);
147 bool yieldFlag =
false;
148 for (
int i = 1; i <=
nsurf; i++ ) {
149 if ( gamma.
at(i) > 0. ) {
182 FloatArray fullStressSpaceHardeningVars, residualVectorR;
186 FloatMatrix elasticModuli, hardeningModuli, consistentModuli;
187 FloatMatrix elasticModuliInverse, hardeningModuliInverse;
190 std :: vector< FloatArray > yieldGradVec(this->
nsurf), loadGradVec(this->
nsurf), * yieldGradVecPtr, * loadGradVecPtr;
194 int i, j, strSize, totSize;
195 int elastic, restart, actSurf, indx;
196 bool yieldConsistency;
200 yieldGradVecPtr = loadGradVecPtr = & yieldGradVec;
202 yieldGradVecPtr = & yieldGradVec;
203 loadGradVecPtr = & loadGradVec;
217 totSize = strSize + strainSpaceHardeningVariables.
giveSize();
228 elasticStrainVectorR = totalStrain;
229 elasticStrainVectorR.
subtract(plasticStrainVectorR);
240 activeConditionMap.
zero();
241 for ( i = 1; i <= this->
nsurf; i++ ) {
242 yieldValue = this->
computeYieldValueAt(gp, i, fullStressVector, fullStressSpaceHardeningVars);
246 activeConditionMap.
at(i) = actSurf;
258 elasticStrainVectorR = totalStrain;
259 elasticStrainVectorR.
subtract(plasticStrainVectorR);
266 for ( i = 1; i <=
nsurf; i++ ) {
271 for ( i = 1; i <=
nsurf; i++ ) {
279 strainSpaceHardeningVariables, * loadGradVecPtr);
282 yieldConsistency =
true;
283 for ( i = 1; i <=
nsurf; i++ ) {
284 if ( activeConditionMap.
at(i) ) {
285 yieldValue = this->
computeYieldValueAt(gp, i, fullStressVector, fullStressSpaceHardeningVars);
287 yieldConsistency =
false;
293 answer = fullStressVector;
294 printf(
" (%d iterations)", nIterations);
301 hardeningModuliInverse.
beInverseOf(hardeningModuli);
304 hardeningModuliInverse.
clear();
308 hardeningModuliInverse, gamma, activeConditionMap,
309 fullStressVector, fullStressSpaceHardeningVars);
312 gmat.
resize(actSurf, actSurf);
313 for ( i = 1; i <=
nsurf; i++ ) {
314 if ( activeConditionMap.
at(i) ) {
315 yieldValue = this->
computeYieldValueAt(gp, i, fullStressVector, fullStressSpaceHardeningVars);
316 helpVector.
beTProductOf(consistentModuli, ( * yieldGradVecPtr ) [ i - 1 ]);
318 for ( j = 1; j <= this->
nsurf; j++ ) {
319 if ( activeConditionMap.
at(j) ) {
320 gmat.
at(i, j) = ( * loadGradVecPtr ) [ j - 1 ].dotProduct(helpVector);
324 rhs.
at(i) = yieldValue - residualVectorR.
dotProduct(helpVector);
332 for ( i = 1; i <= this->
nsurf; i++ ) {
333 if ( ( indx = activeConditionMap.
at(i) ) ) {
334 dgamma.
at(i) = helpVector.
at(indx);
341 tempGamma.
add(dgamma);
348 for ( i = 1; i <= this->
nsurf; i++ ) {
349 if ( tempGamma.
at(i) < 0.0 ) {
357 activeConditionMap.
zero();
358 for ( i = 1; i <= this->
nsurf; i++ ) {
359 if ( tempGamma.
at(i) > 0.0 ) {
361 activeConditionMap.
at(i) = actSurf;
374 for ( i = 1; i <=
nsurf; i++ ) {
375 if ( activeConditionMap.
at(i) ) {
376 ( * loadGradVecPtr ) [ i - 1 ].times( dgamma.
at(i) );
377 residualVectorR.
add( ( * loadGradVecPtr ) [ i - 1 ] );
381 helpVector.
beProductOf(consistentModuli, residualVectorR);
382 this->
computeDiagModuli(helpMtrx, gp, elasticModuliInverse, hardeningModuliInverse);
386 for ( i = 1; i <= strSize; i++ ) {
387 plasticStrainVectorR.
at(i) += helpVector2.
at(i);
390 for ( i = strSize + 1; i <= totSize; i++ ) {
391 strainSpaceHardeningVariables.
at(i - strSize) += helpVector2.
at(i);
400 OOFEM_WARNING(
"local equlibrium not reached in %d iterations\nElement %d, gp %d, continuing",
402 answer = fullStressVector;
407 answer = fullStressVector;
423 FloatArray fullStressVector, fullStressSpaceHardeningVars;
424 FloatArray helpVector, trialStressIncrement, rhs;
425 FloatMatrix elasticModuli, hardeningModuli, dmat, gmatInv;
426 std :: vector< FloatArray > yieldGradVec(this->
nsurf), loadGradVec(this->
nsurf), * yieldGradVecPtr, * loadGradVecPtr;
430 int size, sizeR, i, j, elastic, restart, actSurf, indx, iindx, jindx;
435 yieldGradVecPtr = loadGradVecPtr = & yieldGradVec;
437 yieldGradVecPtr = & yieldGradVec;
438 loadGradVecPtr = & loadGradVec;
455 elasticStrainVectorR = totalStrain;
456 elasticStrainVectorR.
subtract(plasticStrainVectorR);
465 activeConditionMap.
zero();
466 for ( i = 1; i <= this->
nsurf; i++ ) {
467 yieldValue = this->
computeYieldValueAt(gp, i, fullStressVector, fullStressSpaceHardeningVars);
471 activeConditionMap.
at(i) = actSurf;
485 for ( i = 1; i <= sizeR; i++ ) {
486 for ( j = 1; j <= sizeR; j++ ) {
487 dmat.
at(i, j) = elasticModuli.
at(i, j);
491 for ( i = sizeR + 1; i <= size; i++ ) {
492 for ( j = sizeR + 1; j <= size; j++ ) {
493 dmat.
at(i, j) = hardeningModuli.
at(i - sizeR, j - sizeR);
500 for ( i = sizeR + 1; i <= size; i++ ) {
501 for ( j = sizeR + 1; j <= size; j++ ) {
502 dmat.
at(i, j) = hardeningModuli.
at(i - sizeR, j - sizeR);
507 gmatInv.
resize(actSurf, actSurf);
513 for ( i = 1; i <=
nsurf; i++ ) {
518 for ( i = 1; i <=
nsurf; i++ ) {
525 for ( i = 1; i <=
nsurf; i++ ) {
526 if ( ( iindx = activeConditionMap.
at(i) ) ) {
528 helpVector.
beTProductOf(dmat, ( * yieldGradVecPtr ) [ i - 1 ]);
530 for ( j = 1; j <= this->
nsurf; j++ ) {
531 if ( ( jindx = activeConditionMap.
at(j) ) ) {
532 gmatInv.
at(iindx, jindx) = ( * loadGradVecPtr ) [ j - 1 ].dotProduct(helpVector);
557 for ( i = 1; i <= this->
nsurf; i++ ) {
558 if ( ( indx = activeConditionMap.
at(i) ) ) {
559 dgamma.
at(i) = helpVector.
at(indx);
569 for ( i = 1; i <= this->
nsurf; i++ ) {
570 if ( ( gamma.
at(i) + dgamma.
at(i) ) < 0.0 ) {
579 activeConditionMap.
zero();
580 for ( i = 1; i <= this->
nsurf; i++ ) {
581 if ( ( gamma.
at(i) + dgamma.
at(i) ) > 0.0 ) {
583 activeConditionMap.
at(i) = actSurf;
596 for ( i = 1; i <= this->
nsurf; i++ ) {
597 if ( activeConditionMap.
at(i) ) {
598 ( * loadGradVecPtr ) [ i - 1 ].times( dgamma.
at(i) );
599 for ( j = 1; j <= sizeR; j++ ) {
600 helpVector.
at(j) += ( * loadGradVecPtr ) [ i - 1 ].at(j);
605 plasticStrainVectorR.
add(helpVector);
607 helpVector.
resize(size - sizeR);
609 for ( i = 1; i <= this->
nsurf; i++ ) {
610 if ( activeConditionMap.
at(i) ) {
612 for ( j = sizeR + 1; j <= size; j++ ) {
613 helpVector.
at(j - sizeR) += ( * loadGradVecPtr ) [ i - 1 ].at(j);
618 strainSpaceHardeningVariables.
add(helpVector);
622 elasticStrainVectorR = totalStrain;
623 elasticStrainVectorR.
subtract(plasticStrainVectorR);
629 for ( i = 1; i <= this->
nsurf; i++ ) {
630 yieldValue = this->
computeYieldValueAt(gp, i, fullStressVector, fullStressSpaceHardeningVars);
645 char buff [ 200 ], buff1 [ 150 ];
655 printf(
" (%d iterations)", nIterations);
656 answer = fullStressVector;
664 const FloatArray &fullStressSpaceHardeningVars)
680 fullStressSpaceHardeningVars);
685 fullStressVector, fullStressSpaceHardeningVars);
688 if ( stressSpaceHardVarGradient.
isNotEmpty() ) {
689 size = isize + stressSpaceHardVarGradient.
giveSize();
695 for ( i = 1; i <= isize; i++ ) {
696 answer.
at(i) = stressGradientR.
at(i);
699 for ( i = isize + 1; i <= size; i++ ) {
700 answer.
at(i) = stressSpaceHardVarGradient.
at(i - isize);
708 const FloatArray &strainSpaceHardeningVariables,
709 std :: vector< FloatArray > &gradientVectorR)
713 FloatArray oldPlasticStrainVectorR, oldStrainSpaceHardeningVariables;
714 int i, j, isize, size;
717 isize = plasticStrainVectorR.
giveSize();
718 size = gradientVectorR [ 0 ].giveSize();
724 for ( i = 1; i <= isize; i++ ) {
725 answer.
at(i) = oldPlasticStrainVectorR.
at(i) - plasticStrainVectorR.
at(i);
728 for ( i = isize + 1; i <= size; i++ ) {
729 answer.
at(i) = oldStrainSpaceHardeningVariables.
at(i - isize) - strainSpaceHardeningVariables.
at(i - isize);
732 for ( i = 1; i <= this->
nsurf; i++ ) {
733 if ( activeConditionMap.
at(i) ) {
734 for ( j = 1; j <= size; j++ ) {
735 answer.
at(j) += gamma.
at(i) * gradientVectorR [ i - 1 ].at(j);
754 reducedAnswer.
beProductOf(de, elasticStrainVectorR);
767 const FloatArray &fullStressSpaceHardeningVars)
776 int i, j, isize, size;
786 helpInverse.
resize(size, size);
788 for ( i = 1; i <=
nsurf; i++ ) {
789 if ( activeConditionMap.
at(i) ) {
792 fullStressSpaceHardeningVars);
794 gradientMatrix.
times( gamma.
at(i) );
795 helpInverse.
add(gradientMatrix);
799 for ( i = 1; i <= isize; i++ ) {
800 for ( j = 1; j <= isize; j++ ) {
801 helpInverse.
at(i, j) += elasticModuliInverse.
at(i, j);
806 for ( i = isize + 1; i <= size; i++ ) {
807 for ( j = isize + 1; j <= size; j++ ) {
808 helpInverse.
at(i, j) += hardeningModuliInverse.
at(i - isize, j - isize);
816 answer.
resize( isize + fullStressSpaceHardeningVars.
giveSize(), isize + fullStressSpaceHardeningVars.
giveSize() );
818 for ( i = 1; i <= size; i++ ) {
819 for ( j = 1; j <= size; j++ ) {
820 answer.
at(i, j) = help.
at(i, j);
842 FloatMatrix consistentModuli, elasticModuli, hardeningModuli;
843 FloatMatrix elasticModuliInverse, hardeningModuliInverse;
844 FloatMatrix gmatInv, gmat, gradMat, helpMtrx, helpMtrx2, nmat, sbm1;
848 std :: vector< FloatArray > yieldGradVec(this->
nsurf), loadGradVec(this->
nsurf), * yieldGradVecPtr, * loadGradVecPtr;
852 int size, sizeR, i, j, iindx, actSurf = 0;
857 yieldGradVecPtr = loadGradVecPtr = & yieldGradVec;
859 yieldGradVecPtr = & yieldGradVec;
860 loadGradVecPtr = & loadGradVec;
878 for ( i = 1; i <=
nsurf; i++ ) {
879 if ( activeConditionMap.
at(i) ) {
892 hardeningModuliInverse.
beInverseOf(hardeningModuli);
894 hardeningModuliInverse.
clear();
907 activeConditionMap, fullStressVector, stressSpaceHardeningVars);
910 for ( i = 1; i <=
nsurf; i++ ) {
915 for ( i = 1; i <=
nsurf; i++ ) {
922 gradMat.
resize(actSurf, size);
923 for ( i = 1; i <=
nsurf; i++ ) {
924 if ( ( iindx = activeConditionMap.
at(i) ) ) {
925 for ( j = 1; j <= size; j++ ) {
926 gradMat.
at(iindx, j) = ( * yieldGradVecPtr ) [ i - 1 ].at(j);
932 helpMtrx.
resize(actSurf, size);
950 for ( i = 1; i <=
nsurf; i++ ) {
951 if ( ( iindx = activeConditionMap.
at(i) ) ) {
952 for ( j = 1; j <= size; j++ ) {
953 lgradMat.
at(iindx, j) = ( * loadGradVecPtr ) [ i - 1 ].at(j);
958 helpMtrx.
resize(actSurf, size);
989 FloatMatrix gmatInv, gmat, gradMat, helpMtrx, helpMtrx2;
993 std :: vector< FloatArray > yieldGradVec(this->
nsurf), loadGradVec(this->
nsurf);
996 int size, sizeR, i, j, iindx, actSurf = 0;
1014 for ( i = 1; i <=
nsurf; i++ ) {
1015 if ( activeConditionMap.
at(i) ) {
1040 for ( i = 1; i <= sizeR; i++ ) {
1041 for ( j = 1; j <= sizeR; j++ ) {
1042 dmat.
at(i, j) = elasticModuli.
at(i, j);
1046 for ( i = sizeR + 1; i <= size; i++ ) {
1047 for ( j = sizeR + 1; j <= size; j++ ) {
1048 dmat.
at(i, j) = hardeningModuli.
at(i - sizeR, j - sizeR);
1054 for ( i = 1; i <=
nsurf; i++ ) {
1059 for ( i = 1; i <=
nsurf; i++ ) {
1064 gradMat.
resize(actSurf, size);
1065 for ( i = 1; i <=
nsurf; i++ ) {
1066 if ( ( iindx = activeConditionMap.
at(i) ) ) {
1067 for ( j = 1; j <= size; j++ ) {
1068 gradMat.
at(iindx, j) = yieldGradVec [ i - 1 ].at(j);
1074 helpMtrx.
resize(actSurf, size);
1083 answer.
add(elasticModuli);
1086 for ( i = 1; i <=
nsurf; i++ ) {
1087 if ( ( iindx = activeConditionMap.
at(i) ) ) {
1088 for ( j = 1; j <= size; j++ ) {
1089 lgradMat.
at(iindx, j) = loadGradVec [ i - 1 ].at(j);
1094 helpMtrx.
resize(actSurf, size);
1104 answer.
add(elasticModuli);
1117 int size1, size2, i, j;
1126 answer.
resize(size2, size2);
1129 for ( i = 1; i <= size1; i++ ) {
1130 for ( j = 1; j <= size1; j++ ) {
1131 answer.
at(i, j) = elasticModuliInverse.
at(i, j);
1135 for ( i = size1 + 1; i <= size2; i++ ) {
1136 for ( j = size1 + 1; j <= size2; j++ ) {
1137 answer.
at(i, j) = hardeningModuliInverse.
at(i - size1, j - size1);
1178 if ( originalMode != _3dMat ) {
1179 OOFEM_ERROR(
"Different stressStrain mode encountered");
1190 if ( mode == ElasticStiffness ) {
1214 if ( mode == ElasticStiffness ) {
1236 if ( mode == ElasticStiffness ) {
1256 if ( mode == ElasticStiffness ) {
1279 if ( mode == ElasticStiffness ) {
1302 if ( mode == ElasticStiffness ) {
1325 if ( mode == ElasticStiffness ) {
1339 if ( type == IST_PlasticStrainTensor ) {
1344 }
else if ( type == IST_PrincipalPlasticStrainTensor ) {
1361 strainSpaceHardeningVarsVector(statusSize), tempStrainSpaceHardeningVarsVector(statusSize),
1377 fprintf(file,
"status { ");
1380 fprintf(file,
" Yielding, ");
1382 fprintf(file,
" Unloading, ");
1385 fprintf(file,
" plastic strains ");
1387 fprintf( file,
" %.4e", val );
1391 fprintf(file,
", strain space hardening vars ");
1393 fprintf( file,
" %.4e", val );
1398 fprintf(file,
"}\n");
static int giveSizeOfVoigtSymVector(MaterialMode mmode)
Returns the size of symmetric part of a reduced stress/strain vector according to given mode...
virtual void computeReducedGradientMatrix(FloatMatrix &answer, int isurf, GaussPoint *gp, const FloatArray &stressVector, const FloatArray &stressSpaceHardeningVars)=0
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
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.
contextIOResultType storeYourself(DataStream &stream) const
Stores array to output stream.
int giveNumberOfColumns() const
Returns number of columns of receiver.
void subtract(const FloatArray &src)
Subtracts array src to receiver.
virtual void computeStressSpaceHardeningVarsReducedGradient(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &stressVector, const FloatArray &stressSpaceHardeningVars)=0
virtual void giveConsistentStiffnessMatrix(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
IntArray tempActiveConditionMap
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
virtual void computeHardeningReducedModuli(FloatMatrix &answer, GaussPoint *gp, const FloatArray &strainSpaceHardeningVariables, TimeStep *tStep)=0
GaussPoint * gp
Associated integration point.
FloatArray plasticStrainVector
Plastic strain vector.
const FloatArray & giveTempGamma()
For computing principal strains from engineering strains.
functType
Type that allows to distinguish between yield function and loading function.
bool solveForRhs(const FloatArray &b, FloatArray &answer, bool transpose=false)
Solves the system of linear equations .
void letTempPlasticStrainVectorBe(FloatArray v)
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
contextIOResultType storeYourself(DataStream &stream) const
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
void zero()
Sets all component to zero.
double & at(int i)
Coefficient access function.
void beSubMatrixOf(const FloatMatrix &src, int topRow, int bottomRow, int topCol, int bottomCol)
Assigns to the receiver the sub-matrix of another matrix.
enum oofem::MPlasticMaterial::plastType plType
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
virtual void givePlaneStrainStiffMtrx(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane strain stiffness matrix of receiver.
This class implements a structural material status information.
void computeGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &fullStressVector, const FloatArray &fullStressSpaceHardeningVars)
void computeDiagModuli(FloatMatrix &answer, GaussPoint *gp, FloatMatrix &elasticModuliInverse, FloatMatrix &hardeningModuliInverse)
virtual void computeReducedElasticModuli(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep)
void computeResidualVector(FloatArray &answer, GaussPoint *gp, const FloatArray &gamma, const IntArray &activeConditionMap, const FloatArray &plasticStrainVectorR, const FloatArray &strainSpaceHardeningVariables, std::vector< FloatArray > &gradVec)
LinearElasticMaterial * linearElasticMaterial
Reference to bulk (undamaged) material.
void letTempStateFlagBe(int v)
void cuttingPlaneReturn(FloatArray &answer, IntArray &activeConditionMap, FloatArray &gamma, GaussPoint *gp, const FloatArray &totalStrain, FloatArray &plasticStrainR, FloatArray &strainSpaceHardeningVariables, TimeStep *tStep)
FloatArray tempPlasticStrainVector
Element * giveElement()
Returns corresponding element to receiver.
void negated()
Changes sign of receiver values.
void giveStressDependentPartOfStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrainVector, TimeStep *tStep, ValueModeType mode)
Method for subtracting from reduced space strain vector its stress-independent parts (caused by tempe...
MaterialMode
Type representing material mode of integration point.
LinearElasticMaterial * giveLinearElasticMaterial()
Returns reference to undamaged (bulk) material.
const FloatArray & givePlasticStrainVector() const
Returns the equilibrated strain vector.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
virtual int read(int *data, int count)=0
Reads count integer values into array pointed by data.
MatResponseMode
Describes the character of characteristic material matrix.
const IntArray & giveTempActiveConditionMap()
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
virtual void computeStressGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &stressVector, const FloatArray &stressSpaceHardeningVars)=0
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
static void giveFullSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the reduced unsymmetric Voigt vector (2nd order tensor) to full form.
virtual void givePlateLayerStiffMtrx(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Method for computing 2d plate layer stiffness matrix of receiver.
FloatArray strainSpaceHardeningVarsVector
Strain space hardening variables.
void letTempStrainSpaceHardeningVarsVectorBe(FloatArray v)
virtual int write(const int *data, int count)=0
Writes count integer values from array pointed by data.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
const FloatArray & giveStrainSpaceHardeningVars() const
Returns the equilibrated hardening variable vector.
int nsurf
Number of yield surfaces.
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
virtual void givePlaneStressStiffMtrx(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane stress stiffness matrix of receiver.
static void giveReducedSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the full unsymmetric Voigt vector (2nd order tensor) to reduced form.
double dotProduct(const FloatArray &x) const
Computes the dot product (or inner product) of receiver and argument.
int giveNumber()
Returns number of receiver.
virtual int giveSizeOfReducedHardeningVarsVector(GaussPoint *) const
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
void times(double f)
Multiplies receiver by factor f.
contextIOResultType restoreYourself(DataStream &stream)
virtual void computeStressSpaceHardeningVars(FloatArray &answer, GaussPoint *gp, const FloatArray &strainSpaceHardeningVariables)=0
virtual void give2dBeamLayerStiffMtrx(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Method for computing 2d beam layer stiffness matrix of receiver.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
double at(int i, int j) const
Coefficient access function.
enum oofem::MPlasticMaterial::ReturnMappingAlgoType rmType
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
This class implements associated Material Status to MPlasticMaterial.
contextIOResultType restoreYourself(DataStream &stream)
Restores array from image on stream.
void subtract(const FloatMatrix &a)
Subtracts matrix from the receiver.
Abstract base class representing a material status information.
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
void setTempActiveConditionMap(IntArray v)
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
IntArray activeConditionMap
Active set of yield functions (needed for algorithmic stiffness).
virtual ~MPlasticMaterialStatus()
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
void closestPointReturn(FloatArray &answer, IntArray &activeConditionMap, FloatArray &gamma, GaussPoint *gp, const FloatArray &totalStrain, FloatArray &plasticStrainR, FloatArray &strainSpaceHardeningVariables, TimeStep *tStep)
FloatArray tempStrainSpaceHardeningVarsVector
MPlasticMaterial(int n, Domain *d)
double computeNorm() const
Computes the norm (or length) of the vector.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
void add(const FloatMatrix &a)
Adds matrix to the receiver.
void setTempGamma(FloatArray v)
void computeAlgorithmicModuli(FloatMatrix &answer, GaussPoint *gp, const FloatMatrix &elasticModuliInverse, const FloatMatrix &hardeningModuliInverse, const FloatArray &gamma, const IntArray &activeConditionMap, const FloatArray &fullStressVector, const FloatArray &fullStressSpaceHardeningVars)
int state_flag
Yield function status indicator.
void zero()
Zeroes all coefficients of receiver.
virtual void giveElastoPlasticStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Abstract base class for all "structural" constitutive models.
virtual double computeYieldValueAt(GaussPoint *gp, int isurf, const FloatArray &stressVector, const FloatArray &stressSpaceHardeningVars)=0
void beProductTOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
void zero()
Zeroes all coefficient of receiver.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Domain * giveDomain() const
FloatArray gamma
Consistency parameter values (needed for algorithmic stiffness).
virtual int hasHardening()
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
const FloatArray & giveTempStressVector() const
Returns the const pointer to receiver's temporary stress vector.
int giveSize() const
Returns the size of receiver.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
#define PLASTIC_MATERIAL_MAX_ITERATIONS
the oofem namespace is to define a context or scope in which all oofem names are defined.
bool isNotEmpty() const
Returns true if receiver is not empty.
void clear()
Sets size of receiver to be an empty matrix. It will have zero rows and zero columns size...
virtual void giveFiberStiffMtrx(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d fiber stiffness matrix of receiver.
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
int giveNumberOfRows() const
Returns number of rows of receiver.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
Class representing integration point in finite element program.
virtual void giveRealStressVector(FloatArray &answer, GaussPoint *, const FloatArray &, TimeStep *)
Computes the real stress vector for given total strain and integration point.
#define OOFEM_WARNING(...)
Class representing solution step.
virtual void computeTrialStressIncrement(FloatArray &answer, GaussPoint *gp, const FloatArray &strainIncrement, TimeStep *tStep)
void add(const FloatArray &src)
Adds array src to receiver.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
virtual ~MPlasticMaterial()
MPlasticMaterialStatus(int n, Domain *d, GaussPoint *g, int statusSize)
void resize(int s)
Resizes receiver towards requested size.