faunus
reactioncoordinate.h
1 #pragma once
2 
3 #include "core.h"
4 
5 namespace Faunus {
6 
7 class Space;
8 
9 namespace ReactionCoordinate {
10 
21 {
22  protected:
23  std::function<double()> function = nullptr;
24  public:
26  explicit ReactionCoordinateBase(const json& j);
27  double resolution = 0.0;
28  double minimum_value = 0.0;
29  double maximum_value = 0.0;
30  std::string name;
31 
32  double operator()();
33  virtual void _to_json(json& j) const;
34  [[nodiscard]] bool
35  inRange(double coord) const;
36  virtual ~ReactionCoordinateBase() = default;
37 };
38 
39 void to_json(json& j, const ReactionCoordinateBase&
40  reaction_coordinate);
41 
42 std::unique_ptr<ReactionCoordinateBase>
43 createReactionCoordinate(const json&,
44  const Space&);
45 
47 {
48  protected:
49  std::string property;
50 
51  public:
52  SystemProperty(const json& j, const Space& spc);
53  void _to_json(json& j) const override;
54 };
55 
57 {
58  protected:
59  size_t index; // atom index
60  Point dir = {0.0, 0.0, 0.0};
61 
62  public:
63  std::string property;
64  AtomProperty(const json& j, const Space& spc);
65  void _to_json(json& j) const override;
66 };
67 
73 {
74  private:
75  size_t index;
76  Point direction = {0.0, 0.0, 0.0};
77  std::vector<size_t> indexes;
78  std::string property;
79 
80  void selectAngleWithVector(const json& j, const Space& spc);
81  void selectRinner(const json& j, const Space& spc);
82  void selectMinimumGroupDistance(const json& j, const Space& spc);
83  void selectMassCenterDistance(const json& j, const Space& spc);
84  void selectDipoleAngle(const json& j, const Space& spc, Geometry::BoundaryFunction& b);
85  void selectGyrationRadius(const Space& spc);
86  void selectAtomAtomDistance(const json& j, const Space& spc);
87  void selectMassCenterDistanceZ(const json& j, const Space& spc);
88  void selectLengthOverRadiusRatio(const json& j, const Space& spc);
89 
90  public:
91  MoleculeProperty(const json& j, const Space& spc);
92  void _to_json(json& j) const override;
93 };
94 
95 } // namespace ReactionCoordinate
96 } // namespace Faunus
nlohmann::json json
JSON object.
Definition: json_support.h:10
Eigen::Vector3d Point
3D vector used for positions, velocities, forces etc.
Definition: coordinates.h:7
double minimum_value
Minimum allowed value.
Definition: reactioncoordinate.h:28
double operator()()
Calculates reaction coordinate.
Definition: reactioncoordinate.cpp:28
Base class for reaction coordinates.
Definition: reactioncoordinate.h:20
bool inRange(double coord) const
Determines if coordinate is within [min,max].
Definition: reactioncoordinate.cpp:34
double resolution
Resolution used when binning (histograms etc.)
Definition: reactioncoordinate.h:27
virtual void _to_json(json &j) const
json serialization
Definition: reactioncoordinate.cpp:26
std::function< void(Point &)> BoundaryFunction
Function to apply PBC to a position.
Definition: core.h:30
ReactionCoordinateBase(const json &j)
constructor reads resolution, min, max
Definition: reactioncoordinate.cpp:15
Definition: reactioncoordinate.h:56
Cell list class templates.
Definition: actions.cpp:11
std::string name
Meaningful, short name. Don&#39;t use spaces or weird characters.
Definition: reactioncoordinate.h:30
double maximum_value
Maximum allowed value.
Definition: reactioncoordinate.h:29
Definition: reactioncoordinate.h:46
Placeholder for atoms and molecules.
Definition: space.h:92
Definition: reactioncoordinate.h:72