Commit a63948b5 authored by Thomas Fetzer's avatar Thomas Fetzer
Browse files

[test/multidomain]

- added test problems for coupling turbulent free flow using zero eq.
turbulence models with flow in porous media
- documentation will follow

[CHANGELOG]
updated changelog to latest commits

reviewed by gruenich


git-svn-id: svn://svn.iws.uni-stuttgart.de/DUMUX/dumux/trunk@14886 2fb0f335-1f38-0410-981e-8018bf24f1b0
parent 719ee6fb
Differences Between DuMuX 2.7 and DuMuX 2.8
===================================================
* IMPORTANT NOTES:
* IMPROVEMENTS and ENHANCEMENTS:
- The zero equation turbulence models (zeroeq) have been added as new models
to the freeflow folder.
- Tests for coupling a turbulent free flow using zeroeq turbulence models
with flow in a porous medium have been added.
* IMMEDIATE INTERFACE CHANGES not allowing/requiring a deprecation period:
* Deprecated PROPERTY and PARAMETER NAMES, to be removed after 2.7: BEWARE: The
compiler will not print any warning if a deprecated property or parameter name
is used. However, a run-time warning should appear in the summary lines after
the corresponding run.
* Deprecated CLASSES/FILES, to be removed after 2.7:
* Deprecated MEMBER FUNCTIONS, to be removed after 2.7:
* Deprecated protected MEMBER VARIABLES, to be removed after 2.7: BEWARE: Older
compilers will not print any warning if a deprecated protected member variable
is used.
* DELETED classes/files, property names, constants/enums,
member functions, which have been deprecated in DuMuX 2.6:
Everything listed as deprecated below has been removed.
Differences Between DuMuX 2.6 and DuMuX 2.7
===================================================
......
......@@ -137,6 +137,8 @@ AC_CONFIG_FILES([dumux.pc
test/multidomain/Makefile
test/multidomain/2cstokes2p2c/Makefile
test/multidomain/2cnistokes2p2cni/Makefile
test/multidomain/2czeroeq2p2c/Makefile
test/multidomain/2cnizeroeq2p2cni/Makefile
test/references/Makefile
tutorial/Makefile
])
......
// -*- 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 problem class for the coupling of a non-isothermal two-component ZeroEq
* and a non-isothermal two-phase two-component Darcy model.
*/
#ifndef DUMUX_TWOCNIZEROEQTWOPTWOCNIPROBLEM_HH
#define DUMUX_TWOCNIZEROEQTWOPTWOCNIPROBLEM_HH
#include <dune/grid/multidomaingrid.hh>
#include <dune/grid/common/gridinfo.hh>
#include <dune/grid/io/file/dgfparser.hh>
#include <dumux/material/fluidsystems/h2oairfluidsystem.hh>
#include <dumux/multidomain/common/multidomainproblem.hh>
#include <dumux/multidomain/2cnistokes2p2cni/2cnistokes2p2cnilocaloperator.hh>
#include <dumux/multidomain/2cnistokes2p2cni/2cnistokes2p2cnipropertydefaults.hh>
#include "2cnizeroeq2p2cnispatialparameters.hh"
#include "zeroeq2cnisubproblem.hh"
#include "2p2cnisubproblem.hh"
namespace Dumux
{
template <class TypeTag>
class TwoCNIZeroEqTwoPTwoCNIProblem;
namespace Properties
{
NEW_TYPE_TAG(TwoCNIZeroEqTwoPTwoCNIProblem, INHERITS_FROM(TwoCNIStokesTwoPTwoCNI));
// Set the grid type
#if HAVE_UG
SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, Grid, Dune::UGGrid<2>);
#elif HAVE_ALUGRID
SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, Grid, Dune::ALUGrid<2, 2, Dune::cube, Dune::nonconforming>);
#else
#error Requires UG or ALUGrid.
#endif
// Set the global problem
SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, Problem, TwoCNIZeroEqTwoPTwoCNIProblem<TypeTag>);
// Set the local coupling operator
SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, MultiDomainCouplingLocalOperator,
Dumux::TwoCNIStokesTwoPTwoCNILocalOperator<TypeTag>);
// Set the two sub-problems of the global problem
SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, SubDomain1TypeTag, TTAG(ZeroEq2cniSubProblem));
SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, SubDomain2TypeTag, TTAG(TwoPTwoCNISubProblem));
// Set the global problem in the context of the two sub-problems
SET_TYPE_PROP(ZeroEq2cniSubProblem, MultiDomainTypeTag, TTAG(TwoCNIZeroEqTwoPTwoCNIProblem));
SET_TYPE_PROP(TwoPTwoCNISubProblem, MultiDomainTypeTag, TTAG(TwoCNIZeroEqTwoPTwoCNIProblem));
// Set the other sub-problem for each of the two sub-problems
SET_TYPE_PROP(ZeroEq2cniSubProblem, OtherSubDomainTypeTag, TTAG(TwoPTwoCNISubProblem));
SET_TYPE_PROP(TwoPTwoCNISubProblem, OtherSubDomainTypeTag, TTAG(ZeroEq2cniSubProblem));
// Set the same spatial parameters for both sub-problems
SET_TYPE_PROP(ZeroEq2cniSubProblem, SpatialParams, Dumux::TwoCNIZeroEqTwoPTwoCNISpatialParams<TypeTag>);
SET_TYPE_PROP(TwoPTwoCNISubProblem, SpatialParams, Dumux::TwoCNIZeroEqTwoPTwoCNISpatialParams<TypeTag>);
// Set the fluid system
SET_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, FluidSystem)
{
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
typedef Dumux::FluidSystems::H2OAir<Scalar,
Dumux::H2O<Scalar>,
/*useComplexrelations=*/true> type;
};
// If SuperLU is not available, the UMFPack solver is used:
#ifdef HAVE_SUPERLU
SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, LinearSolver, SuperLUBackend<TypeTag>);
#else
SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, LinearSolver, UMFPackBackend<TypeTag>);
#endif
}
/*!
* \brief The problem class for the coupling of a non-isothermal two-component ZeroEq (zeroeq2cni)
* and a non-isothermal two-phase two-component Darcy model (2p2cni).
*
* The problem class for the coupling of a non-isothermal two-component ZeroEq (zeroeq2cni)
* and a non-isothermal two-phase two-component Darcy model (2p2cni).
* It uses the 2p2cniCoupling model and the ZeroEq2cnicoupling model and provides
* the problem specifications for common parameters of the two submodels.
* The initial and boundary conditions of the submodels are specified in the two subproblems,
* 2p2cnisubproblem.hh and zeroeq2cnisubproblem.hh, which are accessible via the coupled problem.
*/
template <class TypeTag = TTAG(TwoCNIZeroEqTwoPTwoCNIProblem) >
class TwoCNIZeroEqTwoPTwoCNIProblem : public MultiDomainProblem<TypeTag>
{
typedef MultiDomainProblem<TypeTag> ParentType;
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager;
typedef typename GET_PROP_TYPE(TypeTag, MultiDomainGrid) MDGrid;
typedef typename MDGrid::LeafGridView MDGridView;
enum { dim = MDGridView::dimension };
typedef Dune::FieldVector<Scalar, dim> GlobalPosition;
typedef typename MDGrid::template Codim<0>::LeafIterator ElementIterator;
typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
public:
/*!
* \brief docme
*
* \param hostGrid docme
* \param timeManager The TimeManager which is used by the simulation
*
*/
TwoCNIZeroEqTwoPTwoCNIProblem(MDGrid &mdGrid,
TimeManager &timeManager)
: ParentType(mdGrid, timeManager)
{
dtInit_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, TimeManager, DtInitial);
episodeLength_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, TimeManager, EpisodeLength);
// define location of the interface
interfacePos_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, Grid, InterfacePos);
noDarcyX1_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, Grid, NoDarcyX1);
noDarcyX2_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, Grid, NoDarcyX2);
// define output options
freqRestart_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, int, Output, FreqRestart);
freqOutput_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, int, Output, FreqOutput);
zeroeq2cni_ = this->sdID1();
twoPtwoCNI_ = this->sdID2();
initializeGrid();
// initialize the tables of the fluid system
FluidSystem::init();
// FluidSystem::init(/*tempMin=*/273.15, /*tempMax=*/373.15, /*numTemp=*/200,
// /*pMin=*/1e4, /*pMax=*/2e5, /*numP=*/200);
this->timeManager().startNextEpisode(episodeLength_);
}
/*!
* \brief Initialization of the grids
*
* This function splits the multidomain grid in the two
* individual subdomain grids and takes care of parallelization.
*/
void initializeGrid()
{
MDGrid& mdGrid = this->mdGrid();
mdGrid.startSubDomainMarking();
// subdivide grid in two subdomains
ElementIterator eendit = mdGrid.template leafend<0>();
for (ElementIterator elementIt = mdGrid.template leafbegin<0>();
elementIt != eendit; ++elementIt)
{
// this is required for parallelization checks if element is within a partition
if (elementIt->partitionType() != Dune::InteriorEntity)
continue;
GlobalPosition globalPos = elementIt->geometry().center();
if (globalPos[1] > interfacePos_)
mdGrid.addToSubDomain(zeroeq2cni_,*elementIt);
else
if(globalPos[0] > noDarcyX1_ && globalPos[0] < noDarcyX2_)
mdGrid.addToSubDomain(twoPtwoCNI_,*elementIt);
}
mdGrid.preUpdateSubDomains();
mdGrid.updateSubDomains();
mdGrid.postUpdateSubDomains();
gridinfo(this->sdGrid1());
gridinfo(this->sdGrid2());
}
//! \copydoc Dumux::CoupledProblem::episodeEnd()
void episodeEnd()
{ this->timeManager().startNextEpisode(episodeLength_); }
//! \copydoc Dumux::CoupledProblem::shouldWriteRestartFile()
bool shouldWriteRestartFile() const
{
return ( ((this->timeManager().timeStepIndex() > 0)
&& (this->timeManager().timeStepIndex() % freqRestart_ == 0))
// also write a restart file at the end of each episode
|| this->timeManager().episodeWillBeOver());
}
//! \copydoc Dumux::CoupledProblem::shouldWriteOutput()
bool shouldWriteOutput() const
{
return ( ((this->timeManager().timeStepIndex() > 0)
&& (this->timeManager().timeStepIndex() % freqOutput_ == 0))
// also write a restart file at the end of each episode
|| this->timeManager().episodeWillBeOver());
}
private:
typename MDGrid::SubDomainType zeroeq2cni_;
typename MDGrid::SubDomainType twoPtwoCNI_;
unsigned freqRestart_;
unsigned freqOutput_;
Scalar interfacePos_;
Scalar noDarcyX1_;
Scalar noDarcyX2_;
Scalar episodeLength_;
Scalar dtInit_;
};
} //end namespace
#endif // DUMUX_TWOCNIZEROEQTWOPTWOCNIPROBLEM_HH
// -*- 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 Spatial parameters for the
* coupling of a non-isothermal two-component ZeroEq
* and a non-isothermal two-phase two-component Darcy model.
*/
#ifndef DUMUX_TWOCNIZEROEQTWOPTWOCNISPATIALPARAMS_HH
#define DUMUX_TWOCNIZEROEQTWOPTWOCNISPATIALPARAMS_HH
#include <dune/grid/io/file/vtk/common.hh>
#include <dumux/material/spatialparams/implicitspatialparams.hh>
#include <dumux/material/fluidmatrixinteractions/2p/linearmaterial.hh>
#include <dumux/material/fluidmatrixinteractions/2p/regularizedvangenuchten.hh>
#include <dumux/material/fluidmatrixinteractions/2p/regularizedbrookscorey.hh>
#include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh>
namespace Dumux
{
//forward declaration
template<class TypeTag>
class TwoCNIZeroEqTwoPTwoCNISpatialParams;
namespace Properties
{
// The spatial parameters TypeTag
NEW_TYPE_TAG(TwoCNIZeroEqTwoPTwoCNISpatialParams);
// Set the spatial parameters
SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNISpatialParams, SpatialParams,
TwoCNIZeroEqTwoPTwoCNISpatialParams<TypeTag>);
// Set the material law parameterized by absolute saturations
SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNISpatialParams,
MaterialLaw,
EffToAbsLaw<RegularizedVanGenuchten<typename GET_PROP_TYPE(TypeTag, Scalar)>>);
// EffToAbsLaw<RegularizedBrooksCorey<typename GET_PROP_TYPE(TypeTag, Scalar)> >);
}
/*!
* \ingroup TwoPTwoCNIModel
* \ingroup ZeroEqTwoCNIModel
* \ingroup ImplicitTestProblems
* \brief Definition of the spatial parameters for
* the coupling of a non-isothermal two-component ZeroEq
* and a non-isothermal two-phase two-component Darcy model.
*/
template<class TypeTag>
class TwoCNIZeroEqTwoPTwoCNISpatialParams : public ImplicitSpatialParams<TypeTag>
{
typedef ImplicitSpatialParams<TypeTag> ParentType;
typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
typedef typename GridView::ctype CoordScalar;
enum {
dim=GridView::dimension,
dimWorld=GridView::dimensionworld
};
typedef typename GridView::template Codim<0>::Entity Element;
typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry;
typedef typename GET_PROP_TYPE(TypeTag, FluxVariables) FluxVariables;
typedef typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables) ElementVolumeVariables;
public:
typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw;
typedef typename MaterialLaw::Params MaterialLawParams;
/*!
* \brief Spatial parameters for the
* coupling of a non-isothermal two-component ZeroEq
* and a non-isothermal two-phase two-component Darcy model.
*
* \param gridView The GridView which is used by the problem
*/
TwoCNIZeroEqTwoPTwoCNISpatialParams(const GridView& gridView)
: ParentType(gridView)
{
permeability_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, SpatialParams, Permeability);
porosity_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, SpatialParams, Porosity);
thermalConductivitySolid_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, SpatialParams, ThermalConductivitySolid);
spatialParams_.setSwr(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, SpatialParams, Swr));
spatialParams_.setSnr(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, SpatialParams, Snr));
spatialParams_.setVgAlpha(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, SpatialParams, VgAlpha));
spatialParams_.setVgn(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, SpatialParams, VgN));
}
/*!
* \brief Returns the intrinsic permeability tensor \f$[m^2]\f$
*
* \param element The finite element
* \param fvGeometry The finite volume geometry of the element
* \param scvIdx The local index of the sub-control volume
*/
Scalar intrinsicPermeability(const Element &element,
const FVElementGeometry &fvGeometry,
const int scvIdx) const
{
return permeability_;
}
/*!
* \brief Returns the porosity \f$[-]\f$
*
* \param element The finite element
* \param fvGeometry The finite volume geometry of the element
* \param scvIdx The local index of the sub-control volume
*/
Scalar porosity(const Element &element,
const FVElementGeometry &fvGeometry,
const int scvIdx) const
{
return porosity_;
}
/*!
* \brief Returns the parameter object for the material law
*
* \param element The finite element
* \param fvGeometry The finite volume geometry of the element
* \param scvIdx The local index of the sub-control volume
*/
const MaterialLawParams& materialLawParams(const Element &element,
const FVElementGeometry &fvGeometry,
const int scvIdx) const
{
return spatialParams_;
}
/*!
* \brief Returns the heat capacity \f$[J / (kg K)]\f$ of the rock matrix.
*
* This is only required for non-isothermal models.
*
* \param element The finite element
* \param fvGeometry The finite volume geometry
* \param scvIdx The local index of the sub-control volume
*/
Scalar solidHeatCapacity(const Element &element,
const FVElementGeometry &fvGeometry,
const int scvIdx) const
{
return 790.0;
}
/*!
* \brief Returns the density of the solid material (not the bulk density) \f$[kg/m^3]\f$
*
* \param element The finite element
* \param fvGeometry The finite volume geometry of the element
* \param scvIdx The local index of the sub-control volume
*/
Scalar solidDensity(const Element &element,
const FVElementGeometry &fvGeometry,
const int scvIdx) const
{
return 2650.0;
}
/*!
* \brief Returns the thermal conductivity \f$[W/(m*K)]\f$ of the solid
*
* This is only required for non-isothermal models.
*
* \param element The finite element
* \param fvGeometry The finite volume geometry of the element
* \param scvIdx The local index of the sub-control volume
*/
Scalar solidThermalConductivity(const Element &element,
const FVElementGeometry &fvGeometry,
const int scvIdx) const
{
return thermalConductivitySolid_;
}
private:
Scalar permeability_;
Scalar porosity_;
Scalar thermalConductivitySolid_;
MaterialLawParams spatialParams_;
};
} // end namespace
#endif // DUMUX_TWOCNIZEROEQTWOPTWOCNISPATIALPARAMS_HH
// -*- 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 Non-isothermal two-phase two-component porous-medium subproblem
* with coupling at the top boundary.
*/
#ifndef DUMUX_2P2CNISUB_PROBLEM_HH
#define DUMUX_2P2CNISUB_PROBLEM_HH
#include <dumux/implicit/2p2c/2p2cindices.hh>
#include <dumux/implicit/common/implicitporousmediaproblem.hh>
#include <dumux/material/fluidmatrixinteractions/2p/thermalconductivityjohansen.hh>
#include <dumux/material/fluidmatrixinteractions/2p/thermalconductivitysomerton.hh>
#include <dumux/multidomain/common/subdomainpropertydefaults.hh>
#include <dumux/multidomain/common/multidomainlocaloperator.hh>
#include <dumux/multidomain/couplinglocalresiduals/2p2cnicouplinglocalresidual.hh>
#include "2cnizeroeq2p2cnispatialparameters.hh"
namespace Dumux
{
template <class TypeTag>
class TwoPTwoCNISubProblem;
namespace Properties
{
NEW_TYPE_TAG(TwoPTwoCNISubProblem,
INHERITS_FROM(BoxTwoPTwoCNI, SubDomain, TwoCNIZeroEqTwoPTwoCNISpatialParams));
// Set the problem property
SET_TYPE_PROP(TwoPTwoCNISubProblem, Problem, TwoPTwoCNISubProblem<TTAG(TwoPTwoCNISubProblem)>);
// Use the 2p2cni local jacobian operator for the 2p2cniCoupling model
SET_TYPE_PROP(TwoPTwoCNISubProblem, LocalResidual, TwoPTwoCNICouplingLocalResidual<TypeTag>);
// Choose pn and Sw as primary variables
SET_INT_PROP(TwoPTwoCNISubProblem, Formulation, TwoPTwoCFormulation::pnsw);
// The gas component balance (air) is replaced by the total mass balance
SET_PROP(TwoPTwoCNISubProblem, ReplaceCompEqIdx)
{
typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices;
static const int value = Indices::contiNEqIdx;
};
// Use the fluid system from the coupled problem
SET_TYPE_PROP(TwoPTwoCNISubProblem,
FluidSystem,
typename GET_PROP_TYPE(typename GET_PROP_TYPE(TypeTag, MultiDomainTypeTag), FluidSystem));
// Johanson is used as model to compute the effective thermal heat conductivity
SET_TYPE_PROP(TwoPTwoCNISubProblem, ThermalConductivityModel,
ThermalConductivityJohansen<typename GET_PROP_TYPE(TypeTag, Scalar)>);
// Use formulation based on mass fractions
SET_BOOL_PROP(TwoPTwoCNISubProblem, UseMoles, false);
// Enable/disable velocity output
SET_BOOL_PROP(TwoPTwoCNISubProblem, VtkAddVelocity, true);
// Enable gravity
SET_BOOL_PROP(TwoPTwoCNISubProblem, ProblemEnableGravity, true);
}
/*!
* \ingroup ImplicitTestProblems
* \ingroup MultidomainProblems
* \brief Non-isothermal two-phase two-component porous-medium subproblem
* with coupling at the top boundary.
*
* \todo update description
*
* This sub problem uses the \ref TwoPTwoCModel. It is part of the 2p2cni model and
* is combined with the zeroeq2cnisubproblem for the free flow domain.
*/
template <class TypeTag = TTAG(TwoPTwoCNISubProblem) >
class TwoPTwoCNISubProblem : public ImplicitPorousMediaProblem<TypeTag>
{
typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
typedef typename GridView::Grid Grid;