Commit d688ea14 authored by Kilian Weishaupt's avatar Kilian Weishaupt
Browse files

[stokesdarcy][convergencetest] Use test case enum and rename Stokes to FreeFlow

parent 60af4cab
add_input_file_links()
dune_symlink_to_source_files(FILES "convergencetest.py")
add_executable(test_md_boundary_darcy1p_freeflow1p_convtest EXCLUDE_FROM_ALL main.cc)
dune_add_test(NAME test_md_boundary_darcy1p_stokes1p_convtest
SOURCES main.cc
TARGET test_md_boundary_darcy1p_freeflow1p_convtest
LABELS multidomain multidomain_boundary stokesdarcy
TIMEOUT 1000
CMAKE_GUARD HAVE_UMFPACK
COMMAND ./convergencetest.py
CMD_ARGS test_md_boundary_darcy1p_stokes1p_convtest params.input)
CMD_ARGS test_md_boundary_darcy1p_freeflow1p_convtest params.input
-Darcy.SpatialParams.Permeability 1.0)
......@@ -12,8 +12,8 @@ testname = str(sys.argv[1])
testargs = [str(i) for i in sys.argv][2:]
# remove the old log files
subprocess.call(['rm', testname + '_stokes.log'])
print("Removed old log file ({})!".format(testname + '_stokes.log'))
subprocess.call(['rm', testname + '_freeFlow.log'])
print("Removed old log file ({})!".format(testname + '_freeFlow.log'))
subprocess.call(['rm', testname + '_darcy.log'])
print("Removed old log file ({})!".format(testname + '_darcy.log'))
......@@ -22,9 +22,9 @@ for i in [0, 1, 2]:
subprocess.call(['./' + testname] + testargs + ['-Grid.Refinement', str(i),
'-Vtk.OutputName', testname])
def checkRatesStokes():
def checkRatesFreeFlow():
# check the rates and append them to the log file
logfile = open(testname + '_stokes.log', "r+")
logfile = open(testname + '_freeFlow.log', "r+")
errorP = []
errorVx = []
......@@ -64,7 +64,7 @@ def checkRatesStokes():
logfile.close()
print("\nComputed the following convergence rates for {}:\n".format(testname))
subprocess.call(['cat', testname + '_stokes.log'])
subprocess.call(['cat', testname + '_freeFlow.log'])
return {"p" : resultsP, "v_x" : resultsVx, "v_y" : resultsVy}
......@@ -104,23 +104,23 @@ def checkRatesDarcy():
return {"p" : resultsP}
def checkRatesStokesAndDarcy():
resultsStokes = checkRatesStokes()
def checkRatesFreeFlowAndDarcy():
resultsFreeFlow = checkRatesFreeFlow()
resultsDarcy = checkRatesDarcy()
def mean(numbers):
return float(sum(numbers)) / len(numbers)
# check the rates, we expect rates around 2
if mean(resultsStokes["p"]) < 2.05 and mean(resultsStokes["p"]) < 1.84:
if mean(resultsFreeFlow["p"]) < 2.05 and mean(resultsFreeFlow["p"]) < 1.84:
sys.stderr.write("*"*70 + "\n" + "The convergence rates for pressure were not close enough to 2! Test failed.\n" + "*"*70 + "\n")
sys.exit(1)
if mean(resultsStokes["v_x"]) < 2.05 and mean(resultsStokes["v_x"]) < 1.95:
if mean(resultsFreeFlow["v_x"]) < 2.05 and mean(resultsFreeFlow["v_x"]) < 1.95:
sys.stderr.write("*"*70 + "\n" + "The convergence rates for x-velocity were not close enough to 2! Test failed.\n" + "*"*70 + "\n")
sys.exit(1)
if mean(resultsStokes["v_y"]) < 2.05 and mean(resultsStokes["v_y"]) < 1.95:
if mean(resultsFreeFlow["v_y"]) < 2.05 and mean(resultsFreeFlow["v_y"]) < 1.95:
sys.stderr.write("*"*70 + "\n" + "The convergence rates for y-velocity were not close enough to 2! Test failed.\n" + "*"*70 + "\n")
sys.exit(1)
......@@ -129,4 +129,4 @@ def checkRatesStokesAndDarcy():
sys.exit(1)
checkRatesStokesAndDarcy()
checkRatesFreeFlowAndDarcy()
......@@ -19,9 +19,7 @@
/*!
* \file
* \ingroup BoundaryTests
* \brief A test problem for the coupled Stokes/Darcy problem (1p).
* The analytical solution is given in Shiue et al., 2018:
* "Convergence of the MAC Scheme for the Stokes/Darcy Coupling Problem"
* \brief A test problem for the coupled FreeFlow/Darcy problem (1p).
*/
#include <config.h>
......@@ -51,6 +49,7 @@
#include <dumux/multidomain/boundary/stokesdarcy/couplingmanager.hh>
#include "testcase.hh"
#include "problem_darcy.hh"
#include "problem_stokes.hh"
......@@ -58,7 +57,7 @@ namespace Dumux {
namespace Properties {
template<class TypeTag>
struct CouplingManager<TypeTag, TTag::StokesOneP>
struct CouplingManager<TypeTag, TTag::FreeFlowOneP>
{
using Traits = StaggeredMultiDomainTraits<TypeTag, TypeTag, Properties::TTag::DarcyOneP>;
using type = Dumux::StokesDarcyCouplingManager<Traits>;
......@@ -67,7 +66,7 @@ struct CouplingManager<TypeTag, TTag::StokesOneP>
template<class TypeTag>
struct CouplingManager<TypeTag, TTag::DarcyOneP>
{
using Traits = StaggeredMultiDomainTraits<Properties::TTag::StokesOneP, Properties::TTag::StokesOneP, TypeTag>;
using Traits = StaggeredMultiDomainTraits<Properties::TTag::FreeFlowOneP, Properties::TTag::FreeFlowOneP, TypeTag>;
using type = Dumux::StokesDarcyCouplingManager<Traits>;
};
......@@ -80,7 +79,7 @@ struct CouplingManager<TypeTag, TTag::DarcyOneP>
* \param problem the problem for which to evaluate the analytical solution
*/
template<class Scalar, class Problem>
auto createStokesAnalyticalSolution(const Problem& problem)
auto createFreeFlowAnalyticalSolution(const Problem& problem)
{
const auto& gridGeometry = problem.gridGeometry();
using GridView = typename std::decay_t<decltype(gridGeometry)>::GridView;
......@@ -171,11 +170,11 @@ auto createDarcyAnalyticalSolution(const Problem& problem)
}
template<class Problem, class SolutionVector>
void printStokesL2Error(const Problem& problem, const SolutionVector& x)
void printFreeFlowL2Error(const Problem& problem, const SolutionVector& x)
{
using namespace Dumux;
using Scalar = double;
using TypeTag = Properties::TTag::StokesOneP;
using TypeTag = Properties::TTag::FreeFlowOneP;
using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
using ModelTraits = GetPropType<TypeTag, Properties::ModelTraits>;
using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
......@@ -253,7 +252,7 @@ int main(int argc, char** argv) try
Parameters::init(argc, argv);
// Define the sub problem type tags
using StokesTypeTag = Properties::TTag::StokesOneP;
using FreeFlowTypeTag = Properties::TTag::FreeFlowOneP;
using DarcyTypeTag = Properties::TTag::DarcyOneP;
// try to create a grid (from the given grid file or the input file)
......@@ -262,67 +261,83 @@ int main(int argc, char** argv) try
DarcyGridManager darcyGridManager;
darcyGridManager.init("Darcy"); // pass parameter group
using StokesGridManager = Dumux::GridManager<GetPropType<StokesTypeTag, Properties::Grid>>;
StokesGridManager stokesGridManager;
stokesGridManager.init("Stokes"); // pass parameter group
using FreeFlowGridManager = Dumux::GridManager<GetPropType<FreeFlowTypeTag, Properties::Grid>>;
FreeFlowGridManager freeFlowGridManager;
freeFlowGridManager.init("FreeFlow"); // pass parameter group
// we compute on the leaf grid view
const auto& darcyGridView = darcyGridManager.grid().leafGridView();
const auto& stokesGridView = stokesGridManager.grid().leafGridView();
const auto& freeFlowGridView = freeFlowGridManager.grid().leafGridView();
// create the finite volume grid geometry
using StokesGridGeometry = GetPropType<StokesTypeTag, Properties::GridGeometry>;
auto stokesGridGeometry = std::make_shared<StokesGridGeometry>(stokesGridView);
stokesGridGeometry->update();
using FreeFlowGridGeometry = GetPropType<FreeFlowTypeTag, Properties::GridGeometry>;
auto freeFlowGridGeometry = std::make_shared<FreeFlowGridGeometry>(freeFlowGridView);
freeFlowGridGeometry->update();
using DarcyGridGeometry = GetPropType<DarcyTypeTag, Properties::GridGeometry>;
auto darcyGridGeometry = std::make_shared<DarcyGridGeometry>(darcyGridView);
darcyGridGeometry->update();
using Traits = StaggeredMultiDomainTraits<StokesTypeTag, StokesTypeTag, DarcyTypeTag>;
using Traits = StaggeredMultiDomainTraits<FreeFlowTypeTag, FreeFlowTypeTag, DarcyTypeTag>;
// the coupling manager
using CouplingManager = StokesDarcyCouplingManager<Traits>;
auto couplingManager = std::make_shared<CouplingManager>(stokesGridGeometry, darcyGridGeometry);
auto couplingManager = std::make_shared<CouplingManager>(freeFlowGridGeometry, darcyGridGeometry);
// the indices
constexpr auto stokesCellCenterIdx = CouplingManager::stokesCellCenterIdx;
constexpr auto stokesFaceIdx = CouplingManager::stokesFaceIdx;
constexpr auto freeFlowCellCenterIdx = CouplingManager::stokesCellCenterIdx;
constexpr auto freeFlowFaceIdx = CouplingManager::stokesFaceIdx;
constexpr auto darcyIdx = CouplingManager::darcyIdx;
// the problem (initial and boundary conditions)
using StokesProblem = GetPropType<StokesTypeTag, Properties::Problem>;
auto stokesProblem = std::make_shared<StokesProblem>(stokesGridGeometry, couplingManager);
const auto testCase = []()
{
const auto testCaseInput = getParam<std::string>("Problem.TestCase", "ShiueExampleTwo");
TestCase tc;
if (testCaseInput == "ShiueExampleOne")
tc = TestCase::ShiueExampleOne;
else if (testCaseInput == "ShiueExampleTwo")
tc = TestCase::ShiueExampleTwo;
else if (testCaseInput == "Rybak")
tc = TestCase::Rybak;
else
DUNE_THROW(Dune::InvalidStateException, testCaseInput + " is not a valid test case");
return tc;
}();
using FreeFlowProblem = GetPropType<FreeFlowTypeTag, Properties::Problem>;
auto freeFlowProblem = std::make_shared<FreeFlowProblem>(freeFlowGridGeometry, couplingManager, testCase);
using DarcyProblem = GetPropType<DarcyTypeTag, Properties::Problem>;
auto darcyProblem = std::make_shared<DarcyProblem>(darcyGridGeometry, couplingManager);
auto spatialParams = std::make_shared<typename DarcyProblem::SpatialParams>(darcyGridGeometry, testCase);
auto darcyProblem = std::make_shared<DarcyProblem>(darcyGridGeometry, couplingManager, spatialParams, testCase);
// the solution vector
Traits::SolutionVector sol;
sol[stokesCellCenterIdx].resize(stokesGridGeometry->numCellCenterDofs());
sol[stokesFaceIdx].resize(stokesGridGeometry->numFaceDofs());
sol[freeFlowCellCenterIdx].resize(freeFlowGridGeometry->numCellCenterDofs());
sol[freeFlowFaceIdx].resize(freeFlowGridGeometry->numFaceDofs());
sol[darcyIdx].resize(darcyGridGeometry->numDofs());
// get a solution vector storing references to the two Stokes solution vectors
auto stokesSol = partial(sol, stokesFaceIdx, stokesCellCenterIdx);
// get a solution vector storing references to the two FreeFlow solution vectors
auto freeFlowSol = partial(sol, freeFlowFaceIdx, freeFlowCellCenterIdx);
couplingManager->init(stokesProblem, darcyProblem, sol);
couplingManager->init(freeFlowProblem, darcyProblem, sol);
// the grid variables
using StokesGridVariables = GetPropType<StokesTypeTag, Properties::GridVariables>;
auto stokesGridVariables = std::make_shared<StokesGridVariables>(stokesProblem, stokesGridGeometry);
stokesGridVariables->init(stokesSol);
using FreeFlowGridVariables = GetPropType<FreeFlowTypeTag, Properties::GridVariables>;
auto freeFlowGridVariables = std::make_shared<FreeFlowGridVariables>(freeFlowProblem, freeFlowGridGeometry);
freeFlowGridVariables->init(freeFlowSol);
using DarcyGridVariables = GetPropType<DarcyTypeTag, Properties::GridVariables>;
auto darcyGridVariables = std::make_shared<DarcyGridVariables>(darcyProblem, darcyGridGeometry);
darcyGridVariables->init(sol[darcyIdx]);
// intialize the vtk output module
using Scalar = typename Traits::Scalar;
StaggeredVtkOutputModule<StokesGridVariables, decltype(stokesSol)> stokesVtkWriter(*stokesGridVariables, stokesSol, stokesProblem->name());
GetPropType<StokesTypeTag, Properties::IOFields>::initOutputModule(stokesVtkWriter);
const auto stokesAnalyticalSolution = createStokesAnalyticalSolution<Scalar>(*stokesProblem);
stokesVtkWriter.addField(std::get<0>(stokesAnalyticalSolution), "pressureExact");
stokesVtkWriter.addField(std::get<1>(stokesAnalyticalSolution), "velocityExact");
stokesVtkWriter.addFaceField(std::get<2>(stokesAnalyticalSolution), "faceVelocityExact");
stokesVtkWriter.write(0.0);
StaggeredVtkOutputModule<FreeFlowGridVariables, decltype(freeFlowSol)> freeFlowVtkWriter(*freeFlowGridVariables, freeFlowSol, freeFlowProblem->name());
GetPropType<FreeFlowTypeTag, Properties::IOFields>::initOutputModule(freeFlowVtkWriter);
const auto freeFlowAnalyticalSolution = createFreeFlowAnalyticalSolution<Scalar>(*freeFlowProblem);
freeFlowVtkWriter.addField(std::get<0>(freeFlowAnalyticalSolution), "pressureExact");
freeFlowVtkWriter.addField(std::get<1>(freeFlowAnalyticalSolution), "velocityExact");
freeFlowVtkWriter.addFaceField(std::get<2>(freeFlowAnalyticalSolution), "faceVelocityExact");
freeFlowVtkWriter.write(0.0);
VtkOutputModule<DarcyGridVariables, GetPropType<DarcyTypeTag, Properties::SolutionVector>> darcyVtkWriter(*darcyGridVariables, sol[darcyIdx], darcyProblem->name());
using DarcyVelocityOutput = GetPropType<DarcyTypeTag, Properties::VelocityOutput>;
......@@ -335,12 +350,12 @@ int main(int argc, char** argv) try
// the assembler for a stationary problem
using Assembler = MultiDomainFVAssembler<Traits, CouplingManager, DiffMethod::numeric>;
auto assembler = std::make_shared<Assembler>(std::make_tuple(stokesProblem, stokesProblem, darcyProblem),
std::make_tuple(stokesGridGeometry->faceFVGridGeometryPtr(),
stokesGridGeometry->cellCenterFVGridGeometryPtr(),
auto assembler = std::make_shared<Assembler>(std::make_tuple(freeFlowProblem, freeFlowProblem, darcyProblem),
std::make_tuple(freeFlowGridGeometry->faceFVGridGeometryPtr(),
freeFlowGridGeometry->cellCenterFVGridGeometryPtr(),
darcyGridGeometry),
std::make_tuple(stokesGridVariables->faceGridVariablesPtr(),
stokesGridVariables->cellCenterGridVariablesPtr(),
std::make_tuple(freeFlowGridVariables->faceGridVariablesPtr(),
freeFlowGridVariables->cellCenterGridVariablesPtr(),
darcyGridVariables),
couplingManager);
......@@ -356,10 +371,10 @@ int main(int argc, char** argv) try
nonLinearSolver.solve(sol);
// write vtk output
stokesVtkWriter.write(1.0);
freeFlowVtkWriter.write(1.0);
darcyVtkWriter.write(1.0);
printStokesL2Error(*stokesProblem, stokesSol);
printFreeFlowL2Error(*freeFlowProblem, freeFlowSol);
printDarcyL2Error(*darcyProblem, sol[darcyIdx]);
////////////////////////////////////////////////////////////
......
......@@ -2,24 +2,23 @@
UpperRight = 1 1
Cells = 40 40
[Stokes.Grid]
[FreeFlow.Grid]
LowerLeft = 0 1
UpperRight = 1 2
Cells = 40 40
[Stokes.Problem]
Name = stokes
[FreeFlow.Problem]
Name = freeFlow
EnableInertiaTerms = false
[Darcy.Problem]
Name = darcy
[Darcy.SpatialParams]
Permeability = 1.0
AlphaBeaversJoseph = 1.0
[Vtk]
OutputName = test_md_boundary_stokes1p_darcy1p_convergencetest
OutputName = test_md_boundary_freeflow1p_darcy1p_convergencetest
[Problem]
EnableGravity = false
......
......@@ -34,6 +34,7 @@
#include <dumux/porousmediumflow/problem.hh>
#include "../spatialparams.hh"
#include "testcase.hh"
#include <dumux/material/components/constant.hh>
#include <dumux/material/fluidsystems/1pliquid.hh>
......@@ -100,30 +101,19 @@ class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
static constexpr auto velocityYIdx = 1;
static constexpr auto pressureIdx = 2;
enum class TestCase
{
ShiueExampleOne, ShiueExampleTwo, Rybak
};
public:
//! export the Indices
using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
DarcySubProblem(std::shared_ptr<const GridGeometry> gridGeometry,
std::shared_ptr<CouplingManager> couplingManager)
: ParentType(gridGeometry, "Darcy"), couplingManager_(couplingManager)
std::shared_ptr<CouplingManager> couplingManager,
std::shared_ptr<typename ParentType::SpatialParams> spatialParams,
const TestCase testCase)
: ParentType(gridGeometry, spatialParams, "Darcy")
, couplingManager_(couplingManager)
, testCase_(testCase)
{
problemName_ = getParam<std::string>("Vtk.OutputName") + "_" + getParamFromGroup<std::string>(this->paramGroup(), "Problem.Name");
const auto testCaseInput = getParamFromGroup<std::string>(this->paramGroup(), "Problem.TestCase", "ShiueExampleTwo");
if (testCaseInput == "ShiueExampleOne")
testCase_ = TestCase::ShiueExampleOne;
else if (testCaseInput == "ShiueExampleTwo")
testCase_ = TestCase::ShiueExampleTwo;
else if (testCaseInput == "Rybak")
testCase_ = TestCase::Rybak;
else
DUNE_THROW(Dune::InvalidStateException, testCaseInput + " is not a valid test case");
}
/*!
......
......@@ -19,11 +19,11 @@
/*!
* \file
* \ingroup BoundaryTests
* \brief The Stokes sub-problem of coupled Stokes-Darcy convergence test
* \brief The free-flow sub-problem of coupled FreeFlow/Darcy convergence test
*/
#ifndef DUMUX_STOKES_SUBPROBLEM_HH
#define DUMUX_STOKES_SUBPROBLEM_HH
#ifndef DUMUX_FREEFLOW_SUBPROBLEM_HH
#define DUMUX_FREEFLOW_SUBPROBLEM_HH
#include <dune/common/fvector.hh>
#include <dune/grid/yaspgrid.hh>
......@@ -34,20 +34,21 @@
#include <dumux/freeflow/navierstokes/problem.hh>
#include <dumux/discretization/staggered/freeflow/properties.hh>
#include <dumux/freeflow/navierstokes/model.hh>
#include "testcase.hh"
namespace Dumux {
template <class TypeTag>
class StokesSubProblem;
class FreeFlowSubProblem;
namespace Properties {
// Create new type tags
namespace TTag {
struct StokesOneP { using InheritsFrom = std::tuple<NavierStokes, StaggeredFreeFlowModel>; };
struct FreeFlowOneP { using InheritsFrom = std::tuple<NavierStokes, StaggeredFreeFlowModel>; };
} // end namespace TTag
// the fluid system
template<class TypeTag>
struct FluidSystem<TypeTag, TTag::StokesOneP>
struct FluidSystem<TypeTag, TTag::FreeFlowOneP>
{
using Scalar = GetPropType<TypeTag, Properties::Scalar>;
using type = FluidSystems::OnePLiquid<Scalar, Dumux::Components::Constant<1, Scalar> > ;
......@@ -55,18 +56,18 @@ struct FluidSystem<TypeTag, TTag::StokesOneP>
// Set the grid type
template<class TypeTag>
struct Grid<TypeTag, TTag::StokesOneP> { using type = Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<GetPropType<TypeTag, Properties::Scalar>, 2> >; };
struct Grid<TypeTag, TTag::FreeFlowOneP> { using type = Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<GetPropType<TypeTag, Properties::Scalar>, 2> >; };
// Set the problem property
template<class TypeTag>
struct Problem<TypeTag, TTag::StokesOneP> { using type = Dumux::StokesSubProblem<TypeTag> ; };
struct Problem<TypeTag, TTag::FreeFlowOneP> { using type = Dumux::FreeFlowSubProblem<TypeTag> ; };
template<class TypeTag>
struct EnableGridGeometryCache<TypeTag, TTag::StokesOneP> { static constexpr bool value = true; };
struct EnableGridGeometryCache<TypeTag, TTag::FreeFlowOneP> { static constexpr bool value = true; };
template<class TypeTag>
struct EnableGridFluxVariablesCache<TypeTag, TTag::StokesOneP> { static constexpr bool value = true; };
struct EnableGridFluxVariablesCache<TypeTag, TTag::FreeFlowOneP> { static constexpr bool value = true; };
template<class TypeTag>
struct EnableGridVolumeVariablesCache<TypeTag, TTag::StokesOneP> { static constexpr bool value = true; };
struct EnableGridVolumeVariablesCache<TypeTag, TTag::FreeFlowOneP> { static constexpr bool value = true; };
} // end namespace Properties
/*!
......@@ -74,7 +75,7 @@ struct EnableGridVolumeVariablesCache<TypeTag, TTag::StokesOneP> { static conste
* \brief The Stokes sub-problem of coupled Stokes-Darcy convergence test
*/
template <class TypeTag>
class StokesSubProblem : public NavierStokesProblem<TypeTag>
class FreeFlowSubProblem : public NavierStokesProblem<TypeTag>
{
using ParentType = NavierStokesProblem<TypeTag>;
using Scalar = GetPropType<TypeTag, Properties::Scalar>;
......@@ -91,29 +92,16 @@ class StokesSubProblem : public NavierStokesProblem<TypeTag>
using CouplingManager = GetPropType<TypeTag, Properties::CouplingManager>;
enum class TestCase
{
ShiueExampleOne, ShiueExampleTwo, Rybak
};
public:
//! export the Indices
using Indices = typename ModelTraits::Indices;
StokesSubProblem(std::shared_ptr<const GridGeometry> gridGeometry, std::shared_ptr<CouplingManager> couplingManager)
: ParentType(gridGeometry, "Stokes"), couplingManager_(couplingManager)
FreeFlowSubProblem(std::shared_ptr<const GridGeometry> gridGeometry, std::shared_ptr<CouplingManager> couplingManager, const TestCase testCase)
: ParentType(gridGeometry, "FreeFlow")
, couplingManager_(couplingManager)
, testCase_(testCase)
{
problemName_ = getParam<std::string>("Vtk.OutputName") + "_" + getParamFromGroup<std::string>(this->paramGroup(), "Problem.Name");
const auto testCaseInput = getParamFromGroup<std::string>(this->paramGroup(), "Problem.TestCase", "ShiueExampleTwo");
if (testCaseInput == "ShiueExampleOne")
testCase_ = TestCase::ShiueExampleOne;
else if (testCaseInput == "ShiueExampleTwo")
testCase_ = TestCase::ShiueExampleTwo;
else if (testCaseInput == "Rybak")
testCase_ = TestCase::Rybak;
else
DUNE_THROW(Dune::InvalidStateException, testCaseInput + " is not a valid test case");
}
/*!
......@@ -248,7 +236,7 @@ public:
* \brief Returns the intrinsic permeability of required as input parameter
for the Beavers-Joseph-Saffman boundary condition
*/
Scalar permeability(const Element& element, const SubControlVolumeFace& scvf) const
auto permeability(const Element& element, const SubControlVolumeFace& scvf) const
{
return couplingManager().couplingData().darcyPermeability(element, scvf);
}
......@@ -362,4 +350,4 @@ private:
};
} // end namespace Dumux
#endif // DUMUX_STOKES_SUBPROBLEM_HH
#endif // DUMUX_FREEFLOW_SUBPROBLEM_HH
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment