xc
PressureMultiYieldBase.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 //PressureMultiYieldBase.h
29 
30 #ifndef PressureMultiYieldBase_h
31 #define PressureMultiYieldBase_h
32 
33 #include <material/nD/soil/SoilMaterialBase.h>
34 #include "T2Vector.h"
35 
36 
37 namespace XC {
38 
39 class MultiYieldSurface;
40 
42 //
45  {
46  protected:
47  // user supplied
48  static std::vector<double> rhox;
49  static std::vector<double> frictionAnglex;
50  static std::vector<double> peakShearStrainx;
51  static std::vector<double> refPressurex;
52  static std::vector<double> cohesionx;
53  static std::vector<double> pressDependCoeffx;
54  static std::vector<int> numOfSurfacesx;
55 
56  // internal
57  static std::vector<double> residualPressx;
58  static std::vector<double> stressRatioPTx;
59  static Matrix theTangent;
60  static T2Vector subStrainRate;
61 
62  mutable std::vector<MultiYieldSurface> theSurfaces; // NOTE: surfaces[0] is not used
63  mutable std::vector<MultiYieldSurface> committedSurfaces;
64  mutable int activeSurfaceNum;
65  mutable int committedActiveSurf;
66  mutable T2Vector currentStress;
67  mutable T2Vector trialStress;
68  T2Vector currentStrain;
69  T2Vector strainRate;
70 
71  protected:
72  void resizeIfNeeded(void);
73  void setup(int nd, double r, double frictionAng,double peakShearStra, double refPress, double pressDependCoe, double cohesi,int numberOfYieldSurf);
74  int sendData(Communicator &);
75  int recvData(const Communicator &);
76  public:
77  // Initialization constructor
78  PressureMultiYieldBase (int tag, int classTag, int nd, double rho, double frictionAng, double peakShearStra, double refPress, double pressDependCoe, double cohesi = 0.1,int numberOfYieldSurf = 20),
79 
80  PressureMultiYieldBase(int tag, int classTag);
83 
84  inline double getRho(void) const
85  {return rhox[matN];}
86  void setRho(const double &);
87 
88  inline double getFrictionAngle(void) const
89  { return frictionAnglex[matN];}
90  void setFrictionAngle(const double &);
91  inline double getRefPressure(void) const
92  { return refPressurex[matN]; }
93  void setRefPressure(const double &);
94  inline double getPeakShearStrain(void) const
95  { return peakShearStrainx[matN]; }
96  void setPeakShearStrain(const double &);
97  inline double getCohesion(void) const
98  { return cohesionx[matN]; }
99  void setCohesion(const double &);
100  inline double getPressDependCoeff(void) const
101  { return pressDependCoeffx[matN]; }
102  void setPressDependCoeff(const double &);
103  inline int getNumberOfSurfaces(void) const
104  { return numOfSurfacesx[matN]; }
105  void setNumberOfSurfaces(const int &);
106  };
107 } // end of XC namespace
108 
109 #endif
static std::vector< double > frictionAnglex
internal friction angle.
Definition: PressureMultiYieldBase.h:49
static std::vector< double > rhox
mass density
Definition: PressureMultiYieldBase.h:48
Definition: setup.py:1
Material that couples the responses of two phases: fluid and solid.
Definition: SoilMaterialBase.h:59
double getRho(void) const
Get material density.
Definition: PressureMultiYieldBase.h:84
Communication parameters between processes.
Definition: Communicator.h:66
int recvData(const Communicator &)
Receives object members through the communicator argument.
Definition: PressureMultiYieldBase.cc:225
static std::vector< double > pressDependCoeffx
pressure dependency coefficient
Definition: PressureMultiYieldBase.h:53
static std::vector< double > cohesionx
apparent cohesion.
Definition: PressureMultiYieldBase.h:52
static std::vector< int > numOfSurfacesx
number of yield surfaces.
Definition: PressureMultiYieldBase.h:54
static std::vector< double > peakShearStrainx
peak shear strain.
Definition: PressureMultiYieldBase.h:50
Open source finite element program for structural analysis.
Definition: ContinuaReprComponent.h:35
Matrix of floats.
Definition: Matrix.h:111
Second order tensor vector class.
Definition: T2Vector.h:65
void setRho(const double &)
Set material density.
Definition: PressureMultiYieldBase.cc:74
int sendData(Communicator &)
Send object members through the communicator argument.
Definition: PressureMultiYieldBase.cc:212
static std::vector< double > refPressurex
reference pressure.
Definition: PressureMultiYieldBase.h:51
??.
Definition: PressureMultiYieldBase.h:44