94 RingPolymer(
long nAtoms, std::vector<double> masses,
95 std::vector<int> atomicNumbers, std::vector<char> free,
102 [[nodiscard]]
const std::vector<VectorXd> &
beads()
const {
return q_; }
103 [[nodiscard]]
const std::vector<VectorXd> &
momenta()
const {
return p_; }
111 void setHyperplane(
const VectorXd &normal,
const VectorXd &origin);
121 [[nodiscard]] VectorXd
centroid()
const;
132 void kick(
double h,
bool dropParallel);
136 void toNormal(
const std::vector<VectorXd> &src,
137 std::vector<VectorXd> &dst)
const;
138 void fromNormal(
const std::vector<VectorXd> &src,
139 std::vector<VectorXd> &dst)
const;
154 std::vector<VectorXd>
q_;
155 std::vector<VectorXd>
p_;
156 std::vector<VectorXd>
f_;
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, eOnStorageOrder > MatrixXd
VectorXd centroidVelocity() const
std::vector< int > atomicNumbers_
void setAllBeads(const double *q)
std::vector< long > freeIndex_
std::vector< VectorXd > pnm_
void thermostat(double h)
std::vector< ModeGle > gle_
std::vector< double > mass_
std::vector< VectorXd > f_
void setMomenta(const std::vector< VectorXd > &momenta)
One momentum vector of length 3 * nAtoms per bead; fixed coordinates are zeroed.
void nveStep(Potential &pot, const double *box)
Thermostat-free RPMD step: velocity Verlet with the free ring propagated exactly in normal modes.
RingPolymer(long nAtoms, std::vector< double > masses, std::vector< int > atomicNumbers, std::vector< char > free, Options opt)
Sample sample(Potential &pot, const double *box, long equilibration, long production)
void toNormal(const std::vector< VectorXd > &src, std::vector< VectorXd > &dst) const
void setBeads(const std::vector< VectorXd > &beads)
One position vector of length 3 * nAtoms per bead.
VectorXd centroid() const
std::vector< VectorXd > p_
void forces(Potential &pot, const double *box)
std::vector< char > free_
void setHyperplane(const VectorXd &normal, const VectorXd &origin)
Hold n · (q_centroid - origin) = 0.
std::vector< VectorXd > q_
void kick(double h, bool dropParallel)
void step(Potential &pot, const double *box, bool record)
const std::vector< VectorXd > & momenta() const
void fromNormal(const std::vector< VectorXd > &src, std::vector< VectorXd > &dst) const
const std::vector< VectorXd > & beads() const
std::vector< VectorXd > qnm_
MatrixXd normalModeMatrix(long nBeads)
Orthogonal bead-to-normal-mode matrix. Row k is mode k.
VectorXd trotterEigenvalues(long nBeads)
Dimensionless free-ring eigenvalues, mode 0 equal to 0.
void requireTrotterSprings(const std::string &springs, const char *use)
Economised springs and a normal-mode GLE are refused.
Springs
Trotter springs, or economised springs fitted to harmonic radii of gyration up to a maximum frequency...
VectorXd ecoEigenvalues(long nBeads, double xmax)
Thermostat
PILE-L, or a normal-mode GLE on the internal modes with a separate Langevin thermostat on the centroi...
double ecoOmegaMax
Highest physical frequency the economised springs reproduce.
std::string gleFile
Normal-mode GLE matrices.
double pileScale
Scales the critical PILE damping of the internal modes.
double pileTau
Centroid Langevin time, in the same time unit as dt.
double meanForce
Average of n · f_centroid.