OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
dustmat.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 dustmat_h
36 #define dustmat_h
37 
38 #include "floatarray.h"
39 #include "floatmatrix.h"
40 #include "../sm/Materials/structuralms.h"
41 #include "../sm/Materials/structuralmaterial.h"
43 
45 
46 #define _IFT_DustMaterial_Name "dustmat"
47 #define _IFT_DustMaterial_alpha "alpha"
48 #define _IFT_DustMaterial_beta "beta"
49 #define _IFT_DustMaterial_lambda "lambda"
50 #define _IFT_DustMaterial_theta "theta"
51 #define _IFT_DustMaterial_ft "ft"
52 #define _IFT_DustMaterial_hardeningType "hardeningtype"
53 #define _IFT_DustMaterial_mStiff "mstiff"
54 #define _IFT_DustMaterial_rEll "rell"
55 #define _IFT_DustMaterial_x0 "x0"
56 #define _IFT_DustMaterial_newtonTol "newtontol"
57 #define _IFT_DustMaterial_newtonIter "newtoniter"
58 #define _IFT_DustMaterial_wHard "whard"
59 #define _IFT_DustMaterial_dHard "dhard"
60 
61 
62 namespace oofem {
69 {
70 public:
78  };
79 
80 protected:
84 
86  double q;
87  double tempQ;
88 
90  double bulkModulus;
92  double shearModulus;
94  double youngsModulus;
95 
97  int stateFlag;
99 
100 public:
102  DustMaterialStatus(int n, Domain * d, GaussPoint * gp, double q0);
103 
105  virtual ~DustMaterialStatus();
106 
107  virtual void initTempStatus();
108  virtual void updateYourself(TimeStep *tStep);
109  virtual void printOutputAt(FILE *file, TimeStep *tStep);
110 
111  virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj = NULL);
112  virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj = NULL);
113 
114  virtual const char *giveClassName() const { return "DustMaterialStatus"; }
115 
120  const FloatArray &givePlasticStrain() const { return plasticStrain; }
125  double giveVolumetricPlasticStrain() const { return ( plasticStrain.at(1) + plasticStrain.at(2) + plasticStrain.at(3) ) / 3.0; }
130  double giveQ() const { return q; }
135  int giveStateFlag() const { return stateFlag; }
136 
146  double giveTempQ() const { return tempQ; }
151  int giveTempStateFlag() const { return tempStateFlag; }
152 
157  void letTempPlasticStrainBe(const FloatArray &v) { tempPlasticStrain = v; }
162  void letTempQBe(double v) { tempQ = v; }
167  void letTempStateFlagBe(int v) { tempStateFlag = v; }
168 
173  void letPlasticStrainBe(const FloatArray &v) { plasticStrain = v; }
178  void letQBe(double v) { q = v; }
179 
184  void setBulkModulus(double v) { bulkModulus = v; }
189  void setShearModulus(double v) { shearModulus = v; }
194  void setYoungsModulus(double v) { youngsModulus = v; }
199  double giveBulkModulus() { return bulkModulus; }
204  double giveShearModulus() { return shearModulus; }
209  double giveYoungsModulus() { return youngsModulus; }
210 };
211 
234 {
235 protected:
238 
240  double alpha;
242  double beta;
244  double lambda;
246  double theta;
248  double ft;
250  double rEll;
254  double mStiff;
256  double x0;
258  double q0;
260  double wHard;
262  double dHard;
264  double newtonTol;
267 
273  double functionFe(double i1);
279  double functionFeDI1(double i1);
285  double functionFeDI1DI1(double i1);
293  double functionFc(double rho, double i1, double q);
299  double functionX(double q);
305  double functionXDQ(double q);
312  double yieldFunction1(double rho, double i1);
320  double yieldFunction2(double rho, double i1, double q);
326  double yieldFunction3(double i1);
331  void solveQ0(double &answer);
338  void computeAndSetBulkAndShearModuli(double &bulkModulus, double &shearModulus, GaussPoint *gp);
344  void performStressReturn(GaussPoint *gp, const FloatArray &strain);
353  void computePlastStrainDirM1(FloatArray &answer, const FloatArray &stressDeviator, double rho, double i1, double q);
362  void computePlastStrainDirM2(FloatArray &answer, const FloatArray &stressDeviator, double rho, double i1, double q);
371  void computePlastStrainDirM3(FloatArray &answer, const FloatArray &stressDeviator, double rho, double i1, double q);
378  double functionH(double q, double tempQ);
384  double functionHDQ(double tempQ);
393  double functionI1(double q, double tempQ, double i1, double bulkModulus);
400  double functionI1DQ(double tempQ, double bulkModulus);
407  void performF1return(double i1, double rho, GaussPoint *gp);
414  void performF2return(double i1, double rho, GaussPoint *gp);
421  void computeQFromPlastVolEps(double &answer, double q, double deltaVolumetricPlasticStrain);
429  double computeDeltaGamma2(double tempQ, double q, double i1, double bulkModulus);
437  double computeDeltaGamma2DQ(double tempQ, double q, double i1, double bulkModulus);
447  double fTempR2(double tempQ, double q, double i1, double rho, double bulkModulus, double shearModulus);
448 
449 public:
451  DustMaterial(int n, Domain * d);
453  virtual ~DustMaterial();
454 
456 
457  virtual const char *giveClassName() const { return "DustMaterial"; }
458  virtual const char *giveInputRecordName() const { return _IFT_DustMaterial_Name; }
459 
460  virtual void giveRealStressVector_3d(FloatArray &answer, GaussPoint *gp,
461  const FloatArray &strainVector, TimeStep *tStep);
462 
463 
464  virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer,
465  MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep);
466 
467  virtual int setIPValue(const FloatArray &value, GaussPoint *gp, InternalStateType type);
468 
469  virtual int giveIPValue(FloatArray &answer,
470  GaussPoint *gp,
471  InternalStateType type,
472  TimeStep *tStep);
473 
474  virtual bool isCharacteristicMtrxSymmetric(MatResponseMode rMode) { return false; }
475 
476  virtual void giveThermalDilatationVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
477  {
478  LEMaterial->giveThermalDilatationVector(answer, gp, tStep);
479  }
480 
481  virtual MaterialStatus *CreateStatus(GaussPoint *gp) const;
482 
483  double giveQ0() const { return q0; }
484 };
485 } // end namespace oofem
486 #endif // dustmat_h
double shearModulus
Current shear modulus.
Definition: dustmat.h:92
double bulkModulus
Current bulk modulus.
Definition: dustmat.h:90
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
double newtonTol
Tollerance for iterative methods.
Definition: dustmat.h:264
void letQBe(double v)
Assign the value of variable q.
Definition: dustmat.h:178
virtual ~DustMaterialStatus()
Destructor.
Definition: dustmat.C:64
GaussPoint * gp
Associated integration point.
Class and object Domain.
Definition: domain.h:115
void letTempStateFlagBe(int v)
Assign the temp value of the state flag.
Definition: dustmat.h:167
double giveYoungsModulus()
Get the value of actual Young's modulus of the status.
Definition: dustmat.h:209
double wHard
Parameter determining hardening law (parameter W in original publication)
Definition: dustmat.h:260
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
DustMaterialStatus(int n, Domain *d, GaussPoint *gp, double q0)
Constructor.
Definition: dustmat.C:52
This class implements a structural material status information.
Definition: structuralms.h:65
void letTempQBe(double v)
Assign the temp value of variable q.
Definition: dustmat.h:162
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
Definition: dustmat.C:125
int hardeningType
Parameter determining hardening type.
Definition: dustmat.h:252
IsotropicLinearElasticMaterial * LEMaterial
Pointer for linear elastic material.
Definition: dustmat.h:237
virtual const char * giveClassName() const
Definition: dustmat.h:114
const FloatArray & giveTempPlasticStrain() const
Get the temp value of the full plastic strain vector from the material status.
Definition: dustmat.h:141
MatResponseMode
Describes the character of characteristic material matrix.
const FloatArray & givePlasticStrain() const
Get the full plastic strain vector from the material status.
Definition: dustmat.h:120
This class implements nonassociated multisurface plasticity model.
Definition: dustmat.h:233
int giveTempStateFlag() const
Get the temp value of the state flag from the material status.
Definition: dustmat.h:151
virtual const char * giveClassName() const
Definition: dustmat.h:457
void letPlasticStrainBe(const FloatArray &v)
Assign the value of plastic strain.
Definition: dustmat.h:173
stateFlagValues
Values of history variable stateFlag.
Definition: dustmat.h:72
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Definition: dustmat.C:68
FloatArray tempPlasticStrain
Definition: dustmat.h:83
#define _IFT_DustMaterial_Name
Definition: dustmat.h:46
double giveTempQ() const
Get the temp value of the hardening variable q from the material status.
Definition: dustmat.h:146
double youngsModulus
Current Young's modulus.
Definition: dustmat.h:94
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: matstatus.h:140
This class implements an isotropic linear elastic material in a finite element problem.
double x0
Parameter determining shape of yield surface (param X0 in original publication)
Definition: dustmat.h:256
double theta
Parameter determining shape of yield surface.
Definition: dustmat.h:246
double alpha
Parameter determining shape of yield surface.
Definition: dustmat.h:240
int giveStateFlag() const
Get the state flag from the material status.
Definition: dustmat.h:135
void letTempPlasticStrainBe(const FloatArray &v)
Assign the temp value of plastic strain.
Definition: dustmat.h:157
This class implements material status for dust material model.
Definition: dustmat.h:68
double giveVolumetricPlasticStrain() const
Get the full plastic strain vector from the material status.
Definition: dustmat.h:125
double q0
Parameter determining shape of yield surface.
Definition: dustmat.h:258
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Definition: dustmat.C:78
virtual const char * giveInputRecordName() const
Definition: dustmat.h:458
virtual bool isCharacteristicMtrxSymmetric(MatResponseMode rMode)
Returns true if stiffness matrix of receiver is symmetric Default implementation returns true...
Definition: dustmat.h:474
double giveBulkModulus()
Get the value of actual bulk modulus of the status.
Definition: dustmat.h:199
Abstract base class representing a material status information.
Definition: matstatus.h:84
double giveQ() const
Get the value of hardening variable q from the material status.
Definition: dustmat.h:130
Class representing vector of real numbers.
Definition: floatarray.h:82
FloatArray strainVector
Equilibrated strain vector in reduced form.
Definition: structuralms.h:69
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
Definition: dustmat.C:139
double giveQ0() const
Definition: dustmat.h:483
double dHard
Parameter determining hardening law (parameter D in original publication)
Definition: dustmat.h:262
Class representing the general Input Record.
Definition: inputrecord.h:101
void setYoungsModulus(double v)
Assign the value of actual Young's modulus of the status.
Definition: dustmat.h:194
double giveShearModulus()
Get the value of actual shear modulus of the status.
Definition: dustmat.h:204
virtual void giveThermalDilatationVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Returns a vector of coefficients of thermal dilatation in direction of each material principal (local...
double mStiff
Parameter increasing stiffness (parameter M in original publication)
Definition: dustmat.h:254
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Definition: contextmode.h:43
double beta
Parameter determining shape of yield surface.
Definition: dustmat.h:242
Abstract base class for all "structural" constitutive models.
void setShearModulus(double v)
Assign the value of actual shear modulus of the status.
Definition: dustmat.h:189
double lambda
Parameter determining shape of yield surface.
Definition: dustmat.h:244
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual void giveThermalDilatationVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Returns a vector of coefficients of thermal dilatation in direction of each material principal (local...
Definition: dustmat.h:476
Class representing integration point in finite element program.
Definition: gausspoint.h:93
int stateFlag
Indicates the state (i.e. elastic, yielding, unloading) of the Gauss point.
Definition: dustmat.h:97
Class representing solution step.
Definition: timestep.h:80
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
Definition: dustmat.C:88
double ft
Parameter determining shape of yield surface (param T in original publication)
Definition: dustmat.h:248
int newtonIter
Maximum number of iterations for iterative methods.
Definition: dustmat.h:266
FloatArray plasticStrain
Plastic strain.
Definition: dustmat.h:82
double q
Hardening parameter q.
Definition: dustmat.h:86
double rEll
Parameter determining shape of yield surface (param R in original publication)
Definition: dustmat.h:250
void setBulkModulus(double v)
Assign the value of actual bulk modulus of the status.
Definition: dustmat.h:184

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