require(ReacTran)
dx    <- 0.2
xgrid <- setup.grid.1D(-100, 100, dx.1 = dx)
x     <- xgrid$x.mid
N     <- xgrid$N

lam   <- 0.05
uini  <- exp(-lam*x^2)
vini  <- rep(0, N)
yini  <- c(uini, vini)
times <- seq (from = 0, to = 50, by = 1)

wave <- function (t, y, parms) {
  u <- y[1:N]
  v <- y[(N+1):(2*N)]
  
  du <- v
  dv <- tran.1D(C = u, C.up = 0, C.down = 0, D = 1, 
               dx = xgrid)$dC
  
  return(list(c(du, dv)))
}

out <- ode.1D(func = wave, y = yini, times = times, 
             parms = NULL, method = "adams",
             dimens = N, names = c("u", "v")) 

outtime <- seq(from = 0, to = 50, by = 10) 
matplot.1D(out, which = "u", subset = time %in% outtime,
    grid = x, xlab = "x", ylab = "u", type = "l", 
    lwd = 2, xlim = c(-50, 50), col = c("black", rep("darkgrey", 5)))

image(out, which = "u")