ERKALE
ERKALE - DFT from Hel
 All Classes Functions Variables Friends Pages
energy-opt.h
1 /*
2  * This source code is part of
3  *
4  * E R K A L E
5  * -
6  * HF/DFT from Hel
7  *
8  * Written by Susi Lehtola, 2010-2014
9  * Copyright (c) 2010-2014, Susi Lehtola
10  *
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License
13  * as published by the Free Software Foundation; either version 2
14  * of the License, or (at your option) any later version.
15  */
16 
26 #ifndef ERKALE_ENOPT
27 #define ERKALE_ENOPT
28 
29 #include "../global.h"
30 #include "../basislibrary.h"
31 #include <string>
32 #include <cstdlib>
33 #include <armadillo>
34 #include <vector>
35 
37  protected:
39  arma::ivec sham;
41  arma::uvec nf;
43  arma::uvec npar;
45  arma::uvec optsh;
46 
48  double fd_h;
50  double ls_h;
52  size_t ntr;
53 
55  arma::vec calcG(const arma::vec & x, bool check=true);
57  arma::vec calcG(const arma::vec & x, arma::sword am, bool check=true);
59  arma::mat calcH(const arma::vec & x, bool check=true);
61  arma::mat calcH(const arma::vec & x, arma::sword am, bool check=true);
63  arma::vec pad_vec(const arma::vec & sd) const;
65  arma::vec pad_vec(const arma::vec & sd, arma::sword am) const;
66 
68  std::string el;
69 
71  bool verbose;
73  bool init;
74 
75  public:
77  EnergyOptimizer(const std::string & el, bool verbose=true);
79  virtual ~EnergyOptimizer();
80 
82  void set_params(const arma::ivec & am, const arma::uvec & nf, const arma::uvec & npar, const arma::uvec & optsh);
84  std::string get_el() const;
86  void toggle_init(bool init);
87 
89  std::vector<arma::vec> get_exps(const arma::vec & x) const;
91  virtual BasisSetLibrary form_basis(const arma::vec & x) const;
93  virtual BasisSetLibrary form_basis(const std::vector<arma::vec> & exps) const;
95  virtual std::vector<double> calcE(const std::vector<BasisSetLibrary> & baslib)=0;
96 
100  double optimize(arma::vec & x, size_t maxiter, double nrthr, double gthr);
104  double optimize_full(arma::vec & x, size_t maxiter, double nrthr, double gthr);
105 
107  double scan(arma::vec & x, double xmin, double xmax, double dx);
108 
110  arma::uvec sh_vec() const;
112  arma::uvec idx_vec() const;
114  arma::uvec idx_vec(arma::sword am) const;
116  void print_info(const arma::vec & x, const std::string & msg) const;
117 };
118 
119 #endif
virtual ~EnergyOptimizer()
Destructor.
Definition: energy-opt.cpp:41
Definition: energy-opt.h:36
bool init
Initialization mode? (Sloppier convergence)
Definition: energy-opt.h:73
arma::uvec nf
Amount of functions on the shells.
Definition: energy-opt.h:41
size_t ntr
Amount of consecutive trials.
Definition: energy-opt.h:52
std::vector< arma::vec > get_exps(const arma::vec &x) const
Get exponents.
Definition: energy-opt.cpp:83
virtual BasisSetLibrary form_basis(const arma::vec &x) const
Generate basis set.
Definition: energy-opt.cpp:426
arma::uvec sh_vec() const
Get optimized shell index vector.
Definition: energy-opt.cpp:127
Basis set library class.
Definition: basislibrary.h:231
bool verbose
Verbose operation?
Definition: energy-opt.h:71
std::string get_el() const
Get element.
Definition: energy-opt.cpp:75
void set_params(const arma::ivec &am, const arma::uvec &nf, const arma::uvec &npar, const arma::uvec &optsh)
Set parameters.
Definition: energy-opt.cpp:44
EnergyOptimizer(const std::string &el, bool verbose=true)
Constructor.
Definition: energy-opt.cpp:28
std::string el
Element to optimize.
Definition: energy-opt.h:68
void print_info(const arma::vec &x, const std::string &msg) const
Print parameter info.
Definition: energy-opt.cpp:971
arma::uvec npar
Amount of parameters.
Definition: energy-opt.h:43
double ls_h
Step size in line search.
Definition: energy-opt.h:50
arma::vec calcG(const arma::vec &x, bool check=true)
Calculate gradient. Check enables sanity checks.
Definition: energy-opt.cpp:253
arma::uvec idx_vec() const
Get parameter index vector.
Definition: energy-opt.cpp:166
arma::vec pad_vec(const arma::vec &sd) const
Pad vector to fit into x.
Definition: energy-opt.cpp:200
arma::ivec sham
Shell angular momentum.
Definition: energy-opt.h:39
arma::mat calcH(const arma::vec &x, bool check=true)
Calculate Hessian.
Definition: energy-opt.cpp:292
void toggle_init(bool init)
Initialize?
Definition: energy-opt.cpp:79
arma::uvec optsh
Optimize shell?
Definition: energy-opt.h:45
double optimize_full(arma::vec &x, size_t maxiter, double nrthr, double gthr)
Definition: energy-opt.cpp:701
virtual std::vector< double > calcE(const std::vector< BasisSetLibrary > &baslib)=0
Calculate energy for basis set.
double optimize(arma::vec &x, size_t maxiter, double nrthr, double gthr)
Definition: energy-opt.cpp:448
double scan(arma::vec &x, double xmin, double xmax, double dx)
Look for optimal polarization exponent.
Definition: energy-opt.cpp:921
double fd_h
Step size in finite difference gradient.
Definition: energy-opt.h:48