PSCF v1.4.0
fts/perturbation/EinsteinCrystalPerturbation.h
1#ifndef RP_EINSTEIN_CRYSTAL_PERTURBATION_H
2#define RP_EINSTEIN_CRYSTAL_PERTURBATION_H
3
4#include <util/containers/DArray.h> // member
5#include <iostream>
6
7namespace Pscf {
8namespace Rp {
9
10 using namespace Util;
11
29 template <int D, class T>
30 class EinsteinCrystalPerturbation : public T::Perturbation
31 {
32
33 public:
34
35 // Protected constructor and destructor (see below).
36
42 virtual void readParameters(std::istream& in);
43
47 virtual void setup();
48
54 virtual double hamiltonian(double unperturbedHamiltonian);
55
62
66 virtual double df();
67
71 virtual void saveState();
72
76 virtual void restoreState();
77
78 protected:
79
85 EinsteinCrystalPerturbation(typename T::Simulator& simulator);
86
91
92 // Alias for base class.
93 using PerturbationT = typename T::Perturbation;
94
95 // Inherited protected members (selected).
96 using PerturbationT::lambda_;
97 using PerturbationT::simulator;
98 using PerturbationT::system;
99
100 private:
101
102 using RFieldT = typename T::RField;
103
104 // Parameters used in Einstein crystal integration
105 DArray<double> epsilon_;
106
107 // Reference w field
109
110 // Eigenvector components of the reference w fields
112
113 // Work space
114 RFieldT dw_;
115
116 // Current Einstein crystal Hamiltonian
117 double ecHamiltonian_;
118
119 // Current unperturbed Hamiltonian
120 double unperturbedHamiltonian_;
121
122 // Saved Einstein crystal Hamiltonian
123 double stateEcHamiltonian_;
124
125 // Saved unperturbed Hamiltonian
126 double stateUnperturbedHamiltonian_;
127
128 // Reference field file name
129 std::string fieldFileName_;
130
131 // Have epsilon values been set?
132 bool hasEpsilon_;
133
134 // Compute eigenvector components of the reference field.
135 void computeWcReference();
136
137 };
138
139}
140}
141#endif
virtual void setup()
Complete any required initialization.
virtual double hamiltonian(double unperturbedHamiltonian)
Compute and return the perturbation to the Hamiltonian.
EinsteinCrystalPerturbation(typename T::Simulator &simulator)
Constructor.
virtual void saveState()
Save any required internal state variables.
virtual void restoreState()
Restore any required internal state variables.
virtual void incrementDc(DArray< typename T::RField > &dc)
Modify the generalized forces to include perturbation.
~EinsteinCrystalPerturbation()=default
Destructor.
virtual double df()
Compute and return derivative of free energy w/ respect to lambda.
virtual void readParameters(std::istream &in)
Read body of parameter file block and initialize.
Dynamically allocatable contiguous array template.
Definition DArray.h:32
Class templates for real-valued periodic fields.
PSCF package top-level namespace.