ScaLAPACKFX
Private Member Functions | List of all members
scalapackfx_module::scalafx_pheevd Interface Reference

Solves Hermitian eigenvalue problem by the divide and conquer algorithm. More...

Private Member Functions

subroutine scalafx_pheevd_complex (aa, desca, ww, zz, descz, jobz, uplo, ia, ja, iz, jz, work, rwork, iwork, allocfix, info)
 Solves Hermitian eigenvalue problem by the divide and conquer algorithm.
 
subroutine scalafx_pheevd_dcomplex (aa, desca, ww, zz, descz, jobz, uplo, ia, ja, iz, jz, work, rwork, iwork, allocfix, info)
 Solves Hermitian eigenvalue problem by the divide and conquer algorithm.
 

Detailed Description

Solves Hermitian eigenvalue problem by the divide and conquer algorithm.

Member Function/Subroutine Documentation

subroutine scalapackfx_module::scalafx_pheevd::scalafx_pheevd_complex ( complex(sp), dimension(:,:), intent(inout)  aa,
integer, dimension(dlen_), intent(in)  desca,
real(sp), dimension(:), intent(out)  ww,
complex(sp), dimension(:,:), intent(out)  zz,
integer, dimension(dlen_), intent(in)  descz,
character, intent(in), optional  jobz,
character, intent(in), optional  uplo,
integer, intent(in), optional  ia,
integer, intent(in), optional  ja,
integer, intent(in), optional  iz,
integer, intent(in), optional  jz,
complex(sp), dimension(:), intent(inout), optional, allocatable  work,
real(sp), dimension(:), intent(inout), optional, allocatable  rwork,
integer, dimension(:), intent(inout), optional, allocatable  iwork,
logical, intent(in), optional  allocfix,
integer, intent(out), optional  info 
)
private

Solves Hermitian eigenvalue problem by the divide and conquer algorithm.

Parameters
aaMatrix to diagonalize (A).
descaDescriptor of matrix A.
wwEigenvalues on exit.
zzEigenvectors on exit (Z).
desczDescriptor of the eigenvector matrix.
jobzJob type (default: "V")
uploUpper or lower diagonal matrix (default: "L")
iaFirst row of the submatrix A (default: 1)
jaFirst column of the submatrix A (default: 1)
izFirst row of the submatrix Z (default: 1)
jzFirst column of the submatrix Z (default: 1)
workComplex working array (if not specified, allocated automatically)
rworkReal working array (if not specified, allocated automatically)
iworkInteger working array (if not specified, allocated automatically)
allocfixIf yes, the routine tries to enlarge the workspace size as returned by the appropriate p?syevd() routine by some empirical values.
infoInfo flag. If not specified and SCALAPACK calls returns nozero, subroutine stops.
Note
Unfortunately, SCALAPACK seems to return the wrong real work space sizes for many cases. This routine (when allocfix had been set to true) tries to improve on it by two ways:
  • It queries also the QR routine (p?heev) for workspace size and takes this, if bigger than returned by p?heevd. That should ensure that the pzunmtr() routine does not encounter any difficulties.
  • It additionally enlarges the real workspace size by the amount of memory needed by the pdlasrt() routine, to make sure this would not fail either.
Those fixes are empirical, may lead to oversized workspace allocations and probably would not even fix the allocation problem, but are the best we could find so far.
See Also
SCALAPACK documentation (routine p?heevd).
subroutine scalapackfx_module::scalafx_pheevd::scalafx_pheevd_dcomplex ( complex(dp), dimension(:,:), intent(inout)  aa,
integer, dimension(dlen_), intent(in)  desca,
real(dp), dimension(:), intent(out)  ww,
complex(dp), dimension(:,:), intent(out)  zz,
integer, dimension(dlen_), intent(in)  descz,
character, intent(in), optional  jobz,
character, intent(in), optional  uplo,
integer, intent(in), optional  ia,
integer, intent(in), optional  ja,
integer, intent(in), optional  iz,
integer, intent(in), optional  jz,
complex(dp), dimension(:), intent(inout), optional, allocatable  work,
real(dp), dimension(:), intent(inout), optional, allocatable  rwork,
integer, dimension(:), intent(inout), optional, allocatable  iwork,
logical, intent(in), optional  allocfix,
integer, intent(out), optional  info 
)
private

Solves Hermitian eigenvalue problem by the divide and conquer algorithm.

Parameters
aaMatrix to diagonalize (A).
descaDescriptor of matrix A.
wwEigenvalues on exit.
zzEigenvectors on exit (Z).
desczDescriptor of the eigenvector matrix.
jobzJob type (default: "V")
uploUpper or lower diagonal matrix (default: "L")
iaFirst row of the submatrix A (default: 1)
jaFirst column of the submatrix A (default: 1)
izFirst row of the submatrix Z (default: 1)
jzFirst column of the submatrix Z (default: 1)
workComplex working array (if not specified, allocated automatically)
rworkReal working array (if not specified, allocated automatically)
iworkInteger working array (if not specified, allocated automatically)
allocfixIf yes, the routine tries to enlarge the workspace size as returned by the appropriate p?syevd() routine by some empirical values.
infoInfo flag. If not specified and SCALAPACK calls returns nozero, subroutine stops.
Note
Unfortunately, SCALAPACK seems to return the wrong real work space sizes for many cases. This routine (when allocfix had been set to true) tries to improve on it by two ways:
  • It queries also the QR routine (p?heev) for workspace size and takes this, if bigger than returned by p?heevd. That should ensure that the pzunmtr() routine does not encounter any difficulties.
  • It additionally enlarges the real workspace size by the amount of memory needed by the pdlasrt() routine, to make sure this would not fail either.
Those fixes are empirical, may lead to oversized workspace allocations and probably would not even fix the allocation problem, but are the best we could find so far.
See Also
SCALAPACK documentation (routine p?heevd).

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