FloatArray Quadr::ComputeStress() { const double a = 1 + sqrt(3) / 2, b = -1.0 / 2, c = 1 - sqrt(3) / 2; FloatMatrix TransMatrix(4, 4); TransMatrix.at(0, 0) = a; TransMatrix.at(0, 1) = b; TransMatrix.at(0, 2) = c; TransMatrix.at(0, 3) = b; TransMatrix.at(1, 0) = b; TransMatrix.at(1, 1) = a; TransMatrix.at(1, 2) = b; TransMatrix.at(1, 3) = c; TransMatrix.at(2, 0) = c; TransMatrix.at(2, 1) = b; TransMatrix.at(2, 2) = a; TransMatrix.at(2, 3) = b; TransMatrix.at(3, 0) = b; TransMatrix.at(3, 1) = c; TransMatrix.at(3, 2) = b; TransMatrix.at(3, 3) = a; Strain.Clear(); GaussPoint B; FloatArray Coor; FloatArray TransTemp(4); Coor.SetSize(2); Coor.at(0) = 0; Coor.at(1) = 0; B.Init(0, Coor); ComputeJacobi(B); BMatrixBig = ComputeBMatrix(); //BMatrixBig.Print(); //Displacement.Print(); Strain = BMatrixBig.Mult(Displacement); Stress = DMatrix.Mult(Strain); for (int inode = 0; inode < 4; inode++) { Coor.at(0) = P4ksicor[inode]; Coor.at(1) = P4etacor[inode]; B.Init(0, Coor); ComputeJacobi(B); BMatrixBig = ComputeBMatrix(); GaussStrain[inode] = BMatrixBig.Mult(Displacement); GaussStress[inode] = DMatrix.Mult(Strain); //GaussStrain[inode].Print(); } for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { TransTemp.at(j) = GaussStrain[j].at(i); } TransTemp = TransMatrix.Mult(TransTemp); for (int j = 0; j < 4; j++) { NodeStrain[j].at(i) = TransTemp.at(j); } for (int j = 0; j < 4; j++) { TransTemp.at(j) = GaussStress[j].at(i); } TransTemp = TransMatrix.Mult(TransTemp); for (int j = 0; j < 4; j++) { NodeStress[j].at(i) = TransTemp.at(j); } } return NULL; }