Beispiel #1
0
    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);
    }
Beispiel #2
0
    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);
    }