XC Open source finite element analysis program
HystereticMaterial.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.6 $
48 // $Date: 2003/02/14 23:01:39 $
49 // $Source: /usr/local/cvs/OpenSees/SRC/material/uniaxial/HystereticMaterial.h,v $
50 
51 // Written: MHS
52 // Created: July 2000
53 //
54 // Description: This file contains the class definition for
55 // HystereticMaterial. HystereticMaterial provides the implementation
56 // of a one-dimensional hysteretic model with pinching of both
57 // force and deformation, damage due to deformation and energy, and
58 // degraded unloading stiffness based on maximum ductility. This
59 // is a modified implementation of Hyster2.f90 by Filippou.
60 
61 #ifndef HystereticMaterial_h
62 #define HystereticMaterial_h
63 
64 #include "UniaxialMaterial.h"
65 #include "UniaxialStateVars.h"
66 
67 namespace XC {
69 //
76  {
77  private:
78  // Pinching parameters
79  double pinchX; // Deformation pinching
80  double pinchY; // Force pinching
81 
82  // Damage parameters
83  double damfc1; // Deformation
84  double damfc2; // Energy
85 
86  // Unloading parameter
87  double beta;
88 
89  // Trial history variables
90  double TrotMax;
91  double TrotMin;
92  double TrotPu;
93  double TrotNu;
94  double TenergyD;
95  int TloadIndicator;
96 
97  // Trial state variables
98  UniaxialStateVars trial;
99 
100  // Converged history variables
101  double CrotMax;
102  double CrotMin;
103  double CrotPu;
104  double CrotNu;
105  double CenergyD;
106  int CloadIndicator;
107 
108  // Converged state variables
109  UniaxialStateVars converged;
110 
111  // Backbone parameters
112  double mom1p, rot1p;
113  double mom2p, rot2p;
114  double mom3p, rot3p;
115  double mom1n, rot1n;
116  double mom2n, rot2n;
117  double mom3n, rot3n;
118 
119  double E1p, E1n;
120  double E2p, E2n;
121  double E3p, E3n;
122 
123  double energyA;
124 
125  void setEnvelope(void);
126 
127  double posEnvlpStress(double strain);
128  double negEnvlpStress(double strain);
129 
130  double posEnvlpTangent(double strain);
131  double negEnvlpTangent(double strain);
132 
133  double posEnvlpRotlim(double strain);
134  double negEnvlpRotlim(double strain);
135 
136  void positiveIncrement(double dStrain);
137  void negativeIncrement(double dStrain);
138  protected:
139  int sendData(CommParameters &cp);
140  int recvData(const CommParameters &cp);
141  public:
142  HystereticMaterial(int tag,
143  double mom1p, double rot1p, double mom2p, double rot2p,
144  double mom3p, double rot3p,
145  double mom1n, double rot1n, double mom2n, double rot2n,
146  double mom3n, double rot3n,
147  double pinchX, double pinchY,
148  double damfc1 = 0.0, double damfc2 = 0.0,
149  double beta = 0.0);
150  HystereticMaterial(int tag,
151  double mom1p, double rot1p, double mom2p, double rot2p,
152  double mom1n, double rot1n, double mom2n, double rot2n,
153  double pinchX, double pinchY,
154  double damfc1 = 0.0, double damfc2 = 0.0,
155  double beta = 0.0);
156  HystereticMaterial(int tag);
158 
159  int setTrialStrain(double strain, double strainRate = 0.0);
160  double getStrain(void) const;
161  double getStress(void) const;
162  double getTangent(void) const;
163  inline double getInitialTangent(void) const {return E1p;};
164 
165  int commitState(void);
166  int revertToLastCommit(void);
167  int revertToStart(void);
168 
169  UniaxialMaterial *getCopy(void) const;
170 
171  int sendSelf(CommParameters &);
172  int recvSelf(const CommParameters &);
173  void Print(std::ostream &s, int flag =0);
174  };
175 } // end of XC namespace
176 
177 #endif
HystereticMaterial provides the implementation of a one-dimensional hysteretic model with pinching of...
Definition: HystereticMaterial.h:75
void Print(std::ostream &s, int flag=0)
Imprime el objeto.
Definition: HystereticMaterial.cpp:479
int recvSelf(const CommParameters &)
Receives object through the channel being passed as parameter.
Definition: HystereticMaterial.cpp:461
UniaxialMaterial * getCopy(void) const
Virtual constructor.
Definition: HystereticMaterial.cpp:411
UniaxialStateVars stores values for material strain, stress and stiffness.
Definition: UniaxialStateVars.h:38
int recvData(const CommParameters &cp)
Receives object members through the channel being passed as parameter.
Definition: HystereticMaterial.cpp:431
int sendSelf(CommParameters &)
Sends object through the channel being passed as parameter.
Definition: HystereticMaterial.cpp:447
Communication parameters between processes.
Definition: CommParameters.h:65
int sendData(CommParameters &cp)
Send object members through the channel being passed as parameter.
Definition: HystereticMaterial.cpp:415
================================================================================
Definition: ContinuaReprComponent.h:34
Base class for uniaxial materials.
Definition: UniaxialMaterial.h:88