xc
PressureDependMultiYield.h
1 // -*-c++-*-
2 //----------------------------------------------------------------------------
3 // XC program; finite element analysis code
4 // for structural analysis and design.
5 //
6 // Copyright (C) Luis C. Pérez Tato
7 //
8 // This program derives from OpenSees <http://opensees.berkeley.edu>
9 // developed by the «Pacific earthquake engineering research center».
10 //
11 // Except for the restrictions that may arise from the copyright
12 // of the original program (see copyright_opensees.txt)
13 // XC is free software: you can redistribute it and/or modify
14 // it under the terms of the GNU General Public License as published by
15 // the Free Software Foundation, either version 3 of the License, or
16 // (at your option) any later version.
17 //
18 // This software is distributed in the hope that it will be useful, but
19 // WITHOUT ANY WARRANTY; without even the implied warranty of
20 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 // GNU General Public License for more details.
22 //
23 //
24 // You should have received a copy of the GNU General Public License
25 // along with this program.
26 // If not, see <http://www.gnu.org/licenses/>.
27 //----------------------------------------------------------------------------
28 //<<<<<<< PressureDependMultiYield.h
29 // $Revision: 1.19 $
30 // $Date: 2004/06/15 18:58:01 $
31 //=======
32 // $Revision: 1.19 $
33 // $Date: 2004/06/15 18:58:01 $
34 //>>>>>>> 1.7
35 // $Source: /usr/local/cvs/OpenSees/SRC/material/nD/soil/PressureDependMultiYield.h,v $
36 
37 // Written: ZHY
38 // Created: August 2000
39 
40 
41 // Description: This file contains the class prototype for PressureDependMultiYield.
42 //
43 // What: "@(#) PressureDependMultiYield.h, revA"
44 
45 #ifndef PressureDependMultiYield_h
46 #define PressureDependMultiYield_h
47 
48 #include "material/nD/soil/PressureDependMultiYieldBase.h"
49 
50 namespace XC {
51 
52 class MultiYieldSurface;
53 
55 //
58  {
59  private:
60  // user supplied
61  static std::vector<double> liquefyParam4x;
62 
63  mutable T2Vector reversalStress;
64  mutable T2Vector lockStress;
65 
66  T2Vector reversalStressCommitted;
67  T2Vector lockStressCommitted;
68 
69  // Called by constructor
70  void setUpSurfaces(double *);
71  void initStrainUpdate(void);
72 
73  // Return num_strain_subincre
74  int isCriticalState(const T2Vector & stress) const;
75  void updatePPZ(const T2Vector & stress) const;
76  void PPZTranslation(const T2Vector & contactStress) const;
77  double getPPZLimits(int which, const T2Vector & contactStress) const;
78  double getPlasticPotential(const T2Vector & stress, const T2Vector & surfaceNormal) const;
79  //return 1 if stress locked; o/w return 0.
80  int stressCorrection(int crossedSurface) const;
81 
82  protected:
83  int sendData(Communicator &);
84  int recvData(const Communicator &);
85  public:
86  // Initialization constructor
87  PressureDependMultiYield(int tag,
88  int nd,
89  double rho,
90  double refShearModul,
91  double refBulkModul,
92  double frictionAng,
93  double peakShearStra,
94  double refPress,
95  double pressDependCoe,
96  double phaseTransformAngle,
97  double contractionParam1,
98  double dilationParam1,
99  double dilationParam2,
100  double liquefactionParam1,
101  double liquefactionParam2,
102  double liquefactionParam4,
103  int numberOfYieldSurf = 20,
104  double * gredu = 0,
105  double e = 0.6,
106  double volLimit1 = 0.9,
107  double volLimit2 = 0.02,
108  double volLimit3 = 0.7,
109  double atm = 101.,
110  double cohesi = 0.1,
111  double hv = 0.,
112  double pv = 1.);
113 
114  PressureDependMultiYield(int tag);
115 
116  // Default constructor
118 
119  // Copy constructor
121 
122  // Calculates current tangent stiffness.
123  const Matrix &getTangent(void) const;
124 
125  // Calculates the corresponding stress increment(rate), for a given strain increment.
126  const Vector &getStress(void) const;
127 
128  // Return an exact copy of itself.
129  NDMaterial *getCopy(void) const;
130 
131  // Return a copy of itself if "code"="PressureDependMultiYield", otherwise return null.
132  NDMaterial *getCopy(const std::string &) const;
133 
134  // Return the string "PressureDependMultiYield".
135  const std::string &getType(void) const ;
136 
137  int sendSelf(Communicator &);
138  int recvSelf(const Communicator &);
139  void Print(std::ostream &s, int flag =0) const;
140  // RWB; PyLiq1 & TzLiq1 need to see the excess pore pressure and initial stresses.
141  friend class PyLiq1;
142  friend class TzLiq1;
143  };
144 } // end of XC namespace
145 
146 #endif
Float vector abstraction.
Definition: Vector.h:94
int recvData(const Communicator &)
Receives object members through the communicator argument.
Definition: PressureDependMultiYield.cpp:362
Communication parameters between processes.
Definition: Communicator.h:66
int sendSelf(Communicator &)
Sends object through the communicator argument.
Definition: PressureDependMultiYield.cpp:373
NDMaterial * getCopy(void) const
Virtual constructor.
Definition: PressureDependMultiYield.cpp:332
Uniaxial p-y material that incorporates liquefaction effects.
Definition: PyLiq1.h:61
void Print(std::ostream &s, int flag=0) const
Print stuff.
Definition: PressureDependMultiYield.cpp:405
const Matrix & getTangent(void) const
Return the tangent stiffness matrix at the current trial strain.
Definition: PressureDependMultiYield.cpp:134
Uniaxial t-z material that incorporates liquefaction effects.
Definition: TzLiq1.h:61
??.
Definition: PressureDependMultiYieldBase.h:44
Base class for 2D and 3D materials.
Definition: NDMaterial.h:101
Open source finite element program for structural analysis.
Definition: ContinuaReprComponent.h:35
??.
Definition: PressureDependMultiYield.h:57
Matrix of floats.
Definition: Matrix.h:111
Second order tensor vector class.
Definition: T2Vector.h:65
int recvSelf(const Communicator &)
Receives object through the communicator argument.
Definition: PressureDependMultiYield.cpp:387
int sendData(Communicator &)
Send object members through the communicator argument.
Definition: PressureDependMultiYield.cpp:351
const Vector & getStress(void) const
Returns the material stress vector at the current trial strain.
Definition: PressureDependMultiYield.cpp:243