HystereticMaterial.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 // $Revision: 1.7 $
00022 // $Date: 2006/08/03 23:42:19 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/material/uniaxial/HystereticMaterial.h,v $
00024 
00025 // Written: MHS
00026 // Created: July 2000
00027 //
00028 // Description: This file contains the class definition for 
00029 // HystereticMaterial.  HystereticMaterial provides the implementation
00030 // of a one-dimensional hysteretic model with pinching of both
00031 // force and deformation, damage due to deformation and energy, and
00032 // degraded unloading stiffness based on maximum ductility.  This
00033 // is a modified implementation of Hyster2.f90 by Filippou.
00034 
00035 #ifndef HystereticMaterial_h
00036 #define HystereticMaterial_h
00037 
00038 #include <UniaxialMaterial.h>
00039 
00040 class HystereticMaterial : public UniaxialMaterial
00041 {
00042  public:
00043   HystereticMaterial(int tag,
00044                      double mom1p, double rot1p, double mom2p, double rot2p,
00045                      double mom3p, double rot3p,
00046                      double mom1n, double rot1n, double mom2n, double rot2n,
00047                      double mom3n, double rot3n,
00048                      double pinchX, double pinchY,
00049                      double damfc1 = 0.0, double damfc2 = 0.0,
00050                      double beta = 0.0);
00051   HystereticMaterial(int tag,
00052                      double mom1p, double rot1p, double mom2p, double rot2p,
00053                      double mom1n, double rot1n, double mom2n, double rot2n,
00054                      double pinchX, double pinchY,
00055                      double damfc1 = 0.0, double damfc2 = 0.0,
00056                      double beta = 0.0);
00057   HystereticMaterial();
00058   ~HystereticMaterial();
00059 
00060   const char *getClassType(void) const {return "HystereticMaterial";};
00061   
00062   int setTrialStrain(double strain, double strainRate = 0.0);
00063   double getStrain(void);
00064   double getStress(void);
00065   double getTangent(void);
00066   double getInitialTangent(void) {return E1p;};
00067   
00068   int commitState(void);
00069   int revertToLastCommit(void);
00070   int revertToStart(void);
00071   
00072   UniaxialMaterial *getCopy(void);
00073   
00074   int sendSelf(int commitTag, Channel &theChannel);  
00075   int recvSelf(int commitTag, Channel &theChannel, 
00076                FEM_ObjectBroker &theBroker);    
00077   
00078   void Print(OPS_Stream &s, int flag =0);
00079   
00080  protected:
00081   
00082  private:
00083   // Pinching parameters
00084   double pinchX;                // Deformation pinching
00085   double pinchY;                // Force pinching
00086   
00087   // Damage parameters
00088   double damfc1;                // Deformation
00089   double damfc2;                // Energy
00090   
00091   // Unloading parameter
00092   double beta;
00093   
00094   // Trial history variables
00095   double TrotMax;
00096   double TrotMin;
00097   double TrotPu;
00098   double TrotNu;
00099   double TenergyD;
00100   int TloadIndicator;
00101   
00102   // Trial state variables
00103   double Ttangent;
00104   double Tstress;
00105   double Tstrain;
00106   
00107   // Converged history variables
00108   double CrotMax;
00109   double CrotMin;
00110   double CrotPu;
00111   double CrotNu;
00112   double CenergyD;
00113   int CloadIndicator;
00114   
00115   // Converged state variables
00116   double Cstress;
00117   double Cstrain;
00118   
00119   // Backbone parameters
00120   double mom1p, rot1p;
00121   double mom2p, rot2p;
00122   double mom3p, rot3p;
00123   double mom1n, rot1n;
00124   double mom2n, rot2n;
00125   double mom3n, rot3n;
00126   
00127   double E1p, E1n;
00128   double E2p, E2n;
00129   double E3p, E3n;
00130   
00131   double energyA;
00132   
00133   void setEnvelope(void);
00134   
00135   double posEnvlpStress(double strain);
00136   double negEnvlpStress(double strain);
00137   
00138   double posEnvlpTangent(double strain);
00139   double negEnvlpTangent(double strain);
00140   
00141   double posEnvlpRotlim(double strain);
00142   double negEnvlpRotlim(double strain);
00143   
00144   void positiveIncrement(double dStrain);
00145   void negativeIncrement(double dStrain);
00146 };
00147 
00148 #endif

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