diff options
Diffstat (limited to 'TESTING/MATGEN/slatm3.f')
-rw-r--r-- | TESTING/MATGEN/slatm3.f | 362 |
1 files changed, 230 insertions, 132 deletions
diff --git a/TESTING/MATGEN/slatm3.f b/TESTING/MATGEN/slatm3.f index 5dc4e29b..3c639920 100644 --- a/TESTING/MATGEN/slatm3.f +++ b/TESTING/MATGEN/slatm3.f @@ -1,10 +1,237 @@ +*> \brief \b SLATM3 +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition +* ========== +* +* REAL FUNCTION SLATM3( M, N, I, J, ISUB, JSUB, KL, KU, +* IDIST, ISEED, D, IGRADE, DL, DR, IPVTNG, IWORK, +* SPARSE ) +* +* .. Scalar Arguments .. +* +* INTEGER I, IDIST, IGRADE, IPVTNG, ISUB, J, JSUB, KL, +* $ KU, M, N +* REAL SPARSE +* .. +* +* .. Array Arguments .. +* +* INTEGER ISEED( 4 ), IWORK( * ) +* REAL D( * ), DL( * ), DR( * ) +* .. +* +* Purpose +* ======= +* +*>\details \b Purpose: +*>\verbatim +*> +*> SLATM3 returns the (ISUB,JSUB) entry of a random matrix of +*> dimension (M, N) described by the other paramters. (ISUB,JSUB) +*> is the final position of the (I,J) entry after pivoting +*> according to IPVTNG and IWORK. SLATM3 is called by the +*> SLATMR routine in order to build random test matrices. No error +*> checking on parameters is done, because this routine is called in +*> a tight loop by SLATMR which has already checked the parameters. +*> +*> Use of SLATM3 differs from SLATM2 in the order in which the random +*> number generator is called to fill in random matrix entries. +*> With SLATM2, the generator is called to fill in the pivoted matrix +*> columnwise. With SLATM3, the generator is called to fill in the +*> matrix columnwise, after which it is pivoted. Thus, SLATM3 can +*> be used to construct random matrices which differ only in their +*> order of rows and/or columns. SLATM2 is used to construct band +*> matrices while avoiding calling the random number generator for +*> entries outside the band (and therefore generating random numbers +*> in different orders for different pivot orders). +*> +*> The matrix whose (ISUB,JSUB) entry is returned is constructed as +*> follows (this routine only computes one entry): +*> +*> If ISUB is outside (1..M) or JSUB is outside (1..N), return zero +*> (this is convenient for generating matrices in band format). +*> +*> Generate a matrix A with random entries of distribution IDIST. +*> +*> Set the diagonal to D. +*> +*> Grade the matrix, if desired, from the left (by DL) and/or +*> from the right (by DR or DL) as specified by IGRADE. +*> +*> Permute, if desired, the rows and/or columns as specified by +*> IPVTNG and IWORK. +*> +*> Band the matrix to have lower bandwidth KL and upper +*> bandwidth KU. +*> +*> Set random entries to zero as specified by SPARSE. +*> +*>\endverbatim +* +* Arguments +* ========= +* +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> Number of rows of matrix. Not modified. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> Number of columns of matrix. Not modified. +*> \endverbatim +*> +*> \param[in] I +*> \verbatim +*> I is INTEGER +*> Row of unpivoted entry to be returned. Not modified. +*> \endverbatim +*> +*> \param[in] J +*> \verbatim +*> J is INTEGER +*> Column of unpivoted entry to be returned. Not modified. +*> \endverbatim +*> +*> \param[in,out] ISUB +*> \verbatim +*> ISUB is INTEGER +*> Row of pivoted entry to be returned. Changed on exit. +*> \endverbatim +*> +*> \param[in,out] JSUB +*> \verbatim +*> JSUB is INTEGER +*> Column of pivoted entry to be returned. Changed on exit. +*> \endverbatim +*> +*> \param[in] KL +*> \verbatim +*> KL is INTEGER +*> Lower bandwidth. Not modified. +*> \endverbatim +*> +*> \param[in] KU +*> \verbatim +*> KU is INTEGER +*> Upper bandwidth. Not modified. +*> \endverbatim +*> +*> \param[in] IDIST +*> \verbatim +*> IDIST is INTEGER +*> On entry, IDIST specifies the type of distribution to be +*> used to generate a random matrix . +*> 1 => UNIFORM( 0, 1 ) +*> 2 => UNIFORM( -1, 1 ) +*> 3 => NORMAL( 0, 1 ) +*> Not modified. +*> \endverbatim +*> +*> \param[in,out] ISEED +*> \verbatim +*> ISEED is INTEGER array of dimension ( 4 ) +*> Seed for random number generator. +*> Changed on exit. +*> \endverbatim +*> +*> \param[in] D +*> \verbatim +*> D is REAL array of dimension ( MIN( I , J ) ) +*> Diagonal entries of matrix. Not modified. +*> \endverbatim +*> +*> \param[in] IGRADE +*> \verbatim +*> IGRADE is INTEGER +*> Specifies grading of matrix as follows: +*> 0 => no grading +*> 1 => matrix premultiplied by diag( DL ) +*> 2 => matrix postmultiplied by diag( DR ) +*> 3 => matrix premultiplied by diag( DL ) and +*> postmultiplied by diag( DR ) +*> 4 => matrix premultiplied by diag( DL ) and +*> postmultiplied by inv( diag( DL ) ) +*> 5 => matrix premultiplied by diag( DL ) and +*> postmultiplied by diag( DL ) +*> Not modified. +*> \endverbatim +*> +*> \param[in] DL +*> \verbatim +*> DL is REAL array ( I or J, as appropriate ) +*> Left scale factors for grading matrix. Not modified. +*> \endverbatim +*> +*> \param[in] DR +*> \verbatim +*> DR is REAL array ( I or J, as appropriate ) +*> Right scale factors for grading matrix. Not modified. +*> \endverbatim +*> +*> \param[in] IPVTNG +*> \verbatim +*> IPVTNG is INTEGER +*> On entry specifies pivoting permutations as follows: +*> 0 => none. +*> 1 => row pivoting. +*> 2 => column pivoting. +*> 3 => full pivoting, i.e., on both sides. +*> Not modified. +*> \endverbatim +*> +*> \param[in] IWORK +*> \verbatim +*> IWORK is INTEGER array ( I or J, as appropriate ) +*> This array specifies the permutation used. The +*> row (or column) originally in position K is in +*> position IWORK( K ) after pivoting. +*> This differs from IWORK for SLATM2. Not modified. +*> \endverbatim +*> +*> \param[in] SPARSE +*> \verbatim +*> SPARSE is REAL between 0. and 1. +*> On entry specifies the sparsity of the matrix +*> if sparse matix is to be generated. +*> SPARSE should lie between 0 and 1. +*> A uniform ( 0, 1 ) random number x is generated and +*> compared to SPARSE; if x is larger the matrix entry +*> is unchanged and if x is smaller the entry is set +*> to zero. Thus on the average a fraction SPARSE of the +*> entries will be set to zero. +*> Not modified. +*> \endverbatim +*> +* +* Authors +* ======= +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup real_matgen +* +* ===================================================================== REAL FUNCTION SLATM3( M, N, I, J, ISUB, JSUB, KL, KU, $ IDIST, ISEED, D, IGRADE, DL, DR, IPVTNG, IWORK, $ SPARSE ) * -* -- LAPACK auxiliary test routine (version 3.1) -- -* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. -* June 2010 +* -- LAPACK auxiliary routine (version 3.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 * * .. Scalar Arguments .. * @@ -19,135 +246,6 @@ REAL D( * ), DL( * ), DR( * ) * .. * -* Purpose -* ======= -* -* SLATM3 returns the (ISUB,JSUB) entry of a random matrix of -* dimension (M, N) described by the other paramters. (ISUB,JSUB) -* is the final position of the (I,J) entry after pivoting -* according to IPVTNG and IWORK. SLATM3 is called by the -* SLATMR routine in order to build random test matrices. No error -* checking on parameters is done, because this routine is called in -* a tight loop by SLATMR which has already checked the parameters. -* -* Use of SLATM3 differs from SLATM2 in the order in which the random -* number generator is called to fill in random matrix entries. -* With SLATM2, the generator is called to fill in the pivoted matrix -* columnwise. With SLATM3, the generator is called to fill in the -* matrix columnwise, after which it is pivoted. Thus, SLATM3 can -* be used to construct random matrices which differ only in their -* order of rows and/or columns. SLATM2 is used to construct band -* matrices while avoiding calling the random number generator for -* entries outside the band (and therefore generating random numbers -* in different orders for different pivot orders). -* -* The matrix whose (ISUB,JSUB) entry is returned is constructed as -* follows (this routine only computes one entry): -* -* If ISUB is outside (1..M) or JSUB is outside (1..N), return zero -* (this is convenient for generating matrices in band format). -* -* Generate a matrix A with random entries of distribution IDIST. -* -* Set the diagonal to D. -* -* Grade the matrix, if desired, from the left (by DL) and/or -* from the right (by DR or DL) as specified by IGRADE. -* -* Permute, if desired, the rows and/or columns as specified by -* IPVTNG and IWORK. -* -* Band the matrix to have lower bandwidth KL and upper -* bandwidth KU. -* -* Set random entries to zero as specified by SPARSE. -* -* Arguments -* ========= -* -* M (input) INTEGER -* Number of rows of matrix. Not modified. -* -* N (input) INTEGER -* Number of columns of matrix. Not modified. -* -* I (input) INTEGER -* Row of unpivoted entry to be returned. Not modified. -* -* J (input) INTEGER -* Column of unpivoted entry to be returned. Not modified. -* -* ISUB (input/output) INTEGER -* Row of pivoted entry to be returned. Changed on exit. -* -* JSUB (input/output) INTEGER -* Column of pivoted entry to be returned. Changed on exit. -* -* KL (input) INTEGER -* Lower bandwidth. Not modified. -* -* KU (input) INTEGER -* Upper bandwidth. Not modified. -* -* IDIST (input) INTEGER -* On entry, IDIST specifies the type of distribution to be -* used to generate a random matrix . -* 1 => UNIFORM( 0, 1 ) -* 2 => UNIFORM( -1, 1 ) -* 3 => NORMAL( 0, 1 ) -* Not modified. -* -* ISEED (input/output) INTEGER array of dimension ( 4 ) -* Seed for random number generator. -* Changed on exit. -* -* D (input) REAL array of dimension ( MIN( I , J ) ) -* Diagonal entries of matrix. Not modified. -* -* IGRADE (input) INTEGER -* Specifies grading of matrix as follows: -* 0 => no grading -* 1 => matrix premultiplied by diag( DL ) -* 2 => matrix postmultiplied by diag( DR ) -* 3 => matrix premultiplied by diag( DL ) and -* postmultiplied by diag( DR ) -* 4 => matrix premultiplied by diag( DL ) and -* postmultiplied by inv( diag( DL ) ) -* 5 => matrix premultiplied by diag( DL ) and -* postmultiplied by diag( DL ) -* Not modified. -* -* DL (input) REAL array ( I or J, as appropriate ) -* Left scale factors for grading matrix. Not modified. -* -* DR (input) REAL array ( I or J, as appropriate ) -* Right scale factors for grading matrix. Not modified. -* -* IPVTNG (input) INTEGER -* On entry specifies pivoting permutations as follows: -* 0 => none. -* 1 => row pivoting. -* 2 => column pivoting. -* 3 => full pivoting, i.e., on both sides. -* Not modified. -* -* IWORK (input) INTEGER array ( I or J, as appropriate ) -* This array specifies the permutation used. The -* row (or column) originally in position K is in -* position IWORK( K ) after pivoting. -* This differs from IWORK for SLATM2. Not modified. -* -* SPARSE (input) REAL between 0. and 1. -* On entry specifies the sparsity of the matrix -* if sparse matix is to be generated. -* SPARSE should lie between 0 and 1. -* A uniform ( 0, 1 ) random number x is generated and -* compared to SPARSE; if x is larger the matrix entry -* is unchanged and if x is smaller the entry is set -* to zero. Thus on the average a fraction SPARSE of the -* entries will be set to zero. -* Not modified. -* * ===================================================================== * * .. Parameters .. |