private Matrix GetLocalDerivativeMatrix(IFiniteElement element, double ksi, double eta) { Matrix LocalDerivativeMatrix = new Matrix(8, 4); Matrix gradNksieta = new Matrix(2, 4); gradNksieta[0, 0] = (eta - 1) * 0.25; gradNksieta[1, 0] = (ksi - 1) * 0.25; gradNksieta[0, 1] = (1 - eta) * 0.25; gradNksieta[1, 1] = (-ksi - 1) * 0.25; gradNksieta[0, 2] = (eta + 1) * 0.25; gradNksieta[1, 2] = (ksi + 1) * 0.25; gradNksieta[0, 3] = (-eta - 1) * 0.25; gradNksieta[1, 3] = (1 - ksi) * 0.25; JacobianRectangular J = new JacobianRectangular(); J.Element = element; Matrix gradN = J.GetInverseJacobian(ksi, eta) * gradNksieta; LocalDerivativeMatrix[0, 0] = LocalDerivativeMatrix[1, 3] = gradN[0, 0]; LocalDerivativeMatrix[2, 0] = LocalDerivativeMatrix[3, 3] = gradN[0, 1]; LocalDerivativeMatrix[4, 0] = LocalDerivativeMatrix[5, 3] = gradN[0, 2]; LocalDerivativeMatrix[6, 0] = LocalDerivativeMatrix[7, 3] = gradN[0, 3]; LocalDerivativeMatrix[1, 1] = LocalDerivativeMatrix[0, 2] = gradN[1, 0]; LocalDerivativeMatrix[3, 1] = LocalDerivativeMatrix[2, 2] = gradN[1, 1]; LocalDerivativeMatrix[5, 1] = LocalDerivativeMatrix[4, 2] = gradN[1, 2]; LocalDerivativeMatrix[7, 1] = LocalDerivativeMatrix[6, 2] = gradN[1, 3]; return(LocalDerivativeMatrix); }
private Matrix LocalStiffnessMatrixFunction(double ksi, double eta) { Matrix derivativeMatrix = GetLocalDerivativeMatrix(elementCurrent, ksi, eta); JacobianRectangular J = new JacobianRectangular(); J.Element = elementCurrent; return(derivativeMatrix * ConstMatrix * Matrix.Transpose(derivativeMatrix) * J.GetJacobianDeterminant(ksi, eta)); }
private Matrix LocalMassMatrixFunction(double ksi, double eta) { Matrix baseFunctionsMatrix = GetLocalBaseFunctionsMatrix(ksi, eta); JacobianRectangular J = new JacobianRectangular(); J.Element = elementCurrent; return(baseFunctionsMatrix * Matrix.Transpose(baseFunctionsMatrix) * J.GetJacobianDeterminant(ksi, eta)); }
private Matrix LocalVectorFunction(double ksi, double eta) { Matrix derivativeMatrix = GetLocalDerivativeMatrix(elementCurrent, ksi, eta); JacobianRectangular J = new JacobianRectangular(); J.Element = elementCurrent; Matrix VariableVectorOnElement = GetVariableVectorOnElement(elementCurrent, ksi, eta); return(derivativeMatrix * VariableVectorOnElement * J.GetJacobianDeterminant(ksi, eta)); }
protected Matrix LocalNonlinearMatrixFunction(double ksi, double eta) { Matrix derivativeMatrix = GetLocalDerivativeMatrix(elementCurrent, ksi, eta); Matrix derivativeUMatrix = GetLocalUDerivativeMatrix(previousU, elementCurrent, ksi, eta); JacobianRectangular J = new JacobianRectangular(); J.Element = elementCurrent; return(derivativeMatrix * derivativeUMatrix * Matrix.Transpose(derivativeMatrix) * J.GetJacobianDeterminant(ksi, eta)); }