PSCF v1.3.1
rpg/fts/perturbation/Perturbation.h
1#ifndef RPG_PERTURBATION_H
2#define RPG_PERTURBATION_H
3
4#include <util/param/ParamComposite.h> // base class
5
6// Forward declarations
7namespace Util {
8 template <typename T> class DArray;
9}
10namespace Pscf {
11 namespace Prdc{
12 namespace Cuda{
13 template <int D> class RField;
14 }
15 }
16}
17
18namespace Pscf {
19namespace Rpg {
20
21 using namespace Util;
22 using namespace Prdc;
23 using namespace Prdc::Cuda;
24
25 template <int D> class System;
26 template <int D> class Simulator;
27
33 template <int D>
35 {
36
37 public:
38
43
47 virtual ~Perturbation();
48
56 virtual void readParameters(std::istream& in);
57
68 virtual void setup();
69
77 virtual double hamiltonian(double unperturbedHamiltonian);
78
84 virtual void incrementDc(DArray< RField<D> >& dc);
85
93 virtual void saveState();
94
102 virtual void restoreState();
103
109 virtual double df();
110
114 Simulator<D> const & simulator() const;
115
119 System<D> const & system() const;
120
127 double lambda() const
128 { return lambda_; }
129
135 void setLambda(double lambda);
136
137 protected:
138
143
147 System<D>& system();
148
152 double lambda_;
153
154 private:
155
157 Simulator<D>* simulatorPtr_;
158
160 System<D>* systemPtr_;
161
162 };
163
164 // Inline methods
165
166 // Return parent simulator by const reference.
167 template <int D>
169 {
170 assert(simulatorPtr_);
171 return *simulatorPtr_;
172 }
173
174 // Return parent simulator by non-const reference.
175 template <int D>
177 {
178 assert(simulatorPtr_);
179 return *simulatorPtr_;
180 }
181
182 // Return parent simulator by const reference.
183 template <int D>
184 inline System<D> const & Perturbation<D>::system() const
185 {
186 assert(systemPtr_);
187 return *systemPtr_;
188 }
189
190 // Return parent simulator by non-const reference.
191 template <int D>
193 {
194 assert(systemPtr_);
195 return *systemPtr_;
196 }
197
198 // Explicit instantiation declarations
199 extern template class Perturbation<1>;
200 extern template class Perturbation<2>;
201 extern template class Perturbation<3>;
202
203}
204}
205#endif
Field of real double precision values on an FFT mesh.
Definition cpu/RField.h:29
Base class for additive perturbations of standard FTS Hamiltonian.
virtual void incrementDc(DArray< RField< D > > &dc)
Modify the generalized forces to include perturbation.
void setLambda(double lambda)
Set the perturbation parameter value.
System< D > const & system() const
Get parent System<D> by const reference.
double lambda_
Strength of the perturbation.
double lambda() const
Get the perturbation parameter.
virtual double df()
Compute and return derivative of H w/ respect to parameter lambda.
Simulator< D > const & simulator() const
Get parent Simulator<D> by const reference.
virtual void saveState()
Save any required internal state variables.
virtual void readParameters(std::istream &in)
Read parameters from archive.
virtual double hamiltonian(double unperturbedHamiltonian)
Compute and return the perturbation to the Hamiltonian.
Perturbation(Simulator< D > &simulator)
Constructor.
virtual void setup()
Complete any required initialization.
virtual void restoreState()
Restore any required internal state variables.
Field theoretic simulator (base class).
Main class, representing a complete physical system.
Dynamically allocatable contiguous array template.
Definition DArray.h:32
ParamComposite()
Constructor.
Fields, FFTs, and utilities for periodic boundary conditions (CUDA)
Definition Reduce.cpp:14
Periodic fields and crystallography.
Definition CField.cpp:11
SCFT and PS-FTS with real periodic fields (GPU)
PSCF package top-level namespace.
Definition param_pc.dox:1
Utility classes for scientific computation.