Commit 7920d813 authored by Lukas Riedel's avatar Lukas Riedel

Merge branch 'master' into 125-new-data-structure-for-storing-boundary-conditions

Adapt Richards FV local operator to new BC data scheme
parents 45154c5b 3dcbd170
......@@ -126,6 +126,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,6 +141,7 @@ 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
# --- Tests ---
......@@ -212,7 +214,7 @@ 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
......@@ -222,7 +224,7 @@ 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
......
[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
......@@ -40,9 +40,12 @@
* Coupling between transient models for water flow and solute transport !96
* Initial conditions generated from H5 input data !130
* Generic Python VTK file reader !143
* Linear interpolator for initial conditions and scaling fields !145
* 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
### Changed
* `Simulation` is renamed `RichardsSimulation` and moved to
......@@ -148,6 +151,9 @@
* Structure and setup of Sphinx user docs !126
* 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
### Fixed
* Solver in `RichardsSimulation` was using the wrong time variable.
......
......@@ -40,6 +40,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 +52,7 @@ add_subdirectory("python")
add_subdirectory("doc")
add_subdirectory("dune")
add_subdirectory("lib")
if(dune-testtools_FOUND)
if(DORIE_TESTING)
add_subdirectory("test")
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
......
# 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()
......@@ -48,6 +48,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 +67,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 +88,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()
......
......@@ -52,9 +52,8 @@ adding an empty line, make text **bold** or ``monospaced``.
<parameter name="vertexData">
<definition> Plot vertex based (``true``) or cell-centered (``false``)
data into VTK files. Vertex based data might render sharp
parameterization boundaries inappropriately.
System tests and plotting functions (``dorie plot``) require
data into VTK files. Prefer vertex over cell data for full-precision
output. System tests and plotting functions (``dorie plot``) require
cell-centered data.
</definition>
<values> true, false </values>
......@@ -226,10 +225,12 @@ adding an empty line, make text **bold** or ``monospaced``.
</parameter>
<parameter name="FEorder">
<definition> Order of the finite element method used. Values &gt; 1 are not
thoroughly tested. </definition>
<definition> Polynomial order of the DG method used. Setting this value
to 0 (zero) selects the finite volume (FV) solver (only compatible to
structured rectangular grids).
</definition>
<suggestion> 1 </suggestion>
<values> 1, 2, 3 </values>
<values> 0, 1, 2, 3 </values>
</parameter>
</category>
......
......@@ -39,6 +39,17 @@ singularities.
Use the value ``richards`` in the ``simulation.mode`` keyword to run the
standalone Richards solver.
.. _richards_solver_options:
Solver Options
--------------
DORiE includes a finite volume (FV) and a discontinuous Galerkin (DG) solver
for the Richards equation. The FV solver can be selected for structured
rectangular grids by setting ``richards.numerics.FEorder = 0`` when adaptivity
is disabled. The DG solver is used for orders :math:`k \geq 1` and is available
for all grid options.
Solute Transport Solver
=======================
......@@ -71,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/
......@@ -10,34 +10,44 @@ Firstly, we have to recall that DORiE solves a Discontinuous Galerking finite el
From the description above one can infer that one has to distinguish between * fluxes* at the interior of each element and at the intersections of all elements (we call these intersections skeleton of the grid). Unfortunately, there is no a standard form to write the skeleton fluxes on formats like VTK and that's the main reason why DORiE only provides the interior fluxes. However, assuming one can write both fluxes into some output format, they are still discontinuous (notice that direct use of discontinuous fluxes are useless for conservative computations since the transported quantities are very likely to get stagnated or over-transported in the nearby of intersections between elements). It means that it is needed some sort of post-processing that ensures that the *mass* is still locally and globally conserved.
.. DORiE allow finite volume computations under certain specific conditions. In such case, if generated, the raw flux output generated by DORiE has no meaning. The reason is that finite volumes are computed with finite elements of order 0 where gradients are 0.
When employing a finite volume solver, the regular flux output is omitted
because the basis function gradients are always zero. In this case, the only
option for evaluating flux data is flux reconstruction which has to be enabled
in the :doc:`config file <config-file>`.
Flux reconstruction
-------------------
The flux reconstruction is a projection of the fluxes used in the Discontinuous Galerkin method into a vector field function. Using correct elements, this procedure can ensure that fluxes in normal direction to the element are *equivalent* to those computed by the Discontinuous Galerkin method, and most importantly, it can also ensure the continuity of them. Hence, the resulting vector field is useful to compute other problems that rely on the fluxes of the water (i.e. solute transport).
The flux reconstruction technique always use Raviar Thomas finite elements of one degree less than the one set for the Richards model. It can be identified in the vtk file by the name ``flux_RT{k-1}``, where ``k`` is the finite element order set for the Richards model. Flux reconstruction is not available for non-conforming grids (i.e. Cube-adaptive grids).
+---------------------------+---+---+---+
| Richards FEorder | 1 | 2 | 3 |
+============+====+=========+===+===+===+
| | 2D | Simplex | ✓ | ✓ | ✓ |
| | +---------+---+---+---+
| | | Cube | ✓ | ✓ | ✓ |
| Non-adapt. +----+---------+---+---+---+
| | 3D | Simplex | ✓ | ✓ | ✓ |
| | +---------+---+---+---+
| | | Cube | ✓ | ✓ | |
+------------+----+---------+---+---+---+
| | 2D | Simplex | ✓ | ✓ | ✓ |
| | +---------+---+---+---+
| | | Cube | | | |
| Adapt. +----+---------+---+---+---+
| | 3D | Simplex | ✓ | ✓ | ✓ |
| | +---------+---+---+---+
| | | Cube | | | |
+------------+----+---------+---+---+---+
The flux reconstruction technique always use Raviar Thomas finite elements of one degree less than the one set for the Richards model. It can be identified in the vtk file by the name ``flux_RT{min(k-1,0)}``, where ``k`` is the finite element order set for the Richards model. Flux reconstruction is not available for non-conforming grids (i.e. Cube-adaptive grids).
+---------------------------+---+---+---+---+
| Richards FEorder | 0 | 1 | 2 | 3 |
+============+====+=========+===+===+===+===+
| | 2D | Simplex | ✗ | ✓ | ✓ | ✓ |
| | +---------+---+---+---+---+
| | | Cube | ✓ | ✓ | ✓ | ✓ |
| Non-adapt. +----+---------+---+---+---+---+
| | 3D | Simplex | ✗ | ✓ | ✓ | ✓ |
| | +---------+---+---+---+---+
| | | Cube | ✓ | ✓ | ✓ | |
+------------+----+---------+---+---+---+---+
| | 2D | Simplex | ✗ | ✓ | ✓ | ✓ |
| | +---------+---+---+---+---+
| | | Cube | ✗ | | | |
| Adapt. +----+---------+---+---+---+---+
| | 3D | Simplex | ✗ | ✓ | ✓ | ✓ |
| | +---------+---+---+---+---+
| | | Cube | ✗ | | | |
+------------+----+---------+---+---+---+---+
Legend:
* ✓: Flux reconstruction available.
* ( ): Flux reconstruction unavailable.
* ✗: Invalid setting. Finite volume solvers only works on regular grids,
see :ref:`Richards Solver Options <richards_solver_options>`.
Usage
-----
To activate/deactivate flux reconstruction use the keyword ``richards.numeric.fluxReconstruction = true/false`` in the :doc:`config file<man-config-file>`.
To activate/deactivate flux reconstruction use the keyword ``richards.numeric.fluxReconstruction = true/false`` in the :doc:`config file <config-file>`.
......@@ -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.
.. doxygenclass:: Dune::Dorie::RichardsSimulation
ABC Model
---------
.. doxygenclass:: Dune::Dorie::ModelBase
:members:
The simulation template requires compile-time type specifications wrapped in a
Model Traits
------------
The model template requires compile-time type specifications wrapped in a
suitable `Traits` structure.
.. doxygenstruct:: Dune::Dorie::BaseTraits
:members:
:undoc-members:
Richards Model
--------------
.. doxygenclass:: Dune::Dorie::ModelRichards
:members:
Transport Model
---------------
.. doxygenclass:: Dune::Dorie::ModelTransport
:members:
Coupling Model
--------------
The coupling between Richards and Transport models is done by yet another
model which is in charge of managing the steps of the two sub-models.
.. doxygenclass:: Dune::Dorie::ModelTransport
:members:
\ No newline at end of file
ARG DUNE_ENV_IMAGE=dorie/dune-env:2.6
FROM $DUNE_ENV_IMAGE
ARG BASE_IMG_VERSION=1.2
ARG DUNE_ENV_IMAGE=dorie/dune-env:img-v${BASE_IMG_VERSION}
# start build image
FROM ${DUNE_ENV_IMAGE} as build-env
# maintainer info
LABEL maintainer="lriedel@iup.uni-heidelberg.de"
# number of cores for parallel builds
ARG PROCNUM=1
# Compilers to be used
ARG CC=gcc
ARG CXX=g++
# build DORiE
# copy the build context to this image
WORKDIR /opt/dune/dorie
COPY ./ ./
# build the executable
WORKDIR /opt/dune/
RUN MAKE_FLAGS="-j${PROCNUM}" \
CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=${CC} -DCMAKE_CXX_COMPILER=${CXX} -DDUNE_PYTHON_VIRTUALENV_SETUP=True -DDUNE_PYTHON_ALLOW_GET_PIP=True" \
./dune-common/bin/dunecontrol --only=dorie all
# Start a fresh image as production environment
FROM $DUNE_ENV_IMAGE as prod-env
# Copy binaries, Python venv, and Python scripts (editable install)
WORKDIR /opt/dune
ADD . /opt/dune/dorie/
RUN CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=${CC} -DCMAKE_CXX_COMPILER=${CXX} -DDUNE_PYTHON_VIRTUALENV_SETUP=True -DDUNE_PYTHON_ALLOW_GET_PIP=True" \
./dune-common/bin/dunecontrol --only=dorie configure \
&& ./dune-common/bin/dunecontrol --only=dorie make -j ${PROCNUM} dorie-rfg dorie \
&& ./dune-common/bin/dunecontrol --only=dorie exec \
"rm build-cmake/dune/dorie/model/richards/impl/libdorie-richards.a build-cmake/dune/dorie/model/transport/impl/libdorie-transport.a build-cmake/dune/dorie/model/richards/impl/CMakeFiles/dorie-richards.dir/*.cc.o build-cmake/dune/dorie/model/transport/impl/CMakeFiles/dorie-transport.dir/*.cc.o"
COPY --from=build-env /opt/dune/dune-common/build-cmake/dune-env ./dune-common/build-cmake/dune-env
WORKDIR /opt/dune/dorie
COPY --from=build-env /opt/dune/dorie/build-cmake ./build-cmake/
COPY --from=build-env /opt/dune/dorie/python ./python/
# move to working directory
WORKDIR /mnt
# run bash in the virtualenv (this actually creates two bash instances...)
# TODO: create new user with restricted privileges
ENTRYPOINT ["/opt/dune/dune-common/build-cmake/run-in-dune-env", "/bin/bash"]
add_subdirectory("common")
add_subdirectory("model")
if(dune-testtools_FOUND)
if(DORIE_TESTING)
add_subdirectory("test")
endif()
add_executable(richards richards.cc)
dune_target_link_libraries(richards ${DUNE_LIBS})
target_link_libraries(richards
dorie-richards spdlog muparser::muparser hdf5 yaml-cpp)
add_executable(transport transport.cc)
dune_target_link_libraries(transport ${DUNE_LIBS})
target_link_libraries(transport
dorie-richards dorie-transport spdlog muparser::muparser hdf5 yaml-cpp)
# create targets for many possible combinations
foreach(dim 2 3)
foreach(rorder RANGE ${DORIE_MAX_RORDER_${dim}})
dorie_compile_instance(MODEL "richards"
DIMENSION ${dim}
RORDER ${rorder})
foreach(torder RANGE ${DORIE_MAX_TORDER_${dim}})
dorie_compile_instance(MODEL "transport"
DIMENSION ${dim}
RORDER ${rorder}
TORDER ${torder})
endforeach()
endforeach()
endforeach()
# Global target
add_custom_target("dorie" DEPENDS richards transport)
# enable setting operator scheme from config file
......
......@@ -11,7 +11,6 @@ install(FILES
h5tools.hh
interpolator.hh
setup_inifile.hh
simulation_base.hh
time_controller.hh
typedefs.hh
util.hh
......
This diff is collapsed.
......@@ -11,6 +11,8 @@
#include <dune/common/power.hh>
#include <dune/common/typetraits.hh>
#include <dune/pdelab/finiteelementmap/qkdg.hh>
#include <vector>
namespace Dune{
......
......@@ -8,6 +8,9 @@
#include <dune/common/power.hh>
#include <dune/pdelab/finiteelement/l2orthonormal.hh>
#include <dune/pdelab/finiteelementmap/finiteelementmap.hh>
namespace Dune{
namespace Dorie{
......@@ -271,4 +274,4 @@ struct SkeletonFiniteElementMap<DF,RF,dim,k,Dune::GeometryType::cube>
} // namespace Dorie
} // namespace Dune
#endif // DUNE_DORIE_SKELETON_FEM_HH
\ No newline at end of file
#endif // DUNE_DORIE_SKELETON_FEM_HH
#ifndef DUNE_DORIE_RAVIART_THOMAS_PROJECTION_HH
#define DUNE_DORIE_RAVIART_THOMAS_PROJECTION_HH
// hard-coded bool helpers
#define DORIE_SUPPORT_RT_SIMPLEX(dim, order) (order <= 2)