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