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