diff --git a/appl/conjugateheattransfer/CMakeLists.txt b/appl/conjugateheattransfer/CMakeLists.txt index 84fbd1225dab89cb02717ebabbfb763247150421..31b73d05dd5f880f40af26db9ddf4f1720121d7b 100644 --- a/appl/conjugateheattransfer/CMakeLists.txt +++ b/appl/conjugateheattransfer/CMakeLists.txt @@ -1,3 +1,12 @@ +#find_library(PRECICE_LIB NAMES precice HINTS "${LD_LIBRARY_PATH}") +#find_package(Boost 1.65.1 REQUIRED COMPONENTS log system) #Require same version as preCICE + +string(REPLACE ":" ";" LIBRARY_DIRS $ENV{LD_LIBRARY_PATH}) +find_library(PRECICE_LIB NAMES precice HINTS ${LIBRARY_DIRS}) +find_package(Boost 1.65.1 REQUIRED COMPONENTS log system) #Require same version as preCICE + add_subdirectory(monolithic) add_subdirectory(monolithic-const-dt) add_subdirectory(iterative) +#add_subdirectory(iterative-reversed) + diff --git a/appl/conjugateheattransfer/iterative/dumuxpreciceindexwrapper.cc b/appl/conjugateheattransfer/common/dumuxpreciceindexwrapper.cc similarity index 100% rename from appl/conjugateheattransfer/iterative/dumuxpreciceindexwrapper.cc rename to appl/conjugateheattransfer/common/dumuxpreciceindexwrapper.cc diff --git a/appl/conjugateheattransfer/iterative/dumuxpreciceindexwrapper.hh b/appl/conjugateheattransfer/common/dumuxpreciceindexwrapper.hh similarity index 100% rename from appl/conjugateheattransfer/iterative/dumuxpreciceindexwrapper.hh rename to appl/conjugateheattransfer/common/dumuxpreciceindexwrapper.hh diff --git a/appl/conjugateheattransfer/common/helperfunctions.cc b/appl/conjugateheattransfer/common/helperfunctions.cc new file mode 100644 index 0000000000000000000000000000000000000000..68b8fb14babd50ec07cfecbd94cd1a87a5ba4cf6 --- /dev/null +++ b/appl/conjugateheattransfer/common/helperfunctions.cc @@ -0,0 +1,2 @@ +#include "helperfunctions.hh" + diff --git a/appl/conjugateheattransfer/common/helperfunctions.hh b/appl/conjugateheattransfer/common/helperfunctions.hh new file mode 100644 index 0000000000000000000000000000000000000000..f95927929fe88c67ea2745a283464572f31306f2 --- /dev/null +++ b/appl/conjugateheattransfer/common/helperfunctions.hh @@ -0,0 +1,233 @@ +#ifndef HELPERFUNCTIONS_HH +#define HELPERFUNCTIONS_HH + +#include <type_traits> +// DuMuX +#include <dumux/common/properties.hh> +// preCICE +#include "preciceadapter.hh" + +namespace helperfunctions +{ + + enum ProblemType + { + FreeFlow, Heat + }; + + template<class Problem, class GridVariables, class SolutionVector> + void setBoundaryHeatFluxes(const Problem& problem, + const GridVariables& gridVars, + const SolutionVector& sol) + { + const auto& fvGridGeometry = problem.fvGridGeometry(); + auto fvGeometry = localView(fvGridGeometry); + auto elemVolVars = localView(gridVars.curGridVolVars()); + auto elemFaceVars = localView(gridVars.curGridFaceVars()); + + auto& couplingInterface = precice_adapter::PreciceAdapter::getInstance(); + + for (const auto& element : elements(fvGridGeometry.gridView())) + { + fvGeometry.bindElement(element); + elemVolVars.bindElement(element, fvGeometry, sol); + elemFaceVars.bindElement(element, fvGeometry, sol); + + for (const auto& scvf : scvfs(fvGeometry)) + { + + if ( couplingInterface.isCoupledEntity( scvf.index() ) ) + { + //TODO: Actually writes temperature + const auto heatFlux = problem.neumann( element, fvGeometry, elemVolVars, elemFaceVars, scvf )[3]; + couplingInterface.writeHeatFluxOnFace( scvf.index(), heatFlux ); + } + } + } + } + + template<class Problem, class GridVariables, class SolutionVector> + void printCellCenterTemperatures(const Problem& problem, + const GridVariables& gridVars, + const SolutionVector& sol) + { + const auto& fvGridGeometry = problem.fvGridGeometry(); + auto fvGeometry = localView(fvGridGeometry); + auto elemVolVars = localView(gridVars.curGridVolVars()); + auto elemFaceVars = localView(gridVars.curGridFaceVars()); + + auto& couplingInterface = precice_adapter::PreciceAdapter::getInstance(); + + for (const auto& element : elements(fvGridGeometry.gridView())) + { + fvGeometry.bindElement(element); + elemVolVars.bindElement(element, fvGeometry, sol); + elemFaceVars.bindElement(element, fvGeometry, sol); + + for (const auto& scvf : scvfs(fvGeometry)) + { + + if ( couplingInterface.isCoupledEntity( scvf.index() ) ) + { + //TODO: Actually writes temperature + const auto& scv = fvGeometry.scv(scvf.insideScvIdx()); + const auto& volVars = elemVolVars[scv]; + + std::cout << "Temperature on cell center is: " << volVars.temperature() << std::endl; + // const auto heatFlux = problem.neumann( element, fvGeometry, elemVolVars, elemFaceVars, scvf )[3]; + // couplingInterface.writeHeatFluxOnFace( scvf.index(), heatFlux ); + } + } + } + } + + template<class ThermalConductivityModel, class Problem, class FVElementGeometry, class ElementVolumeVariables> + auto getThermalConductivity( const Problem& problem, + const typename FVElementGeometry::FVGridGeometry::GridView::template Codim<0>::Entity& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const typename FVElementGeometry::SubControlVolumeFace& scvf, + const ProblemType problemType) + { + const auto& scv = fvGeometry.scv(scvf.insideScvIdx()); + const auto& volVars = elemVolVars[scv]; + + switch ( problemType ) + { + case FreeFlow: + return ThermalConductivityModel::effectiveThermalConductivity(volVars, + problem.spatialParams(), + element, + fvGeometry, + scv); + case Heat: + return ThermalConductivityModel::thermalConductivity(volVars, + problem.spatialParams(), + element, + fvGeometry, + scv); + } + throw std::runtime_error("helperfunctions.hh: getThermalConductivity was called with wrong problemType "); + } + + namespace freeflow { + + template<class ThermalConductivityModel, class Problem, class FVElementGeometry, class ElementVolumeVariables> + auto reconstructBoundaryTemperature(const Problem& problem, + const typename FVElementGeometry::FVGridGeometry::GridView::template Codim<0>::Entity& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const typename FVElementGeometry::SubControlVolumeFace& scvf) + { + using Scalar = typename ElementVolumeVariables::VolumeVariables::PrimaryVariables::value_type; + + const auto& scv = fvGeometry.scv(scvf.insideScvIdx()); + const auto& volVars = elemVolVars[scv]; + const Scalar cellCenterTemperature = volVars.temperature(); + const Scalar distance = (scvf.center() - scv.center()).two_norm(); + +// const Scalar insideLambda = ThermalConductivityModel::thermalConductivity(volVars, +// problem.spatialParams(), +// element, +// fvGeometry, +// scv); + +// const Scalar qHeat = problem.neumann(element, fvGeometry, elemVolVars, scvf); +// // q = -lambda * (t_face - t_cc) / dx +// // t_face = -q * dx / lambda + t_cc +// return -qHeat * distance / insideLambda + cellCenterTemperature; + return 0; + } + + template<class ThermalConductivityModel, class Problem, class GridVariables, class SolutionVector> + void setBoundaryTemperatures(const Problem& problem, + const GridVariables& gridVars, + const SolutionVector& sol) + { + const auto& fvGridGeometry = problem.fvGridGeometry(); + auto fvGeometry = localView(fvGridGeometry); + auto elemVolVars = localView(gridVars.curGridVolVars()); + + auto& couplingInterface = precice_adapter::PreciceAdapter::getInstance(); + + for (const auto& element : elements(fvGridGeometry.gridView())) + { + fvGeometry.bindElement(element); + elemVolVars.bindElement(element, fvGeometry, sol); + + for (const auto& scvf : scvfs(fvGeometry)) + { + + if ( couplingInterface.isCoupledEntity( scvf.index() ) ) + { + //TODO: Actually writes temperature + couplingInterface.writeTemperatureOnFace( scvf.index(), reconstructBoundaryTemperature<ThermalConductivityModel>(problem, element, fvGeometry, elemVolVars, scvf) ); + } + } + } + } + + } + + namespace heat { + template<class ThermalConductivityModel, class Problem, class FVElementGeometry, class ElementVolumeVariables> + auto reconstructBoundaryTemperature(const Problem& problem, + const typename FVElementGeometry::FVGridGeometry::GridView::template Codim<0>::Entity& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const typename FVElementGeometry::SubControlVolumeFace& scvf) + { + using Scalar = typename ElementVolumeVariables::VolumeVariables::PrimaryVariables::value_type; + + const auto& scv = fvGeometry.scv(scvf.insideScvIdx()); + const auto& volVars = elemVolVars[scv]; + const Scalar cellCenterTemperature = volVars.temperature(); + const Scalar distance = (scvf.center() - scv.center()).two_norm(); + + const Scalar insideLambda = ThermalConductivityModel::effectiveThermalConductivity(volVars, + problem.spatialParams(), + element, + fvGeometry, + scv); + + const Scalar qHeat = problem.neumann(element, fvGeometry, elemVolVars, scvf); + // q = -lambda * (t_face - t_cc) / dx + // t_face = -q * dx / lambda + t_cc + return -qHeat * distance / insideLambda + cellCenterTemperature; + } + + template<class ThermalConductivityModel, class Problem, class GridVariables, class SolutionVector> + void setBoundaryTemperatures(const Problem& problem, + const GridVariables& gridVars, + const SolutionVector& sol) + { + const auto& fvGridGeometry = problem.fvGridGeometry(); + auto fvGeometry = localView(fvGridGeometry); + auto elemVolVars = localView(gridVars.curGridVolVars()); + + auto& couplingInterface = precice_adapter::PreciceAdapter::getInstance(); + + for (const auto& element : elements(fvGridGeometry.gridView())) + { + fvGeometry.bindElement(element); + elemVolVars.bindElement(element, fvGeometry, sol); + + for (const auto& scvf : scvfs(fvGeometry)) + { + + if ( couplingInterface.isCoupledEntity( scvf.index() ) ) + { + //TODO: Actually writes temperature + couplingInterface.writeTemperatureOnFace( scvf.index(), reconstructBoundaryTemperature<ThermalConductivityModel>(problem, element, fvGeometry, elemVolVars, scvf) ); + } + } + } + } + } + + + +} //END - namespace helperfunctions + + +#endif // HELPERFUNCTIONS_HH diff --git a/appl/conjugateheattransfer/iterative/preciceadapter.cc b/appl/conjugateheattransfer/common/preciceadapter.cc similarity index 100% rename from appl/conjugateheattransfer/iterative/preciceadapter.cc rename to appl/conjugateheattransfer/common/preciceadapter.cc diff --git a/appl/conjugateheattransfer/iterative/preciceadapter.hh b/appl/conjugateheattransfer/common/preciceadapter.hh similarity index 100% rename from appl/conjugateheattransfer/iterative/preciceadapter.hh rename to appl/conjugateheattransfer/common/preciceadapter.hh diff --git a/appl/conjugateheattransfer/iterative/CMakeLists.txt b/appl/conjugateheattransfer/iterative/CMakeLists.txt index 5ad19a8544ea0506254044804dc87f89d9b396b7..776ea3d7d3f78e63f318730060a9df9c7ebc321f 100644 --- a/appl/conjugateheattransfer/iterative/CMakeLists.txt +++ b/appl/conjugateheattransfer/iterative/CMakeLists.txt @@ -1,8 +1,8 @@ add_input_file_links() dune_symlink_to_source_files(FILES "precice-config.xml" "precice-config-serial-implicit.xml") -add_executable(test_freeflow EXCLUDE_FROM_ALL main_freeflow.cc preciceadapter.cc dumuxpreciceindexwrapper.cc) -add_executable(test_solidenergy EXCLUDE_FROM_ALL main_solidenergy.cc preciceadapter.cc dumuxpreciceindexwrapper.cc) +add_executable(test_freeflow EXCLUDE_FROM_ALL main_freeflow.cc ../common/preciceadapter.cc ../common/dumuxpreciceindexwrapper.cc ../common/helperfunctions.cc) +add_executable(test_solidenergy EXCLUDE_FROM_ALL main_solidenergy.cc ../common/preciceadapter.cc ../common/dumuxpreciceindexwrapper.cc ../common/helperfunctions.cc) #add_executable(test_preciceadapter EXCLUDE_FROM_ALL preciceadapter.cc) target_compile_definitions(test_freeflow PUBLIC "ENABLEMONOLITHIC=0") @@ -10,7 +10,8 @@ target_compile_definitions(test_solidenergy PUBLIC "ENABLEMONOLITHIC=0") #set_property( TARGET libprecice IMPORTED_LOCATION $ENV{PRECICE_ROOT}/build/last/librprecice.so ) -find_library(PRECICE_LIB NAMES precice HINTS "${LD_LIBRARY_PATH}") +string(REPLACE ":" ";" LIBRARY_DIRS $ENV{LD_LIBRARY_PATH}) +find_library(PRECICE_LIB NAMES precice HINTS "${LIBRARY_DIRS}") find_package(Boost 1.65.1 REQUIRED COMPONENTS log system) #Require same version as preCICE diff --git a/appl/conjugateheattransfer/iterative/main_freeflow.cc b/appl/conjugateheattransfer/iterative/main_freeflow.cc index 95e94ce2d3988a0a4144ea43ca14eccc31f969ae..e195afaa912919f52c000ae9faeac6bc00dda543 100644 --- a/appl/conjugateheattransfer/iterative/main_freeflow.cc +++ b/appl/conjugateheattransfer/iterative/main_freeflow.cc @@ -47,75 +47,8 @@ #include <dumux/nonlinear/newtonsolver.hh> #include "../monolithic/problem_freeflow.hh" -#include "preciceadapter.hh" - - -template<class Problem, class GridVariables, class SolutionVector> -void setBoundaryHeatFluxes(const Problem& problem, - const GridVariables& gridVars, - const SolutionVector& sol) -{ - const auto& fvGridGeometry = problem.fvGridGeometry(); - auto fvGeometry = localView(fvGridGeometry); - auto elemVolVars = localView(gridVars.curGridVolVars()); - auto elemFaceVars = localView(gridVars.curGridFaceVars()); - - auto& couplingInterface = precice_adapter::PreciceAdapter::getInstance(); - - for (const auto& element : elements(fvGridGeometry.gridView())) - { - fvGeometry.bindElement(element); - elemVolVars.bindElement(element, fvGeometry, sol); - elemFaceVars.bindElement(element, fvGeometry, sol); - - for (const auto& scvf : scvfs(fvGeometry)) - { - - if ( couplingInterface.isCoupledEntity( scvf.index() ) ) - { - //TODO: Actually writes temperature - const auto heatFlux = problem.neumann( element, fvGeometry, elemVolVars, elemFaceVars, scvf )[3]; - couplingInterface.writeHeatFluxOnFace( scvf.index(), heatFlux ); - } - } - } -} - -template<class Problem, class GridVariables, class SolutionVector> -void printCellCenterTemperatures(const Problem& problem, - const GridVariables& gridVars, - const SolutionVector& sol) -{ - const auto& fvGridGeometry = problem.fvGridGeometry(); - auto fvGeometry = localView(fvGridGeometry); - auto elemVolVars = localView(gridVars.curGridVolVars()); - auto elemFaceVars = localView(gridVars.curGridFaceVars()); - - auto& couplingInterface = precice_adapter::PreciceAdapter::getInstance(); - - for (const auto& element : elements(fvGridGeometry.gridView())) - { - fvGeometry.bindElement(element); - elemVolVars.bindElement(element, fvGeometry, sol); - elemFaceVars.bindElement(element, fvGeometry, sol); - - for (const auto& scvf : scvfs(fvGeometry)) - { - - if ( couplingInterface.isCoupledEntity( scvf.index() ) ) - { - //TODO: Actually writes temperature - const auto& scv = fvGeometry.scv(scvf.insideScvIdx()); - const auto& volVars = elemVolVars[scv]; - - std::cout << "Temperature on cell center is: " << volVars.temperature() << std::endl; -// const auto heatFlux = problem.neumann( element, fvGeometry, elemVolVars, elemFaceVars, scvf )[3]; -// couplingInterface.writeHeatFluxOnFace( scvf.index(), heatFlux ); - } - } - } -} - +#include "../common/preciceadapter.hh" +#include "../common/helperfunctions.hh" int main(int argc, char** argv) try @@ -226,7 +159,7 @@ int main(int argc, char** argv) try if ( couplingInterface.hasToWriteInitialData() ) { - setBoundaryHeatFluxes( *freeFlowProblem, *freeFlowGridVariables, sol ); + helperfunctions::setBoundaryHeatFluxes( *freeFlowProblem, *freeFlowGridVariables, sol ); couplingInterface.writeHeatFluxToOtherSolver(); couplingInterface.announceInitialDataWritten(); } @@ -288,7 +221,7 @@ int main(int argc, char** argv) try nonLinearSolver.solve(sol, *timeLoop); // Write heatflux to wrapper - setBoundaryHeatFluxes( *freeFlowProblem, *freeFlowGridVariables, sol ); + helperfunctions::setBoundaryHeatFluxes( *freeFlowProblem, *freeFlowGridVariables, sol ); //Tell wrapper that all values have been written couplingInterface.writeHeatFluxToOtherSolver(); const double preciceDt = couplingInterface.advance( timeLoop->timeStepSize() ); diff --git a/appl/conjugateheattransfer/iterative/main_solidenergy.cc b/appl/conjugateheattransfer/iterative/main_solidenergy.cc index 4a5e58e5811bc8583bbfb5cdd5cd6c4185a74af0..dd29bec475e951d0a5d48a1357da59b99d048c20 100644 --- a/appl/conjugateheattransfer/iterative/main_solidenergy.cc +++ b/appl/conjugateheattransfer/iterative/main_solidenergy.cc @@ -45,60 +45,8 @@ #include <dumux/nonlinear/newtonsolver.hh> #include "../monolithic/problem_heat.hh" -#include "preciceadapter.hh" - -template<class ThermalConductivityModel, class Problem, class FVElementGeometry, class ElementVolumeVariables> -auto recontructBoundaryTemperature(const Problem& problem, - const typename FVElementGeometry::FVGridGeometry::GridView::template Codim<0>::Entity& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars, - const typename FVElementGeometry::SubControlVolumeFace& scvf) -{ - using Scalar = typename ElementVolumeVariables::VolumeVariables::PrimaryVariables::value_type; - - const auto& scv = fvGeometry.scv(scvf.insideScvIdx()); - const auto& volVars = elemVolVars[scv]; - const Scalar cellCenterTemperature = volVars.temperature(); - const Scalar distance = (scvf.center() - scv.center()).two_norm(); - const Scalar insideLambda = ThermalConductivityModel::effectiveThermalConductivity(volVars, - problem.spatialParams(), - element, - fvGeometry, - scv); - - const Scalar qHeat = problem.neumann(element, fvGeometry, elemVolVars, scvf); - // q = -lambda * (t_face - t_cc) / dx - // t_face = -q * dx / lambda + t_cc - return -qHeat * distance / insideLambda + cellCenterTemperature; -} - -template<class ThermalConductivityModel, class Problem, class GridVariables, class SolutionVector> -void setBoundaryTemperatures(const Problem& problem, - const GridVariables& gridVars, - const SolutionVector& sol) -{ - const auto& fvGridGeometry = problem.fvGridGeometry(); - auto fvGeometry = localView(fvGridGeometry); - auto elemVolVars = localView(gridVars.curGridVolVars()); - - auto& couplingInterface = precice_adapter::PreciceAdapter::getInstance(); - - for (const auto& element : elements(fvGridGeometry.gridView())) - { - fvGeometry.bindElement(element); - elemVolVars.bindElement(element, fvGeometry, sol); - - for (const auto& scvf : scvfs(fvGeometry)) - { - - if ( couplingInterface.isCoupledEntity( scvf.index() ) ) - { - //TODO: Actually writes temperature - couplingInterface.writeTemperatureOnFace( scvf.index(), recontructBoundaryTemperature<ThermalConductivityModel>(problem, element, fvGeometry, elemVolVars, scvf) ); - } - } - } -} +#include "../common/preciceadapter.hh" +#include "../common/helperfunctions.hh" int main(int argc, char** argv) try @@ -202,6 +150,7 @@ int main(int argc, char** argv) try if ( couplingInterface.hasToWriteInitialData() ) { + using namespace helperfunctions::heat; setBoundaryTemperatures<GetPropType<SolidEnergyTypeTag, Properties::ThermalConductivityModel>>(*solidEnergyProblem, *solidEnergyGridVariables, sol ); couplingInterface.writeTemperatureToOtherSolver(); couplingInterface.announceInitialDataWritten(); @@ -275,6 +224,7 @@ int main(int argc, char** argv) try //TODO DO WE HAVE TO MOVE THAT? solidEnergyGridVariables->advanceTimeStep(); + using namespace helperfunctions::heat; setBoundaryTemperatures<GetPropType<SolidEnergyTypeTag, Properties::ThermalConductivityModel>>(*solidEnergyProblem, *solidEnergyGridVariables, sol ); couplingInterface.writeTemperatureToOtherSolver(); diff --git a/appl/conjugateheattransfer/monolithic-const-dt/CMakeLists.txt b/appl/conjugateheattransfer/monolithic-const-dt/CMakeLists.txt index e9d1012f342b0cf3aba02808433c6858f91e5f5e..95f70e426bca858c1c58fe56e1240052d804bc32 100644 --- a/appl/conjugateheattransfer/monolithic-const-dt/CMakeLists.txt +++ b/appl/conjugateheattransfer/monolithic-const-dt/CMakeLists.txt @@ -2,3 +2,4 @@ dune_symlink_to_source_files(FILES "../monolithic/params.input") add_executable(test_conjugate_heat_monolithic_const_dt EXCLUDE_FROM_ALL main.cc) +target_compile_definitions(test_conjugate_heat_monolithic PUBLIC "ENABLEMONOLITHIC=1") diff --git a/appl/conjugateheattransfer/monolithic/CMakeLists.txt b/appl/conjugateheattransfer/monolithic/CMakeLists.txt index d8c2d54e536cfe8b6a8a9d5ff930840089b3ab3e..c837d865261603687855085a8864ebf02889a59e 100644 --- a/appl/conjugateheattransfer/monolithic/CMakeLists.txt +++ b/appl/conjugateheattransfer/monolithic/CMakeLists.txt @@ -1,3 +1,5 @@ add_input_file_links() add_executable(test_conjugate_heat_monolithic EXCLUDE_FROM_ALL main.cc) + +target_compile_definitions(test_conjugate_heat_monolithic PUBLIC "ENABLEMONOLITHIC=1") diff --git a/appl/conjugateheattransfer/monolithic/problem_freeflow.hh b/appl/conjugateheattransfer/monolithic/problem_freeflow.hh index 72e5481a7d5242cae1b520bc256e73bd1884ddae..e2f47621f665df2645fd86facac1af93b17da4ca 100644 --- a/appl/conjugateheattransfer/monolithic/problem_freeflow.hh +++ b/appl/conjugateheattransfer/monolithic/problem_freeflow.hh @@ -39,7 +39,7 @@ #include <dumux/freeflow/navierstokes/model.hh> #if !ENABLEMONOLITHIC -#include "../iterative/preciceadapter.hh" +#include "../common/preciceadapter.hh" #endif namespace Dumux { diff --git a/appl/conjugateheattransfer/monolithic/problem_heat.hh b/appl/conjugateheattransfer/monolithic/problem_heat.hh index 31c3f7588078d52fef07535f2ec32ae33855a031..4ab9f04bbbf838ede7a9d7ec37e5460c565889b0 100644 --- a/appl/conjugateheattransfer/monolithic/problem_heat.hh +++ b/appl/conjugateheattransfer/monolithic/problem_heat.hh @@ -39,7 +39,7 @@ #include "spatialparams.hh" #if !ENABLEMONOLITHIC -#include "../iterative/preciceadapter.hh" +#include "../common/preciceadapter.hh" #endif namespace Dumux {