ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
Loading...
Searching...
No Matches
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.