34 virtual void integrate(std::size_t potential_id, std::size_t velocity_id,
35 std::size_t force_id) = 0;
41 [[nodiscard]]
virtual std::size_t
stencil_size() const noexcept = 0;
48 [[nodiscard]] virtual std::optional<
double>
50 bool consider_ghosts = false) const = 0;
54 Utils::Vector3i const &upper_corner,
55 std::vector<
double> const &
density) = 0;
58 [[nodiscard]] virtual std::vector<
double>
60 Utils::Vector3i const &upper_corner) const = 0;
64 Utils::Vector3d const &flux) = 0;
67 [[nodiscard]] virtual std::optional<
Utils::Vector3d>
69 bool consider_ghosts = false) const = 0;
73 Utils::Vector3i const &lower_corner,
Utils::Vector3i const &upper_corner,
74 std::vector<std::optional<
Utils::Vector3d>> const &flux) = 0;
77 [[nodiscard]] virtual std::vector<std::optional<
Utils::Vector3d>>
79 Utils::Vector3i const &upper_corner) const = 0;
88 [[nodiscard]] virtual std::optional<
double>
90 bool consider_ghosts = false) const = 0;
94 Utils::Vector3i const &lower_corner,
Utils::Vector3i const &upper_corner,
95 std::vector<std::optional<
double>> const &
density) = 0;
98 [[nodiscard]] virtual std::vector<std::optional<
double>>
100 Utils::Vector3i const &upper_corner) const = 0;
106 [[nodiscard]] virtual std::optional<
bool>
108 bool consider_ghosts = false) const = 0;
111 [[nodiscard]] virtual std::optional<
bool>
113 bool consider_ghosts = false) const = 0;
116 [[nodiscard]] virtual std::optional<
bool>
118 bool consider_ghosts = false) const = 0;
121 [[nodiscard]] virtual std::vector<
bool>
123 Utils::Vector3i const &upper_corner) const = 0;
129 std::vector<
double> const &) = 0;
132 std::vector<
double> const &) = 0;
136 [[nodiscard]] virtual
double get_kT() const noexcept = 0;
143 [[nodiscard]] virtual
unsigned int get_seed() const noexcept = 0;
Vector implementation and trait types for boost qvm interoperability.
Interface of a lattice-based electrokinetic model.
virtual std::vector< std::optional< double > > get_slice_density_at_boundary(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner) const =0
Get slice density boundary conditions.
virtual std::optional< double > get_node_density(Utils::Vector3i const &node, bool consider_ghosts=false) const =0
Get node density.
virtual std::optional< Utils::Vector3d > get_node_flux_at_boundary(Utils::Vector3i const &node, bool consider_ghosts=false) const =0
Get node flux boundary conditions.
virtual std::vector< bool > get_slice_is_boundary(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner) const =0
Check if slice has any boundary conditions.
virtual void set_slice_density_boundary(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner, std::vector< std::optional< double > > const &density)=0
Set slice density boundary conditions.
virtual std::optional< bool > get_node_is_boundary(Utils::Vector3i const &node, bool consider_ghosts=false) const =0
Check if node has any boundary conditions.
virtual bool is_double_precision() const noexcept=0
virtual void clear_density_boundaries()=0
virtual std::optional< double > get_node_density_at_boundary(Utils::Vector3i const &node, bool consider_ghosts=false) const =0
Get node density boundary conditions.
virtual void set_slice_flux_boundary(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner, std::vector< std::optional< Utils::Vector3d > > const &flux)=0
Set slice flux boundary conditions.
virtual std::optional< bool > get_node_is_density_boundary(Utils::Vector3i const &node, bool consider_ghosts=false) const =0
Check if node has density boundary conditions.
virtual void set_diffusion(double diffusion)=0
virtual void clear_flux_boundaries()=0
virtual void set_advection(bool advection)=0
virtual std::vector< std::optional< Utils::Vector3d > > get_slice_flux_at_boundary(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner) const =0
Get slice flux boundary conditions.
virtual std::optional< uint64_t > get_rng_state() const =0
virtual void set_kT(double kT)=0
virtual void integrate(std::size_t potential_id, std::size_t velocity_id, std::size_t force_id)=0
Integrate EKin for one time step.
virtual bool get_friction_coupling() const noexcept=0
virtual double get_kT() const noexcept=0
virtual void update_flux_boundary_from_shape(std::vector< int > const &, std::vector< double > const &)=0
virtual Utils::Vector3d get_ext_efield() const noexcept=0
virtual void set_ext_efield(Utils::Vector3d const &field)=0
virtual void set_rng_state(uint64_t counter)=0
virtual bool set_node_density(Utils::Vector3i const &node, double density)=0
Set node density.
virtual double get_diffusion() const noexcept=0
virtual std::vector< double > get_slice_density(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner) const =0
Get slice density.
virtual bool is_thermalized() const noexcept=0
virtual std::optional< bool > get_node_is_flux_boundary(Utils::Vector3i const &node, bool consider_ghosts=false) const =0
Check if node has flux boundary conditions.
virtual bool set_node_flux_boundary(Utils::Vector3i const &node, Utils::Vector3d const &flux)=0
Set node flux boundary conditions.
virtual bool remove_node_from_flux_boundary(Utils::Vector3i const &node)=0
virtual bool get_advection() const noexcept=0
virtual void set_friction_coupling(bool friction_coupling)=0
virtual double get_valency() const noexcept=0
virtual void ghost_communication()=0
perform ghost communication of densities
virtual std::size_t stencil_size() const noexcept=0
Number of discretized fluxes.
virtual unsigned int get_seed() const noexcept=0
virtual void set_slice_density(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner, std::vector< double > const &density)=0
Set slice density.
virtual bool remove_node_from_density_boundary(Utils::Vector3i const &node)=0
virtual std::size_t get_density_id() const noexcept=0
virtual void update_density_boundary_from_shape(std::vector< int > const &, std::vector< double > const &)=0
virtual bool set_node_density_boundary(Utils::Vector3i const &node, double density)=0
Set node density boundary conditions.
virtual void set_valency(double valency)=0
Abstract representation of a lattice-based model.