# Configuration of IBVP
maxIteration = 10

################################################################################
# Grid construction
################################################################################
# Grid point data      
theta_gdp = [Ntheta*2**i for i in range(num_of_grids)]
phi_gdp = [Nphi*2**i for i in range(num_of_grids)]

# Build grids
grids = [
    grid.UniformCart(
        (theta_gdp[i], phi_gdp[i]),
        [(thetastart, thetastop), (phistart, phistop)],
        comparison = theta_gdp[i] * phi_gdp[i],
    ) 
    for i in range(num_of_grids)
]

################################################################################
# Print logging information
################################################################################
if __debug__:
    log.debug("HDF file = %s"%args.f)
    log.debug("Start time = %f"%tstart)
    log.debug("Stop time = %f"%tstop)
    log.debug("CFLs are = %s"%repr(CFLs))

################################################################################
# Determine the boundary data
ghost_points = (raxis_1D_diffop.ghost_points(),)
internal_points = (raxis_1D_diffop.internal_points(),)
b_data = grid.MPIBoundary(
    ghost_points, 
    internal_points, 
    mpi_comm=mpi_comm, 
    number_of_dimensions=1
)

# Build grids
grids = [
    grid.UniformCart(
        (raxis_gdp[i],), 
        [[xstart, xstop]], 
        comparison=raxis_gdp[i],
        mpi_comm=mpi_comm,
        boundary_data=b_data
        ) 
    for i in range(num_of_grids)
    ]  

################################################################################
# Initialise systems
################################################################################
systems = []
if __debug__:
    log.debug("Initialising systems.")
for i in range(num_of_grids):
    systems += [OneDAdvectionMpi.OneDAdvectionMpi(\
        raxis_1D_diffop, speed,
################################################################################
# Grid construction
################################################################################

# Grid point data
raxis_gdp = [N * 2**i for i in range(num_of_grids)]

# Calcualte number of ghost points. I assume that number required on the right
# and left are the same.
ghp = 2  #raxis_1D_diffop.ghost_points()
ghost_points = ghp

# Build grids
grids = [
    grid.UniformCart((raxis_gdp[i], ), [(xstart, xstop)],
                     comparison=raxis_gdp[i]) for i in range(num_of_grids)
]

################################################################################
# Print logging information
################################################################################
if log.isEnabledFor(logging.DEBUG):
    log.debug("HDF file = %s" % args.f)
    log.debug("Start time = %f" % tstart)
    log.debug("Stop time = %f" % tstop)
    log.debug("CFLs are = %s" % repr(CFLs))
    log.debug("grids = %s" % repr(grids))

################################################################################
# Initialise systems
################################################################################
from coffee import ibvp, solvers, grid
from coffee.actions import gp_plotter

from OneDWave import OneDwave

system = OneDwave()
solver = solvers.RungeKutta4(system)
grid = grid.UniformCart((200,), [(0, 4)])

plotter = gp_plotter.Plotter1D(
    system,
    'set terminal qt',
    'set yrange [-1:1]',
    'set style data lines',
)

problem = ibvp.IBVP(solver, system, grid=grid, action=[plotter])
problem.run(0, 3)
# Determine the boundary data
ghost_points = (xaxis_1D_diffop.ghost_points(), yaxis_1D_diffop.ghost_points())
internal_points = (
    xaxis_1D_diffop.internal_points(),
    yaxis_1D_diffop.internal_points(),
)
b_data = grid.MPIBoundary(ghost_points,
                          internal_points,
                          mpi_comm=mpi_comm,
                          number_of_dimensions=2)

# Build grids
grids = [
    grid.UniformCart(axes[i], [(xstart, xstop), (ystart, ystop)],
                     comparison=i,
                     mpi_comm=mpi_comm,
                     boundary_data=b_data) for i in range(num_of_grids)
]

################################################################################
# Print logging information
################################################################################
if __debug__:
    log.debug("HDF file = %s" % args.d)
    log.debug("Start time = %f" % tstart)
    log.debug("Stop time = %f" % tstop)
    log.debug("CFLs are = %s" % repr(CFLs))
    log.debug("grids = %s" % repr(grids))

################################################################################
# Initialise systems