diff --git a/exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh b/exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh index 4baab97dedc7bbbb4f7b918326837552be33a471..88e21585790a0fdc0bbc33419e5efcea52d0faf8 100644 --- a/exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh +++ b/exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh @@ -23,63 +23,11 @@ #ifndef DUMUX_FREEFLOW1P2C_SUBPROBLEM_HH #define DUMUX_FREEFLOW1P2C_SUBPROBLEM_HH -#include <dune/grid/yaspgrid.hh> - -#include <dumux/material/fluidsystems/1padapter.hh> -#include <dumux/material/fluidsystems/h2oair.hh> -#include <dumux/discretization/staggered/freeflow/properties.hh> - -// TODO: dumux-course-task 3.A -// Include headers for compositional zero equation turbulence model here. -#include <dumux/freeflow/compositional/navierstokesncmodel.hh> #include <dumux/freeflow/navierstokes/problem.hh> +#include <dumux/common/properties.hh> namespace Dumux { -template <class TypeTag> -class FreeFlowSubProblem; - -namespace Properties { - -// Create new type tags -namespace TTag { - // TODO: dumux-course-task 3.A - // Change the entry in the `StokesZeroEq` definition accordingly. -struct StokesZeroEq { using InheritsFrom = std::tuple<NavierStokesNCNI, StaggeredFreeFlowModel>; }; -} // end namespace TTag - -// Set the grid type -template<class TypeTag> -struct Grid<TypeTag, TTag::StokesZeroEq> { using type = Dune::YaspGrid<2, Dune::TensorProductCoordinates<GetPropType<TypeTag, Properties::Scalar>, 2> >; }; - -// The fluid system -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::StokesZeroEq> -{ - using H2OAir = FluidSystems::H2OAir<GetPropType<TypeTag, Properties::Scalar>>; - static constexpr auto phaseIdx = H2OAir::gasPhaseIdx; // simulate the air phase - using type = FluidSystems::OnePAdapter<H2OAir, phaseIdx>; -}; - -template<class TypeTag> -struct ReplaceCompEqIdx<TypeTag, TTag::StokesZeroEq> { static constexpr int value = 3; }; - -// Use formulation based on mass fractions -template<class TypeTag> -struct UseMoles<TypeTag, TTag::StokesZeroEq> { static constexpr bool value = true; }; - -// Set the problem property -template<class TypeTag> -struct Problem<TypeTag, TTag::StokesZeroEq> { using type = Dumux::FreeFlowSubProblem<TypeTag> ; }; - -template<class TypeTag> -struct EnableGridGeometryCache<TypeTag, TTag::StokesZeroEq> { static constexpr bool value = true; }; -template<class TypeTag> -struct EnableGridFluxVariablesCache<TypeTag, TTag::StokesZeroEq> { static constexpr bool value = true; }; -template<class TypeTag> -struct EnableGridVolumeVariablesCache<TypeTag, TTag::StokesZeroEq> { static constexpr bool value = true; }; -} - /*! * \brief The free-flow sub problem */ @@ -398,6 +346,7 @@ private: DiffusionCoefficientAveragingType diffCoeffAvgType_; }; -} //end namespace + +} //end namespace Dumux #endif // DUMUX_STOKES1P2C_SUBPROBLEM_HH diff --git a/exercises/exercise-coupling-ff-pm/turbulence/main.cc b/exercises/exercise-coupling-ff-pm/turbulence/main.cc index a0750fad95b9c509d191c895502f2f2b9d62c779..72c7ebf0db1d6206aad74c56ac5140ae94693157 100644 --- a/exercises/exercise-coupling-ff-pm/turbulence/main.cc +++ b/exercises/exercise-coupling-ff-pm/turbulence/main.cc @@ -49,28 +49,7 @@ #include <dumux/multidomain/boundary/stokesdarcy/couplingmanager.hh> -#include "porousmediumsubproblem.hh" -#include "freeflowsubproblem.hh" - -namespace Dumux { -namespace Properties { - -template<class TypeTag> -struct CouplingManager<TypeTag, TTag::StokesZeroEq> -{ - using Traits = StaggeredMultiDomainTraits<TypeTag, TypeTag, Properties::TTag::DarcyTwoPTwoCNI>; - using type = Dumux::StokesDarcyCouplingManager<Traits>; -}; - -template<class TypeTag> -struct CouplingManager<TypeTag, TTag::DarcyTwoPTwoCNI> -{ - using Traits = StaggeredMultiDomainTraits<Properties::TTag::StokesZeroEq, Properties::TTag::StokesZeroEq, TypeTag>; - using type = Dumux::StokesDarcyCouplingManager<Traits>; -}; - -} // end namespace Properties -} // end namespace Dumux +#include "properties.hh" int main(int argc, char** argv) try { diff --git a/exercises/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh b/exercises/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh index 57ff552c5661fd5ac47fbaf8b6af5efd0c70d937..376c31713ced2c3a6849b062010ac3fe5718ae22 100644 --- a/exercises/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh +++ b/exercises/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh @@ -24,59 +24,10 @@ #ifndef DUMUX_DARCY2P2C_SUBPROBLEM_HH #define DUMUX_DARCY2P2C_SUBPROBLEM_HH -#include <dune/grid/yaspgrid.hh> - -#include <dumux/discretization/cctpfa.hh> - -#include <dumux/porousmediumflow/2p2c/model.hh> #include <dumux/porousmediumflow/problem.hh> +#include <dumux/common/properties.hh> -#include <dumux/material/fluidsystems/h2oair.hh> - -#include "../2pspatialparams.hh" - -namespace Dumux -{ -template <class TypeTag> -class PorousMediumSubProblem; - -namespace Properties -{ -// Create new type tags -namespace TTag { -struct DarcyTwoPTwoCNI { using InheritsFrom = std::tuple<TwoPTwoCNI, CCTpfaModel>; }; -} // end namespace TTag - -// Set the problem property -template<class TypeTag> -struct Problem<TypeTag, TTag::DarcyTwoPTwoCNI> { using type = Dumux::PorousMediumSubProblem<TypeTag>; }; - -// the fluid system -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::DarcyTwoPTwoCNI> { using type = FluidSystems::H2OAir<GetPropType<TypeTag, Properties::Scalar>>; }; - -//! Set the default formulation to pw-Sn: This can be over written in the problem. -template<class TypeTag> -struct Formulation<TypeTag, TTag::DarcyTwoPTwoCNI> -{ static constexpr auto value = TwoPFormulation::p1s0; }; - -// The gas component balance (air) is replaced by the total mass balance -template<class TypeTag> -struct ReplaceCompEqIdx<TypeTag, TTag::DarcyTwoPTwoCNI> { static constexpr int value = 3; }; - -// Set the grid type -template<class TypeTag> -struct Grid<TypeTag, TTag::DarcyTwoPTwoCNI> { using type = Dune::YaspGrid<2, Dune::TensorProductCoordinates<GetPropType<TypeTag, Properties::Scalar>, 2> >; }; - -template<class TypeTag> -struct UseMoles<TypeTag, TTag::DarcyTwoPTwoCNI> { static constexpr bool value = true; }; - -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::DarcyTwoPTwoCNI> { - using type = TwoPSpatialParams<GetPropType<TypeTag, GridGeometry>, GetPropType<TypeTag, Scalar>>; -}; - -} // end namespace Properties +namespace Dumux { /*! * \brief The porous medium sub problem @@ -335,6 +286,7 @@ private: std::shared_ptr<CouplingManager> couplingManager_; DiffusionCoefficientAveragingType diffCoeffAvgType_; }; -} //end namespace + +} //end namespace dUMUX #endif //DUMUX_DARCY2P2C_SUBPROBLEM_HH diff --git a/exercises/exercise-coupling-ff-pm/turbulence/properties.hh b/exercises/exercise-coupling-ff-pm/turbulence/properties.hh new file mode 100644 index 0000000000000000000000000000000000000000..d1ea847b09bce58cc613fa8bd9f3ec1f542c7ffa --- /dev/null +++ b/exercises/exercise-coupling-ff-pm/turbulence/properties.hh @@ -0,0 +1,126 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + + * \brief The coupled exercise properties file or the turbulent case. + */ +#ifndef DUMUX_EXERCISE_COUPLED_TURBULENCE_PROPERTIES_HH +#define DUMUX_EXERCISE_COUPLED_TURBULENCE_PROPERTIES_HH + +// Both domain +#include <dune/grid/yaspgrid.hh> + +#include <dumux/material/fluidsystems/h2oair.hh> +#include <dumux/material/fluidsystems/1padapter.hh> + +// Porous medium flow domain +#include <dumux/porousmediumflow/2p2c/model.hh> +#include <dumux/discretization/cctpfa.hh> + +#include"porousmediumsubproblem.hh" +#include "../2pspatialparams.hh" + +// Free-flow domain +#include <dumux/discretization/staggered/freeflow/properties.hh> +// TODO: dumux-course-task 3.A +// Include headers for compositional zero equation turbulence model here. +#include <dumux/freeflow/compositional/navierstokesncmodel.hh> + +#include"freeflowsubproblem.hh" + +namespace Dumux::Properties { + +// Create new type tags +namespace TTag { +struct DarcyTwoPTwoCNI { using InheritsFrom = std::tuple<TwoPTwoCNI, CCTpfaModel>; }; +// TODO: dumux-course-task 3.A +// Change the entry in the `StokesZeroEq` definition accordingly. +struct StokesZeroEq { using InheritsFrom = std::tuple<NavierStokesNCNI, StaggeredFreeFlowModel>; }; +} // end namespace TTag + +// Set the coupling manager +template<class TypeTag> +struct CouplingManager<TypeTag, TTag::StokesZeroEq> +{ + using Traits = StaggeredMultiDomainTraits<TypeTag, TypeTag, Properties::TTag::DarcyTwoPTwoCNI>; + using type = Dumux::StokesDarcyCouplingManager<Traits>; +}; +template<class TypeTag> +struct CouplingManager<TypeTag, TTag::DarcyTwoPTwoCNI> +{ + using Traits = StaggeredMultiDomainTraits<Properties::TTag::StokesZeroEq, Properties::TTag::StokesZeroEq, TypeTag>; + using type = Dumux::StokesDarcyCouplingManager<Traits>; +}; + +// Set the problem property +template<class TypeTag> +struct Problem<TypeTag, TTag::DarcyTwoPTwoCNI> { using type = Dumux::PorousMediumSubProblem<TypeTag>; }; +template<class TypeTag> +struct Problem<TypeTag, TTag::StokesZeroEq> { using type = Dumux::FreeFlowSubProblem<TypeTag> ; }; + +// Set the grid type +template<class TypeTag> +struct Grid<TypeTag, TTag::DarcyTwoPTwoCNI> { using type = Dune::YaspGrid<2, Dune::TensorProductCoordinates<GetPropType<TypeTag, Properties::Scalar>, 2> >; }; +template<class TypeTag> +struct Grid<TypeTag, TTag::StokesZeroEq> { using type = Dune::YaspGrid<2, Dune::TensorProductCoordinates<GetPropType<TypeTag, Properties::Scalar>, 2> >; }; + +// the fluid system +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::DarcyTwoPTwoCNI> { using type = FluidSystems::H2OAir<GetPropType<TypeTag, Properties::Scalar>>; }; +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::StokesZeroEq> +{ + using H2OAir = FluidSystems::H2OAir<GetPropType<TypeTag, Properties::Scalar>>; + static constexpr auto phaseIdx = H2OAir::gasPhaseIdx; // simulate the air phase + using type = FluidSystems::OnePAdapter<H2OAir, phaseIdx>; +}; + +// Use formulation based on mole fractions +template<class TypeTag> +struct UseMoles<TypeTag, TTag::DarcyTwoPTwoCNI> { static constexpr bool value = true; }; +template<class TypeTag> +struct UseMoles<TypeTag, TTag::StokesZeroEq> { static constexpr bool value = true; }; + +// The gas component balance (air) is replaced by the total mass balance +template<class TypeTag> +struct ReplaceCompEqIdx<TypeTag, TTag::DarcyTwoPTwoCNI> { static constexpr int value = 3; }; +template<class TypeTag> +struct ReplaceCompEqIdx<TypeTag, TTag::StokesZeroEq> { static constexpr int value = 3; }; + + +//! Set the default formulation to pw-Sn: This can be over written in the problem. +template<class TypeTag> +struct Formulation<TypeTag, TTag::DarcyTwoPTwoCNI> +{ static constexpr auto value = TwoPFormulation::p1s0; }; + +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::DarcyTwoPTwoCNI> +{ using type = TwoPSpatialParams<GetPropType<TypeTag, GridGeometry>, GetPropType<TypeTag, Scalar>>; }; + +template<class TypeTag> +struct EnableGridGeometryCache<TypeTag, TTag::StokesZeroEq> { static constexpr bool value = true; }; +template<class TypeTag> +struct EnableGridFluxVariablesCache<TypeTag, TTag::StokesZeroEq> { static constexpr bool value = true; }; +template<class TypeTag> +struct EnableGridVolumeVariablesCache<TypeTag, TTag::StokesZeroEq> { static constexpr bool value = true; }; + +} // end namespace Dumux::Properties + +#endif // DUMUX_EXERCISE_COUPLED_TURBULENCE_PROPERTIES_HH