From c78630cff0d60389ba9249b3aa95208ca091a802 Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Tue, 18 May 2021 12:06:09 +0200 Subject: [PATCH 1/3] fixed: add virtual dtor to class with virtual functions --- ebos/eclgenericcpgridvanguard.hh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ebos/eclgenericcpgridvanguard.hh b/ebos/eclgenericcpgridvanguard.hh index 7648d862a..fdae0b428 100644 --- a/ebos/eclgenericcpgridvanguard.hh +++ b/ebos/eclgenericcpgridvanguard.hh @@ -43,6 +43,8 @@ protected: public: EclGenericCpGridVanguard(); + virtual ~EclGenericCpGridVanguard() = default; + /*! * \brief Return a reference to the simulation grid. */ From a7507cf5448e0fb452fbcafd4a83006cabe45454 Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Tue, 18 May 2021 12:07:04 +0200 Subject: [PATCH 2/3] fixed: forward structs as structs clang warns --- ebos/eclgenericvanguard.hh | 2 +- opm/simulators/utils/ParallelRestart.hpp | 18 +++++++++--------- opm/simulators/wells/TargetCalculator.hpp | 2 +- opm/simulators/wells/WellGroupHelpers.hpp | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ebos/eclgenericvanguard.hh b/ebos/eclgenericvanguard.hh index eebc694c6..f023db284 100644 --- a/ebos/eclgenericvanguard.hh +++ b/ebos/eclgenericvanguard.hh @@ -45,7 +45,7 @@ namespace Action { class State; } class Deck; class EclipseState; class ErrorGuard; -class NumericalAquiferCell; +struct NumericalAquiferCell; class ParseContext; class Schedule; class Python; diff --git a/opm/simulators/utils/ParallelRestart.hpp b/opm/simulators/utils/ParallelRestart.hpp index 4fa07bee4..f95fc5477 100644 --- a/opm/simulators/utils/ParallelRestart.hpp +++ b/opm/simulators/utils/ParallelRestart.hpp @@ -49,19 +49,19 @@ class RestartValue; namespace data { -class CellData; -class Connection; -class CurrentControl; +struct CellData; +struct Connection; +struct CurrentControl; class GroupAndNetworkValues; -class GroupConstraints; -class GroupData; -class GroupGuideRates; +struct GroupConstraints; +struct GroupData; +struct GroupGuideRates; class GuideRateValue; -class NodeData; +struct NodeData; class Rates; -class Segment; +struct Segment; class Solution; -class Well; +struct Well; class WellRates; } diff --git a/opm/simulators/wells/TargetCalculator.hpp b/opm/simulators/wells/TargetCalculator.hpp index 1acc68146..fe2566759 100644 --- a/opm/simulators/wells/TargetCalculator.hpp +++ b/opm/simulators/wells/TargetCalculator.hpp @@ -32,7 +32,7 @@ namespace Opm class DeferredLogger; class GroupState; -class PhaseUsage; +struct PhaseUsage; namespace WellGroupHelpers { diff --git a/opm/simulators/wells/WellGroupHelpers.hpp b/opm/simulators/wells/WellGroupHelpers.hpp index 2ef8afd47..4c16a49ff 100644 --- a/opm/simulators/wells/WellGroupHelpers.hpp +++ b/opm/simulators/wells/WellGroupHelpers.hpp @@ -34,7 +34,7 @@ class DeferredLogger; class Group; class GroupState; namespace Network { class ExtNetwork; } -class PhaseUsage; +struct PhaseUsage; class Schedule; class VFPProdProperties; class WellStateFullyImplicitBlackoil; From 59d02d42c9918680fe0f56c10e355c5db576259f Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Tue, 18 May 2021 12:08:32 +0200 Subject: [PATCH 3/3] changed: make externalLoadBalancer a namespace scoped symbol clang get confused and claims there's no explicit instantation when it's a template member. --- ebos/eclgenericcpgridvanguard.cc | 10 ++++------ ebos/eclgenericcpgridvanguard.hh | 11 ++++++----- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/ebos/eclgenericcpgridvanguard.cc b/ebos/eclgenericcpgridvanguard.cc index 9a70a1689..760b52f9d 100644 --- a/ebos/eclgenericcpgridvanguard.cc +++ b/ebos/eclgenericcpgridvanguard.cc @@ -52,6 +52,8 @@ namespace Opm { +std::optional (const Dune::CpGrid&)>> externalLoadBalancer; + template EclGenericCpGridVanguard::EclGenericCpGridVanguard() { @@ -102,7 +104,7 @@ void EclGenericCpGridVanguard::doLoadBalance_(Dun const auto& gridView = grid_->leafGridView(); unsigned numFaces = grid_->numFaces(); std::vector faceTrans; - int loadBalancerSet = externalLoadBalancer_.has_value(); + int loadBalancerSet = externalLoadBalancer.has_value(); grid_->comm().broadcast(&loadBalancerSet, 1, 0); if (!loadBalancerSet){ faceTrans.resize(numFaces, 0.0); @@ -150,7 +152,7 @@ void EclGenericCpGridVanguard::doLoadBalance_(Dun std::vector parts; if (grid_->comm().rank() == 0) { - parts = (*externalLoadBalancer_)(*grid_); + parts = (*externalLoadBalancer)(*grid_); } parallelWells = std::get<1>(grid_->loadBalance(handle, parts, &wells, ownersFirst, false, 1)); } @@ -367,10 +369,6 @@ Scalar EclGenericCpGridVanguard::computeCellThick return zz2-zz1; } -template -std::optional (const Dune::CpGrid&)>> -EclGenericCpGridVanguard::externalLoadBalancer_; - #if HAVE_DUNE_FEM template class EclGenericCpGridVanguard>>, diff --git a/ebos/eclgenericcpgridvanguard.hh b/ebos/eclgenericcpgridvanguard.hh index fdae0b428..310c2a14c 100644 --- a/ebos/eclgenericcpgridvanguard.hh +++ b/ebos/eclgenericcpgridvanguard.hh @@ -34,6 +34,11 @@ namespace Opm { +/// \brief optional functor returning external load balancing information +/// +/// If it is set then this will be used during loadbalance. +extern std::optional (const Dune::CpGrid&)>> externalLoadBalancer; + template class EclGenericCpGridVanguard { protected: @@ -82,7 +87,7 @@ public: /// The information is a vector of integers indication the partition index for each cell id. static void setExternalLoadBalancer(const std::function (const Dune::CpGrid&)>& loadBalancer) { - externalLoadBalancer_ = loadBalancer; + externalLoadBalancer = loadBalancer; } /*! @@ -131,10 +136,6 @@ protected: std::unique_ptr cartesianIndexMapper_; std::unique_ptr equilCartesianIndexMapper_; - /// \brief optional functor returning external load balancing information - /// - /// If it is set then this will be used during loadbalance. - static std::optional (const Dune::CpGrid&)>> externalLoadBalancer_; int mpiRank; };