diff --git a/CMakeLists_files.cmake b/CMakeLists_files.cmake
index 492ab9446..870945c4f 100644
--- a/CMakeLists_files.cmake
+++ b/CMakeLists_files.cmake
@@ -72,20 +72,21 @@ list (APPEND MAIN_SOURCE_FILES
opm/simulators/linalg/PreconditionerFactory6.cpp
opm/simulators/linalg/PropertyTree.cpp
opm/simulators/linalg/setupPropertyTree.cpp
- opm/simulators/utils/PartiallySupportedFlowKeywords.cpp
- opm/simulators/utils/readDeck.cpp
- opm/simulators/utils/UnsupportedFlowKeywords.cpp
opm/simulators/timestepping/AdaptiveSimulatorTimer.cpp
opm/simulators/timestepping/AdaptiveTimeSteppingEbos.cpp
opm/simulators/timestepping/TimeStepControl.cpp
opm/simulators/timestepping/SimulatorTimer.cpp
opm/simulators/timestepping/SimulatorTimerInterface.cpp
opm/simulators/timestepping/gatherConvergenceReport.cpp
+ opm/simulators/utils/ComponentName.cpp
opm/simulators/utils/DeferredLogger.cpp
opm/simulators/utils/gatherDeferredLogger.cpp
opm/simulators/utils/ParallelFileMerger.cpp
opm/simulators/utils/ParallelRestart.cpp
+ opm/simulators/utils/PartiallySupportedFlowKeywords.cpp
+ opm/simulators/utils/readDeck.cpp
opm/simulators/utils/SerializationPackers.cpp
+ opm/simulators/utils/UnsupportedFlowKeywords.cpp
opm/simulators/wells/ALQState.cpp
opm/simulators/wells/BlackoilWellModelConstraints.cpp
opm/simulators/wells/BlackoilWellModelGeneric.cpp
diff --git a/opm/simulators/utils/ComponentName.cpp b/opm/simulators/utils/ComponentName.cpp
new file mode 100644
index 000000000..ffdc4bc06
--- /dev/null
+++ b/opm/simulators/utils/ComponentName.cpp
@@ -0,0 +1,122 @@
+/*
+ Copyright 2013, 2015 SINTEF ICT, Applied Mathematics.
+ Copyright 2014, 2015 Dr. Blatt - HPC-Simulation-Software & Services
+ Copyright 2014, 2015 Statoil ASA.
+ Copyright 2015 NTNU
+ Copyright 2015, 2016, 2017 IRIS AS
+
+ This file is part of the Open Porous Media project (OPM).
+
+ OPM is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OPM is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OPM. If not, see .
+*/
+
+#include
+#include
+
+#include
+
+#include
+#include
+#include
+
+#include
+
+namespace Opm {
+
+template
+ComponentName::ComponentName()
+ : names_(Indices::numEq)
+{
+ for (unsigned phaseIdx = 0; phaseIdx < FluidSystem::numPhases; ++phaseIdx) {
+ if (!FluidSystem::phaseIsActive(phaseIdx)) {
+ continue;
+ }
+
+ const unsigned canonicalCompIdx = FluidSystem::solventComponentIndex(phaseIdx);
+ names_[Indices::canonicalToActiveComponentIndex(canonicalCompIdx)]
+ = FluidSystem::componentName(canonicalCompIdx);
+ }
+
+ if constexpr (Indices::enableSolvent) {
+ names_[Indices::solventSaturationIdx] = "Solvent";
+ }
+
+ if constexpr (Indices::enableExtbo) {
+ names_[Indices::zFractionIdx] = "ZFraction";
+ }
+
+ if constexpr (Indices::enablePolymer) {
+ names_[Indices::polymerConcentrationIdx] = "Polymer";
+ }
+
+ if constexpr (Indices::polymerMoleWeightIdx >= 0) {
+ assert(Indices::enablePolymer);
+ names_[Indices::polymerMoleWeightIdx] = "MolecularWeightP";
+ }
+
+ if constexpr (Indices::enableEnergy) {
+ names_[Indices::temperatureIdx] = "Energy";
+ }
+
+ if constexpr (Indices::numFoam == 1) {
+ names_[Indices::foamConcentrationIdx] = "Foam";
+ }
+
+ if constexpr (Indices::numBrine == 1) {
+ names_[Indices::saltConcentrationIdx] = "Brine";
+ }
+
+ if constexpr (Indices::enableMICP) {
+ names_[Indices::microbialConcentrationIdx] = "Microbes";
+ names_[Indices::oxygenConcentrationIdx] = "Oxygen";
+ names_[Indices::ureaConcentrationIdx] = "Urea";
+ names_[Indices::biofilmConcentrationIdx] = "Biofilm";
+ names_[Indices::calciteConcentrationIdx] = "Calcite";
+ }
+}
+
+#define INSTANCE( ...) \
+template class ComponentName, \
+ __VA_ARGS__>;
+
+// One phase
+INSTANCE(BlackOilOnePhaseIndices<0u,0u,0u,0u,false,false,0u,1u,0u>)
+INSTANCE(BlackOilOnePhaseIndices<0u,0u,0u,1u,false,false,0u,1u,0u>)
+INSTANCE(BlackOilOnePhaseIndices<0u,0u,0u,0u,false,false,0u,1u,5u>)
+
+// Two phase
+INSTANCE(BlackOilTwoPhaseIndices<0u,0u,0u,0u,false,false,0u,0u,0u>)
+INSTANCE(BlackOilTwoPhaseIndices<0u,0u,0u,0u,false,false,0u,1u,0u>)
+INSTANCE(BlackOilTwoPhaseIndices<0u,0u,0u,0u,false,false,0u,2u,0u>)
+INSTANCE(BlackOilTwoPhaseIndices<0u,0u,1u,0u,false,false,0u,2u,0u>)
+INSTANCE(BlackOilTwoPhaseIndices<0u,0u,2u,0u,false,false,0u,2u,0u>)
+INSTANCE(BlackOilTwoPhaseIndices<0u,0u,0u,0u,false,true,0u,2u,0u>)
+INSTANCE(BlackOilTwoPhaseIndices<0u,0u,0u,1u,false,false,0u,1u,0u>)
+INSTANCE(BlackOilTwoPhaseIndices<0u,0u,0u,0u,false,true,0u,0u,0u>)
+INSTANCE(BlackOilTwoPhaseIndices<0u,0u,0u,1u,false,false,0u,0u,0u>)
+INSTANCE(BlackOilTwoPhaseIndices<0u,0u,0u,1u,false,true,0u,0u,0u>)
+INSTANCE(BlackOilTwoPhaseIndices<1u,0u,0u,0u,false,false,0u,0u,0u>)
+
+// Blackoil
+INSTANCE(BlackOilIndices<0u,0u,0u,0u,false,false,0u,0u>)
+INSTANCE(BlackOilIndices<0u,0u,0u,0u,true,false,0u,0u>)
+INSTANCE(BlackOilIndices<0u,0u,0u,0u,false,true,0u,0u>)
+INSTANCE(BlackOilIndices<1u,0u,0u,0u,false,false,0u,0u>)
+INSTANCE(BlackOilIndices<0u,1u,0u,0u,false,false,0u,0u>)
+INSTANCE(BlackOilIndices<0u,0u,1u,0u,false,false,0u,0u>)
+INSTANCE(BlackOilIndices<0u,0u,0u,1u,false,false,0u,0u>)
+INSTANCE(BlackOilIndices<0u,0u,0u,1u,false,true,0u,0u>)
+INSTANCE(BlackOilIndices<1u,0u,0u,0u,true,false,0u,0u>)
+
+} // namespace Opm
diff --git a/opm/simulators/utils/ComponentName.hpp b/opm/simulators/utils/ComponentName.hpp
index 01c45b9bc..35210f672 100644
--- a/opm/simulators/utils/ComponentName.hpp
+++ b/opm/simulators/utils/ComponentName.hpp
@@ -33,56 +33,7 @@ template
class ComponentName
{
public:
- ComponentName()
- : names_(Indices::numEq)
- {
- for (unsigned phaseIdx = 0; phaseIdx < FluidSystem::numPhases; ++phaseIdx) {
- if (!FluidSystem::phaseIsActive(phaseIdx)) {
- continue;
- }
-
- const unsigned canonicalCompIdx = FluidSystem::solventComponentIndex(phaseIdx);
- names_[Indices::canonicalToActiveComponentIndex(canonicalCompIdx)]
- = FluidSystem::componentName(canonicalCompIdx);
- }
-
- if constexpr (Indices::enableSolvent) {
- names_[Indices::solventSaturationIdx] = "Solvent";
- }
-
- if constexpr (Indices::enableExtbo) {
- names_[Indices::zFractionIdx] = "ZFraction";
- }
-
- if constexpr (Indices::enablePolymer) {
- names_[Indices::polymerConcentrationIdx] = "Polymer";
- }
-
- if constexpr (Indices::polymerMoleWeightIdx >= 0) {
- assert(Indices::enablePolymer);
- names_[Indices::polymerMoleWeightIdx] = "MolecularWeightP";
- }
-
- if constexpr (Indices::enableEnergy) {
- names_[Indices::temperatureIdx] = "Energy";
- }
-
- if constexpr (Indices::numFoam == 1) {
- names_[Indices::foamConcentrationIdx] = "Foam";
- }
-
- if constexpr (Indices::numBrine == 1) {
- names_[Indices::saltConcentrationIdx] = "Brine";
- }
-
- if constexpr (Indices::enableMICP) {
- names_[Indices::microbialConcentrationIdx] = "Microbes";
- names_[Indices::oxygenConcentrationIdx] = "Oxygen";
- names_[Indices::ureaConcentrationIdx] = "Urea";
- names_[Indices::biofilmConcentrationIdx] = "Biofilm";
- names_[Indices::calciteConcentrationIdx] = "Calcite";
- }
- }
+ ComponentName();
const std::string& name(const int compIdx) const
{