Mredistribution-class: Mass Redistribution function

Description Details Slots Examples

Description

A description of a process that transfers mass from one domain to another. A common example is the dissolution of NAPL into groundwater. In this case, slot from may be "NAPL", slot to may be "plume" and slot flux will be a function which returns the rate of mass transfer (dissolution) from the NAPL domain into the plume domain, as a function of the NAPL mass.

Details

The flux function must at least have the five arguments named above, as well as any arguments for the parameters within the function, even if in fact they are not all used. The function may also use variables that will exist in the DNST solver function by using, for example, get("qh", env). Typically, qh will feature somewhere in some functions, as the dissolution mass flux, for example, will depend on the water speed through the source zone. qh is given to DNST as a layer-by-layer function of time, so it is common to use get("qh", env)[[LAY]](time) in the flux function. Some functions may also use the M array in order to include some dependency on the source zone history. When included as part of a DNAPLmodel (as intended), the function may use any of the parameters saved in the slot params as well. Remember to subset these parameters by layer (par[[LAY]]) when the parameters could vary by layer.

When used in DNST, the solver function, no flux is allowed to reduce the mass of a domain below 0, so the solution is always stable. Therefore, this needn't be worried about in the flux function.

Mredistribution objects are created within the provided DNAPLmodel creation functions (cstG.DNmodel, cnvG.DNmodel and DDpg.DNmodel currently). Defining your own Mredistribution is fairly advanced and will require some understanding of environments in R.

Slots

from

character string; the domain from which mass is taken

to

character string; the domaint to which mass is sent

flux

function; a function whose arguments are:
fromM: mass of from domain
toM: mass of to domain
LAY: the layer of the DNAPL model
time: in days since 30/12/1899
env: the calling function's environment
other parameters used within the function that are not got from the DNST environment (see example)
and whose output represents the rate of mass transfer between the from and to domains (negative outputs are permitted and imply a flux the other way; in this way an equilibrium may be set up)

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# exponentially declining dissolution of a NAPL pool
## Not run: 
Ndiss <- Mredistribution(from = "pool",
                         to = "plume",
                         flux = function(fromM, toM, LAY, time, env,
                                         pool.width, pool.height, solubility){
                           # get historic maximum of mass from this layer
                           # - use get("M", env) to access the mass array from
                           #    the DNST master function which will call this
                           #    function
                           max.mass.so.far <- max(get("M", env)[LAY,, "pool"])

                           # to use this redistribution model, pool.width and
                           #  pool.height will need to be defined in the global
                           #  environment or, better, included in the params
                           #  slot of the DNAPLmodel object which contains this
                           #  Mredistribution object
                           Xsect.area <- pool.width*pool.height

                           # again, horizontal flow (Darcy velocity) is accessed
                           #  by get("qh", env)
                           # solubility must be defined in the same way as
                           #  pool.width and pool.height (see comment above)
                           solubility*Xsect.area*get("qh", env)[[LAY]](time)*fromM/max.mass.so.far
                         })

## End(Not run)

CJBarry/DNAPL documentation built on May 6, 2019, 9:25 a.m.