33 auto const max_cut_bonded = std::accumulate(
35 auto constexpr visitor = [](
auto const &bond) {
return bond.cutoff(); };
36 return std::max(max_cut, std::visit(visitor, *kv.second));
40 auto const any_dihedrals = std::ranges::any_of(*
this, [](
auto const &kv) {
41 return (std::holds_alternative<DihedralBond>(*kv.second) or
42 std::holds_alternative<TabulatedDihedralBond>(*kv.second));
47 return (any_dihedrals) ? 2 * max_cut_bonded : max_cut_bonded;
51 n_thermalized_bonds = 0;
52#ifdef ESPRESSO_BOND_CONSTRAINT
55 for (
auto const &bond : std::views::elements<1>(*
this)) {
56 if (std::holds_alternative<ThermalizedBond>(*bond)) {
57 ++n_thermalized_bonds;
59#ifdef ESPRESSO_BOND_CONSTRAINT
60 if (std::holds_alternative<RigidBond>(*bond)) {
66 system->on_short_range_ia_change();
67 system->on_thermostat_param_change();
73 if (
auto bond = std::get_if<ThermalizedBond>(ptr.get())) {
74 bond->set_thermostat_view(system.thermostat);
76 if (
auto bond = std::get_if<IBMVolCons>(ptr.get())) {
77 system.immersed_boundaries->register_softID(*bond);
79 if (
auto bond = std::get_if<IBMTriel>(ptr.get())) {
80 bond->initialize(*system.box_geo, *system.cell_structure);
82 if (
auto bond = std::get_if<IBMTribend>(ptr.get())) {
83 bond->initialize(*system.box_geo, *system.cell_structure);
88 if (
auto bond = std::get_if<ThermalizedBond>(ptr.get())) {
89 bond->unset_thermostat_view();
90 n_thermalized_bonds = -1;
92 if (
auto bond = std::get_if<IBMVolCons>(ptr.get())) {
93 bond->unset_volumes_view();
95#ifdef ESPRESSO_BOND_CONSTRAINT
96 if (std::get_if<RigidBond>(ptr.get())) {