Skip to content
Snippets Groups Projects
Commit 429ed84d authored by Jonathan Youett's avatar Jonathan Youett
Browse files

Make setSmoother non-virtual and work for l-value, r-values and shared_ptr

parent 7f1f56a1
No related branches found
No related tags found
1 merge request!26Feature/multigridstep rework set smoother
......@@ -160,10 +160,11 @@ namespace Dune {
levelWiseSmoothers_.clear();
}
/** \brief Set the smoother iteration step from a smart pointer*/
virtual void setSmoother(std::shared_ptr<LinearStepType> smoother)
/** \brief Set the smoother iteration step from a smart pointer, reference or temporary*/
template <class Smoother, class = std::enable_if_t<not std::is_pointer<Smoother>::value> >
void setSmoother(Smoother&& smoother)
{
presmootherDefault_ = postsmootherDefault_ = smoother;
presmootherDefault_ = postsmootherDefault_ = wrap_own_share<LinearStepType>(std::forward<Smoother>(smoother));
levelWiseSmoothers_.clear();
}
......@@ -178,11 +179,10 @@ namespace Dune {
levelWiseSmoothers_.clear();
}
virtual void setSmoother(std::shared_ptr<LinearStepType> preSmoother,
std::shared_ptr<LinearStepType> postSmoother)
{
presmootherDefault_ = std::move(preSmoother);
postsmootherDefault_ = std::move(postSmoother);
template <class Smoother, class = std::enable_if_t<not std::is_pointer<Smoother>::value> >
void setSmoother(Smoother&& preSmoother, Smoother&& postSmoother) {
presmootherDefault_ = wrap_own_share<LinearStepType>(std::forward<Smoother>(preSmoother));
postsmootherDefault_ = wrap_own_share<LinearStepType>(std::forward<Smoother>(postSmoother));
levelWiseSmoothers_.clear();
}
......@@ -194,9 +194,10 @@ namespace Dune {
}
/** \brief Set the smoother iteration step for a particular level, from a smart pointer */
virtual void setSmoother(std::shared_ptr<LinearStepType> smoother, std::size_t level)
template <class Smoother, class = std::enable_if_t<not std::is_pointer<Smoother>::value> >
void setSmoother(Smoother&& smoother, std::size_t level)
{
levelWiseSmoothers_[level] = smoother;
levelWiseSmoothers_[level] = wrap_own_share<LinearStepType>(std::forward<Smoother>(smoother));
}
/** \brief Set base solver */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment