PSCF v1.4.0
fts/perturbation/Perturbation.h
1#ifndef RP_PERTURBATION_H
2#define RP_PERTURBATION_H
3
4#include <util/param/ParamComposite.h> // base class
5
6// Forward declaration
7namespace Util { template <typename T> class DArray; }
8
9namespace Pscf {
10namespace Rp {
11
12 using namespace Util;
13
30 template <int D, class T>
32 {
33
34 public:
35
36 // Protected constructor and destructor (see below).
37
45 virtual void readParameters(std::istream& in);
46
57 virtual void setup();
58
66 virtual double hamiltonian(double unperturbedHamiltonian);
67
74
82 virtual void saveState();
83
91 virtual void restoreState();
92
98 virtual double df();
99
103 typename T::Simulator const & simulator() const;
104
108 typename T::System const & system() const;
109
116 double lambda() const
117 { return lambda_; }
118
124 void setLambda(double lambda);
125
126 protected:
127
133 Perturbation(typename T::Simulator& simulator);
134
138 virtual ~Perturbation() = default;
139
143 typename T::Simulator& simulator();
144
148 typename T::System& system();
149
153 double lambda_;
154
155 private:
156
158 typename T::Simulator* simulatorPtr_;
159
161 typename T::System* systemPtr_;
162
163 };
164
165 // Inline methods
166
167 // Return parent simulator by const reference.
168 template <int D, class T>
169 inline typename T::Simulator const & Perturbation<D,T>::simulator() const
170 {
171 assert(simulatorPtr_);
172 return *simulatorPtr_;
173 }
174
175 // Return parent simulator by non-const reference.
176 template <int D, class T>
177 inline typename T::Simulator & Perturbation<D,T>::simulator()
178 {
179 assert(simulatorPtr_);
180 return *simulatorPtr_;
181 }
182
183 // Return parent simulator by const reference.
184 template <int D, class T>
185 inline typename T::System const & Perturbation<D,T>::system() const
186 {
187 assert(systemPtr_);
188 return *systemPtr_;
189 }
190
191 // Return parent simulator by non-const reference.
192 template <int D, class T>
193 inline typename T::System & Perturbation<D,T>::system()
194 {
195 assert(systemPtr_);
196 return *systemPtr_;
197 }
198
199}
200}
201#endif
double lambda() const
Get the perturbation parameter.
T::System const & system() const
Get parent typename T::System by const reference.
virtual ~Perturbation()=default
Destructor.
virtual double df()
Compute and return derivative of H w/ respect to parameter lambda.
double lambda_
Strength of the perturbation.
virtual void restoreState()
Restore any required internal state variables.
virtual double hamiltonian(double unperturbedHamiltonian)
Compute and return the perturbation to the Hamiltonian.
void setLambda(double lambda)
Set the perturbation parameter value.
Perturbation(typename T::Simulator &simulator)
Constructor.
T::Simulator const & simulator() const
Get parent typename T::Simulator by const reference.
virtual void incrementDc(DArray< typename T::RField > &dc)
Modify the generalized forces to include perturbation.
virtual void setup()
Complete any required initialization.
virtual void saveState()
Save any required internal state variables.
virtual void readParameters(std::istream &in)
Read parameters from archive.
Dynamically allocatable contiguous array template.
Definition DArray.h:32
ParamComposite()
Constructor.
Class templates for real-valued periodic fields.
PSCF package top-level namespace.
Utility classes for scientific computation.