Commit 03fe55ba authored by Santiago Ospina De Los Ríos's avatar Santiago Ospina De Los Ríos

Merge branch 'master' into cookbook-infiltration-in-homogeneous-medium

parents 0da8f52e 2bf8045c
......@@ -10,7 +10,7 @@ variables:
BASE_IMAGE: dorie/dune-env
# Use semantic versioning (not the version of DUNE) and bump according to
# to whether changes are backwards-compatible or not.
IMAGE_VERSION: "1.2"
IMAGE_VERSION: "1.3"
DUNE_ENV_IMAGE: ${BASE_IMAGE}:img-v${IMAGE_VERSION}
CMAKE_FLAGS:
......@@ -22,11 +22,38 @@ variables:
-j $CPUS_MULTICORE
RUN_IN_DUNE_ENV: $CI_PROJECT_DIR/build-cmake/run-in-dune-env
# Documentation server configuration
DOC_HOST: root@hermes.iup.uni-heidelberg.de
DOC_PORT: 2345 # ... forwards to utopia_doc_server container. root ok ;)
DOC_REMOTE_BASE_DIR: /var/dorie_doc
DOC_REMOTE_PATH: $DOC_REMOTE_BASE_DIR/$CI_COMMIT_REF_SLUG
image: $DUNE_ENV_IMAGE
before_script:
- cd /opt/dune
# Provide SSH access via the SSH_PRIVATE_KEY and SSH_KNOWN_HOSTS variables
.ssh-access: &ssh_access
before_script:
# Run ssh-agent (inside the build environment)
- eval $(ssh-agent -s)
# Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
# We're using tr to fix line endings which makes ed25519 keys work
# without extra base64 encoding.
# https://gitlab.com/gitlab-examples/ssh-private-key/issues/1#note_48526556
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
# Create the SSH directory and give it the right permissions
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
# Add the known hosts lists to ensure this ssh connection is the right one
- echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
stages:
- setup
- prep
......@@ -100,7 +127,6 @@ build:system-tests: &build-tests
$DUNECONTROL --only=dorie configure
- $DUNECONTROL --only=dorie make $MAKE_FLAGS dorie-rfg
- $DUNECONTROL --only=dorie make $MAKE_FLAGS build_system_tests
- $DUNECONTROL --only=dorie make doc
artifacts:
name: "$CI_JOB_NAME"
paths:
......@@ -126,6 +152,7 @@ build:debug: &debug
$DUNECONTROL --only=dorie configure
- $DUNECONTROL --only=dorie make $MAKE_FLAGS dorie-rfg
- $DUNECONTROL --only=dorie make $MAKE_FLAGS build_unit_tests
- $DUNECONTROL --only=dorie make $MAKE_FLAGS richards_d2_r1 transport_d2_r0_t0
build:debug-clang:
<<: *debug
......@@ -140,7 +167,19 @@ build:debug-clang:
$DUNECONTROL --only=dorie configure
- $DUNECONTROL --only=dorie make $MAKE_FLAGS dorie-rfg
- $DUNECONTROL --only=dorie make $MAKE_FLAGS build_unit_tests
- $DUNECONTROL --only=dorie make $MAKE_FLAGS transport_d2_r0_t0 transport_d2_r1_t0
build:docs:
stage: build
script:
- CMAKE_FLAGS="$CMAKE_FLAGS"
$DUNECONTROL --only=dorie configure
- $DUNECONTROL --only=dorie make doc
artifacts:
name: "$CI_JOB_NAME"
paths:
- $CI_PROJECT_DIR/build-cmake/doc
expire_in: 1 day
# --- Tests ---
test:system-tests: &test
......@@ -212,9 +251,12 @@ deploy:dockerhub-devel: &deploy
- $DOCKER_LOGIN
script:
- docker build -f docker/dorie.dockerfile
--build-arg DUNE_ENV_IMAGE=$DUNE_ENV_IMAGE --build-arg PROCNUM=$CPUS_DIND
--build-arg BASE_IMG_VERSION=$IMAGE_VERSION --build-arg PROCNUM=$CPUS_DIND
-t dorie/dorie:devel .
- docker push dorie/dorie:devel
environment:
name: docker/devel
url: https://hub.docker.com/r/dorie/dorie
deploy:dockerhub-stable:
<<: *deploy
......@@ -222,29 +264,55 @@ deploy:dockerhub-stable:
- tags@dorie/dorie
script:
- docker build -f docker/dorie.dockerfile
--build-arg DUNE_ENV_IMAGE=$DUNE_ENV_IMAGE --build-arg PROCNUM=$CPUS_DIND
--build-arg BASE_IMG_VERSION=$IMAGE_VERSION --build-arg PROCNUM=$CPUS_DIND
-t dorie/dorie:$CI_COMMIT_TAG .
- docker push dorie/dorie:$CI_COMMIT_TAG
environment:
name: docker/$CI_COMMIT_TAG
url: https://hub.docker.com/r/dorie/dorie
deploy:sphinx-docs:
deploy:docs:
stage: deploy
only:
- tags@dorie/dorie
- branches@dorie/dorie
dependencies:
- build:system-tests
before_script:
# install the netfly CLI
- apt-get install -y golang-go golang-glide
- go get -d github.com/netlify/netlifyctl
- cd $HOME/go/src/github.com/netlify/netlifyctl/
- make deps build
- go install
- cd $HOME/go/bin
script:
- ./netlifyctl deploy
-A $NETFLY_DEPLOY_TOKEN
-s $NETFLY_SITE_ID
-P $CI_PROJECT_DIR/build-cmake/doc/html
- build:docs
needs: ["build:docs"]
<<: *ssh_access
script:
# Create the directory on the remote, removing any prior version
- echo "Creating remote directory $DOC_REMOTE_PATH ..."
- ssh -p $DOC_PORT $DOC_HOST "rm -rf $DOC_REMOTE_PATH"
- ssh -p $DOC_PORT $DOC_HOST "mkdir -p $DOC_REMOTE_PATH/doxygen/"
# Copy sphinx & doxygen HTML documentation to remote
- cd build-cmake/doc
- echo "Uploading documentation to $DOC_REMOTE_PATH/ ..."
- scp -P $DOC_PORT -pr html $DOC_HOST:$DOC_REMOTE_PATH/
- scp -P $DOC_PORT -pr doxygen/html $DOC_HOST:$DOC_REMOTE_PATH/doxygen/
environment:
name: docs/$CI_COMMIT_REF_NAME
url: https://hermes.iup.uni-heidelberg.de/dorie_doc/$CI_COMMIT_REF_SLUG/html/
on_stop: deploy:stop_docs
# This job is called when the environment is stopped, which automatically
# happens when the respective branch is deleted
deploy:stop_docs:
stage: deploy
when: manual
variables:
# Stop GitLab from checking out the commit again (branch is deleted)
GIT_STRATEGY: none
dependencies: []
needs: ["build:docs"]
<<: *ssh_access
script:
- echo "Removing remote directory $DOC_REMOTE_PATH ..."
- ssh -p $DOC_PORT $DOC_HOST "rm -rf $DOC_REMOTE_PATH"
environment:
name: sphinx-docs
url: https://dorie-doc.netlify.com/
name: docs/$CI_COMMIT_REF_NAME
action: stop
[submodule "plugins/vendor/spdlog"]
path = plugins/vendor/spdlog
url = https://github.com/gabime/spdlog.git
[submodule "plugins/vendor/googletest"]
path = plugins/vendor/googletest
url = https://github.com/google/googletest.git
......@@ -43,6 +43,10 @@
* Linear interpolator for initial conditions and scaling fields !145, !156
* Parameterizations for hydrodynamic dispersion in solute transport !141
* Generic Python VTK file reader !143, !150
* Define compile-time settings via CPP macros !144
* [Google Test](https://github.com/google/googletest) unit test framework
as Git Submodule !159
* Upwinding options for Richards finite volume local operator !161
### Changed
* `Simulation` is renamed `RichardsSimulation` and moved to
......@@ -149,11 +153,15 @@
* Switch to stable `dune-randomfield` release branch !151, !153
* System tests for executing `dorie pfg` module !153
* Finite volume solver for the Richards equation !132
* Build independent library and executable for each compile-time setting !144
* `SimulationBase` unit test now uses Google Test !159
* Deploy online documentation for each branch to private server !163
### Fixed
* Solver in `RichardsSimulation` was using the wrong time variable.
[!116](https://ts-gitlab.iup.uni-heidelberg.de/dorie/dorie/merge_requests/116)
* Shape of input datasets was flipped when loading scaling factors !124
* `dune_add_system_test` requires target with location after bugfix !165
### Deprecated
* The configuration file key `[parameters.interpolation]` is deprecated due to
......
......@@ -14,12 +14,6 @@ endif()
# add extra flags to debug compiler flags
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
# option to change DG scheme via config file
option(EXPERIMENTAL_DG_FEATURES
"Enable experimental DG settings through the config file"
OFF
)
#
if(NOT (dune-common_DIR OR dune-common_ROOT OR
"${CMAKE_PREFIX_PATH}" MATCHES ".*dune-common.*"))
......@@ -40,6 +34,10 @@ dune_project()
dune_enable_all_packages()
dune_require_cxx_standard(MODULE "dorie" VERSION 14)
# Cache the executable path
set(DORIE_EXE_PATH ${PROJECT_BINARY_DIR}/dune/dorie/
CACHE STRING "Path to the directory containing the executables")
# add subdirectories
add_subdirectory("plugins/vendor")
add_subdirectory("m4")
......@@ -48,7 +46,7 @@ add_subdirectory("python")
add_subdirectory("doc")
add_subdirectory("dune")
add_subdirectory("lib")
if(dune-testtools_FOUND)
if(DORIE_TESTING)
add_subdirectory("test")
add_subdirectory("doc/cookbook")
endif()
......
......@@ -77,6 +77,7 @@ by CI tests.
| SuperLU | 5.2 |
| [yaml-cpp](https://github.com/jbeder/yaml-cpp) | >= 5.2.0 |
| [spdlog](https://github.com/gabime/spdlog) | 1.1.0 | Included as Git Submodule
| [Google Test](https://github.com/google/googletest) | `HEAD` | Included as Git Submodule
| [muparser](http://beltoforion.de/article.php?a=muparser) | master |
| [VTK](https://vtk.org/) | >= 7.1.1 | For the Python module only
| [dune-common](https://gitlab.dune-project.org/core/dune-common) | releases/2.6
......@@ -198,16 +199,6 @@ If you installed [Anaconda](https://conda.io/docs/user-guide/install/download.ht
path chosen as installation prefix when configuring HDF5.
### Experimental Features
The local operator implementing Richards equation's discretization supports
multiple scheme settings. Setting these via the config file is disabled by
default. You can enable this feature by reconfiguring DORiE with the CMake flag
`-DEXPERIMENTAL_DG_FEATURES=On`, and rebuilding it.
The configuration settings in the section `[dg.experimental]` will then override
the default settings.
### Recommended Third-Party Software
The following software packages are cross-platform, so you should be able to find a release that fits your operating system:
......@@ -219,9 +210,16 @@ The following software packages are cross-platform, so you should be able to fin
### Documentation
The documentation of the latest release branch can be found [online](https://dorie-doc.netlify.com/).
The documentation of active branches is automatically deployed to our server.
You will find the latest [user manual](https://hermes.iup.uni-heidelberg.de/dorie_doc/master/html/)
and [C++ code documentation](https://hermes.iup.uni-heidelberg.de/dorie_doc/master/doxygen/html/)
there. The documentation for other branches can be accessed via the
[overview page](https://hermes.iup.uni-heidelberg.de/dorie_doc/).
The documentation can be built after DORiE has been properly configured (i.e., by calling `dunecontrol`). Note that you might have to re-configure DORiE once after installing it, because some dependencies are installed at configure time (e.g. by `dunecontrol --only=dorie configure`). To build the documentation, just run
The documentation can also be built locally after DORiE has been properly
configured following the step-by-step instructions above. To build the
documentation, just run
dunecontrol --only=dorie make doc
......@@ -229,8 +227,9 @@ or navigate to the `dorie/build-cmake` directory and call
make doc
You will then find the index page of the documentation at
`dorie/build-cmake/doc/html/index.html`.
You will then find the index page of the Sphinx user manual at
`dorie/build-cmake/doc/html/index.html` and the index page of the Doxygen C++
code documentation at `dorie/build-cmake/doc/doxygen/html/index.html`.
### Run, DORiE, Run!
DORiE provides a command line interface (CLI) for all its functions.
......
# Default Dorie model targets
add_custom_target("richards")
add_custom_target("transport")
# Maximum polynomial orders of Richards model for available targets
set(DORIE_MAX_RORDER_2 6)
set(DORIE_MAX_RORDER_3 6)
# Maximum polynomial orders of transport model for available targets
set(DORIE_MAX_TORDER_2 0)
set(DORIE_MAX_TORDER_3 0)
# Maximum polynomial orders of Richards model for default targets
set(DORIE_MAX_DEFAULT_RORDER_2 3)
set(DORIE_MAX_DEFAULT_RORDER_3 1)
# Maximum polynomial orders of transport model for default targets
set(DORIE_MAX_DEFAULT_TORDER_2 0)
set(DORIE_MAX_DEFAULT_TORDER_3 0)
#
# .. cmake_function:: dorie_compile_instance
#
# Adds an executable and library for the specified model.
#
# The parameters specify static settings for the model instance. If these
# settings comply to the limits of the default variables, the instance is
# added to the global "richards" or "transport" targets, depending on which
# MODEL type is built.
#
# In case of "transport", the appropriate "richards" library must be available.
# Otherwise, it is also defined by this function.
#
# A sanity check for the input variables is not performed by CMake, but by
# the C++ code during compile-time.
#
# This function takes the following arguments:
#
# - MODEL: Name of the model. Accepts "richards" or "transport".
# - DIMENSION: Spatial dimension.
# - RORDER: Finite element polynomial order of the Richards module.
# - TORDER: Finite element polynomial order of the Transport module.
# - CREATED_LIB: Variable to store the created library target name in.
#
function(dorie_compile_instance)
# parse the function arguments
set(SINGLE_ARGS MODEL DIMENSION RORDER TORDER CREATED_LIB)
cmake_parse_arguments(ARGS "" "${SINGLE_ARGS}" "" ${ARGN})
if (ARGS_UNPARSED_ARGUMENTS)
message(WARNING "Unparsed arguments when calling "
"'dorie_create_executable: "
"${ARGS_UNPARSED_ARGUMENTS}")
endif ()
# set dimension string
set(DIM_STR "d${ARGS_DIMENSION}")
# set option string
set(OPTION_STR "r${ARGS_RORDER}")
# issue warning if transport order is given for 'richards'
if (ARGS_MODEL STREQUAL "richards")
set (lib_src ${PROJECT_SOURCE_DIR}/dune/dorie/model/richards/impl/impl.cc)
if (ARGS_TORDER)
message(WARNING "Ignoring argument TORDER for MODEL "
"'richards'")
endif ()
# append transport order to option string
elseif (ARGS_MODEL STREQUAL "transport")
set (lib_src ${PROJECT_SOURCE_DIR}/dune/dorie/model/coupling/impl/impl.cc)
string(APPEND OPTION_STR "_t${ARGS_TORDER}")
# unknown model
else ()
message(SEND_ERROR "Unsupported model: ${ARGS_MODEL}. "
"Must be either 'richards' or 'transport'")
endif ()
# register the library
set(lib_name "dorie_${ARGS_MODEL}_${DIM_STR}_${OPTION_STR}")
if (NOT TARGET ${lib_name})
add_library(${lib_name} EXCLUDE_FROM_ALL STATIC ${lib_src})
# link to dependencies
target_link_libraries(${lib_name}
PUBLIC
spdlog
muparser::muparser
hdf5
yaml-cpp
${DUNE_LIBS}
)
# register the executable
set(exe_name "${ARGS_MODEL}_${DIM_STR}_${OPTION_STR}")
set(src_file ${CMAKE_SOURCE_DIR}/dune/dorie/${ARGS_MODEL}.cc)
add_executable(${exe_name} EXCLUDE_FROM_ALL ${src_file})
target_link_libraries(${exe_name} PUBLIC ${lib_name})
# Add the executable to the default targets
if ((ARGS_RORDER LESS_EQUAL DORIE_MAX_DEFAULT_RORDER_${ARGS_DIMENSION})
AND ((NOT ARGS_TORDER)
OR ARGS_TORDER LESS_EQUAL DORIE_MAX_DEFAULT_TORDER_${ARGS_DIMENSION})
)
add_dependencies(${ARGS_MODEL} ${exe_name})
endif()
# set compile definitions
target_compile_definitions(${lib_name}
PUBLIC
DORIE_DIM=${ARGS_DIMENSION}
DORIE_RORDER=${ARGS_RORDER})
if (ARGS_MODEL STREQUAL "transport")
target_compile_definitions(${lib_name}
PUBLIC DORIE_TORDER=${ARGS_TORDER})
endif ()
endif()
# If we build a transport model, build the Richards library as well
if (ARGS_MODEL STREQUAL "transport")
dorie_compile_instance(MODEL "richards"
DIMENSION ${ARGS_DIMENSION}
RORDER ${ARGS_RORDER}
CREATED_LIB richards_lib
)
# ... and link to it!
target_link_libraries(${exe_name} PUBLIC ${richards_lib})
endif()
# Report the library target name
if (ARGS_CREATED_LIB)
set(${ARGS_CREATED_LIB} ${lib_name} PARENT_SCOPE)
endif ()
endfunction()
# --- DEPENDENCIES --- #
# These macros check for the following packages, yielding the respective
# targets
#
......@@ -47,5 +48,17 @@ message (STATUS "DUNE Libraries: ${DUNE_LIBS}")
# Remove CMake policy stack
cmake_policy(POP)
# Add DORiE testing functions
include(DorieTesting)
# --- CMAKE MODULES --- #
# Include the CMake modules used in the project
include(DorieCompileInstance)
# Check if testing is enabled
if (dune-testtools_FOUND)
message(STATUS "Testing enabled: dune-testtools found.")
set(DORIE_TESTING TRUE)
# include the DORiE testing macros
include(DorieTesting)
else()
message(STATUS "Testing disabled: dune-testtools not found.")
endif()
......@@ -18,6 +18,11 @@ add_custom_target(prepare_testing
add_dependencies(system_tests prepare_testing)
add_dependencies(unit_tests prepare_testing)
# Create a fake library target to satisfy dune-testtools
add_library(dorie_test UNKNOWN IMPORTED)
set_property(TARGET dorie_test
PROPERTY IMPORTED_LOCATION ${PROJECT_BINARY_DIR}/activate)
#
# .. cmake_function:: add_coverage_links
#
......@@ -48,6 +53,12 @@ endfunction()
# The target this test applies to. This is only required if no SOURCES
# are specified.
#
# .. cmake_param:: CUSTOM_MAIN
# :option:
#
# Write a custom `main()` function for the unit test executables instead
# of generating a default one automatically.
#
# This function serves as wrapper around the function `dune_add_test` which
# registers test for existing targets or adds new test executables from the
# given source files. This function additionally registers the tests as unit
......@@ -61,7 +72,8 @@ endfunction()
#
function(dorie_add_unit_test)
set(SINGLE NAME TARGET)
cmake_parse_arguments(UNIT_TEST "" "${SINGLE}" "" ${ARGN})
set(OPTION CUSTOM_MAIN)
cmake_parse_arguments(UNIT_TEST "${OPTION}" "${SINGLE}" "" ${ARGN})
# use name prefix for test
if(NOT UNIT_TEST_NAME)
......@@ -81,7 +93,14 @@ function(dorie_add_unit_test)
# add to build target and employ compile options
target_link_libraries(${UNIT_TEST_TARGET}
muparser::muparser hdf5 yaml-cpp spdlog)
add_coverage_links(${UNIT_TEST_TARGET})
# add_coverage_links(${UNIT_TEST_TARGET})
if (UNIT_TEST_CUSTOM_MAIN)
target_link_libraries(${UNIT_TEST_TARGET} gtest)
else ()
target_link_libraries(${UNIT_TEST_TARGET} gtest_main)
endif()
add_dependencies(build_unit_tests ${UNIT_TEST_TARGET})
endfunction()
......
......@@ -232,13 +232,6 @@ adding an empty line, make text **bold** or ``monospaced``.
</category>
<category name="numerics">
<parameter name="penaltyFactor">
<definition> Penalty factor to be used in the Discontinuous Galerkin scheme
</definition>
<values> float </values>
<suggestion> 10 </suggestion>
</parameter>
<parameter name="FEorder">
<definition> Polynomial order of the DG method used. Setting this value
to 0 (zero) selects the finite volume (FV) solver (only compatible to
......@@ -246,6 +239,52 @@ adding an empty line, make text **bold** or ``monospaced``.
</definition>
<suggestion> 1 </suggestion>
<values> 0, 1, 2, 3 </values>
<comment> Select '0' for the finite volume (FV) solver </comment>
</parameter>
<parameter name="upwinding">
<definition> Upwinding method for skeleton terms. Upwinding typically
increases numeric stability while reducing accuracy.
**semiUpwind:** Apply upwinding to conductivity factor (only).
**fullUpwind:** Apply upwinding to conductivity.
**Not recommended for DG**.
</definition>
<values> none, semiUpwind, fullUpwind </values>
<suggestion> none </suggestion>
<comment> Choose upwinding type: 'none', 'semiUpwind', 'fullUpwind'
</comment>
</parameter>
<parameter name="DGMethod">
<definition> DG discretization method for skeleton terms.
**SIPG:** Symmetric Interior Penalty
**NIPG:** Non-Symmetric Interior Penalty
**OBB:** Oden, Babuska, Baumann: no penalty term
**IIP:** Incomplete Interior Penalty: no symmetry term
</definition>
<values> SIPG, NIPG, OBB, IIP </values>
<suggestion> SIPG </suggestion>
</parameter>
<parameter name="DGWeights">
<definition> Apply harmonic weighting to skeleton term contributions
in DG.
</definition>
<values> true, false </values>
<suggestion> true </suggestion>
</parameter>
<parameter name="penaltyFactor">
<definition> Penalty factor to be used in the Discontinuous Galerkin scheme
</definition>
<values> float </values>
<suggestion> 10 </suggestion>
</parameter>
</category>
......@@ -329,41 +368,4 @@ adding an empty line, make text **bold** or ``monospaced``.
</parameter>
</category>
<category name="numerics.experimental">
<parameter name="method">
<definition> DG discretization method for skeleton terms.
**SIPG:** Symmetric Interior Penalty
**NIPG:** Non-Symmetric Interior Penalty
**OOB:** Oden, Babuska, Baumann: no penalty term
**IIP:** Incomplete Interior Penalty: no symmetry term
</definition>
<values> SIPG, NIPG, OOB, IIP </values>
<suggestion> SIPG </suggestion>
<comment> Experimental settings are enabled by the appropriate CMake flag.
</comment>
</parameter>
<parameter name="upwinding">
<definition> Upwinding method for skeleton terms.
**semiUpwind:** Apply upwinding to conductivity factor (only).
**fullUpwind:** Apply upwinding on numeric flux and conductivity.
</definition>
<values> none, semiUpwind, fullUpwind </values>
<suggestion> none </suggestion>
</parameter>
<parameter name="weights">
<definition> Apply harmonic weighting to skeleton term contributions.
</definition>
<values> true, false </values>
<suggestion> true </suggestion>
</parameter>
</category>
</dorie>
......@@ -12,6 +12,7 @@ GENERATE_XML = YES
# Use MathJax to render math (leave it to the browser) instead of requiring Latex
USE_MATHJAX = YES
MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.6/MathJax.js?config=TeX-MML-AM_CHTML
# The EXCLUDE tag can be used to specify files and/or directories that should
# excluded from the INPUT source files. This way you can easily exclude a
......@@ -21,4 +22,4 @@ USE_MATHJAX = YES
# EXCLUDE += @top_srcdir@/...
# Include documents with other extesions
FILE_PATTERNS += *.dox
\ No newline at end of file
FILE_PATTERNS += *.dox
......@@ -82,5 +82,31 @@ the Richards solver must be utilized to solve them. Use the value
``richards+transport`` in the ``simulation.mode`` keyword to run the solute
transport solver.
Available Models
================
Several settings like solver coupling, spatial dimension, or polynomial order
must be given at compile time. DORiE includes a discrete set of setting
combinations users may choose from via the
:doc:`configuration file </manual/config-file>`. If DORiE is run from its public
Docker image or with the default targets built locally on your machine, these
are the available combinations of options:
+----------------------+-------------------+-----------------------------+------------------------------+----------------+
|``simulation.mode`` |``grid.dimensions``|``richards.numerics.FEorder``|``transport.numerics.FEorder``| GMSH Grid and |
| | | | | grid refinement|
+======================+===================+=============================+==============================+================+
|``richards`` | 2 | <= 3 | ✗ | ✓* |
| +-------------------+-----------------------------+------------------------------+----------------+
| | 3 | <= 1 | ✗ | ✓* |
+----------------------+-------------------+-----------------------------+------------------------------+----------------+
|``richards+transport``| 2 | <= 3 | 0 | ✗ |
| +-------------------+-----------------------------+------------------------------+----------------+
| | 3 | <= 1 | 0 | ✗ |
+----------------------+-------------------+-----------------------------+------------------------------+----------------+
* *: Only for ``richards.numerics.FEorder`` > 0. Finite volume solvers do not
support unstructured grids.
.. _DUNE: https://www.dune-project.org/
.. _DUNE-PDELab: https://www.dune-project.org/modules/dune-pdelab/
......@@ -48,7 +48,7 @@ They are controlled by the ``initial.type`` key and available for every model.
.. tip::
Assuming the target quantity is the matric head (see
:ref:`initial-transformation`), typical initial conditions for a
Richards simulation are
Richards model are
* Hydrostatic equilibrium: A vertical gradient of :math:`-1` and a
fixed value ``<v>`` at height :math:`h = 0 \, \mathrm{m}`::
......
......@@ -181,10 +181,10 @@ Mualem–van Genuchten
Transport Parameterizations
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Regardless of the parameterization, the transport simulation always computes
Regardless of the parameterization, the transport model always computes
the microscopic péclet number, for which it requires the characteristic pore
length, the molecular diffusion, and the fluid velocity. The latter is directly
provided by the richards simulation while the other two have to be specified
provided by the richards model while the other two have to be specified
for each volume:
Permanent parameters:
......@@ -217,7 +217,7 @@ Permanent parameters:
The hydrodynamic dispersion tensor :math:`\mathsf{D}_\text{hd} \,
[\text{m}^2\text{s}^{-1}]` is the main parameter to provide in the
transport simulation. Below you will find several parameterization for this.
transport model. Below you will find several parameterization for this.
Constant
""""""""
......@@ -358,7 +358,7 @@ Milligton-Quirk I Effective Diffusion
D_\text{eff} = D_m \frac{\theta_w^{7/3}}{\phi^{2/3}}.
where the volumetric water content :math:`\theta_w \, [-]`
is automatically obtained from the Richards simulation.
is automatically obtained from the Richards model.
* ``Deff_type: Deff_MQ1``
......@@ -389,7 +389,7 @@ Milligton-Quirk II Effective Diffusion
D_\text{eff} = D_m \frac{\theta_w}{\phi^{2/3}}.
where the volumetric water content :math:`\theta_w \, [-]`
is automatically obtained from the Richards simulation.
is automatically obtained from the Richards model.
* ``Deff_type: Deff_MQ2``
......
......@@ -21,15 +21,43 @@ The main routine (`dorie run <config>`) also requires input files for
Code API
========
DORiE supplies the `Simulation` template. This is the main class for assembling
and running the solver.
DORiE supplies the `Model` abstract base class. All other models follow this
structure.