changed: store reference to FieldPropsManager as a pointer

default initialization required for serialization
is not possible with a const ref member
This commit is contained in:
Arne Morten Kvarving
2020-01-14 14:16:58 +01:00
parent 83b3b5bab6
commit 48bca722f5
4 changed files with 16 additions and 16 deletions

View File

@@ -77,7 +77,7 @@ namespace Opm {
public: public:
MULTREGTScanner(const GridDims& grid, MULTREGTScanner(const GridDims& grid,
const FieldPropsManager& fp_arg, const FieldPropsManager* fp_arg,
const std::vector< const DeckKeyword* >& keywords); const std::vector< const DeckKeyword* >& keywords);
double getRegionMultiplier(size_t globalCellIdx1, size_t globalCellIdx2, FaceDir::DirEnum faceDir) const; double getRegionMultiplier(size_t globalCellIdx1, size_t globalCellIdx2, FaceDir::DirEnum faceDir) const;
@@ -85,7 +85,7 @@ namespace Opm {
void addKeyword( const DeckKeyword& deckKeyword, const std::string& defaultRegion); void addKeyword( const DeckKeyword& deckKeyword, const std::string& defaultRegion);
void assertKeywordSupported(const DeckKeyword& deckKeyword); void assertKeywordSupported(const DeckKeyword& deckKeyword);
std::size_t nx,ny,nz; std::size_t nx,ny,nz;
const FieldPropsManager& fp; const FieldPropsManager* fp = nullptr;
std::vector< MULTREGTRecord > m_records; std::vector< MULTREGTRecord > m_records;
std::map<std::string , MULTREGTSearchMap> m_searchMap; std::map<std::string , MULTREGTSearchMap> m_searchMap;
std::map<std::string, std::vector<int>> regions; std::map<std::string, std::vector<int>> regions;

View File

@@ -106,21 +106,21 @@ std::vector<int> unique(const std::vector<int> data) {
interface with the wanted region values. interface with the wanted region values.
*/ */
MULTREGTScanner::MULTREGTScanner(const GridDims& grid, MULTREGTScanner::MULTREGTScanner(const GridDims& grid,
const FieldPropsManager& fp_arg, const FieldPropsManager* fp_arg,
const std::vector< const DeckKeyword* >& keywords) : const std::vector< const DeckKeyword* >& keywords) :
nx(grid.getNX()), nx(grid.getNX()),
ny(grid.getNY()), ny(grid.getNY()),
nz(grid.getNZ()), nz(grid.getNZ()),
fp(fp_arg) { fp(fp_arg) {
this->default_region = this->fp.default_region(); this->default_region = this->fp->default_region();
for (size_t idx = 0; idx < keywords.size(); idx++) for (size_t idx = 0; idx < keywords.size(); idx++)
this->addKeyword(*keywords[idx] , this->default_region); this->addKeyword(*keywords[idx] , this->default_region);
MULTREGTSearchMap searchPairs; MULTREGTSearchMap searchPairs;
for (std::vector<MULTREGTRecord>::const_iterator record = m_records.begin(); record != m_records.end(); ++record) { for (std::vector<MULTREGTRecord>::const_iterator record = m_records.begin(); record != m_records.end(); ++record) {
const std::string& region_name = record->region_name; const std::string& region_name = record->region_name;
if (this->fp.has<int>( region_name)) { if (this->fp->has<int>( region_name)) {
int srcRegion = record->src_value; int srcRegion = record->src_value;
int targetRegion = record->target_value; int targetRegion = record->target_value;
@@ -140,7 +140,7 @@ std::vector<int> unique(const std::vector<int> data) {
+ " which is not in the deck"); + " which is not in the deck");
if (this->regions.count(region_name) == 0) if (this->regions.count(region_name) == 0)
this->regions[region_name] = this->fp.get_global<int>(region_name); this->regions[region_name] = this->fp->get_global<int>(region_name);
} }
for (auto iter = searchPairs.begin(); iter != searchPairs.end(); ++iter) { for (auto iter = searchPairs.begin(); iter != searchPairs.end(); ++iter) {
@@ -195,12 +195,12 @@ std::vector<int> unique(const std::vector<int> data) {
region_name = MULTREGT::RegionNameFromDeckValue( regionItem.get<std::string>(0) ); region_name = MULTREGT::RegionNameFromDeckValue( regionItem.get<std::string>(0) );
if (srcItem.defaultApplied(0) || srcItem.get<int>(0) < 0) if (srcItem.defaultApplied(0) || srcItem.get<int>(0) < 0)
src_regions = unique(this->fp.get<int>(region_name)); src_regions = unique(this->fp->get<int>(region_name));
else else
src_regions.push_back(srcItem.get<int>(0)); src_regions.push_back(srcItem.get<int>(0));
if (targetItem.defaultApplied(0) || targetItem.get<int>(0) < 0) if (targetItem.defaultApplied(0) || targetItem.get<int>(0) < 0)
target_regions = unique(fp.get<int>(region_name)); target_regions = unique(fp->get<int>(region_name));
else else
target_regions.push_back(targetItem.get<int>(0)); target_regions.push_back(targetItem.get<int>(0));

View File

@@ -44,7 +44,7 @@ namespace Opm {
{ FaceDir::XMinus, "MULTX-" }, { FaceDir::XMinus, "MULTX-" },
{ FaceDir::YMinus, "MULTY-" }, { FaceDir::YMinus, "MULTY-" },
{ FaceDir::ZMinus, "MULTZ-" }}), { FaceDir::ZMinus, "MULTZ-" }}),
m_multregtScanner( dims, fp, deck.getKeywordList( "MULTREGT" )) m_multregtScanner( dims, &fp, deck.getKeywordList( "MULTREGT" ))
{ {
EDITSection edit_section(deck); EDITSection edit_section(deck);
if (edit_section.hasKeyword("MULTREGT")) { if (edit_section.hasKeyword("MULTREGT")) {

View File

@@ -115,19 +115,19 @@ BOOST_AUTO_TEST_CASE(InvalidInput) {
std::vector<const Opm::DeckKeyword*> keywords0; std::vector<const Opm::DeckKeyword*> keywords0;
const auto& multregtKeyword0 = deck.getKeyword( "MULTREGT", 0 ); const auto& multregtKeyword0 = deck.getKeyword( "MULTREGT", 0 );
keywords0.push_back( &multregtKeyword0 ); keywords0.push_back( &multregtKeyword0 );
BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, fp, keywords0 ); , std::invalid_argument ); BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, &fp, keywords0 ); , std::invalid_argument );
// Not supported region // Not supported region
std::vector<const Opm::DeckKeyword*> keywords1; std::vector<const Opm::DeckKeyword*> keywords1;
const auto& multregtKeyword1 = deck.getKeyword( "MULTREGT", 1 ); const auto& multregtKeyword1 = deck.getKeyword( "MULTREGT", 1 );
keywords1.push_back( &multregtKeyword1 ); keywords1.push_back( &multregtKeyword1 );
BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, fp, keywords1 ); , std::invalid_argument ); BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, &fp, keywords1 ); , std::invalid_argument );
// The keyword is ok; but it refers to a region which is not in the deck. // The keyword is ok; but it refers to a region which is not in the deck.
std::vector<const Opm::DeckKeyword*> keywords2; std::vector<const Opm::DeckKeyword*> keywords2;
const auto& multregtKeyword2 = deck.getKeyword( "MULTREGT", 2 ); const auto& multregtKeyword2 = deck.getKeyword( "MULTREGT", 2 );
keywords2.push_back( &multregtKeyword2 ); keywords2.push_back( &multregtKeyword2 );
BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, fp, keywords2 ); , std::logic_error ); BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, &fp, keywords2 ); , std::logic_error );
} }
@@ -182,13 +182,13 @@ BOOST_AUTO_TEST_CASE(NotSupported) {
std::vector<const Opm::DeckKeyword*> keywords0; std::vector<const Opm::DeckKeyword*> keywords0;
const auto& multregtKeyword0 = deck.getKeyword( "MULTREGT", 0 ); const auto& multregtKeyword0 = deck.getKeyword( "MULTREGT", 0 );
keywords0.push_back( &multregtKeyword0 ); keywords0.push_back( &multregtKeyword0 );
BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, fp, keywords0 ); , std::invalid_argument ); BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, &fp, keywords0 ); , std::invalid_argument );
// srcValue == targetValue - not supported // srcValue == targetValue - not supported
std::vector<const Opm::DeckKeyword*> keywords1; std::vector<const Opm::DeckKeyword*> keywords1;
const Opm::DeckKeyword& multregtKeyword1 = deck.getKeyword( "MULTREGT", 1 ); const Opm::DeckKeyword& multregtKeyword1 = deck.getKeyword( "MULTREGT", 1 );
keywords1.push_back( &multregtKeyword1 ); keywords1.push_back( &multregtKeyword1 );
BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, fp, keywords1 ); , std::invalid_argument ); BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, &fp, keywords1 ); , std::invalid_argument );
} }
static Opm::Deck createDefaultedRegions() { static Opm::Deck createDefaultedRegions() {
@@ -242,7 +242,7 @@ BOOST_AUTO_TEST_CASE(DefaultedRegions) {
std::vector<const Opm::DeckKeyword*> keywords0; std::vector<const Opm::DeckKeyword*> keywords0;
const auto& multregtKeyword0 = deck.getKeyword( "MULTREGT", 0 ); const auto& multregtKeyword0 = deck.getKeyword( "MULTREGT", 0 );
keywords0.push_back( &multregtKeyword0 ); keywords0.push_back( &multregtKeyword0 );
Opm::MULTREGTScanner scanner0(grid, fp, keywords0); Opm::MULTREGTScanner scanner0(grid, &fp, keywords0);
BOOST_CHECK_EQUAL( scanner0.getRegionMultiplier(grid.getGlobalIndex(0,0,1), grid.getGlobalIndex(1,0,1), Opm::FaceDir::XPlus ), 1.25); BOOST_CHECK_EQUAL( scanner0.getRegionMultiplier(grid.getGlobalIndex(0,0,1), grid.getGlobalIndex(1,0,1), Opm::FaceDir::XPlus ), 1.25);
BOOST_CHECK_EQUAL( scanner0.getRegionMultiplier(grid.getGlobalIndex(1,0,0), grid.getGlobalIndex(2,0,0), Opm::FaceDir::XPlus ), 1.0); BOOST_CHECK_EQUAL( scanner0.getRegionMultiplier(grid.getGlobalIndex(1,0,0), grid.getGlobalIndex(2,0,0), Opm::FaceDir::XPlus ), 1.0);
BOOST_CHECK_EQUAL( scanner0.getRegionMultiplier(grid.getGlobalIndex(2,0,1), grid.getGlobalIndex(2,0,0), Opm::FaceDir::ZMinus ), 0.0); BOOST_CHECK_EQUAL( scanner0.getRegionMultiplier(grid.getGlobalIndex(2,0,1), grid.getGlobalIndex(2,0,0), Opm::FaceDir::ZMinus ), 0.0);
@@ -250,7 +250,7 @@ BOOST_AUTO_TEST_CASE(DefaultedRegions) {
std::vector<const Opm::DeckKeyword*> keywords1; std::vector<const Opm::DeckKeyword*> keywords1;
const Opm::DeckKeyword& multregtKeyword1 = deck.getKeyword( "MULTREGT", 1 ); const Opm::DeckKeyword& multregtKeyword1 = deck.getKeyword( "MULTREGT", 1 );
keywords1.push_back( &multregtKeyword1 ); keywords1.push_back( &multregtKeyword1 );
Opm::MULTREGTScanner scanner1(grid, fp, keywords1 ); Opm::MULTREGTScanner scanner1(grid, &fp, keywords1 );
BOOST_CHECK_EQUAL( scanner1.getRegionMultiplier(grid.getGlobalIndex(2,0,0), grid.getGlobalIndex(1,0,0), Opm::FaceDir::XMinus ), 0.75); BOOST_CHECK_EQUAL( scanner1.getRegionMultiplier(grid.getGlobalIndex(2,0,0), grid.getGlobalIndex(1,0,0), Opm::FaceDir::XMinus ), 0.75);
BOOST_CHECK_EQUAL( scanner1.getRegionMultiplier(grid.getGlobalIndex(2,0,0), grid.getGlobalIndex(2,0,1), Opm::FaceDir::ZPlus), 0.75); BOOST_CHECK_EQUAL( scanner1.getRegionMultiplier(grid.getGlobalIndex(2,0,0), grid.getGlobalIndex(2,0,1), Opm::FaceDir::ZPlus), 0.75);
} }