Hex  2.2
Hydrogen-electron collision solver
Public Member Functions | Protected Member Functions | Protected Attributes
KPACGPreconditioner Class Reference

KPA-preconditioned CG-preconditioner. More...

#include <KPAPreconditioner.h>

Inheritance diagram for KPACGPreconditioner:
Inheritance graph
[legend]
Collaboration diagram for KPACGPreconditioner:
Collaboration graph
[legend]

Public Member Functions

 preconditionerRunTimeSelectionDefinitions (KPACGPreconditioner, "KPA") KPACGPreconditioner()
 
 KPACGPreconditioner (CommandLine const &cmd, InputFile const &inp, Parallel const &par, AngularBasis const &ang, Bspline const &bspline_inner, Bspline const &bspline_full, Bspline const &bspline_panel_x, Bspline const &bspline_panel_y)
 
virtual ~KPACGPreconditioner ()
 
virtual std::string description () const
 Description of the preconditioner. More...
 
virtual void setup ()
 Initialize the preconditioner. More...
 
virtual void finish ()
 Clean up memory etc. More...
 
virtual void CG_init (int iblock) const
 
virtual void CG_prec (int iblock, const cArrayView r, cArrayView z) const
 
virtual void CG_exit (int iblock) const
 
- Public Member Functions inherited from CGPreconditioner
 preconditionerRunTimeSelectionDefinitions (CGPreconditioner, "cg") CGPreconditioner()
 
 CGPreconditioner (CommandLine const &cmd, InputFile const &inp, Parallel const &par, AngularBasis const &ang, Bspline const &bspline_inner, Bspline const &bspline_full, Bspline const &bspline_panel_x, Bspline const &bspline_panel_y)
 
virtual void precondition (BlockArray< Complex > const &r, BlockArray< Complex > &z) const
 Precondition the equation. More...
 
int solve_block (int ill, const cArrayView r, cArrayView z) const
 
virtual void CG_mmul (int iblock, const cArrayView p, cArrayView q) const
 
virtual Real CG_compute_norm (const cArrayView a) const
 
virtual Complex CG_scalar_product (const cArrayView a, const cArrayView b) const
 
virtual void CG_axby_operation (Complex a, cArrayView x, Complex b, const cArrayView y) const
 
virtual void CG_constrain (cArrayView r) const
 
- Public Member Functions inherited from NoPreconditioner
 preconditionerRunTimeSelectionDefinitions (NoPreconditioner, "none") NoPreconditioner()
 
 NoPreconditioner (CommandLine const &cmd, InputFile const &inp, Parallel const &par, AngularBasis const &ang, Bspline const &bspline_inner, Bspline const &bspline_full, Bspline const &bspline_panel_x, Bspline const &bspline_panel_y)
 
 ~NoPreconditioner ()
 
virtual void update (Real E)
 Update the preconditioner for the next energy. More...
 
virtual std::pair< int, int > bstates (Real E, int l1, int l2) const
 Get the number of allowed bound states. More...
 
virtual void rhs (BlockArray< Complex > &chi, int ienergy, int instate) const
 Calculate the right-hand side. More...
 
virtual void multiply (BlockArray< Complex > const &p, BlockArray< Complex > &q, MatrixSelection::Selection tri=MatrixSelection::Both) const
 Multiply by the matrix equation. More...
 
BlockSymBandMatrix< Complex > calc_A_block (int ill, int illp, bool twoel=true) const
 
RadialIntegrals const & rad_inner () const
 
RadialIntegrals const & rad_full () const
 
RadialIntegrals const & rad_panel () const
 
- Public Member Functions inherited from PreconditionerBase
 baseClassRunTimeSelectionDefinitions (PreconditionerBase,(CommandLine const &cmd, InputFile const &inp, Parallel const &par, AngularBasis const &ang, Bspline const &bspline_inner, Bspline const &bspline_full, Bspline const &bspline_panel_x, Bspline const &bspline_panel_y)) PreconditionerBase()
 Dummy default constructor needed by the run-time selection. More...
 
virtual ~PreconditionerBase ()
 Virtual destructor. More...
 
virtual void verbose (bool b)
 Set verbosity level. More...
 

Protected Member Functions

void lock_kpa_access () const
 
void unlock_kpa_access () const
 

Protected Attributes

iArray refcount_atom_
 
iArray refcount_proj_
 
cArrays workspace_
 
- Protected Attributes inherited from CGPreconditioner
iArray n_
 
std::size_t us_axby_
 
std::size_t us_mmul_
 
std::size_t us_norm_
 
std::size_t us_prec_
 
std::size_t us_spro_
 
- Protected Attributes inherited from NoPreconditioner
Real E_
 
CommandLine const * cmd_
 
Parallel const * par_
 
InputFile const * inp_
 
AngularBasis const * ang_
 
std::vector< BlockSymBandMatrix< Complex > > A_blocks_
 
std::vector< std::vector< SymBandMatrix< Complex > > > B1_blocks_
 
std::vector< std::vector< SymBandMatrix< Complex > > > B2_blocks_
 
std::vector< CooMatrix< LU_int_t, Complex > > Cu_blocks_
 
std::vector< CooMatrix< LU_int_t, Complex > > Cl_blocks_
 
std::vector< BlockSymBandMatrix< Complex > > E_blocks_
 
std::vector< CooMatrix< LU_int_t, Complex > > Fu_blocks_
 
std::vector< CooMatrix< LU_int_t, Complex > > Fl_blocks_
 
int max_n_
 
std::vector< std::pair< int, int > > Nchan_
 
RadialIntegralsrad_inner_
 
RadialIntegralsrad_full_
 
RadialIntegralsrad_panel_
 
std::array< Array< cArrays >, 2 > Xp_
 
std::array< Array< cArrays >, 2 > Sp_
 
std::array< cArrays, 2 > Eb_
 
std::array< std::vector< HlData >, 2 > Hl_
 
std::shared_ptr< LUftluS_
 
- Protected Attributes inherited from PreconditionerBase
bool verbose_
 

Detailed Description

This nested preconditioner simplifies the Hamiltonian matrix by omitting electron-electron interaction. The block of the matrix can then be written as a sum of simple Kronecker products

\[ \mathsf{A} = E\mathsf{S}\otimes\mathsf{S} - \mathsf{H}_1\otimes\mathsf{S} - \mathsf{S}\otimes\mathsf{H}_2 \,, \]

which can be easily diagonalized (only diagonalization of the small matrices are needed) and so also inverted, which we need for solution of the equations.

Constructor & Destructor Documentation

◆ KPACGPreconditioner()

KPACGPreconditioner::KPACGPreconditioner ( CommandLine const &  cmd,
InputFile const &  inp,
Parallel const &  par,
AngularBasis const &  ang,
Bspline const &  bspline_inner,
Bspline const &  bspline_full,
Bspline const &  bspline_panel_x,
Bspline const &  bspline_panel_y 
)
inline

◆ ~KPACGPreconditioner()

virtual KPACGPreconditioner::~KPACGPreconditioner ( )
inlinevirtual

Member Function Documentation

◆ CG_exit()

void KPACGPreconditioner::CG_exit ( int  iblock) const
virtual

Reimplemented from CGPreconditioner.

Reimplemented in HybCGPreconditioner.

◆ CG_init()

void KPACGPreconditioner::CG_init ( int  iblock) const
virtual

Reimplemented from CGPreconditioner.

Reimplemented in HybCGPreconditioner.

◆ CG_prec()

void KPACGPreconditioner::CG_prec ( int  iblock,
const cArrayView  r,
cArrayView  z 
) const
virtual

Reimplemented from CGPreconditioner.

Reimplemented in HybCGPreconditioner.

◆ description()

std::string KPACGPreconditioner::description ( ) const
virtual

Simple documentation of the preconditioner.

Reimplemented from CGPreconditioner.

Reimplemented in GPUCGPreconditioner, and HybCGPreconditioner.

◆ finish()

void KPACGPreconditioner::finish ( )
virtual

This function is called when the preconditioner will no longer be used to release resources. To re-enable the same preconditioner then would require a new call to setup.

Reimplemented from CGPreconditioner.

Reimplemented in GPUCGPreconditioner, and HybCGPreconditioner.

◆ lock_kpa_access()

void KPACGPreconditioner::lock_kpa_access ( ) const
protected

◆ preconditionerRunTimeSelectionDefinitions()

KPACGPreconditioner::preconditionerRunTimeSelectionDefinitions ( KPACGPreconditioner  ,
"KPA"   
)
inline

◆ setup()

void KPACGPreconditioner::setup ( )
virtual

This function contains all computation intensive preparations for the preconditioner, e.g. computation of radial integrals. It may use only SMP environment.

Reimplemented from NoPreconditioner.

Reimplemented in GPUCGPreconditioner, and HybCGPreconditioner.

◆ unlock_kpa_access()

void KPACGPreconditioner::unlock_kpa_access ( ) const
protected

Field Documentation

◆ refcount_atom_

iArray KPACGPreconditioner::refcount_atom_
mutableprotected

◆ refcount_proj_

iArray KPACGPreconditioner::refcount_proj_
mutableprotected

◆ workspace_

cArrays KPACGPreconditioner::workspace_
mutableprotected

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