diff --git a/opm/parser/eclipse/EclipseState/Grid/TransMult.hpp b/opm/parser/eclipse/EclipseState/Grid/TransMult.hpp index 3aa4c98b0..9502adb6d 100644 --- a/opm/parser/eclipse/EclipseState/Grid/TransMult.hpp +++ b/opm/parser/eclipse/EclipseState/Grid/TransMult.hpp @@ -52,7 +52,7 @@ namespace Opm { double getMultiplier(size_t globalIndex, FaceDir::DirEnum faceDir) const; double getMultiplier(size_t i , size_t j , size_t k, FaceDir::DirEnum faceDir) const; double getRegionMultiplier( size_t globalCellIndex1, size_t globalCellIndex2, FaceDir::DirEnum faceDir) const; - void applyMULT(const GridProperty& srcMultProp, FaceDir::DirEnum faceDir); + void applyMULT(const std::vector& srcMultProp, FaceDir::DirEnum faceDir); void applyMULTFLT(const FaultCollection& faults); void applyMULTFLT(const Fault& fault); @@ -60,12 +60,11 @@ namespace Opm { size_t getGlobalIndex(size_t i , size_t j , size_t k) const; void assertIJK(size_t i , size_t j , size_t k) const; double getMultiplier__(size_t globalIndex , FaceDir::DirEnum faceDir) const; - void insertNewProperty(FaceDir::DirEnum faceDir); bool hasDirectionProperty(FaceDir::DirEnum faceDir) const; - GridProperty& getDirectionProperty(FaceDir::DirEnum faceDir); + std::vector& getDirectionProperty(FaceDir::DirEnum faceDir); size_t m_nx , m_ny , m_nz; - std::map > m_trans; + std::map > m_trans; std::map m_names; MULTREGTScanner m_multregtScanner; }; diff --git a/src/opm/parser/eclipse/EclipseState/EclipseState.cpp b/src/opm/parser/eclipse/EclipseState/EclipseState.cpp index 6e15ceeae..13d3a4289 100644 --- a/src/opm/parser/eclipse/EclipseState/EclipseState.cpp +++ b/src/opm/parser/eclipse/EclipseState/EclipseState.cpp @@ -279,19 +279,19 @@ void assert_field_properties(const EclipseGrid& grid, const FieldPropsManager& f void EclipseState::initTransMult() { const auto& p = m_eclipseProperties; if (m_eclipseProperties.hasDeckDoubleGridProperty("MULTX")) - m_transMult.applyMULT(p.getDoubleGridProperty("MULTX"), FaceDir::XPlus); + m_transMult.applyMULT(p.getDoubleGridProperty("MULTX").getData(), FaceDir::XPlus); if (m_eclipseProperties.hasDeckDoubleGridProperty("MULTX-")) - m_transMult.applyMULT(p.getDoubleGridProperty("MULTX-"), FaceDir::XMinus); + m_transMult.applyMULT(p.getDoubleGridProperty("MULTX-").getData(), FaceDir::XMinus); if (m_eclipseProperties.hasDeckDoubleGridProperty("MULTY")) - m_transMult.applyMULT(p.getDoubleGridProperty("MULTY"), FaceDir::YPlus); + m_transMult.applyMULT(p.getDoubleGridProperty("MULTY").getData(), FaceDir::YPlus); if (m_eclipseProperties.hasDeckDoubleGridProperty("MULTY-")) - m_transMult.applyMULT(p.getDoubleGridProperty("MULTY-"), FaceDir::YMinus); + m_transMult.applyMULT(p.getDoubleGridProperty("MULTY-").getData(), FaceDir::YMinus); if (m_eclipseProperties.hasDeckDoubleGridProperty("MULTZ")) - m_transMult.applyMULT(p.getDoubleGridProperty("MULTZ"), FaceDir::ZPlus); + m_transMult.applyMULT(p.getDoubleGridProperty("MULTZ").getData(), FaceDir::ZPlus); if (m_eclipseProperties.hasDeckDoubleGridProperty("MULTZ-")) - m_transMult.applyMULT(p.getDoubleGridProperty("MULTZ-"), FaceDir::ZMinus); + m_transMult.applyMULT(p.getDoubleGridProperty("MULTZ-").getData(), FaceDir::ZMinus); } void EclipseState::initFaults(const Deck& deck) { diff --git a/src/opm/parser/eclipse/EclipseState/Grid/TransMult.cpp b/src/opm/parser/eclipse/EclipseState/Grid/TransMult.cpp index 730d13c5b..57fd04743 100644 --- a/src/opm/parser/eclipse/EclipseState/Grid/TransMult.cpp +++ b/src/opm/parser/eclipse/EclipseState/Grid/TransMult.cpp @@ -71,14 +71,14 @@ R"(This deck has the MULTREGT keyword located in the EDIT section. Note that: double TransMult::getMultiplier(size_t globalIndex, FaceDir::DirEnum faceDir) const { if (globalIndex < m_nx * m_ny * m_nz) - return getMultiplier__(globalIndex , faceDir); + return this->getMultiplier__(globalIndex , faceDir); else throw std::invalid_argument("Invalid global index"); } double TransMult::getMultiplier__(size_t globalIndex, FaceDir::DirEnum faceDir) const { if (hasDirectionProperty( faceDir )) { - const auto& data = m_trans.at(faceDir).getData(); + const auto& data = m_trans.at(faceDir); return data[globalIndex]; } else return 1.0; @@ -88,7 +88,7 @@ R"(This deck has the MULTREGT keyword located in the EDIT section. Note that: double TransMult::getMultiplier(size_t i , size_t j , size_t k, FaceDir::DirEnum faceDir) const { - size_t globalIndex = getGlobalIndex(i,j,k); + size_t globalIndex = this->getGlobalIndex(i,j,k); return getMultiplier__( globalIndex , faceDir ); } @@ -100,27 +100,21 @@ R"(This deck has the MULTREGT keyword located in the EDIT section. Note that: return m_trans.count(faceDir) == 1; } - void TransMult::insertNewProperty(FaceDir::DirEnum faceDir) { - GridPropertySupportedKeywordInfo kwInfo(m_names[faceDir] , 1.0 , "1"); - GridProperty< double > prop( m_nx, m_ny, m_nz, kwInfo ); - m_trans.emplace( faceDir, std::move( prop ) ); - } - - GridProperty& TransMult::getDirectionProperty(FaceDir::DirEnum faceDir) { - if (m_trans.count(faceDir) == 0) - insertNewProperty(faceDir); + std::vector& TransMult::getDirectionProperty(FaceDir::DirEnum faceDir) { + if (m_trans.count(faceDir) == 0) { + std::size_t global_size = this->m_nx * this->m_ny * this->m_nz; + m_trans[faceDir] = std::vector(global_size, 1); + } return m_trans.at( faceDir ); } - void TransMult::applyMULT(const GridProperty& srcProp, FaceDir::DirEnum faceDir) + void TransMult::applyMULT(const std::vector& srcData, FaceDir::DirEnum faceDir) { - auto& dstProp = getDirectionProperty(faceDir); - - const std::vector &srcData = srcProp.getData(); + auto& dstProp = this->getDirectionProperty(faceDir); for (size_t i = 0; i < srcData.size(); ++i) - dstProp.multiplyValueAtIndex(i, srcData[i]); + dstProp[i] *= srcData[i]; } @@ -129,12 +123,10 @@ R"(This deck has the MULTREGT keyword located in the EDIT section. Note that: for( const auto& face : fault ) { FaceDir::DirEnum faceDir = face.getDir(); - auto& multProperty = getDirectionProperty(faceDir); + auto& multProperty = this->getDirectionProperty(faceDir); - - for( auto globalIndex : face ) { - multProperty.multiplyValueAtIndex( globalIndex , transMult); - } + for( auto globalIndex : face ) + multProperty[globalIndex] *= transMult; } } @@ -142,7 +134,7 @@ R"(This deck has the MULTREGT keyword located in the EDIT section. Note that: void TransMult::applyMULTFLT(const FaultCollection& faults) { for (size_t faultIndex = 0; faultIndex < faults.size(); faultIndex++) { auto& fault = faults.getFault(faultIndex); - applyMULTFLT(fault); + this->applyMULTFLT(fault); } } - } +} diff --git a/tests/parser/TransMultTests.cpp b/tests/parser/TransMultTests.cpp index c4ed7cb2d..522f40ce1 100644 --- a/tests/parser/TransMultTests.cpp +++ b/tests/parser/TransMultTests.cpp @@ -76,6 +76,6 @@ MULTZ Opm::FieldPropsManager fp(deck, grid, tables); Opm::TransMult transMult(grid, deck, fp, props); - transMult.applyMULT(props.getDoubleGridProperty("MULTZ"), Opm::FaceDir::ZPlus); + transMult.applyMULT(props.getDoubleGridProperty("MULTZ").getData(), Opm::FaceDir::ZPlus); BOOST_CHECK_EQUAL( transMult.getMultiplier(0,0,0 , Opm::FaceDir::ZPlus) , 4.0 ); }