3.5-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
porousmediumflow/mineralization/iofields.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 *****************************************************************************/
26#ifndef DUMUX_MINERALIZATION_IO_FIELDS_HH
27#define DUMUX_MINERALIZATION_IO_FIELDS_HH
28
29#include <dumux/io/name.hh>
30
31namespace Dumux {
32
37template<class NonMineralizationIOFields>
39{
40public:
41 template <class OutputModule>
42 static void initOutputModule(OutputModule& out)
43 {
44 using SolidSystem = typename OutputModule::VolumeVariables::SolidSystem;
45
46 // output of the model without mineralization
47 NonMineralizationIOFields::initOutputModule(out);
48
49 // additional output
50 for (int i = 0; i < SolidSystem::numComponents - SolidSystem::numInertComponents; ++i)
51 {
52 out.addVolumeVariable([i](const auto& v){ return v.solidVolumeFraction(i); },
53 IOName::solidVolumeFraction<SolidSystem>(i));
54 }
55 }
56
57 template <class ModelTraits, class FluidSystem, class SolidSystem>
58 static std::string primaryVariableName(int pvIdx, int state = 0)
59 {
60 static constexpr int nonMinNumEq = ModelTraits::numEq() - ModelTraits::numSolidComps() + ModelTraits::numInertSolidComps();
61
62 if (pvIdx < nonMinNumEq)
63 return NonMineralizationIOFields::template primaryVariableName<ModelTraits, FluidSystem, SolidSystem>(pvIdx, state);
64 else
65 return IOName::solidVolumeFraction<SolidSystem>(pvIdx - nonMinNumEq);
66 }
67};
68
69} // end namespace Dumux
70
71#endif
A collection of input/output field names for common physical quantities.
Definition: adapt.hh:29
Adds I/O fields specific to a NCMin model.
Definition: porousmediumflow/mineralization/iofields.hh:39
static std::string primaryVariableName(int pvIdx, int state=0)
Definition: porousmediumflow/mineralization/iofields.hh:58
static void initOutputModule(OutputModule &out)
Definition: porousmediumflow/mineralization/iofields.hh:42