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.
Setting constant fluid properties via the input file.
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...
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...
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.