Skip to content

Commit

Permalink
Merge pull request #26310 from ChiCoTran/groundwater_solute_transport
Browse files Browse the repository at this point in the history
Groundwater solute transport
  • Loading branch information
cpgr authored Dec 20, 2023
2 parents 1a970e9 + 43c204b commit 239580c
Show file tree
Hide file tree
Showing 16 changed files with 873 additions and 3 deletions.
36 changes: 33 additions & 3 deletions modules/porous_flow/doc/content/bib/porous_flow.bib
Original file line number Diff line number Diff line change
Expand Up @@ -579,8 +579,6 @@ @article{REHBINDER1995453
abstract = {Semi-analytical or closed analytical solutions of the stationary thermo-hydro-mechanical fields can be obtained if the fields are stationary and the geometry is cylindrical or spherical. The fundamental difficulty of the problem is the non-linear convective term that appears in the heat transport equation. If Peclet's number is small, the problem can be treated as a regular perturbation problem, and the zeroth and first order perturbation terms are rather easily derived in closed form. If the strain is plane, the choice of boundary conditions at the outer boundary has a strong influence on the solution. The difference between the solutions for plane and spherical strain is considerable, not only far from but also near the heat source.}
}



@TechReport{Oldenburg1995OnTD,
title={On the Development of MP-TOUGH2},
author={C. M. Oldenburg and Ruth L. Hinkins and George J. Moridis and Karsten Pruess},
Expand All @@ -597,4 +595,36 @@ @article{Elder1967TransientCI
volume={27},
pages={609 - 623},
url={https://api.semanticscholar.org/CorpusID:123656493}
}
}
@Article{w14081310,
AUTHOR = {Karmakar, Shyamal and Tatomir, Alexandru and Oehlmann, Sandra and Giese, Markus and Sauter, Martin},
TITLE = {Numerical Benchmark Studies on Flow and Solute Transport in Geological Reservoirs},
JOURNAL = {Water},
VOLUME = {14},
YEAR = {2022},
NUMBER = {8},
ARTICLE-NUMBER = {1310},
URL = {https://www.mdpi.com/2073-4441/14/8/1310},
ISSN = {2073-4441},
ABSTRACT = {Predicting and characterising groundwater flow and solute transport in engineering and hydrogeological applications, such as dimensioning tracer experiments, rely primarily on numerical modelling techniques. During software selection for numerical modelling, the accuracy of the results, financial costs of the simulation software, and computational resources should be considered. This study evaluates numerical modelling approaches and outlines the advantages and disadvantages of several simulators in terms of predictability, temporal control, and computational efficiency conducted in a single user and single computational resource set-up. A set of well-established flow and transport modelling simulators, such as MODFLOW/MT3DMS, FEFLOW, COMSOL Multiphysics, and DuMuX were tested and compared. These numerical simulators are based on three numerical discretisation schemes, i.e., finite difference (FD), finite element (FE), and finite volume (FV). The influence of dispersivity, potentially an artefact of numerical modelling (numerical dispersion), was investigated in parametric studies, and results are compared with analytical solutions. At the same time, relative errors were assessed for a complex field scale example. This comparative study reveals that the FE-based simulators COMSOL and FEFLOW show higher accuracy for a specific range of dispersivities under forced gradient conditions than DuMuX and MODFLOW/MT3DMS. FEFLOW performs better than COMSOL in regard to computational time both in single-core and multi-core computing. Overall computational time is lowest for the FD-based simulator MODFLOW/MT3DMS while the number of mesh elements is low (here < 12,800 elements). However, for finer discretisation, FE software FEFLOW performs faster.},
DOI = {10.3390/w14081310}
}

@techreport{Ogata1961ASO,
title={A solution of the differential equation of longitudinal dispersion in porous media},
author={Akio Ogata and Robert B. Banks and Stewart Lee Udall and Thomas B Nolan},
year={1961},
url={https://api.semanticscholar.org/CorpusID:117806845},
institution={United States Department of the Interior}
}

@article{Schroth,
author = {Schroth, M.H and Istok, Jonathan and Haggerty, Roy},
year = {2000},
month = {10},
pages = {105-117},
title = {In situ evaluation of solute retardation using single-well push–pull tests},
volume = {24},
journal = {Advances in Water Resources},
doi = {10.1016/S0309-1708(00)00023-3}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ The following tutorial and example problems demonstrate the capabilities of the
- [modules/porous_flow/groundwater_models.md]
- [modules/porous_flow/ates.md]
- [modules/porous_flow/natural_convection.md]
- [modules/porous_flow/solute_tracer_transport.md]
- [modules/porous_flow/tests.md]

!! example-list-end
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
# Flow and Solute Transport in Porous Media

## 1D solute transportation

### Problem statement

This example is based on [!cite](w14081310). The transportation of tracer in water in a 1D porous tank is modelled. The schematic is demonstrated in [!ref](schematic_tracer). The experiment details are elaborated in the referred paper so will not be shown here to avoid repetition. The governing equations are provided below:

\begin{equation}
\label{eq:fluid_equa}
\frac{\partial p}{\partial t} + \nabla\cdot{\mathbf
v} = 0.
\end{equation}

\begin{equation}
\label{eq:tracer_equa}
\frac{\partial C}{\partial t} + \nabla\cdot({\mathbf
v}C - {\mathbf
D_\beta}\nabla C) = 0.
\end{equation}

Notation used in these equations is summarised in the
[nomenclature](/porous_flow/nomenclature.md).


!table id=datatable caption=Parameters of the problem .
| Symbol | Quantity | Value | Units |
| --- | --- | --- | --- |
| $\phi$ | Porosity | $0.25$ | $-$ |
| $k$ | Permeability | $1*10^{-11}$ | $m^2$ |
| $\mu$ | Viscosity ($T=20^oC$) | $1*10^{-3}$ | $J.Kg^{-1}.s^{-1}.m^{-1}$ |
| $g$ | Gravity | $9.81$ | $m.s^{2}$ |
| $T_0$ | Initial temperature | $293$ | $^oK$ |
| $t$ | Total time | $200$ | days |


!media porous_flow/schematic_tracer.png caption=The schematic of the problem [!cite](w14081310). id=schematic_tracer

### Input file setup

This section describes the input file syntax.

### Mesh

The first step is to set up the mesh. In this problem, a tank with a length of 100 m is simulated and an element size of 1 m is used.

!listing modules/porous_flow/examples/solute_tracer_transport/solute_tracer_transport.i block=Mesh

### Fluid properties

After the mesh has been specified, we need to provide the fluid properties that are used for this simulation. For our case, it will be just water and can be easily implemented as follows:

!listing modules/porous_flow/examples/solute_tracer_transport/solute_tracer_transport.i block=FluidProperties

### Variables declaration

Then, we need to declare what type of unknown we are solving. This can be done in the variable code block. Since we are focusing on the concentration of tracer at x =50 m, C is a desired variable. Porepressure is also used for the fluid motion. Since we only have constant initial conditions so they can be directly supplied here.

!listing modules/porous_flow/examples/solute_tracer_transport/solute_tracer_transport.i block=Variables

### Kernel declaration

This section describes the physics we need to solve. To do so, some kernels are declared. In MOOSE, the required kernels depend on the terms in the governing equations. For this problem, six kernels were declared. To have a better understanding, users are recommended to visit [this page](governing_equations.md). The code block is shown below with the first three kernels associated with equation 1 and the remain associated with equation 2.

!listing modules/porous_flow/examples/solute_tracer_transport/solute_tracer_transport.i start=[Kernels] end=[FluidProperties]


### Material setup

Additional material properties are required , which are declared here:

!listing modules/porous_flow/examples/solute_tracer_transport/solute_tracer_transport.i block=Materials

### Boundary Conditions

The next step is to supply the boundary conditions. There are three Dirichlet boundary conditions that we need to supply. The first two are constant pressure at the inlet and outlet denoted as `constant_inlet_pressure` and `constant_outlet_porepressure`. Another one is constant tracer concentration at the inlet denoted as `inlet_tracer`. Finally, a PorousFlowOutflowBC boundary condition was supplied at the outlet to allow the tracer to freely move out of the domain.

!listing modules/porous_flow/examples/solute_tracer_transport/solute_tracer_transport.i block=BCs

### Executioner setup

For this problem, a transient solver is required.
To save time and computational resources, [`IterationAdaptiveDT`](IterationAdaptiveDT.md) was implemented. This option enables the time step to be increased if the solution converges and decreased if it does not. Thus, this will help save time if a large time step can be used and aid in convergence if a small time step is required. For practice, users can try to disable it by putting the code block into comment and witnessing the difference in the solving time and solution.

!listing modules/porous_flow/examples/solute_tracer_transport/solute_tracer_transport.i block=Executioner

### Auxilary kernels and variables (optional)

This section is optional since these kernels and variables do not affect the calculation of the desired variable. In this example, we want to know the Darcy velocity in the x direction thus we will add an auxkernel and an auxvariable for it.

!listing modules/porous_flow/examples/solute_tracer_transport/solute_tracer_transport.i block=AuxVariables

!listing modules/porous_flow/examples/solute_tracer_transport/solute_tracer_transport.i block=AuxKernels

### Postprocessor

As previously discussed, we only want to know the variation of concentration (C) and x-direction Darcy velocity at x=50 m over time. So, we need to tell MOOSE to only write that information into the result file via this code block.

!listing modules/porous_flow/examples/solute_tracer_transport/solute_tracer_transport.i block=Postprocessors

### Result

The results obtained from MOOSE are compared against the analytical solution proposed by [!cite](Ogata1961ASO).

!media porous_flow/concen_time.png caption= Tracer concentration with respect to time. id=concen_time

!media porous_flow/RMS_tracer.png caption= Root-mean-square error of MOOSE results. id=RMS_tracer

Compared with the benchmark conducted by [!cite](w14081310), it can be seen that MOOSE is capable of delivering accurate results for this type of problem.

!media porous_flow/benchmark_tracer.png caption= The benchmark conducted by [!cite](w14081310). id=benchmark_tracer

## 2D solute transportation

### Problem statement

This example is based on [!cite](w14081310). The transportation of tracer in water in a 2D porous tank is modelled. The schematic is demonstrated in [!ref](schematic_tracer_2D). The parameters are the same as the 1D problem as provided in [!ref](datatable).

!media porous_flow/schematic_tracer_2D.png caption=The schematic of the 2D problem [!cite](w14081310). id=schematic_tracer_2D

### Input file setup

The input file for this problem is similar to the 1D case except for some changes made to account for the 2D mesh and the changes in the boundary conditions which are elaborated in the following sections. Other sections will be the same as the 1D case.

### Mesh

For this problem, to simulate a 2D rectangular aquifer with a point source placed at the origin, the x-domain was chosen from -50 to 50 m and the y-domain from 0 to 50 m.

!listing modules/porous_flow/examples/solute_tracer_transport/solute_tracer_transport_2D.i block=Mesh

### DiracKernels set-up

Since our problem comprises a point source, [`PorousFlowSquarePulsePointSource`](PorousFlowSquarePulsePointSource.md) DiracKernels are required. These DiracKernels inject the water and tracer into the domain at a constant rate. As can be seen below, two DiracKernels are used. The first one supplies the water with a specified mass flux to the system and the second one the tracer.

!listing modules/porous_flow/examples/solute_tracer_transport/solute_tracer_transport_2D.i block=DiracKernels

### Boundary Conditions

The boundary conditions are similar to the 1D case except for the addition of several Dirichlet, and outflow conditions due to the extra faces of the 2D problem. The bottom face was not supplied with any boundary condition as it a line of symmetry (only half the model is simulated). Therefore, no-flow is allowed across this boundary.

!listing modules/porous_flow/examples/solute_tracer_transport/solute_tracer_transport_2D.i block=BCs

### Result

The results obtained from MOOSE are compared against the analytical solution proposed by [!cite](Schroth).

!media porous_flow/concen_time_2D.png caption= Tracer concentration with respect to time. id=concen_time_2D

!media porous_flow/RMS_tracer_2D.png caption= Root-mean-square error of MOOSE results. id=RMS_tracer_2D

Compared with the benchmark conducted by [!cite](w14081310), it can be seen that once again MOOSE is capable of delivering accurate results for this type of problem.

!media porous_flow/benchmark_tracer_2D.png caption= The benchmark conducted by [!cite](w14081310). id=benchmark_tracer_2D
Loading

0 comments on commit 239580c

Please sign in to comment.