mat::TC2< Treal, Tmatrix > Class Template Reference

Trace correcting purification. More...

#include <TC2.h>

List of all members.

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.

Detailed Description

template<typename Treal, typename Tmatrix>
class mat::TC2< Treal, Tmatrix >

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.


Constructor & Destructor Documentation

template<typename Treal , typename Tmatrix >
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

Parameters:
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.

template<typename Treal , typename Tmatrix >
virtual mat::TC2< Treal, Tmatrix >::~TC2 (  )  [inline, virtual]

Member Function Documentation

template<typename Treal , typename Tmatrix >
Treal mat::TC2< Treal, Tmatrix >::fermi_level ( Treal  tol = 1e-15  )  const [inline]

Returns the Fermi level.

Run after call to purify().

Parameters:
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.

template<typename Treal , typename Tmatrix >
Treal mat::TC2< Treal, Tmatrix >::homo ( Treal  tol = 1e-15  )  const [inline]
template<typename Treal , typename Tmatrix >
Treal mat::TC2< Treal, Tmatrix >::lumo ( Treal  tol = 1e-15  )  const [inline]
template<typename Treal , typename Tmatrix >
int mat::TC2< Treal, Tmatrix >::n_multiplies (  )  const [inline]

Returns the number of used matrix matrix multiplications.

References mat::TC2< Treal, Tmatrix >::nmul.

template<typename Treal , typename Tmatrix >
void mat::TC2< Treal, Tmatrix >::print_data ( int const   start,
int const   stop 
) const [inline]
template<typename Treal , typename Tmatrix >
void mat::TC2< Treal, Tmatrix >::purify (  )  [inline, protected]

Member Data Documentation

template<typename Treal , typename Tmatrix >
Tmatrix& mat::TC2< Treal, Tmatrix >::D [protected]

Density matrix after purification.

Referenced by mat::TC2< Treal, Tmatrix >::purify(), and mat::TC2< Treal, Tmatrix >::TC2().

template<typename Treal , typename Tmatrix >
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().

template<typename Treal , typename Tmatrix >
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().

template<typename Treal , typename Tmatrix >
Treal mat::TC2< Treal, Tmatrix >::lmax [protected]
template<typename Treal , typename Tmatrix >
Treal mat::TC2< Treal, Tmatrix >::lmin [protected]
template<typename Treal , typename Tmatrix >
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().

template<typename Treal , typename Tmatrix >
const int mat::TC2< Treal, Tmatrix >::n [protected]

System size.

Referenced by mat::TC2< Treal, Tmatrix >::purify().

template<typename Treal , typename Tmatrix >
int mat::TC2< Treal, Tmatrix >::nmul [protected]
template<typename Treal , typename Tmatrix >
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().

template<typename Treal , typename Tmatrix >
const int mat::TC2< Treal, Tmatrix >::nocc [protected]

Number of occupied orbitals.

Referenced by mat::TC2< Treal, Tmatrix >::purify(), and mat::TC2< Treal, Tmatrix >::TC2().

template<typename Treal , typename Tmatrix >
int* mat::TC2< Treal, Tmatrix >::polys [protected]
template<typename Treal , typename Tmatrix >
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().

template<typename Treal , typename Tmatrix >
Tmatrix& mat::TC2< Treal, Tmatrix >::X [protected]

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().


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

Generated on 21 Nov 2012 for ergo by  doxygen 1.6.1