Transport PK#

The Transport PK describes the conservation of mass of components transported with water as it flows. The transport PK is based on the advection-diffusion equation, applies to one or more components that are dissolved in the aqueous phase, and is currently used in both surface and subsurface compartments. The key difference between surface and subsurface transport is in capturing the volume of water. In the subsurface, the volume of water is set by the porosity and saturation of the porous medium, while in the surface it is set by the ponded depth.

The advection-diffusion equation for component i in partially saturated porous media may be written as

\[\frac{\partial (\phi s_l C_i)}{\partial t} = - \boldsymbol{\nabla} \cdot (\boldsymbol{q} C_i) + \boldsymbol{\nabla} \cdot (\phi s_l\, (\boldsymbol{D^*}_l + \tau \boldsymbol{D}_i) \boldsymbol{\nabla} C_i) + Q_s,\]

The advection-diffusion equation for component i in the surface may be written as

\[\frac{\partial (C_i)}{\partial t} = - \boldsymbol{\nabla} \cdot (\boldsymbol{q_s} C_i) + \boldsymbol{\nabla} \cdot ( (\boldsymbol{D^*}_l + \tau \boldsymbol{D}_i) \boldsymbol{\nabla} C_i) + Q_s,\]

transport-spec

  • “PK type[string] “transport ats”

  • “domain name[string] domain specifies mesh name that defines the domain of this PK.

  • “component names[Array(string)] No default. Provides the names of the components that will be transported. Must be in the order: aqueous, gaseous, solid.

  • “number of aqueous components[int] -1 The total number of aqueous components. Default value is the length of “component names

  • “number of gaseous components[int] 0 The total number of gaseous components.

  • “boundary conditions[transport-bc-spec] Boundary conditions for transport are dependent on the boundary conditions for flow. See `Flow-specific Boundary Conditions`_ and `Transport-specific Boundary Conditions`_

  • “component molar masses[Array(double)] No default. Molar mass of each component.

  • “molecular diffusion[molecular-diffusion-spec] defines names of solutes in aqueous and gaseous phases and related diffusivity values.

  • “material properties” [material-properties-spec-list] Defines material properties see below).

Source terms:

  • “source terms[transport-source-spec-list] Provides solute source.

Physical model and assumptions:

  • “physical models and assumptions” [material-properties-spec] Defines material properties.

  • “effective transport porosity[bool] false If true, effective transport porosity will be used by dispersive-diffusive fluxes instead of total porosity.

Math and solver algorithm options:

  • “diffusion[pde-diffusion-spec] Diffusion drives the distribution. Typically we use finite volume here. See PDE_Diffusion_

  • “diffusion preconditioner[pde-diffusion-spec] Inverse of the above. Likely only Jacobian term options are needed here, as the others default to the same as the “diffusion” list. See PDE_Diffusion_.

  • “inverse[inverse-typed-spec] Inverse_ method for the solve.

  • “cfl” [double] Time step limiter, a number less than 1. Default value is 1.

  • “spatial discretization order” [int] defines accuracy of spatial discretization. It permits values 1 or 2. Default value is 1.

  • “temporal discretization order” [int] defines accuracy of temporal discretization. It permits values 1 or 2 and values 3 or 4 when expert parameter “generic RK implementation” is set to true. Note that RK3 is not monotone. Default value is 1.

  • “reconstruction” [list] collects reconstruction parameters. The available options are

    describe in the separate section below.

  • “transport subcycling[bool] true The code will default to

    subcycling for transport within the master PK if there is one.

Developer parameters:

  • “enable internal tests” [bool] turns on various internal tests during

    run time. Default value is “false”.

  • “generic RK implementation” [bool] leads to generic implementation of

    all Runge-Kutta methods. Default value is “false”.

  • “internal tests tolerance” [double] tolerance for internal tests such as the

    divergence-free condition. The default value is 1e-6.

  • “runtime diagnostics: solute names” [Array(string)] defines solutes that will be

    tracked closely each time step if verbosity “high”. Default value is the first solute in the global list of “aqueous names” and the first gas in the global list of “gaseous names”.

  • “runtime diagnostics: regions” [Array(string)] defines a boundary region for

    tracking solutes. Default value is a seepage face boundary, see Flow PK.

KEYS

  • “saturation liquid” This variable is a multiplier in in the

    accumulation term. For subsurface transport, this will typically be the saturation (“saturation_liquid”). For surface transport, this will typically be the ponded depth (“ponded_depth”).

  • “previous saturation liquid

  • “molar density liquid” Transport is solved

    for concentrations in units of mol fractions. Molar density is needed for conversion.

  • “water flux

  • “water source” Defines the water injection rate [mol H2O m^-2 s^-1] in

    surface and [mol H2O m^-3 s^-1] in subsurface) which applies to concentrations specified by the “geochemical conditions”. Note that if this PK is coupled to a surface flow PK, the unit of the water source there must be in [mol m^-2 s^-1], not in [m s^-1] as is an option for that PK (e.g. “water source in meters” must be set to “false” in the overland flow PK).

    The injection rate of a solute [molC s^-1], when given as the product of a concentration and a water source, is evaluated as:

    Concentration [mol C L^-1] *

    1000 [L m^-3] of water * water source [mol H2O m^-3 s^-1] * volume of injection domain [m^3] / molar density of water [mol H2O m^-3]

molecular-diffusion-spec

  • “aqueous names[Array(string)] List of aqueous component names to be diffused.

  • “aqueous values[Array(string)] Diffusivities of each component.

<ParameterList name="molecular diffusion">
  <Parameter name="aqueous names" type=Array(string)" value="{CO2(l),Tc-99}"/>
  <Parameter name="aqueous values" type=Array(double)" value="{1e-8,1e-9}"/>
</ParameterList>

material-properties-spec

  • “region[Array(string)] Defines geometric regions for material SOIL.

  • “model[string] scalar Defines dispersivity model. One of:

    • “scalar” : scalar dispersivity

    • “Bear” : dispersion split into along- and across- velocity

    • “Burnett-Frind

    • “Lichtner-Kelkar-Robinson

  • “parameters for MODEL[list] where “MODEL” is the model name.

IF model == scalar

ONE OF

  • “alpha[double] defines dispersivity in all directions, [m].

OR

  • “dispersion coefficient[double] defines dispersion coefficient [m^2 s^-1].

END

ELSE IF model == Bear

  • “alpha_l[double] defines dispersion in the direction of Darcy velocity, [m].

  • “alpha_t[double] defines dispersion in the orthogonal direction, [m].

ELSE IF model == Burnett-Frind

  • “alphaL[double] defines the longitudinal dispersion in the direction of Darcy velocity, [m].

  • “alpha_th[double] Defines the transverse dispersion in the horizonal direction orthogonal directions, [m].

  • “alpha_tv[double] Defines dispersion in the orthogonal directions, [m]. When “alpha_th” equals to “alpha_tv”, we obtain dispersion in the direction of the Darcy velocity.

ELSE IF model == Lichtner-Kelker-Robinson

  • “alpha_lh[double] defines the longitudinal dispersion in the horizontal direction, [m].

  • “alpha_lv[double] Defines the longitudinal dispersion in the vertical direction, [m]. When “alpha_lh” equals to “alpha_lv”, we obtain dispersion in the direction of the Darcy velocity.

  • “alpha_th[double] Defines the transverse dispersion in the horizontal direction orthogonal directions, [m].

  • “alpha_tv” ``[double]` Defines dispersion in the orthogonal directions. When “alpha_th” equals to “alpha_tv”, we obtain dispersion in the direction of the Darcy velocity.

END

  • “aqueous tortuosity[double] Defines tortuosity for calculating diffusivity of liquid solutes, [-].

  • “gaseous tortuosity[double] Defines tortuosity for calculating diffusivity of gas solutes, [-].

transport-source-spec

  • “component mass source[list] Defines solute source injection rate.

    • “spatial distribution method[string] One of:

      • “volume”, source is considered as extensive quantity [molC s^-1] and is evenly distributed across the region.

      • “none”, source is considered as intensive quantity. [molC m^-2 s^-1] in surface and [molC m^-3 s^-1] in subsurface

    • “geochemical[list] Defines a source by setting solute concentration for all components (in moles/L) and an injection rate given by the water source. Currently, this option is only available for Alquimia provided geochemical conditions.

      • “geochemical conditions[Array(string)] List of geochemical constraints providing concentration for solute injection.