public void CalculateLocalMatricesAndVector() { for (int i = 0; i < numberOfElements; ++i) { Jacobian jacobian = new Jacobian(); jacobian.calculateJacobian(elements[i]); MatrixH tempMatrixH = new MatrixH(); elements[i].LocalMatrixH = tempMatrixH.calculateMatrixH(jacobian, conductivity); MatrixC tempMatrixC = new MatrixC(specificHeat, density, jacobian.getDetJArray()); MatrixH_BC tempMatrixH_BC = new MatrixH_BC(alpha, elements[i]); VectorP tempVectorP = new VectorP(alpha, ambientTemperature, elements[i]); elements[i].LocalMatrixC = tempMatrixC.CalculateMatrixC(); elements[i].LocalMatrixH = elements[i].LocalMatrixH.Add(tempMatrixH_BC.CalculateMatrixH_BC()); elements[i].LocalVectorP = tempVectorP.CalculateVectorP(); //elements[i].PrintLocalMatrices(); } }
public Matrix <double> calculateMatrixH(Jacobian jacobian, double k) { for (int i = 0; i < 4; ++i) { dNdx[0, i] = jacobian.getInversedJacobian(0, 0) * jacobian.getDNdKsi(i, 0) + jacobian.getInversedJacobian(1, 0) * jacobian.getDNdEta(i, 0); dNdx[1, i] = jacobian.getInversedJacobian(0, 1) * jacobian.getDNdKsi(i, 1) + jacobian.getInversedJacobian(1, 1) * jacobian.getDNdEta(i, 1); dNdx[2, i] = jacobian.getInversedJacobian(0, 2) * jacobian.getDNdKsi(i, 2) + jacobian.getInversedJacobian(1, 2) * jacobian.getDNdEta(i, 2); dNdx[3, i] = jacobian.getInversedJacobian(0, 3) * jacobian.getDNdKsi(i, 3) + jacobian.getInversedJacobian(1, 3) * jacobian.getDNdEta(i, 3); dNdy[0, i] = jacobian.getInversedJacobian(2, 0) * jacobian.getDNdKsi(i, 0) + jacobian.getInversedJacobian(3, 0) * jacobian.getDNdEta(i, 0); dNdy[1, i] = jacobian.getInversedJacobian(2, 1) * jacobian.getDNdKsi(i, 1) + jacobian.getInversedJacobian(3, 1) * jacobian.getDNdEta(i, 1); dNdy[2, i] = jacobian.getInversedJacobian(2, 2) * jacobian.getDNdKsi(i, 2) + jacobian.getInversedJacobian(3, 2) * jacobian.getDNdEta(i, 2); dNdy[3, i] = jacobian.getInversedJacobian(2, 3) * jacobian.getDNdKsi(i, 3) + jacobian.getInversedJacobian(3, 3) * jacobian.getDNdEta(i, 3); } for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { for (int z = 0; z < 4; ++z) { dNdxT[i, j, z] = dNdx[i, j] * dNdx[i, z]; dNdyT[i, j, z] = dNdy[i, j] * dNdy[i, z]; dNdxTdetJ[i, j, z] = dNdxT[i, j, z] * jacobian.getDetJ(i); dNdyTdetJ[i, j, z] = dNdyT[i, j, z] * jacobian.getDetJ(i); sum[i, j, z] = (dNdxTdetJ[i, j, z] + dNdyTdetJ[i, j, z]) * k; } } } for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { H[i, j] = sum[0, i, j] + sum[1, i, j] + sum[2, i, j] + sum[3, i, j]; } } return(Matrix <double> .Build.DenseOfArray(H)); }