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);
        }