ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
Loading...
Searching...
No Matches
properties.hpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2010-2022 The ESPResSo project
3 *
4 * This file is part of ESPResSo.
5 *
6 * ESPResSo is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * ESPResSo is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#pragma once
21
22/** @file properties.hpp
23 * This file contains interface functionality for extracting particle properties
24 * via a particle traits class.
25 */
26namespace ParticleObservables {
27template <class DoF> struct traits;
28
29namespace detail {
30template <class T> struct decay {
31 using type = std::decay_t<T>;
32};
33
34template <class U> struct decay<std::reference_wrapper<U>> {
35 using type = std::decay_t<U>;
36};
37} // namespace detail
38
39template <class Particle>
41
42struct Identity {
43 template <class Particle, class Traits = default_traits<Particle>>
44 decltype(auto) operator()(Particle const &p,
45 Traits particle_traits = {}) const {
46 return particle_traits.id(p);
47 }
48};
49
50struct Force {
51 template <class Particle, class Traits = default_traits<Particle>>
52 decltype(auto) operator()(Particle const &p,
53 Traits particle_traits = {}) const {
54 return particle_traits.force(p);
55 }
56};
57
58struct Position {
59 template <class Particle, class Traits = default_traits<Particle>>
60 decltype(auto) operator()(Particle const &p,
61 Traits particle_traits = {}) const {
62 return particle_traits.position(p);
63 }
64};
65
66struct Velocity {
67 template <class Particle, class Traits = default_traits<Particle>>
68 decltype(auto) operator()(Particle const &p,
69 Traits particle_traits = {}) const {
70 return particle_traits.velocity(p);
71 }
72};
73
74struct Director {
75 template <class Particle, class Traits = default_traits<Particle>>
76 decltype(auto) operator()(Particle const &p,
77 Traits particle_traits = {}) const {
78 return particle_traits.director(p);
79 }
80};
81
83 template <class Particle, class Traits = default_traits<Particle>>
84 decltype(auto) operator()(Particle const &p,
85 Traits particle_traits = {}) const {
86 return particle_traits.velocity_body(p);
87 }
88};
89
91 template <class Particle, class Traits = default_traits<Particle>>
92 decltype(auto) operator()(Particle const &p,
93 Traits particle_traits = {}) const {
94 return particle_traits.angular_velocity(p);
95 }
96};
97
99 template <class Particle, class Traits = default_traits<Particle>>
100 decltype(auto) operator()(Particle const &p,
101 Traits particle_traits = {}) const {
102 return particle_traits.angular_velocity_body(p);
103 }
104};
105
106struct Mass {
107 template <class Particle, class Traits = default_traits<Particle>>
108 decltype(auto) operator()(Particle const &p,
109 Traits particle_traits = {}) const {
110 return particle_traits.mass(p);
111 }
112};
113
114struct Charge {
115 template <class Particle, class Traits = default_traits<Particle>>
116 decltype(auto) operator()(Particle const &p,
117 Traits particle_traits = {}) const {
118 return particle_traits.charge(p);
119 }
120};
121
123 template <class Particle, class Traits = default_traits<Particle>>
124 decltype(auto) operator()(Particle const &p,
125 Traits particle_traits = {}) const {
126 return particle_traits.dipole_moment(p);
127 }
128};
129
131 template <class Particle, class Traits = default_traits<Particle>>
132 decltype(auto) operator()(Particle const &p,
133 Traits particle_traits = {}) const {
134 return particle_traits.dipole_field(p);
135 }
136};
137} // namespace ParticleObservables
STL namespace.
Struct holding all information for one particle.
Definition Particle.hpp:450