1#ifndef RP_EINSTEIN_CRYSTAL_PERTURBATION_H
2#define RP_EINSTEIN_CRYSTAL_PERTURBATION_H
4#include <util/containers/DArray.h>
29 template <
int D,
class T>
54 virtual double hamiltonian(
double unperturbedHamiltonian);
93 using PerturbationT =
typename T::Perturbation;
96 using PerturbationT::lambda_;
97 using PerturbationT::simulator;
98 using PerturbationT::system;
102 using RFieldT =
typename T::RField;
117 double ecHamiltonian_;
120 double unperturbedHamiltonian_;
123 double stateEcHamiltonian_;
126 double stateUnperturbedHamiltonian_;
129 std::string fieldFileName_;
135 void computeWcReference();
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.
Class templates for real-valued periodic fields.
PSCF package top-level namespace.