103 {
104 auto objf = std::make_shared<BGSDObjectiveFunction>(
108 int iteration = 0;
109 const int max_iter =
params.optimizer_options().max_iterations;
110 QUILL_LOG_DEBUG(
112 "starting optimization of H with params alpha and beta: {:.2f} {:.2f}",
113 params.bgsd_options().alpha,
params.bgsd_options().beta);
114 while (iteration < max_iter && (!objf->isConvergedH() || iteration == 0)) {
115 if (!std::isfinite(objf->getEnergy())) {
116 break;
117 }
118 optim->step(
params.optimizer_options().max_move);
120 "iteration {} Henergy, gradientHnorm, and Venergy: "
121 "{:.8f} {:.8f} {:.8f}",
122 iteration, objf->getEnergy(), objf->getGradientnorm(),
123 saddle->getPotentialEnergy());
124 iteration++;
125 }
130 int iter2 = 0;
131 while (iter2 < max_iter && (!objf2->isConvergedV() || iter2 == 0)) {
132 if (objf2->isConvergedIP() || !std::isfinite(objf2->getEnergy())) {
133 break;
134 }
135 optim2->step(
params.optimizer_options().max_move);
137 "gradient squared iteration {} Henergy, gradientHnorm, "
138 "and Venergy: {:.8f} {:.8f} {:.8f}",
139 iteration, objf2->getEnergy(), objf2->getGradientnorm(),
140 saddle->getPotentialEnergy());
141 ++iteration;
142 ++iter2;
143 }
144
146
148 for (
int i = 0; i <
saddle->numberOfAtoms(); i++) {
149 for (int j = 0; j < 3; j++) {
150 if (
saddle->getFixed(i)) {
152 };
153 }
154 }
155 eonc::safemath::safe_normalize_inplace(
eigenvector);
159 QUILL_LOG_DEBUG(
log,
"lowest eigenvalue {:.8f}",
eigenvalue);
160 status = objf2->isConvergedV() ? 0 : 1;
162}
std::shared_ptr< Potential > pot
const Parameters & params
std::unique_ptr< Optimizer > mkOptim(std::shared_ptr< ObjectiveFunction > a_objf, OptType a_otype, const Parameters &a_params)
void eigenmodeCompute(LowestEigenmode &s, std::shared_ptr< Matter > matter, AtomMatrix direction)
std::shared_ptr< LowestEigenmode > buildEigenmodeStrategy(std::shared_ptr< Matter > matter, const Parameters ¶ms, std::shared_ptr< Potential > pot)
double eigenmodeGetEigenvalue(LowestEigenmode &s)
AtomMatrix eigenmodeGetEigenvector(LowestEigenmode &s)