SSAGES  0.1
A MetaDynamics Package
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Groups Pages
StringMethod.h
1 
22 #pragma once
23 
24 #include <numeric>
25 
26 #include "Method.h"
27 #include <fstream>
28 
29 namespace SSAGES
30 {
32 
38  class StringMethod : public Method
39  {
40  protected:
41 
43  std::vector<double> centers_;
44 
46  std::vector<double> newcenters_;
47 
49 
52  std::vector<std::vector<double> > worldstring_;
53 
55  int mpiid_;
56 
58  std::vector<double> tol_;
59 
61  int numnodes_;
62 
64  unsigned int maxiterator_;
65 
67  std::vector<double> cvspring_;
68 
70  unsigned int iterator_;
71 
73  uint iteration_;
74 
76  std::ofstream stringout_;
77 
80 
82  int recneigh_;
83 
85  std::vector<std::vector<double>> prev_positions_;
86 
88  std::vector<std::vector<double>> prev_velocities_;
89 
91  std::vector<std::vector<int>> prev_IDs_;
92 
94  virtual void StringUpdate() = 0;
95 
97 
102  double distance(const std::vector<double>& x, const std::vector<double>& y) const
103  {
104  double distance = 0;
105  for (size_t i = 0; i < x.size(); i++)
106  distance += pow((x[i] - y[i]),2);
107 
108  return sqrt(distance);
109  }
110 
112  void PrintString(const CVList& CV);
113 
115 
119  void GatherNeighbors(std::vector<double> *lcv0, std::vector<double> *ucv0);
120 
122 
125  void StringReparam(double alpha_star);
126 
128 
131  void UpdateWorldString(const CVList& cvs);
132 
134  bool TolCheck() const
135  {
136  if(tol_.size() == 0)
137  return false;
138 
139  for(size_t i = 0; i < centers_.size(); i++)
140  {
141  if(fabs(centers_[i] - worldstring_[mpiid_][i]) > tol_[i])
142  {
143  return false;
144  }
145  }
146 
147  return true;
148  }
149 
151 
158  bool CheckEnd(const CVList& CV);
159 
160  public:
162 
170  StringMethod(const MPI_Comm& world,
171  const MPI_Comm& comm,
172  const std::vector<double>& centers,
173  unsigned int maxiterations,
174  const std::vector<double> cvspring,
175  unsigned int frequency) :
176  Method(frequency, world, comm), centers_(centers),
177  maxiterator_(maxiterations),
178  cvspring_(cvspring), iterator_(1), iteration_(0)
179  {
180  newcenters_.resize(centers_.size(), 0);
181  }
182 
184  void PreSimulation(Snapshot* snapshot, const class CVManager& cvmanager) override;
185 
187  virtual void PostIntegration(Snapshot* snapshot, const class CVManager& cvmanager) override = 0;
188 
189  // Post-simulation hook.
190  void PostSimulation(Snapshot*, const class CVManager&) override
191  {
192  stringout_.close();
193  }
194 
196 
202  void SetTolerance(std::vector<double> tol)
203  {
204  for(auto& t : tol)
205  tol_.push_back(t);
206  }
207 
209  void SetSendRecvNeighbors();
210 
212  static StringMethod* Build(const Json::Value& json,
213  const MPI_Comm& world,
214  const MPI_Comm& comm,
215  const std::string& path);
216 
218  virtual ~StringMethod() {}
219  };
220 }
221 
int sendneigh_
Neighbor to send info to.
Definition: StringMethod.h:79
double distance(const std::vector< double > &x, const std::vector< double > &y) const
Helper function for calculating distances.
Definition: StringMethod.h:102
StringMethod(const MPI_Comm &world, const MPI_Comm &comm, const std::vector< double > &centers, unsigned int maxiterations, const std::vector< double > cvspring, unsigned int frequency)
Constructor.
Definition: StringMethod.h:170
Collective variable manager.
Definition: CVManager.h:40
bool TolCheck() const
Check whether tolerance criteria has been met.
Definition: StringMethod.h:134
std::vector< CollectiveVariable * > CVList
List of Collective Variables.
Definition: types.h:51
void SetSendRecvNeighbors()
Communicate neighbor lists over MPI.
String base class for FTS, Swarm, and elastic band.
Definition: StringMethod.h:38
std::vector< std::vector< double > > prev_velocities_
Store velocities for starting trajectories.
Definition: StringMethod.h:88
std::vector< double > tol_
Tolerance criteria for determining when to stop string (default 0 if no tolerance criteria) ...
Definition: StringMethod.h:58
std::ofstream stringout_
Output stream for string data.
Definition: StringMethod.h:76
Class containing a snapshot of the current simulation in time.
Definition: Snapshot.h:43
void GatherNeighbors(std::vector< double > *lcv0, std::vector< double > *ucv0)
Gather neighbors over MPI.
std::vector< double > centers_
CV starting location values.
Definition: StringMethod.h:43
uint iteration_
The global method iteration.
Definition: StringMethod.h:73
std::vector< double > newcenters_
CV starting location values.
Definition: StringMethod.h:46
Interface for Method implementations.
Definition: Method.h:43
bool CheckEnd(const CVList &CV)
Check if method reached one of the exit criteria.
int numnodes_
Number of nodes on a string.
Definition: StringMethod.h:61
unsigned int maxiterator_
Maximum cap on number of string method iterations performed.
Definition: StringMethod.h:64
int recneigh_
Neighbor to gain info from.
Definition: StringMethod.h:82
std::vector< std::vector< int > > prev_IDs_
Store atom IDs for starting trajectories.
Definition: StringMethod.h:91
int mpiid_
The node this belongs to.
Definition: StringMethod.h:55
void UpdateWorldString(const CVList &cvs)
Update the world string over MPI.
void StringReparam(double alpha_star)
Reparameterize the string.
void PrintString(const CVList &CV)
Prints the CV positions to file.
static StringMethod * Build(const Json::Value &json, const MPI_Comm &world, const MPI_Comm &comm, const std::string &path)
Build a derived method from JSON node.
virtual void PostIntegration(Snapshot *snapshot, const class CVManager &cvmanager) override=0
Post-integration hook.
unsigned int iterator_
The local method iterator.
Definition: StringMethod.h:70
std::vector< std::vector< double > > worldstring_
The world's strings centers for each CV.
Definition: StringMethod.h:52
void SetTolerance(std::vector< double > tol)
Set the tolerance for quitting method.
Definition: StringMethod.h:202
std::vector< double > cvspring_
Vector of spring constants.
Definition: StringMethod.h:67
void PostSimulation(Snapshot *, const class CVManager &) override
Method call post simulation.
Definition: StringMethod.h:190
virtual void StringUpdate()=0
Updates the position of the string.
void PreSimulation(Snapshot *snapshot, const class CVManager &cvmanager) override
Pre-simulation hook.
virtual ~StringMethod()
Destructor.
Definition: StringMethod.h:218
std::vector< std::vector< double > > prev_positions_
Store positions for starting trajectories.
Definition: StringMethod.h:85