private void button1_Click(object sender, EventArgs e) { PreprocessingModelling.getGaussianCoordinates(comboBox1.SelectedIndex); int NumbersOfNodes = PreprocessingModelling.getElementNodesNumber(); int DegreeOfFreedom = 3; PreprocessingModelling.removeExcessEtopol(); int NumbersOfElements = PreprocessingModelling.getNumberOfElements(); double[,] NodalCoordinates = Analysis.getNodalCoordinates(); int GaussianNumber = MainInterface.XGaussianCoordinates.GetLength(0); double[,] ShapeFunctionDerivatives = Analysis.getShapeFunctionDerivatives(MainInterface.XGaussianCoordinates, MainInterface.YGaussianCoordinates, MainInterface.ZGaussianCoordinates); double[,] GlobalStiffnessMatrix = new double[MainInterface.Nodes.Count() * DegreeOfFreedom, MainInterface.Nodes.Count() * DegreeOfFreedom]; // for (int i = 0; i < NumbersOfElements; i++) { double[,] StiffnessMatrix = new double[NumbersOfNodes * DegreeOfFreedom, NumbersOfNodes *DegreeOfFreedom]; double[,] ElementNodalCoordinates = Analysis.getElementNodalCoordinates(i, NodalCoordinates); double[,] Jacobian = Analysis.getJacobian(ElementNodalCoordinates); for (int j = 0; j < GaussianNumber; j++) { double[,] GaussianJacobian = Analysis.getGaussianJacobian(j, Jacobian); double JacobianDeterminant = Accord.Math.Matrix.Determinant(GaussianJacobian); double[,] GaussianShapeFunctionDerivative = Analysis.getGaussianShapeFunctionDerivatives(j, ShapeFunctionDerivatives); double[,] ShapeFunctionDerivativeWRTCoordinates = Accord.Math.Matrix.Solve(GaussianJacobian, GaussianShapeFunctionDerivative); double[,] StrainDisplacementMatrix = Analysis.getStrainDisplacementMatrix(ShapeFunctionDerivativeWRTCoordinates); double[,] ConstitutiveMatrix = Analysis.getConstitutiveMatrix(i); StiffnessMatrix = Analysis.addStiffnessMatrix(StiffnessMatrix, StrainDisplacementMatrix, ConstitutiveMatrix, JacobianDeterminant, j); } GlobalStiffnessMatrix = Analysis.addGlobalStiffnessMatrix(i, GlobalStiffnessMatrix, StiffnessMatrix); } Analysis.calculateDisplacement(GlobalStiffnessMatrix); this.Close(); }
public static double[,] getNodalCoordinates() { int NumbersOfNodes = PreprocessingModelling.getElementNodesNumber(); int NumbersOfElements = PreprocessingModelling.getNumberOfElements(); double[,] NodalCoordinates = new double[NumbersOfElements * NumbersOfNodes, 3]; for (int i = 0; i < NumbersOfElements * NumbersOfNodes; i++) { NodalCoordinates[i, 0] = MainInterface.Nodes[MainInterface.Etopol[i]].X; NodalCoordinates[i, 1] = MainInterface.Nodes[MainInterface.Etopol[i]].Y; NodalCoordinates[i, 2] = MainInterface.Nodes[MainInterface.Etopol[i]].Z; } return(NodalCoordinates); }