コード例 #1
0
        public static double SecondDerivative(SinglePhaseField field, int localCellIndex, NodeSet nodeSet)
        {
            // Evaluate gradient
            int length    = 1;
            int noOfNodes = 1;
            int D         = 2;
            MultidimensionalArray gradient = MultidimensionalArray.Create(length, noOfNodes, D);

            field.EvaluateGradient(localCellIndex, 1, nodeSet, gradient, ResultCellindexOffset: 0, ResultPreScale: 1.0);

            // Evalaute Hessian matrix
            MultidimensionalArray hessian = MultidimensionalArray.Create(length, noOfNodes, D, D);

            field.EvaluateHessian(localCellIndex, 1, nodeSet, hessian);

            // Compute second derivative along curve
            double g_alpha_alpha = 2 * ((hessian[0, 0, 0, 0] * gradient[0, 0, 0]
                                         + hessian[0, 0, 0, 1] * gradient[0, 0, 1])
                                        * gradient[0, 0, 0]
                                        + (hessian[0, 0, 1, 0] * gradient[0, 0, 0]
                                           + hessian[0, 0, 1, 1] * gradient[0, 0, 1])
                                        * gradient[0, 0, 1]);

            if (g_alpha_alpha == 0.0 || g_alpha_alpha.IsNaN())
            {
                throw new NotSupportedException("Second derivative is zero");
            }

            return(g_alpha_alpha);
        }