!----------------------------------------------------------------- ! ! Purpose ! ======= ! ! LA_LAGGE generates a real general m by n matrix A, by pre- and post- ! multiplying a real diagonal matrix D with random orthogonal matrices: ! A = U*D*V. The lower and upper bandwidths may then be reduced to ! kl and ku by additional orthogonal transformations. ! ! Arguments ! ========= ! ! SUBROUTINE LA_LAGGE( A, KL, KU, D, ISEED, INFO ) ! (), INTENT(OUT) :: A(:,:) ! INTEGER, INTENT(IN), OPTIONAL :: KL, KU ! REAL(), INTENT(IN), OPTIONAL, TARGET :: D(:) ! INTEGER, INTENT(INOUT), OPTIONAL :: ISEED(4) ! INTEGER, INTENT(OUT), OPTIONAL :: INFO ! ::= REAL | COMPLEX ! ::= KIND(1.0) | KIND(1.0D0) ! ! ===================== ! ! A (output) REAL array, shape (:,:), SIZE(A,1) == m, ! SIZE(A,2) == n. ! The generated m by n matrix A. ! ! KL (input) INTEGER ! The number of nonzero subdiagonals within the band of A. ! 0 <= KL <= M-1. ! ! KU (input) INTEGER ! The number of nonzero superdiagonals within the band of A. ! 0 <= KU <= N-1. ! ! D (input) REAL array, dimension (min(M,N)) ! The diagonal elements of the diagonal matrix D. ! ! ISEED Optional (input/output) INTEGER array, shape (:), ! SIZE(ISEED) == 4. ! On entry, the seed of the random number generator; the array ! elements must be between 0 and 4095, and ISEED(4) must be ! odd. ! On exit, the seed is updated. ! ! INFO (output) INTEGER ! = 0: successful exit ! < 0: if INFO = -i, the i-th argument had an illegal value ! If INFO is not present and an error occurs, then the program is ! terminated with an error message. ! ! --------------------------------------------------------------------- .