00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
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
00084 double pinchX;
00085 double pinchY;
00086
00087
00088 double damfc1;
00089 double damfc2;
00090
00091
00092 double beta;
00093
00094
00095 double TrotMax;
00096 double TrotMin;
00097 double TrotPu;
00098 double TrotNu;
00099 double TenergyD;
00100 int TloadIndicator;
00101
00102
00103 double Ttangent;
00104 double Tstress;
00105 double Tstrain;
00106
00107
00108 double CrotMax;
00109 double CrotMin;
00110 double CrotPu;
00111 double CrotNu;
00112 double CenergyD;
00113 int CloadIndicator;
00114
00115
00116 double Cstress;
00117 double Cstrain;
00118
00119
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