181 SUBROUTINE cckcsd( NM, MVAL, PVAL, QVAL, NMATS, ISEED, THRESH,
182 $ MMAX, X, XF, U1, U2, V1T, V2T, THETA, IWORK,
183 $ WORK, RWORK, NIN, NOUT, INFO )
190 INTEGER INFO, NIN, NM, NMATS, MMAX, NOUT
194 INTEGER ISEED( 4 ), IWORK( * ), MVAL( * ), PVAL( * ),
196 REAL RWORK( * ), THETA( * )
197 COMPLEX U1( * ), U2( * ), V1T( * ), V2T( * ),
198 $ work( * ), x( * ), xf( * )
205 PARAMETER ( NTESTS = 15 )
207 parameter( ntypes = 4 )
208 REAL GAPDIGIT, ORTH, REALONE, REALZERO, TEN
209 parameter( gapdigit = 10.0e0, orth = 1.0e-4,
210 $ realone = 1.0e0, realzero = 0.0e0,
213 PARAMETER ( ONE = (1.0e0,0.0e0), zero = (0.0e0,0.0e0) )
215 parameter( piover2 = 1.57079632679489661923132169163975144210e0 )
220 INTEGER I, IINFO, IM, IMAT, J, LDU1, LDU2, LDV1T,
221 $ ldv2t, ldx, lwork, m, nfail, nrun, nt, p, q, r
224 LOGICAL DOTYPE( NTYPES )
225 REAL RESULT( NTESTS )
236 EXTERNAL SLARAN, SLARND
247 CALL alareq( path, nmats, dotype, ntypes, nin, nout )
262 DO 20 imat = 1, ntypes
266 IF( .NOT.dotype( imat ) )
272 CALL claror(
'L',
'I', m, m, x, ldx, iseed, work, iinfo )
273 IF( m .NE. 0 .AND. iinfo .NE. 0 )
THEN
274 WRITE( nout, fmt = 9999 ) m, iinfo
278 ELSE IF( imat.EQ.2 )
THEN
279 r = min( p, m-p, q, m-q )
281 theta(i) = piover2 * slarnd( 1, iseed )
283 CALL clacsg( m, p, q, theta, iseed, x, ldx, work )
286 x(i+(j-1)*ldx) = x(i+(j-1)*ldx) +
287 $ orth*slarnd(2,iseed)
290 ELSE IF( imat.EQ.3 )
THEN
291 r = min( p, m-p, q, m-q )
293 theta(i) = ten**(-slarnd(1,iseed)*gapdigit)
296 theta(i) = theta(i-1) + theta(i)
299 theta(i) = piover2 * theta(i) / theta(r+1)
301 CALL clacsg( m, p, q, theta, iseed, x, ldx, work )
303 CALL claset(
'F', m, m, zero, one, x, ldx )
305 j = int( slaran( iseed ) * m ) + 1
307 CALL csrot( m, x(1+(i-1)*ldx), 1, x(1+(j-1)*ldx),
308 $ 1, realzero, realone )
315 CALL ccsdts( m, p, q, x, xf, ldx, u1, ldu1, u2, ldu2, v1t,
316 $ ldv1t, v2t, ldv2t, theta, iwork, work, lwork,
323 IF( result( i ).GE.thresh )
THEN
324 IF( nfail.EQ.0 .AND. firstt )
THEN
328 WRITE( nout, fmt = 9998 )m, p, q, imat, i,
339 CALL alasum( path, nout, nfail, nrun, 0 )
341 9999
FORMAT(
' CLAROR in CCKCSD: M = ', i5,
', INFO = ', i15 )
342 9998
FORMAT(
' M=', i4,
' P=', i4,
', Q=', i4,
', type ', i2,
343 $
', test ', i2,
', ratio=', g13.6 )
352 SUBROUTINE clacsg( M, P, Q, THETA, ISEED, X, LDX, WORK )
358 COMPLEX WORK( * ), X( LDX, * )
361 PARAMETER ( ONE = (1.0e0,0.0e0), zero = (0.0e0,0.0e0) )
365 r = min( p, m-p, q, m-q )
367 CALL claset(
'Full', m, m, zero, zero, x, ldx )
373 x(min(p,q)-r+i,min(p,q)-r+i) = cmplx( cos(theta(i)), 0.0e0 )
375 DO i = 1, min(p,m-q)-r
376 x(p-i+1,m-i+1) = -one
379 x(p-(min(p,m-q)-r)+1-i,m-(min(p,m-q)-r)+1-i) =
380 $ cmplx( -sin(theta(r-i+1)), 0.0e0 )
382 DO i = 1, min(m-p,q)-r
386 x(m-(min(m-p,q)-r)+1-i,q-(min(m-p,q)-r)+1-i) =
387 $ cmplx( sin(theta(r-i+1)), 0.0e0 )
389 DO i = 1, min(m-p,m-q)-r
393 x(p+(min(m-p,m-q)-r)+i,q+(min(m-p,m-q)-r)+i) =
394 $ cmplx( cos(theta(i)), 0.0e0 )
396 CALL claror(
'Left',
'No init', p, m, x, ldx, iseed, work, info )
397 CALL claror(
'Left',
'No init', m-p, m, x(p+1,1), ldx,
398 $ iseed, work, info )
399 CALL claror(
'Right',
'No init', m, q, x, ldx, iseed,
401 CALL claror(
'Right',
'No init', m, m-q,
402 $ x(1,q+1), ldx, iseed, work, info )
subroutine alareq(path, nmats, dotype, ntypes, nin, nout)
ALAREQ
subroutine alasum(type, nout, nfail, nrun, nerrs)
ALASUM
subroutine alahdg(iounit, path)
ALAHDG
subroutine clacsg(m, p, q, theta, iseed, x, ldx, work)
subroutine cckcsd(nm, mval, pval, qval, nmats, iseed, thresh, mmax, x, xf, u1, u2, v1t, v2t, theta, iwork, work, rwork, nin, nout, info)
CCKCSD
subroutine ccsdts(m, p, q, x, xf, ldx, u1, ldu1, u2, ldu2, v1t, ldv1t, v2t, ldv2t, theta, iwork, work, lwork, rwork, result)
CCSDTS
subroutine claror(side, init, m, n, a, lda, iseed, x, info)
CLAROR
subroutine claset(uplo, m, n, alpha, beta, a, lda)
CLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine csrot(n, cx, incx, cy, incy, c, s)
CSROT