ChaseMpiMatrices

template<class T>
class chase::mpi::ChaseMpiMatrices

A class to setup the buffers of matrices and vectors which will be used by ChaseMpi.

This class provides three constructors:

  • Allocating the buffers for ChaseMpi without MPI support.

  • Allocating the buffers for ChaseMpi with MPI support.

  • Allocating the buffers for ChaseMpi with MPI support in which the buffer to store the matrix to be diagonalised is externally allocated and provided by users.

    Template Parameters
    • T: the scalar type used for the application. ChASE is templated for real and complex scalar with both Single Precision and Double Precision, thus T can be one of float, double, std::complex<float> and std::complex<double>.

Public Functions

ChaseMpiMatrices(std::size_t N, std::size_t max_block, T *V1 = nullptr, Base<T> *ritzv = nullptr, T *H = nullptr, T *V2 = nullptr, Base<T> *resid = nullptr)

A constructor of ChaseMpiMatrices for Non-MPI case which allocates everything required.

The private members of this class are initialized by the parameters of this constructor.

  • For H__ and H_, they are of size N * N.

  • For V1__, V1_, V2__ and V1_, they are of size N * max_block.

  • For ritzv__, ritzv_, resid__ and resid_, they are of size max_block.

    Parameters
    • N: size of the square matrix defining the eigenproblem.

    • max_block: Maximum column number of matrix V1_ and V2_. It equals to nev_ + nex_.

    • V1: a pointer to the buffer V1_.

    • ritz: a pointer to the buffer ritz_.

    • H: a pointer to the buffer H_.

    • V2: a pointer to the buffer V2_.

    • resid: a pointer to the buffer resid_.

ChaseMpiMatrices(MPI_Comm comm, std::size_t N, std::size_t m, std::size_t n, std::size_t max_block, T *V1 = nullptr, Base<T> *ritzv = nullptr, T *V2 = nullptr, Base<T> *resid = nullptr)

A constructor of ChaseMpiMatrices for MPI case which allocates everything necessary except H_.

The private members of this class are initialized by the parameters of this constructor.

  • For V1__ and V1_, they are of size m_ * max_block.

  • For V2__ and V2_, they are of size n_ * max_block.

  • For ritzv__, ritzv_, resid__ and resid_, they are of size max_block.

  • H_ is allocated here of size m_ * n_

  • m and n can be obtained through ChaseMpiProperties::get_m() and ChaseMpiProperties::get_n(), respecitvely.

    Parameters
    • comm: the working MPI communicator of ChASE.

    • N: size of the square matrix defining the eigenproblem.

    • m: row number of H_.m can be obtained through ChaseMpiProperties::get_m()

    • n: column number of H_.n can be obtained through ChaseMpiProperties::get_n()

    • max_block: Maximum column number of matrix V1_ and V2_. It equals to nev_ + nex_.

    • V1: a pointer to the buffer V1_.

    • ritz: a pointer to the buffer ritz_.

    • V2: a pointer to the buffer V2_.

    • resid: a pointer to the buffer resid_.

ChaseMpiMatrices(MPI_Comm comm, std::size_t N, std::size_t m, std::size_t n, std::size_t max_block, T *H, std::size_t ldh, T *V1 = nullptr, Base<T> *ritzv = nullptr, T *V2 = nullptr, Base<T> *resid = nullptr)

A constructor of ChaseMpiMatrices for MPI case which allocates everything necessary except H_.

The private members of this class are initialized by the parameters of this constructor.

  • For V1__ and V1_, they are of size m_ * max_block.

  • For V2__ and V2_, they are of size n_ * max_block.

  • For ritzv__, ritzv_, resid__ and resid_, they are of size max_block.

  • H_ is allocated externally based the users, it is of size ldh_ * n_ with ldh_>=m_.

  • m and n can be obtained through ChaseMpiProperties::get_m() and ChaseMpiProperties::get_n(), respecitvely.

    Parameters
    • comm: the working MPI communicator of ChASE.

    • N: size of the square matrix defining the eigenproblem.

    • m: row number of H_.m can be obtained through ChaseMpiProperties::get_m()

    • n: column number of H_.n can be obtained through ChaseMpiProperties::get_n()

    • max_block: Maximum column number of matrix V1_ and V2_. It equals to nev_ + nex_.

    • H: the pointer to the user-provided buffer of matrix to be diagonalised.

    • ldh: The leading dimension of local part of Symmetric/Hermtian matrix on each MPI proc.

    • V1: a pointer to the buffer V1_.

    • ritz: a pointer to the buffer ritz_.

    • V2: a pointer to the buffer V2_.

    • resid: a pointer to the buffer resid_.

T *get_H()

Return buffer stores the (local part if applicable) matrix A.

Return

H_, a private member of this class.

T *get_V1()

Return the buffer V1_ which will be right-multiplied to A during the process of ChASE.

Return

V1_, a private member of this class.

T *get_V2()

Return the buffer V2_ whose conjugate transpose will be left-multiplied to A during the process of ChASE.

Return

V2_, a private member of this class.

Base<T> *get_Ritzv()

Return the buffer which stores the computed Ritz values.

Return

ritzv_, a private member of this class.

Base<T> *get_Resid()

Return the buffer which stores the residual of computed Ritz pairs.

Return

resid_, a private member of this class.

std::size_t get_ldh()

Return leading dimension of local part of Symmetric/Hermtian matrix on each MPI proc.

Return

ldh_, a private member of this class.

Private Members

std::unique_ptr<T[]> H__

A smart pointer which manages the buffer of H_ which stores (local part if applicable) matrix A.

std::unique_ptr<T[]> V1__

A smart pointer which manages the buffer of V1_ which will be right-multiplied to A during the process of ChASE. The eigenvectors obtained will also stored in V1_.

std::unique_ptr<T[]> V2__

A smart pointer which manages the buffer of V2_ whose conjugate transpose will be left-multiplied to A during the process of ChASE.

std::unique_ptr<Base<T>[]> ritzv__

A smart pointer which manages the buffer which stores the computed Ritz values.

std::unique_ptr<Base<T>[]> resid__

A smart pointer which manages the buffer which stores the residual of computed Ritz pairs.

T *H_

The buffer stores (local part if applicable) matrix A.

T *V1_

The buffer of V1_ which will be right-multiplied to A during the process of ChASE. The eigenvectors obtained will also be stored in V_.

T *V2_

The buffer of V2_ whose conjugate transpose will be left-multiplied to A during the process of ChASE.

Base<T> *ritzv_

The buffer which stores the computed Ritz values.

Base<T> *resid_

The buffer which stores the residual of computed Ritz pairs.

std::size_t ldh_

The leading dimension of local part of Symmetric/Hermtian matrix on each MPI proc.