private static void triangle_unit_quad_test(int degree_max) //****************************************************************************80 // // Purpose: // // TRIANGLE_UNIT_QUAD_TEST tests the rules for the unit triangle. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 18 April 2008 // // Author: // // John Burkardt // // Parameters: // // Input, int DEGREE_MAX, the maximum total degree of the // monomials to check. // { const int DIM_NUM = 2; int[] expon = new int[DIM_NUM]; int h = 0; int t = 0; SubCompData data = new(); Console.WriteLine(""); Console.WriteLine("TRIANGLE_UNIT_QUAD_TEST"); Console.WriteLine(" For the unit triangle,"); Console.WriteLine(" we approximate monomial integrals with:"); Console.WriteLine(" QuadratureRule.triangle_unit_o01,"); Console.WriteLine(" QuadratureRule.triangle_unit_o03,"); Console.WriteLine(" QuadratureRule.triangle_unit_o03b,"); Console.WriteLine(" QuadratureRule.triangle_unit_o06,"); Console.WriteLine(" QuadratureRule.triangle_unit_o06b,"); Console.WriteLine(" QuadratureRule.triangle_unit_o07,"); Console.WriteLine(" QuadratureRule.triangle_unit_o12,"); bool more = false; for (;;) { SubComp.subcomp_next(ref data, degree_max, DIM_NUM, ref expon, ref more, ref h, ref t); Console.WriteLine(""); string cout = " Monomial exponents: "; int dim; for (dim = 0; dim < DIM_NUM; dim++) { cout += " " + expon[dim].ToString(CultureInfo.InvariantCulture).PadLeft(2); } Console.WriteLine(cout); Console.WriteLine(""); int order = 1; double[] w = new double[order]; double[] xy = new double[DIM_NUM * order]; QuadratureRule.triangle_unit_o01(ref w, ref xy); double[] v = Monomial.monomial_value(DIM_NUM, order, expon, xy); double quad = QuadratureRule.triangle_unit_volume() * typeMethods.r8vec_dot_product(order, w, v); Console.WriteLine(" " + order.ToString(CultureInfo.InvariantCulture).PadLeft(6) + " " + quad.ToString(CultureInfo.InvariantCulture).PadLeft(14) + ""); order = 3; w = new double[order]; xy = new double[DIM_NUM * order]; QuadratureRule.triangle_unit_o03(ref w, ref xy); v = Monomial.monomial_value(DIM_NUM, order, expon, xy); quad = QuadratureRule.triangle_unit_volume() * typeMethods.r8vec_dot_product(order, w, v); Console.WriteLine(" " + order.ToString(CultureInfo.InvariantCulture).PadLeft(6) + " " + quad.ToString(CultureInfo.InvariantCulture).PadLeft(14) + ""); order = 3; w = new double[order]; xy = new double[DIM_NUM * order]; QuadratureRule.triangle_unit_o03b(ref w, ref xy); v = Monomial.monomial_value(DIM_NUM, order, expon, xy); quad = QuadratureRule.triangle_unit_volume() * typeMethods.r8vec_dot_product(order, w, v); Console.WriteLine(" " + order.ToString(CultureInfo.InvariantCulture).PadLeft(6) + " " + quad.ToString(CultureInfo.InvariantCulture).PadLeft(14) + ""); order = 6; w = new double[order]; xy = new double[DIM_NUM * order]; QuadratureRule.triangle_unit_o06(ref w, ref xy); v = Monomial.monomial_value(DIM_NUM, order, expon, xy); quad = QuadratureRule.triangle_unit_volume() * typeMethods.r8vec_dot_product(order, w, v); Console.WriteLine(" " + order.ToString(CultureInfo.InvariantCulture).PadLeft(6) + " " + quad.ToString(CultureInfo.InvariantCulture).PadLeft(14) + ""); order = 6; w = new double[order]; xy = new double[DIM_NUM * order]; QuadratureRule.triangle_unit_o06b(ref w, ref xy); v = Monomial.monomial_value(DIM_NUM, order, expon, xy); quad = QuadratureRule.triangle_unit_volume() * typeMethods.r8vec_dot_product(order, w, v); Console.WriteLine(" " + order.ToString(CultureInfo.InvariantCulture).PadLeft(6) + " " + quad.ToString(CultureInfo.InvariantCulture).PadLeft(14) + ""); order = 7; w = new double[order]; xy = new double[DIM_NUM * order]; QuadratureRule.triangle_unit_o07(ref w, ref xy); v = Monomial.monomial_value(DIM_NUM, order, expon, xy); quad = QuadratureRule.triangle_unit_volume() * typeMethods.r8vec_dot_product(order, w, v); Console.WriteLine(" " + order.ToString(CultureInfo.InvariantCulture).PadLeft(6) + " " + quad.ToString(CultureInfo.InvariantCulture).PadLeft(14) + ""); order = 12; w = new double[order]; xy = new double[DIM_NUM * order]; QuadratureRule.triangle_unit_o12(ref w, ref xy); v = Monomial.monomial_value(DIM_NUM, order, expon, xy); quad = QuadratureRule.triangle_unit_volume() * typeMethods.r8vec_dot_product(order, w, v); Console.WriteLine(" " + order.ToString(CultureInfo.InvariantCulture).PadLeft(6) + " " + quad.ToString(CultureInfo.InvariantCulture).PadLeft(14) + ""); Console.WriteLine(""); quad = QuadratureRule.triangle_unit_monomial(expon); Console.WriteLine(" " + " Exact" + " " + quad.ToString(CultureInfo.InvariantCulture).PadLeft(14) + ""); if (!more) { break; } } }