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
00036
00037
00038
00039
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 ¶m);
00098
00099
00100 protected:
00101
00102 private:
00103
00104 double pinchX;
00105 double pinchY;
00106
00107
00108 double damfc1;
00109 double damfc2;
00110
00111
00112 double beta;
00113
00114
00115 double TrotMax;
00116 double TrotMin;
00117 double TrotPu;
00118 double TrotNu;
00119 double TenergyD;
00120 int TloadIndicator;
00121
00122
00123 double Ttangent;
00124 double Tstress;
00125 double Tstrain;
00126
00127
00128 double CrotMax;
00129 double CrotMin;
00130 double CrotPu;
00131 double CrotNu;
00132 double CenergyD;
00133 int CloadIndicator;
00134
00135
00136 double Cstress;
00137 double Cstrain;
00138
00139
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
00176 int degrade;
00177
00178
00179 int curveType;
00180
00181
00182 LimitCurve *theCurve;
00183 int CstateFlag;
00184
00185
00186 double Ploss;
00187 double Kdeg;
00188 double Eelasticp;
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