Loading...
Searching...
No Matches
Hessian.h
Go to the documentation of this file.
1/*
2** This file is part of eOn.
3**
4** SPDX-License-Identifier: BSD-3-Clause
5**
6** Copyright (c) 2010--present, eOn Development Team
7** All rights reserved.
8**
9** Repo:
10** https://github.com/TheochemUI/eOn
11*/
12#pragma once
13#include "Eigen.h"
14#include "EonLogger.h"
15
16#include "FiniteDifference.h"
17#include "Matter.h"
18#include "Parameters.h"
19
20#include <vector>
21
22namespace eonc {
23
28bool trivialModeCountIsPhysical(long removed, long fixedAtoms);
29
31inline constexpr double kEvToWavenumber = 8065.543937349212;
32
36std::vector<double> cartesianMode(const Matter &matter, const VectorXi &atoms,
37 const Eigen::Ref<const VectorXd> &mode);
38
43bool writeNormalModes(Matter &matter, const VectorXi &atoms,
44 const VectorXd &eigenvalues, const MatrixXd &modes,
45 const std::string &path);
46
47class Hessian {
48public:
49 Hessian(const Parameters &params, Matter *matter);
50 ~Hessian() = default;
51
52 MatrixXd getHessian(Matter *matterIn, const VectorXi &atomsIn);
53 VectorXd getFreqs(Matter *matterIn, const VectorXi &atomsIn);
54 VectorXd removeZeroFreqs(const VectorXd &freqs);
58 [[nodiscard]] const MatrixXd &getModes() const noexcept { return modes; }
61 void writeHessianFile(bool on) noexcept { writeFile = on; }
62
63private:
66
68 VectorXd freqs;
70 bool writeFile = true;
71
72 VectorXi atoms;
73 bool calculate();
74 bool finalizeHessian(int size);
75 bool calculateColored(double cutoff, double dr, FdScheme scheme);
76 bool calculateSerial(double dr, FdScheme scheme);
77 bool calculateBatched(double dr, FdScheme scheme);
79};
80
83std::vector<int>
84greedyColorCutoffGraph(const std::vector<std::vector<int>> &adj);
85
89std::vector<int> colorMobileCutoffGraph(const Matter &matter,
90 const VectorXi &atoms, double cutoff);
91
92} // namespace eonc
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, eOnStorageOrder > MatrixXd
Definition Eigen.h:33
bool writeFile
Definition Hessian.h:70
eonc::log::Scoped log
Definition Hessian.h:78
Matter * matter
Definition Hessian.h:64
MatrixXd modes
Definition Hessian.h:69
void writeHessianFile(bool on) noexcept
Whether a finished Hessian goes to hessian.dat (on by default).
Definition Hessian.h:61
VectorXd freqs
Definition Hessian.h:68
Hessian(const Parameters &params, Matter *matter)
Definition Hessian.cpp:81
MatrixXd getHessian(Matter *matterIn, const VectorXi &atomsIn)
Definition Hessian.cpp:88
bool calculateSerial(double dr, FdScheme scheme)
Definition Hessian.cpp:542
VectorXd removeZeroFreqs(const VectorXd &freqs)
Definition Hessian.cpp:721
VectorXi atoms
Definition Hessian.h:72
bool calculate()
Definition Hessian.cpp:271
bool calculateBatched(double dr, FdScheme scheme)
Definition Hessian.cpp:337
const Parameters & parameters
Definition Hessian.h:65
bool finalizeHessian(int size)
Definition Hessian.cpp:640
const MatrixXd & getModes() const noexcept
Eigenvectors of the mass-weighted Hessian, one column per eigenvalue of getFreqs(),...
Definition Hessian.h:58
~Hessian()=default
MatrixXd hessian
Definition Hessian.h:67
bool calculateColored(double cutoff, double dr, FdScheme scheme)
Definition Hessian.cpp:427
VectorXd getFreqs(Matter *matterIn, const VectorXi &atomsIn)
Definition Hessian.cpp:102
RAII resource manager for the ARTn C library with global synchronization.
FdScheme
Real finite-difference scheme for the assembled Hessian and for Lanczos/Davidson Hessian-vector produ...
constexpr double kEvToWavenumber
1 eV in cm^-1, e / (h c) from the exact SI values.
Definition Hessian.h:31
bool writeNormalModes(Matter &matter, const VectorXi &atoms, const VectorXd &eigenvalues, const MatrixXd &modes, const std::string &path)
Writes one frame of matter per mode to path, the mode as the displacements section and mode_eigenvalu...
Definition Hessian.cpp:775
bool trivialModeCountIsPhysical(long removed, long fixedAtoms)
Whether removed zero-frequency modes are what the structure's symmetries give: 6 for a free cluster (...
Definition Hessian.cpp:798
std::vector< int > greedyColorCutoffGraph(const std::vector< std::vector< int > > &adj)
Greedy coloring of an undirected graph.
Definition Hessian.cpp:241
std::vector< int > colorMobileCutoffGraph(const Matter &matter, const VectorXi &atoms, double cutoff)
Conflict graph on atoms: two mobile atoms share an edge when their closed cutoff neighborhoods inters...
Definition Hessian.cpp:266
std::vector< double > cartesianMode(const Matter &matter, const VectorXi &atoms, const Eigen::Ref< const VectorXd > &mode)
Cartesian displacement of every atom along one mass-weighted mode over the mobile degrees of freedom ...
Definition Hessian.cpp:748
RAII helper for class-scoped logging.
Definition EonLogger.h:171