37 if (
name ==
"get_slice_size") {
40 if (
name ==
"get_slice_ranges") {
43 if (
name ==
"get_ek_sip") {
46 if (
name ==
"get_value_shape") {
47 auto const name = get_value<std::string>(
params,
"name");
48 if (m_shape_val.count(
name) == 0) {
50 throw std::runtime_error(
"Unknown EK property '" +
name +
"'");
53 return m_shape_val.at(
name);
57 auto const call = [
this,
params](
auto method_ptr,
58 std::vector<int>
const &data_dims,
60 auto &obj = *m_ek_species;
61 if constexpr (std::is_invocable_v<
decltype(method_ptr),
LatticeModel *,
71 if (
name ==
"get_density") {
74 if (
name ==
"set_density") {
77 if (
name ==
"get_is_boundary") {
80 if (
name ==
"get_flux_at_boundary") {
84 if (
name ==
"set_flux_at_boundary") {
87 if (
name ==
"get_density_at_boundary") {
91 if (
name ==
"set_density_at_boundary") {
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::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 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::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::vector< double > get_slice_density(Utils::Vector3i const &lower_corner, Utils::Vector3i const &upper_corner) const =0
Get slice density.
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 void parallel_try_catch(std::function< void()> const &cb) const =0
boost::string_ref name() const
Context * context() const
Responsible context.
Variant do_call_method(std::string const &name, VariantMap const ¶ms) override
Variant gather_3d(VariantMap const ¶ms, std::vector< int > const &data_dims, LatticeModel const &lattice_model, std::vector< T >(LatticeModel::*getter)(Utils::Vector3i const &, Utils::Vector3i const &) const, double units_conversion=1.) const
Utils::Vector3i m_slice_upper_corner
Utils::Vector3i m_slice_lower_corner
void scatter_3d(VariantMap const ¶ms, std::vector< int > const &data_dims, LatticeModel &lattice_model, void(LatticeModel::*setter)(Utils::Vector3i const &, Utils::Vector3i const &, std::vector< T > const &), double units_conversion=1.)
This file contains the defaults for ESPResSo.
std::unordered_map< std::string, Variant > VariantMap
boost::make_recursive_variant< None, bool, int, std::size_t, double, std::string, ObjectRef, Utils::Vector3b, Utils::Vector3i, Utils::Vector2d, Utils::Vector3d, Utils::Vector4d, std::vector< int >, std::vector< double >, std::vector< boost::recursive_variant_ >, std::unordered_map< int, boost::recursive_variant_ >, std::unordered_map< std::string, boost::recursive_variant_ > >::type Variant
Possible types for parameters.
static SteepestDescentParameters params
Currently active steepest descent instance.