From 6a587ba8d9c24050e282e0f80955cfc68e600bd4 Mon Sep 17 00:00:00 2001 From: osae Date: Mon, 5 May 2014 11:23:43 +0200 Subject: [PATCH] Fix to make EQLNUM consistent with ACTNUM. This should eventually be integrated in the parser. --- opm/core/simulator/initStateEquil.hpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/opm/core/simulator/initStateEquil.hpp b/opm/core/simulator/initStateEquil.hpp index 79ab69686..0b2455417 100644 --- a/opm/core/simulator/initStateEquil.hpp +++ b/opm/core/simulator/initStateEquil.hpp @@ -314,8 +314,21 @@ namespace Opm if (newParserDeck->hasKeyword("EQLNUM")) { const std::vector& e = newParserDeck->getKeyword("EQLNUM")->getIntData(); eqlnum.reserve(e.size()); - std::transform(e.begin(), e.end(), std::back_inserter(eqlnum), - std::bind2nd(std::minus(), 1)); + if (newParserDeck->hasKeyword("ACTNUM")) { + std::vector::const_iterator actnum_begin = + newParserDeck->getKeyword("ACTNUM")->getIntData().begin(); + std::transform(e.begin(), e.end(), actnum_begin, std::back_inserter(eqlnum), + [](int eql, int act){ return (act == 0) ? -1 : eql-1;}); + eqlnum.erase(std::remove_if(eqlnum.begin(), eqlnum.end(), + std::bind2nd(std::less(), 0)), + eqlnum.end()); + } + else { + std::transform(e.begin(), e.end(), std::back_inserter(eqlnum), + std::bind2nd(std::minus(), 1)); + } + if (eqlnum.size() != G.number_of_cells) + OPM_THROW(std::runtime_error, "Keyword EQLNUM: inconsistent array size."); } else { // No explicit equilibration region.