Loading...
Searching...
No Matches
q3::SpreadMinimizationSettings Struct Reference

#include <spread_minimization_settings.hpp>

Public Attributes

Real convergence_tolerance = 1.0e-10
 Relative change in Omega_D + Omega_OD that counts as converged.
 
int convergence_window = 3
 Iterations the relative change must stay below the tolerance for.
 
int maximum_iterations = 3000
 
int maximum_step_reductions = 30
 Halvings of the trial step before a stationary point is declared.
 
Real relative_gradient_tolerance = 1.0e-3
 
int restart_interval = 20
 
Real step_growth_factor = 1.2
 
Real step_reduction_factor = 0.5
 What a trial step is multiplied by each time it fails to lower Omega.
 

Detailed Description

Definition at line 12 of file spread_minimization_settings.hpp.

Member Data Documentation

◆ convergence_tolerance

Real q3::SpreadMinimizationSettings::convergence_tolerance = 1.0e-10

Relative change in Omega_D + Omega_OD that counts as converged.

Definition at line 14 of file spread_minimization_settings.hpp.

Referenced by q3::SpreadMinimizer::run().

◆ convergence_window

int q3::SpreadMinimizationSettings::convergence_window = 3

Iterations the relative change must stay below the tolerance for.

Definition at line 17 of file spread_minimization_settings.hpp.

Referenced by q3::SpreadMinimizer::run().

◆ maximum_iterations

int q3::SpreadMinimizationSettings::maximum_iterations = 3000

◆ maximum_step_reductions

int q3::SpreadMinimizationSettings::maximum_step_reductions = 30

Halvings of the trial step before a stationary point is declared.

Definition at line 19 of file spread_minimization_settings.hpp.

Referenced by q3::SpreadMinimizer::SpreadMinimizer().

◆ relative_gradient_tolerance

Real q3::SpreadMinimizationSettings::relative_gradient_tolerance = 1.0e-3

A gradient this small a fraction of where it started ends the run early. It is a shortcut, not the convergence test: the gradient carries the b-weights, which scale as 1/b^2 and so with the cell, and its size at a genuine minimum varies by orders of magnitude between systems – measured here, a toy chain at Omega_OD = 7e-7, its exact minimum, still shows 3e-4, while copper at its own minimum never falls to a thousandth of where it began. What the run is judged by is whether it can still lower Omega; the gradient is reported beside the answer as the diagnostic it is.

Definition at line 44 of file spread_minimization_settings.hpp.

Referenced by q3::SpreadMinimizer::SpreadMinimizer(), and q3::SpreadMinimizer::run().

◆ restart_interval

int q3::SpreadMinimizationSettings::restart_interval = 20

Conjugate-gradient restarts. Steepest descent on this functional creeps: a three-function chain on eight k-points takes five hundred iterations to do what conjugation does in a few dozen, and on a real system the crawl is the difference between converging and exhausting the budget. The search direction is conjugated against the previous one and reset every restart_interval iterations, because the manifold is curved and a direction carried too far along it stops being conjugate to anything.

Definition at line 54 of file spread_minimization_settings.hpp.

Referenced by q3::SpreadMinimizer::SpreadMinimizer(), and q3::SpreadMinimizer::run().

◆ step_growth_factor

Real q3::SpreadMinimizationSettings::step_growth_factor = 1.2

What the step is multiplied by after every success, without a ceiling. Without this the first hard k-point permanently halves the step for the whole run, and a minimisation that started well finishes at a crawl. Backtracking already refuses anything that overshoots, so a cap only slows the recovery from one bad direction – capping this at the natural scale, and separately resetting it there on every conjugate-gradient restart, were both tried and both cost copper its convergence: it reaches the same Omega_OD of 4.772 either way, but spends the entire iteration budget getting there instead of a hundred iterations.

Definition at line 33 of file spread_minimization_settings.hpp.

Referenced by q3::SpreadMinimizer::SpreadMinimizer(), and q3::SpreadMinimizer::run().

◆ step_reduction_factor

Real q3::SpreadMinimizationSettings::step_reduction_factor = 0.5

What a trial step is multiplied by each time it fails to lower Omega.

Definition at line 21 of file spread_minimization_settings.hpp.

Referenced by q3::SpreadMinimizer::SpreadMinimizer().


The documentation for this struct was generated from the following file: