3.1-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
test/porousmediumflow/mpnc/implicit/kinetic/problem.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3/*****************************************************************************
4 * See the file COPYING for full copying permissions. *
5 * *
6 * This program is free software: you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation, either version 3 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
18 *****************************************************************************/
35#ifndef DUMUX_EVAPORATION_ATMOSPHERE_PROBLEM_HH
36#define DUMUX_EVAPORATION_ATMOSPHERE_PROBLEM_HH
37
38#include <dune/grid/yaspgrid.hh>
39
42
46
49
50#include "spatialparams.hh"
51
52// material laws for interfacial area
59
60namespace Dumux {
65template <class TypeTag>
66class EvaporationAtmosphereProblem;
67
68namespace Properties {
69// Create new type tags
70namespace TTag {
71struct EvaporationAtmosphere { using InheritsFrom = std::tuple<MPNCNonequil>; };
72struct EvaporationAtmosphereBox { using InheritsFrom = std::tuple<EvaporationAtmosphere, BoxModel>; };
73} // end namespace TTag
74
75// Set the grid type
76template<class TypeTag>
77struct Grid<TypeTag, TTag::EvaporationAtmosphere> { using type = Dune::YaspGrid<2, Dune::TensorProductCoordinates<GetPropType<TypeTag, Properties::Scalar>, 2> >; };
78
79// Set the problem property
80template<class TypeTag>
81struct Problem<TypeTag, TTag::EvaporationAtmosphere> { using type = EvaporationAtmosphereProblem<TypeTag>; };
82
83// Set fluid configuration
84template<class TypeTag>
85struct FluidSystem<TypeTag, TTag::EvaporationAtmosphere>
86{
88 FluidSystems::H2ON2DefaultPolicy</*fastButSimplifiedRelations=*/true>>;
89};
90
92template<class TypeTag>
93struct PressureFormulation<TypeTag, TTag::EvaporationAtmosphere>
94{
95public:
97};
98
99// Set the type used for scalar values
100template<class TypeTag>
101struct Scalar<TypeTag, TTag::EvaporationAtmosphere> { using type = double; };
102
103// Set the fluid system
104template<class TypeTag>
105struct SolidSystem<TypeTag, TTag::EvaporationAtmosphere>
106{
110};
111
112// Set the spatial parameters
113template<class TypeTag>
114struct SpatialParams<TypeTag, TTag::EvaporationAtmosphere>
115{
119};
120} // end namespace Properties
121
129template <class TypeTag>
131{
138 using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView;
139 using ElementFluxVariablesCache = typename GetPropType<TypeTag, Properties::GridFluxVariablesCache>::LocalView;
140 using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
141 using SubControlVolume = typename FVElementGeometry::SubControlVolume;
142 using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace;
144 using Element = typename GridView::template Codim<0>::Entity;
145 using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
149 using ParameterCache = typename FluidSystem::ParameterCache;
151
153 using Indices = typename ModelTraits::Indices;
154
155 enum { dimWorld = GridView::dimensionworld };
156 enum { numPhases = ModelTraits::numFluidPhases() };
157 enum { numComponents = ModelTraits::numFluidComponents() };
158 enum { s0Idx = Indices::s0Idx };
159 enum { p0Idx = Indices::p0Idx };
160 enum { conti00EqIdx = Indices::conti0EqIdx };
161 enum { energyEq0Idx = Indices::energyEqIdx };
162 enum { liquidPhaseIdx = FluidSystem::liquidPhaseIdx };
163 enum { gasPhaseIdx = FluidSystem::gasPhaseIdx };
164 enum { wCompIdx = FluidSystem::H2OIdx };
165 enum { nCompIdx = FluidSystem::N2Idx };
166 enum { numEnergyEqFluid = ModelTraits::numEnergyEqFluid() };
167 enum { numEnergyEqSolid = ModelTraits::numEnergyEqSolid() };
168
169 static constexpr bool enableChemicalNonEquilibrium = getPropValue<TypeTag, Properties::EnableChemicalNonEquilibrium>();
171
172 // formulations
173 static constexpr auto pressureFormulation = ModelTraits::pressureFormulation();
174 static constexpr auto mostWettingFirst = MpNcPressureFormulation::mostWettingFirst;
175 static constexpr auto leastWettingFirst = MpNcPressureFormulation::leastWettingFirst;
176
177public:
178 EvaporationAtmosphereProblem(std::shared_ptr<const GridGeometry> gridGeometry)
180 {
181 percentOfEquil_ = getParam<Scalar>("BoundaryConditions.percentOfEquil");
182 nTemperature_ = getParam<Scalar>("FluidSystem.nTemperature");
183 nPressure_ = getParam<Scalar>("FluidSystem.nPressure");
184 outputName_ = getParam<std::string>("Problem.Name");
185 TInitial_ = getParam<Scalar>("InitialConditions.TInitial");
186 SwPMInitial_ = getParam<Scalar>("InitialConditions.SwPMInitial");
187 SwFFInitial_ = getParam<Scalar>("InitialConditions.SwFFInitial");
188 pnInitial_ = getParam<Scalar>("InitialConditions.pnInitial");
189 pnInjection_ = getParam<Scalar>("InitialConditions.pnInjection");
190 TInject_ = getParam<Scalar>("BoundaryConditions.TInject");
191 massFluxInjectedPhase_ = getParam<Scalar>("BoundaryConditions.massFluxInjectedPhase");
192
193 // initialize the tables of the fluid system
194 FluidSystem::init(TInitial_ - 15.0, 453.15, nTemperature_, // T_min, T_max, n_T
195 0.75*pnInitial_, 2.25*pnInitial_, nPressure_); // p_min, p_max, n_p
196 }
197
198 void setGridVariables(std::shared_ptr<GridVariables> gridVariables)
199 { gridVariables_ = gridVariables; }
200
201 const GridVariables& gridVariables() const
202 { return *gridVariables_; }
203
207 // \{
208
214 const std::string name() const
215 { return outputName_ ; }
216
217 // \}
218
222 // \{
223
230 BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const
231 {
232 BoundaryTypes bcTypes;
233 // Default: Neumann
234 bcTypes.setAllNeumann();
235
236 // Put a dirichlet somewhere: we need this for convergence
237 if(onRightBoundary_(globalPos) && globalPos[1] > this->spatialParams().heightPM() + eps_)
238 {
239 bcTypes.setAllDirichlet();
240 }
241 return bcTypes;
242 }
243
250 PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const
251 {
252 return initial_(globalPos);
253 }
254
258 NumEqVector neumann(const Element& element,
259 const FVElementGeometry& fvGeometry,
260 const ElementVolumeVariables& elemVolVars,
261 const ElementFluxVariablesCache& elemFluxVarsCache,
262 const SubControlVolumeFace& scvf) const
263 {
264 NumEqVector values(0.0);
265 const auto& globalPos = fvGeometry.scv(scvf.insideScvIdx()).dofPosition();
266 const Scalar massFluxInjectedPhase = massFluxInjectedPhase_ ;
267
268 ParameterCache dummyCache;
269 FluidState fluidState;
270
271 for (int phaseIdx=0; phaseIdx<numPhases; phaseIdx++)
272 {
273 fluidState.setPressure(phaseIdx, pnInitial_);
274 }
275
276 fluidState.setTemperature(gasPhaseIdx, TInject_ );
277 fluidState.setTemperature(liquidPhaseIdx, TInitial_ ); // this value is a good one, TInject does not work
278
279 // This solves the system of equations defining x=x(p,T)
280 ConstraintSolver::solve(fluidState,
281 dummyCache) ;
282
283 // Now let's make the air phase less than fully saturated with water
284 fluidState.setMoleFraction(gasPhaseIdx, wCompIdx, fluidState.moleFraction(gasPhaseIdx, wCompIdx)*percentOfEquil_ ) ;
285 fluidState.setMoleFraction(gasPhaseIdx, nCompIdx, 1.-fluidState.moleFraction(gasPhaseIdx, wCompIdx) ) ;
286
287 // compute density of injection phase
288 const Scalar density = FluidSystem::density(fluidState,
289 dummyCache,
290 gasPhaseIdx);
291 fluidState.setDensity(gasPhaseIdx, density);
292 const Scalar molarDensity = FluidSystem::molarDensity(fluidState,
293 dummyCache,
294 gasPhaseIdx);
295 fluidState.setMolarDensity(gasPhaseIdx, molarDensity);
296
297 for(int phaseIdx=0; phaseIdx<numPhases; phaseIdx++)
298 {
299 const Scalar h = FluidSystem::enthalpy(fluidState,
300 dummyCache,
301 phaseIdx);
302 fluidState.setEnthalpy(phaseIdx, h);
303 }
304
305 const Scalar molarFlux = massFluxInjectedPhase / fluidState.averageMolarMass(gasPhaseIdx);
306
307 // actually setting the fluxes
308 if (onLeftBoundary_(globalPos) && this->spatialParams().inFF_(globalPos))
309 {
310 values[conti00EqIdx + gasPhaseIdx * numComponents + wCompIdx]
311 = -molarFlux * fluidState.moleFraction(gasPhaseIdx, wCompIdx);
312 values[conti00EqIdx + gasPhaseIdx * numComponents + nCompIdx]
313 = -molarFlux * fluidState.moleFraction(gasPhaseIdx, nCompIdx);
314 // energy equations are specified mass specifically
315 values[energyEq0Idx + gasPhaseIdx] = - massFluxInjectedPhase
316 * fluidState.enthalpy(gasPhaseIdx) ;
317 }
318 return values;
319 }
320
324 // \{
325
331 PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const
332 {
333 return initial_(globalPos);
334 }
335
347 NumEqVector source(const Element &element,
348 const FVElementGeometry& fvGeometry,
349 const ElementVolumeVariables& elemVolVars,
350 const SubControlVolume &scv) const
351 {
352 NumEqVector values(0.0);
353 return values;
354
355 }
356
357private:
358 // the internal method for the initial condition
359 PrimaryVariables initial_(const GlobalPosition &globalPos) const
360 {
361 PrimaryVariables priVars(0.0);
362 const Scalar T = TInitial_;
363 Scalar S[numPhases];
364
365 if (this->spatialParams().inPM_(globalPos)){
366 S[liquidPhaseIdx] = SwPMInitial_;
367 S[gasPhaseIdx] = 1. - S[liquidPhaseIdx] ;
368 }
369 else if (this->spatialParams().inFF_(globalPos)){
370 S[liquidPhaseIdx] = SwFFInitial_;
371 S[gasPhaseIdx] = 1. - S[liquidPhaseIdx] ;
372 }
373 else
374 DUNE_THROW(Dune::InvalidStateException,
375 "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
376
377 for (int i = 0; i < numPhases - 1; ++i)
378 priVars[s0Idx + i] = S[i];
379
380 // capillary pressure Params
381 FluidState equilibriumFluidState;
382
383 //set saturation to inital values, this needs to be done in order for the fluidState to tell me pc
384 for (int phaseIdx = 0; phaseIdx < numPhases ; ++phaseIdx)
385 {
386 equilibriumFluidState.setSaturation(phaseIdx, S[phaseIdx]);
387 equilibriumFluidState.setTemperature(phaseIdx, TInitial_ );
388 }
389
390 const auto &materialParams =
391 this->spatialParams().materialLawParamsAtPos(globalPos);
392 std::vector<Scalar> capPress(numPhases);
393 // obtain pc according to saturation
394 using MaterialLaw = typename ParentType::SpatialParams::MaterialLaw;
395 using MPAdapter = MPAdapter<MaterialLaw, numPhases>;
396
397 const int wPhaseIdx = this->spatialParams().template wettingPhaseAtPos<FluidSystem>(globalPos);
398 MPAdapter::capillaryPressures(capPress, materialParams, equilibriumFluidState, wPhaseIdx);
399
400 Scalar p[numPhases];
401 if (this->spatialParams().inPM_(globalPos)){
402 // Use homogenous pressure in the domain and let the newton find the pressure distribution
403 using std::abs;
404 p[liquidPhaseIdx] = pnInitial_ - abs(capPress[liquidPhaseIdx]);
405 p[gasPhaseIdx] = p[liquidPhaseIdx] + abs(capPress[liquidPhaseIdx]);
406 }
407 else if (this->spatialParams().inFF_(globalPos)){
408 p[gasPhaseIdx] = pnInitial_ ;
409 p[liquidPhaseIdx] = pnInitial_ ;
410 }
411 else
412 DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
413
414 if(pressureFormulation == mostWettingFirst){
415 // This means that the pressures are sorted from the most wetting to the least wetting-1 in the primary variables vector.
416 // For two phases this means that there is one pressure as primary variable: pw
417 priVars[p0Idx] = p[liquidPhaseIdx];
418 }
419 else if(pressureFormulation == leastWettingFirst){
420 // This means that the pressures are sorted from the least wetting to the most wetting-1 in the primary variables vector.
421 // For two phases this means that there is one pressure as primary variable: pn
422 priVars[p0Idx] = p[gasPhaseIdx];
423 }
424 else DUNE_THROW(Dune::InvalidStateException, "EvaporationAtmosphereProblem does not support the chosen pressure formulation.");
425
426 for (int energyEqIdx=0; energyEqIdx< numEnergyEqFluid+numEnergyEqSolid; ++energyEqIdx)
427 priVars[energyEq0Idx + energyEqIdx] = T;
428
429 for (int phaseIdx=0; phaseIdx<numPhases; phaseIdx++)
430 equilibriumFluidState.setPressure(phaseIdx, p[phaseIdx]);
431
432 // This solves the system of equations defining x=x(p,T)
433 ParameterCache dummyCache;
434 ConstraintSolver::solve(equilibriumFluidState,
435 dummyCache) ;
436
437 FluidState dryFluidState(equilibriumFluidState);
438 // Now let's make the air phase less than fully saturated with vapor
439 dryFluidState.setMoleFraction(gasPhaseIdx, wCompIdx, dryFluidState.moleFraction(gasPhaseIdx, wCompIdx) * percentOfEquil_ ) ;
440 dryFluidState.setMoleFraction(gasPhaseIdx, nCompIdx, 1.0-dryFluidState.moleFraction(gasPhaseIdx, wCompIdx) ) ;
441
442 /* Difference between kinetic and MPNC:
443 * number of component related primVar and how they are calculated (mole fraction, fugacities, resp.)
444 */
445 if(enableChemicalNonEquilibrium){
446 for(int phaseIdx=0; phaseIdx < numPhases; ++ phaseIdx)
447 {
448 for(int compIdx=0; compIdx <numComponents; ++compIdx){
449 int offset = compIdx + phaseIdx * numComponents ;
450
451 if (this->spatialParams().inPM_(globalPos)){
452 priVars[conti00EqIdx + offset] = equilibriumFluidState.moleFraction(phaseIdx,compIdx) ;
453 }
454 else if (this->spatialParams().inFF_(globalPos)){
455 priVars[conti00EqIdx + offset] = dryFluidState.moleFraction(phaseIdx,compIdx) ;
456 }
457 else
458 DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
459 }
460 }
461 }
462 else
463 {
464 // in the case I am using the "standard" mpnc model, the variables to be set are the "fugacities"
465 const Scalar fugH2O = FluidSystem::H2O::vaporPressure(T) ;
466 const Scalar fugN2 = p[gasPhaseIdx] - fugH2O ;
467
468 priVars[conti00EqIdx + FluidSystem::N2Idx] = fugN2 ;
469 priVars[conti00EqIdx + FluidSystem::H2OIdx] = fugH2O ;
470
471 Scalar xl[numComponents];
472 Scalar beta[numComponents];
473
474 const Scalar Henry = BinaryCoeff::H2O_N2::henry(TInitial_);
475 const Scalar satVapPressure = FluidSystem::H2O::vaporPressure(TInitial_);
476 xl[FluidSystem::H2OIdx] = x_[liquidPhaseIdx][wCompIdx];
477 xl[FluidSystem::N2Idx] = x_[liquidPhaseIdx][nCompIdx];
478 beta[FluidSystem::H2OIdx] = satVapPressure ;
479 beta[FluidSystem::N2Idx] = Henry ;
480
481 for (int i = 0; i < numComponents; ++i)
482 priVars[conti00EqIdx + i] = xl[i]*beta[i]; // this should be really fug0Idx but the compiler only knows one or the other
483 }
484 return priVars;
485 }
486
490 bool onLeftBoundary_(const GlobalPosition & globalPos) const
491 { return globalPos[0] < this->gridGeometry().bBoxMin()[0] + eps_; }
492
496 bool onRightBoundary_(const GlobalPosition & globalPos) const
497 { return globalPos[0] > this->gridGeometry().bBoxMax()[0] - eps_; }
498
502 bool onLowerBoundary_(const GlobalPosition & globalPos) const
503 { return globalPos[dimWorld-1] < this->gridGeometry().bBoxMin()[dimWorld-1] + eps_; }
504
505private:
506 static constexpr Scalar eps_ = 1e-6;
507 Scalar percentOfEquil_ ;
508 int nTemperature_;
509 int nPressure_;
510 std::string outputName_;
511 Scalar heatIntoSolid_;
512 Scalar TInitial_ ;
513 Scalar SwPMInitial_ ;
514 Scalar SwFFInitial_ ;
515 Scalar SnInitial_;
516 Scalar pnInitial_;
517 Scalar pnInjection_;
518 Dune::ParameterTree inputParameters_;
519 Scalar x_[numPhases][numComponents] ;
520
521 Scalar TInject_;
522
523 Scalar massFluxInjectedPhase_ ;
524
525 std::shared_ptr<GridVariables> gridVariables_;
526
527public:
528
529 Dune::ParameterTree getInputParameters() const
530 { return inputParameters_; }
531};
532
533} // end namespace
534
535#endif
Defines a type tag and some properties for models using the box scheme.
Specification of a function relating volume specific interfacial area to capillary pressure and satur...
Specification of a function relating volume specific interfacial area to capillary pressure and satur...
Specification of a function relating volume specific interfacial area to capillary pressure and satur...
This material law takes a material law (interfacial area surface) defined for effective saturations a...
Specification of a function relating volume specific interfacial area to capillary pressure and satur...
Specification of a function relating volume specific interfacial area to capillary pressure and satur...
Setting constant fluid properties via the input file.
Enumeration of the formulations accepted by the MpNc model.
MpNcPressureFormulation
Enumerates the formulations which the MpNc model accepts.
Definition: pressureformulation.hh:36
make the local view function available whenever we use the grid geometry
Definition: adapt.hh:29
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
Property tag Indices
Definition: porousmediumflow/sequential/properties.hh:59
std::string molarDensity(int phaseIdx) noexcept
I/O name of molar density for multiphase systems.
Definition: name.hh:83
std::string density(int phaseIdx) noexcept
I/O name of density for multiphase systems.
Definition: name.hh:65
Base class for all finite-volume problems.
Definition: common/fvproblem.hh:50
const GridGeometry & gridGeometry() const
The finite volume grid geometry.
Definition: common/fvproblem.hh:588
Property to specify the type of scalar values.
Definition: common/properties.hh:53
The DUNE grid type.
Definition: common/properties.hh:57
Property to specify the type of a problem which has to be solved.
Definition: common/properties.hh:69
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
The type of the solid system to use.
Definition: common/properties.hh:227
Definition: common/properties.hh:312
static Scalar henry(Scalar temperature)
Henry coefficient for molecular nitrogen in liquid water.
Definition: h2o_n2.hh:48
A component which returns run time specified values for all fluid properties.
Definition: constant.hh:58
Computes the composition of all phases of a N-phase, N-component fluid system assuming that all N pha...
Definition: misciblemultiphasecomposition.hh:60
static void solve(FluidState &fluidState, ParameterCache &paramCache, int knownPhaseIdx=0)
Computes the composition of all phases of a N-phase, N-component fluid system assuming that all N pha...
Definition: misciblemultiphasecomposition.hh:82
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: h2on2kinetic.hh:49
A solid phase consisting of a single inert solid component.
Definition: inertsolidphase.hh:41
Base class for all fully implicit porous media problems.
Definition: dumux/porousmediumflow/problem.hh:39
SpatialParams & spatialParams()
Returns the spatial parameters object.
Definition: dumux/porousmediumflow/problem.hh:146
Problem showcasing the capabilities of the kinetic model.
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:131
Dune::ParameterTree getInputParameters() const
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:529
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/mpnc/implicit/kinetic/problem.hh:230
PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const
Evaluates the boundary conditions for a Dirichlet boundary segment.
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:250
const GridVariables & gridVariables() const
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:201
EvaporationAtmosphereProblem(std::shared_ptr< const GridGeometry > gridGeometry)
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:178
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.
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:258
NumEqVector source(const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const SubControlVolume &scv) const
Evaluates the source term for all balance equations within a given sub-controlvolume.
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:347
void setGridVariables(std::shared_ptr< GridVariables > gridVariables)
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:198
const std::string name() const
Returns the problem name.
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:214
PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const
Evaluates the initial value for a control volume.
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:331
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:71
std::tuple< MPNCNonequil > InheritsFrom
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:71
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:72
std::tuple< EvaporationAtmosphere, BoxModel > InheritsFrom
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:72
Dune::YaspGrid< 2, Dune::TensorProductCoordinates< GetPropType< TypeTag, Properties::Scalar >, 2 > > type
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:77
double type
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:101
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:107
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:117
GetPropType< TypeTag, GridGeometry > GridGeometry
Definition: test/porousmediumflow/mpnc/implicit/kinetic/problem.hh:116
Definition of the spatial parameters for the evaporation atmosphere Problem (using a "poor man's coup...
Definition: porousmediumflow/mpnc/implicit/kinetic/spatialparams.hh:53
Declares all properties used in Dumux.
A fully implicit model for MpNc flow using vertex centered finite volumes.
Base class for all porous media problems.
Definition of the spatial parameters for the MaxwellStefan problem.