39 std::shared_ptr<::LeesEdwards::LeesEdwards> m_lees_edwards;
40 std::shared_ptr<Protocol> m_protocol;
41 std::unique_ptr<VariantMap> m_params;
52 system.lb.lebc_sanity_checks(invalid_dir, invalid_dir);
56 m_lees_edwards->unset_protocol();
61 auto const &lebc = get_lebc();
62 if (lebc.shear_direction == invalid_dir or
63 lebc.shear_plane_normal == invalid_dir) {
64 throw std::runtime_error(
65 "Parameters 'shear_plane_normal' and 'shear_direction' "
66 "must be initialized together with 'protocol' on first "
67 "activation via set_boundary_conditions()");
70 m_protocol = get_value<std::shared_ptr<Protocol>>(value);
71 m_lees_edwards->set_protocol(m_protocol->protocol());
83 [
this]() {
return get_shear_name(get_lebc().shear_direction); }},
85 [
this]() {
return get_shear_name(get_lebc().shear_plane_normal); }}});
90 if (
name ==
"set_boundary_conditions") {
92 auto const protocol =
params.at(
"protocol");
98 m_protocol = get_value<std::shared_ptr<Protocol>>(protocol);
99 auto const shear_direction = get_shear_axis(
params,
"shear_direction");
100 auto const shear_plane_normal =
101 get_shear_axis(
params,
"shear_plane_normal");
102 if (shear_plane_normal == shear_direction) {
103 throw std::invalid_argument(
"Parameters 'shear_direction' and "
104 "'shear_plane_normal' must differ");
107 system.lb.lebc_sanity_checks(shear_direction, shear_plane_normal);
109 system.box_geo->set_lees_edwards_bc(
111 m_lees_edwards->set_protocol(m_protocol->protocol());
118 m_params = std::make_unique<VariantMap>(
params);
123 auto const value = get_value<std::string>(
params,
name);
133 throw std::invalid_argument(
"Parameter '" +
name +
"' is invalid");
136 Variant get_shear_name(
unsigned int axis) {
138 return {std::string(
"x")};
141 return {std::string(
"y")};
144 return {std::string(
"z")};
150 return get_system().box_geo->lees_edwards_bc();
155 auto const &
params = *m_params;
Bind parameters in the script interface.
void do_set_parameter(const std::string &name, const Variant &value) final
void add_parameters(std::vector< AutoParameter > &¶ms)
virtual void parallel_try_catch(std::function< void()> const &cb) const =0
Variant do_call_method(std::string const &name, VariantMap const ¶ms) override
void do_construct(VariantMap const ¶ms) override
void on_bind_system(::System::System &system) override
boost::string_ref name() const
Context * context() const
Responsible context.
auto const & get_system() const
std::shared_ptr< LeesEdwards::LeesEdwards > lees_edwards
std::unordered_map< std::string, Variant > VariantMap
Variant make_variant(const T &x)
Make a Variant from argument.
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.
bool is_none(Variant const &v)
constexpr const None none
None-"literal".
static SteepestDescentParameters params
Currently active steepest descent instance.
static auto constexpr invalid_dir
static constexpr const ReadOnly read_only