36 virtual void print_status(
size_t iiter,
const arma::vec & g,
const Timer & t)
const;
47 virtual double eval(
const arma::vec & x)=0;
49 virtual void update(
const arma::vec & x);
54 virtual arma::vec
gradient(
const arma::vec & x);
59 virtual double optimize(
size_t maxiter=1000,
double gthr=1e-4,
bool max=
false);
110 std::vector<arma::cx_mat>
ref_Forb, ref_Forba, ref_Forbb;
143 std::vector<pz_rot_par_t>
classify()
const;
146 arma::cx_mat
rotation(
const arma::vec & x,
bool spin=
false)
const;
148 arma::cx_mat
rotation_pars(
const arma::vec & x,
bool spin=
false)
const;
150 arma::cx_mat
matexp(
const arma::cx_mat & X)
const;
153 arma::cx_mat
unified_H(
const arma::cx_mat & CO,
const arma::cx_mat & CV,
const std::vector<arma::cx_mat> & Forb,
const arma::vec & worb,
const arma::cx_mat & H0)
const;
158 arma::vec
gradient(
const arma::vec & x,
bool ref);
173 void scaling_gradient_oo(arma::cx_mat & gOO,
const arma::cx_mat & CO,
const arma::vec & Eorb);
175 void scaling_gradient_ov(arma::cx_mat & gOV,
const arma::cx_mat & CO,
const arma::vec & Eorb,
const arma::cx_mat & CV);
178 double eval(
const arma::vec & x,
rscf_t & sol, std::vector<arma::cx_mat> & Forb, arma::vec & Eorb, arma::vec & worb,
bool ks,
bool fock,
bool useref);
180 double eval(
const arma::vec & x,
uscf_t & sol, std::vector<arma::cx_mat> & Forba, arma::vec & Eorba, arma::vec & worba, std::vector<arma::cx_mat> & Forbb, arma::vec & Eorbb, arma::vec & worbb,
bool ks,
bool fock,
bool useref);
182 double eval(
const arma::vec & x);
185 void update(
const arma::vec & x);
195 void print_info(
const arma::cx_mat & CO,
const arma::cx_mat & CV,
const std::vector<arma::cx_mat> & Forb,
const arma::cx_mat & H0,
const arma::vec & Eorb,
const arma::vec & worb);
200 arma::cx_mat
get_H(
const uscf_t & sol,
bool spin)
const;
209 arma::cx_mat
get_CO()
const;
211 arma::cx_mat
get_CO(
bool spin,
const uscf_t & sol)
const;
212 arma::cx_mat
get_CO(
bool spin)
const;
215 arma::cx_mat
get_CV()
const;
217 arma::cx_mat
get_CV(
bool spin,
const uscf_t & sol)
const;
218 arma::cx_mat
get_CV(
bool spin)
const;
245 bool check(
bool stability=
false,
double cutoff=-1e-3,
double dEthr=-1e-7);
247 void linesearch(
const std::string & fname=
"pz_ls.dat",
int prec=1,
int Np=100);
256 virtual double optimize(
size_t maxiter=1000,
double gthr=1e-4,
double nrthr=1e-4,
double dEthr=1e-9,
int preconditioning=1);
arma::cx_mat unified_H(const arma::cx_mat &CO, const arma::cx_mat &CV, const std::vector< arma::cx_mat > &Forb, const arma::vec &worb, const arma::cx_mat &H0) const
Construct unified Hamiltonian.
Definition: pzstability.cpp:875
virtual double eval(const arma::vec &x)=0
Evaluate function.
SCF * solverp
SCF solver, used for energy calculations.
Definition: pzstability.h:84
arma::vec precondition_unified(const arma::vec &g) const
Precondition gradient vector with unified Hamiltonian.
Definition: pzstability.cpp:1548
bool oocheck
Check stability of oo block.
Definition: pzstability.h:121
void set(const rscf_t &sol)
Set reference.
Definition: pzstability.cpp:2895
A timer routine.
Definition: timer.h:43
arma::cx_mat get_CO(const rscf_t &sol) const
Get occupied orbitals (restricted)
Definition: pzstability.cpp:1488
arma::vec compute_worb(const arma::cx_mat &C)
Get orbital weights.
Definition: pzstability.cpp:1077
void update_reference(bool sort)
Update reference.
Definition: pzstability.cpp:2550
void print_status(size_t iiter, const arma::vec &g, const Timer &t) const
Print status of optimization.
Definition: pzstability.cpp:3137
DFT settings.
Definition: scf.h:59
virtual ~FDHessian()
Destructor.
Definition: pzstability.cpp:185
arma::vec gradient()
Evaluate analytic gradient.
Definition: pzstability.cpp:1452
bool real
Real part of transformations?
Definition: pzstability.h:115
Classify parameters.
Definition: pzstability.h:63
size_t count_params() const
Count amount of parameters.
Definition: pzstability.cpp:484
virtual size_t count_params() const =0
Get amount of parameters.
FDHessian(bool verbose=true)
Constructor.
Definition: pzstability.cpp:179
void parallel_transport(arma::vec &gold, const arma::vec &sd, double step) const
Parallel transport.
Definition: pzstability.cpp:2316
std::vector< arma::cx_mat > ref_Forb
Reference orbital Fock matrices.
Definition: pzstability.h:110
virtual void update(const arma::vec &x)
Update solution.
Definition: pzstability.cpp:311
void print_info()
Print information.
Definition: pzstability.cpp:963
size_t oa
Amount of occupied orbitals.
Definition: pzstability.h:126
arma::cx_mat get_H(const rscf_t &sol) const
Get the full Fock matrix.
Definition: pzstability.cpp:2529
Unrestricted solver info.
Definition: scf.h:139
uscf_t get_usol() const
Get updated solution.
Definition: pzstability.cpp:2978
void scaling_gradient_ov(arma::cx_mat &gOV, const arma::cx_mat &CO, const arma::vec &Eorb, const arma::cx_mat &CV)
Put in the scaling part of the OV gradient.
Definition: pzstability.cpp:1150
bool check(bool stability=false, double cutoff=-1e-3, double dEthr=-1e-7)
Check stability of solution.
Definition: pzstability.cpp:2982
Definition: pzstability.h:26
arma::vec ref_worb
Reference weighting factors.
Definition: pzstability.h:112
pz_scaling_t scale
or scaling method
Definition: pzstability.h:99
PZStability(SCF *solver, bool verbose=true)
Constructor.
Definition: pzstability.cpp:428
size_t count_ov_params(size_t o, size_t v) const
Count amount of parameters for rotations.
Definition: pzstability.cpp:456
void scaling_gradient_oo(arma::cx_mat &gOO, const arma::cx_mat &CO, const arma::vec &Eorb)
Put in the scaling part of the OO gradient.
Definition: pzstability.cpp:1112
void update_step(const arma::vec &g)
Update step size.
Definition: pzstability.cpp:1028
void perturb(double h=1e-6)
Add in a small random perturbation to the solution.
Definition: pzstability.cpp:1021
Restricted solver info.
Definition: scf.h:110
arma::vec ref_Eorb
Reference self-interaction energies.
Definition: pzstability.h:108
virtual arma::vec gradient()
Evaluate finite difference gradient.
Definition: pzstability.cpp:188
arma::uvec idx
Degrees of freedom in block.
Definition: pzstability.h:67
bool imag
Imaginary part of transformations?
Definition: pzstability.h:117
~PZStability()
Destructor.
Definition: pzstability.cpp:443
double ss_ls
Line search step size.
Definition: pzstability.h:33
double eval(const arma::vec &x, rscf_t &sol, std::vector< arma::cx_mat > &Forb, arma::vec &Eorb, arma::vec &worb, bool ks, bool fock, bool useref)
Evaluate function at x, and possibly orbital Fock matrices.
Definition: pzstability.cpp:1216
size_t va
Amount of virtual orbitals.
Definition: pzstability.h:128
Self-consistent field solver routines.
Definition: scf.h:205
virtual void print_status(size_t iiter, const arma::vec &g, const Timer &t) const
Print optimization status.
Definition: pzstability.cpp:316
void set_params(bool real, bool imag, bool ov, bool oo)
Set parameters. real: real rotations? imag: imaginary rotations? ov: ov rotations? oo: oo rotations?
Definition: pzstability.cpp:2862
dft_t ovmethod
OV method.
Definition: pzstability.h:93
virtual double optimize(size_t maxiter=1000, double gthr=1e-4, bool max=false)
Run optimization.
Definition: pzstability.cpp:321
arma::cx_mat matexp(const arma::cx_mat &X) const
Calculate matrix exponential.
Definition: pzstability.cpp:2789
virtual double optimize(size_t maxiter=1000, double gthr=1e-4, double nrthr=1e-4, double dEthr=1e-9, int preconditioning=1)
Run optimization.
Definition: pzstability.cpp:2056
DFT quadrature grid.
Definition: dftgrid.h:475
uscf_t usol
or unrestricted
Definition: pzstability.h:106
DFTGrid grid
DFT grid.
Definition: pzstability.h:88
arma::vec precondition_orbital(const arma::vec &g) const
Precondition gradient vector with orbital Hamiltonian.
Definition: pzstability.cpp:1672
Basis set.
Definition: basis.h:187
void update_grid(bool init)
Update (adaptive) integration grid. If init=true, initialization is done for a static grid...
Definition: pzstability.cpp:2924
std::string name
Name of the block.
Definition: pzstability.h:65
std::vector< pz_rot_par_t > classify() const
Classify parameters.
Definition: pzstability.cpp:492
bool restr
Spin-restricted?
Definition: pzstability.h:124
virtual arma::mat hessian()
Evaluate finite difference Hessian.
Definition: pzstability.cpp:239
DFTGrid nlgrid
NL grid.
Definition: pzstability.h:90
rscf_t rsol
Reference solution. Spin-restricted.
Definition: pzstability.h:104
arma::cx_mat rotation(const arma::vec &x, bool spin=false) const
Calculate rotation matrix.
Definition: pzstability.cpp:2716
rscf_t get_rsol() const
Get updated solution.
Definition: pzstability.cpp:2974
BasisSet basis
Basis set.
Definition: pzstability.h:86
bool verbose
Verbose operation?
Definition: pzstability.h:29
double pzw
Weight for PZ correction.
Definition: pzstability.h:97
arma::cx_mat rotation_pars(const arma::vec &x, bool spin=false) const
Form rotation parameter matrix.
Definition: pzstability.cpp:2734
void linesearch(const std::string &fname="pz_ls.dat", int prec=1, int Np=100)
Print out a line search.
Definition: pzstability.cpp:3151
void set_method(const dft_t &ovmethod, const dft_t &oomethod, double pzw, pz_scaling_t scale, double scaleexp)
Set method and weight.
Definition: pzstability.cpp:2828
double Tmu
Maximum step size.
Definition: pzstability.h:131
void diagonalize()
Perform quasicanonical diagonalisation.
PZ optimizer and stability analysis.
Definition: pzstability.h:81
double ss_fd
Finite difference derivative step size.
Definition: pzstability.h:31
void update(const arma::vec &x)
Update solution.
Definition: pzstability.cpp:2420
size_t count_oo_params(size_t o) const
Count amount of parameters for rotations.
Definition: pzstability.cpp:446
double get_E()
Evaluate energy.
Definition: pzstability.cpp:2050
dft_t oomethod
OO method.
Definition: pzstability.h:95
arma::cx_mat get_CV(const rscf_t &sol) const
Get virtual orbitals (restricted)
Definition: pzstability.cpp:1516
bool cancheck
Check stability of canonical orbitals?
Definition: pzstability.h:119
arma::mat hessian()
Evaluate semi-analytic Hessian.
Definition: pzstability.cpp:1991
double scaleexp
and scaling exponent
Definition: pzstability.h:101