Loading [MathJax]/extensions/TeX/AMSmath.js
ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
BondedInteraction.hpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2021-2022 The ESPResSo project
3 *
4 * This file is part of ESPResSo.
5 *
6 * ESPResSo is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * ESPResSo is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#pragma once
21
22/** @file
23 * The ScriptInterface counterparts of the bonded interactions parameters
24 * structs from the core are defined here.
25 *
26 */
27
30#include "core/thermostat.hpp"
31
35
36#include <boost/algorithm/string/predicate.hpp>
37#include <boost/variant.hpp>
38
39#include <algorithm>
40#include <cassert>
41#include <cmath>
42#include <cstddef>
43#include <iterator>
44#include <limits>
45#include <memory>
46#include <set>
47#include <stdexcept>
48#include <string>
49#include <tuple>
50#include <utility>
51#include <vector>
52
53namespace ScriptInterface {
54namespace Interactions {
55
56class BondedInteraction : public AutoParameters<BondedInteraction> {
57protected:
58 std::shared_ptr<::Bonded_IA_Parameters> m_bonded_ia;
59
60public:
61 std::shared_ptr<::Bonded_IA_Parameters> bonded_ia() { return m_bonded_ia; }
62 std::shared_ptr<const ::Bonded_IA_Parameters> bonded_ia() const {
63 return m_bonded_ia;
64 }
65
66protected:
69
70 virtual std::set<std::string> get_valid_parameters() const {
71 auto const vec = valid_parameters();
72 auto valid_keys = std::set<std::string>();
73 std::ranges::transform(vec, std::inserter(valid_keys, valid_keys.begin()),
74 [](auto const &key) { return std::string{key}; });
75 return valid_keys;
76 }
77
78private:
79 void check_valid_parameters(VariantMap const &params) const {
80 auto const valid_keys = get_valid_parameters();
81 for (auto const &key : valid_keys) {
82 if (not params.contains(std::string(key))) {
83 throw std::runtime_error("Parameter '" + key + "' is missing");
84 }
85 }
86 for (auto const &kv : params) {
87 if (not valid_keys.contains(kv.first)) {
88 throw std::runtime_error("Parameter '" + kv.first +
89 "' is not recognized");
90 }
91 }
92 }
93
94 void do_construct(VariantMap const &params) override {
95 context()->parallel_try_catch([&]() {
96 check_valid_parameters(params);
97 construct_bond(params);
98 });
99 }
100
101 virtual void construct_bond(VariantMap const &params) = 0;
102
103public:
104 bool operator==(BondedInteraction const &other) const {
105 return m_bonded_ia == other.m_bonded_ia;
106 }
107
108 Variant do_call_method(std::string const &name,
109 VariantMap const &params) override {
110 // this feature is needed to compare bonds
111 if (name == "is_same_bond") {
112 auto const bond_so =
114 return *this == *bond_so;
115 }
116 if (name == "get_num_partners") {
117 return number_of_partners(*bonded_ia());
118 }
119
120 return {};
121 }
122};
123
124template <class CoreIA> class BondedInteractionImpl : public BondedInteraction {
125public:
126 using CoreBondedInteraction = CoreIA;
128 return boost::get<CoreBondedInteraction>(*bonded_ia());
129 }
130};
131
132class FeneBond : public BondedInteractionImpl<::FeneBond> {
133public:
135 add_parameters({
136 {"k", AutoParameter::read_only, [this]() { return get_struct().k; }},
137 {"d_r_max", AutoParameter::read_only,
138 [this]() { return get_struct().drmax; }},
139 {"r_0", AutoParameter::read_only, [this]() { return get_struct().r0; }},
140 });
141 }
142
143private:
144 void construct_bond(VariantMap const &params) override {
145 m_bonded_ia = std::make_shared<::Bonded_IA_Parameters>(
146 CoreBondedInteraction(get_value<double>(params, "k"),
147 get_value<double>(params, "d_r_max"),
148 get_value<double>(params, "r_0")));
149 }
150};
151
152class HarmonicBond : public BondedInteractionImpl<::HarmonicBond> {
153public:
155 add_parameters({
156 {"k", AutoParameter::read_only, [this]() { return get_struct().k; }},
157 {"r_0", AutoParameter::read_only, [this]() { return get_struct().r; }},
158 {"r_cut", AutoParameter::read_only,
159 [this]() { return get_struct().r_cut; }},
160 });
161 }
162
163private:
164 void construct_bond(VariantMap const &params) override {
165 m_bonded_ia =
166 std::make_shared<::Bonded_IA_Parameters>(CoreBondedInteraction(
167 get_value<double>(params, "k"), get_value<double>(params, "r_0"),
168 get_value<double>(params, "r_cut")));
169 }
170};
171
172class QuarticBond : public BondedInteractionImpl<::QuarticBond> {
173public:
175 add_parameters({
176 {"k0", AutoParameter::read_only, [this]() { return get_struct().k0; }},
177 {"k1", AutoParameter::read_only, [this]() { return get_struct().k1; }},
178 {"r", AutoParameter::read_only, [this]() { return get_struct().r; }},
179 {"r_cut", AutoParameter::read_only,
180 [this]() { return get_struct().r_cut; }},
181 });
182 }
183
184private:
185 void construct_bond(VariantMap const &params) override {
186 m_bonded_ia =
187 std::make_shared<::Bonded_IA_Parameters>(CoreBondedInteraction(
188 get_value<double>(params, "k0"), get_value<double>(params, "k1"),
189 get_value<double>(params, "r"),
190 get_value<double>(params, "r_cut")));
191 }
192};
193
194class BondedCoulomb : public BondedInteractionImpl<::BondedCoulomb> {
195public:
197 add_parameters({
198 {"prefactor", AutoParameter::read_only,
199 [this]() { return get_struct().prefactor; }},
200 });
201 }
202
203private:
204 void construct_bond(VariantMap const &params) override {
205 m_bonded_ia = std::make_shared<::Bonded_IA_Parameters>(
206 CoreBondedInteraction(get_value<double>(params, "prefactor")));
207 }
208};
209
210class BondedCoulombSR : public BondedInteractionImpl<::BondedCoulombSR> {
211public:
213 add_parameters({
214 {"q1q2", AutoParameter::read_only,
215 [this]() { return get_struct().q1q2; }},
216 });
217 }
218
219private:
220 void construct_bond(VariantMap const &params) override {
221 m_bonded_ia = std::make_shared<::Bonded_IA_Parameters>(
222 CoreBondedInteraction(get_value<double>(params, "q1q2")));
223 }
224};
225
226class AngleHarmonicBond : public BondedInteractionImpl<::AngleHarmonicBond> {
227public:
229 add_parameters({
230 {"bend", AutoParameter::read_only,
231 [this]() { return get_struct().bend; }},
232 {"phi0", AutoParameter::read_only,
233 [this]() { return get_struct().phi0; }},
234 });
235 }
236
237private:
238 void construct_bond(VariantMap const &params) override {
239 m_bonded_ia = std::make_shared<::Bonded_IA_Parameters>(
240 CoreBondedInteraction(get_value<double>(params, "bend"),
241 get_value<double>(params, "phi0")));
242 }
243};
244
245class AngleCosineBond : public BondedInteractionImpl<::AngleCosineBond> {
246public:
248 add_parameters({
249 {"bend", AutoParameter::read_only,
250 [this]() { return get_struct().bend; }},
251 {"phi0", AutoParameter::read_only,
252 [this]() { return get_struct().phi0; }},
253 });
254 }
255
256private:
257 void construct_bond(VariantMap const &params) override {
258 m_bonded_ia = std::make_shared<::Bonded_IA_Parameters>(
259 CoreBondedInteraction(get_value<double>(params, "bend"),
260 get_value<double>(params, "phi0")));
261 }
262};
263
264class AngleCossquareBond : public BondedInteractionImpl<::AngleCossquareBond> {
265public:
267 add_parameters({
268 {"bend", AutoParameter::read_only,
269 [this]() { return get_struct().bend; }},
270 {"phi0", AutoParameter::read_only,
271 [this]() { return get_struct().phi0; }},
272 });
273 }
274
275private:
276 void construct_bond(VariantMap const &params) override {
277 m_bonded_ia = std::make_shared<::Bonded_IA_Parameters>(
278 CoreBondedInteraction(get_value<double>(params, "bend"),
279 get_value<double>(params, "phi0")));
280 }
281};
282
283class DihedralBond : public BondedInteractionImpl<::DihedralBond> {
284public:
286 add_parameters({
287 {"mult", AutoParameter::read_only,
288 [this]() { return get_struct().mult; }},
289 {"bend", AutoParameter::read_only,
290 [this]() { return get_struct().bend; }},
291 {"phase", AutoParameter::read_only,
292 [this]() { return get_struct().phase; }},
293 });
294 }
295
296private:
297 void construct_bond(VariantMap const &params) override {
298 m_bonded_ia =
299 std::make_shared<::Bonded_IA_Parameters>(CoreBondedInteraction(
300 get_value<int>(params, "mult"), get_value<double>(params, "bend"),
301 get_value<double>(params, "phase")));
302 }
303};
304
306 : public BondedInteractionImpl<::TabulatedDistanceBond> {
307public:
309 add_parameters({
310 {"min", AutoParameter::read_only,
311 [this]() { return get_struct().pot->minval; }},
312 {"max", AutoParameter::read_only,
313 [this]() { return get_struct().pot->maxval; }},
314 {"energy", AutoParameter::read_only,
315 [this]() { return get_struct().pot->energy_tab; }},
316 {"force", AutoParameter::read_only,
317 [this]() { return get_struct().pot->force_tab; }},
318 });
319 }
320
321private:
322 void construct_bond(VariantMap const &params) override {
323 m_bonded_ia =
324 std::make_shared<::Bonded_IA_Parameters>(CoreBondedInteraction(
325 get_value<double>(params, "min"), get_value<double>(params, "max"),
326 get_value<std::vector<double>>(params, "energy"),
327 get_value<std::vector<double>>(params, "force")));
328 }
329};
330
331class TabulatedAngleBond : public BondedInteractionImpl<::TabulatedAngleBond> {
332public:
334 add_parameters({
335 {"min", AutoParameter::read_only,
336 [this]() { return get_struct().pot->minval; }},
337 {"max", AutoParameter::read_only,
338 [this]() { return get_struct().pot->maxval; }},
339 {"energy", AutoParameter::read_only,
340 [this]() { return get_struct().pot->energy_tab; }},
341 {"force", AutoParameter::read_only,
342 [this]() { return get_struct().pot->force_tab; }},
343 });
344 }
345
346private:
347 void construct_bond(VariantMap const &params) override {
348 m_bonded_ia =
349 std::make_shared<::Bonded_IA_Parameters>(CoreBondedInteraction(
350 get_value<double>(params, "min"), get_value<double>(params, "max"),
351 get_value<std::vector<double>>(params, "energy"),
352 get_value<std::vector<double>>(params, "force")));
353 }
354};
355
357 : public BondedInteractionImpl<::TabulatedDihedralBond> {
358public:
360 add_parameters({
361 {"min", AutoParameter::read_only,
362 [this]() { return get_struct().pot->minval; }},
363 {"max", AutoParameter::read_only,
364 [this]() { return get_struct().pot->maxval; }},
365 {"energy", AutoParameter::read_only,
366 [this]() { return get_struct().pot->energy_tab; }},
367 {"force", AutoParameter::read_only,
368 [this]() { return get_struct().pot->force_tab; }},
369 });
370 }
371
372private:
373 void construct_bond(VariantMap const &params) override {
374 m_bonded_ia =
375 std::make_shared<::Bonded_IA_Parameters>(CoreBondedInteraction(
376 get_value<double>(params, "min"), get_value<double>(params, "max"),
377 get_value<std::vector<double>>(params, "energy"),
378 get_value<std::vector<double>>(params, "force")));
379 }
380};
381
382class ThermalizedBond : public BondedInteractionImpl<::ThermalizedBond> {
383public:
385 add_parameters({
386 {"temp_com", AutoParameter::read_only,
387 [this]() { return get_struct().temp_com; }},
388 {"gamma_com", AutoParameter::read_only,
389 [this]() { return get_struct().gamma_com; }},
390 {"temp_distance", AutoParameter::read_only,
391 [this]() { return get_struct().temp_distance; }},
392 {"gamma_distance", AutoParameter::read_only,
393 [this]() { return get_struct().gamma_distance; }},
394 {"r_cut", AutoParameter::read_only,
395 [this]() { return get_struct().r_cut; }},
396 });
397 }
398
399private:
400 void construct_bond(VariantMap const &params) override {
401 m_bonded_ia = std::make_shared<::Bonded_IA_Parameters>(
402 CoreBondedInteraction(get_value<double>(params, "temp_com"),
403 get_value<double>(params, "gamma_com"),
404 get_value<double>(params, "temp_distance"),
405 get_value<double>(params, "gamma_distance"),
406 get_value<double>(params, "r_cut")));
407 }
408};
409
410class RigidBond : public BondedInteractionImpl<::RigidBond> {
411public:
413 add_parameters({
414 {"r", AutoParameter::read_only,
415 [this]() { return std::sqrt(get_struct().d2); }},
416 {"ptol", AutoParameter::read_only,
417 [this]() { return 0.5 * get_struct().p_tol; }},
418 {"vtol", AutoParameter::read_only,
419 [this]() { return get_struct().v_tol; }},
420 });
421 }
422
423private:
424 void construct_bond(VariantMap const &params) override {
425 m_bonded_ia =
426 std::make_shared<::Bonded_IA_Parameters>(CoreBondedInteraction(
427 get_value<double>(params, "r"), get_value<double>(params, "ptol"),
428 get_value<double>(params, "vtol")));
429 }
430};
431
432class IBMTriel : public BondedInteractionImpl<::IBMTriel> {
433public:
435 add_parameters({
436 {"k1", AutoParameter::read_only, [this]() { return get_struct().k1; }},
437 {"k2", AutoParameter::read_only, [this]() { return get_struct().k2; }},
438 {"ind1", AutoParameter::read_only,
439 [this]() { return std::get<0>(get_struct().p_ids); }},
440 {"ind2", AutoParameter::read_only,
441 [this]() { return std::get<1>(get_struct().p_ids); }},
442 {"ind3", AutoParameter::read_only,
443 [this]() { return std::get<2>(get_struct().p_ids); }},
444 {"maxDist", AutoParameter::read_only,
445 [this]() { return get_struct().maxDist; }},
446 {"elasticLaw", AutoParameter::read_only,
447 [this]() {
448 if (get_struct().elasticLaw == tElasticLaw::NeoHookean) {
449 return std::string("NeoHookean");
450 }
451 return std::string("Skalak");
452 }},
453 {"is_initialized", AutoParameter::read_only,
454 [this]() { return get_struct().is_initialized; }},
455 {"_cache", AutoParameter::read_only,
456 [this]() {
457 auto &s = get_struct();
458 return std::vector<double>{{s.l0, s.lp0, s.sinPhi0, s.cosPhi0,
459 s.area0, s.a1, s.a2, s.b1, s.b2}};
460 }},
461 });
462 }
463
464private:
465 void construct_bond(VariantMap const &params) override {
466 auto const law_name = get_value<std::string>(params, "elasticLaw");
467 tElasticLaw elastic_law;
468 if (law_name == "NeoHookean") {
469 elastic_law = tElasticLaw::NeoHookean;
470 } else if (law_name == "Skalak") {
471 elastic_law = tElasticLaw::Skalak;
472 } else {
473 throw std::invalid_argument(
474 "Invalid value for parameter 'elasticLaw': '" + law_name + "'");
475 }
476 auto bond = CoreBondedInteraction(
477 get_value<int>(params, "ind1"), get_value<int>(params, "ind2"),
478 get_value<int>(params, "ind3"), get_value<double>(params, "maxDist"),
479 elastic_law, get_value<double>(params, "k1"),
480 get_value<double>(params, "k2"));
481 if (get_value_or<bool>(params, "is_initialized", false)) {
482 auto const cache = get_value<std::vector<double>>(params, "_cache");
483 assert(cache.size() == 9ul);
484 bond.l0 = cache[0];
485 bond.lp0 = cache[1];
486 bond.sinPhi0 = cache[2];
487 bond.cosPhi0 = cache[3];
488 bond.area0 = cache[4];
489 bond.a1 = cache[5];
490 bond.a2 = cache[6];
491 bond.b1 = cache[7];
492 bond.b2 = cache[8];
493 bond.is_initialized = true;
494 }
495 m_bonded_ia = std::make_shared<::Bonded_IA_Parameters>(std::move(bond));
496 }
497};
498
499class IBMVolCons : public BondedInteractionImpl<::IBMVolCons> {
500public:
502 add_parameters({
503 {"softID", AutoParameter::read_only,
504 [this]() { return static_cast<int>(get_struct().softID); }},
505 {"kappaV", AutoParameter::read_only,
506 [this]() { return get_struct().kappaV; }},
507 });
508 }
509
510 Variant do_call_method(std::string const &name,
511 VariantMap const &params) override {
512 if (name == "current_volume") {
513 return get_struct().get_current_volume();
514 }
515 return BondedInteraction::do_call_method(name, params);
516 }
517
518private:
519 void construct_bond(VariantMap const &params) override {
520 m_bonded_ia = std::make_shared<::Bonded_IA_Parameters>(
521 CoreBondedInteraction(get_value<int>(params, "softID"),
522 get_value<double>(params, "kappaV")));
523 }
524};
525
526class IBMTribend : public BondedInteractionImpl<::IBMTribend> {
527public:
529 add_parameters({
530 {"kb", AutoParameter::read_only, [this]() { return get_struct().kb; }},
531 {"ind1", AutoParameter::read_only,
532 [this]() { return std::get<0>(get_struct().p_ids); }},
533 {"ind2", AutoParameter::read_only,
534 [this]() { return std::get<1>(get_struct().p_ids); }},
535 {"ind3", AutoParameter::read_only,
536 [this]() { return std::get<2>(get_struct().p_ids); }},
537 {"ind4", AutoParameter::read_only,
538 [this]() { return std::get<3>(get_struct().p_ids); }},
539 {"refShape", AutoParameter::read_only,
540 [this]() {
541 return std::string((get_struct().flat) ? "Flat" : "Initial");
542 }},
543 {"theta0", AutoParameter::read_only,
544 [this]() { return get_struct().theta0; }},
545 {"is_initialized", AutoParameter::read_only,
546 [this]() { return get_struct().is_initialized; }},
547 });
548 }
549
550private:
551 void construct_bond(VariantMap const &params) override {
552 auto const shape_name = get_value<std::string>(params, "refShape");
553 bool flat;
554 if (shape_name == "Flat") {
555 flat = true;
556 } else if (shape_name == "Initial") {
557 flat = false;
558 } else {
559 throw std::invalid_argument("Invalid value for parameter 'refShape': '" +
560 shape_name + "'");
561 }
562 auto bond = CoreBondedInteraction(
563 get_value<int>(params, "ind1"), get_value<int>(params, "ind2"),
564 get_value<int>(params, "ind3"), get_value<int>(params, "ind4"),
565 get_value<double>(params, "kb"), flat);
566 if (get_value_or<bool>(params, "is_initialized", false)) {
567 bond.theta0 = get_value<double>(params, "theta0");
568 bond.is_initialized = true;
569 }
570 m_bonded_ia = std::make_shared<::Bonded_IA_Parameters>(std::move(bond));
571 }
572};
573
575 : public BondedInteractionImpl<::OifGlobalForcesBond> {
576public:
578 add_parameters({
579 {"A0_g", AutoParameter::read_only,
580 [this]() { return get_struct().A0_g; }},
581 {"ka_g", AutoParameter::read_only,
582 [this]() { return get_struct().ka_g; }},
583 {"V0", AutoParameter::read_only, [this]() { return get_struct().V0; }},
584 {"kv", AutoParameter::read_only, [this]() { return get_struct().kv; }},
585 });
586 }
587
588private:
589 void construct_bond(VariantMap const &params) override {
590 m_bonded_ia =
591 std::make_shared<::Bonded_IA_Parameters>(CoreBondedInteraction(
592 get_value<double>(params, "A0_g"),
593 get_value<double>(params, "ka_g"), get_value<double>(params, "V0"),
594 get_value<double>(params, "kv")));
595 }
596};
597
598class OifLocalForcesBond : public BondedInteractionImpl<::OifLocalForcesBond> {
599public:
601 add_parameters({
602 {"r0", AutoParameter::read_only, [this]() { return get_struct().r0; }},
603 {"ks", AutoParameter::read_only, [this]() { return get_struct().ks; }},
604 {"kslin", AutoParameter::read_only,
605 [this]() { return get_struct().kslin; }},
606 {"phi0", AutoParameter::read_only,
607 [this]() { return get_struct().phi0; }},
608 {"kb", AutoParameter::read_only, [this]() { return get_struct().kb; }},
609 {"A01", AutoParameter::read_only,
610 [this]() { return get_struct().A01; }},
611 {"A02", AutoParameter::read_only,
612 [this]() { return get_struct().A02; }},
613 {"kal", AutoParameter::read_only,
614 [this]() { return get_struct().kal; }},
615 {"kvisc", AutoParameter::read_only,
616 [this]() { return get_struct().kvisc; }},
617 });
618 }
619
620private:
621 void construct_bond(VariantMap const &params) override {
622 m_bonded_ia =
623 std::make_shared<::Bonded_IA_Parameters>(CoreBondedInteraction(
624 get_value<double>(params, "r0"), get_value<double>(params, "ks"),
625 get_value<double>(params, "kslin"),
626 get_value<double>(params, "phi0"), get_value<double>(params, "kb"),
627 get_value<double>(params, "A01"), get_value<double>(params, "A02"),
628 get_value<double>(params, "kal"),
629 get_value<double>(params, "kvisc")));
630 }
631};
632
633class VirtualBond : public BondedInteractionImpl<::VirtualBond> {
634public:
636 m_bonded_ia =
637 std::make_shared<::Bonded_IA_Parameters>(CoreBondedInteraction());
638 }
639
640private:
641 void construct_bond(VariantMap const &) override {}
642};
643
644} // namespace Interactions
645} // namespace ScriptInterface
Data structures for bonded interactions.
int number_of_partners(Bonded_IA_Parameters const &iaparams)
Get the number of bonded partners for the specified bond.
Bind parameters in the script interface.
std::span< const boost::string_ref > valid_parameters() const final
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
virtual std::set< std::string > get_valid_parameters() const
std::shared_ptr<::Bonded_IA_Parameters > m_bonded_ia
bool operator==(BondedInteraction const &other) const
std::shared_ptr< const ::Bonded_IA_Parameters > bonded_ia() const
void do_construct(VariantMap const &params) override
virtual void construct_bond(VariantMap const &params)=0
std::shared_ptr<::Bonded_IA_Parameters > bonded_ia()
Variant do_call_method(std::string const &name, VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
Variant do_call_method(std::string const &name, VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &params) override
void construct_bond(VariantMap const &) override
Context * context() const
Responsible context.
Implementation in thermostat.cpp.
tElasticLaw
Definition ibm_triel.hpp:32
T get_value(Variant const &v)
Extract value of specific type T from a Variant.
std::unordered_map< std::string, Variant > VariantMap
Definition Variant.hpp:69
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.
Definition Variant.hpp:67
static SteepestDescentParameters params
Currently active steepest descent instance.