Trace correcting purification. More...
#include <TC2.h>
Classes | |
class | Fun |
Help class for bisection root finding calls. More... | |
Public Member Functions | |
TC2 (Tmatrix &F, Tmatrix &DM, const int size, const int noc, const Treal trunc=0, const int maxmm=100) | |
Constructor Initializes everything. | |
Treal | fermi_level (Treal tol=1e-15) const |
Returns the Fermi level. | |
Treal | homo (Treal tol=1e-15) const |
Returns upper bound of the HOMO eigenvalue. | |
Treal | lumo (Treal tol=1e-15) const |
Returns lower bound of the LUMO eigenvalue. | |
int | n_multiplies () const |
Returns the number of used matrix matrix multiplications. | |
void | print_data (int const start, int const stop) const |
virtual | ~TC2 () |
Destructor. | |
Protected Member Functions | |
void | purify () |
Runs purification. | |
Protected Attributes | |
Tmatrix & | X |
Fock / Kohn-Sham matrix at initialization. | |
Tmatrix & | D |
Density matrix after purification. | |
const int | n |
System size. | |
const int | nocc |
Number of occupied orbitals. | |
const Treal | frob_trunc |
Threshold for the truncation. | |
const int | maxmul |
Number of tolerated matrix multiplications. | |
Treal | lmin |
Lower bound for eigenvalue spectrum. | |
Treal | lmax |
Upper bound for eigenvalue spectrum. | |
int | nmul |
Number of used matrix multiplications. | |
int | nmul_firstpart |
Number of used matrix multiplications in the first part of the purification. | |
Treal * | idemerror |
Upper bound of euclidean norm ||D-D^2||_2 before each step. | |
Treal * | tracediff |
The difference between the trace of the matrix and the number of occupied orbitals before each step. | |
int * | polys |
Choices of polynomials 0 for x^2 and 1 for 2x-x^2 Length: nmul. |
Trace correcting purification.
This template instantiates the trace correcting purification algorithm developed by Niklasson [Phys. Rev. B 66, 155115 (2002)] with modifications by Rubensson and Rudberg [unpublished]. The template can be used with any matrix class Tmatrix that has the following member functions:
The matrix class should also support the following syntax:
where A and B are of type Tmatrix and alpha and beta are of type Treal.
mat::TC2< Treal, Tmatrix >::TC2 | ( | Tmatrix & | F, | |
Tmatrix & | DM, | |||
const int | size, | |||
const int | noc, | |||
const Treal | trunc = 0 , |
|||
const int | maxmm = 100 | |||
) | [inline] |
Constructor Initializes everything.
Constructor.
< Run purification
F | Fock/Kohn-Sham matrix (input/workspace) | |
DM | Density matrix (output) | |
size | System size (Number of basis functions) | |
noc | Number of occupied orbitals. | |
trunc | Threshold for truncation in Frobenius norm. | |
maxmm | Maximum aloud number of mm-multiplications. |
References mat::TC2< Treal, Tmatrix >::D, mat::TC2< Treal, Tmatrix >::frob_trunc, mat::TC2< Treal, Tmatrix >::idemerror, mat::TC2< Treal, Tmatrix >::lmax, mat::TC2< Treal, Tmatrix >::lmin, mat::TC2< Treal, Tmatrix >::maxmul, mat::TC2< Treal, Tmatrix >::nocc, mat::TC2< Treal, Tmatrix >::polys, mat::TC2< Treal, Tmatrix >::purify(), mat::TC2< Treal, Tmatrix >::tracediff, and mat::TC2< Treal, Tmatrix >::X.
virtual mat::TC2< Treal, Tmatrix >::~TC2 | ( | ) | [inline, virtual] |
Destructor.
References mat::TC2< Treal, Tmatrix >::idemerror, mat::TC2< Treal, Tmatrix >::polys, and mat::TC2< Treal, Tmatrix >::tracediff.
Treal mat::TC2< Treal, Tmatrix >::fermi_level | ( | Treal | tol = 1e-15 |
) | const [inline] |
Returns the Fermi level.
Run after call to purify().
tol | Fault-tolerance for result. |
References mat::bisection(), mat::TC2< Treal, Tmatrix >::lmax, mat::TC2< Treal, Tmatrix >::lmin, mat::TC2< Treal, Tmatrix >::nmul, and mat::TC2< Treal, Tmatrix >::polys.
Treal mat::TC2< Treal, Tmatrix >::homo | ( | Treal | tol = 1e-15 |
) | const [inline] |
Returns upper bound of the HOMO eigenvalue.
Run after call to purify().
tol | Fault-tolerance for result. |
References mat::bisection(), mat::TC2< Treal, Tmatrix >::idemerror, mat::TC2< Treal, Tmatrix >::lmax, mat::TC2< Treal, Tmatrix >::lmin, mat::TC2< Treal, Tmatrix >::nmul, mat::TC2< Treal, Tmatrix >::nmul_firstpart, mat::TC2< Treal, Tmatrix >::polys, and template_blas_sqrt().
Treal mat::TC2< Treal, Tmatrix >::lumo | ( | Treal | tol = 1e-15 |
) | const [inline] |
Returns lower bound of the LUMO eigenvalue.
Run after call to purify().
tol | Fault-tolerance for result. |
References mat::bisection(), mat::TC2< Treal, Tmatrix >::idemerror, mat::TC2< Treal, Tmatrix >::lmax, mat::TC2< Treal, Tmatrix >::lmin, mat::TC2< Treal, Tmatrix >::nmul, mat::TC2< Treal, Tmatrix >::nmul_firstpart, mat::TC2< Treal, Tmatrix >::polys, and template_blas_sqrt().
int mat::TC2< Treal, Tmatrix >::n_multiplies | ( | ) | const [inline] |
Returns the number of used matrix matrix multiplications.
References mat::TC2< Treal, Tmatrix >::nmul.
void mat::TC2< Treal, Tmatrix >::print_data | ( | int const | start, | |
int const | stop | |||
) | const [inline] |
References mat::TC2< Treal, Tmatrix >::idemerror, mat::TC2< Treal, Tmatrix >::polys, and mat::TC2< Treal, Tmatrix >::tracediff.
Referenced by mat::TC2< Treal, Tmatrix >::purify().
void mat::TC2< Treal, Tmatrix >::purify | ( | ) | [inline, protected] |
Runs purification.
Run by constructor.
References mat::TC2< Treal, Tmatrix >::D, mat::TC2< Treal, Tmatrix >::frob_trunc, mat::TC2< Treal, Tmatrix >::idemerror, mat::TC2< Treal, Tmatrix >::maxmul, mat::TC2< Treal, Tmatrix >::n, mat::TC2< Treal, Tmatrix >::nmul, mat::TC2< Treal, Tmatrix >::nmul_firstpart, mat::TC2< Treal, Tmatrix >::nocc, mat::TC2< Treal, Tmatrix >::polys, mat::TC2< Treal, Tmatrix >::print_data(), template_blas_sqrt(), mat::TC2< Treal, Tmatrix >::tracediff, and mat::TC2< Treal, Tmatrix >::X.
Referenced by mat::TC2< Treal, Tmatrix >::TC2().
Density matrix after purification.
Referenced by mat::TC2< Treal, Tmatrix >::purify(), and mat::TC2< Treal, Tmatrix >::TC2().
const Treal mat::TC2< Treal, Tmatrix >::frob_trunc [protected] |
Threshold for the truncation.
Referenced by mat::TC2< Treal, Tmatrix >::purify(), and mat::TC2< Treal, Tmatrix >::TC2().
Treal* mat::TC2< Treal, Tmatrix >::idemerror [protected] |
Upper bound of euclidean norm ||D-D^2||_2 before each step.
This means: idemerror[i] = norm(D[i]-D[i]^2) where D[0] is the initial matrix and D[i] is the matrix after i steps in the purification. This value is calculated after the step since D[i]^2 or 2D[i] - D[i]^2 is needed. Length: nmul
Referenced by mat::TC2< Treal, Tmatrix >::homo(), mat::TC2< Treal, Tmatrix >::lumo(), mat::TC2< Treal, Tmatrix >::print_data(), mat::TC2< Treal, Tmatrix >::purify(), mat::TC2< Treal, Tmatrix >::TC2(), and mat::TC2< Treal, Tmatrix >::~TC2().
Upper bound for eigenvalue spectrum.
Referenced by mat::TC2< Treal, Tmatrix >::fermi_level(), mat::TC2< Treal, Tmatrix >::homo(), mat::TC2< Treal, Tmatrix >::lumo(), and mat::TC2< Treal, Tmatrix >::TC2().
Lower bound for eigenvalue spectrum.
Referenced by mat::TC2< Treal, Tmatrix >::fermi_level(), mat::TC2< Treal, Tmatrix >::homo(), mat::TC2< Treal, Tmatrix >::lumo(), and mat::TC2< Treal, Tmatrix >::TC2().
const int mat::TC2< Treal, Tmatrix >::maxmul [protected] |
Number of tolerated matrix multiplications.
Referenced by mat::TC2< Treal, Tmatrix >::purify(), and mat::TC2< Treal, Tmatrix >::TC2().
System size.
Referenced by mat::TC2< Treal, Tmatrix >::purify().
Number of used matrix multiplications.
Referenced by mat::TC2< Treal, Tmatrix >::fermi_level(), mat::TC2< Treal, Tmatrix >::homo(), mat::TC2< Treal, Tmatrix >::lumo(), mat::TC2< Treal, Tmatrix >::n_multiplies(), and mat::TC2< Treal, Tmatrix >::purify().
int mat::TC2< Treal, Tmatrix >::nmul_firstpart [protected] |
Number of used matrix multiplications in the first part of the purification.
Referenced by mat::TC2< Treal, Tmatrix >::homo(), mat::TC2< Treal, Tmatrix >::lumo(), and mat::TC2< Treal, Tmatrix >::purify().
Number of occupied orbitals.
Referenced by mat::TC2< Treal, Tmatrix >::purify(), and mat::TC2< Treal, Tmatrix >::TC2().
Choices of polynomials 0 for x^2 and 1 for 2x-x^2 Length: nmul.
Referenced by mat::TC2< Treal, Tmatrix >::fermi_level(), mat::TC2< Treal, Tmatrix >::homo(), mat::TC2< Treal, Tmatrix >::lumo(), mat::TC2< Treal, Tmatrix >::print_data(), mat::TC2< Treal, Tmatrix >::purify(), mat::TC2< Treal, Tmatrix >::TC2(), and mat::TC2< Treal, Tmatrix >::~TC2().
Treal* mat::TC2< Treal, Tmatrix >::tracediff [protected] |
The difference between the trace of the matrix and the number of occupied orbitals before each step.
Length: nmul + 1
Referenced by mat::TC2< Treal, Tmatrix >::print_data(), mat::TC2< Treal, Tmatrix >::purify(), mat::TC2< Treal, Tmatrix >::TC2(), and mat::TC2< Treal, Tmatrix >::~TC2().
Fock / Kohn-Sham matrix at initialization.
Then used as workspace by purify(). Empty after call to purify().
Referenced by mat::TC2< Treal, Tmatrix >::purify(), and mat::TC2< Treal, Tmatrix >::TC2().