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 #ifndef BarSlipMaterial_h
00037 #define BarSlipMaterial_h
00038
00039 #include <UniaxialMaterial.h>
00040
00041 #include <math.h>
00042 #include <Matrix.h>
00043 #include <Vector.h>
00044 #include <FileStream.h>
00045
00046 class BarSlipMaterial : public UniaxialMaterial
00047 {
00048 public :
00049 BarSlipMaterial(int tag,
00050 double fc, double fy, double Es, double fu,
00051 double Eh, double db, double ld, int nbars, double width, double depth,
00052 int bsflag, int type);
00053
00054 BarSlipMaterial(int tag,
00055 double fc, double fy, double Es, double fu,
00056 double Eh, double db, double ld, int nbars, double width, double depth,
00057 int bsflag, int type, int damage, int unit);
00058
00059 BarSlipMaterial();
00060 ~BarSlipMaterial();
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);
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 int tagMat;
00084
00085 int bsflag;
00086
00087
00088 int unit;
00089
00090
00091 int type;
00092
00093 int damage;
00094
00095
00096 double width;
00097 double depth;
00098
00099
00100
00101 Vector envlpPosStress; Vector envlpPosStrain;
00102 Vector envlpNegStress; Vector envlpNegStrain;
00103
00104
00105
00106 double fc;
00107
00108
00109 double fy;
00110 double Es;
00111 double fu;
00112 double Eh;
00113 double db;
00114 int nbars;
00115
00116
00117 double ld;
00118
00119
00120 double tauET;
00121 double tauYT;
00122 double tauEC;
00123 double tauYC;
00124 double tauR;
00125
00126
00127 double rDispP; double rForceP; double uForceP;
00128 double rDispN; double rForceN; double uForceN;
00129
00130
00131 double gammaK1; double gammaK2; double gammaK3; double gammaK4; double gammaKLimit;
00132 double gammaD1; double gammaD2; double gammaD3; double gammaD4; double gammaDLimit;
00133 double gammaF1; double gammaF2; double gammaF3; double gammaF4; double gammaFLimit;
00134 double gammaE;
00135
00136
00137
00138 Matrix eP;
00139 Matrix eN;
00140
00141
00142
00143 double Tstrain; double Ttangent; double Tstress;
00144
00145
00146 int Cstate;
00147 double Cstrain;
00148 double Cstress;
00149 double CstrainRate;
00150 double lowCstateStrain;
00151 double lowCstateStress;
00152 double hghCstateStrain;
00153 double hghCstateStress;
00154 double CminStrainDmnd;
00155 double CmaxStrainDmnd;
00156 double Cenergy;
00157 double CgammaK;
00158 double CgammaD;
00159 double CgammaF;
00160 double gammaKUsed;
00161 double gammaFUsed;
00162
00163
00164 int Tstate;
00165 double dstrain;
00166 double TstrainRate;
00167 double lowTstateStrain;
00168 double lowTstateStress;
00169 double hghTstateStrain;
00170 double hghTstateStress;
00171 double TminStrainDmnd;
00172 double TmaxStrainDmnd;
00173 double Tenergy;
00174 double TgammaK;
00175 double TgammaD;
00176 double TgammaF;
00177
00178
00179 double kElasticPos;
00180 double kElasticNeg;
00181 double kElasticPosDamgd;
00182 double kElasticNegDamgd;
00183 double uMaxDamgd;
00184 double uMinDamgd;
00185
00186 Vector envlpPosDamgdStress; Vector envlpNegDamgdStress;
00187
00188 double kunload;
00189 Vector state3Stress; Vector state3Strain; Vector state4Stress; Vector state4Strain;
00190 double elasticStrainEnergy;
00191 double energyCapacity;
00192
00193
00194 void getBondStrength(void);
00195 void getBarSlipEnvelope(void);
00196 void createMaterial(void);
00197
00198
00199 void SetEnvelope(void);
00200 void getstate(double, double);
00201 double posEnvlpStress(double);
00202 double posEnvlpTangent(double);
00203 double negEnvlpStress(double);
00204 double negEnvlpTangent(double);
00205
00206 void getState3(Vector& , Vector& , double);
00207 void getState4(Vector& , Vector& , double);
00208 double Envlp3Tangent(Vector , Vector , double);
00209 double Envlp3Stress(Vector , Vector , double);
00210 double Envlp4Tangent(Vector , Vector , double);
00211 double Envlp4Stress(Vector , Vector , double);
00212
00213 void updateDmg(double);
00214
00215
00216
00217
00218 };
00219 #endif