From 712e9b205300b7ff6a254d95727f9fb3d68e1da7 Mon Sep 17 00:00:00 2001 From: Jonas Meier Date: Wed, 1 May 2024 19:30:42 +0200 Subject: [PATCH] Made PicManager more general to work with arbitrary solver structs, this could be useful if one wants to run multiple solvers in one step --- alpine/AlpineManager.h | 5 +++-- src/Manager/PicManager.h | 10 +++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/alpine/AlpineManager.h b/alpine/AlpineManager.h index 94a7855ce..c4e185574 100644 --- a/alpine/AlpineManager.h +++ b/alpine/AlpineManager.h @@ -8,6 +8,7 @@ #include "LoadBalancer.hpp" #include "Manager/BaseManager.h" #include "Manager/PicManager.h" +#include "Manager/FieldSolverBase.h" #include "ParticleContainer.hpp" #include "Random/Distribution.h" #include "Random/InverseTransformSampling.h" @@ -19,7 +20,7 @@ using view_type = typename ippl::detail::ViewType, 1>: template class AlpineManager : public ippl::PicManager, FieldContainer, - LoadBalancer> { + LoadBalancer, ippl::FieldSolverBase> { public: using ParticleContainer_t = ParticleContainer; using FieldContainer_t = FieldContainer; @@ -35,7 +36,7 @@ class AlpineManager std::string stepMethod_m; public: AlpineManager(size_type totalP_, int nt_, Vector_t& nr_, double lbt_, std::string& solver_, std::string& stepMethod_) - : ippl::PicManager, FieldContainer, LoadBalancer>() + : ippl::PicManager, FieldContainer, LoadBalancer, ippl::FieldSolverBase>() , totalP_m(totalP_) , nt_m(nt_) , nr_m(nr_) diff --git a/src/Manager/PicManager.h b/src/Manager/PicManager.h index 48c51daa6..7c8bd6a75 100644 --- a/src/Manager/PicManager.h +++ b/src/Manager/PicManager.h @@ -4,7 +4,6 @@ #include #include "Manager/BaseManager.h" #include "Decomposition/OrthogonalRecursiveBisection.h" -#include "Manager/FieldSolverBase.h" namespace ippl { @@ -21,8 +20,9 @@ * @tparam pc The particle container type. * @tparam fc The field container type. * @tparam orb The load balancer type. + * @tparam fs The field solver type. */ - template + template class PicManager : public BaseManager { public: PicManager() @@ -60,11 +60,11 @@ fcontainer_m = fcontainer; } - std::shared_ptr> getFieldSolver() { + std::shared_ptr getFieldSolver() { return fsolver_m; } - void setFieldSolver(std::shared_ptr> fsolver) { + void setFieldSolver(std::shared_ptr fsolver) { fsolver_m = fsolver; } @@ -83,7 +83,7 @@ std::shared_ptr loadbalancer_m; - std::shared_ptr> fsolver_m; + std::shared_ptr fsolver_m; }; } // namespace ippl