36 auto const max_cut_bonded = std::accumulate(
38 auto constexpr visitor = [](
auto const &bond) {
return bond.cutoff(); };
39 return std::max(max_cut, std::visit(visitor, *kv.second));
43 auto const any_dihedrals = std::ranges::any_of(*
this, [](
auto const &kv) {
44 return (std::holds_alternative<DihedralBond>(*kv.second) or
45 std::holds_alternative<TabulatedDihedralBond>(*kv.second));
50 return (any_dihedrals) ? 2 * max_cut_bonded : max_cut_bonded;
54 n_thermalized_bonds = 0;
55#ifdef ESPRESSO_BOND_CONSTRAINT
58 for (
auto const &bond : std::views::elements<1>(*
this)) {
59 if (std::holds_alternative<ThermalizedBond>(*bond)) {
60 ++n_thermalized_bonds;
62#ifdef ESPRESSO_BOND_CONSTRAINT
63 if (std::holds_alternative<RigidBond>(*bond)) {
69 system->on_short_range_ia_change();
70 system->on_thermostat_param_change();
76 if (
auto bond = std::get_if<ThermalizedBond>(ptr.get())) {
77 bond->set_thermostat_view(system.thermostat);
79 if (
auto bond = std::get_if<IBMVolCons>(ptr.get())) {
80 system.immersed_boundaries->register_softID(*bond);
82 if (
auto bond = std::get_if<IBMTriel>(ptr.get())) {
83 bond->initialize(*system.box_geo, *system.cell_structure);
85 if (
auto bond = std::get_if<IBMTribend>(ptr.get())) {
86 bond->initialize(*system.box_geo, *system.cell_structure);
91 if (
auto bond = std::get_if<ThermalizedBond>(ptr.get())) {
92 bond->unset_thermostat_view();
93 n_thermalized_bonds = -1;
95 if (
auto bond = std::get_if<IBMVolCons>(ptr.get())) {
96 bond->unset_volumes_view();
98#ifdef ESPRESSO_BOND_CONSTRAINT
99 if (std::get_if<RigidBond>(ptr.get())) {