public override void Assemble(ref Vector F, Vector Fe)
        {
            int NNPE = ElementNodes.Length;

            for (int p = 0; p < NNPE; p++)
            {
                Node_ND_Unknowns_ScalarField TheUnknowns = (Node_ND_Unknowns_ScalarField)ElementNodes[p].Unknowns;
                F.Values[TheUnknowns.UnknownDoF] += Fe.Values[p];
            }
        }
        public void Set_ElementNodal_DisplayValues(Node_ND[] ElementNodes, ref Vector ValuesAtAllNodes)
        {
            int    NNPE = ElementNodes.Length;
            Vector ValuesAtTheseNodes = new Vector(NNPE);

            for (int p = 0; p < NNPE; p++)
            {
                Node_ND_Unknowns_ScalarField TheUnknowns_p = (Node_ND_Unknowns_ScalarField)ElementNodes[p].Unknowns;
                ElementNodes[p].Unknowns.DisplayValue = ValuesAtAllNodes.Values[TheUnknowns_p.UnknownDoF];
            }
        }
        public double[] Get_ElementNodal_U()
        {
            int NNPE = ElementNodes.Length;

            double[] Ue = new double[NNPE];
            for (int p = 0; p < NNPE; p++)
            {
                Node_ND_Unknowns_ScalarField TheUnknowns_p = (Node_ND_Unknowns_ScalarField)ElementNodes[p].Unknowns;
                Ue[p] = TheUnknowns_p.Unknown;
            }
            return(Ue);
        }
        public Vector Get_ElementNodal_Values(Node_ND[] ElementNodes, ref Vector ValuesAtAllNodes)
        {
            int    NNPE = ElementNodes.Length;
            Vector ValuesAtTheseNodes = new Vector(NNPE);

            for (int p = 0; p < NNPE; p++)
            {
                Node_ND_Unknowns_ScalarField TheUnknowns_p = (Node_ND_Unknowns_ScalarField)ElementNodes[p].Unknowns;
                ValuesAtTheseNodes.Values[p] = ValuesAtAllNodes.Values[TheUnknowns_p.UnknownDoF];
            }
            return(ValuesAtTheseNodes);
        }
        public double[] Get_ElementNodal_U(Vector GlobalUnknowns)
        {
            int NNPE = ElementNodes.Length;

            double[] Ue = new double[NNPE];
            int      Ip;

            for (int p = 0; p < NNPE; p++)
            {
                Node_ND_Unknowns_ScalarField TheUnknowns_p = (Node_ND_Unknowns_ScalarField)ElementNodes[p].Unknowns;
                Ip    = TheUnknowns_p.UnknownDoF;
                Ue[p] = GlobalUnknowns.Values[Ip];
            }
            return(Ue);
        }
        public override void Assemble(ref MatrixSparseLinkedList K, Matrix_Jagged Ke)
        {
            int Ip, Iq;
            int NNPE = ElementNodes.Length;

            for (int p = 0; p < NNPE; p++)
            {
                Node_ND_Unknowns_ScalarField TheUnknowns_p = (Node_ND_Unknowns_ScalarField)ElementNodes[p].Unknowns;
                Ip = TheUnknowns_p.UnknownDoF;
                for (int q = 0; q < NNPE; q++)
                {
                    Node_ND_Unknowns_ScalarField TheUnknowns_q = (Node_ND_Unknowns_ScalarField)ElementNodes[q].Unknowns;
                    Iq = TheUnknowns_q.UnknownDoF;
                    K.AddToMatrixElement(Ip, Iq, Ke.Values[p][q]);
                }
            }
        }
        public override void Assemble(ref Matrix_Jagged K, Matrix_Jagged Ke)
        {
            int Ip, Iq;
            int NNPE = ElementNodes.Length;

            for (int p = 0; p < NNPE; p++)
            {
                Node_ND_Unknowns_ScalarField TheUnknowns_p = (Node_ND_Unknowns_ScalarField)ElementNodes[p].Unknowns;
                Ip = TheUnknowns_p.UnknownDoF;
                for (int q = 0; q < NNPE; q++)
                {
                    Node_ND_Unknowns_ScalarField TheUnknowns_q = (Node_ND_Unknowns_ScalarField)ElementNodes[q].Unknowns;
                    Iq = TheUnknowns_q.UnknownDoF;
                    K.Values[Ip][Iq] += Ke.Values[p][q];
                }
            }
        }