annotate libcruft/blas/strsm.f @ 6656:c92e679d9cc5

[project @ 2007-05-22 21:20:58 by jwe]
author jwe
date Tue, 22 May 2007 21:20:58 +0000
parents 024ef171aec3
children 82be108cc558
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4347
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
1 SUBROUTINE STRSM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA,
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
2 $ B, LDB )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
3 * .. Scalar Arguments ..
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
4 CHARACTER*1 SIDE, UPLO, TRANSA, DIAG
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
5 INTEGER M, N, LDA, LDB
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
6 REAL ALPHA
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
7 * .. Array Arguments ..
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
8 REAL A( LDA, * ), B( LDB, * )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
9 * ..
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
10 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
11 * Purpose
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
12 * =======
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
13 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
14 * STRSM solves one of the matrix equations
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
15 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
16 * op( A )*X = alpha*B, or X*op( A ) = alpha*B,
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
17 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
18 * where alpha is a scalar, X and B are m by n matrices, A is a unit, or
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
19 * non-unit, upper or lower triangular matrix and op( A ) is one of
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
20 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
21 * op( A ) = A or op( A ) = A'.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
22 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
23 * The matrix X is overwritten on B.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
24 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
25 * Parameters
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
26 * ==========
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
27 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
28 * SIDE - CHARACTER*1.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
29 * On entry, SIDE specifies whether op( A ) appears on the left
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
30 * or right of X as follows:
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
31 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
32 * SIDE = 'L' or 'l' op( A )*X = alpha*B.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
33 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
34 * SIDE = 'R' or 'r' X*op( A ) = alpha*B.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
35 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
36 * Unchanged on exit.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
37 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
38 * UPLO - CHARACTER*1.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
39 * On entry, UPLO specifies whether the matrix A is an upper or
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
40 * lower triangular matrix as follows:
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
41 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
42 * UPLO = 'U' or 'u' A is an upper triangular matrix.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
43 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
44 * UPLO = 'L' or 'l' A is a lower triangular matrix.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
45 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
46 * Unchanged on exit.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
47 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
48 * TRANSA - CHARACTER*1.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
49 * On entry, TRANSA specifies the form of op( A ) to be used in
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
50 * the matrix multiplication as follows:
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
51 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
52 * TRANSA = 'N' or 'n' op( A ) = A.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
53 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
54 * TRANSA = 'T' or 't' op( A ) = A'.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
55 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
56 * TRANSA = 'C' or 'c' op( A ) = A'.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
57 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
58 * Unchanged on exit.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
59 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
60 * DIAG - CHARACTER*1.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
61 * On entry, DIAG specifies whether or not A is unit triangular
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
62 * as follows:
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
63 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
64 * DIAG = 'U' or 'u' A is assumed to be unit triangular.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
65 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
66 * DIAG = 'N' or 'n' A is not assumed to be unit
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
67 * triangular.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
68 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
69 * Unchanged on exit.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
70 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
71 * M - INTEGER.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
72 * On entry, M specifies the number of rows of B. M must be at
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
73 * least zero.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
74 * Unchanged on exit.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
75 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
76 * N - INTEGER.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
77 * On entry, N specifies the number of columns of B. N must be
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
78 * at least zero.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
79 * Unchanged on exit.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
80 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
81 * ALPHA - REAL .
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
82 * On entry, ALPHA specifies the scalar alpha. When alpha is
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
83 * zero then A is not referenced and B need not be set before
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
84 * entry.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
85 * Unchanged on exit.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
86 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
87 * A - REAL array of DIMENSION ( LDA, k ), where k is m
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
88 * when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
89 * Before entry with UPLO = 'U' or 'u', the leading k by k
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
90 * upper triangular part of the array A must contain the upper
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
91 * triangular matrix and the strictly lower triangular part of
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
92 * A is not referenced.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
93 * Before entry with UPLO = 'L' or 'l', the leading k by k
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
94 * lower triangular part of the array A must contain the lower
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
95 * triangular matrix and the strictly upper triangular part of
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
96 * A is not referenced.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
97 * Note that when DIAG = 'U' or 'u', the diagonal elements of
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
98 * A are not referenced either, but are assumed to be unity.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
99 * Unchanged on exit.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
100 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
101 * LDA - INTEGER.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
102 * On entry, LDA specifies the first dimension of A as declared
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
103 * in the calling (sub) program. When SIDE = 'L' or 'l' then
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
104 * LDA must be at least max( 1, m ), when SIDE = 'R' or 'r'
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
105 * then LDA must be at least max( 1, n ).
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
106 * Unchanged on exit.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
107 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
108 * B - REAL array of DIMENSION ( LDB, n ).
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
109 * Before entry, the leading m by n part of the array B must
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
110 * contain the right-hand side matrix B, and on exit is
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
111 * overwritten by the solution matrix X.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
112 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
113 * LDB - INTEGER.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
114 * On entry, LDB specifies the first dimension of B as declared
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
115 * in the calling (sub) program. LDB must be at least
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
116 * max( 1, m ).
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
117 * Unchanged on exit.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
118 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
119 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
120 * Level 3 Blas routine.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
121 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
122 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
123 * -- Written on 8-February-1989.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
124 * Jack Dongarra, Argonne National Laboratory.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
125 * Iain Duff, AERE Harwell.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
126 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
127 * Sven Hammarling, Numerical Algorithms Group Ltd.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
128 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
129 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
130 * .. External Functions ..
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
131 LOGICAL LSAME
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
132 EXTERNAL LSAME
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
133 * .. External Subroutines ..
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
134 EXTERNAL XERBLA
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
135 * .. Intrinsic Functions ..
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
136 INTRINSIC MAX
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
137 * .. Local Scalars ..
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
138 LOGICAL LSIDE, NOUNIT, UPPER
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
139 INTEGER I, INFO, J, K, NROWA
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
140 REAL TEMP
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
141 * .. Parameters ..
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
142 REAL ONE , ZERO
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
143 PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0 )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
144 * ..
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
145 * .. Executable Statements ..
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
146 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
147 * Test the input parameters.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
148 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
149 LSIDE = LSAME( SIDE , 'L' )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
150 IF( LSIDE )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
151 NROWA = M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
152 ELSE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
153 NROWA = N
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
154 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
155 NOUNIT = LSAME( DIAG , 'N' )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
156 UPPER = LSAME( UPLO , 'U' )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
157 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
158 INFO = 0
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
159 IF( ( .NOT.LSIDE ).AND.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
160 $ ( .NOT.LSAME( SIDE , 'R' ) ) )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
161 INFO = 1
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
162 ELSE IF( ( .NOT.UPPER ).AND.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
163 $ ( .NOT.LSAME( UPLO , 'L' ) ) )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
164 INFO = 2
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
165 ELSE IF( ( .NOT.LSAME( TRANSA, 'N' ) ).AND.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
166 $ ( .NOT.LSAME( TRANSA, 'T' ) ).AND.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
167 $ ( .NOT.LSAME( TRANSA, 'C' ) ) )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
168 INFO = 3
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
169 ELSE IF( ( .NOT.LSAME( DIAG , 'U' ) ).AND.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
170 $ ( .NOT.LSAME( DIAG , 'N' ) ) )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
171 INFO = 4
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
172 ELSE IF( M .LT.0 )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
173 INFO = 5
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
174 ELSE IF( N .LT.0 )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
175 INFO = 6
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
176 ELSE IF( LDA.LT.MAX( 1, NROWA ) )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
177 INFO = 9
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
178 ELSE IF( LDB.LT.MAX( 1, M ) )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
179 INFO = 11
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
180 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
181 IF( INFO.NE.0 )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
182 CALL XERBLA( 'STRSM ', INFO )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
183 RETURN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
184 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
185 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
186 * Quick return if possible.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
187 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
188 IF( N.EQ.0 )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
189 $ RETURN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
190 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
191 * And when alpha.eq.zero.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
192 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
193 IF( ALPHA.EQ.ZERO )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
194 DO 20, J = 1, N
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
195 DO 10, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
196 B( I, J ) = ZERO
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
197 10 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
198 20 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
199 RETURN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
200 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
201 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
202 * Start the operations.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
203 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
204 IF( LSIDE )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
205 IF( LSAME( TRANSA, 'N' ) )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
206 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
207 * Form B := alpha*inv( A )*B.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
208 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
209 IF( UPPER )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
210 DO 60, J = 1, N
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
211 IF( ALPHA.NE.ONE )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
212 DO 30, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
213 B( I, J ) = ALPHA*B( I, J )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
214 30 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
215 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
216 DO 50, K = M, 1, -1
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
217 IF( B( K, J ).NE.ZERO )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
218 IF( NOUNIT )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
219 $ B( K, J ) = B( K, J )/A( K, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
220 DO 40, I = 1, K - 1
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
221 B( I, J ) = B( I, J ) - B( K, J )*A( I, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
222 40 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
223 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
224 50 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
225 60 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
226 ELSE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
227 DO 100, J = 1, N
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
228 IF( ALPHA.NE.ONE )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
229 DO 70, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
230 B( I, J ) = ALPHA*B( I, J )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
231 70 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
232 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
233 DO 90 K = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
234 IF( B( K, J ).NE.ZERO )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
235 IF( NOUNIT )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
236 $ B( K, J ) = B( K, J )/A( K, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
237 DO 80, I = K + 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
238 B( I, J ) = B( I, J ) - B( K, J )*A( I, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
239 80 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
240 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
241 90 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
242 100 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
243 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
244 ELSE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
245 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
246 * Form B := alpha*inv( A' )*B.
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
247 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
248 IF( UPPER )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
249 DO 130, J = 1, N
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
250 DO 120, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
251 TEMP = ALPHA*B( I, J )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
252 DO 110, K = 1, I - 1
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
253 TEMP = TEMP - A( K, I )*B( K, J )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
254 110 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
255 IF( NOUNIT )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
256 $ TEMP = TEMP/A( I, I )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
257 B( I, J ) = TEMP
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
258 120 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
259 130 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
260 ELSE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
261 DO 160, J = 1, N
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
262 DO 150, I = M, 1, -1
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
263 TEMP = ALPHA*B( I, J )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
264 DO 140, K = I + 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
265 TEMP = TEMP - A( K, I )*B( K, J )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
266 140 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
267 IF( NOUNIT )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
268 $ TEMP = TEMP/A( I, I )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
269 B( I, J ) = TEMP
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
270 150 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
271 160 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
272 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
273 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
274 ELSE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
275 IF( LSAME( TRANSA, 'N' ) )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
276 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
277 * Form B := alpha*B*inv( A ).
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
278 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
279 IF( UPPER )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
280 DO 210, J = 1, N
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
281 IF( ALPHA.NE.ONE )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
282 DO 170, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
283 B( I, J ) = ALPHA*B( I, J )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
284 170 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
285 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
286 DO 190, K = 1, J - 1
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
287 IF( A( K, J ).NE.ZERO )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
288 DO 180, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
289 B( I, J ) = B( I, J ) - A( K, J )*B( I, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
290 180 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
291 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
292 190 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
293 IF( NOUNIT )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
294 TEMP = ONE/A( J, J )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
295 DO 200, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
296 B( I, J ) = TEMP*B( I, J )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
297 200 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
298 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
299 210 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
300 ELSE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
301 DO 260, J = N, 1, -1
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
302 IF( ALPHA.NE.ONE )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
303 DO 220, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
304 B( I, J ) = ALPHA*B( I, J )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
305 220 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
306 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
307 DO 240, K = J + 1, N
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
308 IF( A( K, J ).NE.ZERO )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
309 DO 230, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
310 B( I, J ) = B( I, J ) - A( K, J )*B( I, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
311 230 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
312 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
313 240 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
314 IF( NOUNIT )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
315 TEMP = ONE/A( J, J )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
316 DO 250, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
317 B( I, J ) = TEMP*B( I, J )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
318 250 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
319 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
320 260 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
321 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
322 ELSE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
323 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
324 * Form B := alpha*B*inv( A' ).
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
325 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
326 IF( UPPER )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
327 DO 310, K = N, 1, -1
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
328 IF( NOUNIT )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
329 TEMP = ONE/A( K, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
330 DO 270, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
331 B( I, K ) = TEMP*B( I, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
332 270 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
333 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
334 DO 290, J = 1, K - 1
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
335 IF( A( J, K ).NE.ZERO )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
336 TEMP = A( J, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
337 DO 280, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
338 B( I, J ) = B( I, J ) - TEMP*B( I, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
339 280 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
340 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
341 290 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
342 IF( ALPHA.NE.ONE )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
343 DO 300, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
344 B( I, K ) = ALPHA*B( I, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
345 300 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
346 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
347 310 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
348 ELSE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
349 DO 360, K = 1, N
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
350 IF( NOUNIT )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
351 TEMP = ONE/A( K, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
352 DO 320, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
353 B( I, K ) = TEMP*B( I, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
354 320 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
355 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
356 DO 340, J = K + 1, N
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
357 IF( A( J, K ).NE.ZERO )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
358 TEMP = A( J, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
359 DO 330, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
360 B( I, J ) = B( I, J ) - TEMP*B( I, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
361 330 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
362 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
363 340 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
364 IF( ALPHA.NE.ONE )THEN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
365 DO 350, I = 1, M
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
366 B( I, K ) = ALPHA*B( I, K )
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
367 350 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
368 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
369 360 CONTINUE
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
370 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
371 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
372 END IF
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
373 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
374 RETURN
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
375 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
376 * End of STRSM .
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
377 *
024ef171aec3 [project @ 2003-02-20 23:31:46 by jwe]
jwe
parents:
diff changeset
378 END