Exemple #1
0
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;
}