11/24/2013: Elemental 0.82


Documentation: [HTML] [PDF]

New Functionality

Fundamental additions

  • LU with full pivoting
  • Various (blocked when possible) pivoted LDL factorizations
  • Accurate symmetric/Hermitian inversion
  • Hermitian inertia
  • Blocked pivoted Cholesky factorization
  • Two-norm estimation
  • Preliminary Spectral Divide and Conquer algorithm for Schur decomposition
  • Preliminary Spectral Divide and Conquer algorithm for Hermitian EVD
  • Preliminary TSQR and TS-SVT implementations

Minor/incremental improvements

  • Added Gaussian, Wigner, and Haar matrices
  • Added UpdateDiagonal for adding a constant to the diagonal of a matrix
  • Added move semantics for Matrix and DistMatrix
  • Added QuasiDiagonal{Scale,Solve}
  • Added SymmetricSwap
  • Added support for relative thresholding in SVD and SVT
  • Extended condition number support, see Condition
  • Extended sorting to allow for ascending or descending, see Sort
  • Axpy now supports arbitrary distributions
  • All distributions now connected via operator=
  • DistMatrix redesigned in terms of {Row,Col,Dist,Redundant,Cross}Comm’s
  • Higher-quality random number generation through std::mt19937 Mersenne twister


Library bugfixes

  • Avoiding implicit int -> MPI_Comm conversions in Grid constructors
  • {Hermitian,Normal}UniformSpectrum now rotate diagonal matrix through a Haar similarity instead of a random Householder transformation
  • Fixed mistake in matrix sign function
  • Fixed mistake in unaligned AxpyTriangle


  • Higher-quality timers via std::chrono


  • Base<F> template alias
  • elem::Complex is now a template alias for the improved std::complex
  • Using _Pragma to simplify OpenMP directives
  • Switched away from integer templates to typedefs, i.e., Int and Unsigned
  • Added {Logic,Runtime}Error shortcuts for ‘throw std::{logic,runtime}_error’
  • Modified partially-pivoted LU and GaussianElimination to use ValueInt
  • Removed obsolete TwoNorm{Lower,Upper}Bound
  • Renamed ‘Trtrsm’ to ‘Trstrm’ (TRiangular Solve with TRiangular Matrix)
  • Renamed ‘SingularValueSoftThresholding’ to ‘SVT’
  • Renamed ‘Alignment’ to ‘Align’ in most of the library
  • Moved pivoting routines from lapack-like/ to blas-like/ folder
  • Simplified ApplyPackedReflectors, HermitianEig, and Transpose implementations
  • Simplified LDL and avoided modification of above-diagonal entries


  • Added README to almost every directory
  • Greatly improved TODO list
  • Moved Sphinx documentation to elemental-web repository

Build system

  • C++11 is now required
  • Added support for Qt5 into elemvariables
  • Fixed mistakes in compilation of sample code during configuration
  • Directly testing for ‘collapse’ OpenMP directive to avoid Clang issue
  • Improved toolchains for Vesta, and added GNU toolchain for Stampede

Python interface

  • Functioning but not yet supporting all additions since 0.81

MPI and Threading

  • Added simplified MPI wrappers and prefixed versions which use tags with ‘Tagged’, e.g., ‘TaggedSend’


  • Jed Brown for contributing a patch which removed several unused variables
  • Michael Grant for updating the Python interface to handle integer typedef’ing
  • Jeff Hammond for contributing toolchain file updates for Blue Gene/Q