41 if (n_bonded == m_n_bonded and max_type == m_max_type and
43 std::ranges::fill(m_data, 0.);
47 m_n_bonded = n_bonded;
48 m_max_type = max_type;
51 constexpr std::size_t n_coulomb = 2;
52 constexpr std::size_t n_dipolar = 2;
53#ifdef ESPRESSO_VIRTUAL_SITES
54 constexpr std::size_t n_vs = 1;
56 constexpr std::size_t n_vs = 0;
59 constexpr std::size_t n_dpd = 1;
61 constexpr std::size_t n_dpd = 0;
63 constexpr std::size_t n_ext_fields = 1;
64 constexpr std::size_t n_kinetic_lin = 1;
65 constexpr std::size_t n_kinetic_rot = 1;
67 auto const n_non_bonded = get_non_bonded_offset(max_type, max_type) + 1ul;
68 auto const n_elements = n_kinetic_lin + n_kinetic_rot + n_bonded +
69 2ul * n_non_bonded + n_coulomb + n_dipolar + n_vs +
71 m_data = std::vector<double>(m_chunk_size * n_elements);
74 kinetic_lin = std::span<double>(m_data.data(), m_chunk_size);
77 coulomb = std::span<double>(
bonded.end(), n_coulomb * m_chunk_size);
78 dipolar = std::span<double>(
coulomb.end(), n_dipolar * m_chunk_size);
87 (m_data.data() + m_data.size()));