LAPACK 3.12.1
LAPACK: Linear Algebra PACKage
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages

◆ slatm2()

real function slatm2 ( integer m,
integer n,
integer i,
integer j,
integer kl,
integer ku,
integer idist,
integer, dimension( 4 ) iseed,
real, dimension( * ) d,
integer igrade,
real, dimension( * ) dl,
real, dimension( * ) dr,
integer ipvtng,
integer, dimension( * ) iwork,
real sparse )

SLATM2

Purpose:
!> !> SLATM2 returns the (I,J) entry of a random matrix of dimension !> (M, N) described by the other parameters. It 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 SLATM2 differs from SLATM3 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 !> !> The matrix whose (I,J) entry is returned is constructed as !> follows (this routine only computes one entry): !> !> If I is outside (1..M) or J 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. !>
Parameters
[in]M
!> M is INTEGER !> Number of rows of matrix. Not modified. !>
[in]N
!> N is INTEGER !> Number of columns of matrix. Not modified. !>
[in]I
!> I is INTEGER !> Row of entry to be returned. Not modified. !>
[in]J
!> J is INTEGER !> Column of entry to be returned. Not modified. !>
[in]KL
!> KL is INTEGER !> Lower bandwidth. Not modified. !>
[in]KU
!> KU is INTEGER !> Upper bandwidth. Not modified. !>
[in]IDIST
!> 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. !>
[in,out]ISEED
!> ISEED is INTEGER array of dimension ( 4 ) !> Seed for random number generator. !> Changed on exit. !>
[in]D
!> D is REAL array of dimension ( MIN( I , J ) ) !> Diagonal entries of matrix. Not modified. !>
[in]IGRADE
!> 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. !>
[in]DL
!> DL is REAL array ( I or J, as appropriate ) !> Left scale factors for grading matrix. Not modified. !>
[in]DR
!> DR is REAL array ( I or J, as appropriate ) !> Right scale factors for grading matrix. Not modified. !>
[in]IPVTNG
!> 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. !>
[out]IWORK
!> IWORK is INTEGER array ( I or J, as appropriate ) !> This array specifies the permutation used. The !> row (or column) in position K was originally in !> position IWORK( K ). !> This differs from IWORK for SLATM3. Not modified. !>
[in]SPARSE
!> SPARSE is REAL between 0. and 1. !> On entry specifies the sparsity of the matrix !> if sparse matrix 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. !>
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.

Definition at line 206 of file slatm2.f.

208*
209* -- LAPACK auxiliary routine --
210* -- LAPACK is a software package provided by Univ. of Tennessee, --
211* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
212*
213* .. Scalar Arguments ..
214*
215 INTEGER I, IDIST, IGRADE, IPVTNG, J, KL, KU, M, N
216 REAL SPARSE
217* ..
218*
219* .. Array Arguments ..
220*
221 INTEGER ISEED( 4 ), IWORK( * )
222 REAL D( * ), DL( * ), DR( * )
223* ..
224*
225* =====================================================================
226*
227* .. Parameters ..
228*
229 REAL ZERO
230 parameter( zero = 0.0e0 )
231* ..
232*
233* .. Local Scalars ..
234*
235 INTEGER ISUB, JSUB
236 REAL TEMP
237* ..
238*
239* .. External Functions ..
240*
241 REAL SLARAN, SLARND
242 EXTERNAL slaran, slarnd
243* ..
244*
245*-----------------------------------------------------------------------
246*
247* .. Executable Statements ..
248*
249*
250* Check for I and J in range
251*
252 IF( i.LT.1 .OR. i.GT.m .OR. j.LT.1 .OR. j.GT.n ) THEN
253 slatm2 = zero
254 RETURN
255 END IF
256*
257* Check for banding
258*
259 IF( j.GT.i+ku .OR. j.LT.i-kl ) THEN
260 slatm2 = zero
261 RETURN
262 END IF
263*
264* Check for sparsity
265*
266 IF( sparse.GT.zero ) THEN
267 IF( slaran( iseed ).LT.sparse ) THEN
268 slatm2 = zero
269 RETURN
270 END IF
271 END IF
272*
273* Compute subscripts depending on IPVTNG
274*
275 IF( ipvtng.EQ.0 ) THEN
276 isub = i
277 jsub = j
278 ELSE IF( ipvtng.EQ.1 ) THEN
279 isub = iwork( i )
280 jsub = j
281 ELSE IF( ipvtng.EQ.2 ) THEN
282 isub = i
283 jsub = iwork( j )
284 ELSE IF( ipvtng.EQ.3 ) THEN
285 isub = iwork( i )
286 jsub = iwork( j )
287 END IF
288*
289* Compute entry and grade it according to IGRADE
290*
291 IF( isub.EQ.jsub ) THEN
292 temp = d( isub )
293 ELSE
294 temp = slarnd( idist, iseed )
295 END IF
296 IF( igrade.EQ.1 ) THEN
297 temp = temp*dl( isub )
298 ELSE IF( igrade.EQ.2 ) THEN
299 temp = temp*dr( jsub )
300 ELSE IF( igrade.EQ.3 ) THEN
301 temp = temp*dl( isub )*dr( jsub )
302 ELSE IF( igrade.EQ.4 .AND. isub.NE.jsub ) THEN
303 temp = temp*dl( isub ) / dl( jsub )
304 ELSE IF( igrade.EQ.5 ) THEN
305 temp = temp*dl( isub )*dl( jsub )
306 END IF
307 slatm2 = temp
308 RETURN
309*
310* End of SLATM2
311*
real function slaran(iseed)
SLARAN
Definition slaran.f:67
real function slarnd(idist, iseed)
SLARND
Definition slarnd.f:73
real function slatm2(m, n, i, j, kl, ku, idist, iseed, d, igrade, dl, dr, ipvtng, iwork, sparse)
SLATM2
Definition slatm2.f:208
Here is the call graph for this function:
Here is the caller graph for this function: