 LAPACK  3.10.0 LAPACK: Linear Algebra PACKage

◆ dlatb9()

 subroutine dlatb9 ( character*3 PATH, integer IMAT, integer M, integer P, integer N, character TYPE, integer KLA, integer KUA, integer KLB, integer KUB, double precision ANORM, double precision BNORM, integer MODEA, integer MODEB, double precision CNDNMA, double precision CNDNMB, character DISTA, character DISTB )

DLATB9

Purpose:
DLATB9 sets parameters for the matrix generator based on the type of
matrix to be generated.
Parameters
 [in] PATH PATH is CHARACTER*3 The LAPACK path name. [in] IMAT IMAT is INTEGER An integer key describing which matrix to generate for this path. = 1: A: diagonal, B: upper triangular = 2: A: upper triangular, B: upper triangular = 3: A: lower triangular, B: upper triangular Else: A: general dense, B: general dense [in] M M is INTEGER The number of rows in the matrix to be generated. [in] P P is INTEGER [in] N N is INTEGER The number of columns in the matrix to be generated. [out] TYPE TYPE is CHARACTER*1 The type of the matrix to be generated: = 'S': symmetric matrix; = 'P': symmetric positive (semi)definite matrix; = 'N': nonsymmetric matrix. [out] KLA KLA is INTEGER The lower band width of the matrix to be generated. [out] KUA KUA is INTEGER The upper band width of the matrix to be generated. [out] KLB KLB is INTEGER The lower band width of the matrix to be generated. [out] KUB KUA is INTEGER The upper band width of the matrix to be generated. [out] ANORM ANORM is DOUBLE PRECISION The desired norm of the matrix to be generated. The diagonal matrix of singular values or eigenvalues is scaled by this value. [out] BNORM BNORM is DOUBLE PRECISION The desired norm of the matrix to be generated. The diagonal matrix of singular values or eigenvalues is scaled by this value. [out] MODEA MODEA is INTEGER A key indicating how to choose the vector of eigenvalues. [out] MODEB MODEB is INTEGER A key indicating how to choose the vector of eigenvalues. [out] CNDNMA CNDNMA is DOUBLE PRECISION The desired condition number. [out] CNDNMB CNDNMB is DOUBLE PRECISION The desired condition number. [out] DISTA DISTA is CHARACTER*1 The type of distribution to be used by the random number generator. [out] DISTB DISTB is CHARACTER*1 The type of distribution to be used by the random number generator.

Definition at line 167 of file dlatb9.f.

170 *
171 * -- LAPACK test routine --
172 * -- LAPACK is a software package provided by Univ. of Tennessee, --
173 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
174 *
175 * .. Scalar Arguments ..
176  CHARACTER DISTA, DISTB, TYPE
177  CHARACTER*3 PATH
178  INTEGER IMAT, KLA, KLB, KUA, KUB, M, MODEA, MODEB, N, P
179  DOUBLE PRECISION ANORM, BNORM, CNDNMA, CNDNMB
180 * ..
181 *
182 * =====================================================================
183 *
184 * .. Parameters ..
185  DOUBLE PRECISION SHRINK, TENTH
186  parameter( shrink = 0.25d0, tenth = 0.1d+0 )
187  DOUBLE PRECISION ONE, TEN
188  parameter( one = 1.0d+0, ten = 1.0d+1 )
189 * ..
190 * .. Local Scalars ..
191  LOGICAL FIRST
193 * ..
194 * .. External Functions ..
195  LOGICAL LSAMEN
196  DOUBLE PRECISION DLAMCH
197  EXTERNAL lsamen, dlamch
198 * ..
199 * .. Intrinsic Functions ..
200  INTRINSIC max, sqrt
201 * ..
202 * .. External Subroutines ..
204 * ..
205 * .. Save statement ..
207 * ..
208 * .. Data statements ..
209  DATA first / .true. /
210 * ..
211 * .. Executable Statements ..
212 *
213 * Set some constants for use in the subroutine.
214 *
215  IF( first ) THEN
216  first = .false.
217  eps = dlamch( 'Precision' )
218  badc2 = tenth / eps
220  small = dlamch( 'Safe minimum' )
221  large = one / small
222 *
223 * If it looks like we're on a Cray, take the square root of
224 * SMALL and LARGE to avoid overflow and underflow problems.
225 *
226  CALL dlabad( small, large )
227  small = shrink*( small / eps )
228  large = one / small
229  END IF
230 *
231 * Set some parameters we don't plan to change.
232 *
233  TYPE = 'N'
234  dista = 'S'
235  distb = 'S'
236  modea = 3
237  modeb = 4
238 *
239 * Set the lower and upper bandwidths.
240 *
241  IF( lsamen( 3, path, 'GRQ' ) .OR. lsamen( 3, path, 'LSE' ) .OR.
242  \$ lsamen( 3, path, 'GSV' ) ) THEN
243 *
244 * A: M by N, B: P by N
245 *
246  IF( imat.EQ.1 ) THEN
247 *
248 * A: diagonal, B: upper triangular
249 *
250  kla = 0
251  kua = 0
252  klb = 0
253  kub = max( n-1, 0 )
254 *
255  ELSE IF( imat.EQ.2 ) THEN
256 *
257 * A: upper triangular, B: upper triangular
258 *
259  kla = 0
260  kua = max( n-1, 0 )
261  klb = 0
262  kub = max( n-1, 0 )
263 *
264  ELSE IF( imat.EQ.3 ) THEN
265 *
266 * A: lower triangular, B: upper triangular
267 *
268  kla = max( m-1, 0 )
269  kua = 0
270  klb = 0
271  kub = max( n-1, 0 )
272 *
273  ELSE
274 *
275 * A: general dense, B: general dense
276 *
277  kla = max( m-1, 0 )
278  kua = max( n-1, 0 )
279  klb = max( p-1, 0 )
280  kub = max( n-1, 0 )
281 *
282  END IF
283 *
284  ELSE IF( lsamen( 3, path, 'GQR' ) .OR. lsamen( 3, path, 'GLM' ) )
285  \$ THEN
286 *
287 * A: N by M, B: N by P
288 *
289  IF( imat.EQ.1 ) THEN
290 *
291 * A: diagonal, B: lower triangular
292 *
293  kla = 0
294  kua = 0
295  klb = max( n-1, 0 )
296  kub = 0
297  ELSE IF( imat.EQ.2 ) THEN
298 *
299 * A: lower triangular, B: diagonal
300 *
301  kla = max( n-1, 0 )
302  kua = 0
303  klb = 0
304  kub = 0
305 *
306  ELSE IF( imat.EQ.3 ) THEN
307 *
308 * A: lower triangular, B: upper triangular
309 *
310  kla = max( n-1, 0 )
311  kua = 0
312  klb = 0
313  kub = max( p-1, 0 )
314 *
315  ELSE
316 *
317 * A: general dense, B: general dense
318 *
319  kla = max( n-1, 0 )
320  kua = max( m-1, 0 )
321  klb = max( n-1, 0 )
322  kub = max( p-1, 0 )
323  END IF
324 *
325  END IF
326 *
327 * Set the condition number and norm.
328 *
329  cndnma = ten*ten
330  cndnmb = ten
331  IF( lsamen( 3, path, 'GQR' ) .OR. lsamen( 3, path, 'GRQ' ) .OR.
332  \$ lsamen( 3, path, 'GSV' ) ) THEN
333  IF( imat.EQ.5 ) THEN
336  ELSE IF( imat.EQ.6 ) THEN
339  ELSE IF( imat.EQ.7 ) THEN
342  ELSE IF( imat.EQ.8 ) THEN
345  END IF
346  END IF
347 *
348  anorm = ten
349  bnorm = ten*ten*ten
350  IF( lsamen( 3, path, 'GQR' ) .OR. lsamen( 3, path, 'GRQ' ) ) THEN
351  IF( imat.EQ.7 ) THEN
352  anorm = small
353  bnorm = large
354  ELSE IF( imat.EQ.8 ) THEN
355  anorm = large
356  bnorm = small
357  END IF
358  END IF
359 *
360  IF( n.LE.1 ) THEN
361  cndnma = one
362  cndnmb = one
363  END IF
364 *
365  RETURN
366 *
367 * End of DLATB9
368 *
double precision function dlamch(CMACH)
DLAMCH
Definition: dlamch.f:69
logical function lsamen(N, CA, CB)
LSAMEN
Definition: lsamen.f:74