33 if (comm.rank() != 0) {
37 auto time = system.get_sim_time();
38 auto dt = system.get_time_step();
39 auto dists = m_obs->operator()(comm);
42 if (contacts.empty()) {
43 contacts.resize(dists.size(),
false);
46 if (first_contact_times.empty()) {
47 first_contact_times.resize(dists.size(), time);
50 for (std::size_t i = 0u; i < dists.size(); ++i) {
51 if (dists[i] < m_contact_threshold) {
52 if (not contacts[i]) {
54 first_contact_times[i] = time;
59 auto contact_time = time - first_contact_times[i] - dt;
60 if (contact_time < dt) {
64 m_data.emplace_back(contact_time);