LimitStateMaterial.h

Go to the documentation of this file.
00001 /* ****************************************************************** **
00002 **    OpenSees - Open System for Earthquake Engineering Simulation    **
00003 **          Pacific Earthquake Engineering Research Center            **
00004 **                                                                    **
00005 **                                                                    **
00006 ** (C) Copyright 1999, The Regents of the University of California    **
00007 ** All Rights Reserved.                                               **
00008 **                                                                    **
00009 ** Commercial use of this program without express permission of the   **
00010 ** University of California, Berkeley, is strictly prohibited.  See   **
00011 ** file 'COPYRIGHT'  in main directory for information on usage and   **
00012 ** redistribution,  and for a DISCLAIMER OF ALL WARRANTIES.           **
00013 **                                                                    **
00014 ** Developed by:                                                      **
00015 **   Frank McKenna (fmckenna@ce.berkeley.edu)                         **
00016 **   Gregory L. Fenves (fenves@ce.berkeley.edu)                       **
00017 **   Filip C. Filippou (filippou@ce.berkeley.edu)                     **
00018 **                                                                    **
00019 ** ****************************************************************** */
00020                                                                         
00021 // Written: KJE
00022 // Created: July 2001
00023 // Modified July 2002
00024 // Based on HystereticMaterial by MHS
00025 //
00026 // Description: This file contains the class definition for 
00027 // LimitStateMaterial.  LimitStateMaterial is
00028 // a one-dimensional hysteretic model with pinching of both
00029 // force and deformation, damage due to deformation and energy, and
00030 // degraded unloading stiffness based on maximum ductility.  Based on 
00031 // HystereticMaterial which is a modified implementation of Hyster2.f90 
00032 // by Filippou.  
00033 //
00034 // Modified July 2002 by KJE to include the use of limitCurve to 
00035 // detect failure in hysteretic material (see commitState).
00036 // Option only available for 3 point specification. Behaves 
00037 // same as HystereticMaterial if no limit curve specified.
00038 //
00039 // All code specific to LimitStateMaterial seperated by ////////////////
00040 
00041 #ifndef LimitStateMaterial_h
00042 #define LimitStateMaterial_h
00043 
00044 #include <UniaxialMaterial.h>
00045 #include <LimitCurve.h>
00046 
00047 
00048 class LimitStateMaterial : public UniaxialMaterial
00049 {
00050         public:
00051                 LimitStateMaterial(int tag,
00052                         double mom1p, double rot1p, double mom2p, double rot2p,
00053                         double mom3p, double rot3p,
00054                         double mom1n, double rot1n, double mom2n, double rot2n,
00055                         double mom3n, double rot3n,
00056                         double pinchX, double pinchY,
00057                         double damfc1 = 0.0, double damfc2 = 0.0,
00058                         double beta = 0.0);
00059                 LimitStateMaterial(int tag,
00060                         double mom1p, double rot1p, double mom2p, double rot2p,
00061                         double mom1n, double rot1n, double mom2n, double rot2n,
00062                         double pinchX, double pinchY,
00063                         double damfc1 = 0.0, double damfc2 = 0.0,
00064                         double beta = 0.0);
00065                 LimitStateMaterial(int tag,
00066                         double mom1p, double rot1p, double mom2p, double rot2p,
00067                         double mom3p, double rot3p,
00068                         double mom1n, double rot1n, double mom2n, double rot2n,
00069                         double mom3n, double rot3n,
00070                         double pinchX, double pinchY,
00071                         double damfc1, double damfc2,
00072                         double beta, LimitCurve &theCurve, 
00073                         int curveType, int degrade);
00074                 LimitStateMaterial();
00075                 ~LimitStateMaterial();
00076 
00077                 const char *getClassType(void) const {return "LimitStateMaterial";};
00078 
00079             int setTrialStrain(double strain, double strainRate = 0.0);
00080             double getStrain(void);
00081             double getStress(void);
00082             double getTangent(void);
00083             double getInitialTangent(void) {return E1p;};
00084 
00085             int commitState(void);
00086             int revertToLastCommit(void);
00087             int revertToStart(void);
00088 
00089             UniaxialMaterial *getCopy(void);
00090                 
00091             int sendSelf(int commitTag, Channel &theChannel);  
00092             int recvSelf(int commitTag, Channel &theChannel, 
00093                          FEM_ObjectBroker &theBroker);    
00094     
00095             void Print(OPS_Stream &s, int flag =0);
00096 
00097             int setParameter (const char **argv, int argc, Parameter &param);
00098 
00099 
00100         protected:
00101 
00102         private:
00103                 // Pinching parameters
00104                 double pinchX;          // Deformation pinching
00105                 double pinchY;          // Force pinching
00106 
00107                 // Damage parameters
00108                 double damfc1;          // Deformation
00109                 double damfc2;          // Energy
00110 
00111                 // Unloading parameter
00112                 double beta;
00113 
00114                 // Trial history variables
00115                 double TrotMax;
00116                 double TrotMin;
00117                 double TrotPu;
00118                 double TrotNu;
00119                 double TenergyD;
00120                 int TloadIndicator;
00121 
00122                 // Trial state variables
00123                 double Ttangent;
00124                 double Tstress;
00125                 double Tstrain;
00126 
00127                 // Converged history variables
00128                 double CrotMax;
00129                 double CrotMin;
00130                 double CrotPu;
00131                 double CrotNu;
00132                 double CenergyD;
00133                 int CloadIndicator;
00134 
00135                 // Converged state variables
00136                 double Cstress;
00137                 double Cstrain;
00138 
00139                 // Backbone parameters
00140                 double mom1p, rot1p;
00141                 double mom2p, rot2p;
00142                 double mom3p, rot3p;
00143                 double mom1n, rot1n;
00144                 double mom2n, rot2n;
00145                 double mom3n, rot3n;
00146 
00147                 double E1p, E1n;
00148                 double E2p, E2n;
00149                 double E3p, E3n;
00150 
00151         double pinchX_orig;
00152         double pinchY_orig;
00153         double damfc1_orig;
00154         double damfc2_orig;
00155         double beta_orig;
00156         double mom1p_orig;
00157         double rot1p_orig;
00158         double mom2p_orig;
00159         double rot2p_orig;
00160         double mom3p_orig;
00161         double rot3p_orig;
00162         double mom1n_orig;
00163         double rot1n_orig;
00164         double mom2n_orig;
00165         double rot2n_orig;
00166         double mom3n_orig;
00167         double rot3n_orig;
00168 
00169         int constructorType;
00170 
00171 
00172                 double energyA;
00173 
00175                 // variables for LimitCurve option
00176                 int degrade;                    // option to force degradation in opposite direction due to degradation
00177                                                                 // in current direction (requires testing, not documented)
00178                                                                 // (0 = off, 1 = on)
00179                 int curveType;                  // type of limit curve 
00180                                                                 // (0 = no curve, 1 = axial curve, 
00181                                                                 // all other curves can be any other integer)
00182                 LimitCurve *theCurve;   // curve defining limit state
00183                 int CstateFlag;                 // Flag indicating if the limit state surface has been reached
00184                                                                 // (not reached = 0, reached for first time = 1, 
00185                                                                 // on limit curve = 2, off limit curve = 3, at residual capacity = 4)
00186                 double Ploss;                   // loss of axial load capacity.
00187                 double Kdeg;                    // degrading slope after failure
00188                 double Eelasticp;               // elastic stiffness used if off failure surface (for axial curve only)
00189                 double Eelasticn;
00191 
00192                 void setEnvelope(void);
00193 
00194                 double posEnvlpStress(double strain);
00195                 double negEnvlpStress(double strain);
00196 
00197                 double posEnvlpTangent(double strain);
00198                 double negEnvlpTangent(double strain);
00199 
00200                 double posEnvlpRotlim(double strain);
00201                 double negEnvlpRotlim(double strain);
00202 
00203                 void positiveIncrement(double dStrain);
00204                 void negativeIncrement(double dStrain);
00205 
00207                 int getNewBackbone(int flag);
00208                 int mirrorBackbone(void);
00210 };
00211 
00212 #endif

Generated on Mon Oct 23 15:05:20 2006 for OpenSees by doxygen 1.5.0