33 using container_type = std::vector<std::shared_ptr<EKSpecies>>;
42 std::shared_ptr<walberla::PoissonSolver> m_poisson_solver;
43 container_type m_ekcontainer;
48 return (
lhs.get_ghost_layers() ==
rhs.get_ghost_layers())
and
49 (
lhs.get_grid_dimensions() ==
rhs.get_grid_dimensions());
52 void sanity_checks(std::shared_ptr<EKSpecies>
const &
new_ek_species)
const {
54 m_poisson_solver->get_lattice())) {
55 throw std::runtime_error(
"EKSpecies lattice incompatible with existing "
56 "Poisson solver lattice");
61 std::shared_ptr<walberla::PoissonSolver>
const &
new_ek_solver)
const {
62 if (
not m_ekcontainer.empty()) {
66 throw std::runtime_error(
"Poisson solver lattice incompatible with "
67 "existing EKSpecies lattice");
73 EKContainer(
double tau, std::shared_ptr<walberla::PoissonSolver> solver)
74 : m_tau{tau}, m_poisson_solver{
std::
move(solver)}, m_ekcontainer{} {}
77 return std::ranges::find(m_ekcontainer,
ek_species) != m_ekcontainer.end();
83 if (!m_ekcontainer.empty()) {
85 throw std::runtime_error(
86 "All EK Species need to be on de same device.");
106 assert(solver !=
nullptr);
107 sanity_checks(solver);
108 m_poisson_solver = solver;
115 void set_tau(
double tau)
noexcept { m_tau = tau; }
120 m_poisson_solver->add_charge_to_field(
id,
valency);
126 return m_poisson_solver->get_potential_field_id();
130 return m_poisson_solver->get_lattice();
const_iterator end() const noexcept
void set_poisson_solver(std::shared_ptr< walberla::PoissonSolver > const &solver)
void set_tau(double tau) noexcept
std::size_t get_potential_field_id() const
container_type::iterator iterator
bool contains(std::shared_ptr< EKSpecies > const &ek_species) const noexcept
EKContainer(double tau, std::shared_ptr< walberla::PoissonSolver > solver)
void solve_poisson() const
double get_tau() const noexcept
const_iterator begin() const noexcept
container_type::const_iterator const_iterator
void add_charge(std::size_t const id, double valency) const
LatticeWalberla const & get_lattice() const noexcept
void remove(std::shared_ptr< EKSpecies > const &ek_species)
iterator begin() noexcept
bool is_gpu() const noexcept
container_type::value_type value_type
bool empty() const noexcept
void add(std::shared_ptr< EKSpecies > const &ek_species)
void reset_charge() const
Class that runs and controls the BlockForest in waLBerla.
cudaStream_t stream[1]
CUDA streams for parallel computing on CPU and GPU.