private static void fd1d_bvp_test01() //****************************************************************************80 // // Purpose: // // FD1D_BVP_TEST01 carries out test case #1. // // Discussion: // // Use A1, C1, F1, EXACT1. // // Repeat using a nonuniform mesh. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 15 February 2011 // // Author: // // John Burkardt // { int i; const int n = 21; const double x1 = 0.0; const double x2 = 1.0; Console.WriteLine(""); Console.WriteLine("FD1D_BVP_TEST01"); Console.WriteLine(" A1(X) = 1.0"); Console.WriteLine(" A1'(X) = 0.0"); Console.WriteLine(" C1(X) = 0.0"); Console.WriteLine(" F1(X) = X * ( X + 3 ) * exp ( X )"); Console.WriteLine(" U1(X) = X * ( 1 - X ) * exp ( X )"); Console.WriteLine(""); Console.WriteLine(" Number of nodes = " + n + ""); Console.WriteLine(" X1 = " + x1 + ""); Console.WriteLine(" X2 = " + x2 + ""); double[] x = typeMethods.r8vec_even(n, x1, x2); double[] u = FDM_1D_BVP.fd1d_bvp(n, a1, a1prime, c1, f1, x); double[] uexact = exact1(n, x); Console.WriteLine(""); Console.WriteLine(" I X U Uexact Error"); Console.WriteLine(""); for (i = 0; i < n; i++) { Console.WriteLine(" " + i.ToString(CultureInfo.InvariantCulture).PadLeft(4) + " " + x[i].ToString(CultureInfo.InvariantCulture).PadLeft(8) + " " + u[i].ToString(CultureInfo.InvariantCulture).PadLeft(12) + " " + uexact[i].ToString(CultureInfo.InvariantCulture).PadLeft(12) + " " + Math.Abs(u[i] - uexact[i]).ToString(CultureInfo.InvariantCulture).PadLeft(14) + ""); } Console.WriteLine(""); Console.WriteLine(" Repeat, using a nonuniform mesh."); x = typeMethods.r8vec_even(n, x1, x2); for (i = 0; i < n; i++) { x[i] = Math.Sqrt(x[i]); } u = FDM_1D_BVP.fd1d_bvp(n, a1, a1prime, c1, f1, x); uexact = exact1(n, x); Console.WriteLine(""); Console.WriteLine(" I X U Uexact Error"); Console.WriteLine(""); for (i = 0; i < n; i++) { Console.WriteLine(" " + i.ToString(CultureInfo.InvariantCulture).PadLeft(4) + " " + x[i].ToString(CultureInfo.InvariantCulture).PadLeft(8) + " " + u[i].ToString(CultureInfo.InvariantCulture).PadLeft(12) + " " + uexact[i].ToString(CultureInfo.InvariantCulture).PadLeft(12) + " " + Math.Abs(u[i] - uexact[i]).ToString(CultureInfo.InvariantCulture).PadLeft(14) + ""); } // // Write the data to files. // string filename = "fd1d_bvp_test01_nodes.txt"; typeMethods.r8mat_write(filename, n, 1, x); double[] u2 = new double[n * 2]; for (i = 0; i < n; i++) { u2[i + 0 * n] = u[i]; } for (i = 0; i < n; i++) { u2[i + 1 * n] = uexact[i]; } filename = "fd1d_bvp_test01_values.txt"; typeMethods.r8mat_write(filename, n, 2, u2); }
private static void fd1d_bvp_test05() //****************************************************************************80 // // Purpose: // // FD1D_BVP_TEST05 carries out test case #5. // // Discussion: // // Use A3, C1, F5, EXACT1. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 15 February 2011 // // Author: // // John Burkardt // { int i; const int n = 11; const double x1 = 0.0; const double x2 = 1.0; Console.WriteLine(""); Console.WriteLine("FD1D_BVP_TEST05"); Console.WriteLine(" A3(X) = 1.0 + X * X for X <= 1/3"); Console.WriteLine(" = 7/9 + X for 1/3 < X"); Console.WriteLine(" A3''(X) = 2.0 * X for X <= 1/3"); Console.WriteLine(" 1 for 1/3 < X"); Console.WriteLine(" C1(X) = 0.0"); Console.WriteLine(" F5(X) = ( X + 3 X^2 + 5 X^3 + X^4 ) * exp ( X )"); Console.WriteLine(" for X <= 1/3"); Console.WriteLine(" = ( - 1 + 10/3 X + 43/9 X^2 + X^3 ) * exp ( X )"); Console.WriteLine(" for 1/3 <= X"); Console.WriteLine(" U1(X) = X * ( 1 - X ) * exp ( X )"); Console.WriteLine(""); Console.WriteLine(" Number of nodes = " + n + ""); Console.WriteLine(" X1 = " + x1 + ""); Console.WriteLine(" X2 = " + x2 + ""); double[] x = typeMethods.r8vec_even(n, x1, x2); double[] u = FDM_1D_BVP.fd1d_bvp(n, a3, a3prime, c1, f5, x); double[] uexact = exact1(n, x); Console.WriteLine(""); Console.WriteLine(" I X U Uexact Error"); Console.WriteLine(""); for (i = 0; i < n; i++) { Console.WriteLine(" " + i.ToString(CultureInfo.InvariantCulture).PadLeft(4) + " " + x[i].ToString(CultureInfo.InvariantCulture).PadLeft(8) + " " + u[i].ToString(CultureInfo.InvariantCulture).PadLeft(12) + " " + uexact[i].ToString(CultureInfo.InvariantCulture).PadLeft(12) + " " + Math.Abs(u[i] - uexact[i]).ToString(CultureInfo.InvariantCulture).PadLeft(14) + ""); } // // Write the data to files. // string filename = "fd1d_bvp_test05_nodes.txt"; typeMethods.r8mat_write(filename, n, 1, x); double[] u2 = new double[n * 2]; for (i = 0; i < n; i++) { u2[i + 0 * n] = u[i]; } for (i = 0; i < n; i++) { u2[i + 1 * n] = uexact[i]; } filename = "fd1d_bvp_test05_values.txt"; typeMethods.r8mat_write(filename, n, 2, u2); }