XC Open source finite element analysis program
Pinching4Material.h
1 //----------------------------------------------------------------------------
2 // XC program; finite element analysis code
3 // for structural analysis and design.
4 //
5 // Copyright (C) Luis Claudio Pérez Tato
6 //
7 // This program derives from OpenSees <http://opensees.berkeley.edu>
8 // developed by the «Pacific earthquake engineering research center».
9 //
10 // Except for the restrictions that may arise from the copyright
11 // of the original program (see copyright_opensees.txt)
12 // XC is free software: you can redistribute it and/or modify
13 // it under the terms of the GNU General Public License as published by
14 // the Free Software Foundation, either version 3 of the License, or
15 // (at your option) any later version.
16 //
17 // This software is distributed in the hope that it will be useful, but
18 // WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 // GNU General Public License for more details.
21 //
22 //
23 // You should have received a copy of the GNU General Public License
24 // along with this program.
25 // If not, see <http://www.gnu.org/licenses/>.
26 //----------------------------------------------------------------------------
27 /* ****************************************************************** **
28 ** OpenSees - Open System for Earthquake Engineering Simulation **
29 ** Pacific Earthquake Engineering Research Center **
30 ** **
31 ** **
32 ** (C) Copyright 1999, The Regents of the University of California **
33 ** All Rights Reserved. **
34 ** **
35 ** Commercial use of this program without express permission of the **
36 ** University of California, Berkeley, is strictly prohibited. See **
37 ** file 'COPYRIGHT' in main directory for information on usage and **
38 ** redistribution, and for a DISCLAIMER OF ALL WARRANTIES. **
39 ** **
40 ** Developed by: **
41 ** Frank McKenna (fmckenna@ce.berkeley.edu) **
42 ** Gregory L. Fenves (fenves@ce.berkeley.edu) **
43 ** Filip C. Filippou (filippou@ce.berkeley.edu) **
44 ** **
45 ** ****************************************************************** */
46 
47 // $Revision: 1.2 $
48 // $Date: 2004/10/06 19:21:12 $
49 // $Source: /usr/local/cvs/OpenSees/SRC/material/uniaxial/Pinching4Material.h,v $
50 
51 
52 // Written: NM (nmitra@u.washington.edu)
53 // Created: December 2001
54 // Updated: September 2004
55 //
56 // Description: This file contains the class defination for
57 // Pinching material which is defined by 4 points on the positive and
58 // negative envelopes and a bunch of damage parameters. The material accounts for
59 // 3 types of damage rules : Strength degradation, Stiffness degradation,
60 // unloading stiffness degradation.
61 // Updates: damage calculations and several bug fixes
62 
63 
64 #ifndef Pinching4Material_h
65 #define Pinching4Material_h
66 
67 #include <material/uniaxial/UniaxialMaterial.h>
68 #include <utility/handler/FileStream.h>
69 #include <utility/matrix/Vector.h>
70 
71 namespace XC {
73 //
76  {
77  private:
78  // Backbone parameters
79  double stress1p; double strain1p; double stress2p; double strain2p;
80  double stress3p; double strain3p; double stress4p; double strain4p;
81  double stress1n; double strain1n; double stress2n; double strain2n;
82  double stress3n; double strain3n; double stress4n; double strain4n;
83  Vector envlpPosStress; Vector envlpPosStrain;
84  Vector envlpNegStress; Vector envlpNegStrain;
85 
86  int tagMat; // material tag
87 
88  // Damage parameters
89 
90  double gammaK1; double gammaK2; double gammaK3; double gammaK4; double gammaKLimit;
91  double gammaD1; double gammaD2; double gammaD3; double gammaD4; double gammaDLimit;
92  double gammaF1; double gammaF2; double gammaF3; double gammaF4; double gammaFLimit;
93  double gammaE;
94  double TnCycle, CnCycle; // number of cycles contributing to damage calculation
95  int DmgCyc; // flag for indicating whether no. of cycles are to be used for damage calculation
96 
97  // unloading-reloading parameters
98  double rDispP; double rForceP; double uForceP;
99  double rDispN; double rForceN; double uForceN;
100 
101  Vector state3Stress; Vector state3Strain; Vector state4Stress; Vector state4Strain;
102 
103  Vector envlpPosDamgdStress; Vector envlpNegDamgdStress;
104 
105  // Trial State Variables
106  double Tstress;
107  double Tstrain;
108  double Ttangent;
109 
110  // Converged Material History parameters
111  int Cstate;
112  double Cstrain;
113  double Cstress;
114  double CstrainRate;
115  double lowCstateStrain;
116  double lowCstateStress;
117  double hghCstateStrain;
118  double hghCstateStress;
119  double CminStrainDmnd;
120  double CmaxStrainDmnd;
121  double Cenergy;
122  double CgammaK;
123  double CgammaD;
124  double CgammaF;
125  double gammaKUsed;
126  double gammaFUsed;
127 
128  // Trial Material History Parameters
129  int Tstate;
130  double dstrain;
131  double TstrainRate;
132  double lowTstateStrain;
133  double lowTstateStress;
134  double hghTstateStrain;
135  double hghTstateStress;
136  double TminStrainDmnd;
137  double TmaxStrainDmnd;
138  double Tenergy;
139  double TgammaK;
140  double TgammaD;
141  double TgammaF;
142 
143  // strength and stiffness parameters;
144  double kElasticPos;
145  double kElasticNeg;
146  double kElasticPosDamgd;
147  double kElasticNegDamgd;
148  double uMaxDamgd;
149  double uMinDamgd;
150 
151 
152  // energy parameters
153  double energyCapacity;
154  double kunload;
155  double elasticStrainEnergy;
156 
157  void SetEnvelope(void);
158  void getstate(double, double);
159  double posEnvlpStress(double);
160  double posEnvlpTangent(double);
161  double negEnvlpStress(double);
162  double negEnvlpTangent(double);
163  void getState3(Vector& , Vector& , double);
164  void getState4(Vector& , Vector& , double);
165  double Envlp3Tangent(Vector , Vector , double);
166  double Envlp3Stress(Vector , Vector , double);
167  double Envlp4Tangent(Vector , Vector , double);
168  double Envlp4Stress(Vector , Vector , double);
169  void updateDmg(double, double);
170  public :
171  Pinching4Material(int tag,
172  double stress1p, double strain1p, double stress2p, double strain2p,
173  double stress3p, double strain3p, double stress4p, double strain4p,
174  double stress1n, double strain1n, double stress2n, double strain2n,
175  double stress3n, double strain3n, double stress4n, double strain4n,
176  double rDispP, double rForceP, double uForceP,
177  double rDispN, double rForceN, double uForceN,
178  double gammaK1, double gammaK2, double gammaK3,
179  double gammaK4, double gammaKLimit,
180  double gammaD1, double gammaD2, double gammaD3,
181  double gammaD4, double gammaDLimit,
182  double gammaF1, double gammaF2, double gammaF3,
183  double gammaF4, double gammaFLimit, double gammaE, int DmgCyc);
184 
185  Pinching4Material(int tag,
186  double stress1p, double strain1p, double stress2p, double strain2p,
187  double stress3p, double strain3p, double stress4p, double strain4p,
188  double rDispP, double rForceP, double uForceP,
189  double gammaK1, double gammaK2, double gammaK3,
190  double gammaK4, double gammaKLimit,
191  double gammaD1, double gammaD2, double gammaD3,
192  double gammaD4, double gammaDLimit,
193  double gammaF1, double gammaF2, double gammaF3,
194  double gammaF4, double gammaFLimit, double gammaE, int DmgCyc);
195 
196  Pinching4Material(int tag);
197  Pinching4Material(void);
198 
199  int setTrialStrain(double strain, double strainRate = 0.0);
200  double getStrain(void) const;
201  double getStress(void) const;
202  double getTangent(void) const;
203  double getInitialTangent(void) const;
204 
205  int commitState(void);
206  int revertToLastCommit(void);
207  int revertToStart(void);
208 
209  UniaxialMaterial *getCopy(void) const;
210 
211  int sendSelf(CommParameters &);
212  int recvSelf(const CommParameters &);
213  void Print(std::ostream &s, int flag = 0);
214  };
215 } // end of XC namespace
216 #endif
UniaxialMaterial * getCopy(void) const
Virtual constructor.
Definition: Pinching4Material.cpp:404
Definition: Vector.h:82
void Print(std::ostream &s, int flag=0)
Imprime el objeto.
Definition: Pinching4Material.cpp:504
??.
Definition: Pinching4Material.h:75
Communication parameters between processes.
Definition: CommParameters.h:65
================================================================================
Definition: ContinuaReprComponent.h:34
Base class for uniaxial materials.
Definition: UniaxialMaterial.h:88