xc
Pinching4Material.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 /* ****************************************************************** **
29 ** OpenSees - Open System for Earthquake Engineering Simulation **
30 ** Pacific Earthquake Engineering Research Center **
31 ** **
32 ** **
33 ** (C) Copyright 1999, The Regents of the University of California **
34 ** All Rights Reserved. **
35 ** **
36 ** Commercial use of this program without express permission of the **
37 ** University of California, Berkeley, is strictly prohibited. See **
38 ** file 'COPYRIGHT' in main directory for information on usage and **
39 ** redistribution, and for a DISCLAIMER OF ALL WARRANTIES. **
40 ** **
41 ** Developed by: **
42 ** Frank McKenna (fmckenna@ce.berkeley.edu) **
43 ** Gregory L. Fenves (fenves@ce.berkeley.edu) **
44 ** Filip C. Filippou (filippou@ce.berkeley.edu) **
45 ** **
46 ** ****************************************************************** */
47 
48 // $Revision: 1.2 $
49 // $Date: 2004/10/06 19:21:12 $
50 // $Source: /usr/local/cvs/OpenSees/SRC/material/uniaxial/Pinching4Material.h,v $
51 
52 
53 // Written: NM (nmitra@u.washington.edu)
54 // Created: December 2001
55 // Updated: September 2004
56 //
57 // Description: This file contains the class definition for
58 
59 
60 #ifndef Pinching4Material_h
61 #define Pinching4Material_h
62 
63 #include <material/uniaxial/UniaxialMaterial.h>
64 #include <utility/handler/FileStream.h>
65 #include <utility/matrix/Vector.h>
66 
67 namespace XC {
69 //
80  {
81  private:
82  // Backbone parameters
83  double stress1p; double strain1p; double stress2p; double strain2p;
84  double stress3p; double strain3p; double stress4p; double strain4p;
85  double stress1n; double strain1n; double stress2n; double strain2n;
86  double stress3n; double strain3n; double stress4n; double strain4n;
87  Vector envlpPosStress; Vector envlpPosStrain;
88  Vector envlpNegStress; Vector envlpNegStrain;
89 
90  int tagMat; // material tag
91 
92  // Damage parameters
93 
94  double gammaK1; double gammaK2; double gammaK3; double gammaK4; double gammaKLimit;
95  double gammaD1; double gammaD2; double gammaD3; double gammaD4; double gammaDLimit;
96  double gammaF1; double gammaF2; double gammaF3; double gammaF4; double gammaFLimit;
97  double gammaE;
98  double TnCycle, CnCycle; // number of cycles contributing to damage calculation
99  int DmgCyc; // flag for indicating whether no. of cycles are to be used for damage calculation
100 
101  // unloading-reloading parameters
102  double rDispP; double rForceP; double uForceP;
103  double rDispN; double rForceN; double uForceN;
104 
105  Vector state3Stress; Vector state3Strain; Vector state4Stress; Vector state4Strain;
106 
107  Vector envlpPosDamgdStress; Vector envlpNegDamgdStress;
108 
109  // Trial State Variables
110  double Tstress;
111  double Tstrain;
112  double Ttangent;
113 
114  // Converged Material History parameters
115  int Cstate;
116  double Cstrain;
117  double Cstress;
118  double CstrainRate;
119  double lowCstateStrain;
120  double lowCstateStress;
121  double hghCstateStrain;
122  double hghCstateStress;
123  double CminStrainDmnd;
124  double CmaxStrainDmnd;
125  double Cenergy;
126  double CgammaK;
127  double CgammaD;
128  double CgammaF;
129  double gammaKUsed;
130  double gammaFUsed;
131 
132  // Trial Material History Parameters
133  int Tstate;
134  double dstrain;
135  double TstrainRate;
136  double lowTstateStrain;
137  double lowTstateStress;
138  double hghTstateStrain;
139  double hghTstateStress;
140  double TminStrainDmnd;
141  double TmaxStrainDmnd;
142  double Tenergy;
143  double TgammaK;
144  double TgammaD;
145  double TgammaF;
146 
147  // strength and stiffness parameters;
148  double kElasticPos;
149  double kElasticNeg;
150  double kElasticPosDamgd;
151  double kElasticNegDamgd;
152  double uMaxDamgd;
153  double uMinDamgd;
154 
155 
156  // energy parameters
157  double energyCapacity;
158  double kunload;
159  double elasticStrainEnergy;
160 
161  void SetEnvelope(void);
162  void getstate(double, double);
163  double posEnvlpStress(double);
164  double posEnvlpTangent(double);
165  double negEnvlpStress(double);
166  double negEnvlpTangent(double);
167  void getState3(Vector& , Vector& , double);
168  void getState4(Vector& , Vector& , double);
169  double Envlp3Tangent(Vector , Vector , double);
170  double Envlp3Stress(Vector , Vector , double);
171  double Envlp4Tangent(Vector , Vector , double);
172  double Envlp4Stress(Vector , Vector , double);
173  void updateDmg(double, double);
174  public :
175  Pinching4Material(int tag,
176  double stress1p, double strain1p, double stress2p, double strain2p,
177  double stress3p, double strain3p, double stress4p, double strain4p,
178  double stress1n, double strain1n, double stress2n, double strain2n,
179  double stress3n, double strain3n, double stress4n, double strain4n,
180  double rDispP, double rForceP, double uForceP,
181  double rDispN, double rForceN, double uForceN,
182  double gammaK1, double gammaK2, double gammaK3,
183  double gammaK4, double gammaKLimit,
184  double gammaD1, double gammaD2, double gammaD3,
185  double gammaD4, double gammaDLimit,
186  double gammaF1, double gammaF2, double gammaF3,
187  double gammaF4, double gammaFLimit, double gammaE, int DmgCyc);
188 
189  Pinching4Material(int tag,
190  double stress1p, double strain1p, double stress2p, double strain2p,
191  double stress3p, double strain3p, double stress4p, double strain4p,
192  double rDispP, double rForceP, double uForceP,
193  double gammaK1, double gammaK2, double gammaK3,
194  double gammaK4, double gammaKLimit,
195  double gammaD1, double gammaD2, double gammaD3,
196  double gammaD4, double gammaDLimit,
197  double gammaF1, double gammaF2, double gammaF3,
198  double gammaF4, double gammaFLimit, double gammaE, int DmgCyc);
199 
200  Pinching4Material(int tag);
201  Pinching4Material(void);
202 
203  int setTrialStrain(double strain, double strainRate = 0.0);
204  double getStrain(void) const;
205  double getStress(void) const;
206  double getTangent(void) const;
207  double getInitialTangent(void) const;
208 
209  int commitState(void);
210  int revertToLastCommit(void);
211  int revertToStart(void);
212 
213  UniaxialMaterial *getCopy(void) const;
214 
215  int sendSelf(Communicator &);
216  int recvSelf(const Communicator &);
217  void Print(std::ostream &s, int flag = 0) const;
218  int setParameter(const std::vector<std::string> &argv, Parameter &param);
219  int updateParameter(int parameterID, Information &info);
220  };
221 } // end of XC namespace
222 #endif
int revertToStart(void)
Revert the material to its initial state.
Definition: Pinching4Material.cpp:378
Float vector abstraction.
Definition: Vector.h:94
Information about an element.
Definition: Information.h:81
Communication parameters between processes.
Definition: Communicator.h:66
int setParameter(const std::vector< std::string > &argv, Parameter &param)
Sets the value param to the parameter argv.
Definition: Pinching4Material.cpp:1181
void Print(std::ostream &s, int flag=0) const
Print stuff.
Definition: Pinching4Material.cpp:437
Base class for uniaxial materials.
Definition: UniaxialMaterial.h:93
int commitState(void)
Commit the state of the material.
Definition: Pinching4Material.cpp:312
int setTrialStrain(double strain, double strainRate=0.0)
Sets the value of the trial strain.
Definition: Pinching4Material.cpp:222
int updateParameter(int parameterID, Information &info)
Updates the parameter identified by parameterID with info.
Definition: Pinching4Material.cpp:1301
double getTangent(void) const
Return the material tangent stiffness.
Definition: Pinching4Material.cpp:304
double getStress(void) const
Return the current value of stress.
Definition: Pinching4Material.cpp:300
int sendSelf(Communicator &)
Send the object.
Definition: Pinching4Material.cpp:427
int recvSelf(const Communicator &)
Receive the object.
Definition: Pinching4Material.cpp:432
Open source finite element program for structural analysis.
Definition: ContinuaReprComponent.h:35
double getInitialTangent(void) const
Return the material initial stiffness.
Definition: Pinching4Material.cpp:308
Parameter.
Definition: Parameter.h:68
UniaxialMaterial * getCopy(void) const
Virtual constructor.
Definition: Pinching4Material.cpp:424
Pinching material which is defined by 4 points on the positive and negative envelopes and a bunch of ...
Definition: Pinching4Material.h:79