public static void Main()
    {
        // 1. Create the option (Factory Method pattern)
        Option myOption = CreateOption();

        // 2. Define the pde of concern (Bridge pattern)
        IBSPde pde = new Pde_BS(myOption);


        // 3. Discrete mesh sizes.
        int J = 325;
        int N = J;

        Console.Write("NS: ");
        J = Convert.ToInt32(Console.ReadLine());

        Console.Write("NT: ");
        N = Convert.ToInt32(Console.ReadLine());

        // 4. The domain in which the PDE is defined.
        Range <double> rangeX = new Range <double>(0.0, myOption.FarFieldCondition);
        Range <double> rangeT = new Range <double>(0.0, myOption.ExpiryDate);


        // 5. Create FDM Solver.
        IBVPFDM fdm = new ADE(pde, rangeX, rangeT, J, N);


        // 6. Calculate the matrix result.
        NumericMatrix <double> sol = fdm.result();


        // 7. Display the results in Excel.
        ExcelMechanisms exl = new ExcelMechanisms();


        try
        {
            exl.printOneExcel(fdm.XValues, fdm.vecNew, "ADE method", "Stock", "Value", "V");
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
    }
    public static void Main()
    {
        // Option data
        double expiry     = 0.25;
        double strike     = 10.0;
        double volatility = 0.30;
        double interest   = 0.06;
        double dividend   = 0.0;
        double truncation = 5 * strike; // Magic number

        /* // P = 5.84..
         * double expiry = 0.25;
         * double strike = 65.0;
         * double volatility = 0.30;
         * double interest = 0.08;
         * double dividend = 0.0;
         * double truncation = 5 * strike; // Magic number
         */

        Pde_BS pde = new Pde_BS(expiry, strike, volatility, interest, dividend, truncation);

        // Numerical data
        int J  = 325;
        int NT = 300 * 300;

        Console.WriteLine("Explicit method, be patient ...");

        // Create the mesh
        Mesher1D        mesh = new Mesher1D(0.0, truncation, expiry);
        Vector <double> xarr = new Vector <double>(mesh.xarr(J));
        Vector <double> tarr = new Vector <double>(mesh.tarr(NT));

        FDM         fdm  = new FDM(pde);
        FDMDirector fdir = new FDMDirector(fdm, xarr, tarr);

        fdir.Start();

        printOneExcel(xarr, fdir.current(), "Value");     // Display in Excel
    }