예제 #1
0
파일: Model.cpp 프로젝트: hjunqq/FemMain
FloatMatrix  Quadr::ComputeStiff()
{
	FloatArray GaussCoor(2);
	GaussPoint B;
	FloatMatrix G(2, 2);
	FloatMatrix BT(3, 2);
	FloatMatrix DT(3, 3);
	double W1,W2;
	DMatrix = ComputeConstitutiveMatrix();
	for (int inode = 0; inode < 4; inode++)
	{
		for (int jnode = 0; jnode < 4; jnode++)
		{
			for (int iksi = 0; iksi < 3; iksi++)
			{
				GaussCoor .at(0) = Gauss3[iksi];
				W1 = Weight3[iksi];
				for (int ieta = 0; ieta < 3; ieta++)
				{
					GaussCoor.at(1) = Gauss3[ieta];
					W2 = Weight3[ieta];
					B.Init(0, GaussCoor);
					ComputeJacobi(B);
					BMatrix = ComputeBMarix(inode);
					BT=BMatrix.Trans();
					//BT.Print(); 
					DT = BT.Mult(DMatrix);
					//DT.Print();
					BMatrix = ComputeBMarix(jnode);
					G = DT.Mult(BMatrix);
					W2 = W1*W2*Det;
					G = G.Mult(W2);
					//G.Print();
					Stiff.at(2 * inode, 2 * jnode) += G.at(0, 0);
					Stiff.at(2 * inode + 1, 2 * jnode) += G.at(1, 0);
					Stiff.at(2 * inode, 2 * jnode + 1) += G.at(0, 1);
					Stiff.at(2 * inode + 1, 2 * jnode + 1) += G.at(1, 1);
					
				}
			}
		}
	}
	//cout << "**********************************************" << endl;
	//Stiff.Print();
	return Stiff;
}
예제 #2
0
파일: Model.cpp 프로젝트: hjunqq/FemMain
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;
}