From 59d02d42c9918680fe0f56c10e355c5db576259f Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Tue, 18 May 2021 12:08:32 +0200 Subject: [PATCH] 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; };