setup.grid.2D.R
##==============================================================================
# Creation of a two-dimensional finite difference grid
##==============================================================================
setup.grid.2D <- function(x.grid=NULL, y.grid=NULL) {
## check input
gn <- names(x.grid)
if (! "x.up" %in% gn)
stop("error in setup.2Dgrid: x.grid should be a list that contains x.up")
if (! "x.down" %in% gn)
stop("error in setup.2Dgrid: x.grid should be a list that contains x.down")
if (! "x.mid" %in% gn)
stop("error in setup.2Dgrid: x.grid should be a list that contains x.mid")
if (! "x.int" %in% gn)
stop("error in setup.2Dgrid: x.grid should be a list that contains x.int")
if (! "dx" %in% gn)
stop("error in setup.2Dgrid: x.grid should be a list that contains dx")
if (! "dx.aux" %in% gn)
stop("error in setup.2Dgrid: x.grid should be a list that contains dx.aux")
if (! "N" %in% gn)
stop("error in setup.2Dgrid: x.grid should be a list that contains N")
gn <- names(y.grid)
if (! "x.up" %in% gn)
stop("error in setup.2Dgrid: y.grid should be a list that contains x.up")
if (! "x.down" %in% gn)
stop("error in setup.2Dgrid: y.grid should be a list that contains x.down")
if (! "x.mid" %in% gn)
stop("error in setup.2Dgrid: y.grid should be a list that contains x.mid")
if (! "x.int" %in% gn)
stop("error in setup.2Dgrid: y.grid should be a list that contains x.int")
if (! "dx" %in% gn)
stop("error in setup.2Dgrid: y.grid should be a list that contains dx")
if (! "dx.aux" %in% gn)
stop("error in setup.2Dgrid: y.grid should be a list that contains dx.aux")
if (! "N" %in% gn)
stop("error in setup.2Dgrid: y.grid should be a list that contains N")
## Packaging of results
Nx <- length(x.grid$x.mid)
Ny <- length(y.grid$x.mid)
Res <- list(x.up = x.grid$x.up,
x.down = x.grid$x.down,
x.mid = x.grid$x.mid, # position of centre of the grid cells, vector of length N
x.int = x.grid$x.int, # position grid cell interfaces , vector of length N+1
dx = matrix(nrow=Nx, ncol=Ny, x.grid$dx), # thickness of grid cells , vector length N
dx.aux = matrix(nrow=Nx+1, ncol=Ny, x.grid$dx.aux), # auxiliary vector with distances between centre of adjacent cells, first and last: half of cell size, vector of length N+1
x.N = x.grid$N, # number of vertical grid layers
y.up = y.grid$x.up,
y.down = y.grid$x.down,
y.mid = y.grid$x.mid, # position of centre of the grid cells, vector of length N
y.int = y.grid$x.int, # position grid cell interfaces , vector of length N+1
dy = matrix(nrow=Nx, ncol=Ny, data=y.grid$dx, byrow=TRUE), # thickness of grid cells , vector length N
dy.aux = matrix(nrow=Nx, ncol=Ny+1, y.grid$dx.aux, byrow=TRUE), # auxiliary vector with distances between centre of adjacent cells, first and last: half of cell size, vector of length N+1
y.N = y.grid$N) # number of horizontal grid layers
class(Res) <- "grid.2D"
return(Res)
}