00001
00003
00004 #include "Inelastic2DYS03.h"
00005
00007
00009
00010 Inelastic2DYS03::Inelastic2DYS03(int tag, double a_ten, double a_com,
00011 double e, double iz_pos, double iz_neg,
00012 int Nd1, int Nd2,
00013 YieldSurface_BC *ysEnd1, YieldSurface_BC *ysEnd2,
00014 int rf_algo, bool islinear, double rho)
00015
00016 :InelasticYS2DGNL(tag, Nd1, Nd2,
00017 ysEnd1, ysEnd2, rf_algo, islinear, rho),
00018 Atens(a_ten), Acomp(a_com), E(e), IzPos(iz_pos), IzNeg(iz_neg), ndisp(6), ndisp_hist(6)
00019 {
00020 ndisp_hist.Zero();
00021 ndisp.Zero();
00022 }
00023
00024 Inelastic2DYS03::~Inelastic2DYS03()
00025 {
00026
00027 }
00028
00029
00030 void Inelastic2DYS03::getLocalStiff(Matrix &K)
00031 {
00032 double L1,L2,I1,I2,A;
00033 Vector ndisp_inc(6);
00034
00035 getIncrNaturalDisp(ndisp_inc);
00036 ndisp = ndisp_hist + ndisp_inc;
00037
00038
00039
00040 opserr << ndisp;
00041
00042
00043 opserr << "\a";
00044
00045 if(ndisp(2)*ndisp(5) < 0 || fabs(ndisp(2)*ndisp(5)) < 1e-10) {
00046 L1 = L;
00047 L2 = 0;
00048 if(ndisp(2) > 0 || ndisp(5) < 0)
00049 I1 = I2 = IzNeg;
00050 else I1 = I2 = IzPos;
00051 } else {
00052
00053 if((fabs(ndisp(2)) + fabs(ndisp(5)) < 1e-10))
00054 L1 = 0;
00055 else
00056 L1 = (fabs(ndisp(2))*L) / (fabs(ndisp(2)) + fabs(ndisp(5)));
00057 L2 = L - L1;
00058 if(ndisp(2) > 0) {
00059 I1 = IzNeg;
00060 I2 = IzPos;
00061 } else {
00062 I1 = IzPos;
00063 I2 = IzNeg;
00064 }
00065 }
00066
00067 opserr << L1 << " " << L2 << "\n";
00068
00069 if(ndisp(3) < 0)
00070 A = Acomp;
00071 else
00072 A = Atens;
00073
00074
00075 double X1 =
00076 I2*I2*L1*L1*L1*L1+4*I2*L1*L1*L1*L2*I1+6*I2*L1*L1*L2*L2*I1+4*I2*L1*L2*L2*L2*I1+L2*L2*L2*L2*I1*I1;
00077 double X2 = (I2*I1*(I2*L1*L1+2*L2*I1*L1+L2*L2*I1))/(X1);
00078 double X3 = ((L1*I2+L2*I1)*I2*I1)/(X1);
00079 double X4 = ((I2*L1*L1+2*I2*L1*L2+L2*L2*I1)*I2*I1)/(X1);
00080
00081
00082 K(0,1) = K(0,2) = K(0,4) = K(0,5)=0;
00083 K(1,0) = K(1,3) = 0;
00084 K(2,0) = K(2,3) = 0;
00085 K(3,1) = K(3,2) = K(3,4) = K(3,5)=0;
00086 K(4,0) = K(4,3) = 0;
00087 K(5,0) = K(5,3) = 0;
00088
00089
00090 K(0,0) = K(3,3) = (A*E)/(L);
00091 K(0,3) = K(3,0) = (-A*E)/(L);
00092
00093
00094 K(1,1) = K(4,4) = 12*E*X3;
00095 K(1,4) = K(4,1) = -12*E*X3;
00096 K(1,2) = K(2,1) = 6*E*X2;
00097 K(1,5) = K(5,1) = 6*E*X4;
00098 K(2,4) = K(4,2) = -6*E*X2;
00099 K(4,5) = K(5,4) = -6*E*X4;
00100 K(2,2) = (4*E*I2*I1*(I2*L1*L1*L1 + 3*L2*I1*L1*L1 + 3*L2*L2*I1*L1 +
00101 L2*L2*L2*I1))/X1;
00102 K(5,5) = (4*E*I2*I1*(I2*L1*L1*L1 + 3*I2*L1*L1*L2 + 3*I2*L1*L2*L2 +
00103 L2*L2*L2*I1))/X1;
00104 K(2,5) = K(5,2) = 2*E*I2*I1*(I2*L1*L1*L1 + 3*I2*L1*L1*L2 + 3*L2*L2*I1*L1
00105 + L2*L2*L2*I1)/X1;
00106
00107 opserr << "\nInelastic2DYS03::getLocalStiff(..) = \n" << K;
00108 }
00109
00110
00111 int Inelastic2DYS03::commitState()
00112 {
00113
00114 this->InelasticYS2DGNL::commitState();
00115
00116 ndisp_hist = ndisp;
00117 return 0;
00118
00119 }
00120