##============================================================================== # 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) }