public void initIC()
    { // Utility function to initialise the payoff function
        // Initialise at the boundaries
        vecOld[vecOld.MinIndex] = pde.BCL(taxis.low);
        vecOld[vecOld.MaxIndex] = pde.BCR(taxis.high);

        // Now initialise values in interior of interval using
        // the initial function 'IC' from the PDE
        for (int j = xarr.MinIndex + 1; j <= xarr.MaxIndex - 1; j++)
        {
            vecOld[j] = pde.IC(xarr[j]);
        }

        // Matrix: rows are the time t, columns are the space x.
        res.Row(res.MinRowIndex, vecOld);
    }
    public void initIC()
    { // Utility function to initialise the payoff function
        currentIndex = res.MinRowIndex;
        maxIndex     = res.MaxRowIndex;

        tprev = tnow = taxis.low;

        // Initialise at the boundaries
        vecOld[vecOld.MinIndex] = pde.BCL(taxis.low);
        vecOld[vecOld.MaxIndex] = pde.BCR(taxis.high);

        // Now initialise values in interior of interval using
        // the initial function 'IC' from the PDE
        for (int j = xarr.MinIndex + 1; j <= xarr.MaxIndex - 1; j++)
        {
            vecOld[j] = pde.IC(xarr[j]);
        }


        res.Row(currentIndex, vecOld);
    }