68 return mode == _2dInterface;
77 if ( result !=
IRRT_OK )
return result;
80 if ( result !=
IRRT_OK )
return result;
116 const FloatArray &strainSpaceHardeningVariables)
121 double k1 = strainSpaceHardeningVariables.
at(1);
123 double ft = this->
ft0 * exp( ( -1.0 ) * this->
ft0 * k1 / this->
gfI );
124 return stressVector.
at(1) - ft;
125 }
else if ( isurf == 2 ) {
127 double k2 = strainSpaceHardeningVariables.
at(2);
130 double c = this->
c0 * exp( ( -1.0 ) * this->
c0 * k2 / this->
gfII );
134 return fabs( stressVector.
at(2) ) + stressVector.
at(1) * tanfi - c;
148 }
else if ( isurf == 3 ) {
149 double s1 = stressVector.
at(1);
150 double s2 = stressVector.
at(2);
152 return this->
Cnn * s1 * s1 + this->
Css * s2 * s2 + this->
Cn * s1 - st * st;
160 const FloatArray &strainSpaceHardeningVariables)
167 }
else if ( isurf == 2 ) {
170 double k2 = strainSpaceHardeningVariables.
at(2);
171 double c = this->
c0 * exp( ( -1.0 ) * this->
c0 * k2 / this->
gfII );
175 double ny =
sgn( stressVector.
at(2) );
184 answer.
at(2) =
sgn( stressVector.
at(2) );
200 }
else if ( isurf == 3 ) {
201 answer.
at(1) = 2.0 *this->
Cnn *stressVector.
at(1) + this->
Cn;
202 answer.
at(2) = 2.0 *this->
Css *stressVector.
at(2);
216 double help = this->
gfI * this->
c0 / ( this->
gfII * this->
ft0 );
221 if ( activeConditionMap.
at(1) && activeConditionMap.
at(2) ) {
222 if ( ( dlambda.
at(1) > 0. ) && ( dlambda.
at(2) > 0. ) ) {
223 answer.
at(1) = sqrt( dlambda.
at(1) * dlambda.
at(1) + ( help * dlambda.
at(2) ) * ( help * dlambda.
at(2) ) );
224 answer.
at(2) = sqrt( ( dlambda.
at(1) / help ) * ( dlambda.
at(1) / help ) + dlambda.
at(2) * dlambda.
at(2) );
225 }
else if ( dlambda.
at(1) > 0. ) {
226 answer.
at(1) = dlambda.
at(1);
227 answer.
at(2) = dlambda.
at(1) / help;
228 }
else if ( dlambda.
at(2) > 0. ) {
229 answer.
at(1) = help * dlambda.
at(2);
230 answer.
at(2) = dlambda.
at(2);
232 }
else if ( activeConditionMap.
at(1) ) {
233 if ( dlambda.
at(1) > 0. ) {
234 answer.
at(1) = dlambda.
at(1);
235 answer.
at(2) = dlambda.
at(1) / help;
238 if ( dlambda.
at(2) > 0. ) {
239 answer.
at(1) = help * dlambda.
at(2);
240 answer.
at(2) = dlambda.
at(2);
244 double p1 = 2.0 *this->
Cnn *stress.
at(1) + this->
Cn;
245 double p2 = 2.0 *this->
Css *stress.
at(2);
247 if ( dlambda.
at(3) > 0. ) {
248 answer.
at(3) = dlambda.
at(3) * sqrt(p1 * p1 + p2 * p2);
276 answer.
resize(3, actSurf);
279 double help = this->
gfI * this->
c0 / ( this->
gfII * this->
ft0 );
280 double k1 = sqrt( dlambda.
at(1) * dlambda.
at(1) +
281 ( help * dlambda.
at(2) ) * ( help * dlambda.
at(2) ) );
282 double k2 = sqrt( ( dlambda.
at(1) / help ) * ( dlambda.
at(1) / help ) +
283 dlambda.
at(2) * dlambda.
at(2) );
285 double p1 = 2.0 *this->
Cnn *fullStressVector.
at(1) + this->
Cn;
286 double p2 = 2.0 *this->
Css *fullStressVector.
at(2);
288 if ( ( indx = activeConditionMap.
at(1) ) ) {
289 if ( dlambda.
at(1) > 0. ) {
290 if ( activeConditionMap.
at(2) ) {
292 double dl1 = dlambda.
at(1);
293 answer.
at(1, indx) = dl1 / k1;
294 answer.
at(2, indx) = dl1 / k2 / help / help;
297 answer.
at(1, indx) = 0.;
298 answer.
at(2, indx) = 0.;
302 answer.
at(1, indx) = 1.;
303 answer.
at(2, indx) = 0.0;
313 if ( ( indx = activeConditionMap.
at(2) ) ) {
314 if ( dlambda.
at(2) > 0. ) {
315 if ( activeConditionMap.
at(1) ) {
317 double dl2 = dlambda.
at(2);
318 answer.
at(1, indx) = help * help * dl2 / k1;
319 answer.
at(2, indx) = dl2 / k2;
322 answer.
at(1, indx) = 0.;
323 answer.
at(2, indx) = 0.;
327 answer.
at(1, indx) = 0.0;
329 answer.
at(2, indx) = 1.0;
334 if ( ( indx = activeConditionMap.
at(3) ) ) {
335 if ( dlambda.
at(3) < 0. ) {
336 answer.
at(3, indx) = 0.0;
338 answer.
at(3, indx) = sqrt(p1 * p1 + p2 * p2);
348 const FloatArray &strainSpaceHardeningVariables)
353 answer.
at(1) = ( -1.0 ) * this->
ft0 * exp( ( -1.0 ) * this->
ft0 * strainSpaceHardeningVariables.
at(1) / this->
gfI ) * ( -1.0 ) * this->
ft0 / this->
gfI;
356 }
else if ( isurf == 2 ) {
359 double k2 = strainSpaceHardeningVariables.
at(2);
360 double c = this->
c0 * exp( ( -1.0 ) * this->
c0 * k2 / this->
gfII );
367 answer.
at(2) = ( -1.0 ) * ( stressVector.
at(1) * (
tanfir -
tanfi0 ) /
c0 + 1.0 ) * c * ( -1.0 ) * this->
c0 / this->
gfII;
370 double k2 = strainSpaceHardeningVariables.
at(2);
371 double c = this->
c0 * exp( ( -1.0 ) * this->
c0 * k2 / this->
gfII );
374 answer.
at(2) = ( -1.0 ) * c * ( -1.0 ) * this->
c0 / this->
gfII;
390 }
else if ( isurf == 3 ) {
396 answer.
at(3) = -2.0 * st * gt;
410 double p1 = 2.0 *this->
Cnn *fullStressVector.
at(1) + this->
Cn;
411 double p2 = 2.0 *this->
Css *fullStressVector.
at(2);
413 if ( activeConditionMap.
at(3) ) {
414 if ( dlambda.
at(3) >= 0. ) {
415 double c = 0.5 * dlambda.
at(3) / sqrt(p1 * p1 + p2 * p2);
416 answer.
at(3, 1) = 4.0 * c * this->
Cnn * p1;
417 answer.
at(3, 2) = 4.0 * c * this->
Css * p2;
426 const FloatArray &strainSpaceHardeningVariables)
429 gradientMatrix.
resize(2, 2);
430 gradientMatrix.
zero();
433 gradientMatrix.
at(1, 1) = 2.0 * this->
Cnn;
434 gradientMatrix.
at(2, 2) = 2.0 * this->
Css;
440 const FloatArray &strainSpaceHardeningVariables)
443 gradientMatrix.
resize(2, 3);
444 gradientMatrix.
zero();
450 double k2 = strainSpaceHardeningVariables.
at(2);
451 double c = this->
c0 * exp( ( -1.0 ) * this->
c0 * k2 / this->
gfII );
515 if ( mode == TangentStiffness ) {
533 if ( mode == _2dInterface ) {
535 answer.
at(1, 1) =
kn;
536 answer.
at(2, 2) =
ks;
537 answer.
at(1, 2) = answer.
at(2, 1) = 0.0;
559 if ( ( k > 0. ) && ( k <
kp ) ) {
562 }
else if ( ( k >=
kp ) && ( k <
km ) ) {
563 double h = ( k -
kp ) / (
km -
kp );
565 }
else if ( k >=
km ) {
568 }
else if ( k <= 0. ) {
573 if ( ( k >= 0. ) && ( k <
kp ) ) {
576 }
else if ( ( k >=
kp ) && ( k <
km ) ) {
577 double h = ( k -
kp ) / (
km -
kp );
579 }
else if ( k >=
km ) {
582 }
else if ( k < 0. ) {
584 return max(
sic + grad * k, 0.);
585 }
else if ( ( k < 0. ) && ( k > -
kp ) ) {
589 }
else if ( k <= -
kp ) {
603 }
else if ( k == 0. ) {
605 }
else if ( k <
km ) {
623 }
else if ( ( k >= 0. ) && ( k <
kp ) ) {
626 }
else if ( ( k >=
kp ) && ( k <
km ) ) {
627 double h = ( k -
kp ) / (
km -
kp );
629 }
else if ( k >=
km ) {
631 double result = (
smc -
src ) * exp( m * ( k -
km ) / ( (
smc -
src ) ) ) * m / ( (
smc -
src ) );
645 if ( (
sic + grad * k ) <= 0. ) {
650 }
else if ( ( k >= 0. ) && ( k <
kp ) ) {
653 }
else if ( ( k >=
kp ) && ( k <
km ) ) {
654 double h = ( k -
kp ) / (
km -
kp );
656 }
else if ( k >=
km ) {
659 }
else if ( ( k < 0. ) && ( k > -
kp ) ) {
663 }
else if ( k <= -
kp ) {
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
#define _IFT_Masonry02_tanpsi
void give2dInterfaceMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
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 vector.
double kn
Elastic properties.
LinearElasticMaterial * linearElasticMaterial
Reference to bulk (undamaged) material.
#define _IFT_Masonry02_css
#define _IFT_Masonry02_ft0
virtual void computeReducedHardeningVarsLamGradient(FloatMatrix &answer, GaussPoint *gp, int actSurf, const IntArray &activeConditionMap, const FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVars, const FloatArray &gamma)
computes derivative of vector with respect to lambda vector
#define _IFT_Masonry02_c0
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 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).
int nsurf
Number of yield surfaces.
double & at(int i)
Coefficient access function.
int max(int i, int j)
Returns bigger value form two given decimals.
double sgn(double i)
Returns the signum of given value (if value is < 0 returns -1, otherwise returns 1) ...
#define _IFT_Masonry02_tanfir
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
enum oofem::MPlasticMaterial2::plastType plType
MaterialMode
Type representing material mode of integration point.
double computeF3HardeningLaw(double k)
Cap mode related functions.
This class implements associated Material Status to MPlasticMaterial.
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
MatResponseMode
Describes the character of characteristic material matrix.
functType
Type that allows to distinguish between yield function and loading function.
double c0
Initial cohesion of joint.
double tanfi0
Initial friction angle.
virtual void computeStrainHardeningVarsIncrement(FloatArray &answer, GaussPoint *gp, const FloatArray &stress, const FloatArray &dlambda, const FloatArray &dplasticStrain, const IntArray &activeConditionMap)
Computes the increment of strain-space hardening variables.
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
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...
#define _IFT_Masonry02_kr
#define _IFT_Masonry02_cn
#define _IFT_Masonry02_kp
This class implements an isotropic linear elastic material in a finite element problem.
virtual void computeReducedSKGradientMatrix(FloatMatrix &gradientMatrix, int i, GaussPoint *gp, const FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVariables)
Computes second derivative of loading function with respect to stress and hardening vars...
#define _IFT_Masonry02_sm
virtual void computeReducedSSGradientMatrix(FloatMatrix &gradientMatrix, int i, GaussPoint *gp, const FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVariables)
Computes second derivative of loading function with respect to stress.
enum oofem::MPlasticMaterial2::ReturnMappingAlgoType rmType
#define _IFT_Masonry02_cnn
LinearElasticMaterial * giveLinearElasticMaterial()
Returns reference to undamaged (bulk) material.
double at(int i, int j) const
Coefficient access function.
#define _IFT_Masonry02_ks
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Masonry02(int n, Domain *d)
virtual void computeReducedHardeningVarsSigmaGradient(FloatMatrix &answer, GaussPoint *gp, const IntArray &activeConditionMap, const FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVars, const FloatArray &gamma)
Computes derivative of vector with respect to stress.
virtual double computeYieldValueAt(GaussPoint *gp, int isurf, const FloatArray &stressVector, const FloatArray &stressSpaceHardeningVars)
Computes the value of yield function.
Abstract base class representing a material status information.
virtual int giveSizeOfReducedHardeningVarsVector(GaussPoint *) const
double sic
Cap mode parameters.
Class representing vector of real numbers.
double tanfir
Residual friction angle.
#define _IFT_Masonry02_si
#define _IFT_Masonry02_sp
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
#define _IFT_Masonry02_gfii
#define _IFT_Masonry02_gfi
#define _IFT_Masonry02_tanfi0
virtual void computeReducedElasticModuli(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep)
#define _IFT_Masonry02_km
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
#define _IFT_Masonry02_cplane
void zero()
Zeroes all coefficients of receiver.
double tanpsi
Dilatancy angle.
double ft0
Tensile strength.
double Cnn
Cap mode parameters.
#define _IFT_Masonry02_sr
void zero()
Zeroes all coefficient of receiver.
Domain * giveDomain() const
virtual void giveElastoPlasticStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
REGISTER_Material(DummyMaterial)
virtual void giveConsistentStiffnessMatrix(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
the oofem namespace is to define a context or scope in which all oofem names are defined.
double computeF3HardeningGradient(double k)
Class representing integration point in finite element program.
Class representing solution step.
This class represents a base class for non-associated multisurface plasticity.
#define _IFT_Masonry02_kn
void resize(int s)
Resizes receiver towards requested size.