123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <h2>DESCRIPTION</h2>
- This numerical module calculates implicit transient and steady state,
- confined groundwater flow in three dimensions based on volume maps
- and the current 3D region settings.
- All initial- and boundary-conditions must be provided as volume maps.
- The unit in the location must be meters.
- <p>This module is sensitive to mask settings. All cells which are outside
- the mask are ignored and handled as no flow boundaries.
- <p>The module calculates the piezometric head and optionally the water
- balance for each cell and the groundwater velocity field in 3 dimensions.
- The vector components can be visualized with ParaView if they are exported
- with <em>r3.out.vtk</em>.
- <p>The groundwater flow will always be calculated transient.
- For steady state computation the user should set the timestep
- to a large number (billions of seconds) or set the
- specific yield raster map to zero.
- <h2>NOTES</h2>
- The groundwater flow calculation is based on Darcy's law and a numerical
- implicit finite volume discretization. The discretization results in a
- symmetric and positive definit linear equation system in form of
- <i>Ax = b</i>, which must be solved. The groundwater flow partial
- differential equation is of the following form:
- <p>(dh/dt)*S = div (K grad h) + q
- <p>In detail for 3 dimensions:
- <p>(dh/dt)*S = Kxx * (d^2h/dx^2) + Kyy * (d^2h/dy^2) + Kzz * (d^2h/dz^2) + q
- <ul>
- <li>h -- the piezometric head im meters [m]</li>
- <li>dt -- the time step for transient calculation in seconds [s]</li>
- <li>S -- the specific yield [1/m]</li>
- <li>b -- the bottom surface of the aquifer meters [m]</li>
- <li>Kxx -- the hydraulic conductivity tensor part in x direction in meter per second [m/s]</li>
- <li>Kyy -- the hydraulic conductivity tensor part in y direction in meter per seconds [m/s]</li>
- <li>Kzz -- the hydraulic conductivity tensor part in z direction in meter per seconds [m/s]</li>
- <li>q - inner source/sinc in [1/s]</li>
- </ul>
- <p>Two different boundary conditions are implemented, the Dirichlet and
- Neumann conditions. By default the calculation area is surrounded by
- homogeneous Neumann boundary conditions. The calculation and boundary
- status of single cells can be set with the status map, the following
- cell states are supported:
- <ul>
- <li>0 == inactive - the cell with status 0 will not be calulated,
- active cells will have a no flow boundary to an inactive cell</li>
- <li>1 == active - this cell is used for groundwater calculation,
- inner sources can be defined for those cells</li>
- <li>2 == Dirichlet - cells of this type will have a fixed piezometric
- head value which do not change over time </li>
- </ul>
- <p>Note that all required raster maps are read into main memory. Additionally
- the linear equation system will be allocated, so the memory consumption of
- this module rapidely grow with the size of the input maps.
- <p>The resulting linear equation system <i>Ax = b</i> can be solved with
- several solvers. An iterative solvers with sparse and quadratic matrices
- support is implemented.
- The conjugate gradients method with (pcg) and without (cg) precondition.
- Aditionally a direct Cholesky solver is available. This direct solver
- only work with normal quadratic matrices, so be careful using them with
- large maps (maps of size 10.000 cells will need more than one Gigabyte
- of RAM). The user should always prefer to use a sparse matrix solver.
- <h2>EXAMPLE 1</h2>
- This small script creates a working groundwater flow area and
- data. It cannot be run in a lat/lon location.
- <div class="code"><pre>
- # set the region accordingly
- g.region res=25 res3=25 t=100 b=0 n=1000 s=0 w=0 e=1000 -p3
- #now create the input raster maps for a confined aquifer
- r3.mapcalc expression="phead = if(row() == 1 && depth() == 4, 50, 40)"
- r3.mapcalc expression="status = if(row() == 1 && depth() == 4, 2, 1)"
- r3.mapcalc expression="well = if(row() == 20 && col() == 20 && depth() == 2, -0.25, 0)"
- r3.mapcalc expression="hydcond = 0.00025"
- r3.mapcalc expression="syield = 0.0001"
- r.mapcalc expression="recharge = 0.0"
- r3.gwflow solver=cg phead=phead status=status hc_x=hydcond hc_y=hydcond \
- hc_z=hydcond q=well s=syield r=recharge output=gwresult dt=8640000 vx=vx vy=vy vz=vz budget=budget
- # The data can be visualized with ParaView when exported with r3.out.vtk
- r3.out.vtk -p in=gwresult,status,budget vector=vx,vy,vz out=/tmp/gwdata3d.vtk
- #now load the data into ParaView
- paraview --data=/tmp/gwdata3d.vtk
- </pre></div>
- <h2>EXAMPLE 2</h2>
- This will create a nice 3D model with geological layer with different
- hydraulic conductivities. Make sure you are not in a lat/lon projection.
- <div class="code"><pre>
- # set the region accordingly
- g.region res=15 res3=15 t=500 b=0 n=1000 s=0 w=0 e=1000
- #now create the input raster maps for a confined aquifer
- r3.mapcalc expression="phead = if(col() == 1 && depth() == 33, 50, 40)"
- r3.mapcalc expression="status = if(col() == 1 && depth() == 33, 2, 1)"
- r3.mapcalc expression="well = if(row() == 20 && col() == 20 && depth() == 3, -0.25, 0)"
- r3.mapcalc expression="well = if(row() == 50 && col() == 50 && depth() == 3, -0.25, well)"
- r3.mapcalc expression="hydcond = 0.0025"
- r3.mapcalc expression="hydcond = if(depth() < 30 && depth() > 23 && col() < 60, 0.000025, hydcond)"
- r3.mapcalc expression="hydcond = if(depth() < 20 && depth() > 13 && col() > 7, 0.000025, hydcond)"
- r3.mapcalc expression="hydcond = if(depth() < 10 && depth() > 7 && col() < 60, 0.000025, hydcond)"
- r3.mapcalc expression="syield = 0.0001"
- r3.gwflow solver=cg phead=phead status=status hc_x=hydcond hc_y=hydcond \
- hc_z=hydcond q=well s=syield output=gwresult dt=8640000 vx=vx vy=vy vz=vz budget=budget
- # The data can be visualized with paraview when exported with r3.out.vtk
- r3.out.vtk -p in=gwresult,status,budget,hydcond,well vector=vx,vy,vz out=/tmp/gwdata3d.vtk
- #now load the data into paraview
- paraview --data=/tmp/gwdata3d.vtk
- </pre></div>
- <h2>SEE ALSO</h2>
- <em>
- <a href="r.gwflow.html">r.gwflow</a>,
- <a href="r.solute.transport.html">r.solute.transport</a>,
- <a href="r3.out.vtk.html">r3.out.vtk</a>
- </em>
- <h2>AUTHOR</h2>
- Sören Gebbert
- <p>This work is based on the Diploma Thesis of Sören Gebbert available
- <a href="http://www.hydrogeologie.tu-berlin.de/fileadmin/fg66/_hydro/Diplomarbeiten/2007_Diplomarbeit_Sören_Gebbert.pdf">here</a>
- at Technical University Berlin, Germany.
- <p><i>Last changed: $Date$</i>
|