R/setup.grid.2D.R

Defines functions setup.grid.2D

Documented in setup.grid.2D

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

Try the ReacTran package in your browser

Any scripts or data that you put into this service are public.

ReacTran documentation built on Aug. 15, 2017, 3:01 p.m.