public override Matrix_Jagged IntegralArgument_Ke(Vector Xi) { int NNPE = ElementNodes.Length; double Det_Jac; Vector X; Matrix_Jagged DNDX; Matrix_Jagged Ke_Arg = new Matrix_Jagged(NNPE * 2, NNPE * 2); Interpolator.Calculate_X_DNDX_DetJacobian(Xi, ElementNodes, out X, out DNDX, out Det_Jac); for (int p = 0; p < NNPE; p++)//p defines node number { Node_ND_Unknowns_VectorField Unknown_p = (Node_ND_Unknowns_VectorField)ElementNodes[p].Unknowns; int NDFp = Unknown_p.UnknownDoFs.Length; for (int i = 0; i < NDFp; i++) //loop at x direction { for (int q = 0; q < NNPE; q++) // { Node_ND_Unknowns_VectorField Unknown_q = (Node_ND_Unknowns_VectorField)ElementNodes[q].Unknowns; int NDFq = Unknown_q.UnknownDoFs.Length; for (int j = 0; j < NDFq; j++)//loop at y direction { double temp = 0; for (int m = 0; m < 2; m++) //loop at x direction { for (int n = 0; n < 2; n++) //loop at y direction { double Eimjn = 0; Eimjn = GetE(i, m, j, n);//obtain constitutive matrix temp += DNDX.Values[p][m] * Eimjn * DNDX.Values[q][n]; } } Ke_Arg.Values[NDFp * p + i][NDFq * q + j] = temp * Det_Jac; //store Ke } } } } return(Ke_Arg); }