Newer
Older
## Challenges in simulating porous media:
* Highly heterogeneous distribution of parameters and complex nonlinear material laws
* Strong interconnection of properties **--->** difficult to achieve modularity
<ins> User-defined parameters and relationships: </ins>
* Components
* Fluid system
* Solid system
* Binary coefficients
* Fluid-matrix interactions
* Chemistry
* Equation of state (Eos)
## <ins> Dumux-specific containers and solvers </ins>
- Fluid states
- Solid states
- Constraint solvers
<img src="img/component.png" width="200"/>
## <ins> What it does: </ins>
* **Thermodynamic relations** (e.g. molar mass, vapor pressure, density) of a **single chemical species** or a fixed mixture of species
* Provide a convenient way to access these quantities
* Not supposed to be used by models directly
* _H2O_ : pure water, properties by IAPWS-97 or simplified
<img src="img/fluidsystem.png" width="300"/>
## <ins> What it does: </ins>
* Expresses the **thermodynamic relations between fluid quantities** (e.g. calculation of density or viscosity based on composition, fugacity coefficient based on temperature and pressure...)
* Stateless classes (all member functions are static)
* _TwoPImmiscible_ : two immiscible fluid phases
* _H2OAir_ : gas and liquid phase with components water and air
<img src="img/binarycoefficients.png" width="350"/>
## <ins> What it does: </ins>
**Contains** data required for binary mixtures (e.g. binary diffusion coefficients, coefficients needed for constitutive relationships (like Henry coefficient))
<img src="img/solidsystem.png" width="300"/>
## <ins> What it does: </ins>
* Expresses the **thermodynamic properties of the solid matrix** (e.g. calculation of the solid density and solid heat capacity based on the composition...)
* Stateless classes (all member functions are static)
* _OneCSolid_ : inert solid matrix of one solid component (e.g. granite)
* _CompositionalSolidPhase_ : composed solid matrix of inert or reactive components (e.g. NaCl and granite)
# Material system: Fluid-matrix interactions
<img src="img/fluidmatrixinteractions.png" width="250"/>
## <ins> What it does: </ins>
* Description of the **interaction of the fluid phases with the porous medium** (e.g. capillary pressure and relative permeability relationships)
* Through modular adapters, regularization schemes can be imposed for extreme values
<img src="img/chemistry.png" width="200"/>
## <ins> What it does: </ins>
* Expresses the **electrochemical models for a fuel cell application** (e.g. calculattion of reaction sources with an electrochemical model approach)
* Stateless classes (all member functions are static)
* _Electrochemistry_ : for isothermal system
* _Electrochemistryni_ : for non-isothermal system
<img src="img/eos.png" width="250"/>
## <ins> What it does: </ins>
* Implements the **equation of state** for liquids and gases, and also for mixture (e.g. compute vapor pressure, molar volume, etc.)
* Stateless classes (all member functions are static)
* _Pengrobinson_ : eos for liquid and gas
* _Pengrobinsonmixture_ : eos for a mixture
<img src="img/fluidstate.png" width="800"/>
## <ins> What it does: </ins>
* **Stores** the complete thermodynamic configuration of a system at a given spatial and temporal position (e.g. saturation, mole fraction, enthalpy)
* **Provides access** methods to all thermodynamic quantities (e.g. saturation, mole fraction, enthalpy)
## <ins> Example implementations: </ins>
* _ImmiscibleFluidState_: assumes immiscibility of the fluid phases. Phase compositions and fugacity coefficients do not need to be stored explicitly
* _CompositionalFluidState_: assumes thermodynamic equilibrium, only a single temperature needs to be stored
<img src="img/solidstate.png" width="800"/>
## <ins> What it does: </ins>
* **Stores** the complete solid configuration of a system at a given spatial and temporal position (e.g. solid volume fractions, solid heat capacity)
* **Provides** access methods to all solid quantities (e.g. porosity, density, temperature)
## <ins> Example implementations: </ins>
* _InertSolidState_: assumes an inert solid phase. Solid volume fractions do not change
* _CompositionalSolidState_: assumes a solid matrix composed out of two components. The volume fractions can change and properties such as heat capacity are adapted
## <ins> What it does: </ins>
**Connects** the thermodynamic relations expressed by fluid systems with the thermodynamic quantities stored by fluid states (e.g. mole fraction, density)
## <ins> Example implementation: </ins>
CompositionFromFugacities: takes all component fugacities, the temperature and pressure of a phase as input and calculates the phase composition
<img src="img/component-fluidsystem.png" width="500"/>
// The two-phase immiscible fluid system
#include <dumux/material/fluidsystems/h2oair.hh>
// The water component
#include <dumux/material/components/h2o.hh>
// The air component
#include <dumux/material/components/air.hh>
template<class TypeTag>
struct FluidSystem<TypeTag, TTag::H2OAir>
using Scalar = GetPropType<TypeTag, Properties::Scalar>;
using type = FluidSystems::H2OAir<Scalar,
Components::TabulatedComponent<Components::H2O<Scalar>>,
FluidSystems::H2OAirDefaultPolicy</*fastButSimplifiedRelations=*/true>,
true /*useKelvinEquation*/>;
};
```
# Example: From component to solid system
## Example: 2 phases, miscible
* Components: _CaO_, _CaO2H2_ (slaked lime)
* Solid system: _OnePNCMin_
// The solid system
template<class TypeTag>
struct SolidSystem<TypeTag, TTag::ThermoChem>
using Scalar = GetPropType<TypeTag, Properties::Scalar>;
using ComponentOne = Components::ModifiedCaO<Scalar>;
using ComponentTwo = Components::CaO2H2<Scalar>;
using type = SolidSystems::CompositionalSolidPhase<Scalar, ComponentOne, ComponentTwo>;
Specifying a solid system is only necessary if you work with a non-isothermal or mineralization model. If no solid system is specified in the problem file, the default is the inert solid phase with the constant component. For the constant component you can set properties in the input file.
# Exercise
## <ins> Tasks: </ins>
1. Get familiar with the code
2. 2p model: Implement a new component (incompressible and compressible)
3. 2p2c model: Implement a new fluid system
4. Change wettability of the porous medium
5. Advanced: Use van Genuchten relationship with parameters: alpha = 0.0037 and alphalense = 0.00045, n = 4.7 and nlense = 7.3
**First step:** Go to <https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/tree/master/exercises/exercise-fluidsystem> and check out the README