Release HistoryΒΆ


Release:2.1
Date:Feb 12, 2021

This version provides bug corrections, large speed improvements for linear algebra subroutines and new routines based on randomized algorithms for computing restricted singular value and eigenvalue decompositions.

Updated June 07, 2021 to correct for deficiencies in new versions of the PGI fortran compiler related to the managing of (internal) memory. The updates concern only small changes in the SVD_Procedures and LLSQ_Procedures modules and the STATPACK testing programs in the tests directory.

Updated Dec 20, 2021 for bug corrections. The bug corrections concern only a small change for the lq_cmp() subroutine in the QR_Procedures module when used in a multi-threaded environment.

Changes and updates:

module BLAS_Interfaces:

  • Generic interfaces have been added for the following BLAS subroutines: Xsyr2(), Xher2(), Xspr2(), Xhpr2(), Xsymm(), Xhemm(), Xtrsm(), Xtrmm(), Xsyrk(), Xherk(), Xsyr2k(), Xher2k() where X can be s, d, c and z. The new generic interfaces have the form: syr2, her2, spr2, hpr2, symm, hemm, trsm, trmm, syrk, herk, syr2k, her2k
  • All COMPLEX*16 declarations in the module have been replaced by DOUBLE COMPLEX declarations.

module Char_constants:

  • Inclusion of new error messages for modules SVD_Procedures and QR_Procedures.

module Select_Parameters:

  • Integration of new public parameters, which specify the default block sizes for the different blocked algorithms in modules Utilities, FFT_Procedures, Lin_Procedures, QR_Procedures, Eig_Procedures and SVD_Procedures.

module Sort_Procedures:

  • Improved BLAS support and speed improvement for reorder() generic subroutine. A faster and in-place algorithm is now used.
  • Improved documentation of the subroutines in the module.

module Giv_Procedures:

  • Large speed improvement for givens_mat_left(), givens_vec_mat_left(), fastgivens_mat_left() and fastgivens_vec_mat_left() subroutines. A faster transpose algorithm is now used by default.
  • Improved documentation of the subroutines in the module.

module Lin_Procedures:

  • Improved BLAS support for the following subroutines: lu_solve(), solve_lin(), lin_lu_solve(), triang_solve(), comp_uut_ltl() and comp_triang_inv().
  • Improved documentation of the subroutines in the module.

module QR_Procedures:

  • Improved BLAS support and speed improvements for the following subroutines: ortho_gen_lq(), apply_q_lq(), qr_cmp(), ortho_gen_qr() and apply_q_qr(). New blocked algorithms (with BLAS3 support) have been implemented in subroutines qr_cmp(), ortho_gen_qr() and apply_q_qr().
  • Speed improvements and new formulations in qrfac() and qr_cmp2() subroutines.
  • Improved documentation of the subroutines in the module.

module Random:

  • Improved BLAS support for the following subroutines: gen_random_sym_mat() and gen_random_mat().

module SVD_Procedures:

  • Large speed improvements in generic bd_cmp2() subroutine, which performs bidiagonalisation of a rectangular matrix using the one-sided Ralha-Barlow bidiagonal reduction algorithm. A general blocked algorithm is now used.
  • Inclusion of a new subroutine, bd_cmp3(), which perfoms a partial bidiagonalisation of a rectangular matrix using the one-sided Ralha-Barlow bidiagonal reduction algorithm. The subroutine computes the bidiagonal and the right orthogonal matrices only. A general blocked algorithm is also used in bd_cmp3().
  • Correction of a small bug in generic bd_cmp2() subroutine when the first column of the matrix is zero.
  • A specific version of the generic bd_cmp() subroutine, which does a preliminary qr or lq factorization before bidiagonalization, has been added in the module (e.g., bd_cmp_c() subroutine).
  • Large speed improvements in the generic svd_cmp(), svd_cmp2(), svd_cmp3() and svd_cmp4() subroutines when the number of rows and columns of the input matrix differ significantly and, in all the cases, for svd_cmp3() and svd_cmp4() subroutines because of the use of the new bd_cmp2() subroutine. All these SVD subroutines benefit also from the speed improvements done in module QR_Procedures.
  • Large speed improvements in the subroutines apply_q_bd(), apply_p_bd(), ortho_gen_bd(), ortho_gen_bd2(), ortho_gen_q_bd() and ortho_gen_p_bd(), which also benefit from the speed improvements done in module QR_Procedures.
  • New forms of calls, which allow pre-processing of the input matrix. by a preliminary qr or lq factorization, and large speed improvements in the (now generic) select_singval_cmp(), select_singval_cmp2(), select_singval_cmp3() and select_singval_cmp4() subroutines.
  • Large speed improvements in the generic bd_inviter2() et bd_deflate2() subroutines and new forms of calls, which can be used with the new forms of calls of select_singval_cmp(), select_singval_cmp2() and select_singval_cmp3() and select_singval_cmp4() subroutines to obtain the (partial) SVD of a matrix after a pre-processing by a preliminary qr or lq decomposition. This results in large speed improvement when the number of rows and columns of the input matrix differ significantly.
  • Inclusion of three new subroutines rsvd_cmp(), rsvd_cmp_fixed_precision() and reig_pos_cmp(), which compute, respectively, approximations of partial SVD of rectangular matrices and partial EVD of symmetric positve semi-definite matrices using randomized algorithms.
  • Improved documentation of the subroutines in the module.

module LLSQ_Procedures:

  • Improved BLAS support for the following subroutines: solve_llsq(), llsq_qr_solve() and llsq_qr_solve2().
  • New and faster formulation for computing minimum 2-norm solutions in subroutines solve_llsq(), llsq_qr_solve(), llsq_qr_solve2() and qr_solve2() subroutines.
  • All subroutines also benefit from the speed improvements in modules QR_Procedures and SVD_Procedures.
  • Improved documentation of the subroutines in the module.

module EIG_Procedures:

  • Inclusion of a new subroutine, symtrid_cmp2(), which reduces a real n-by-n symmetric matrix cross-product using the one-sided Ralha tridiagonal reduction algorithm and without forming this cross-product. A general blocked version of the algorithm is used.
  • Correction of a bug in the generic apply_q_symtrid() subroutine whith the optional logical argument upper and when the matrix is in packed form (upper was used in the apply_q_symtrid_c() subroutine, but its presence in the call of the subroutine was not tested). In this version of the library, the old apply_q_symtrid_c() subroutine has been replaced by the subroutines apply_q_symtrid_c() and apply_q_symtrid_d(), which offer the same functionalities and the bug is removed.
  • Improved BLAS support in the generic symtrid_cmp() subroutine.
  • Improved BLAS support and and large speed improvements in the generic subroutines ortho_gen_symtrid() and apply_q_symtrid() when the argument upper is not used. A more efficient blocked algorithm is now used (with BLAS3 support).
  • Large speed improvements in the generic eig_cmp(), eig_cmp2(), eig_cmp3(), trid_deflate() and trid_inviter() subroutines due to the updates of ortho_gen_symtrid() and apply_q_symtrid() subroutines when the argument upper is not used.
  • Inclusion of a new subroutine, reig_cmp(), which computes approximations of partial EVD of symmetric matrices using randomized algorithms.
  • Improved documentation of the subroutines in the module.

modules Time_Procedures, Time_Series_Procedures, Stat_Procedures, Mul_Stat_Procedures, Prob_Procedures, Random, Sort_Procedures, Giv_Procedures, Hous_Procedures:

  • Improved documentation of the subroutines in the modules.

examples directory:

  • Inclusion of new example programs illustrating the new features described above: ex1_bd_cmp3.F90, ex1_symtrid_cmp2.F90, ex2_symtrid_cmp2.F90, ex1_rsvd_cmp.F90, ex1_rsvd_cmp_fixed_precision.F90, ex1_reig_cmp.F90, ex1_reig_pos_cmp.F90, ex1_random_svd.F90, ex1_random_eig.F90, ex1_random_eig_pos.F90 ex1_random_svd_with_blas.F90, ex1_random_eig_with_blas.F90, ex1_random_eig_pos_with_blas.F90 ex1_bd_inviter2_bis.F90, ex1_select_singval_cmp3_bis.F90, ex1_select_singval_cmp4_bis.F90 ex2_select_singval_cmp.F90, ex2_select_singval_cmp2.F90, ex2_select_singval_cmp3.F90, ex2_select_singval_cmp3_bis.F90, ex2_select_singval_cmp4.F90, ex2_select_singval_cmp4_bis.F90.
  • Update of the following example programs illustrating the new features described above: ex1_bd_deflate2.F90, ex1_bd_deflate2_bis.F90, ex1_bd_inviter2.F90, ex1_select_singval_cmp.F90, ex1_select_singval_cmp2.F90, ex1_select_singval_cmp3.F90, ex1_select_singval_cmp4.F90.
  • Update of the following example programs: ex1_eigval_cmp.F90, ex1_eigval_cmp2.F90, ex1_eigval_cmp3.F90 ex1_select_eigval_cmp.F90, ex1_select_eigval_cmp2.F90, ex1_select_eigval_cmp3.F90 ex2_eigval_cmp.F90, ex2_eigval_cmp2.F90, ex2_eigval_cmp3.F90 ex2_select_eigval_cmp.F90, ex2_select_eigval_cmp2.F90, ex2_select_eigval_cmp3.F90.

tests directory:

  • Inclusion of new test programs and update of some older test programs to test the new features added in statpack2.1 or to improve the testing of other statpack subroutines.

Release:2.0
Date:Dec 3, 2018

First open source release

Updated Sep 23, 2020 for bug corrections

Updated Dec 20, 2021 for bug corrections. The bug corrections concern only a small change for the lq_cmp() subroutine in the QR_Procedures module when used in a multi-threaded environment.


Release:1.1
Date:Jan 21, 2004

Release:1.0
Date:May 7, 2003