Simpatico  v1.10
Perturbation.cpp
1 /*
2 * Simpatico - Simulation Package for Polymeric and Molecular Liquids
3 *
4 * Copyright 2010 - 2017, The Regents of the University of Minnesota
5 * Distributed under the terms of the GNU General Public License.
6 */
7 
8 #include "Perturbation.h" // class header
9 
10 namespace McMd
11 {
12 
13  /*
14  * Constructor.
15  */
16  Perturbation::Perturbation(int size, int rank)
17  : ParamComposite(),
18  size_(size),
19  rank_(rank),
20  nParameters_(0),
21  mode_(0)
22  { setClassName("Perturbation"); }
23 
24  /*
25  * Destructor.
26  */
28  {}
29 
30  /*
31  * Read parameter(s) and set system parameters.
32  */
33  void Perturbation::readParameters(std::istream& in)
34  {
35  read<int>(in, "mode", mode_);
36  read<int>(in, "nParameters", nParameters_);
41  if (mode_ == 0) {
42  readDMatrix<double>(in, "parameters", parameters_, size_, nParameters_);
43  for (int i = 0; i < nParameters_; ++i) {
45  }
46  } else if (mode_ == 1) {
47  readDArray<double>(in, "initialParameter", initialParameter_, nParameters_);
48  readDArray<double>(in, "finalParameter", finalParameter_, nParameters_);
49  int i, j;
50  for (i = 0; i < nParameters_; ++i) {
51  parameters_(0,i) = initialParameter_[i];
52  parameters_(size_-1,i) = finalParameter_[i];
53  for (j= 1; j < size_-1; ++j) {
54  parameters_(j, i) = parameters_(0, i)
55  + j*((parameters_(size_-1, i) - parameters_(0, i))/(size_-1));
56  }
57  }
58  for (i = 0; i < nParameters_; ++i) {
59  parameter_[i] = parameters_(rank_, i);
60  }
61  }
62 
63  setParameter(); // Modify parameter of associated System
64  }
65 
66  /*
67  * Load internal state from an archive.
68  */
70  {
71  loadParameter<int>(ar, "mode", mode_);
72  loadParameter<int>(ar, "nParameters", nParameters_);
77  if (mode_ == 0) {
78  loadDMatrix<double>(ar, "parameters", parameters_, size_, nParameters_);
79  } else if (mode_ == 1) {
80  loadDArray<double>(ar, "initialParameter", initialParameter_, nParameters_);
81  loadDArray<double>(ar, "finalParameter", finalParameter_, nParameters_);
82  ar & parameters_;
83  }
84  ar & parameter_;
85  setParameter(); // Modify parameter of associated System
86  }
87 
88  /*
89  * Save internal state to an archive.
90  */
92  {
93  ar & mode_;
94  ar & nParameters_;
95  if (mode_ == 0) {
96  ar & parameters_;
97  } else if (mode_ == 1) {
98  ar & initialParameter_;
99  ar & finalParameter_;
100  ar & parameters_;
101  }
102  ar & parameter_;
103  }
104 
105  /*
106  * Set the perturbation parameter.
107  *
108  * Set the parameter of the associated system.
109  */
111  {
112  parameter_ = parameter; // Set the class member.
113  setParameter(); // Modify associated System.
114  }
115 
116  /*
117  * Get parameter i of system id.
118  */
119  double Perturbation::parameter(int i, int id)
120  { return parameters_(id,i); }
121 
122  /*
123  * Get number of parameters per System.
124  */
126  { return nParameters_; }
127 
128 }
DArray< double > parameter_
Value of the perturbation parameter for the associated System.
Definition: Perturbation.h:172
void allocate(int capacity1, int capacity2)
Allocate memory for a matrix.
Definition: DMatrix.h:170
int mode_
mode 0: parameters of all replica systems are specified.
Definition: Perturbation.h:166
virtual void loadParameters(Serializable::IArchive &ar)
Load internal state from an archive.
int rank_
Index for this system (e.g., communicator size)
Definition: Perturbation.h:155
Saving / output archive for binary ostream.
double parameter(int i, int id)
Get parameter i of system id.
DArray< double > finalParameter_
Value of the perturbation parameter for the last replica System.
Definition: Perturbation.h:184
Perturbation(int size, int rank)
Constructor.
int getNParameters() const
Gets the number of parameters per system.
virtual void setParameter()=0
Sets the perturbation parameter in the associated system.
DMatrix< double > parameters_
Value of the perturbation parameter for all the replica Systems.
Definition: Perturbation.h:190
int nParameters_
Number of perturbation parameters associated with a System.
Definition: Perturbation.h:160
Saving archive for binary istream.
Single-processor Monte Carlo (MC) and molecular dynamics (MD).
virtual ~Perturbation()
Destructor.
void setClassName(const char *className)
Set class name string.
virtual void save(Serializable::OArchive &ar)
Save internal state to an archive.
void allocate(int capacity)
Allocate the underlying C array.
Definition: DArray.h:191
int size_
Number of systems (e.g., communicator size)
Definition: Perturbation.h:150
An object that can read multiple parameters from file.
void readParameters(std::istream &in)
Read perturbation parameter(s) from file.
DArray< double > initialParameter_
Value of the perturbation parameter for the first replica System.
Definition: Perturbation.h:178