OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
concretedpm.h
Go to the documentation of this file.
1 /*
2  *
3  * ##### ##### ###### ###### ### ###
4  * ## ## ## ## ## ## ## ### ##
5  * ## ## ## ## #### #### ## # ##
6  * ## ## ## ## ## ## ## ##
7  * ## ## ## ## ## ## ## ##
8  * ##### ##### ## ###### ## ##
9  *
10  *
11  * OOFEM : Object Oriented Finite Element Code
12  *
13  * Copyright (C) 1993 - 2013 Borek Patzak
14  *
15  *
16  *
17  * Czech Technical University, Faculty of Civil Engineering,
18  * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19  *
20  * This library is free software; you can redistribute it and/or
21  * modify it under the terms of the GNU Lesser General Public
22  * License as published by the Free Software Foundation; either
23  * version 2.1 of the License, or (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28  * Lesser General Public License for more details.
29  *
30  * You should have received a copy of the GNU Lesser General Public
31  * License along with this library; if not, write to the Free Software
32  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33  */
34 
35 #ifndef ConcreteDPM_h
36 #define ConcreteDPM_h
37 
38 #include "../sm/Materials/structuralmaterial.h"
39 #include "floatarray.h"
40 #include "floatmatrix.h"
41 #include "cltypes.h"
42 #include "../sm/Materials/structuralms.h"
44 #include "gausspoint.h"
45 #include "mathfem.h"
46 
48 
49 #define _IFT_ConcreteDPM_Name "concretedpm"
50 #define _IFT_ConcreteDPM_fc "fc"
51 #define _IFT_ConcreteDPM_ft "ft"
52 #define _IFT_ConcreteDPM_ecc "ecc"
53 #define _IFT_ConcreteDPM_kinit "kinit"
54 #define _IFT_ConcreteDPM_ahard "ahard"
55 #define _IFT_ConcreteDPM_bhard "bhard"
56 #define _IFT_ConcreteDPM_chard "chard"
57 #define _IFT_ConcreteDPM_dhard "dhard"
58 #define _IFT_ConcreteDPM_asoft "asoft"
59 #define _IFT_ConcreteDPM_dilation "dilation"
60 #define _IFT_ConcreteDPM_yieldtol "yieldtol"
61 #define _IFT_ConcreteDPM_newtoniter "newtoniter"
62 #define _IFT_ConcreteDPM_wf "wf"
63 #define _IFT_ConcreteDPM_gf "gf"
64 #define _IFT_ConcreteDPM_href "href"
65 #define _IFT_ConcreteDPM_helem "helem"
66 
67 
68 namespace oofem {
73 // new approach to size-dependent adjustment of damage evolution
74 // (can be deactivated by commenting out the following line)
75 #define SOPHISTICATED_SIZEDEPENDENT_ADJUSTMENT
76 
78 {
79 public:
91  };
92 
93 protected:
95 
98 
100 
101  double dFDKappa;
102  double deltaLambda;
104 
106 
107  double kappaP;
108  double tempKappaP;
110 
111  double le;
112 
114 
115  double equivStrain;
117 
118  double kappaD;
119  double tempKappaD;
120 
121  double damage;
122  double tempDamage;
123 
126 
128 
132 
133 #ifdef SOPHISTICATED_SIZEDEPENDENT_ADJUSTMENT
134  double epsloc;
137  double tempEpsloc;
138 #endif
139 
140 public:
142  ConcreteDPMStatus(int n, Domain * d, GaussPoint * gp);
143 
145  virtual ~ConcreteDPMStatus();
146 
147  virtual void initTempStatus();
148  virtual void updateYourself(TimeStep *tStep);
149  virtual void printOutputAt(FILE *file, TimeStep *tStep);
150 
151  virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj = NULL);
152  virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj = NULL);
153 
154  int setIPValue(const FloatArray &value, InternalStateType type);
155 
156  virtual void restoreConsistency();
157  virtual const char *giveClassName() const { return "ConcreteDPMStatus"; }
158 
163  const FloatArray &givePlasticStrain() const { return plasticStrain; }
164 
165 
171  {
172  FloatArray dev;
174  return sqrt( .5 * ( 2. * dev [ 0 ] * dev [ 0 ] + 2. * dev [ 1 ] * dev [ 1 ] + 2. * dev [ 2 ] * dev [ 2 ] +
175  dev [ 3 ] * dev [ 3 ] + dev [ 4 ] * dev [ 4 ] + dev [ 5 ] * dev [ 5 ] ) );
176  }
177 
178 
180  {
181  return 1. / 3. * ( plasticStrain(0) + plasticStrain(1) + plasticStrain(2) );
182  }
183 
184 
189  double giveKappaP() const { return kappaP; }
190 
196  double giveKappaD() const { return kappaD; }
197 
203  double giveEquivStrain() const { return equivStrain; }
204 
205 #ifdef SOPHISTICATED_SIZEDEPENDENT_ADJUSTMENT
206 
211  double giveEpsLoc() const { return epsloc; }
212 
218  void letTempEpslocBe(double v) { tempEpsloc = v; }
219 
220 #endif
221 
227  double giveDamage() const { return damage; }
228 
233  int giveStateFlag() const { return state_flag; }
234 
240 
246 
247 
253  double giveTempKappaP() const { return tempKappaP; }
254 
260  double giveTempKappaD() const { return tempKappaD; }
261 
267  double giveTempDamage() const { return tempDamage; }
268 
274  double giveDeltaEquivStrain() const { return deltaEquivStrain; }
275 
276 
282  int giveTempStateFlag() const { return temp_state_flag; }
283 
288  void letTempPlasticStrainBe(const FloatArray &v) { tempPlasticStrain = v; }
289 
294  void letDeltaLambdaBe(double v) { deltaLambda = v; }
295 
301  { tempVolumetricPlasticStrain = v; }
302 
307  void letTempKappaPBe(double v)
308  { tempKappaP = v; }
309 
310 
315  void letTempKappaDBe(double v) { tempKappaD = v; }
316 
321  void letTempEquivStrainBe(double v) { tempEquivStrain = v; }
322 
327  void letTempDamageBe(double v) { tempDamage = v; }
328 
333  void letDeltaEquivStrainBe(double v) { deltaEquivStrain = v; }
334 
338  double giveLe() { return le; }
339 
344  void setLe(double ls) { le = ls; }
345 
351  void letTempStateFlagBe(int v) { temp_state_flag = v; }
352 };
353 
354 
366 {
367 protected:
368  enum Concrete_VertexType { VT_Regular, VT_Tension, VT_Compression };
370 
374  double fc, ft, ecc;
375 
377  double AHard;
379  double BHard;
381  double CHard;
383  double DHard;
384 
386  double ASoft;
387 
390 
393 
395  double deltaLambda;
396 
398  double sig;
400  double rho;
401 
403  double thetaTrial;
404 
406  double m;
407 
409  double mQ;
410 
412  double helem;
413 
416 
418  double eM;
420  double gM;
422  double kM;
424  double nu;
425 
427  double kappaP;
428  double tempKappaP;
429 
431  double kappaD;
432  double tempKappaD;
433 
435  double damage;
436  double tempDamage;
437 
439  double ef;
440 
442  double yieldTol;
443 
446 
449 
450 #ifdef SOPHISTICATED_SIZEDEPENDENT_ADJUSTMENT
451  double href;
454 #endif
455 
456 public:
458  ConcreteDPM(int n, Domain * d);
460  virtual ~ConcreteDPM();
461 
463 
464  virtual const char *giveClassName() const { return "ConcreteDPM"; }
465  virtual const char *giveInputRecordName() const { return _IFT_ConcreteDPM_Name; }
466 
468  { return static_cast< ConcreteDPMStatus * >( this->Material :: giveStatus(gp) ); }
469 
470  LinearElasticMaterial *giveLinearElasticMaterial() { return linearElasticMaterial; }
471 
472  virtual void giveRealStressVector_3d(FloatArray &answer,
473  GaussPoint *gp,
474  const FloatArray &reducedStrain,
475  TimeStep *tStep);
476 
481  void performPlasticityReturn(GaussPoint *gp, FloatArray &strain);
482 
491  bool checkForVertexCase(double &answer,
492  double sig,
493  double tempKappa);
494 
500  void performRegularReturn(FloatArray &stress,
501  GaussPoint *gp);
502 
503 
510  void performVertexReturn(FloatArray &stress,
511  double apexStress,
512  GaussPoint *gp);
513 
522  double computeYieldValue(double sig,
523  double rho,
524  double theta,
525  double tempKappa) const;
526 
533  double computeHardeningOne(double tempKappa) const;
534 
541  double computeHardeningOnePrime(double tempKappa) const;
542 
543 
552  double computeDFDKappa(double sig,
553  double rho,
554  double tempKappa);
555 
564  double computeDKappaDDeltaLambda(double sig,
565  double rho,
566  double tempKappa);
567 
575  virtual double computeDuctilityMeasure(double sig,
576  double rho,
577  double theta);
578 
579 
584  void computeDDuctilityMeasureDInv(FloatArray &answer,
585  double sig,
586  double rho,
587  double tempKappa);
588 
593  void computeAMatrix(FloatMatrix &answer,
594  double sig,
595  double rho,
596  double tempKappa);
597 
602  void computeDGDInv(FloatArray &answer,
603  double sig,
604  double rho,
605  double tempKappa);
606 
612  double computeRatioPotential(double sig,
613  double tempKappa);
614 
619  void computeDDGDDInv(FloatMatrix &answer,
620  double sig,
621  double rho,
622  double tempKappa);
623 
628  void computeDDGDInvDKappa(FloatArray &answer,
629  double sig,
630  double rho,
631  double tempKappa);
632 
638  void computeDDKappaDDeltaLambdaDInv(FloatArray &answer,
639  double sig,
640  double rho,
641  double tempKappa);
642 
647  double computeDDKappaDDeltaLambdaDKappa(double sig,
648  double rho,
649  double tempKappa);
650 
651 
656  void computeDFDInv(FloatArray &answer,
657  double sig,
658  double rho,
659  double tempKappa) const;
660 
664  double computeTempKappa(double kappaInitial,
665  double sigTrial,
666  double rhoTrial,
667  double sig);
668 
669 
677  double computeDamage(const FloatArray &strain, GaussPoint *gp, TimeStep *tStep);
678 
679 
680 
682  virtual double computeDamageParam(double kappa, GaussPoint *gp);
683 
685  double computeInverseDamage(double dam, GaussPoint *gp);
686 
688  virtual void computeEquivalentStrain(double &kappaD, const FloatArray &elasticStrain, GaussPoint *gp, TimeStep *tStep);
689 
690 
692  double computeDuctilityMeasureDamage(const FloatArray &strain, GaussPoint *gp);
693 
697  void initDamaged(double kappa,
698  const FloatArray &elasticStrain,
699  GaussPoint *gp);
700 
701 
703  void computeTrialCoordinates(const FloatArray &stress, GaussPoint *gp);
704 
706  void assignStateFlag(GaussPoint *gp);
707 
709  void computeDRhoDStress(FloatArray &answer, const FloatArray &stress) const;
710 
712  void computeDSigDStress(FloatArray &answer) const;
713 
715  void computeDDRhoDDStress(FloatMatrix &answer, const FloatArray &stress) const;
716 
718  void computeDCosThetaDStress(FloatArray &answer, const FloatArray &stress) const;
719 
721  double computeDRDCosTheta(double theta, double ecc) const;
722 
723  virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer,
724  MatResponseMode mode, GaussPoint *gp, TimeStep *tStep);
725 
726 
727  virtual bool isCharacteristicMtrxSymmetric(MatResponseMode rMode) { return false; }
728 
729  virtual int setIPValue(const FloatArray &value, GaussPoint *gp, InternalStateType type);
730 
731  virtual int giveIPValue(FloatArray &answer,
732  GaussPoint *gp,
733  InternalStateType type,
734  TimeStep *tStep);
735 
736 protected:
737  virtual MaterialStatus *CreateStatus(GaussPoint *gp) const;
738 };
739 } // end namespace oofem
740 #endif
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
double ef
Control parameter for the exponential softening law.
Definition: concretedpm.h:439
LinearElasticMaterial * giveLinearElasticMaterial()
Definition: concretedpm.h:470
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Definition: material.C:244
GaussPoint * gp
Associated integration point.
Class and object Domain.
Definition: domain.h:115
void letTempKappaPBe(double v)
Assign the temp value of the hardening variable of the plasticity model.
Definition: concretedpm.h:307
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
double BHard
Parameter of the ductilityMeasure of the plasticity model.
Definition: concretedpm.h:379
This class implements a structural material status information.
Definition: structuralms.h:65
FloatArray tempPlasticStrain
Definition: concretedpm.h:97
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
Definition: concretedpm.C:175
int giveStateFlag() const
Get the state flag from the material status.
Definition: concretedpm.h:233
Concrete_VertexType vertexType
Definition: concretedpm.h:369
double dilationConst
Control parameter for te volumetric plastic flow of the plastic potential.
Definition: concretedpm.h:392
#define _IFT_ConcreteDPM_Name
Definition: concretedpm.h:49
MatResponseMode
Describes the character of characteristic material matrix.
void letTempPlasticStrainBe(const FloatArray &v)
Assign the temp value of deviatoric plastic strain.
Definition: concretedpm.h:288
void letTempEquivStrainBe(double v)
Assign the temp value of the hardening variable of the damage model.
Definition: concretedpm.h:321
const FloatArray & givePlasticStrain() const
Get the plastic strain deviator from the material status.
Definition: concretedpm.h:163
This class is a abstract base class for all linear elastic material models in a finite element proble...
double thetaTrial
The lode angle of the trial stress.
Definition: concretedpm.h:403
double giveDeltaEquivStrain() const
Get the temp value of the hardening variable of the damage model from the material status...
Definition: concretedpm.h:274
double eM
Elastic Young&#39;s modulus.
Definition: concretedpm.h:418
double giveEquivStrain() const
Get the equivalent strain from the material status.
Definition: concretedpm.h:203
double kappaD
Hardening variable of damage model.
Definition: concretedpm.h:431
double giveLe()
Gives the characteristic length.
Definition: concretedpm.h:338
virtual const char * giveClassName() const
Definition: concretedpm.h:464
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
Definition: concretedpm.C:223
double giveDeviatoricPlasticStrainNorm()
Get the deviatoric plastic strain norm from the material status.
Definition: concretedpm.h:170
ConcreteDPMStatus(int n, Domain *d, GaussPoint *gp)
Constructor.
Definition: concretedpm.C:54
double tempVolumetricPlasticStrain
Definition: concretedpm.h:99
double DHard
Parameter of the ductilityMeasure of the plasticity model.
Definition: concretedpm.h:383
virtual ~ConcreteDPMStatus()
Destructor.
Definition: concretedpm.C:77
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: matstatus.h:140
LinearElasticMaterial * linearElasticMaterial
Pointer for linear elastic material.
Definition: concretedpm.h:415
virtual const char * giveClassName() const
Definition: concretedpm.h:157
double giveTempVolumetricPlasticStrain() const
Get the temp value of the volumetric plastic strain in plane stress.
Definition: concretedpm.h:245
double giveEpsLoc() const
Get the value of omega*ft/E at the expected onset of localization (defined by negative second-order w...
Definition: concretedpm.h:211
virtual const char * giveInputRecordName() const
Definition: concretedpm.h:465
double yieldTol
Yield tolerance for the plasticity model.
Definition: concretedpm.h:442
double kappaP
Hardening variable of plasticity model.
Definition: concretedpm.h:427
double giveKappaD() const
Get the hardening variable of the damage model from the material status.
Definition: concretedpm.h:196
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Definition: concretedpm.C:95
virtual ConcreteDPMStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Definition: concretedpm.h:467
double m
The friction parameter of the yield surface.
Definition: concretedpm.h:406
void letTempKappaDBe(double v)
Assign the temp value of the hardening variable of the damage model.
Definition: concretedpm.h:315
state_flag_values
Values of history variable state_flag.
Definition: concretedpm.h:81
void letTempStateFlagBe(int v)
Assign the temp value of the state flag.
Definition: concretedpm.h:351
double giveTempKappaP() const
Get the temp value of the hardening variable of the plasticity model from the material status...
Definition: concretedpm.h:253
double yieldHardInitial
Parameter of the hardening law of the plasticity model.
Definition: concretedpm.h:389
double ASoft
Parameter of the ductilityMeasure of the damage model.
Definition: concretedpm.h:386
void letDeltaLambdaBe(double v)
Assign the value of deviatoric plastic strain.
Definition: concretedpm.h:294
Abstract base class representing a material status information.
Definition: matstatus.h:84
FloatArray effectiveStress
Stress and its deviatoric part.
Definition: concretedpm.h:448
int setIPValue(const FloatArray &value, InternalStateType type)
Definition: concretedpm.C:269
double mQ
The dilation parameter of the plastic potential.
Definition: concretedpm.h:409
Class representing vector of real numbers.
Definition: floatarray.h:82
double deltaLambda
Plastic multiplier of the plasticity model.
Definition: concretedpm.h:395
const FloatArray & giveTempPlasticStrain() const
Get the temp value of the full plastic strain vector from the material status.
Definition: concretedpm.h:239
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
double nu
Elastic Poisson&#39;s ration.
Definition: concretedpm.h:424
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
double kM
Elastic bulk modulus.
Definition: concretedpm.h:422
void letDeltaEquivStrainBe(double v)
Assign the temp value of the damage variable of the damage model.
Definition: concretedpm.h:333
Class representing the general Input Record.
Definition: inputrecord.h:101
double sig
the volumetric stress.
Definition: concretedpm.h:398
double AHard
Parameter of the ductilityMeasure of the plasticity model.
Definition: concretedpm.h:377
double giveVolumetricPlasticStrain() const
Definition: concretedpm.h:179
double giveTempKappaD() const
Get the temp value of the hardening variable of the damage model from the material status...
Definition: concretedpm.h:260
virtual bool isCharacteristicMtrxSymmetric(MatResponseMode rMode)
Returns true if stiffness matrix of receiver is symmetric Default implementation returns true...
Definition: concretedpm.h:727
double rho
The length of the deviatoric stress.
Definition: concretedpm.h:400
int giveTempStateFlag() const
Get the temp value of the state flag from the material status.
Definition: concretedpm.h:282
virtual void restoreConsistency()
Restores consistency of the status, i.e., computes or corrects the values of certain status variables...
Definition: concretedpm.C:290
static double computeDeviatoricVolumetricSplit(FloatArray &dev, const FloatArray &s)
Computes split of receiver into deviatoric and volumetric part.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Definition: contextmode.h:43
double gM
Elastic shear modulus.
Definition: concretedpm.h:420
Abstract base class for all "structural" constitutive models.
void letTempEpslocBe(double v)
History variable of the modified size-dependent adjustment Assign the temp value of the damage variab...
Definition: concretedpm.h:218
double helem
Element size (to be used in fracture energy approach (crack band).
Definition: concretedpm.h:412
void letTempVolumetricPlasticStrainBe(double v)
Assign the temp value of the volumetric plastic strain in plane stress.
Definition: concretedpm.h:300
double CHard
Parameter of the ductilityMeasure of the plasticity model.
Definition: concretedpm.h:381
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Definition: concretedpm.C:81
int newtonIter
Maximum number of iterations for stress return.
Definition: concretedpm.h:445
double giveTempDamage() const
Get the temp value of the hardening variable of the damage model from the material status...
Definition: concretedpm.h:267
the oofem namespace is to define a context or scope in which all oofem names are defined.
double damage
Damage variable of damage model.
Definition: concretedpm.h:435
double giveKappaP() const
Get the hardening variable of the plasticity model.
Definition: concretedpm.h:189
double giveDamage() const
Get the damage variable of the damage model from the material status.
Definition: concretedpm.h:227
Class representing integration point in finite element program.
Definition: gausspoint.h:93
This class contains the combination of a local plasticity model for concrete with a local isotropic d...
Definition: concretedpm.h:365
Class representing solution step.
Definition: timestep.h:80
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
Definition: concretedpm.C:115
void letTempDamageBe(double v)
Assign the temp value of the damage variable of the damage model.
Definition: concretedpm.h:327
void setLe(double ls)
Sets the characteristic length.
Definition: concretedpm.h:344

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:28 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011