26#ifndef DUMUX_1P2C_TEST_PROBLEM_HH
27#define DUMUX_1P2C_TEST_PROBLEM_HH
30#include <dune/grid/uggrid.hh>
32#include <dune/grid/yaspgrid.hh>
50template <
class TypeTag>
65template<
class TypeTag>
66struct Grid<TypeTag,
TTag::OnePTwoCTest> {
using type = Dune::UGGrid<2>; };
68template<
class TypeTag>
69struct Grid<TypeTag,
TTag::OnePTwoCTest> {
using type = Dune::YaspGrid<2>; };
73template<
class TypeTag>
77template<
class TypeTag>
86template<
class TypeTag>
95template<
class TypeTag>
124template <
class TypeTag>
135 using Element =
typename GridView::template Codim<0>::Entity;
139 using SubControlVolumeFace =
typename FVElementGeometry::SubControlVolumeFace;
142 using ElementVolumeVariables =
typename GridVariables::GridVolumeVariables::LocalView;
143 using ElementFluxVariablesCache =
typename GridVariables::GridFluxVariablesCache::LocalView;
151 pressureIdx = Indices::pressureIdx,
154 H2OIdx = FluidSystem::compIdx(FluidSystem::MultiPhaseFluidSystem::H2OIdx),
155 N2Idx = FluidSystem::compIdx(FluidSystem::MultiPhaseFluidSystem::N2Idx),
158 contiH2OEqIdx = Indices::conti0EqIdx + H2OIdx,
159 contiN2EqIdx = Indices::conti0EqIdx + N2Idx
166 static const int dimWorld = GridView::dimensionworld;
167 using GlobalPosition =
typename SubControlVolumeFace::GlobalPosition;
171 : ParentType(
gridGeometry), useNitscheTypeBc_(
getParam<bool>(
"Problem.UseNitscheTypeBc", false))
178 std::cout<<
"problem uses mole fractions"<<std::endl;
180 std::cout<<
"problem uses mass fractions"<<std::endl;
194 {
return 273.15 + 20; }
211 BoundaryTypes values;
213 if(globalPos[0] < eps_)
214 values.setAllDirichlet();
216 values.setAllNeumann();
228 PrimaryVariables values = initial_(globalPos);
231 if (globalPos[0] < eps_ )
233 values[N2Idx] = 2.0e-5;
257 template<
bool useBox = isBox, std::enable_if_t<useBox,
int> = 0>
259 const FVElementGeometry& fvGeometry,
260 const ElementVolumeVariables& elemVolVars,
261 const ElementFluxVariablesCache& elemFluxVarsCache,
262 const SubControlVolumeFace& scvf)
const
265 NumEqVector values(0.0);
267 const auto& ipGlobal = scvf.ipGlobal();
268 if (ipGlobal[0] < xMax - eps_)
272 static const Scalar dirichletPressure = 1e5;
273 const auto& volVars = elemVolVars[scvf.insideScvIdx()];
274 const auto& fluxVarsCache = elemFluxVarsCache[scvf];
277 if (useNitscheTypeBc_)
279 values[contiH2OEqIdx] = (volVars.pressure() - dirichletPressure)*1e7;
280 values[contiN2EqIdx] = values[contiH2OEqIdx] * (useMoles ? volVars.moleFraction(0, N2Idx)
281 : volVars.massFraction(0, N2Idx));
286 GlobalPosition gradP(0.0);
287 for (
const auto& scv : scvs(fvGeometry))
289 const auto xIp = scv.dofPosition()[0];
290 auto tmp = fluxVarsCache.gradN(scv.localDofIndex());
291 tmp *= xIp > xMax - eps_ ? dirichletPressure
292 : elemVolVars[scv].pressure();
297 auto phaseFlux =
vtmv(scvf.unitOuterNormal(), volVars.permeability(), gradP);
298 phaseFlux *= useMoles ? volVars.molarDensity() : volVars.density();
299 phaseFlux *= volVars.mobility();
302 values[contiH2OEqIdx] = phaseFlux;
304 values[contiN2EqIdx] = phaseFlux * ( useMoles ? volVars.moleFraction(0, N2Idx) : volVars.massFraction(0, N2Idx) );
313 template<
bool useBox = isBox, std::enable_if_t<!useBox,
int> = 0>
315 const FVElementGeometry& fvGeometry,
316 const ElementVolumeVariables& elemVolVars,
317 const ElementFluxVariablesCache& elemFluxVarsCache,
318 const SubControlVolumeFace& scvf)
const
321 NumEqVector values(0.0);
323 const auto& ipGlobal = scvf.ipGlobal();
324 if (ipGlobal[0] < xMax - eps_)
328 static const Scalar dirichletPressure = 1e5;
329 const auto& volVars = elemVolVars[scvf.insideScvIdx()];
331 auto d = ipGlobal - element.geometry().center();
334 auto upwindTerm = useMoles ? volVars.molarDensity() : volVars.density();
335 upwindTerm *= volVars.mobility();
337 const auto tij =
vtmv(scvf.unitOuterNormal(), volVars.permeability(), d);
338 const auto phaseFlux = -1.0*upwindTerm*tij*(dirichletPressure - volVars.pressure());
341 values[contiH2OEqIdx] = phaseFlux;
343 values[contiN2EqIdx] = phaseFlux * (useMoles ? volVars.moleFraction(0, N2Idx) : volVars.massFraction(0, N2Idx));
367 {
return NumEqVector(0.0); }
378 {
return initial_(globalPos); }
384 PrimaryVariables initial_(
const GlobalPosition &globalPos)
const
386 PrimaryVariables priVars;
387 priVars[pressureIdx] = 2e5 - 1e5*globalPos[0];
388 priVars[N2Idx] = 0.0;
391 static constexpr Scalar eps_ = 1e-6;
392 bool useNitscheTypeBc_;
Define some often used mathematical functions.
Defines a type tag and some properties for models using the box scheme.
Properties for all models using cell-centered finite volume scheme with mpfa.
Properties for all models using cell-centered finite volume scheme with TPFA.
free functions for the evaluation of primary variable gradients inside elements.
free functions for the evaluation of primary variables inside elements.
An adapter for multi-phase fluid systems to be used with (compositional) one-phase models.
A two-phase fluid system with two components water Nitrogen for non-equilibrium models.
@ box
Definition method.hh:38
Dune::DenseMatrix< MAT >::value_type vtmv(const Dune::DenseVector< V1 > &v1, const Dune::DenseMatrix< MAT > &M, const Dune::DenseVector< V2 > &v2)
Evaluates the scalar product of a vector v2, projected by a matrix M, with a vector v1.
Definition math.hh:840
T getParam(Args &&... args)
A free function to get a parameter from the parameter tree singleton.
Definition parameters.hh:428
make the local view function available whenever we use the grid geometry
Definition adapt.hh:29
constexpr auto getPropValue()
get the value data member of a property
Definition propertysystem.hh:153
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(....
Definition propertysystem.hh:149
Definition common/properties.hh:47
Type tag for numeric models.
Definition grid.hh:35
const GridGeometry & gridGeometry() const
The finite volume grid geometry.
Definition common/fvproblem.hh:588
The DUNE grid type.
Definition common/properties.hh:57
UndefinedProperty type
Definition common/properties.hh:57
Property to specify the type of a problem which has to be solved.
Definition common/properties.hh:69
Property whether to use moles or kg as amount unit for balance equations.
Definition common/properties.hh:102
The type of the spatial parameters object.
Definition common/properties.hh:221
The type of the fluid system to use.
Definition common/properties.hh:223
An adapter for multi-phase fluid systems to be used with (compositional) one-phase models.
Definition 1padapter.hh:46
Policy for the H2O-N2 fluid system.
Definition h2on2.hh:52
A two-phase fluid system with two components water Nitrogen for non-equilibrium models.
Definition h2on2.hh:69
PorousMediumFlowProblem(std::shared_ptr< const GridGeometry > gridGeometry, std::shared_ptr< SpatialParams > spatialParams, const std::string ¶mGroup="")
Constructor, passing the spatial parameters.
Definition dumux/porousmediumflow/problem.hh:67
Definition of a problem for the 1pnc problem: Component transport of nitrogen dissolved in the water ...
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:126
NumEqVector neumann(const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const ElementFluxVariablesCache &elemFluxVarsCache, const SubControlVolumeFace &scvf) const
Evaluates the boundary conditions for a neumann boundary segment (implementation for the box scheme).
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:258
PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const
Evaluates the initial value for a control volume.
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:377
PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const
Evaluates the boundary conditions for a Dirichlet boundary segment.
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:226
Scalar temperature() const
Returns the temperature within the domain [K].
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:193
BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const
Specifies which kind of boundary condition should be used for which equation on a given boundary segm...
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:209
NumEqVector sourceAtPos(const GlobalPosition &globalPos) const
Evaluates the source term for all phases within a given sub-control volume.
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:366
OnePTwoCTestProblem(std::shared_ptr< const GridGeometry > gridGeometry)
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:170
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:57
std::tuple< OnePNC > InheritsFrom
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:57
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:58
std::tuple< OnePTwoCTest, BoxModel > InheritsFrom
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:58
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:59
std::tuple< OnePTwoCTest, CCTpfaModel > InheritsFrom
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:59
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:60
std::tuple< OnePTwoCTest, CCMpfaModel > InheritsFrom
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:60
Dune::YaspGrid< 2 > type
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:69
OnePTwoCTestProblem< TypeTag > type
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:74
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:80
FluidSystems::OnePAdapter< H2ON2, H2ON2::liquidPhaseIdx > type
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:82
FluidSystems::H2ON2< Scalar, FluidSystems::H2ON2DefaultPolicy< true > > H2ON2
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:81
OnePNCTestSpatialParams< GridGeometry, Scalar > type
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:91
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:90
GetPropType< TypeTag, Properties::GridGeometry > GridGeometry
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:89
static constexpr bool value
Definition test/porousmediumflow/1pnc/implicit/1p2c/isothermal/problem.hh:96
Definition of the spatial parameters for the 1pnc test problems.
Definition porousmediumflow/1pnc/implicit/1p2c/spatialparams.hh:41
Adaption of the fully implicit model to the one-phase n-component flow model.
Base class for all porous media problems.
Definition of the spatial parameters for the 1pnc problems.