48 auto const get_obs_contribs = [obs_dim,
51 return std::vector<Variant>(views.begin(), views.end());
53 assert(obs_dim == 9ul);
54 assert(views.size() % 9ul == 0ul);
55 std::vector<Variant> out;
56 for (std::size_t i = 0ul; i < views.size() / 9ul; ++i) {
59 auto const trace = view[0] + view[4] + view[8];
60 out.emplace_back(trace / 3.);
62 auto const flat_matrix = std::vector<double>(view.begin(), view.end());
63 out.emplace_back(flat_matrix);
69 auto const get_obs_contrib =
71 return get_obs_contribs(views)[0];
74 std::unordered_map<std::string, Variant> dict;
75 dict[
"kinetic"] = get_obs_contrib(obs.
kinetic);
79 auto values = std::vector<double>(obs_dim);
80 for (std::size_t i = 0; i < obs_dim; ++i) {
83 dict[
"total"] = get_obs_contrib({values.data(), obs_dim});
87 for (
int bond_id = 0; bond_id < n_bonds; ++bond_id) {
89 dict[
"bonded," + std::to_string(bond_id)] =
94 auto const n_nonbonded =
96 for (
int i = 0; i < n_nonbonded; ++i) {
97 for (
int j = i; j < n_nonbonded; ++j) {
98 auto const indices = std::to_string(i) +
"," + std::to_string(j);
99 dict[
"non_bonded_intra," + indices] =
101 dict[
"non_bonded_inter," + indices] =
108 auto const values = get_obs_contribs(obs.
coulomb);
109 for (std::size_t i = 0; i < values.size(); ++i) {
110 dict[
"coulomb," + std::to_string(i)] = values[i];
117 auto const values = get_obs_contribs(obs.
dipolar);
118 for (std::size_t i = 0; i < values.size(); ++i) {
119 dict[
"dipolar," + std::to_string(i)] = values[i];
127 for (std::size_t i = 0; i < values.size(); ++i) {
128 dict[
"virtual_sites," + std::to_string(i)] = values[i];
139 if (
name ==
"calculate_energy") {
140 auto const obs = system.calculate_energy();
143 if (
name ==
"calculate_scalar_pressure") {
144 auto const obs = system.calculate_pressure();
147 if (
name ==
"calculate_pressure_tensor") {
148 auto const obs = system.calculate_pressure();
BondedInteractionsMap bonded_ia_params
Field containing the parameters of the bonded ia types.
Data structures for bonded interactions.
auto get_next_key() const
Observable for the pressure and energy.
Utils::Span< double > kinetic
Contribution from linear and angular kinetic energy (accumulated).
auto get_chunk_size() const
Utils::Span< double > dipolar
Contribution(s) from dipolar interactions.
Utils::Span< double > bonded_contribution(int bond_id) const
Get contribution from a bonded interaction.
Utils::Span< double > non_bonded_intra_contribution(int type1, int type2) const
Get contribution from a non-bonded intramolecular interaction.
double accumulate(double acc=0.0, std::size_t column=0) const
Accumulate values.
Utils::Span< double > virtual_sites
Contribution from virtual sites (accumulated).
Utils::Span< double > external_fields
Contribution from external fields (accumulated).
Utils::Span< double > non_bonded_inter_contribution(int type1, int type2) const
Get contribution from a non-bonded intermolecular interaction.
Utils::Span< double > coulomb
Contribution(s) from Coulomb interactions.
Variant do_call_method(std::string const &name, VariantMap const ¶meters) override
boost::string_ref name() const
auto const & get_system() const
std::shared_ptr< InteractionsNonBonded > nonbonded_ias
A stripped-down version of std::span from C++17.
DEVICE_QUALIFIER constexpr pointer data() const
This file contains the defaults for ESPResSo.
static auto get_summary(::System::System const &system, Observable_stat const &obs, bool const calc_sp)
Generate an observable summary.
std::unordered_map< std::string, Variant > VariantMap
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.
Various procedures concerning interactions between particles.