1 PACKAGE UTL_NLA as
2
3 --
4 -- Types
5 --
6
7 SUBTYPE scalar_double IS BINARY_DOUBLE NOT NULL;
8 SUBTYPE scalar_float IS BINARY_FLOAT NOT NULL;
9
10 SUBTYPE flag IS CHAR(1) NOT NULL;
11
12 -- -------------------------------------------------------------
13 -- flag | legal values
14 -- -------------------------------------------------------------
15 -- trans | 'N' or 'n' => No traspose
16 -- | 'T' or 't' => Transpose
17 -- |
18 -- uplo | 'U' or 'u' => Upper-triangular
19 -- | 'L' or 'l' => Lower-triangular
20 -- |
21 -- diag | 'N' or 'n' => Non-unit triangular
22 -- | 'U' or 'u' => Unit triangular
23 -- |
24 -- side | 'L' or 'l' => Left
25 -- | 'R' or 'r' => Right
26 -- |
27 -- pack | 'R' or 'r' => Row-major array
28 -- | 'C' or 'c' => Column-major array
29 -- |
30 -- jobz | 'N' => only eigenvalues computed
31 -- | 'V' => both eigenvalues and eigenvectors computed
32 -- |
33 -- -------------------------------------------------------------
34
35 -- ------------- --
36 -- Unit Testing
37 -- ------------- --
38
39 PROCEDURE unit_test_blas;
40 PROCEDURE unit_test_lapack;
41
42 -- --------------------------------------- --
43 -- BLAS Level 1 (Vector-Vector Operations)
44 -- --------------------------------------- --
45
46 -- Purpose
47 -- =======
48 --
49 -- BLAS_SWAPS swaps the contents of two vectors each of size n.
50 --
51 -- Arguments
52 -- =========
53 --
54 -- N - INTEGER.
55 -- On entry, N specifies the number of elements of the vectors X and Y.
56 -- N must be at least zero.
57 -- Unchanged on exit.
58 -- X - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
59 -- ( 1 + ( n - 1 )*abs( INCX ) )
60 -- INCX - INTEGER.
61 -- On entry, INCX specifies the increment for the elements of
62 -- X. INCX must not be zero.
63 -- Unchanged on exit.
64 -- Y - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
65 -- ( 1 + ( n - 1 )*abs( INCY ) )
66 -- INCY - INTEGER.
67 -- On entry, INCY specifies the increment for the elements of
68 -- Y. INCY must not be zero.
69 -- Unchanged on exit.
70
71 PROCEDURE blas_swap(n IN POSITIVEN,
72 x IN OUT utl_nla_array_dbl,
73 incx IN POSITIVEN,
74 y IN OUT utl_nla_array_dbl,
75 incy IN POSITIVEN);
76
77 PROCEDURE blas_swap(n IN POSITIVEN,
78 x IN OUT UTL_NLA_ARRAY_FLT,
79 incx IN POSITIVEN,
80 y IN OUT UTL_NLA_ARRAY_FLT,
81 incy IN POSITIVEN);
82
83 -- Purpose
84 -- =======
85 --
86 -- BLAS_SCAL scales a vector by a constant.
87 --
88 -- Arguments
89 -- =========
90 --
91 -- N - INTEGER.
92 -- On entry, N specifies the number of elements of the vectors X and Y.
93 -- N must be at least zero.
94 -- Unchanged on exit.
95 -- ALPHA - SCALAR_FLOAT/DOUBLE .
96 -- On entry, ALPHA specifies the scalar alpha.
97 -- Unchanged on exit.
98 -- X - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
99 -- ( 1 + ( n - 1 )*abs( INCX ) )
100 -- INCX - INTEGER.
101 -- On entry, INCX specifies the increment for the elements of
102 -- X. INCX must not be zero.
103 -- Unchanged on exit.
104
105 PROCEDURE blas_scal(n IN POSITIVEN,
106 alpha IN scalar_double,
107 x IN OUT utl_nla_array_dbl,
108 incx IN POSITIVEN);
109
110 PROCEDURE blas_scal(n IN POSITIVEN,
111 alpha IN scalar_float,
112 x IN OUT UTL_NLA_ARRAY_FLT,
113 incx IN POSITIVEN);
114
115 -- Purpose
116 -- =======
117 --
118 -- BLAS_COPY copies the contents of vector X to vector Y.
119 --
120 -- Arguments
121 -- =========
122 --
123 -- N - INTEGER.
124 -- On entry, N specifies the number of elements of the vectors X and Y.
125 -- N must be at least zero.
126 -- Unchanged on exit.
127 -- X - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
128 -- ( 1 + ( n - 1 )*abs( INCX ) )
129 -- INCX - INTEGER.
130 -- On entry, INCX specifies the increment for the elements of
131 -- X. INCX must not be zero.
132 -- Unchanged on exit.
133 -- Y - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
134 -- ( 1 + ( n - 1 )*abs( INCY ) )
135 -- INCY - INTEGER.
136 -- On entry, INCY specifies the increment for the elements of
137 -- Y. INCY must not be zero.
138 -- Unchanged on exit.
139
140 PROCEDURE blas_copy(n IN POSITIVEN,
141 x IN utl_nla_array_dbl,
142 incx IN POSITIVEN,
143 y IN OUT utl_nla_array_dbl,
144 incy IN POSITIVEN);
145
146 PROCEDURE blas_copy(n IN POSITIVEN,
147 x IN UTL_NLA_ARRAY_FLT,
148 incx IN POSITIVEN,
149 y IN OUT UTL_NLA_ARRAY_FLT,
150 incy IN POSITIVEN);
151
152 -- Purpose
153 -- =======
154 --
155 -- BLAS_AXPY copies alpha*X + Y into vector Y.
156 --
157 -- Arguments
158 -- =========
159 --
160 -- N - INTEGER.
161 -- On entry, N specifies the number of elements of the vectors X and Y.
162 -- N must be at least zero.
163 -- Unchanged on exit.
164 -- ALPHA - SCALAR_FLOAT/DOUBLE .
165 -- On entry, ALPHA specifies the scalar alpha.
166 -- Unchanged on exit.
167 -- X - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
168 -- ( 1 + ( n - 1 )*abs( INCX ) )
169 -- Unchanged on exit.
170 -- INCX - INTEGER.
171 -- On entry, INCX specifies the increment for the elements of
172 -- X. INCX must not be zero.
173 -- Unchanged on exit.
174 -- Y - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
175 -- ( 1 + ( n - 1 )*abs( INCY ) )
176 -- INCY - INTEGER.
177 -- On entry, INCY specifies the increment for the elements of
178 -- Y. INCY must not be zero.
179 -- Unchanged on exit.
180
181 PROCEDURE blas_axpy(n IN POSITIVEN,
182 alpha IN scalar_double,
183 x IN utl_nla_array_dbl,
184 incx IN POSITIVEN,
185 y IN OUT utl_nla_array_dbl,
186 incy IN POSITIVEN);
187
188 PROCEDURE blas_axpy(n IN POSITIVEN,
189 alpha IN scalar_float,
190 x IN UTL_NLA_ARRAY_FLT,
191 incx IN POSITIVEN,
192 y IN OUT UTL_NLA_ARRAY_FLT,
193 incy IN POSITIVEN);
194
195 -- Purpose
196 -- =======
197 --
198 -- BLAS_DOT returns the dot (scalar) product of two vectors X and Y.
199 --
200 -- Arguments
201 -- =========
202 --
203 -- N - INTEGER.
204 -- On entry, N specifies the number of elements of the vectors X and Y.
205 -- N must be at least zero.
206 -- Unchanged on exit.
207 -- X - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
208 -- ( 1 + ( n - 1 )*abs( INCX ) )
209 -- Unchanged on exit.
210 -- INCX - INTEGER.
211 -- On entry, INCX specifies the increment for the elements of
212 -- X. INCX must not be zero.
213 -- Unchanged on exit.
214 -- Y - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
215 -- ( 1 + ( n - 1 )*abs( INCY ) )
216 -- Unchanged on exit.
217 -- INCY - INTEGER.
218 -- On entry, INCY specifies the increment for the elements of
219 -- Y. INCY must not be zero.
220 -- Unchanged on exit.
221
222 FUNCTION blas_dot(n IN POSITIVEN,
223 x IN utl_nla_array_dbl,
224 incx IN POSITIVEN,
225 y IN utl_nla_array_dbl,
226 incy IN POSITIVEN) RETURN BINARY_DOUBLE;
227
228 FUNCTION blas_dot(n IN POSITIVEN,
229 x IN UTL_NLA_ARRAY_FLT,
230 incx IN POSITIVEN,
231 y IN UTL_NLA_ARRAY_FLT,
232 incy IN POSITIVEN) RETURN BINARY_FLOAT;
233
234 -- Purpose
235 -- =======
236 --
237 -- BLAS_NRM2 computes the vector 2-norm (Euclidean norm)
238 --
239 -- Arguments
240 -- =========
241 --
242 -- N - INTEGER.
243 -- On entry, N specifies the number of elements of the vectors X and Y.
244 -- N must be at least zero.
245 -- Unchanged on exit.
246 -- X - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
247 -- ( 1 + ( n - 1 )*abs( INCX ) )
248 -- Unchanged on exit.
249 -- INCX - INTEGER.
250 -- On entry, INCX specifies the increment for the elements of
251 -- X. INCX must not be zero.
252 -- Unchanged on exit.
253
254 FUNCTION blas_nrm2(n IN POSITIVEN,
255 x IN utl_nla_array_dbl,
256 incx IN POSITIVEN) RETURN BINARY_DOUBLE;
257
258 FUNCTION blas_nrm2(n IN POSITIVEN,
259 x IN UTL_NLA_ARRAY_FLT,
260 incx IN POSITIVEN) RETURN BINARY_FLOAT;
261
262 -- Purpose
263 -- =======
264 --
265 -- BLAS_ASUM computes the sum of the absolute values of the vector components
266 --
267 -- Arguments
268 -- =========
269 --
270 -- N - INTEGER.
271 -- On entry, N specifies the number of elements of the vectors X and Y.
272 -- N must be at least zero.
273 -- Unchanged on exit.
274 -- X - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
275 -- ( 1 + ( n - 1 )*abs( INCX ) )
276 -- Unchanged on exit.
277 -- INCX - INTEGER.
278 -- On entry, INCX specifies the increment for the elements of
279 -- X. INCX must not be zero.
280 -- Unchanged on exit.
281
282 FUNCTION blas_asum(n IN POSITIVEN,
283 x IN utl_nla_array_dbl,
284 incx IN POSITIVEN) RETURN BINARY_DOUBLE;
285
286 FUNCTION blas_asum(n IN POSITIVEN,
287 x IN UTL_NLA_ARRAY_FLT,
288 incx IN POSITIVEN) RETURN BINARY_FLOAT;
289
290 -- Purpose
291 -- =======
292 --
293 -- BLAS_IAMAX computes the index of first element of a vector that has the
294 -- largest absolute value.
295 --
296 -- Arguments
297 -- =========
298 --
299 -- N - INTEGER.
300 -- On entry, N specifies the number of elements of the vectors X and Y.
301 -- N must be at least zero.
302 -- Unchanged on exit.
303 -- X - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
304 -- ( 1 + ( n - 1 )*abs( INCX ) )
305 -- Unchanged on exit.
306 -- INCX - INTEGER.
307 -- On entry, INCX specifies the increment for the elements of
308 -- X. INCX must not be zero.
309 -- Unchanged on exit.
310
311 FUNCTION blas_iamax(n IN POSITIVEN,
312 x IN utl_nla_array_dbl,
313 incx IN POSITIVEN) RETURN POSITIVEN;
314
315 FUNCTION blas_iamax(n IN POSITIVEN,
316 x IN UTL_NLA_ARRAY_FLT,
317 incx IN POSITIVEN) RETURN POSITIVEN;
318
319 -- Purpose
320 -- =======
321 --
322 -- BLAS_ROT returns the Plane rotation of points
323 --
324 -- Arguments
325 -- =========
326 --
327 -- N - INTEGER.
328 -- On entry, N specifies the number of elements of the vectors X and Y.
329 -- N must be at least zero.
330 -- Unchanged on exit.
331 -- X - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
332 -- ( 1 + ( n - 1 )*abs( INCX ) )
333 -- INCX - INTEGER.
334 -- On entry, INCX specifies the increment for the elements of
335 -- X. INCX must not be zero.
336 -- Unchanged on exit.
337 -- Y - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
338 -- ( 1 + ( n - 1 )*abs( INCY ) )
339 -- INCY - INTEGER.
340 -- On entry, INCY specifies the increment for the elements of
341 -- Y. INCY must not be zero.
342 -- Unchanged on exit.
343 -- C - SCALAR_FLOAT/DOUBLE .
344 -- On entry, C specifies the scalar C.
345 -- Unchanged on exit.
346 -- S - SCALAR_FLOAT/DOUBLE .
347 -- On entry, S specifies the scalar S.
348 -- Unchanged on exit.
349
350 PROCEDURE blas_rot(n IN POSITIVEN,
351 x IN OUT utl_nla_array_dbl,
352 incx IN POSITIVEN,
353 y IN OUT utl_nla_array_dbl,
354 incy IN POSITIVEN,
358 PROCEDURE blas_rot(n IN POSITIVEN,
355 c IN scalar_double,
356 s IN scalar_double);
357
359 x IN OUT UTL_NLA_ARRAY_FLT,
360 incx IN POSITIVEN,
361 y IN OUT UTL_NLA_ARRAY_FLT,
362 incy IN POSITIVEN,
363 c IN scalar_float,
364 s IN scalar_float);
365
366 -- Purpose
367 -- =======
368 --
369 -- BLAS_ROTG returns the Givens rotation of points
370 --
371 -- Arguments
372 -- =========
373 --
374 -- A - SCALAR_FLOAT/DOUBLE .
375 -- On entry, A specifies the scalar A.
376 -- B - SCALAR_FLOAT/DOUBLE .
377 -- On entry, B specifies the scalar B.
378 -- C - SCALAR_FLOAT/DOUBLE .
379 -- On entry, C specifies the scalar C.
380 -- S - SCALAR_FLOAT/DOUBLE .
381 -- On entry, S specifies the scalar S.
382
383 PROCEDURE blas_rotg(a IN OUT scalar_double,
384 b IN OUT scalar_double,
385 c IN OUT scalar_double,
386 s IN OUT scalar_double);
387
388 PROCEDURE blas_rotg(a IN OUT scalar_float,
389 b IN OUT scalar_float,
390 c IN OUT scalar_float,
391 s IN OUT scalar_float);
392
393 -- --------------------------------------- --
394 -- BLAS Level 2 (Vector-Matrix Operations)
395 -- --------------------------------------- --
396
397 -- Purpose
398 -- =======
399 --
400 -- BLAS_GEMV performs one of the matrix-vector operations
401 -- y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y,
402 -- where alpha and beta are scalars, x and y are vectors and A is an
403 -- m by n matrix.
404 --
405 -- Arguments
406 -- =========
407 --
408 -- TRANS - FLAG.
409 -- On entry, TRANS specifies the operation to be performed as
410 -- follows:
411 -- TRANS = 'N' or 'n' y := alpha*A*x + beta*y.
412 -- TRANS = 'T' or 't' y := alpha*A'*x + beta*y.
413 -- TRANS = 'C' or 'c' y := alpha*A'*x + beta*y.
414 -- Unchanged on exit.
415 -- M - INTEGER.
416 -- On entry, M specifies the number of rows of the matrix A.
417 -- M must be at least zero.
418 -- Unchanged on exit.
419 -- N - INTEGER.
420 -- On entry, N specifies the number of columns of the matrix A.
421 -- N must be at least zero.
422 -- Unchanged on exit.
423 -- ALPHA - SCALAR_FLOAT/DOUBLE .
424 -- On entry, ALPHA specifies the scalar alpha.
425 -- Unchanged on exit.
426 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, n ).
427 -- Before entry, the leading m by n part of the array A must
428 -- contain the matrix of coefficients.
429 -- Unchanged on exit.
430 -- LDA - INTEGER.
431 -- On entry, LDA specifies the first dimension of A as declared
432 -- in the calling (sub) program. LDA must be at least
433 -- max( 1, m ).
434 -- Unchanged on exit.
435 -- X - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
436 -- ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'
437 -- and at least
438 -- ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.
439 -- Before entry, the incremented array X must contain the
440 -- vector x.
441 -- Unchanged on exit.
442 -- INCX - INTEGER.
443 -- On entry, INCX specifies the increment for the elements of
444 -- X. INCX must not be zero.
445 -- Unchanged on exit.
446 -- BETA - SCALAR_FLOAT/DOUBLE .
447 -- On entry, BETA specifies the scalar beta. When BETA is
448 -- supplied as zero then Y need not be set on input.
449 -- Unchanged on exit.
450 -- Y - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
451 -- ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'
452 -- and at least
453 -- ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.
454 -- Before entry with BETA non-zero, the incremented array Y
455 -- must contain the vector y. On exit, Y is overwritten by the
456 -- updated vector y.
457 -- INCY - INTEGER.
458 -- On entry, INCY specifies the increment for the elements of
459 -- Y. INCY must not be zero.
460 -- Unchanged on exit.
461 -- PACK - (optional) FLAG
462 -- The packing of the matricies:
463 -- 'C': column-major (default)
464 -- 'R': row-major
465
466 PROCEDURE blas_gemv(trans IN flag,
467 m IN POSITIVEN,
468 n IN POSITIVEN,
469 alpha IN scalar_double,
470 a IN utl_nla_array_dbl,
471 lda IN POSITIVEN,
472 x IN utl_nla_array_dbl,
473 incx IN POSITIVEN,
474 beta IN scalar_double,
475 y IN OUT utl_nla_array_dbl,
476 incy IN POSITIVEN,
480 m IN POSITIVEN,
477 pack IN flag DEFAULT 'C');
478
479 PROCEDURE blas_gemv(trans IN flag,
481 n IN POSITIVEN,
482 alpha IN scalar_float,
483 a IN UTL_NLA_ARRAY_FLT,
484 lda IN POSITIVEN,
485 x IN UTL_NLA_ARRAY_FLT,
486 incx IN POSITIVEN,
487 beta IN scalar_float,
488 y IN OUT UTL_NLA_ARRAY_FLT,
489 incy IN POSITIVEN,
490 pack IN flag DEFAULT 'C');
491
492 -- Purpose
493 -- =======
494 --
495 -- BLAS_GBMV performs one of the matrix-vector operations
496 -- y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y,
497 -- where alpha and beta are scalars, x and y are vectors and A is an
498 -- m by n band matrix, with kl sub-diagonals and ku super-diagonals.
499 --
500 -- Arguments
501 -- =========
502 --
503 -- TRANS - FLAG.
504 -- On entry, TRANS specifies the operation to be performed as
505 -- follows:
506 -- TRANS = 'N' or 'n' y := alpha*A*x + beta*y.
507 -- TRANS = 'T' or 't' y := alpha*A'*x + beta*y.
508 -- TRANS = 'C' or 'c' y := alpha*A'*x + beta*y.
509 -- Unchanged on exit.
510 -- M - INTEGER.
511 -- On entry, M specifies the number of rows of the matrix A.
512 -- M must be at least zero.
513 -- Unchanged on exit.
514 -- N - INTEGER.
515 -- On entry, N specifies the number of columns of the matrix A.
516 -- N must be at least zero.
517 -- Unchanged on exit.
518 -- KL - INTEGER.
519 -- On entry, KL specifies the number of sub-diagonals of the
520 -- matrix A. KL must satisfy 0 .le. KL.
521 -- Unchanged on exit.
522 -- KU - INTEGER.
523 -- On entry, KU specifies the number of super-diagonals of the
524 -- matrix A. KU must satisfy 0 .le. KU.
525 -- Unchanged on exit.
526 -- ALPHA - SCALAR_FLOAT/DOUBLE .
527 -- On entry, ALPHA specifies the scalar alpha.
528 -- Unchanged on exit.
529 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, n ).
530 -- Before entry, the leading ( kl + ku + 1 ) by n part of the
531 -- array A must contain the matrix of coefficients, supplied
532 -- column by column, with the leading diagonal of the matrix in
533 -- row ( ku + 1 ) of the array, the first super-diagonal
534 -- starting at position 2 in row ku, the first sub-diagonal
535 -- starting at position 1 in row ( ku + 2 ), and so on.
536 -- Elements in the array A that do not correspond to elements
537 -- in the band matrix (such as the top left ku by ku triangle)
538 -- are not referenced.
539 -- Unchanged on exit.
540 -- LDA - INTEGER.
541 -- On entry, LDA specifies the first dimension of A as declared
542 -- in the calling (sub) program. LDA must be at least
543 -- ( kl + ku + 1 ).
544 -- Unchanged on exit.
545 -- X - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
546 -- ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'
547 -- and at least
548 -- ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.
549 -- Before entry, the incremented array X must contain the
550 -- vector x.
551 -- Unchanged on exit.
552 -- INCX - INTEGER.
553 -- On entry, INCX specifies the increment for the elements of
554 -- X. INCX must not be zero.
555 -- Unchanged on exit.
556 -- BETA - SCALAR_FLOAT/DOUBLE .
557 -- On entry, BETA specifies the scalar beta. When BETA is
558 -- supplied as zero then Y need not be set on input.
559 -- Unchanged on exit.
560 -- Y - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
561 -- ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'
562 -- and at least
563 -- ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.
564 -- Before entry, the incremented array Y must contain the
565 -- vector y. On exit, Y is overwritten by the updated vector y.
566 -- INCY - INTEGER.
567 -- On entry, INCY specifies the increment for the elements of
568 -- Y. INCY must not be zero.
569 -- Unchanged on exit.
570 -- PACK - (optional) FLAG
571 -- The packing of the matricies:
572 -- 'C': column-major (default)
573 -- 'R': row-major
574
575 PROCEDURE blas_gbmv(trans IN flag,
576 m IN POSITIVEN,
577 n IN POSITIVEN,
578 kl IN NATURALN,
579 ku IN NATURALN,
580 alpha IN scalar_double,
581 a IN utl_nla_array_dbl,
582 lda IN POSITIVEN,
583 x IN utl_nla_array_dbl,
584 incx IN POSITIVEN,
585 beta IN scalar_double,
586 y IN OUT utl_nla_array_dbl,
587 incy IN POSITIVEN,
591 m IN POSITIVEN,
588 pack IN flag DEFAULT 'C');
589
590 PROCEDURE blas_gbmv(trans IN flag,
592 n IN POSITIVEN,
593 kl IN NATURALN,
594 ku IN NATURALN,
595 alpha IN scalar_float,
596 a IN UTL_NLA_ARRAY_FLT,
597 lda IN POSITIVEN,
598 x IN UTL_NLA_ARRAY_FLT,
599 incx IN POSITIVEN,
600 beta IN scalar_float,
601 y IN OUT UTL_NLA_ARRAY_FLT,
602 incy IN POSITIVEN,
603 pack IN flag DEFAULT 'C');
604
605 -- Purpose
606 -- =======
607 --
608 -- BLAS_SYMV performs the matrix-vector operation
609 -- y := alpha*A*x + beta*y,
610 -- where alpha and beta are scalars, x and y are n element vectors and
611 -- A is an n by n symmetric matrix.
612 --
613 -- Arguments
614 -- =========
615 --
616 -- UPLO - FLAG.
617 -- On entry, UPLO specifies whether the upper or lower
618 -- triangular part of the array A is to be referenced as
619 -- follows:
620 -- UPLO = 'U' or 'u' Only the upper triangular part of A
621 -- is to be referenced.
622 -- UPLO = 'L' or 'l' Only the lower triangular part of A
623 -- is to be referenced.
624 -- Unchanged on exit.
625 -- N - INTEGER.
626 -- On entry, N specifies the order of the matrix A.
627 -- N must be at least zero.
628 -- Unchanged on exit.
629 -- ALPHA - SCALAR_FLOAT/DOUBLE .
630 -- On entry, ALPHA specifies the scalar alpha.
631 -- Unchanged on exit.
632 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, n ).
633 -- Before entry with UPLO = 'U' or 'u', the leading n by n
634 -- upper triangular part of the array A must contain the upper
635 -- triangular part of the symmetric matrix and the strictly
636 -- lower triangular part of A is not referenced.
637 -- Before entry with UPLO = 'L' or 'l', the leading n by n
638 -- lower triangular part of the array A must contain the lower
639 -- triangular part of the symmetric matrix and the strictly
640 -- upper triangular part of A is not referenced.
641 -- Unchanged on exit.
642 -- LDA - INTEGER.
643 -- On entry, LDA specifies the first dimension of A as declared
644 -- in the calling (sub) program. LDA must be at least
645 -- max( 1, n ).
646 -- Unchanged on exit.
647 -- X - UTL_NLA_ARRAY_FLT/DBL of dimension at least
648 -- ( 1 + ( n - 1 )*abs( INCX ) ).
649 -- Before entry, the incremented array X must contain the n
650 -- element vector x.
651 -- Unchanged on exit.
652 -- INCX - INTEGER.
653 -- On entry, INCX specifies the increment for the elements of
654 -- X. INCX must not be zero.
655 -- Unchanged on exit.
656 -- BETA - SCALAR_FLOAT/DOUBLE .
657 -- On entry, BETA specifies the scalar beta. When BETA is
658 -- supplied as zero then Y need not be set on input.
659 -- Unchanged on exit.
660 -- Y - UTL_NLA_ARRAY_FLT/DBL of dimension at least
661 -- ( 1 + ( n - 1 )*abs( INCY ) ).
662 -- Before entry, the incremented array Y must contain the n
663 -- element vector y. On exit, Y is overwritten by the updated
664 -- vector y.
665 -- INCY - INTEGER.
666 -- On entry, INCY specifies the increment for the elements of
667 -- Y. INCY must not be zero.
668 -- Unchanged on exit.
669 -- PACK - (optional) FLAG
670 -- The packing of the matricies:
671 -- 'C': column-major (default)
672 -- 'R': row-major
673
674 PROCEDURE blas_symv(uplo IN flag,
675 n IN POSITIVEN,
676 alpha IN scalar_double,
677 a IN utl_nla_array_dbl,
678 lda IN POSITIVEN,
679 x IN utl_nla_array_dbl,
680 incx IN POSITIVEN,
681 beta IN scalar_double,
682 y IN OUT utl_nla_array_dbl,
683 incy IN POSITIVEN,
684 pack IN flag DEFAULT 'C');
685
686 PROCEDURE blas_symv(uplo IN flag,
687 n IN POSITIVEN,
688 alpha IN scalar_float,
689 a IN UTL_NLA_ARRAY_FLT,
690 lda IN POSITIVEN,
691 x IN UTL_NLA_ARRAY_FLT,
692 incx IN POSITIVEN,
693 beta IN scalar_float,
694 y IN OUT UTL_NLA_ARRAY_FLT,
695 incy IN POSITIVEN,
696 pack IN flag DEFAULT 'C');
697
698 -- Purpose
699 -- =======
700 --
701 -- SSBMV performs the matrix-vector operation
705 --
702 -- y := alpha*A*x + beta*y,
703 -- where alpha and beta are scalars, x and y are n element vectors and
704 -- A is an n by n symmetric band matrix, with k super-diagonals.
706 -- Parameters
707 -- ==========
708 --
709 -- UPLO - FLAG.
710 -- On entry, UPLO specifies whether the upper or lower
711 -- triangular part of the band matrix A is being supplied as
712 -- follows:
713 -- UPLO = 'U' or 'u' The upper triangular part of A is
714 -- being supplied.
715 -- UPLO = 'L' or 'l' The lower triangular part of A is
716 -- being supplied.
717 -- Unchanged on exit.
718 -- N - INTEGER.
719 -- On entry, N specifies the order of the matrix A.
720 -- N must be at least zero.
721 -- Unchanged on exit.
722 -- K - INTEGER.
723 -- On entry, K specifies the number of super-diagonals of the
724 -- matrix A. K must satisfy 0 .le. K.
725 -- Unchanged on exit.
726 -- ALPHA - SCALAR_FLOAT/DOUBLE .
727 -- On entry, ALPHA specifies the scalar alpha.
728 -- Unchanged on exit.
729 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, n ).
730 -- Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
731 -- by n part of the array A must contain the upper triangular
732 -- band part of the symmetric matrix, supplied column by
733 -- column, with the leading diagonal of the matrix in row
734 -- ( k + 1 ) of the array, the first super-diagonal starting at
735 -- position 2 in row k, and so on. The top left k by k triangle
736 -- of the array A is not referenced.
737 -- Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
738 -- by n part of the array A must contain the lower triangular
739 -- band part of the symmetric matrix, supplied column by
740 -- column, with the leading diagonal of the matrix in row 1 of
741 -- the array, the first sub-diagonal starting at position 1 in
742 -- row 2, and so on. The bottom right k by k triangle of the
743 -- array A is not referenced.
744 -- Unchanged on exit.
745 -- LDA - INTEGER.
746 -- On entry, LDA specifies the first dimension of A as declared
747 -- in the calling (sub) program. LDA must be at least
748 -- ( k + 1 ).
749 -- Unchanged on exit.
750 -- X - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
751 -- ( 1 + ( n - 1 )*abs( INCX ) ).
752 -- Before entry, the incremented array X must contain the
753 -- vector x.
754 -- Unchanged on exit.
755 -- INCX - INTEGER.
756 -- On entry, INCX specifies the increment for the elements of
757 -- X. INCX must not be zero.
758 -- Unchanged on exit.
759 -- BETA - SCALAR_FLOAT/DOUBLE .
760 -- On entry, BETA specifies the scalar beta.
761 -- Unchanged on exit.
762 -- Y - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
763 -- ( 1 + ( n - 1 )*abs( INCY ) ).
764 -- Before entry, the incremented array Y must contain the
765 -- vector y. On exit, Y is overwritten by the updated vector y.
766 -- INCY - INTEGER.
767 -- On entry, INCY specifies the increment for the elements of
768 -- Y. INCY must not be zero.
769 -- Unchanged on exit.
770 -- PACK - (optional) FLAG
771 -- The packing of the matricies:
772 -- 'C': column-major (default)
773 -- 'R': row-major
774
775 PROCEDURE blas_sbmv(uplo IN flag,
776 n IN POSITIVEN,
777 k IN NATURALN,
778 alpha IN scalar_double,
779 a IN utl_nla_array_dbl,
780 lda IN POSITIVEN,
781 x IN utl_nla_array_dbl,
782 incx IN POSITIVEN,
783 beta IN scalar_double,
784 y IN OUT utl_nla_array_dbl,
785 incy IN POSITIVEN,
786 pack IN flag DEFAULT 'C');
787
788 PROCEDURE blas_sbmv(uplo IN flag,
789 n IN POSITIVEN,
790 k IN NATURALN,
791 alpha IN scalar_float,
792 a IN UTL_NLA_ARRAY_FLT,
793 lda IN POSITIVEN,
794 x IN UTL_NLA_ARRAY_FLT,
795 incx IN POSITIVEN,
796 beta IN scalar_float,
797 y IN OUT UTL_NLA_ARRAY_FLT,
798 incy IN POSITIVEN,
799 pack IN flag DEFAULT 'C');
800
801 -- Purpose
802 -- =======
803 --
804 -- BLAS_SPMV performs the matrix-vector operation
805 -- y := alpha*A*x + beta*y,
806 -- where alpha and beta are scalars, x and y are n element vectors and
807 -- A is an n by n symmetric matrix, supplied in packed form.
808 --
809 -- Parameters
810 -- ==========
811 --
812 -- UPLO - FLAG.
813 -- On entry, UPLO specifies whether the upper or lower
817 -- supplied in AP.
814 -- triangular part of the matrix A is supplied in the packed
815 -- array AP as follows:
816 -- UPLO = 'U' or 'u' The upper triangular part of A is
818 -- UPLO = 'L' or 'l' The lower triangular part of A is
819 -- supplied in AP.
820 -- Unchanged on exit.
821 -- N - INTEGER.
822 -- On entry, N specifies the order of the matrix A.
823 -- N must be at least zero.
824 -- Unchanged on exit.
825 -- ALPHA - SCALAR_FLOAT/DOUBLE .
826 -- On entry, ALPHA specifies the scalar alpha.
827 -- Unchanged on exit.
828 -- AP - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
829 -- ( ( n*( n + 1 ) )/2 ).
830 -- Before entry with UPLO = 'U' or 'u', the array AP must
831 -- contain the upper triangular part of the symmetric matrix
832 -- packed sequentially, column by column, so that AP( 1 )
833 -- contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 )
834 -- and a( 2, 2 ) respectively, and so on.
835 -- Before entry with UPLO = 'L' or 'l', the array AP must
836 -- contain the lower triangular part of the symmetric matrix
837 -- packed sequentially, column by column, so that AP( 1 )
838 -- contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 )
839 -- and a( 3, 1 ) respectively, and so on.
840 -- Unchanged on exit.
841 -- X - UTL_NLA_ARRAY_FLT/DBL of dimension at least
842 -- ( 1 + ( n - 1 )*abs( INCX ) ).
843 -- Before entry, the incremented array X must contain the n
844 -- element vector x.
845 -- Unchanged on exit.
846 -- INCX - INTEGER.
847 -- On entry, INCX specifies the increment for the elements of
848 -- X. INCX must not be zero.
849 -- Unchanged on exit.
850 -- BETA - SCALAR_FLOAT/DOUBLE .
851 -- On entry, BETA specifies the scalar beta. When BETA is
852 -- supplied as zero then Y need not be set on input.
853 -- Unchanged on exit.
854 -- Y - UTL_NLA_ARRAY_FLT/DBL of dimension at least
855 -- ( 1 + ( n - 1 )*abs( INCY ) ).
856 -- Before entry, the incremented array Y must contain the n
857 -- element vector y. On exit, Y is overwritten by the updated
858 -- vector y.
859 -- INCY - INTEGER.
860 -- On entry, INCY specifies the increment for the elements of
861 -- Y. INCY must not be zero.
862 -- Unchanged on exit.
863 -- PACK - (optional) FLAG
864 -- The packing of the matricies:
865 -- 'C': column-major (default)
866 -- 'R': row-major
867
868 PROCEDURE blas_spmv(uplo IN flag,
869 n IN POSITIVEN,
870 alpha IN scalar_double,
871 ap IN utl_nla_array_dbl,
872 x IN utl_nla_array_dbl,
873 incx IN POSITIVEN,
874 beta IN scalar_double,
875 y IN OUT utl_nla_array_dbl,
876 incy IN POSITIVEN,
877 pack IN flag DEFAULT 'C');
878
879 PROCEDURE blas_spmv(uplo IN flag,
880 n IN POSITIVEN,
881 alpha IN scalar_float,
882 ap IN UTL_NLA_ARRAY_FLT,
883 x IN UTL_NLA_ARRAY_FLT,
884 incx IN POSITIVEN,
885 beta IN scalar_float,
886 y IN OUT UTL_NLA_ARRAY_FLT,
887 incy IN POSITIVEN,
888 pack IN flag DEFAULT 'C');
889
890 -- Purpose
891 -- =======
892 --
893 -- BLAS_TRMV performs one of the matrix-vector operations
894 -- x := A*x, or x := A'*x,
895 -- where x is an n element vector and A is an n by n unit, or non-unit,
896 -- upper or lower triangular matrix.
897 --
898 -- Parameters
899 -- ==========
900 --
901 -- UPLO - FLAG.
902 -- On entry, UPLO specifies whether the matrix is an upper or
903 -- lower triangular matrix as follows:
904 -- UPLO = 'U' or 'u' A is an upper triangular matrix.
905 -- UPLO = 'L' or 'l' A is a lower triangular matrix.
906 -- Unchanged on exit.
907 -- TRANS - FLAG.
908 -- On entry, TRANS specifies the operation to be performed as
909 -- follows:
910 -- TRANS = 'N' or 'n' x := A*x.
911 -- TRANS = 'T' or 't' x := A'*x.
912 -- TRANS = 'C' or 'c' x := A'*x.
913 -- Unchanged on exit.
914 -- DIAG - FLAG.
915 -- On entry, DIAG specifies whether or not A is unit
916 -- triangular as follows:
917 -- DIAG = 'U' or 'u' A is assumed to be unit triangular.
918 -- DIAG = 'N' or 'n' A is not assumed to be unit
919 -- triangular.
920 -- Unchanged on exit.
921 -- N - INTEGER.
922 -- On entry, N specifies the order of the matrix A.
923 -- N must be at least zero.
924 -- Unchanged on exit.
928 -- triangular matrix and the strictly lower triangular part of
925 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, n ).
926 -- Before entry with UPLO = 'U' or 'u', the leading n by n
927 -- upper triangular part of the array A must contain the upper
929 -- A is not referenced.
930 -- Before entry with UPLO = 'L' or 'l', the leading n by n
931 -- lower triangular part of the array A must contain the lower
932 -- triangular matrix and the strictly upper triangular part of
933 -- A is not referenced.
934 -- Note that when DIAG = 'U' or 'u', the diagonal elements of
935 -- A are not referenced either, but are assumed to be unity.
936 -- Unchanged on exit.
937 -- LDA - INTEGER.
938 -- On entry, LDA specifies the first dimension of A as declared
939 -- in the calling (sub) program. LDA must be at least
940 -- max( 1, n ).
941 -- Unchanged on exit.
942 -- X - UTL_NLA_ARRAY_FLT/DBL of dimension at least
943 -- ( 1 + ( n - 1 )*abs( INCX ) ).
944 -- Before entry, the incremented array X must contain the n
945 -- element vector x. On exit, X is overwritten with the
946 -- tranformed vector x.
947 -- INCX - INTEGER.
948 -- On entry, INCX specifies the increment for the elements of
949 -- X. INCX must not be zero.
950 -- Unchanged on exit.
951 -- PACK - (optional) FLAG
952 -- The packing of the matricies:
953 -- 'C': column-major (default)
954 -- 'R': row-major
955
956 PROCEDURE blas_trmv(uplo IN flag,
957 trans IN flag,
958 diag IN flag,
959 n IN POSITIVEN,
960 a IN utl_nla_array_dbl,
961 lda IN POSITIVEN,
962 x IN OUT utl_nla_array_dbl,
963 incx IN POSITIVEN,
964 pack IN flag DEFAULT 'C');
965
966 PROCEDURE blas_trmv(uplo IN flag,
967 trans IN flag,
968 diag IN flag,
969 n IN POSITIVEN,
970 a IN UTL_NLA_ARRAY_FLT,
971 lda IN POSITIVEN,
972 x IN OUT UTL_NLA_ARRAY_FLT,
973 incx IN POSITIVEN,
974 pack IN flag DEFAULT 'C');
975
976 -- Purpose
977 -- =======
978 --
979 -- BLAS_TBMV performs one of the matrix-vector operations
980 -- x := A*x, or x := A'*x,
981 -- where x is an n element vector and A is an n by n unit, or non-unit,
982 -- upper or lower triangular band matrix, with ( k + 1 ) diagonals.
983 --
984 -- Arguments
985 -- =========
986 --
987 -- UPLO - FLAG.
988 -- On entry, UPLO specifies whether the matrix is an upper or
989 -- lower triangular matrix as follows:
990 -- UPLO = 'U' or 'u' A is an upper triangular matrix.
991 -- UPLO = 'L' or 'l' A is a lower triangular matrix.
992 -- Unchanged on exit.
993 -- TRANS - FLAG.
994 -- On entry, TRANS specifies the operation to be performed as
995 -- follows:
996 -- TRANS = 'N' or 'n' x := A*x.
997 -- TRANS = 'T' or 't' x := A'*x.
998 -- TRANS = 'C' or 'c' x := A'*x.
999 -- Unchanged on exit.
1000 -- DIAG - FLAG.
1001 -- On entry, DIAG specifies whether or not A is unit
1002 -- triangular as follows:
1003 -- DIAG = 'U' or 'u' A is assumed to be unit triangular.
1004 -- DIAG = 'N' or 'n' A is not assumed to be unit
1005 -- triangular.
1006 -- Unchanged on exit.
1007 -- N - INTEGER.
1008 -- On entry, N specifies the order of the matrix A.
1009 -- N must be at least zero.
1010 -- Unchanged on exit.
1011 -- K - INTEGER.
1012 -- On entry with UPLO = 'U' or 'u', K specifies the number of
1013 -- super-diagonals of the matrix A.
1014 -- On entry with UPLO = 'L' or 'l', K specifies the number of
1015 -- sub-diagonals of the matrix A.
1016 -- K must satisfy 0 .le. K.
1017 -- Unchanged on exit.
1018 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, n ).
1019 -- Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
1020 -- by n part of the array A must contain the upper triangular
1021 -- band part of the matrix of coefficients, supplied column by
1022 -- column, with the leading diagonal of the matrix in row
1023 -- ( k + 1 ) of the array, the first super-diagonal starting at
1024 -- position 2 in row k, and so on. The top left k by k triangle
1025 -- of the array A is not referenced.
1026 -- Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
1027 -- by n part of the array A must contain the lower triangular
1028 -- band part of the matrix of coefficients, supplied column by
1029 -- column, with the leading diagonal of the matrix in row 1 of
1030 -- the array, the first sub-diagonal starting at position 1 in
1031 -- row 2, and so on. The bottom right k by k triangle of the
1035 -- referenced, but are assumed to be unity.
1032 -- array A is not referenced.
1033 -- Note that when DIAG = 'U' or 'u' the elements of the array A
1034 -- corresponding to the diagonal elements of the matrix are not
1036 -- Unchanged on exit.
1037 -- LDA - INTEGER.
1038 -- On entry, LDA specifies the first dimension of A as declared
1039 -- in the calling (sub) program. LDA must be at least
1040 -- ( k + 1 ).
1041 -- Unchanged on exit.
1042 -- X - UTL_NLA_ARRAY_FLT/DBL of dimension at least
1043 -- ( 1 + ( n - 1 )*abs( INCX ) ).
1044 -- Before entry, the incremented array X must contain the n
1045 -- element vector x. On exit, X is overwritten with the
1046 -- tranformed vector x.
1047 -- INCX - INTEGER.
1048 -- On entry, INCX specifies the increment for the elements of
1049 -- X. INCX must not be zero.
1050 -- Unchanged on exit.
1051 -- PACK - (optional) FLAG
1052 -- The packing of the matricies:
1053 -- 'C': column-major (default)
1054 -- 'R': row-major
1055
1056 PROCEDURE blas_tbmv(uplo IN flag,
1057 trans IN flag,
1058 diag IN flag,
1059 n IN POSITIVEN,
1060 k IN NATURALN,
1061 a IN utl_nla_array_dbl,
1062 lda IN POSITIVEN,
1063 x IN OUT utl_nla_array_dbl,
1064 incx IN POSITIVEN,
1065 pack IN flag DEFAULT 'C');
1066
1067 PROCEDURE blas_tbmv(uplo IN flag,
1068 trans IN flag,
1069 diag IN flag,
1070 n IN POSITIVEN,
1071 k IN NATURALN,
1072 a IN UTL_NLA_ARRAY_FLT,
1073 lda IN POSITIVEN,
1074 x IN OUT UTL_NLA_ARRAY_FLT,
1075 incx IN POSITIVEN,
1076 pack IN flag DEFAULT 'C');
1077
1078 -- Purpose
1079 -- =======
1080 --
1081 -- BLAS_TPMV performs one of the matrix-vector operations
1082 -- x := A*x, or x := A'*x,
1083 -- where x is an n element vector and A is an n by n unit, or non-unit,
1084 -- upper or lower triangular matrix, supplied in packed form.
1085 --
1086 -- Parameters
1087 -- ==========
1088 --
1089 -- UPLO - FLAG.
1090 -- On entry, UPLO specifies whether the matrix is an upper or
1091 -- lower triangular matrix as follows:
1092 -- UPLO = 'U' or 'u' A is an upper triangular matrix.
1093 -- UPLO = 'L' or 'l' A is a lower triangular matrix.
1094 -- Unchanged on exit.
1095 -- TRANS - FLAG.
1096 -- On entry, TRANS specifies the operation to be performed as
1097 -- follows:
1098 -- TRANS = 'N' or 'n' x := A*x.
1099 -- TRANS = 'T' or 't' x := A'*x.
1100 -- TRANS = 'C' or 'c' x := A'*x.
1101 -- Unchanged on exit.
1102 -- DIAG - FLAG.
1103 -- On entry, DIAG specifies whether or not A is unit
1104 -- triangular as follows:
1105 -- DIAG = 'U' or 'u' A is assumed to be unit triangular.
1106 -- DIAG = 'N' or 'n' A is not assumed to be unit
1107 -- triangular.
1108 -- Unchanged on exit.
1109 -- N - INTEGER.
1110 -- On entry, N specifies the order of the matrix A.
1111 -- N must be at least zero.
1112 -- Unchanged on exit.
1113 -- AP - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
1114 -- ( ( n*( n + 1 ) )/2 ).
1115 -- Before entry with UPLO = 'U' or 'u', the array AP must
1116 -- contain the upper triangular matrix packed sequentially,
1117 -- column by column, so that AP( 1 ) contains a( 1, 1 ),
1118 -- AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 )
1119 -- respectively, and so on.
1120 -- Before entry with UPLO = 'L' or 'l', the array AP must
1121 -- contain the lower triangular matrix packed sequentially,
1122 -- column by column, so that AP( 1 ) contains a( 1, 1 ),
1123 -- AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 )
1124 -- respectively, and so on.
1125 -- Note that when DIAG = 'U' or 'u', the diagonal elements of
1126 -- A are not referenced, but are assumed to be unity.
1127 -- Unchanged on exit.
1128 -- X - UTL_NLA_ARRAY_FLT/DBL of dimension at least
1129 -- ( 1 + ( n - 1 )*abs( INCX ) ).
1130 -- Before entry, the incremented array X must contain the n
1131 -- element vector x. On exit, X is overwritten with the
1132 -- tranformed vector x.
1133 -- INCX - INTEGER.
1134 -- On entry, INCX specifies the increment for the elements of
1135 -- X. INCX must not be zero.
1136 -- Unchanged on exit.
1137 -- PACK - (optional) FLAG
1138 -- The packing of the matricies:
1139 -- 'C': column-major (default)
1140 -- 'R': row-major
1141
1142 PROCEDURE blas_tpmv(uplo IN flag,
1143 trans IN flag,
1144 diag IN flag,
1148 incx IN POSITIVEN,
1145 n IN POSITIVEN,
1146 ap IN utl_nla_array_dbl,
1147 x IN OUT utl_nla_array_dbl,
1149 pack IN flag DEFAULT 'C');
1150
1151 PROCEDURE blas_tpmv(uplo IN flag,
1152 trans IN flag,
1153 diag IN flag,
1154 n IN POSITIVEN,
1155 ap IN UTL_NLA_ARRAY_FLT,
1156 x IN OUT UTL_NLA_ARRAY_FLT,
1157 incx IN POSITIVEN,
1158 pack IN flag DEFAULT 'C');
1159
1160 -- Purpose
1161 -- =======
1162 --
1163 -- BLAS_TRSV solves one of the systems of equations
1164 -- A*x = b, or A'*x = b,
1165 -- where b and x are n element vectors and A is an n by n unit, or
1166 -- non-unit, upper or lower triangular matrix.
1167 -- No test for singularity or near-singularity is included in this
1168 -- routine. Such tests must be performed before calling this routine.
1169 --
1170 -- Arguments
1171 -- =========
1172 --
1173 -- UPLO - FLAG.
1174 -- On entry, UPLO specifies whether the matrix is an upper or
1175 -- lower triangular matrix as follows:
1176 -- UPLO = 'U' or 'u' A is an upper triangular matrix.
1177 -- UPLO = 'L' or 'l' A is a lower triangular matrix.
1178 -- Unchanged on exit.
1179 -- TRANS - FLAG.
1180 -- On entry, TRANS specifies the equations to be solved as
1181 -- follows:
1182 -- TRANS = 'N' or 'n' A*x = b.
1183 -- TRANS = 'T' or 't' A'*x = b.
1184 -- TRANS = 'C' or 'c' A'*x = b.
1185 -- Unchanged on exit.
1186 -- DIAG - FLAG.
1187 -- On entry, DIAG specifies whether or not A is unit
1188 -- triangular as follows:
1189 -- DIAG = 'U' or 'u' A is assumed to be unit triangular.
1190 -- DIAG = 'N' or 'n' A is not assumed to be unit
1191 -- triangular.
1192 -- Unchanged on exit.
1193 -- N - INTEGER.
1194 -- On entry, N specifies the order of the matrix A.
1195 -- N must be at least zero.
1196 -- Unchanged on exit.
1197 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, n ).
1198 -- Before entry with UPLO = 'U' or 'u', the leading n by n
1199 -- upper triangular part of the array A must contain the upper
1200 -- triangular matrix and the strictly lower triangular part of
1201 -- A is not referenced.
1202 -- Before entry with UPLO = 'L' or 'l', the leading n by n
1203 -- lower triangular part of the array A must contain the lower
1204 -- triangular matrix and the strictly upper triangular part of
1205 -- A is not referenced.
1206 -- Note that when DIAG = 'U' or 'u', the diagonal elements of
1207 -- A are not referenced either, but are assumed to be unity.
1208 -- Unchanged on exit.
1209 -- LDA - INTEGER.
1210 -- On entry, LDA specifies the first dimension of A as declared
1211 -- in the calling (sub) program. LDA must be at least
1212 -- max( 1, n ).
1213 -- Unchanged on exit.
1214 -- X - UTL_NLA_ARRAY_FLT/DBL of dimension at least
1215 -- ( 1 + ( n - 1 )*abs( INCX ) ).
1216 -- Before entry, the incremented array X must contain the n
1217 -- element right-hand side vector b. On exit, X is overwritten
1218 -- with the solution vector x.
1219 -- INCX - INTEGER.
1220 -- On entry, INCX specifies the increment for the elements of
1221 -- X. INCX must not be zero.
1222 -- Unchanged on exit.
1223 -- PACK - (optional) FLAG
1224 -- The packing of the matricies:
1225 -- 'C': column-major (default)
1226 -- 'R': row-major
1227
1228 PROCEDURE blas_trsv(uplo IN flag,
1229 trans IN flag,
1230 diag IN flag,
1231 n IN POSITIVEN,
1232 a IN utl_nla_array_dbl,
1233 lda IN POSITIVEN,
1234 x IN OUT utl_nla_array_dbl,
1235 incx IN POSITIVEN,
1236 pack IN flag DEFAULT 'C');
1237
1238 PROCEDURE blas_trsv(uplo IN flag,
1239 trans IN flag,
1240 diag IN flag,
1241 n IN POSITIVEN,
1242 a IN UTL_NLA_ARRAY_FLT,
1243 lda IN POSITIVEN,
1244 x IN OUT UTL_NLA_ARRAY_FLT,
1245 incx IN POSITIVEN,
1246 pack IN flag DEFAULT 'C');
1247
1248 -- Purpose
1249 -- =======
1250 --
1251 -- STBSV solves one of the systems of equations
1252 -- A*x = b, or A'*x = b,
1253 -- where b and x are n element vectors and A is an n by n unit, or
1254 -- non-unit, upper or lower triangular band matrix, with ( k + 1 )
1255 -- diagonals.
1256 -- No test for singularity or near-singularity is included in this
1257 -- routine. Such tests must be performed before calling this routine.
1258 --
1259 -- Parameters
1260 -- ==========
1261 --
1265 -- UPLO = 'U' or 'u' A is an upper triangular matrix.
1262 -- UPLO - FLAG.
1263 -- On entry, UPLO specifies whether the matrix is an upper or
1264 -- lower triangular matrix as follows:
1266 -- UPLO = 'L' or 'l' A is a lower triangular matrix.
1267 -- Unchanged on exit.
1268 -- TRANS - FLAG.
1269 -- On entry, TRANS specifies the equations to be solved as
1270 -- follows:
1271 -- TRANS = 'N' or 'n' A*x = b.
1272 -- TRANS = 'T' or 't' A'*x = b.
1273 -- TRANS = 'C' or 'c' A'*x = b.
1274 -- Unchanged on exit.
1275 -- DIAG - FLAG.
1276 -- On entry, DIAG specifies whether or not A is unit
1277 -- triangular as follows:
1278 -- DIAG = 'U' or 'u' A is assumed to be unit triangular.
1279 -- DIAG = 'N' or 'n' A is not assumed to be unit
1280 -- triangular.
1281 -- Unchanged on exit.
1282 -- N - INTEGER.
1283 -- On entry, N specifies the order of the matrix A.
1284 -- N must be at least zero.
1285 -- Unchanged on exit.
1286 -- K - INTEGER.
1287 -- On entry with UPLO = 'U' or 'u', K specifies the number of
1288 -- super-diagonals of the matrix A.
1289 -- On entry with UPLO = 'L' or 'l', K specifies the number of
1290 -- sub-diagonals of the matrix A.
1291 -- K must satisfy 0 .le. K.
1292 -- Unchanged on exit.
1293 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, n ).
1294 -- Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
1295 -- by n part of the array A must contain the upper triangular
1296 -- band part of the matrix of coefficients, supplied column by
1297 -- column, with the leading diagonal of the matrix in row
1298 -- ( k + 1 ) of the array, the first super-diagonal starting at
1299 -- position 2 in row k, and so on. The top left k by k triangle
1300 -- of the array A is not referenced.
1301 -- Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
1302 -- by n part of the array A must contain the lower triangular
1303 -- band part of the matrix of coefficients, supplied column by
1304 -- column, with the leading diagonal of the matrix in row 1 of
1305 -- the array, the first sub-diagonal starting at position 1 in
1306 -- row 2, and so on. The bottom right k by k triangle of the
1307 -- array A is not referenced.
1308 -- Note that when DIAG = 'U' or 'u' the elements of the array A
1309 -- corresponding to the diagonal elements of the matrix are not
1310 -- referenced, but are assumed to be unity.
1311 -- Unchanged on exit.
1312 -- LDA - INTEGER.
1313 -- On entry, LDA specifies the first dimension of A as declared
1314 -- in the calling (sub) program. LDA must be at least
1315 -- ( k + 1 ).
1316 -- Unchanged on exit.
1317 -- X - UTL_NLA_ARRAY_FLT/DBL of dimension at least
1318 -- ( 1 + ( n - 1 )*abs( INCX ) ).
1319 -- Before entry, the incremented array X must contain the n
1320 -- element right-hand side vector b. On exit, X is overwritten
1321 -- with the solution vector x.
1322 -- INCX - INTEGER.
1323 -- On entry, INCX specifies the increment for the elements of
1324 -- X. INCX must not be zero.
1325 -- Unchanged on exit.
1326 -- PACK - (optional) FLAG
1327 -- The packing of the matricies:
1328 -- 'C': column-major (default)
1329 -- 'R': row-major
1330
1331 PROCEDURE blas_tbsv(uplo IN flag,
1332 trans IN flag,
1333 diag IN flag,
1334 n IN POSITIVEN,
1335 k IN NATURALN,
1336 a IN utl_nla_array_dbl,
1337 lda IN POSITIVEN,
1338 x IN OUT utl_nla_array_dbl,
1339 incx IN POSITIVEN,
1340 pack IN flag DEFAULT 'C');
1341
1342 PROCEDURE blas_tbsv(uplo IN flag,
1343 trans IN flag,
1344 diag IN flag,
1345 n IN POSITIVEN,
1346 k IN NATURALN,
1347 a IN UTL_NLA_ARRAY_FLT,
1348 lda IN POSITIVEN,
1349 x IN OUT UTL_NLA_ARRAY_FLT,
1350 incx IN POSITIVEN,
1351 pack IN flag DEFAULT 'C');
1352
1353 -- Purpose
1354 -- =======
1355 --
1356 -- BLAS_TPSV solves one of the systems of equations
1357 -- A*x = b, or A'*x = b,
1358 -- where b and x are n element vectors and A is an n by n unit, or
1359 -- non-unit, upper or lower triangular matrix, supplied in packed form.
1360 -- No test for singularity or near-singularity is included in this
1361 -- routine. Such tests must be performed before calling this routine.
1362 --
1363 -- Arguments
1364 -- =========
1365 --
1366 -- UPLO - FLAG.
1367 -- On entry, UPLO specifies whether the matrix is an upper or
1368 -- lower triangular matrix as follows:
1369 -- UPLO = 'U' or 'u' A is an upper triangular matrix.
1373 -- On entry, TRANS specifies the equations to be solved as
1370 -- UPLO = 'L' or 'l' A is a lower triangular matrix.
1371 -- Unchanged on exit.
1372 -- TRANS - FLAG.
1374 -- follows:
1375 -- TRANS = 'N' or 'n' A*x = b.
1376 -- TRANS = 'T' or 't' A'*x = b.
1377 -- TRANS = 'C' or 'c' A'*x = b.
1378 -- Unchanged on exit.
1379 -- DIAG - FLAG.
1380 -- On entry, DIAG specifies whether or not A is unit
1381 -- triangular as follows:
1382 -- DIAG = 'U' or 'u' A is assumed to be unit triangular.
1383 -- DIAG = 'N' or 'n' A is not assumed to be unit
1384 -- triangular.
1385 -- Unchanged on exit.
1386 -- N - INTEGER.
1387 -- On entry, N specifies the order of the matrix A.
1388 -- N must be at least zero.
1389 -- Unchanged on exit.
1390 -- AP - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
1391 -- ( ( n*( n + 1 ) )/2 ).
1392 -- Before entry with UPLO = 'U' or 'u', the array AP must
1393 -- contain the upper triangular matrix packed sequentially,
1394 -- column by column, so that AP( 1 ) contains a( 1, 1 ),
1395 -- AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 )
1396 -- respectively, and so on.
1397 -- Before entry with UPLO = 'L' or 'l', the array AP must
1398 -- contain the lower triangular matrix packed sequentially,
1399 -- column by column, so that AP( 1 ) contains a( 1, 1 ),
1400 -- AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 )
1401 -- respectively, and so on.
1402 -- Note that when DIAG = 'U' or 'u', the diagonal elements of
1403 -- A are not referenced, but are assumed to be unity.
1404 -- Unchanged on exit.
1405 -- X - UTL_NLA_ARRAY_FLT/DBL of dimension at least
1406 -- ( 1 + ( n - 1 )*abs( INCX ) ).
1407 -- Before entry, the incremented array X must contain the n
1408 -- element right-hand side vector b. On exit, X is overwritten
1409 -- with the solution vector x.
1410 -- INCX - INTEGER.
1411 -- On entry, INCX specifies the increment for the elements of
1412 -- X. INCX must not be zero.
1413 -- Unchanged on exit.
1414 -- PACK - (optional) FLAG
1415 -- The packing of the matricies:
1416 -- 'C': column-major (default)
1417 -- 'R': row-major
1418
1419 PROCEDURE blas_tpsv(uplo IN flag,
1420 trans IN flag,
1421 diag IN flag,
1422 n IN POSITIVEN,
1423 ap IN utl_nla_array_dbl,
1424 x IN OUT utl_nla_array_dbl,
1425 incx IN POSITIVEN,
1426 pack IN flag DEFAULT 'C');
1427
1428 PROCEDURE blas_tpsv(uplo IN flag,
1429 trans IN flag,
1430 diag IN flag,
1431 n IN POSITIVEN,
1432 ap IN UTL_NLA_ARRAY_FLT,
1433 x IN OUT UTL_NLA_ARRAY_FLT,
1434 incx IN POSITIVEN,
1435 pack IN flag DEFAULT 'C');
1436
1437 -- Purpose
1438 -- =======
1439 --
1440 -- BLAS_GER performs the rank 1 operation
1441 -- A := alpha*x*y' + A,
1442 -- where alpha is a scalar, x is an m element vector, y is an n element
1443 -- vector and A is an m by n matrix.
1444 --
1445 -- Arguments
1446 -- =========
1447 --
1448 -- M - INTEGER.
1449 -- On entry, M specifies the number of rows of the matrix A.
1450 -- M must be at least zero.
1451 -- Unchanged on exit.
1452 -- N - INTEGER.
1453 -- On entry, N specifies the number of columns of the matrix A.
1454 -- N must be at least zero.
1455 -- Unchanged on exit.
1456 -- ALPHA - SCALAR_FLOAT/DOUBLE .
1457 -- On entry, ALPHA specifies the scalar alpha.
1458 -- Unchanged on exit.
1459 -- X - UTL_NLA_ARRAY_FLT/DBL of dimension at least
1460 -- ( 1 + ( m - 1 )*abs( INCX ) ).
1461 -- Before entry, the incremented array X must contain the m
1462 -- element vector x.
1463 -- Unchanged on exit.
1464 -- INCX - INTEGER.
1465 -- On entry, INCX specifies the increment for the elements of
1466 -- X. INCX must not be zero.
1467 -- Unchanged on exit.
1468 -- Y - UTL_NLA_ARRAY_FLT/DBL of dimension at least
1469 -- ( 1 + ( n - 1 )*abs( INCY ) ).
1470 -- Before entry, the incremented array Y must contain the n
1471 -- element vector y.
1472 -- Unchanged on exit.
1473 -- INCY - INTEGER.
1474 -- On entry, INCY specifies the increment for the elements of
1475 -- Y. INCY must not be zero.
1476 -- Unchanged on exit.
1477 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, n ).
1478 -- Before entry, the leading m by n part of the array A must
1479 -- contain the matrix of coefficients. On exit, A is
1480 -- overwritten by the updated matrix.
1481 -- LDA - INTEGER.
1482 -- On entry, LDA specifies the first dimension of A as declared
1483 -- in the calling (sub) program. LDA must be at least
1487 -- The packing of the matricies:
1484 -- max( 1, m ).
1485 -- Unchanged on exit.
1486 -- PACK - (optional) FLAG
1488 -- 'C': column-major (default)
1489 -- 'R': row-major
1490
1491 PROCEDURE blas_ger(m IN POSITIVEN,
1492 n IN POSITIVEN,
1493 alpha IN scalar_double,
1494 x IN utl_nla_array_dbl,
1495 incx IN POSITIVEN,
1496 y IN utl_nla_array_dbl,
1497 incy IN POSITIVEN,
1498 a IN OUT utl_nla_array_dbl,
1499 lda IN POSITIVEN,
1500 pack IN flag DEFAULT 'C');
1501
1502 PROCEDURE blas_ger(m IN POSITIVEN,
1503 n IN POSITIVEN,
1504 alpha IN scalar_float,
1505 x IN UTL_NLA_ARRAY_FLT,
1506 incx IN POSITIVEN,
1507 y IN UTL_NLA_ARRAY_FLT,
1508 incy IN POSITIVEN,
1509 a IN OUT UTL_NLA_ARRAY_FLT,
1510 lda IN POSITIVEN,
1511 pack IN flag DEFAULT 'C');
1512
1513 -- Purpose
1514 -- =======
1515 --
1516 -- BLAS_SYR performs the symmetric rank 1 operation
1517 -- A := alpha*x*x' + A,
1518 -- where alpha is a real scalar, x is an n element vector and A is an
1519 -- n by n symmetric matrix.
1520 --
1521 -- Arguments
1522 -- =========
1523 --
1524 -- UPLO - FLAG.
1525 -- On entry, UPLO specifies whether the upper or lower
1526 -- triangular part of the array A is to be referenced as
1527 -- follows:
1528 -- UPLO = 'U' or 'u' Only the upper triangular part of A
1529 -- is to be referenced.
1530 -- UPLO = 'L' or 'l' Only the lower triangular part of A
1531 -- is to be referenced.
1532 -- Unchanged on exit.
1533 -- N - INTEGER.
1534 -- On entry, N specifies the order of the matrix A.
1535 -- N must be at least zero.
1536 -- Unchanged on exit.
1537 -- ALPHA - SCALAR_FLOAT/DOUBLE .
1538 -- On entry, ALPHA specifies the scalar alpha.
1539 -- Unchanged on exit.
1540 -- X - UTL_NLA_ARRAY_FLT/DBL of dimension at least
1541 -- ( 1 + ( n - 1 )*abs( INCX ) ).
1542 -- Before entry, the incremented array X must contain the n
1543 -- element vector x.
1544 -- Unchanged on exit.
1545 -- INCX - INTEGER.
1546 -- On entry, INCX specifies the increment for the elements of
1547 -- X. INCX must not be zero.
1548 -- Unchanged on exit.
1549 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, n ).
1550 -- Before entry with UPLO = 'U' or 'u', the leading n by n
1551 -- upper triangular part of the array A must contain the upper
1552 -- triangular part of the symmetric matrix and the strictly
1553 -- lower triangular part of A is not referenced. On exit, the
1554 -- upper triangular part of the array A is overwritten by the
1555 -- upper triangular part of the updated matrix.
1556 -- Before entry with UPLO = 'L' or 'l', the leading n by n
1557 -- lower triangular part of the array A must contain the lower
1558 -- triangular part of the symmetric matrix and the strictly
1559 -- upper triangular part of A is not referenced. On exit, the
1560 -- lower triangular part of the array A is overwritten by the
1561 -- lower triangular part of the updated matrix.
1562 -- LDA - INTEGER.
1563 -- On entry, LDA specifies the first dimension of A as declared
1564 -- in the calling (sub) program. LDA must be at least
1565 -- max( 1, n ).
1566 -- Unchanged on exit.
1567 -- PACK - (optional) FLAG
1568 -- The packing of the matricies:
1569 -- 'C': column-major (default)
1570 -- 'R': row-major
1571
1572 PROCEDURE blas_syr(uplo IN flag,
1573 n IN POSITIVEN,
1574 alpha IN scalar_double,
1575 x IN utl_nla_array_dbl,
1576 incx IN POSITIVEN,
1577 a IN OUT utl_nla_array_dbl,
1578 lda IN POSITIVEN,
1579 pack IN flag DEFAULT 'C');
1580
1581 PROCEDURE blas_syr(uplo IN flag,
1582 n IN POSITIVEN,
1583 alpha IN scalar_float,
1584 x IN UTL_NLA_ARRAY_FLT,
1585 incx IN POSITIVEN,
1586 a IN OUT UTL_NLA_ARRAY_FLT,
1587 lda IN POSITIVEN,
1588 pack IN flag DEFAULT 'C');
1589
1590 -- Purpose
1591 -- =======
1592 --
1593 -- BLAS_SPR performs the symmetric rank 1 operation
1594 -- A := alpha*x*x' + A,
1595 -- where alpha is a real scalar, x is an n element vector and A is an
1596 -- n by n symmetric matrix, supplied in packed form.
1597 --
1598 -- Parameters
1599 -- ==========
1600 --
1601 -- UPLO - FLAG.
1602 -- On entry, UPLO specifies whether the upper or lower
1606 -- supplied in AP.
1603 -- triangular part of the matrix A is supplied in the packed
1604 -- array AP as follows:
1605 -- UPLO = 'U' or 'u' The upper triangular part of A is
1607 -- UPLO = 'L' or 'l' The lower triangular part of A is
1608 -- supplied in AP.
1609 -- Unchanged on exit.
1610 -- N - INTEGER.
1611 -- On entry, N specifies the order of the matrix A.
1612 -- N must be at least zero.
1613 -- Unchanged on exit.
1614 -- ALPHA - SCALAR_FLOAT/DOUBLE .
1615 -- On entry, ALPHA specifies the scalar alpha.
1616 -- Unchanged on exit.
1617 -- X - UTL_NLA_ARRAY_FLT/DBL of dimension at least
1618 -- ( 1 + ( n - 1 )*abs( INCX ) ).
1619 -- Before entry, the incremented array X must contain the n
1620 -- element vector x.
1621 -- Unchanged on exit.
1622 -- INCX - INTEGER.
1623 -- On entry, INCX specifies the increment for the elements of
1624 -- X. INCX must not be zero.
1625 -- Unchanged on exit.
1626 -- AP - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
1627 -- ( ( n*( n + 1 ) )/2 ).
1628 -- Before entry with UPLO = 'U' or 'u', the array AP must
1629 -- contain the upper triangular part of the symmetric matrix
1630 -- packed sequentially, column by column, so that AP( 1 )
1631 -- contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 )
1632 -- and a( 2, 2 ) respectively, and so on. On exit, the array
1633 -- AP is overwritten by the upper triangular part of the
1634 -- updated matrix.
1635 -- Before entry with UPLO = 'L' or 'l', the array AP must
1636 -- contain the lower triangular part of the symmetric matrix
1637 -- packed sequentially, column by column, so that AP( 1 )
1638 -- contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 )
1639 -- and a( 3, 1 ) respectively, and so on. On exit, the array
1640 -- AP is overwritten by the lower triangular part of the
1641 -- updated matrix.
1642 -- PACK - (optional) FLAG
1643 -- The packing of the matricies:
1644 -- 'C': column-major (default)
1645 -- 'R': row-major
1646
1647 PROCEDURE blas_spr(uplo IN flag,
1648 n IN POSITIVEN,
1649 alpha IN scalar_double,
1650 x IN utl_nla_array_dbl,
1651 incx IN POSITIVEN,
1652 ap IN OUT utl_nla_array_dbl,
1653 pack IN flag DEFAULT 'C');
1654
1655 PROCEDURE blas_spr(uplo IN flag,
1656 n IN POSITIVEN,
1657 alpha IN scalar_float,
1658 x IN UTL_NLA_ARRAY_FLT,
1659 incx IN POSITIVEN,
1660 ap IN OUT UTL_NLA_ARRAY_FLT,
1661 pack IN flag DEFAULT 'C');
1662
1663 -- Purpose
1664 -- =======
1665 --
1666 -- BLAS_SYR2 performs the symmetric rank 2 operation
1667 -- A := alpha*x*y' + alpha*y*x' + A,
1668 -- where alpha is a scalar, x and y are n element vectors and A is an n
1669 -- by n symmetric matrix.
1670 --
1671 -- Arguments
1672 -- =========
1673 --
1674 -- UPLO - FLAG.
1675 -- On entry, UPLO specifies whether the upper or lower
1676 -- triangular part of the array A is to be referenced as
1677 -- follows:
1678 -- UPLO = 'U' or 'u' Only the upper triangular part of A
1679 -- is to be referenced.
1680 -- UPLO = 'L' or 'l' Only the lower triangular part of A
1681 -- is to be referenced.
1682 -- Unchanged on exit.
1683 -- N - INTEGER.
1684 -- On entry, N specifies the order of the matrix A.
1685 -- N must be at least zero.
1686 -- Unchanged on exit.
1687 -- ALPHA - SCALAR_FLOAT/DOUBLE .
1688 -- On entry, ALPHA specifies the scalar alpha.
1689 -- Unchanged on exit.
1690 -- X - UTL_NLA_ARRAY_FLT/DBL of dimension at least
1691 -- ( 1 + ( n - 1 )*abs( INCX ) ).
1692 -- Before entry, the incremented array X must contain the n
1693 -- element vector x.
1694 -- Unchanged on exit.
1695 -- INCX - INTEGER.
1696 -- On entry, INCX specifies the increment for the elements of
1697 -- X. INCX must not be zero.
1698 -- Unchanged on exit.
1699 -- Y - UTL_NLA_ARRAY_FLT/DBL of dimension at least
1700 -- ( 1 + ( n - 1 )*abs( INCY ) ).
1701 -- Before entry, the incremented array Y must contain the n
1702 -- element vector y.
1703 -- Unchanged on exit.
1704 -- INCY - INTEGER.
1705 -- On entry, INCY specifies the increment for the elements of
1706 -- Y. INCY must not be zero.
1707 -- Unchanged on exit.
1708 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, n ).
1709 -- Before entry with UPLO = 'U' or 'u', the leading n by n
1710 -- upper triangular part of the array A must contain the upper
1711 -- triangular part of the symmetric matrix and the strictly
1712 -- lower triangular part of A is not referenced. On exit, the
1716 -- lower triangular part of the array A must contain the lower
1713 -- upper triangular part of the array A is overwritten by the
1714 -- upper triangular part of the updated matrix.
1715 -- Before entry with UPLO = 'L' or 'l', the leading n by n
1717 -- triangular part of the symmetric matrix and the strictly
1718 -- upper triangular part of A is not referenced. On exit, the
1719 -- lower triangular part of the array A is overwritten by the
1720 -- lower triangular part of the updated matrix.
1721 -- LDA - INTEGER.
1722 -- On entry, LDA specifies the first dimension of A as declared
1723 -- in the calling (sub) program. LDA must be at least
1724 -- max( 1, n ).
1725 -- Unchanged on exit.
1726 -- PACK - (optional) FLAG
1727 -- The packing of the matricies:
1728 -- 'C': column-major (default)
1729 -- 'R': row-major
1730
1731 PROCEDURE blas_syr2(uplo IN flag,
1732 n IN POSITIVEN,
1733 alpha IN scalar_double,
1734 x IN utl_nla_array_dbl,
1735 incx IN POSITIVEN,
1736 y IN utl_nla_array_dbl,
1737 incy IN POSITIVEN,
1738 a IN OUT utl_nla_array_dbl,
1739 lda IN POSITIVEN,
1740 pack IN flag DEFAULT 'C');
1741
1742 PROCEDURE blas_syr2(uplo IN flag,
1743 n IN POSITIVEN,
1744 alpha IN scalar_float,
1745 x IN UTL_NLA_ARRAY_FLT,
1746 incx IN POSITIVEN,
1747 y IN UTL_NLA_ARRAY_FLT,
1748 incy IN POSITIVEN,
1749 a IN OUT UTL_NLA_ARRAY_FLT,
1750 lda IN POSITIVEN,
1751 pack IN flag DEFAULT 'C');
1752
1753 -- Purpose
1754 -- =======
1755 --
1756 -- BLAS_SPR2 performs the symmetric rank 2 operation
1757 -- A := alpha*x*y' + alpha*y*x' + A,
1758 -- where alpha is a scalar, x and y are n element vectors and A is an
1759 -- n by n symmetric matrix, supplied in packed form.
1760 --
1761 -- Arguments
1762 -- =========
1763 --
1764 -- UPLO - FLAG.
1765 -- On entry, UPLO specifies whether the upper or lower
1766 -- triangular part of the matrix A is supplied in the packed
1767 -- array AP as follows:
1768 -- UPLO = 'U' or 'u' The upper triangular part of A is
1769 -- supplied in AP.
1770 -- UPLO = 'L' or 'l' The lower triangular part of A is
1771 -- supplied in AP.
1772 -- Unchanged on exit.
1773 -- N - INTEGER.
1774 -- On entry, N specifies the order of the matrix A.
1775 -- N must be at least zero.
1776 -- Unchanged on exit.
1777 -- ALPHA - SCALAR_FLOAT/DOUBLE .
1778 -- On entry, ALPHA specifies the scalar alpha.
1779 -- Unchanged on exit.
1780 -- X - UTL_NLA_ARRAY_FLT/DBL of dimension at least
1781 -- ( 1 + ( n - 1 )*abs( INCX ) ).
1782 -- Before entry, the incremented array X must contain the n
1783 -- element vector x.
1784 -- Unchanged on exit.
1785 -- INCX - INTEGER.
1786 -- On entry, INCX specifies the increment for the elements of
1787 -- X. INCX must not be zero.
1788 -- Unchanged on exit.
1789 -- Y - UTL_NLA_ARRAY_FLT/DBL of dimension at least
1790 -- ( 1 + ( n - 1 )*abs( INCY ) ).
1791 -- Before entry, the incremented array Y must contain the n
1792 -- element vector y.
1793 -- Unchanged on exit.
1794 -- INCY - INTEGER.
1795 -- On entry, INCY specifies the increment for the elements of
1796 -- Y. INCY must not be zero.
1797 -- Unchanged on exit.
1798 -- AP - UTL_NLA_ARRAY_FLT/DBL of DIMENSION at least
1799 -- ( ( n*( n + 1 ) )/2 ).
1800 -- Before entry with UPLO = 'U' or 'u', the array AP must
1801 -- contain the upper triangular part of the symmetric matrix
1802 -- packed sequentially, column by column, so that AP( 1 )
1803 -- contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 )
1804 -- and a( 2, 2 ) respectively, and so on. On exit, the array
1805 -- AP is overwritten by the upper triangular part of the
1806 -- updated matrix.
1807 -- Before entry with UPLO = 'L' or 'l', the array AP must
1808 -- contain the lower triangular part of the symmetric matrix
1809 -- packed sequentially, column by column, so that AP( 1 )
1810 -- contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 )
1811 -- and a( 3, 1 ) respectively, and so on. On exit, the array
1812 -- AP is overwritten by the lower triangular part of the
1813 -- updated matrix.
1814 -- PACK - (optional) FLAG
1815 -- The packing of the matricies:
1816 -- 'C': column-major (default)
1817 -- 'R': row-major
1818
1819 PROCEDURE blas_spr2(uplo IN flag,
1820 n IN POSITIVEN,
1821 alpha IN scalar_double,
1822 x IN utl_nla_array_dbl,
1826 ap IN OUT utl_nla_array_dbl,
1823 incx IN POSITIVEN,
1824 y IN utl_nla_array_dbl,
1825 incy IN POSITIVEN,
1827 pack IN flag DEFAULT 'C');
1828
1829 PROCEDURE blas_spr2(uplo IN flag,
1830 n IN POSITIVEN,
1831 alpha IN scalar_float,
1832 x IN UTL_NLA_ARRAY_FLT,
1833 incx IN POSITIVEN,
1834 y IN UTL_NLA_ARRAY_FLT,
1835 incy IN POSITIVEN,
1836 ap IN OUT UTL_NLA_ARRAY_FLT,
1837 pack IN flag DEFAULT 'C');
1838
1839
1840 -- ---------------------------------------- --
1841 -- BLAS Level 3 (Matrix-Matrix Operations) --
1842 -- ---------------------------------------- --
1843
1844 -- Purpose
1845 -- =======
1846 --
1847 -- BLAS_GEMM performs one of the matrix-matrix operations
1848 -- C := alpha*op( A )*op( B ) + beta*C,
1849 -- where op( X ) is one of
1850 -- op( X ) = X or op( X ) = X',
1851 -- alpha and beta are scalars, and A, B and C are matrices, with op( A )
1852 -- an m by k matrix, op( B ) a k by n matrix and C an m by n matrix.
1853 --
1854 -- Arguments
1855 -- =========
1856 --
1857 -- TRANSA - FLAG.
1858 -- On entry, TRANSA specifies the form of op( A ) to be used in
1859 -- the matrix multiplication as follows:
1860 -- TRANSA = 'N' or 'n', op( A ) = A.
1861 -- TRANSA = 'T' or 't', op( A ) = A'.
1862 -- TRANSA = 'C' or 'c', op( A ) = A'.
1863 -- Unchanged on exit.
1864 -- TRANSB - FLAG.
1865 -- On entry, TRANSB specifies the form of op( B ) to be used in
1866 -- the matrix multiplication as follows:
1867 -- TRANSB = 'N' or 'n', op( B ) = B.
1868 -- TRANSB = 'T' or 't', op( B ) = B'.
1869 -- TRANSB = 'C' or 'c', op( B ) = B'.
1870 -- Unchanged on exit.
1871 -- M - INTEGER.
1872 -- On entry, M specifies the number of rows of the matrix
1873 -- op( A ) and of the matrix C. M must be at least zero.
1874 -- Unchanged on exit.
1875 -- N - INTEGER.
1876 -- On entry, N specifies the number of columns of the matrix
1877 -- op( B ) and the number of columns of the matrix C. N must be
1878 -- at least zero.
1879 -- Unchanged on exit.
1880 -- K - INTEGER.
1881 -- On entry, K specifies the number of columns of the matrix
1882 -- op( A ) and the number of rows of the matrix op( B ). K must
1883 -- be at least zero.
1884 -- Unchanged on exit.
1885 -- ALPHA - SCALAR_FLOAT/DOUBLE .
1886 -- On entry, ALPHA specifies the scalar alpha.
1887 -- Unchanged on exit.
1888 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, ka ), where ka is
1889 -- k when TRANSA = 'N' or 'n', and is m otherwise.
1890 -- Before entry with TRANSA = 'N' or 'n', the leading m by k
1891 -- part of the array A must contain the matrix A, otherwise
1892 -- the leading k by m part of the array A must contain the
1893 -- matrix A.
1894 -- Unchanged on exit.
1895 -- LDA - INTEGER.
1896 -- On entry, LDA specifies the first dimension of A as declared
1897 -- in the calling (sub) program. When TRANSA = 'N' or 'n' then
1898 -- LDA must be at least max( 1, m ), otherwise LDA must be at
1899 -- least max( 1, k ).
1900 -- Unchanged on exit.
1901 -- B - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDB, kb ), where kb is
1902 -- n when TRANSB = 'N' or 'n', and is k otherwise.
1903 -- Before entry with TRANSB = 'N' or 'n', the leading k by n
1904 -- part of the array B must contain the matrix B, otherwise
1905 -- the leading n by k part of the array B must contain the
1906 -- matrix B.
1907 -- Unchanged on exit.
1908 -- LDB - INTEGER.
1909 -- On entry, LDB specifies the first dimension of B as declared
1910 -- in the calling (sub) program. When TRANSB = 'N' or 'n' then
1911 -- LDB must be at least max( 1, k ), otherwise LDB must be at
1912 -- least max( 1, n ).
1913 -- Unchanged on exit.
1914 -- BETA - SCALAR_FLOAT/DOUBLE .
1915 -- On entry, BETA specifies the scalar beta. When BETA is
1916 -- supplied as zero then C need not be set on input.
1917 -- Unchanged on exit.
1918 -- C - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDC, n ).
1919 -- Before entry, the leading m by n part of the array C must
1920 -- contain the matrix C, except when beta is zero, in which
1921 -- case C need not be set on entry.
1922 -- On exit, the array C is overwritten by the m by n matrix
1923 -- ( alpha*op( A )*op( B ) + beta*C ).
1924 -- LDC - INTEGER.
1925 -- On entry, LDC specifies the first dimension of C as declared
1926 -- in the calling (sub) program. LDC must be at least
1927 -- max( 1, m ).
1928 -- PACK - (optional) FLAG
1929 -- The packing of the matricies:
1930 -- 'C': column-major (default)
1934 transb IN flag,
1931 -- 'R': row-major
1932
1933 PROCEDURE blas_gemm(transa IN flag,
1935 m IN POSITIVEN,
1936 n IN POSITIVEN,
1937 k IN POSITIVEN,
1938 alpha IN scalar_double,
1939 a IN utl_nla_array_dbl,
1940 lda IN POSITIVEN,
1941 b IN utl_nla_array_dbl,
1942 ldb IN POSITIVEN,
1943 beta IN scalar_double,
1944 c IN OUT utl_nla_array_dbl,
1945 ldc IN POSITIVEN,
1946 pack IN flag DEFAULT 'C');
1947
1948 PROCEDURE blas_gemm(transa IN flag,
1949 transb IN flag,
1950 m IN POSITIVEN,
1951 n IN POSITIVEN,
1952 k IN POSITIVEN,
1953 alpha IN scalar_float,
1954 a IN UTL_NLA_ARRAY_FLT,
1955 lda IN POSITIVEN,
1956 b IN UTL_NLA_ARRAY_FLT,
1957 ldb IN POSITIVEN,
1958 beta IN scalar_float,
1959 c IN OUT UTL_NLA_ARRAY_FLT,
1960 ldc IN POSITIVEN,
1961 pack IN flag DEFAULT 'C');
1962
1963
1964 -- Purpose
1965 -- =======
1966 --
1967 -- BLAS_SYMM performs one of the matrix-matrix operations
1968 -- C := alpha*A*B + beta*C,
1969 -- or
1970 -- C := alpha*B*A + beta*C,
1971 -- where alpha and beta are scalars, A is a symmetric matrix and B and
1972 -- C are m by n matrices.
1973 --
1974 -- Arguments
1975 -- =========
1976 --
1977 -- SIDE - FLAG.
1978 -- On entry, SIDE specifies whether the symmetric matrix A
1979 -- appears on the left or right in the operation as follows:
1980 -- SIDE = 'L' or 'l' C := alpha*A*B + beta*C,
1981 -- SIDE = 'R' or 'r' C := alpha*B*A + beta*C,
1982 -- Unchanged on exit.
1983 -- UPLO - FLAG.
1984 -- On entry, UPLO specifies whether the upper or lower
1985 -- triangular part of the symmetric matrix A is to be
1986 -- referenced as follows:
1987 -- UPLO = 'U' or 'u' Only the upper triangular part of the
1988 -- symmetric matrix is to be referenced.
1989 -- UPLO = 'L' or 'l' Only the lower triangular part of the
1990 -- symmetric matrix is to be referenced.
1991 -- Unchanged on exit.
1992 -- M - INTEGER.
1993 -- On entry, M specifies the number of rows of the matrix C.
1994 -- M must be at least zero.
1995 -- Unchanged on exit.
1996 -- N - INTEGER.
1997 -- On entry, N specifies the number of columns of the matrix C.
1998 -- N must be at least zero.
1999 -- Unchanged on exit.
2000 -- ALPHA - SCALAR_FLOAT/DOUBLE .
2001 -- On entry, ALPHA specifies the scalar alpha.
2002 -- Unchanged on exit.
2003 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, ka ), where ka is
2004 -- m when SIDE = 'L' or 'l' and is n otherwise.
2005 -- Before entry with SIDE = 'L' or 'l', the m by m part of
2006 -- the array A must contain the symmetric matrix, such that
2007 -- when UPLO = 'U' or 'u', the leading m by m upper triangular
2008 -- part of the array A must contain the upper triangular part
2009 -- of the symmetric matrix and the strictly lower triangular
2010 -- part of A is not referenced, and when UPLO = 'L' or 'l',
2011 -- the leading m by m lower triangular part of the array A
2012 -- must contain the lower triangular part of the symmetric
2013 -- matrix and the strictly upper triangular part of A is not
2014 -- referenced.
2015 -- Before entry with SIDE = 'R' or 'r', the n by n part of
2016 -- the array A must contain the symmetric matrix, such that
2017 -- when UPLO = 'U' or 'u', the leading n by n upper triangular
2018 -- part of the array A must contain the upper triangular part
2019 -- of the symmetric matrix and the strictly lower triangular
2020 -- part of A is not referenced, and when UPLO = 'L' or 'l',
2021 -- the leading n by n lower triangular part of the array A
2022 -- must contain the lower triangular part of the symmetric
2023 -- matrix and the strictly upper triangular part of A is not
2024 -- referenced.
2025 -- Unchanged on exit.
2026 -- LDA - INTEGER.
2027 -- On entry, LDA specifies the first dimension of A as declared
2028 -- in the calling (sub) program. When SIDE = 'L' or 'l' then
2029 -- LDA must be at least max( 1, m ), otherwise LDA must be at
2030 -- least max( 1, n ).
2031 -- Unchanged on exit.
2032 -- B - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDB, n ).
2033 -- Before entry, the leading m by n part of the array B must
2034 -- contain the matrix B.
2035 -- Unchanged on exit.
2036 -- LDB - INTEGER.
2040 -- Unchanged on exit.
2037 -- On entry, LDB specifies the first dimension of B as declared
2038 -- in the calling (sub) program. LDB must be at least
2039 -- max( 1, m ).
2041 -- BETA - SCALAR_FLOAT/DOUBLE .
2042 -- On entry, BETA specifies the scalar beta. When BETA is
2043 -- supplied as zero then C need not be set on input.
2044 -- Unchanged on exit.
2045 -- C - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDC, n ).
2046 -- Before entry, the leading m by n part of the array C must
2047 -- contain the matrix C, except when beta is zero, in which
2048 -- case C need not be set on entry.
2049 -- On exit, the array C is overwritten by the m by n updated
2050 -- matrix.
2051 -- LDC - INTEGER.
2052 -- On entry, LDC specifies the first dimension of C as declared
2053 -- in the calling (sub) program. LDC must be at least
2054 -- max( 1, m ).
2055 -- PACK - (optional) FLAG
2056 -- The packing of the matricies:
2057 -- 'C': column-major (default)
2058 -- 'R': row-major
2059
2060 PROCEDURE blas_symm(side IN flag,
2061 uplo IN flag,
2062 m IN POSITIVEN,
2063 n IN POSITIVEN,
2064 alpha IN scalar_double,
2065 a IN utl_nla_array_dbl,
2066 lda IN POSITIVEN,
2067 b IN utl_nla_array_dbl,
2068 ldb IN POSITIVEN,
2069 beta IN scalar_double,
2070 c IN OUT utl_nla_array_dbl,
2071 ldc IN POSITIVEN,
2072 pack IN flag DEFAULT 'C');
2073
2074 PROCEDURE blas_symm(side IN flag,
2075 uplo IN flag,
2076 m IN POSITIVEN,
2077 n IN POSITIVEN,
2078 alpha IN scalar_float,
2079 a IN UTL_NLA_ARRAY_FLT,
2080 lda IN POSITIVEN,
2081 b IN UTL_NLA_ARRAY_FLT,
2082 ldb IN POSITIVEN,
2083 beta IN scalar_float,
2084 c IN OUT UTL_NLA_ARRAY_FLT,
2085 ldc IN POSITIVEN,
2086 pack IN flag DEFAULT 'C');
2087
2088 -- Purpose
2089 -- =======
2090 --
2091 -- BLAS_TRMM performs one of the matrix-matrix operations
2092 -- B := alpha*op( A )*B, or B := alpha*B*op( A ),
2093 -- where alpha is a scalar, B is an m by n matrix, A is a unit, or
2094 -- non-unit, upper or lower triangular matrix and op( A ) is one of
2095 -- op( A ) = A or op( A ) = A'.
2096 --
2097 -- Arguments
2098 -- =========
2099 --
2100 -- SIDE - FLAG.
2101 -- On entry, SIDE specifies whether op( A ) multiplies B from
2102 -- the left or right as follows:
2103 -- SIDE = 'L' or 'l' B := alpha*op( A )*B.
2104 -- SIDE = 'R' or 'r' B := alpha*B*op( A ).
2105 -- Unchanged on exit.
2106 -- UPLO - FLAG.
2107 -- On entry, UPLO specifies whether the matrix A is an upper or
2108 -- lower triangular matrix as follows:
2109 -- UPLO = 'U' or 'u' A is an upper triangular matrix.
2110 -- UPLO = 'L' or 'l' A is a lower triangular matrix.
2111 -- Unchanged on exit.
2112 -- TRANSA - FLAG.
2113 -- On entry, TRANSA specifies the form of op( A ) to be used in
2114 -- the matrix multiplication as follows:
2115 -- TRANSA = 'N' or 'n' op( A ) = A.
2116 -- TRANSA = 'T' or 't' op( A ) = A'.
2117 -- TRANSA = 'C' or 'c' op( A ) = A'.
2118 -- Unchanged on exit.
2119 -- DIAG - FLAG.
2120 -- On entry, DIAG specifies whether or not A is unit triangular
2121 -- as follows:
2122 -- DIAG = 'U' or 'u' A is assumed to be unit triangular.
2123 -- DIAG = 'N' or 'n' A is not assumed to be unit
2124 -- triangular.
2125 -- Unchanged on exit.
2126 -- M - INTEGER.
2127 -- On entry, M specifies the number of rows of B. M must be at
2128 -- least zero.
2129 -- Unchanged on exit.
2130 -- N - INTEGER.
2131 -- On entry, N specifies the number of columns of B. N must be
2132 -- at least zero.
2133 -- Unchanged on exit.
2134 -- ALPHA - SCALAR_FLOAT/DOUBLE .
2135 -- On entry, ALPHA specifies the scalar alpha. When alpha is
2136 -- zero then A is not referenced and B need not be set before
2137 -- entry.
2138 -- Unchanged on exit.
2139 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, k ), where k is m
2140 -- when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'.
2141 -- Before entry with UPLO = 'U' or 'u', the leading k by k
2142 -- upper triangular part of the array A must contain the upper
2143 -- triangular matrix and the strictly lower triangular part of
2144 -- A is not referenced.
2145 -- Before entry with UPLO = 'L' or 'l', the leading k by k
2146 -- lower triangular part of the array A must contain the lower
2150 -- A are not referenced either, but are assumed to be unity.
2147 -- triangular matrix and the strictly upper triangular part of
2148 -- A is not referenced.
2149 -- Note that when DIAG = 'U' or 'u', the diagonal elements of
2151 -- Unchanged on exit.
2152 -- LDA - INTEGER.
2153 -- On entry, LDA specifies the first dimension of A as declared
2154 -- in the calling (sub) program. When SIDE = 'L' or 'l' then
2155 -- LDA must be at least max( 1, m ), when SIDE = 'R' or 'r'
2156 -- then LDA must be at least max( 1, n ).
2157 -- Unchanged on exit.
2158 -- B - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDB, n ).
2159 -- Before entry, the leading m by n part of the array B must
2160 -- contain the matrix B, and on exit is overwritten by the
2161 -- transformed matrix.
2162 -- LDB - INTEGER.
2163 -- On entry, LDB specifies the first dimension of B as declared
2164 -- in the calling (sub) program. LDB must be at least
2165 -- max( 1, m ).
2166 -- PACK - (optional) FLAG
2167 -- The packing of the matricies:
2168 -- 'C': column-major (default)
2169 -- 'R': row-major
2170
2171 PROCEDURE blas_trmm(side IN flag,
2172 uplo IN flag,
2173 transa IN flag,
2174 diag IN flag,
2175 m IN POSITIVEN,
2176 n IN POSITIVEN,
2177 alpha IN scalar_double,
2178 a IN utl_nla_array_dbl,
2179 lda IN POSITIVEN,
2180 b IN OUT utl_nla_array_dbl,
2181 ldb IN POSITIVEN,
2182 pack IN flag DEFAULT 'C');
2183
2184 PROCEDURE blas_trmm(side IN flag,
2185 uplo IN flag,
2186 transa IN flag,
2187 diag IN flag,
2188 m IN POSITIVEN,
2189 n IN POSITIVEN,
2190 alpha IN scalar_float,
2191 a IN UTL_NLA_ARRAY_FLT,
2192 lda IN POSITIVEN,
2193 b IN OUT UTL_NLA_ARRAY_FLT,
2194 ldb IN POSITIVEN,
2195 pack IN flag DEFAULT 'C');
2196
2197 -- Purpose
2198 -- =======
2199 --
2200 -- BLAS_TRSM solves one of the matrix equations
2201 -- op( A )*X = alpha*B, or X*op( A ) = alpha*B,
2202 -- where alpha is a scalar, X and B are m by n matrices, A is a unit, or
2203 -- non-unit, upper or lower triangular matrix and op( A ) is one of
2204 -- op( A ) = A or op( A ) = A'.
2205 -- The matrix X is overwritten on B.
2206 --
2207 -- Parameters
2208 -- ==========
2209 --
2210 -- SIDE - FLAG.
2211 -- On entry, SIDE specifies whether op( A ) appears on the left
2212 -- or right of X as follows:
2213 -- SIDE = 'L' or 'l' op( A )*X = alpha*B.
2214 -- SIDE = 'R' or 'r' X*op( A ) = alpha*B.
2215 -- Unchanged on exit.
2216 -- UPLO - FLAG.
2217 -- On entry, UPLO specifies whether the matrix A is an upper or
2218 -- lower triangular matrix as follows:
2219 -- UPLO = 'U' or 'u' A is an upper triangular matrix.
2220 -- UPLO = 'L' or 'l' A is a lower triangular matrix.
2221 -- Unchanged on exit.
2222 -- TRANSA - FLAG.
2223 -- On entry, TRANSA specifies the form of op( A ) to be used in
2224 -- the matrix multiplication as follows:
2225 -- TRANSA = 'N' or 'n' op( A ) = A.
2226 -- TRANSA = 'T' or 't' op( A ) = A'.
2227 -- TRANSA = 'C' or 'c' op( A ) = A'.
2228 -- Unchanged on exit.
2229 -- DIAG - FLAG.
2230 -- On entry, DIAG specifies whether or not A is unit triangular
2231 -- as follows:
2232 -- DIAG = 'U' or 'u' A is assumed to be unit triangular.
2233 -- DIAG = 'N' or 'n' A is not assumed to be unit
2234 -- triangular.
2235 -- Unchanged on exit.
2236 -- M - INTEGER.
2237 -- On entry, M specifies the number of rows of B. M must be at
2238 -- least zero.
2239 -- Unchanged on exit.
2240 -- N - INTEGER.
2241 -- On entry, N specifies the number of columns of B. N must be
2242 -- at least zero.
2243 -- Unchanged on exit.
2244 -- ALPHA - SCALAR_FLOAT/DOUBLE .
2245 -- On entry, ALPHA specifies the scalar alpha. When alpha is
2246 -- zero then A is not referenced and B need not be set before
2247 -- entry.
2248 -- Unchanged on exit.
2249 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, k ), where k is m
2250 -- when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'.
2251 -- Before entry with UPLO = 'U' or 'u', the leading k by k
2252 -- upper triangular part of the array A must contain the upper
2253 -- triangular matrix and the strictly lower triangular part of
2254 -- A is not referenced.
2255 -- Before entry with UPLO = 'L' or 'l', the leading k by k
2256 -- lower triangular part of the array A must contain the lower
2260 -- A are not referenced either, but are assumed to be unity.
2257 -- triangular matrix and the strictly upper triangular part of
2258 -- A is not referenced.
2259 -- Note that when DIAG = 'U' or 'u', the diagonal elements of
2261 -- Unchanged on exit.
2262 -- LDA - INTEGER.
2263 -- On entry, LDA specifies the first dimension of A as declared
2264 -- in the calling (sub) program. When SIDE = 'L' or 'l' then
2265 -- LDA must be at least max( 1, m ), when SIDE = 'R' or 'r'
2266 -- then LDA must be at least max( 1, n ).
2267 -- Unchanged on exit.
2268 -- B - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDB, n ).
2269 -- Before entry, the leading m by n part of the array B must
2270 -- contain the right-hand side matrix B, and on exit is
2271 -- overwritten by the solution matrix X.
2272 -- LDB - INTEGER.
2273 -- On entry, LDB specifies the first dimension of B as declared
2274 -- in the calling (sub) program. LDB must be at least
2275 -- max( 1, m ).
2276 -- Unchanged on exit.
2277 -- PACK - (optional) FLAG
2278 -- The packing of the matricies:
2279 -- 'C': column-major (default)
2280 -- 'R': row-major
2281
2282 PROCEDURE blas_trsm(side IN flag,
2283 uplo IN flag,
2284 transa IN flag,
2285 diag IN flag,
2286 m IN POSITIVEN,
2287 n IN POSITIVEN,
2288 alpha IN scalar_double,
2289 a IN utl_nla_array_dbl,
2290 lda IN POSITIVEN,
2291 b IN OUT utl_nla_array_dbl,
2292 ldb IN POSITIVEN,
2293 pack IN flag DEFAULT 'C');
2294
2295 PROCEDURE blas_trsm(side IN flag,
2296 uplo IN flag,
2297 transa IN flag,
2298 diag IN flag,
2299 m IN POSITIVEN,
2300 n IN POSITIVEN,
2301 alpha IN scalar_float,
2302 a IN UTL_NLA_ARRAY_FLT,
2303 lda IN POSITIVEN,
2304 b IN OUT UTL_NLA_ARRAY_FLT,
2305 ldb IN POSITIVEN,
2306 pack IN flag DEFAULT 'C');
2307
2308 -- Purpose
2309 -- =======
2310 --
2311 -- BLAS_SYRK performs one of the symmetric rank k operations
2312 -- C := alpha*A*A' + beta*C,
2313 -- or
2314 -- C := alpha*A'*A + beta*C,
2315 -- where alpha and beta are scalars, C is an n by n symmetric matrix
2316 -- and A is an n by k matrix in the first case and a k by n matrix
2317 -- in the second case.
2318 --
2319 -- Arguments
2320 -- =========
2321 -- UPLO - FLAG.
2322 -- On entry, UPLO specifies whether the upper or lower
2323 -- triangular part of the array C is to be referenced as
2324 -- follows:
2325 -- UPLO = 'U' or 'u' Only the upper triangular part of C
2326 -- is to be referenced.
2327 -- UPLO = 'L' or 'l' Only the lower triangular part of C
2328 -- is to be referenced.
2329 -- Unchanged on exit.
2330 -- TRANS - FLAG.
2331 -- On entry, TRANS specifies the operation to be performed as
2332 -- follows:
2333 -- TRANS = 'N' or 'n' C := alpha*A*A' + beta*C.
2334 -- TRANS = 'T' or 't' C := alpha*A'*A + beta*C.
2335 -- TRANS = 'C' or 'c' C := alpha*A'*A + beta*C.
2336 -- Unchanged on exit.
2337 -- N - INTEGER.
2338 -- On entry, N specifies the order of the matrix C. N must be
2339 -- at least zero.
2340 -- Unchanged on exit.
2341 -- K - INTEGER.
2342 -- On entry with TRANS = 'N' or 'n', K specifies the number
2343 -- of columns of the matrix A, and on entry with
2344 -- TRANS = 'T' or 't' or 'C' or 'c', K specifies the number
2345 -- of rows of the matrix A. K must be at least zero.
2346 -- Unchanged on exit.
2347 -- ALPHA - SCALAR_FLOAT/DOUBLE .
2348 -- On entry, ALPHA specifies the scalar alpha.
2349 -- Unchanged on exit.
2350 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, ka ), where ka is
2351 -- k when TRANS = 'N' or 'n', and is n otherwise.
2352 -- Before entry with TRANS = 'N' or 'n', the leading n by k
2353 -- part of the array A must contain the matrix A, otherwise
2354 -- the leading k by n part of the array A must contain the
2355 -- matrix A.
2356 -- Unchanged on exit.
2357 -- LDA - INTEGER.
2358 -- On entry, LDA specifies the first dimension of A as declared
2359 -- in the calling (sub) program. When TRANS = 'N' or 'n'
2360 -- then LDA must be at least max( 1, n ), otherwise LDA must
2361 -- be at least max( 1, k ).
2362 -- Unchanged on exit.
2363 -- BETA - SCALAR_FLOAT/DOUBLE .
2364 -- On entry, BETA specifies the scalar beta.
2365 -- Unchanged on exit.
2369 -- triangular part of the symmetric matrix and the strictly
2366 -- C - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDC, n ).
2367 -- Before entry with UPLO = 'U' or 'u', the leading n by n
2368 -- upper triangular part of the array C must contain the upper
2370 -- lower triangular part of C is not referenced. On exit, the
2371 -- upper triangular part of the array C is overwritten by the
2372 -- upper triangular part of the updated matrix.
2373 -- Before entry with UPLO = 'L' or 'l', the leading n by n
2374 -- lower triangular part of the array C must contain the lower
2375 -- triangular part of the symmetric matrix and the strictly
2376 -- upper triangular part of C is not referenced. On exit, the
2377 -- lower triangular part of the array C is overwritten by the
2378 -- lower triangular part of the updated matrix.
2379 -- LDC - INTEGER.
2380 -- On entry, LDC specifies the first dimension of C as declared
2381 -- in the calling (sub) program. LDC must be at least
2382 -- max( 1, n ).
2383 -- Unchanged on exit.
2384 -- PACK - (optional) FLAG
2385 -- The packing of the matricies:
2386 -- 'C': column-major (default)
2387 -- 'R': row-major
2388
2389 PROCEDURE blas_syrk(uplo IN flag,
2390 trans IN flag,
2391 n IN POSITIVEN,
2392 k IN POSITIVEN,
2393 alpha IN scalar_double,
2394 a IN utl_nla_array_dbl,
2395 lda IN POSITIVEN,
2396 beta IN scalar_double,
2397 c IN OUT utl_nla_array_dbl,
2398 ldc IN POSITIVEN,
2399 pack IN flag DEFAULT 'C');
2400
2401 PROCEDURE blas_syrk(uplo IN flag,
2402 trans IN flag,
2403 n IN POSITIVEN,
2404 k IN POSITIVEN,
2405 alpha IN scalar_float,
2406 a IN UTL_NLA_ARRAY_FLT,
2407 lda IN POSITIVEN,
2408 beta IN scalar_float,
2409 c IN OUT UTL_NLA_ARRAY_FLT,
2410 ldc IN POSITIVEN,
2411 pack IN flag DEFAULT 'C');
2412
2413 -- Purpose
2414 -- =======
2415 --
2416 -- BLAS_SYR2K performs one of the symmetric rank 2k operations
2417 -- C := alpha*A*B' + alpha*B*A' + beta*C,
2418 -- or
2419 -- C := alpha*A'*B + alpha*B'*A + beta*C,
2420 -- where alpha and beta are scalars, C is an n by n symmetric matrix
2421 -- and A and B are n by k matrices in the first case and k by n
2422 -- matrices in the second case.
2423 --
2424 -- Arguments
2425 -- =========
2426 -- UPLO - FLAG.
2427 -- On entry, UPLO specifies whether the upper or lower
2428 -- triangular part of the array C is to be referenced as
2429 -- follows:
2430 -- UPLO = 'U' or 'u' Only the upper triangular part of C
2431 -- is to be referenced.
2432 -- UPLO = 'L' or 'l' Only the lower triangular part of C
2433 -- is to be referenced.
2434 -- Unchanged on exit.
2435 -- TRANS - FLAG.
2436 -- On entry, TRANS specifies the operation to be performed as
2437 -- follows:
2438 -- TRANS = 'N' or 'n' C := alpha*A*B' + alpha*B*A' +
2439 -- beta*C.
2440 -- TRANS = 'T' or 't' C := alpha*A'*B + alpha*B'*A +
2441 -- beta*C.
2442 -- TRANS = 'C' or 'c' C := alpha*A'*B + alpha*B'*A +
2443 -- beta*C.
2444 -- Unchanged on exit.
2445 -- N - INTEGER.
2446 -- On entry, N specifies the order of the matrix C. N must be
2447 -- at least zero.
2448 -- Unchanged on exit.
2449 -- K - INTEGER.
2450 -- On entry with TRANS = 'N' or 'n', K specifies the number
2451 -- of columns of the matrices A and B, and on entry with
2452 -- TRANS = 'T' or 't' or 'C' or 'c', K specifies the number
2453 -- of rows of the matrices A and B. K must be at least zero.
2454 -- Unchanged on exit.
2455 -- ALPHA - SCALAR_FLOAT/DOUBLE .
2456 -- On entry, ALPHA specifies the scalar alpha.
2457 -- Unchanged on exit.
2458 -- A - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDA, ka ), where ka is
2459 -- k when TRANS = 'N' or 'n', and is n otherwise.
2460 -- Before entry with TRANS = 'N' or 'n', the leading n by k
2461 -- part of the array A must contain the matrix A, otherwise
2462 -- the leading k by n part of the array A must contain the
2463 -- matrix A.
2464 -- Unchanged on exit.
2465 -- LDA - INTEGER.
2466 -- On entry, LDA specifies the first dimension of A as declared
2467 -- in the calling (sub) program. When TRANS = 'N' or 'n'
2468 -- then LDA must be at least max( 1, n ), otherwise LDA must
2469 -- be at least max( 1, k ).
2470 -- Unchanged on exit.
2474 -- part of the array B must contain the matrix B, otherwise
2471 -- B - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDB, kb ), where kb is
2472 -- k when TRANS = 'N' or 'n', and is n otherwise.
2473 -- Before entry with TRANS = 'N' or 'n', the leading n by k
2475 -- the leading k by n part of the array B must contain the
2476 -- matrix B.
2477 -- Unchanged on exit.
2478 -- LDB - INTEGER.
2479 -- On entry, LDB specifies the first dimension of B as declared
2480 -- in the calling (sub) program. When TRANS = 'N' or 'n'
2481 -- then LDB must be at least max( 1, n ), otherwise LDB must
2482 -- be at least max( 1, k ).
2483 -- Unchanged on exit.
2484 -- BETA - SCALAR_FLOAT/DOUBLE .
2485 -- On entry, BETA specifies the scalar beta.
2486 -- Unchanged on exit.
2487 -- C - UTL_NLA_ARRAY_FLT/DBL of DIMENSION ( LDC, n ).
2488 -- Before entry with UPLO = 'U' or 'u', the leading n by n
2489 -- upper triangular part of the array C must contain the upper
2490 -- triangular part of the symmetric matrix and the strictly
2491 -- lower triangular part of C is not referenced. On exit, the
2492 -- upper triangular part of the array C is overwritten by the
2493 -- upper triangular part of the updated matrix.
2494 -- Before entry with UPLO = 'L' or 'l', the leading n by n
2495 -- lower triangular part of the array C must contain the lower
2496 -- triangular part of the symmetric matrix and the strictly
2497 -- upper triangular part of C is not referenced. On exit, the
2498 -- lower triangular part of the array C is overwritten by the
2499 -- lower triangular part of the updated matrix.
2500 -- LDC - INTEGER.
2501 -- On entry, LDC specifies the first dimension of C as declared
2502 -- in the calling (sub) program. LDC must be at least
2503 -- max( 1, n ).
2504 -- Unchanged on exit.
2505 -- PACK - (optional) FLAG
2506 -- The packing of the matricies:
2507 -- 'C': column-major (default)
2508 -- 'R': row-major
2509
2510 PROCEDURE blas_syr2k(uplo IN flag,
2511 trans IN flag,
2512 n IN POSITIVEN,
2513 k IN POSITIVEN,
2514 alpha IN scalar_double,
2515 a IN utl_nla_array_dbl,
2516 lda IN POSITIVEN,
2517 b IN utl_nla_array_dbl,
2518 ldb IN POSITIVEN,
2519 beta IN scalar_double,
2520 c IN OUT utl_nla_array_dbl,
2521 ldc IN POSITIVEN,
2522 pack IN flag DEFAULT 'C');
2523
2524 PROCEDURE blas_syr2k(uplo IN flag,
2525 trans IN flag,
2526 n IN POSITIVEN,
2527 k IN POSITIVEN,
2528 alpha IN scalar_float,
2529 a IN UTL_NLA_ARRAY_FLT,
2530 lda IN POSITIVEN,
2531 b IN UTL_NLA_ARRAY_FLT,
2532 ldb IN POSITIVEN,
2533 beta IN scalar_float,
2534 c IN OUT UTL_NLA_ARRAY_FLT,
2535 ldc IN POSITIVEN,
2536 pack IN flag DEFAULT 'C');
2537
2538
2539 -- ------------------------------------------ --
2540 -- LAPACK Driver Routines: Linear Equations --
2541 -- ------------------------------------------ --
2542
2543 --
2544 -- Purpose
2545 -- =======
2546 --
2547 -- LAPACK_GESV computes the solution to a real system of linear equations
2548 -- A * X = B,
2549 -- where A is an N-by-N matrix and X and B are N-by-NRHS matrices.
2550 --
2551 -- The LU decomposition with partial pivoting and row interchanges is
2552 -- used to factor A as
2553 -- A = P * L * U,
2554 -- where P is a permutation matrix, L is unit lower triangular, and U is
2555 -- upper triangular. The factored form of A is then used to solve the
2556 -- system of equations A * X = B.
2557 --
2558 -- Arguments
2559 -- =========
2560 --
2561 -- N (input) INTEGER
2562 -- The number of linear equations, i.e., the order of the
2563 -- matrix A. N >= 0.
2564 --
2565 -- NRHS (input) INTEGER
2566 -- The number of right hand sides, i.e., the number of columns
2567 -- of the matrix B. NRHS >= 0.
2568 --
2569 -- A (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDA,N)
2570 -- On entry, the N-by-N coefficient matrix A.
2571 -- On exit, the factors L and U from the factorization
2572 -- A = P*L*U; the unit diagonal elements of L are not stored.
2573 --
2574 -- LDA (input) INTEGER
2575 -- The leading dimension of the array A. LDA >= max(1,N).
2576 --
2577 -- IPIV (output) INTEGER array, dimension (N)
2578 -- The pivot indices that define the permutation matrix P;
2579 -- row i of the matrix was interchanged with row IPIV(i).
2580 --
2581 -- B (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDB,NRHS)
2582 -- On entry, the N-by-NRHS matrix of right hand side matrix B.
2586 -- The leading dimension of the array B. LDB >= max(1,N).
2583 -- On exit, if INFO = 0, the N-by-NRHS solution matrix X.
2584 --
2585 -- LDB (input) INTEGER
2587 --
2588 -- INFO (output) INTEGER
2589 -- = 0: successful exit
2590 -- < 0: if INFO = -i, the i-th argument had an illegal value
2591 -- > 0: if INFO = i, U(i,i) is exactly zero. The factorization
2592 -- has been completed, but the factor U is exactly
2593 -- singular, so the solution could not be computed.
2594 -- PACK - (optional) FLAG
2595 -- The packing of the matricies:
2596 -- 'C': column-major (default)
2597 -- 'R': row-major
2598
2599 PROCEDURE lapack_gesv(n IN POSITIVEN,
2600 nrhs IN POSITIVEN,
2601 a IN OUT utl_nla_array_dbl,
2602 lda IN POSITIVEN,
2603 ipiv IN OUT UTL_NLA_ARRAY_INT,
2604 b IN OUT utl_nla_array_dbl,
2605 ldb IN POSITIVEN,
2606 info OUT integer,
2607 pack IN flag DEFAULT 'C');
2608
2609 PROCEDURE lapack_gesv(n IN POSITIVEN,
2610 nrhs IN POSITIVEN,
2611 a IN OUT UTL_NLA_ARRAY_FLT,
2612 lda IN POSITIVEN,
2613 ipiv IN OUT UTL_NLA_ARRAY_INT,
2614 b IN OUT UTL_NLA_ARRAY_FLT,
2615 ldb IN POSITIVEN,
2616 info OUT integer,
2617 pack IN flag DEFAULT 'C');
2618
2619 --
2620 -- Purpose
2621 -- =======
2622 --
2623 -- LAPACK_GBSV computes the solution to a real system of linear equations
2624 -- A * X = B, where A is a band matrix of order N with KL subdiagonals
2625 -- and KU superdiagonals, and X and B are N-by-NRHS matrices.
2626 --
2627 -- The LU decomposition with partial pivoting and row interchanges is
2628 -- used to factor A as A = L * U, where L is a product of permutation
2629 -- and unit lower triangular matrices with KL subdiagonals, and U is
2630 -- upper triangular with KL+KU superdiagonals. The factored form of A
2631 -- is then used to solve the system of equations A * X = B.
2632 --
2633 -- Arguments
2634 -- =========
2635 --
2636 -- N (input) INTEGER
2637 -- The number of linear equations, i.e., the order of the
2638 -- matrix A. N >= 0.
2639 --
2640 -- KL (input) INTEGER
2641 -- The number of subdiagonals within the band of A. KL >= 0.
2642 --
2643 -- KU (input) INTEGER
2644 -- The number of superdiagonals within the band of A. KU >= 0.
2645 --
2646 -- NRHS (input) INTEGER
2647 -- The number of right hand sides, i.e., the number of columns
2648 -- of the matrix B. NRHS >= 0.
2649 --
2650 -- AB (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDAB,N)
2651 -- On entry, the matrix A in band storage, in rows KL+1 to
2652 -- 2*KL+KU+1; rows 1 to KL of the array need not be set.
2653 -- The j-th column of A is stored in the j-th column of the
2654 -- array AB as follows:
2655 -- AB(KL+KU+1+i-j,j) = A(i,j) for max(1,j-KU)<=i<=min(N,j+KL)
2656 -- On exit, details of the factorization: U is stored as an
2657 -- upper triangular band matrix with KL+KU superdiagonals in
2658 -- rows 1 to KL+KU+1, and the multipliers used during the
2659 -- factorization are stored in rows KL+KU+2 to 2*KL+KU+1.
2660 -- See below for further details.
2661 --
2662 -- LDAB (input) INTEGER
2663 -- The leading dimension of the array AB. LDAB >= 2*KL+KU+1.
2664 --
2665 -- IPIV (output) INTEGER array, dimension (N)
2666 -- The pivot indices that define the permutation matrix P;
2667 -- row i of the matrix was interchanged with row IPIV(i).
2668 --
2669 -- B (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDB,NRHS)
2670 -- On entry, the N-by-NRHS right hand side matrix B.
2671 -- On exit, if INFO = 0, the N-by-NRHS solution matrix X.
2672 --
2673 -- LDB (input) INTEGER
2674 -- The leading dimension of the array B. LDB >= max(1,N).
2675 --
2676 -- INFO (output) INTEGER
2677 -- = 0: successful exit
2678 -- < 0: if INFO = -i, the i-th argument had an illegal value
2679 -- > 0: if INFO = i, U(i,i) is exactly zero. The factorization
2680 -- has been completed, but the factor U is exactly
2681 -- singular, and the solution has not been computed.
2682 --
2683 -- PACK - (optional) FLAG
2684 -- The packing of the matricies:
2685 -- 'C': column-major (default)
2686 -- 'R': row-major
2687
2688 PROCEDURE lapack_gbsv (n IN POSITIVEN,
2689 kl IN NATURALN,
2690 ku IN NATURALN,
2691 nrhs IN POSITIVEN,
2692 ab IN OUT utl_nla_array_dbl,
2693 ldab IN POSITIVEN,
2694 ipiv IN OUT UTL_NLA_ARRAY_INT,
2695 b IN OUT utl_nla_array_dbl,
2696 ldb IN POSITIVEN,
2697 info OUT integer,
2701 kl IN NATURALN,
2698 pack IN flag DEFAULT 'C');
2699
2700 PROCEDURE lapack_gbsv (n IN POSITIVEN,
2702 ku IN NATURALN,
2703 nrhs IN POSITIVEN,
2704 ab IN OUT UTL_NLA_ARRAY_FLT,
2705 ldab IN POSITIVEN,
2706 ipiv IN OUT UTL_NLA_ARRAY_INT,
2707 b IN OUT UTL_NLA_ARRAY_FLT,
2708 ldb IN POSITIVEN,
2709 info OUT integer,
2710 pack IN flag DEFAULT 'C');
2711
2712 --
2713 -- Purpose
2714 -- =======
2715 --
2716 -- LAPACK_GTSV solves the equation
2717 --
2718 -- A*X = B,
2719 --
2720 -- where A is an n by n tridiagonal matrix, by Gaussian elimination with
2721 -- partial pivoting.
2722 --
2723 -- Note that the equation A'*X = B may be solved by interchanging the
2724 -- order of the arguments DU and DL.
2725 --
2726 -- Arguments
2727 -- =========
2728 --
2729 -- N (input) INTEGER
2730 -- The order of the matrix A. N >= 0.
2731 --
2732 -- NRHS (input) INTEGER
2733 -- The number of right hand sides, i.e., the number of columns
2734 -- of the matrix B. NRHS >= 0.
2735 --
2736 -- DL (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (N-1)
2737 -- On entry, DL must contain the (n-1) sub-diagonal elements of
2738 -- A.
2739 --
2740 -- On exit, DL is overwritten by the (n-2) elements of the
2741 -- second super-diagonal of the upper triangular matrix U from
2742 -- the LU factorization of A, in DL(1), ..., DL(n-2).
2743 --
2744 -- D (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
2745 -- On entry, D must contain the diagonal elements of A.
2746 --
2747 -- On exit, D is overwritten by the n diagonal elements of U.
2748 --
2749 -- DU (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (N-1)
2750 -- On entry, DU must contain the (n-1) super-diagonal elements
2751 -- of A.
2752 --
2753 -- On exit, DU is overwritten by the (n-1) elements of the first
2754 -- super-diagonal of U.
2755 --
2756 -- B (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDB,NRHS)
2757 -- On entry, the N by NRHS matrix of right hand side matrix B.
2758 -- On exit, if INFO = 0, the N by NRHS solution matrix X.
2759 --
2760 -- LDB (input) INTEGER
2761 -- The leading dimension of the array B. LDB >= max(1,N).
2762 --
2763 -- INFO (output) INTEGER
2764 -- = 0: successful exit
2765 -- < 0: if INFO = -i, the i-th argument had an illegal value
2766 -- > 0: if INFO = i, U(i,i) is exactly zero, and the solution
2767 -- has not been computed. The factorization has not been
2768 -- completed unless i = N.
2769 -- PACK - (optional) FLAG
2770 -- The packing of the matricies:
2771 -- 'C': column-major (default)
2772 -- 'R': row-major
2773
2774 PROCEDURE lapack_gtsv (n IN POSITIVEN,
2775 nrhs IN POSITIVEN,
2776 dl IN OUT utl_nla_array_dbl,
2777 d IN OUT utl_nla_array_dbl,
2778 du IN OUT utl_nla_array_dbl,
2779 b IN OUT utl_nla_array_dbl,
2780 ldb IN POSITIVEN,
2781 info OUT integer,
2782 pack IN flag DEFAULT 'C');
2783
2784 PROCEDURE lapack_gtsv (n IN POSITIVEN,
2785 nrhs IN POSITIVEN,
2786 dl IN OUT UTL_NLA_ARRAY_FLT,
2787 d IN OUT UTL_NLA_ARRAY_FLT,
2788 du IN OUT UTL_NLA_ARRAY_FLT,
2789 b IN OUT UTL_NLA_ARRAY_FLT,
2790 ldb IN POSITIVEN,
2791 info OUT integer,
2792 pack IN flag DEFAULT 'C');
2793
2794 --
2795 -- Purpose
2796 -- =======
2797 --
2798 -- LAPACK_POSV computes the solution to a real system of linear equations
2799 -- A * X = B,
2800 -- where A is an N-by-N symmetric positive definite matrix and X and B
2801 -- are N-by-NRHS matrices.
2802 --
2803 -- The Cholesky decomposition is used to factor A as
2804 -- A = U**T* U, if UPLO = 'U', or
2805 -- A = L * L**T, if UPLO = 'L',
2806 -- where U is an upper triangular matrix and L is a lower triangular
2807 -- matrix. The factored form of A is then used to solve the system of
2808 -- equations A * X = B.
2809 --
2810 -- Arguments
2811 -- =========
2812 --
2813 -- UPLO (input) FLAG
2814 -- = 'U': Upper triangle of A is stored;
2815 -- = 'L': Lower triangle of A is stored.
2816 --
2817 -- N (input) INTEGER
2818 -- The number of linear equations, i.e., the order of the
2819 -- matrix A. N >= 0.
2820 --
2821 -- NRHS (input) INTEGER
2822 -- The number of right hand sides, i.e., the number of columns
2823 -- of the matrix B. NRHS >= 0.
2824 --
2828 -- triangular part of the matrix A, and the strictly lower
2825 -- A (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDA,N)
2826 -- On entry, the symmetric matrix A. If UPLO = 'U', the leading
2827 -- N-by-N upper triangular part of A contains the upper
2829 -- triangular part of A is not referenced. If UPLO = 'L', the
2830 -- leading N-by-N lower triangular part of A contains the lower
2831 -- triangular part of the matrix A, and the strictly upper
2832 -- triangular part of A is not referenced.
2833 --
2834 -- On exit, if INFO = 0, the factor U or L from the Cholesky
2835 -- factorization A = U**T*U or A = L*L**T.
2836 --
2837 -- LDA (input) INTEGER
2838 -- The leading dimension of the array A. LDA >= max(1,N).
2839 --
2840 -- B (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDB,NRHS)
2841 -- On entry, the N-by-NRHS right hand side matrix B.
2842 -- On exit, if INFO = 0, the N-by-NRHS solution matrix X.
2843 --
2844 -- LDB (input) INTEGER
2845 -- The leading dimension of the array B. LDB >= max(1,N).
2846 --
2847 -- INFO (output) INTEGER
2848 -- = 0: successful exit
2849 -- < 0: if INFO = -i, the i-th argument had an illegal value
2850 -- > 0: if INFO = i, the leading minor of order i of A is not
2851 -- positive definite, so the factorization could not be
2852 -- completed, and the solution has not been computed.
2853 -- PACK - (optional) FLAG
2854 -- The packing of the matricies:
2855 -- 'C': column-major (default)
2856 -- 'R': row-major
2857
2858 PROCEDURE lapack_posv (uplo IN flag,
2859 n IN POSITIVEN,
2860 nrhs IN POSITIVEN,
2861 a IN OUT utl_nla_array_dbl,
2862 lda IN POSITIVEN,
2863 b IN OUT utl_nla_array_dbl,
2864 ldb IN POSITIVEN,
2865 info OUT integer,
2866 pack IN flag DEFAULT 'C');
2867
2868 PROCEDURE lapack_posv (uplo IN flag,
2869 n IN POSITIVEN,
2870 nrhs IN POSITIVEN,
2871 a IN OUT UTL_NLA_ARRAY_FLT,
2872 lda IN POSITIVEN,
2873 b IN OUT UTL_NLA_ARRAY_FLT,
2874 ldb IN POSITIVEN,
2875 info OUT integer,
2876 pack IN flag DEFAULT 'C');
2877
2878 --
2879 -- Purpose
2880 -- =======
2881 --
2882 -- LAPACK_PPSV computes the solution to a real system of linear equations
2883 -- A * X = B,
2884 -- where A is an N-by-N symmetric positive definite matrix stored in
2885 -- packed format and X and B are N-by-NRHS matrices.
2886 --
2887 -- The Cholesky decomposition is used to factor A as
2888 -- A = U**T* U, if UPLO = 'U', or
2889 -- A = L * L**T, if UPLO = 'L',
2890 -- where U is an upper triangular matrix and L is a lower triangular
2891 -- matrix. The factored form of A is then used to solve the system of
2892 -- equations A * X = B.
2893 --
2894 -- Arguments
2895 -- =========
2896 --
2897 -- UPLO (input) FLAG
2898 -- = 'U': Upper triangle of A is stored;
2899 -- = 'L': Lower triangle of A is stored.
2900 --
2901 -- N (input) INTEGER
2902 -- The number of linear equations, i.e., the order of the
2903 -- matrix A. N >= 0.
2904 --
2905 -- NRHS (input) INTEGER
2906 -- The number of right hand sides, i.e., the number of columns
2907 -- of the matrix B. NRHS >= 0.
2908 --
2909 -- AP (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (N*(N+1)/2)
2910 -- On entry, the upper or lower triangle of the symmetric matrix
2911 -- A, packed columnwise in a linear array. The j-th column of A
2912 -- is stored in the array AP as follows:
2913 -- if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
2914 -- if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
2915 -- See below for further details.
2916 --
2917 -- On exit, if INFO = 0, the factor U or L from the Cholesky
2918 -- factorization A = U**T*U or A = L*L**T, in the same storage
2919 -- format as A.
2920 --
2921 -- B (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDB,NRHS)
2922 -- On entry, the N-by-NRHS right hand side matrix B.
2923 -- On exit, if INFO = 0, the N-by-NRHS solution matrix X.
2924 --
2925 -- LDB (input) INTEGER
2926 -- The leading dimension of the array B. LDB >= max(1,N).
2927 --
2928 -- INFO (output) INTEGER
2929 -- = 0: successful exit
2930 -- < 0: if INFO = -i, the i-th argument had an illegal value
2931 -- > 0: if INFO = i, the leading minor of order i of A is not
2932 -- positive definite, so the factorization could not be
2933 -- completed, and the solution has not been computed.
2934 --
2935 -- PACK - (optional) FLAG
2936 -- The packing of the matricies:
2937 -- 'C': column-major (default)
2938 -- 'R': row-major
2939
2940 PROCEDURE lapack_ppsv (uplo IN flag,
2944 b IN OUT utl_nla_array_dbl,
2941 n IN POSITIVEN,
2942 nrhs IN POSITIVEN,
2943 ap IN OUT utl_nla_array_dbl,
2945 ldb IN POSITIVEN,
2946 info OUT integer,
2947 pack IN flag DEFAULT 'C');
2948
2949 PROCEDURE lapack_ppsv (uplo IN flag,
2950 n IN POSITIVEN,
2951 nrhs IN POSITIVEN,
2952 ap IN OUT UTL_NLA_ARRAY_FLT,
2953 b IN OUT UTL_NLA_ARRAY_FLT,
2954 ldb IN POSITIVEN,
2955 info OUT integer,
2956 pack IN flag DEFAULT 'C');
2957
2958 --
2959 -- Purpose
2960 -- =======
2961 --
2962 -- LAPACK_PBSV computes the solution to a real system of linear equations
2963 -- A * X = B,
2964 -- where A is an N-by-N symmetric positive definite band matrix and X
2965 -- and B are N-by-NRHS matrices.
2966 --
2967 -- The Cholesky decomposition is used to factor A as
2968 -- A = U**T * U, if UPLO = 'U', or
2969 -- A = L * L**T, if UPLO = 'L',
2970 -- where U is an upper triangular band matrix, and L is a lower
2971 -- triangular band matrix, with the same number of superdiagonals or
2972 -- subdiagonals as A. The factored form of A is then used to solve the
2973 -- system of equations A * X = B.
2974 --
2975 -- Arguments
2976 -- =========
2977 --
2978 -- UPLO (input) FLAG
2979 -- = 'U': Upper triangle of A is stored;
2980 -- = 'L': Lower triangle of A is stored.
2981 --
2982 -- N (input) INTEGER
2983 -- The number of linear equations, i.e., the order of the
2984 -- matrix A. N >= 0.
2985 --
2986 -- KD (input) INTEGER
2987 -- The number of superdiagonals of the matrix A if UPLO = 'U',
2988 -- or the number of subdiagonals if UPLO = 'L'. KD >= 0.
2989 --
2990 -- NRHS (input) INTEGER
2991 -- The number of right hand sides, i.e., the number of columns
2992 -- of the matrix B. NRHS >= 0.
2993 --
2994 -- AB (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDAB,N)
2995 -- On entry, the upper or lower triangle of the symmetric band
2996 -- matrix A, stored in the first KD+1 rows of the array. The
2997 -- j-th column of A is stored in the j-th column of the array AB
2998 -- as follows:
2999 -- if UPLO = 'U', AB(KD+1+i-j,j) = A(i,j) for max(1,j-KD)<=i<=j;
3000 -- if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(N,j+KD).
3001 -- See below for further details.
3002 --
3003 -- On exit, if INFO = 0, the triangular factor U or L from the
3004 -- Cholesky factorization A = U**T*U or A = L*L**T of the band
3005 -- matrix A, in the same storage format as A.
3006 --
3007 -- LDAB (input) INTEGER
3008 -- The leading dimension of the array AB. LDAB >= KD+1.
3009 --
3010 -- B (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDB,NRHS)
3011 -- On entry, the N-by-NRHS right hand side matrix B.
3012 -- On exit, if INFO = 0, the N-by-NRHS solution matrix X.
3013 --
3014 -- LDB (input) INTEGER
3015 -- The leading dimension of the array B. LDB >= max(1,N).
3016 --
3017 -- INFO (output) INTEGER
3018 -- = 0: successful exit
3019 -- < 0: if INFO = -i, the i-th argument had an illegal value
3020 -- > 0: if INFO = i, the leading minor of order i of A is not
3021 -- positive definite, so the factorization could not be
3022 -- completed, and the solution has not been computed.
3023 -- PACK - (optional) FLAG
3024 -- The packing of the matricies:
3025 -- 'C': column-major (default)
3026 -- 'R': row-major
3027
3028 PROCEDURE lapack_pbsv (uplo IN flag,
3029 n IN POSITIVEN,
3030 kd IN NATURALN,
3031 nrhs IN POSITIVEN,
3032 ab IN OUT utl_nla_array_dbl,
3033 ldab IN POSITIVEN,
3034 b IN OUT utl_nla_array_dbl,
3035 ldb IN POSITIVEN,
3036 info OUT integer,
3037 pack IN flag DEFAULT 'C');
3038
3039 PROCEDURE lapack_pbsv (uplo IN flag,
3040 n IN POSITIVEN,
3041 kd IN NATURALN,
3042 nrhs IN POSITIVEN,
3043 ab IN OUT UTL_NLA_ARRAY_FLT,
3044 ldab IN POSITIVEN,
3045 b IN OUT UTL_NLA_ARRAY_FLT,
3046 ldb IN POSITIVEN,
3047 info OUT integer,
3048 pack IN flag DEFAULT 'C');
3049
3050 --
3051 -- Purpose
3052 -- =======
3053 --
3054 -- SPTSV computes the solution to a real system of linear equations
3055 -- A*X = B, where A is an N-by-N symmetric positive definite tridiagonal
3056 -- matrix, and X and B are N-by-NRHS matrices.
3057 --
3058 -- A is factored as A = L*D*L**T, and the factored form of A is then
3062 -- =========
3059 -- used to solve the system of equations.
3060 --
3061 -- Arguments
3063 --
3064 -- N (input) INTEGER
3065 -- The order of the matrix A. N >= 0.
3066 --
3067 -- NRHS (input) INTEGER
3068 -- The number of right hand sides, i.e., the number of columns
3069 -- of the matrix B. NRHS >= 0.
3070 --
3071 -- D (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
3072 -- On entry, the n diagonal elements of the tridiagonal matrix
3073 -- A. On exit, the n diagonal elements of the diagonal matrix
3074 -- D from the factorization A = L*D*L**T.
3075 --
3076 -- E (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (N-1)
3077 -- On entry, the (n-1) subdiagonal elements of the tridiagonal
3078 -- matrix A. On exit, the (n-1) subdiagonal elements of the
3079 -- unit bidiagonal factor L from the L*D*L**T factorization of
3080 -- A. (E can also be regarded as the superdiagonal of the unit
3081 -- bidiagonal factor U from the U**T*D*U factorization of A.)
3082 --
3083 -- B (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDB,NRHS)
3084 -- On entry, the N-by-NRHS right hand side matrix B.
3085 -- On exit, if INFO = 0, the N-by-NRHS solution matrix X.
3086 --
3087 -- LDB (input) INTEGER
3088 -- The leading dimension of the array B. LDB >= max(1,N).
3089 --
3090 -- INFO (output) INTEGER
3091 -- = 0: successful exit
3092 -- < 0: if INFO = -i, the i-th argument had an illegal value
3093 -- > 0: if INFO = i, the leading minor of order i is not
3094 -- positive definite, and the solution has not been
3095 -- computed. The factorization has not been completed
3096 -- unless i = N.
3097 -- PACK - (optional) FLAG
3098 -- The packing of the matricies:
3099 -- 'C': column-major (default)
3100 -- 'R': row-major
3101
3102 PROCEDURE lapack_ptsv (n IN POSITIVEN,
3103 nrhs IN POSITIVEN,
3104 d IN OUT utl_nla_array_dbl,
3105 e IN OUT utl_nla_array_dbl,
3106 b IN OUT utl_nla_array_dbl,
3107 ldb IN POSITIVEN,
3108 info OUT integer,
3109 pack IN flag DEFAULT 'C');
3110
3111 PROCEDURE lapack_ptsv (n IN POSITIVEN,
3112 nrhs IN POSITIVEN,
3113 d IN OUT UTL_NLA_ARRAY_FLT,
3114 e IN OUT UTL_NLA_ARRAY_FLT,
3115 b IN OUT UTL_NLA_ARRAY_FLT,
3116 ldb IN POSITIVEN,
3117 info OUT integer,
3118 pack IN flag DEFAULT 'C');
3119
3120 --
3121 -- Purpose
3122 -- =======
3123 --
3124 -- LAPACK_SYSV computes the solution to a real system of linear equations
3125 -- A * X = B,
3126 -- where A is an N-by-N symmetric matrix and X and B are N-by-NRHS
3127 -- matrices.
3128 --
3129 -- The diagonal pivoting method is used to factor A as
3130 -- A = U * D * U**T, if UPLO = 'U', or
3131 -- A = L * D * L**T, if UPLO = 'L',
3132 -- where U (or L) is a product of permutation and unit upper (lower)
3133 -- triangular matrices, and D is symmetric and block diagonal with
3134 -- 1-by-1 and 2-by-2 diagonal blocks. The factored form of A is then
3135 -- used to solve the system of equations A * X = B.
3136 --
3137 -- Arguments
3138 -- =========
3139 --
3140 -- UPLO (input) FLAG
3141 -- = 'U': Upper triangle of A is stored;
3142 -- = 'L': Lower triangle of A is stored.
3143 --
3144 -- N (input) INTEGER
3145 -- The number of linear equations, i.e., the order of the
3146 -- matrix A. N >= 0.
3147 --
3148 -- NRHS (input) INTEGER
3149 -- The number of right hand sides, i.e., the number of columns
3150 -- of the matrix B. NRHS >= 0.
3151 --
3152 -- A (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDA,N)
3153 -- On entry, the symmetric matrix A. If UPLO = 'U', the leading
3154 -- N-by-N upper triangular part of A contains the upper
3155 -- triangular part of the matrix A, and the strictly lower
3156 -- triangular part of A is not referenced. If UPLO = 'L', the
3157 -- leading N-by-N lower triangular part of A contains the lower
3158 -- triangular part of the matrix A, and the strictly upper
3159 -- triangular part of A is not referenced.
3160 --
3161 -- On exit, if INFO = 0, the block diagonal matrix D and the
3162 -- multipliers used to obtain the factor U or L from the
3163 -- factorization A = U*D*U**T or A = L*D*L**T as computed by
3164 -- SSYTRF.
3165 --
3166 -- LDA (input) INTEGER
3167 -- The leading dimension of the array A. LDA >= max(1,N).
3168 --
3169 -- IPIV (output) INTEGER array, dimension (N)
3170 -- Details of the interchanges and the block structure of D, as
3171 -- determined by SSYTRF. If IPIV(k) > 0, then rows and columns
3172 -- k and IPIV(k) were interchanged, and D(k,k) is a 1-by-1
3176 -- IPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and
3173 -- diagonal block. If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0,
3174 -- then rows and columns k-1 and -IPIV(k) were interchanged and
3175 -- D(k-1:k,k-1:k) is a 2-by-2 diagonal block. If UPLO = 'L' and
3177 -- -IPIV(k) were interchanged and D(k:k+1,k:k+1) is a 2-by-2
3178 -- diagonal block.
3179 --
3180 -- B (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDB,NRHS)
3181 -- On entry, the N-by-NRHS right hand side matrix B.
3182 -- On exit, if INFO = 0, the N-by-NRHS solution matrix X.
3183 --
3184 -- LDB (input) INTEGER
3185 -- The leading dimension of the array B. LDB >= max(1,N).
3186 --
3187 -- INFO (output) INTEGER
3188 -- = 0: successful exit
3189 -- < 0: if INFO = -i, the i-th argument had an illegal value
3190 -- > 0: if INFO = i, D(i,i) is exactly zero. The factorization
3191 -- has been completed, but the block diagonal matrix D is
3192 -- exactly singular, so the solution could not be computed.
3193 -- PACK - (optional) FLAG
3194 -- The packing of the matricies:
3195 -- 'C': column-major (default)
3196 -- 'R': row-major
3197
3198 PROCEDURE lapack_sysv (uplo IN flag,
3199 n IN POSITIVEN,
3200 nrhs IN POSITIVEN,
3201 a IN OUT utl_nla_array_dbl,
3202 lda IN POSITIVEN,
3203 ipiv IN OUT UTL_NLA_ARRAY_INT,
3204 b IN OUT utl_nla_array_dbl,
3205 ldb IN POSITIVEN,
3206 info OUT integer,
3207 pack IN flag DEFAULT 'C');
3208
3209 PROCEDURE lapack_sysv (uplo IN flag,
3210 n IN POSITIVEN,
3211 nrhs IN POSITIVEN,
3212 a IN OUT UTL_NLA_ARRAY_FLT,
3213 lda IN POSITIVEN,
3214 ipiv IN OUT UTL_NLA_ARRAY_INT,
3215 b IN OUT UTL_NLA_ARRAY_FLT,
3216 ldb IN POSITIVEN,
3217 info OUT integer,
3218 pack IN flag DEFAULT 'C');
3219
3220 --
3221 -- Purpose
3222 -- =======
3223 --
3224 -- LAPACK_SPSV computes the solution to a real system of linear equations
3225 -- A * X = B,
3226 -- where A is an N-by-N symmetric matrix stored in packed format and X
3227 -- and B are N-by-NRHS matrices.
3228 --
3229 -- The diagonal pivoting method is used to factor A as
3230 -- A = U * D * U**T, if UPLO = 'U', or
3231 -- A = L * D * L**T, if UPLO = 'L',
3232 -- where U (or L) is a product of permutation and unit upper (lower)
3233 -- triangular matrices, D is symmetric and block diagonal with 1-by-1
3234 -- and 2-by-2 diagonal blocks. The factored form of A is then used to
3235 -- solve the system of equations A * X = B.
3236 --
3237 -- Arguments
3238 -- =========
3239 --
3240 -- UPLO (input) FLAG
3241 -- = 'U': Upper triangle of A is stored;
3242 -- = 'L': Lower triangle of A is stored.
3243 --
3244 -- N (input) INTEGER
3245 -- The number of linear equations, i.e., the order of the
3246 -- matrix A. N >= 0.
3247 --
3248 -- NRHS (input) INTEGER
3249 -- The number of right hand sides, i.e., the number of columns
3250 -- of the matrix B. NRHS >= 0.
3251 --
3252 -- AP (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (N*(N+1)/2)
3253 -- On entry, the upper or lower triangle of the symmetric matrix
3254 -- A, packed columnwise in a linear array. The j-th column of A
3255 -- is stored in the array AP as follows:
3256 -- if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
3257 -- if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
3258 -- See below for further details.
3259 --
3260 -- On exit, the block diagonal matrix D and the multipliers used
3261 -- to obtain the factor U or L from the factorization
3262 -- A = U*D*U**T or A = L*D*L**T as computed by SSPTRF, stored as
3263 -- a packed triangular matrix in the same storage format as A.
3264 --
3265 -- IPIV (output) INTEGER array, dimension (N)
3266 -- Details of the interchanges and the block structure of D, as
3267 -- determined by SSPTRF. If IPIV(k) > 0, then rows and columns
3268 -- k and IPIV(k) were interchanged, and D(k,k) is a 1-by-1
3269 -- diagonal block. If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0,
3270 -- then rows and columns k-1 and -IPIV(k) were interchanged and
3271 -- D(k-1:k,k-1:k) is a 2-by-2 diagonal block. If UPLO = 'L' and
3272 -- IPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and
3273 -- -IPIV(k) were interchanged and D(k:k+1,k:k+1) is a 2-by-2
3274 -- diagonal block.
3275 --
3276 -- B (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDB,NRHS)
3277 -- On entry, the N-by-NRHS right hand side matrix B.
3278 -- On exit, if INFO = 0, the N-by-NRHS solution matrix X.
3279 --
3280 -- LDB (input) INTEGER
3281 -- The leading dimension of the array B. LDB >= max(1,N).
3282 --
3283 -- INFO (output) INTEGER
3287 -- has been completed, but the block diagonal matrix D is
3284 -- = 0: successful exit
3285 -- < 0: if INFO = -i, the i-th argument had an illegal value
3286 -- > 0: if INFO = i, D(i,i) is exactly zero. The factorization
3288 -- exactly singular, so the solution could not be
3289 -- computed.
3290 -- PACK - (optional) FLAG
3291 -- The packing of the matricies:
3292 -- 'C': column-major (default)
3293 -- 'R': row-major
3294
3295 PROCEDURE lapack_spsv (uplo IN flag,
3296 n IN POSITIVEN,
3297 nrhs IN POSITIVEN,
3298 ap IN OUT utl_nla_array_dbl,
3299 ipiv IN OUT UTL_NLA_ARRAY_INT,
3300 b IN OUT utl_nla_array_dbl,
3301 ldb IN POSITIVEN,
3302 info OUT integer,
3303 pack IN flag DEFAULT 'C');
3304
3305 PROCEDURE lapack_spsv (uplo IN flag,
3306 n IN POSITIVEN,
3307 nrhs IN POSITIVEN,
3308 ap IN OUT UTL_NLA_ARRAY_FLT,
3309 ipiv IN OUT UTL_NLA_ARRAY_INT,
3310 b IN OUT UTL_NLA_ARRAY_FLT,
3311 ldb IN POSITIVEN,
3312 info OUT integer,
3313 pack IN flag DEFAULT 'C');
3314
3315 -- ----------------------------------------------------- --
3316 -- LAPACK Driver Routines: LLS and Eigenvalue Problems --
3317 -- ----------------------------------------------------- --
3318
3319 -- [> LLS Problems <]
3320
3321 --
3322 -- Purpose
3323 -- =======
3324 --
3325 -- LAPACK_GELS solves overdetermined or underdetermined real linear systems
3326 -- involving an M-by-N matrix A, or its transpose, using a QR or LQ
3327 -- factorization of A. It is assumed that A has full rank.
3328 --
3329 -- The following options are provided:
3330 --
3331 -- 1. If TRANS = 'N' and m >= n: find the least squares solution of
3332 -- an overdetermined system, i.e., solve the least squares problem
3333 -- minimize || B - A*X ||.
3334 --
3335 -- 2. If TRANS = 'N' and m < n: find the minimum norm solution of
3336 -- an underdetermined system A * X = B.
3337 --
3338 -- 3. If TRANS = 'T' and m >= n: find the minimum norm solution of
3339 -- an undetermined system A**T * X = B.
3340 --
3341 -- 4. If TRANS = 'T' and m < n: find the least squares solution of
3342 -- an overdetermined system, i.e., solve the least squares problem
3343 -- minimize || B - A**T * X ||.
3344 --
3345 -- Several right hand side vectors b and solution vectors x can be
3346 -- handled in a single call; they are stored as the columns of the
3347 -- M-by-NRHS right hand side matrix B and the N-by-NRHS solution
3348 -- matrix X.
3349 --
3350 -- Arguments
3351 -- =========
3352 --
3353 -- TRANS (input) CHARACTER
3354 -- = 'N': the linear system involves A;
3355 -- = 'T': the linear system involves A**T.
3356 --
3357 -- M (input) INTEGER
3358 -- The number of rows of the matrix A. M >= 0.
3359 --
3360 -- N (input) INTEGER
3361 -- The number of columns of the matrix A. N >= 0.
3362 --
3363 -- NRHS (input) INTEGER
3364 -- The number of right hand sides, i.e., the number of
3365 -- columns of the matrices B and X. NRHS >=0.
3366 --
3367 -- A (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDA,N)
3368 -- On entry, the M-by-N matrix A.
3369 -- On exit,
3370 -- if M >= N, A is overwritten by details of its QR
3371 -- factorization as returned by SGEQRF;
3372 -- if M < N, A is overwritten by details of its LQ
3373 -- factorization as returned by SGELQF.
3374 --
3375 -- LDA (input) INTEGER
3376 -- The leading dimension of the array A. LDA >= max(1,M).
3377 --
3378 -- B (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDB,NRHS)
3379 -- On entry, the matrix B of right hand side vectors, stored
3380 -- columnwise; B is M-by-NRHS if TRANS = 'N', or N-by-NRHS
3381 -- if TRANS = 'T'.
3382 -- On exit, B is overwritten by the solution vectors, stored
3383 -- columnwise:
3384 -- if TRANS = 'N' and m >= n, rows 1 to n of B contain the least
3385 -- squares solution vectors; the residual sum of squares for the
3386 -- solution in each column is given by the sum of squares of
3387 -- elements N+1 to M in that column;
3388 -- if TRANS = 'N' and m < n, rows 1 to N of B contain the
3389 -- minimum norm solution vectors;
3390 -- if TRANS = 'T' and m >= n, rows 1 to M of B contain the
3391 -- minimum norm solution vectors;
3392 -- if TRANS = 'T' and m < n, rows 1 to M of B contain the
3393 -- least squares solution vectors; the residual sum of squares
3394 -- for the solution in each column is given by the sum of
3395 -- squares of elements M+1 to N in that column.
3396 --
3397 -- LDB (input) INTEGER
3398 -- The leading dimension of the array B. LDB >= MAX(1,M,N).
3399 --
3403 --
3400 -- INFO (output) INTEGER
3401 -- = 0: successful exit
3402 -- < 0: if INFO = -i, the i-th argument had an illegal value
3404 -- PACK (optional) FLAG
3405 -- The packing of the matricies:
3406 -- 'C': column-major (default)
3407 -- 'R': row-major
3408
3409 PROCEDURE lapack_gels(trans IN flag,
3410 m IN POSITIVEN,
3411 n IN POSITIVEN,
3412 nrhs IN POSITIVEN,
3413 a IN OUT utl_nla_array_dbl,
3414 lda IN POSITIVEN,
3415 b IN OUT utl_nla_array_dbl,
3416 ldb IN POSITIVEN,
3417 info OUT integer,
3418 pack IN flag DEFAULT 'C');
3419
3420 PROCEDURE lapack_gels(trans IN flag,
3421 m IN POSITIVEN,
3422 n IN POSITIVEN,
3423 nrhs IN POSITIVEN,
3424 a IN OUT UTL_NLA_ARRAY_FLT,
3425 lda IN POSITIVEN,
3426 b IN OUT UTL_NLA_ARRAY_FLT,
3427 ldb IN POSITIVEN,
3428 info OUT integer,
3429 pack IN flag DEFAULT 'C');
3430
3431 -- [> Symmetric Eigenproblems <]
3432
3433 --
3434 -- Purpose
3435 -- =======
3436 --
3437 -- LAPACK_SSYEV computes all eigenvalues and, optionally, eigenvectors of a
3438 -- real symmetric matrix A.
3439 --
3440 -- Arguments
3441 -- =========
3442 --
3443 -- JOBZ (input) FLAG
3444 -- = 'N': Compute eigenvalues only;
3445 -- = 'V': Compute eigenvalues and eigenvectors.
3446 --
3447 -- UPLO (input) FLAG
3448 -- = 'U': Upper triangle of A is stored;
3449 -- = 'L': Lower triangle of A is stored.
3450 --
3451 -- N (input) INTEGER
3452 -- The order of the matrix A. N >= 0.
3453 --
3454 -- A (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDA, N)
3455 -- On entry, the symmetric matrix A. If UPLO = 'U', the
3456 -- leading N-by-N upper triangular part of A contains the
3457 -- upper triangular part of the matrix A. If UPLO = 'L',
3458 -- the leading N-by-N lower triangular part of A contains
3459 -- the lower triangular part of the matrix A.
3460 -- On exit, if JOBZ = 'V', then if INFO = 0, A contains the
3461 -- orthonormal eigenvectors of the matrix A.
3462 -- If JOBZ = 'N', then on exit the lower triangle (if UPLO='L')
3463 -- or the upper triangle (if UPLO='U') of A, including the
3464 -- diagonal, is destroyed.
3465 --
3466 -- LDA (input) INTEGER
3467 -- The leading dimension of the array A. LDA >= max(1,N).
3468 --
3469 -- W (output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
3470 -- If INFO = 0, the eigenvalues in ascending order.
3471 --
3472 -- INFO (output) INTEGER
3473 -- = 0: successful exit
3474 -- < 0: if INFO = -i, the i-th argument had an illegal value
3475 -- > 0: if INFO = i, the algorithm failed to converge; i
3476 -- off-diagonal elements of an intermediate tridiagonal
3477 -- form did not converge to zero.
3478 --
3479 -- PACK (optional) FLAG
3480 -- The packing of the matricies:
3481 -- 'C': column-major (default)
3482 -- 'R': row-major
3483
3484 PROCEDURE lapack_syev(jobz IN flag,
3485 uplo IN flag,
3486 n IN POSITIVEN,
3487 a IN OUT utl_nla_array_dbl,
3488 lda IN POSITIVEN,
3489 w IN OUT utl_nla_array_dbl,
3490 info OUT integer,
3491 pack IN flag DEFAULT 'C');
3492
3493 PROCEDURE lapack_syev(jobz IN flag,
3494 uplo IN flag,
3495 n IN POSITIVEN,
3496 a IN OUT UTL_NLA_ARRAY_FLT,
3497 lda IN POSITIVEN,
3498 w IN OUT UTL_NLA_ARRAY_FLT,
3499 info OUT integer,
3500 pack IN flag DEFAULT 'C');
3501
3502 --
3503 -- Purpose
3504 -- =======
3505 --
3506 -- LAPACK_SYEVD computes all eigenvalues and, optionally, eigenvectors of a
3507 -- real symmetric matrix A. If eigenvectors are desired, it uses a
3508 -- divide and conquer algorithm.
3509 --
3510 -- The divide and conquer algorithm makes very mild assumptions about
3511 -- floating point arithmetic.
3512 --
3513 -- Arguments
3514 -- =========
3515 --
3516 -- JOBZ (input) FLAG
3517 -- = 'N': Compute eigenvalues only;
3518 -- = 'V': Compute eigenvalues and eigenvectors.
3519 --
3520 -- UPLO (input) FLAG
3521 -- = 'U': Upper triangle of A is stored;
3522 -- = 'L': Lower triangle of A is stored.
3523 --
3524 -- N (input) INTEGER
3525 -- The order of the matrix A. N >= 0.
3526 --
3527 -- A (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDA, N)
3531 -- the leading N-by-N lower triangular part of A contains
3528 -- On entry, the symmetric matrix A. If UPLO = 'U', the
3529 -- leading N-by-N upper triangular part of A contains the
3530 -- upper triangular part of the matrix A. If UPLO = 'L',
3532 -- the lower triangular part of the matrix A.
3533 -- On exit, if JOBZ = 'V', then if INFO = 0, A contains the
3534 -- orthonormal eigenvectors of the matrix A.
3535 -- If JOBZ = 'N', then on exit the lower triangle (if UPLO='L')
3536 -- or the upper triangle (if UPLO='U') of A, including the
3537 -- diagonal, is destroyed.
3538 --
3539 -- LDA (input) INTEGER
3540 -- The leading dimension of the array A. LDA >= max(1,N).
3541 --
3542 -- W (output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
3543 -- If INFO = 0, the eigenvalues in ascending order.
3544 --
3545 -- INFO (output) INTEGER
3546 -- = 0: successful exit
3547 -- < 0: if INFO = -i, the i-th argument had an illegal value
3548 -- > 0: if INFO = i, the algorithm failed to converge; i
3549 -- off-diagonal elements of an intermediate tridiagonal
3550 -- form did not converge to zero.
3551 --
3552 -- PACK (optional) FLAG
3553 -- The packing of the matricies:
3554 -- 'C': column-major (default)
3555 -- 'R': row-major
3556
3557 PROCEDURE lapack_syevd(jobz IN flag,
3558 uplo IN flag,
3559 n IN POSITIVEN,
3560 a IN OUT utl_nla_array_dbl,
3561 lda IN POSITIVEN,
3562 w IN OUT utl_nla_array_dbl,
3563 info OUT integer,
3564 pack IN flag DEFAULT 'C');
3565
3566 PROCEDURE lapack_syevd(jobz IN flag,
3567 uplo IN flag,
3568 n IN POSITIVEN,
3569 a IN OUT UTL_NLA_ARRAY_FLT,
3570 lda IN POSITIVEN,
3571 w IN OUT UTL_NLA_ARRAY_FLT,
3572 info OUT integer,
3573 pack IN flag DEFAULT 'C');
3574
3575 --
3576 -- Purpose
3577 -- =======
3578 --
3579 -- LAPACK_SPEV computes all the eigenvalues and, optionally, eigenvectors of a
3580 -- real symmetric matrix A in packed storage.
3581 --
3582 -- Arguments
3583 -- =========
3584 --
3585 -- JOBZ (input) FLAG
3586 -- = 'N': Compute eigenvalues only;
3587 -- = 'V': Compute eigenvalues and eigenvectors.
3588 --
3589 -- UPLO (input) FLAG
3590 -- = 'U': Upper triangle of A is stored;
3591 -- = 'L': Lower triangle of A is stored.
3592 --
3593 -- N (input) INTEGER
3594 -- The order of the matrix A. N >= 0.
3595 --
3596 -- AP (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (N*(N+1)/2)
3597 -- On entry, the upper or lower triangle of the symmetric matrix
3598 -- A, packed columnwise in a linear array. The j-th column of A
3599 -- is stored in the array AP as follows:
3600 -- if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
3601 -- if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.
3602 --
3603 -- On exit, AP is overwritten by values generated during the
3604 -- reduction to tridiagonal form. If UPLO = 'U', the diagonal
3605 -- and first superdiagonal of the tridiagonal matrix T overwrite
3606 -- the corresponding elements of A, and if UPLO = 'L', the
3607 -- diagonal and first subdiagonal of T overwrite the
3608 -- corresponding elements of A.
3609 --
3610 -- W (output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
3611 -- If INFO = 0, the eigenvalues in ascending order.
3612 --
3613 -- Z (output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDZ, N)
3614 -- If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal
3615 -- eigenvectors of the matrix A, with the i-th column of Z
3616 -- holding the eigenvector associated with W(i).
3617 -- If JOBZ = 'N', then Z is not referenced.
3618 --
3619 -- LDZ (input) INTEGER
3620 -- The leading dimension of the array Z. LDZ >= 1, and if
3621 -- JOBZ = 'V', LDZ >= max(1,N).
3622 --
3623 -- INFO (output) INTEGER
3624 -- = 0: successful exit.
3625 -- < 0: if INFO = -i, the i-th argument had an illegal value.
3626 -- > 0: if INFO = i, the algorithm failed to converge; i
3627 -- off-diagonal elements of an intermediate tridiagonal
3628 -- form did not converge to zero.
3629 --
3630 -- PACK (optional) FLAG
3631 -- The packing of the matricies:
3632 -- 'C': column-major (default)
3633 -- 'R': row-major
3634
3635 PROCEDURE lapack_spev(jobz IN flag,
3636 uplo IN flag,
3637 n IN POSITIVEN,
3638 ap IN OUT utl_nla_array_dbl,
3639 w IN OUT utl_nla_array_dbl,
3640 z IN OUT utl_nla_array_dbl,
3641 ldz IN POSITIVEN,
3642 info OUT integer,
3646 uplo IN flag,
3643 pack IN flag DEFAULT 'C');
3644
3645 PROCEDURE lapack_spev(jobz IN flag,
3647 n IN POSITIVEN,
3648 ap IN OUT UTL_NLA_ARRAY_FLT,
3649 w IN OUT UTL_NLA_ARRAY_FLT,
3650 z IN OUT UTL_NLA_ARRAY_FLT,
3651 ldz IN POSITIVEN,
3652 info OUT integer,
3653 pack IN flag DEFAULT 'C');
3654
3655 --
3656 -- Purpose
3657 -- =======
3658 --
3659 -- LAPACK_SPEVD computes all the eigenvalues and, optionally, eigenvectors
3660 -- of a real symmetric matrix A in packed storage. If eigenvectors are
3661 -- desired, it uses a divide and conquer algorithm.
3662 --
3663 -- The divide and conquer algorithm makes very mild assumptions about
3664 -- floating point arithmetic.
3665 --
3666 -- Arguments
3667 -- =========
3668 --
3669 -- JOBZ (input) FLAG
3670 -- = 'N': Compute eigenvalues only;
3671 -- = 'V': Compute eigenvalues and eigenvectors.
3672 --
3673 -- UPLO (input) FLAG
3674 -- = 'U': Upper triangle of A is stored;
3675 -- = 'L': Lower triangle of A is stored.
3676 --
3677 -- N (input) INTEGER
3678 -- The order of the matrix A. N >= 0.
3679 --
3680 -- AP (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (N*(N+1)/2)
3681 -- On entry, the upper or lower triangle of the symmetric matrix
3682 -- A, packed columnwise in a linear array. The j-th column of A
3683 -- is stored in the array AP as follows:
3684 -- if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
3685 -- if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.
3686 --
3687 -- On exit, AP is overwritten by values generated during the
3688 -- reduction to tridiagonal form. If UPLO = 'U', the diagonal
3689 -- and first superdiagonal of the tridiagonal matrix T overwrite
3690 -- the corresponding elements of A, and if UPLO = 'L', the
3691 -- diagonal and first subdiagonal of T overwrite the
3692 -- corresponding elements of A.
3693 --
3694 -- W (output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
3695 -- If INFO = 0, the eigenvalues in ascending order.
3696 --
3697 -- Z (output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDZ, N)
3698 -- If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal
3699 -- eigenvectors of the matrix A, with the i-th column of Z
3700 -- holding the eigenvector associated with W(i).
3701 -- If JOBZ = 'N', then Z is not referenced.
3702 --
3703 -- LDZ (input) INTEGER
3704 -- The leading dimension of the array Z. LDZ >= 1, and if
3705 -- JOBZ = 'V', LDZ >= max(1,N).
3706 --
3707 -- INFO (output) INTEGER
3708 -- = 0: successful exit
3709 -- < 0: if INFO = -i, the i-th argument had an illegal value.
3710 -- > 0: if INFO = i, the algorithm failed to converge; i
3711 -- off-diagonal elements of an intermediate tridiagonal
3712 -- form did not converge to zero.
3713 --
3714 -- PACK (optional) FLAG
3715 -- The packing of the matricies:
3716 -- 'C': column-major (default)
3717 -- 'R': row-major
3718
3719 PROCEDURE lapack_spevd(jobz IN flag,
3720 uplo IN flag,
3721 n IN POSITIVEN,
3722 ap IN OUT utl_nla_array_dbl,
3723 w IN OUT utl_nla_array_dbl,
3724 z IN OUT utl_nla_array_dbl,
3725 ldz IN POSITIVEN,
3726 info OUT integer,
3727 pack IN flag DEFAULT 'C');
3728
3729 PROCEDURE lapack_spevd(jobz IN flag,
3730 uplo IN flag,
3731 n IN POSITIVEN,
3732 ap IN OUT UTL_NLA_ARRAY_FLT,
3733 w IN OUT UTL_NLA_ARRAY_FLT,
3734 z IN OUT UTL_NLA_ARRAY_FLT,
3735 ldz IN POSITIVEN,
3736 info OUT integer,
3737 pack IN flag DEFAULT 'C');
3738
3739 --
3740 -- Purpose
3741 -- =======
3742 --
3743 -- SSBEV computes all the eigenvalues and, optionally, eigenvectors of
3744 -- a real symmetric band matrix A.
3745 --
3746 -- Arguments
3747 -- =========
3748 --
3749 -- JOBZ (input) FLAG
3750 -- = 'N': Compute eigenvalues only;
3751 -- = 'V': Compute eigenvalues and eigenvectors.
3752 --
3753 -- UPLO (input) FLAG
3754 -- = 'U': Upper triangle of A is stored;
3755 -- = 'L': Lower triangle of A is stored.
3756 --
3757 -- N (input) INTEGER
3758 -- The order of the matrix A. N >= 0.
3759 --
3760 -- KD (input) INTEGER
3761 -- The number of superdiagonals of the matrix A if UPLO = 'U',
3765 -- On entry, the upper or lower triangle of the symmetric band
3762 -- or the number of subdiagonals if UPLO = 'L'. KD >= 0.
3763 --
3764 -- AB (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDAB, N)
3766 -- matrix A, stored in the first KD+1 rows of the array. The
3767 -- j-th column of A is stored in the j-th column of the array AB
3768 -- as follows:
3769 -- if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
3770 -- if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd).
3771 --
3772 -- On exit, AB is overwritten by values generated during the
3773 -- reduction to tridiagonal form. If UPLO = 'U', the first
3774 -- superdiagonal and the diagonal of the tridiagonal matrix T
3775 -- are returned in rows KD and KD+1 of AB, and if UPLO = 'L',
3776 -- the diagonal and first subdiagonal of T are returned in the
3777 -- first two rows of AB.
3778 --
3779 -- LDAB (input) INTEGER
3780 -- The leading dimension of the array AB. LDAB >= KD + 1.
3781 --
3782 -- W (output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
3783 -- If INFO = 0, the eigenvalues in ascending order.
3784 --
3785 -- Z (output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDZ, N)
3786 -- If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal
3787 -- eigenvectors of the matrix A, with the i-th column of Z
3788 -- holding the eigenvector associated with W(i).
3789 -- If JOBZ = 'N', then Z is not referenced.
3790 --
3791 -- LDZ (input) INTEGER
3792 -- The leading dimension of the array Z. LDZ >= 1, and if
3793 -- JOBZ = 'V', LDZ >= max(1,N).
3794 --
3795 -- INFO (output) INTEGER
3796 -- = 0: successful exit
3797 -- < 0: if INFO = -i, the i-th argument had an illegal value
3798 -- > 0: if INFO = i, the algorithm failed to converge; i
3799 -- off-diagonal elements of an intermediate tridiagonal
3800 -- form did not converge to zero.
3801 --
3802 -- PACK (optional) FLAG
3803 -- The packing of the matricies:
3804 -- 'C': column-major (default)
3805 -- 'R': row-major
3806
3807 PROCEDURE lapack_sbev(jobz IN flag,
3808 uplo IN flag,
3809 n IN POSITIVEN,
3810 kd IN NATURALN,
3811 ab IN OUT utl_nla_array_dbl,
3812 ldab IN POSITIVEN,
3813 w IN OUT utl_nla_array_dbl,
3814 z IN OUT utl_nla_array_dbl,
3815 ldz IN POSITIVEN,
3816 info OUT integer,
3817 pack IN flag DEFAULT 'C');
3818
3819 PROCEDURE lapack_sbev(jobz IN flag,
3820 uplo IN flag,
3821 n IN POSITIVEN,
3822 kd IN NATURALN,
3823 ab IN OUT UTL_NLA_ARRAY_FLT,
3824 ldab IN POSITIVEN,
3825 w IN OUT UTL_NLA_ARRAY_FLT,
3826 z IN OUT UTL_NLA_ARRAY_FLT,
3827 ldz IN POSITIVEN,
3828 info OUT integer,
3829 pack IN flag DEFAULT 'C');
3830
3831 --
3832 -- Purpose
3833 -- =======
3834 --
3835 -- LAPACK_SBEVD computes all the eigenvalues and, optionally, eigenvectors of
3836 -- a real symmetric band matrix A. If eigenvectors are desired, it uses
3837 -- a divide and conquer algorithm.
3838 --
3839 -- The divide and conquer algorithm makes very mild assumptions about
3840 -- floating point arithmetic.
3841 --
3842 -- Arguments
3843 -- =========
3844 --
3845 -- JOBZ (input) FLAG
3846 -- = 'N': Compute eigenvalues only;
3847 -- = 'V': Compute eigenvalues and eigenvectors.
3848 --
3849 -- UPLO (input) FLAG
3850 -- = 'U': Upper triangle of A is stored;
3851 -- = 'L': Lower triangle of A is stored.
3852 --
3853 -- N (input) INTEGER
3854 -- The order of the matrix A. N >= 0.
3855 --
3856 -- KD (input) INTEGER
3857 -- The number of superdiagonals of the matrix A if UPLO = 'U',
3858 -- or the number of subdiagonals if UPLO = 'L'. KD >= 0.
3859 --
3860 -- AB (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDAB, N)
3861 -- On entry, the upper or lower triangle of the symmetric band
3862 -- matrix A, stored in the first KD+1 rows of the array. The
3863 -- j-th column of A is stored in the j-th column of the array AB
3864 -- as follows:
3865 -- if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
3866 -- if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd).
3867 --
3868 -- On exit, AB is overwritten by values generated during the
3869 -- reduction to tridiagonal form. If UPLO = 'U', the first
3870 -- superdiagonal and the diagonal of the tridiagonal matrix T
3871 -- are returned in rows KD and KD+1 of AB, and if UPLO = 'L',
3872 -- the diagonal and first subdiagonal of T are returned in the
3873 -- first two rows of AB.
3874 --
3875 -- LDAB (input) INTEGER
3879 -- If INFO = 0, the eigenvalues in ascending order.
3876 -- The leading dimension of the array AB. LDAB >= KD + 1.
3877 --
3878 -- W (output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
3880 --
3881 -- Z (output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDZ, N)
3882 -- If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal
3883 -- eigenvectors of the matrix A, with the i-th column of Z
3884 -- holding the eigenvector associated with W(i).
3885 -- If JOBZ = 'N', then Z is not referenced.
3886 --
3887 -- LDZ (input) INTEGER
3888 -- The leading dimension of the array Z. LDZ >= 1, and if
3889 -- JOBZ = 'V', LDZ >= max(1,N).
3890 --
3891 -- INFO (output) INTEGER
3892 -- = 0: successful exit
3893 -- < 0: if INFO = -i, the i-th argument had an illegal value
3894 -- > 0: if INFO = i, the algorithm failed to converge; i
3895 -- off-diagonal elements of an intermediate tridiagonal
3896 -- form did not converge to zero.
3897 --
3898 -- PACK (optional) FLAG
3899 -- The packing of the matricies:
3900 -- 'C': column-major (default)
3901 -- 'R': row-major
3902
3903 PROCEDURE lapack_sbevd(jobz IN flag,
3904 uplo IN flag,
3905 n IN POSITIVEN,
3906 kd IN NATURALN,
3907 ab IN OUT utl_nla_array_dbl,
3908 ldab IN POSITIVEN,
3909 w IN OUT utl_nla_array_dbl,
3910 z IN OUT utl_nla_array_dbl,
3911 ldz IN POSITIVEN,
3912 info OUT integer,
3913 pack IN flag DEFAULT 'C');
3914
3915 PROCEDURE lapack_sbevd(jobz IN flag,
3916 uplo IN flag,
3917 n IN POSITIVEN,
3918 kd IN NATURALN,
3919 ab IN OUT UTL_NLA_ARRAY_FLT,
3920 ldab IN POSITIVEN,
3921 w IN OUT UTL_NLA_ARRAY_FLT,
3922 z IN OUT UTL_NLA_ARRAY_FLT,
3923 ldz IN POSITIVEN,
3924 info OUT integer,
3925 pack IN flag DEFAULT 'C');
3926
3927 --
3928 -- Purpose
3929 -- =======
3930 --
3931 -- LAPACK_STEV computes all eigenvalues and, optionally, eigenvectors of a
3932 -- real symmetric tridiagonal matrix A.
3933 --
3934 -- Arguments
3935 -- =========
3936 --
3937 -- JOBZ (input) FLAG
3938 -- = 'N': Compute eigenvalues only;
3939 -- = 'V': Compute eigenvalues and eigenvectors.
3940 --
3941 -- N (input) INTEGER
3942 -- The order of the matrix. N >= 0.
3943 --
3944 -- D (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
3945 -- On entry, the n diagonal elements of the tridiagonal matrix
3946 -- A.
3947 -- On exit, if INFO = 0, the eigenvalues in ascending order.
3948 --
3949 -- E (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
3950 -- On entry, the (n-1) subdiagonal elements of the tridiagonal
3951 -- matrix A, stored in elements 1 to N-1 of E; E(N) need not
3952 -- be set, but is used by the routine.
3953 -- On exit, the contents of E are destroyed.
3954 --
3955 -- Z (output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDZ, N)
3956 -- If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal
3957 -- eigenvectors of the matrix A, with the i-th column of Z
3958 -- holding the eigenvector associated with D(i).
3959 -- If JOBZ = 'N', then Z is not referenced.
3960 --
3961 -- LDZ (input) INTEGER
3962 -- The leading dimension of the array Z. LDZ >= 1, and if
3963 -- JOBZ = 'V', LDZ >= max(1,N).
3964 --
3965 -- INFO (output) INTEGER
3966 -- = 0: successful exit
3967 -- < 0: if INFO = -i, the i-th argument had an illegal value
3968 -- > 0: if INFO = i, the algorithm failed to converge; i
3969 -- off-diagonal elements of E did not converge to zero.
3970 --
3971 -- PACK (optional) FLAG
3972 -- The packing of the matricies:
3973 -- 'C': column-major (default)
3974 -- 'R': row-major
3975
3976 PROCEDURE lapack_stev(jobz IN flag,
3977 n IN POSITIVEN,
3978 d IN OUT utl_nla_array_dbl,
3979 e IN OUT utl_nla_array_dbl,
3980 z IN OUT utl_nla_array_dbl,
3981 ldz IN POSITIVEN,
3982 info OUT integer,
3983 pack IN flag DEFAULT 'C');
3984
3985 PROCEDURE lapack_stev(jobz IN flag,
3986 n IN POSITIVEN,
3987 d IN OUT UTL_NLA_ARRAY_FLT,
3988 e IN OUT UTL_NLA_ARRAY_FLT,
3989 z IN OUT UTL_NLA_ARRAY_FLT,
3990 ldz IN POSITIVEN,
3991 info OUT integer,
3992 pack IN flag DEFAULT 'C');
3993
3994 --
3995 -- Purpose
3996 -- =======
3997 --
4001 --
3998 -- LAPACK_STEVD computes all eigenvalues and, optionally, eigenvectors of a
3999 -- real symmetric tridiagonal matrix. If eigenvectors are desired, it
4000 -- uses a divide and conquer algorithm.
4002 -- The divide and conquer algorithm makes very mild assumptions about
4003 -- floating point arithmetic.
4004 --
4005 -- Arguments
4006 -- =========
4007 --
4008 -- JOBZ (input) FLAG
4009 -- = 'N': Compute eigenvalues only;
4010 -- = 'V': Compute eigenvalues and eigenvectors.
4011 --
4012 -- N (input) INTEGER
4013 -- The order of the matrix. N >= 0.
4014 --
4015 -- D (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
4016 -- On entry, the n diagonal elements of the tridiagonal matrix
4017 -- A.
4018 -- On exit, if INFO = 0, the eigenvalues in ascending order.
4019 --
4020 -- E (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
4021 -- On entry, the (n-1) subdiagonal elements of the tridiagonal
4022 -- matrix A, stored in elements 1 to N-1 of E; E(N) need not
4023 -- be set, but is used by the routine.
4024 -- On exit, the contents of E are destroyed.
4025 --
4026 -- Z (output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDZ, N)
4027 -- If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal
4028 -- eigenvectors of the matrix A, with the i-th column of Z
4029 -- holding the eigenvector associated with D(i).
4030 -- If JOBZ = 'N', then Z is not referenced.
4031 --
4032 -- LDZ (input) INTEGER
4033 -- The leading dimension of the array Z. LDZ >= 1, and if
4034 -- JOBZ = 'V', LDZ >= max(1,N).
4035 --
4036 -- INFO (output) INTEGER
4037 -- = 0: successful exit
4038 -- < 0: if INFO = -i, the i-th argument had an illegal value
4039 -- > 0: if INFO = i, the algorithm failed to converge; i
4040 -- off-diagonal elements of E did not converge to zero.
4041 --
4042 -- PACK (optional) FLAG
4043 -- The packing of the matricies:
4044 -- 'C': column-major (default)
4045 -- 'R': row-major
4046
4047 PROCEDURE lapack_stevd(jobz IN flag,
4048 n IN POSITIVEN,
4049 d IN OUT utl_nla_array_dbl,
4050 e IN OUT utl_nla_array_dbl,
4051 z IN OUT utl_nla_array_dbl,
4052 ldz IN POSITIVEN,
4053 info OUT integer,
4054 pack IN flag DEFAULT 'C');
4055
4056 PROCEDURE lapack_stevd(jobz IN flag,
4057 n IN POSITIVEN,
4058 d IN OUT UTL_NLA_ARRAY_FLT,
4059 e IN OUT UTL_NLA_ARRAY_FLT,
4060 z IN OUT UTL_NLA_ARRAY_FLT,
4061 ldz IN POSITIVEN,
4062 info OUT integer,
4063 pack IN flag DEFAULT 'C');
4064
4065 -- [> Nonsymmetric Eigenproblems <]
4066
4067 --
4068 -- Purpose
4069 -- =======
4070 --
4071 -- LAPACK_GEES computes for an N-by-N real nonsymmetric matrix A, the
4072 -- eigenvalues, the real Schur form T, and, optionally, the matrix of
4073 -- Schur vectors Z. This gives the Schur factorization A = Z*T*(Z**T).
4074 --
4075 -- A matrix is in real Schur form if it is upper quasi-triangular with
4076 -- 1-by-1 and 2-by-2 blocks. 2-by-2 blocks will be standardized in the
4077 -- form
4078 -- [ a b ]
4079 -- [ c a ]
4080 --
4081 -- where b*c < 0. The eigenvalues of such a block are a +- sqrt(bc).
4082 --
4083 -- Arguments
4084 -- =========
4085 --
4086 -- JOBVS (input) FLAG
4087 -- = 'N': Schur vectors are not computed;
4088 -- = 'V': Schur vectors are computed.
4089 --
4090 -- N (input) INTEGER
4091 -- The order of the matrix A. N >= 0.
4092 --
4093 -- A (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDA,N)
4094 -- On entry, the N-by-N matrix A.
4095 -- On exit, A has been overwritten by its real Schur form T.
4096 --
4097 -- LDA (input) INTEGER
4098 -- The leading dimension of the array A. LDA >= max(1,N).
4099 --
4100 -- WR (output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
4101 -- WI (output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
4102 -- WR and WI contain the real and imaginary parts,
4103 -- respectively, of the computed eigenvalues in the same order
4104 -- that they appear on the diagonal of the output Schur form T.
4105 -- Complex conjugate pairs of eigenvalues will appear
4106 -- consecutively with the eigenvalue having the positive
4107 -- imaginary part first.
4108 --
4109 -- VS (output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDVS,N)
4110 -- If JOBVS = 'V', VS contains the orthogonal matrix Z of Schur
4111 -- vectors.
4112 -- If JOBVS = 'N', VS is not referenced.
4113 --
4114 -- LDVS (input) INTEGER
4115 -- The leading dimension of the array VS. LDVS >= 1; if
4116 -- JOBVS = 'V', LDVS >= N.
4117 --
4118 -- INFO (output) INTEGER
4119 -- = 0: successful exit
4123 -- eigenvalues; elements 1:ILO-1 and i+1:N of WR and WI
4120 -- < 0: if INFO = -i, the i-th argument had an illegal value.
4121 -- > 0: if INFO = i, and i is
4122 -- <= N: the QR algorithm failed to compute all the
4124 -- contain those eigenvalues which have converged; if
4125 -- JOBVS = 'V', VS contains the matrix which reduces A
4126 -- to its partially converged Schur form.
4127 --
4128 -- PACK (optional) FLAG
4129 -- The packing of the matricies:
4130 -- 'C': column-major (default)
4131 -- 'R': row-major
4132
4133 PROCEDURE lapack_gees(jobvs IN flag,
4134 n IN POSITIVEN,
4135 a IN OUT utl_nla_array_dbl,
4136 lda IN POSITIVEN,
4137 wr IN OUT utl_nla_array_dbl,
4138 wi IN OUT utl_nla_array_dbl,
4139 vs IN OUT utl_nla_array_dbl,
4140 ldvs IN POSITIVEN,
4141 info OUT integer,
4142 pack IN flag DEFAULT 'C');
4143
4144 PROCEDURE lapack_gees(jobvs IN flag,
4145 n IN POSITIVEN,
4146 a IN OUT UTL_NLA_ARRAY_FLT,
4147 lda IN POSITIVEN,
4148 wr IN OUT UTL_NLA_ARRAY_FLT,
4149 wi IN OUT UTL_NLA_ARRAY_FLT,
4150 vs IN OUT UTL_NLA_ARRAY_FLT,
4151 ldvs IN POSITIVEN,
4152 info OUT integer,
4153 pack IN flag DEFAULT 'C');
4154
4155 --
4156 -- Purpose
4157 -- =======
4158 --
4159 -- LAPACK_GEEV computes for an N-by-N real nonsymmetric matrix A, the
4160 -- eigenvalues and, optionally, the left and/or right eigenvectors.
4161 --
4162 -- The right eigenvector v(j) of A satisfies
4163 -- A * v(j) = lambda(j) * v(j)
4164 -- where lambda(j) is its eigenvalue.
4165 -- The left eigenvector u(j) of A satisfies
4166 -- u(j)**H * A = lambda(j) * u(j)**H
4167 -- where u(j)**H denotes the conjugate transpose of u(j).
4168 --
4169 -- The computed eigenvectors are normalized to have Euclidean norm
4170 -- equal to 1 and largest component real.
4171 --
4172 -- Arguments
4173 -- =========
4174 --
4175 -- JOBVL (input) FLAG
4176 -- = 'N': left eigenvectors of A are not computed;
4177 -- = 'V': left eigenvectors of A are computed.
4178 --
4179 -- JOBVR (input) FLAG
4180 -- = 'N': right eigenvectors of A are not computed;
4181 -- = 'V': right eigenvectors of A are computed.
4182 --
4183 -- N (input) INTEGER
4184 -- The order of the matrix A. N >= 0.
4185 --
4186 -- A (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDA,N)
4187 -- On entry, the N-by-N matrix A.
4188 -- On exit, A has been overwritten.
4189 --
4190 -- LDA (input) INTEGER
4191 -- The leading dimension of the array A. LDA >= max(1,N).
4192 --
4193 -- WR (output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
4194 -- WI (output) UTL_NLA_ARRAY_FLT/DBL, dimension (N)
4195 -- WR and WI contain the real and imaginary parts,
4196 -- respectively, of the computed eigenvalues. Complex
4197 -- conjugate pairs of eigenvalues appear consecutively
4198 -- with the eigenvalue having the positive imaginary part
4199 -- first.
4200 --
4201 -- VL (output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDVL,N)
4202 -- If JOBVL = 'V', the left eigenvectors u(j) are stored one
4203 -- after another in the columns of VL, in the same order
4204 -- as their eigenvalues.
4205 -- If JOBVL = 'N', VL is not referenced.
4206 -- If the j-th eigenvalue is real, then u(j) = VL(:,j),
4207 -- the j-th column of VL.
4208 -- If the j-th and (j+1)-st eigenvalues form a complex
4209 -- conjugate pair, then u(j) = VL(:,j) + i*VL(:,j+1) and
4210 -- u(j+1) = VL(:,j) - i*VL(:,j+1).
4211 --
4212 -- LDVL (input) INTEGER
4213 -- The leading dimension of the array VL. LDVL >= 1; if
4214 -- JOBVL = 'V', LDVL >= N.
4215 --
4216 -- VR (output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDVR,N)
4217 -- If JOBVR = 'V', the right eigenvectors v(j) are stored one
4218 -- after another in the columns of VR, in the same order
4219 -- as their eigenvalues.
4220 -- If JOBVR = 'N', VR is not referenced.
4221 -- If the j-th eigenvalue is real, then v(j) = VR(:,j),
4222 -- the j-th column of VR.
4223 -- If the j-th and (j+1)-st eigenvalues form a complex
4224 -- conjugate pair, then v(j) = VR(:,j) + i*VR(:,j+1) and
4225 -- v(j+1) = VR(:,j) - i*VR(:,j+1).
4226 --
4227 -- LDVR (input) INTEGER
4228 -- The leading dimension of the array VR. LDVR >= 1; if
4229 -- JOBVR = 'V', LDVR >= N.
4230 --
4231 -- INFO (output) INTEGER
4232 -- = 0: successful exit
4233 -- < 0: if INFO = -i, the i-th argument had an illegal value.
4234 -- > 0: if INFO = i, the QR algorithm failed to compute all the
4238 --
4235 -- eigenvalues, and no eigenvectors have been computed;
4236 -- elements i+1:N of WR and WI contain eigenvalues which
4237 -- have converged.
4239 -- PACK (optional) FLAG
4240 -- The packing of the matricies:
4241 -- 'C': column-major (default)
4242 -- 'R': row-major
4243
4244 PROCEDURE lapack_geev(jobvl IN flag,
4245 jobvr IN flag,
4246 n IN POSITIVEN,
4247 a IN OUT utl_nla_array_dbl,
4248 lda IN POSITIVEN,
4249 wr IN OUT utl_nla_array_dbl,
4250 wi IN OUT utl_nla_array_dbl,
4251 vl IN OUT utl_nla_array_dbl,
4252 ldvl IN POSITIVEN,
4253 vr IN OUT utl_nla_array_dbl,
4254 ldvr IN POSITIVEN,
4255 info OUT integer,
4256 pack IN flag DEFAULT 'C');
4257
4258 PROCEDURE lapack_geev(jobvl IN flag,
4259 jobvr IN flag,
4260 n IN POSITIVEN,
4261 a IN OUT UTL_NLA_ARRAY_FLT,
4262 lda IN POSITIVEN,
4263 wr IN OUT UTL_NLA_ARRAY_FLT,
4264 wi IN OUT UTL_NLA_ARRAY_FLT,
4265 vl IN OUT UTL_NLA_ARRAY_FLT,
4266 ldvl IN POSITIVEN,
4267 vr IN OUT UTL_NLA_ARRAY_FLT,
4268 ldvr IN POSITIVEN,
4269 info OUT INTEGER,
4270 pack IN flag DEFAULT 'C');
4271
4272 -- [> Singular Value Decomposition <]
4273
4274 --
4275 -- Purpose
4276 -- =======
4277 --
4278 -- LAPACK_GESVD computes the singular value decomposition (SVD) of a real
4279 -- M-by-N matrix A, optionally computing the left and/or right singular
4280 -- vectors. The SVD is written
4281 --
4282 -- A = U * SIGMA * transpose(V)
4283 --
4284 -- where SIGMA is an M-by-N matrix which is zero except for its
4285 -- min(m,n) diagonal elements, U is an M-by-M orthogonal matrix, and
4286 -- V is an N-by-N orthogonal matrix. The diagonal elements of SIGMA
4287 -- are the singular values of A; they are real and non-negative, and
4288 -- are returned in descending order. The first min(m,n) columns of
4289 -- U and V are the left and right singular vectors of A.
4290 --
4291 -- Note that the routine returns V**T, not V.
4292 --
4293 -- Arguments
4294 -- =========
4295 --
4296 -- JOBU (input) FLAG
4297 -- Specifies options for computing all or part of the matrix U:
4298 -- = 'A': all M columns of U are returned in array U:
4299 -- = 'S': the first min(m,n) columns of U (the left singular
4300 -- vectors) are returned in the array U;
4301 -- = 'O': the first min(m,n) columns of U (the left singular
4302 -- vectors) are overwritten on the array A;
4303 -- = 'N': no columns of U (no left singular vectors) are
4304 -- computed.
4305 --
4306 -- JOBVT (input) FLAG
4307 -- Specifies options for computing all or part of the matrix
4308 -- V**T:
4309 -- = 'A': all N rows of V**T are returned in the array VT;
4310 -- = 'S': the first min(m,n) rows of V**T (the right singular
4311 -- vectors) are returned in the array VT;
4312 -- = 'O': the first min(m,n) rows of V**T (the right singular
4313 -- vectors) are overwritten on the array A;
4314 -- = 'N': no rows of V**T (no right singular vectors) are
4315 -- computed.
4316 --
4317 -- JOBVT and JOBU cannot both be 'O'.
4318 --
4319 -- M (input) INTEGER
4320 -- The number of rows of the input matrix A. M >= 0.
4321 --
4322 -- N (input) INTEGER
4323 -- The number of columns of the input matrix A. N >= 0.
4324 --
4325 -- A (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDA,N)
4326 -- On entry, the M-by-N matrix A.
4327 -- On exit,
4328 -- if JOBU = 'O', A is overwritten with the first min(m,n)
4329 -- columns of U (the left singular vectors,
4330 -- stored columnwise);
4331 -- if JOBVT = 'O', A is overwritten with the first min(m,n)
4332 -- rows of V**T (the right singular vectors,
4333 -- stored rowwise);
4334 -- if JOBU .ne. 'O' and JOBVT .ne. 'O', the contents of A
4335 -- are destroyed.
4336 --
4337 -- LDA (input) INTEGER
4338 -- The leading dimension of the array A. LDA >= max(1,M).
4339 --
4340 -- S (output) UTL_NLA_ARRAY_FLT/DBL, dimension (min(M,N))
4341 -- The singular values of A, sorted so that S(i) >= S(i+1).
4342 --
4343 -- U (output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDU,UCOL)
4344 -- (LDU,M) if JOBU = 'A' or (LDU,min(M,N)) if JOBU = 'S'.
4345 -- If JOBU = 'A', U contains the M-by-M orthogonal matrix U;
4346 -- if JOBU = 'S', U contains the first min(m,n) columns of U
4350 -- LDU (input) INTEGER
4347 -- (the left singular vectors, stored columnwise);
4348 -- if JOBU = 'N' or 'O', U is not referenced.
4349 --
4351 -- The leading dimension of the array U. LDU >= 1; if
4352 -- JOBU = 'S' or 'A', LDU >= M.
4353 --
4354 -- VT (output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDVT,N)
4355 -- If JOBVT = 'A', VT contains the N-by-N orthogonal matrix
4356 -- V**T;
4357 -- if JOBVT = 'S', VT contains the first min(m,n) rows of
4358 -- V**T (the right singular vectors, stored rowwise);
4359 -- if JOBVT = 'N' or 'O', VT is not referenced.
4360 --
4361 -- LDVT (input) INTEGER
4362 -- The leading dimension of the array VT. LDVT >= 1; if
4363 -- JOBVT = 'A', LDVT >= N; if JOBVT = 'S', LDVT >= min(M,N).
4364 --
4365 -- INFO (output) INTEGER
4366 -- = 0: successful exit.
4367 -- < 0: if INFO = -i, the i-th argument had an illegal value.
4368 -- > 0: if SBDSQR did not converge, INFO specifies how many
4369 -- superdiagonals of an intermediate bidiagonal form B
4370 -- did not converge to zero. See the description of WORK
4371 -- above for details.
4372 --
4373 -- PACK (optional) FLAG
4374 -- The packing of the matricies:
4375 -- 'C': column-major (default)
4376 -- 'R': row-major
4377
4378 PROCEDURE lapack_gesvd(jobu IN flag,
4379 jobvt IN flag,
4380 m IN POSITIVEN,
4381 n IN POSITIVEN,
4382 a IN OUT utl_nla_array_dbl,
4383 lda IN POSITIVEN,
4384 s IN OUT utl_nla_array_dbl,
4385 u IN OUT utl_nla_array_dbl,
4386 ldu IN POSITIVEN,
4387 vt IN OUT utl_nla_array_dbl,
4388 ldvt IN POSITIVEN,
4389 info OUT integer,
4390 pack IN flag DEFAULT 'C');
4391
4392 PROCEDURE lapack_gesvd(jobu IN flag,
4393 jobvt IN flag,
4394 m IN POSITIVEN,
4395 n IN POSITIVEN,
4396 a IN OUT UTL_NLA_ARRAY_FLT,
4397 lda IN POSITIVEN,
4398 s IN OUT UTL_NLA_ARRAY_FLT,
4399 u IN OUT UTL_NLA_ARRAY_FLT,
4400 ldu IN POSITIVEN,
4401 vt IN OUT UTL_NLA_ARRAY_FLT,
4402 ldvt IN POSITIVEN,
4403 info OUT integer,
4404 pack IN flag DEFAULT 'C');
4405
4406 --
4407 -- Purpose
4408 -- =======
4409 --
4410 -- LAPACK_GESDD computes the singular value decomposition (SVD) of a real
4411 -- M-by-N matrix A, optionally computing the left and right singular
4412 -- vectors. If singular vectors are desired, it uses a
4413 -- divide-and-conquer algorithm.
4414 --
4415 -- The SVD is written
4416 --
4417 -- A = U * SIGMA * transpose(V)
4418 --
4419 -- where SIGMA is an M-by-N matrix which is zero except for its
4420 -- min(m,n) diagonal elements, U is an M-by-M orthogonal matrix, and
4421 -- V is an N-by-N orthogonal matrix. The diagonal elements of SIGMA
4422 -- are the singular values of A; they are real and non-negative, and
4423 -- are returned in descending order. The first min(m,n) columns of
4424 -- U and V are the left and right singular vectors of A.
4425 --
4426 -- Note that the routine returns VT = V**T, not V.
4427 --
4428 -- The divide and conquer algorithm makes very mild assumptions about
4429 -- floating point arithmetic.
4430 --
4431 -- Arguments
4432 -- =========
4433 --
4434 -- JOBZ (input) FLAG
4435 -- Specifies options for computing all or part of the matrix U:
4436 -- = 'A': all M columns of U and all N rows of V**T are
4437 -- returned in the arrays U and VT;
4438 -- = 'S': the first min(M,N) columns of U and the first
4439 -- min(M,N) rows of V**T are returned in the arrays U
4440 -- and VT;
4441 -- = 'O': If M >= N, the first N columns of U are overwritten
4442 -- on the array A and all rows of V**T are returned in
4443 -- the array VT;
4444 -- otherwise, all columns of U are returned in the
4445 -- array U and the first M rows of V**T are overwritten
4446 -- in the array VT;
4447 -- = 'N': no columns of U or rows of V**T are computed.
4448 --
4449 -- M (input) INTEGER
4450 -- The number of rows of the input matrix A. M >= 0.
4451 --
4452 -- N (input) INTEGER
4453 -- The number of columns of the input matrix A. N >= 0.
4454 --
4455 -- A (input/output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDA,N)
4456 -- On entry, the M-by-N matrix A.
4457 -- On exit,
4458 -- if JOBZ = 'O', A is overwritten with the first N columns
4459 -- of U (the left singular vectors, stored
4460 -- columnwise) if M >= N;
4461 -- A is overwritten with the first M rows
4462 -- of V**T (the right singular vectors, stored
4463 -- rowwise) otherwise.
4464 -- if JOBZ .ne. 'O', the contents of A are destroyed.
4465 --
4466 -- LDA (input) INTEGER
4467 -- The leading dimension of the array A. LDA >= max(1,M).
4468 --
4469 -- S (output) UTL_NLA_ARRAY_FLT/DBL, dimension (min(M,N))
4470 -- The singular values of A, sorted so that S(i) >= S(i+1).
4471 --
4472 -- U (output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDU,UCOL)
4473 -- UCOL = M if JOBZ = 'A' or JOBZ = 'O' and M < N;
4474 -- UCOL = min(M,N) if JOBZ = 'S'.
4475 -- If JOBZ = 'A' or JOBZ = 'O' and M < N, U contains the M-by-M
4476 -- orthogonal matrix U;
4477 -- if JOBZ = 'S', U contains the first min(M,N) columns of U
4478 -- (the left singular vectors, stored columnwise);
4479 -- if JOBZ = 'O' and M >= N, or JOBZ = 'N', U is not referenced.
4480 --
4481 -- LDU (input) INTEGER
4482 -- The leading dimension of the array U. LDU >= 1; if
4483 -- JOBZ = 'S' or 'A' or JOBZ = 'O' and M < N, LDU >= M.
4484 --
4485 -- VT (output) UTL_NLA_ARRAY_FLT/DBL, dimension (LDVT,N)
4486 -- If JOBZ = 'A' or JOBZ = 'O' and M >= N, VT contains the
4487 -- N-by-N orthogonal matrix V**T;
4488 -- if JOBZ = 'S', VT contains the first min(M,N) rows of
4489 -- V**T (the right singular vectors, stored rowwise);
4490 -- if JOBZ = 'O' and M < N, or JOBZ = 'N', VT is not referenced.
4491 --
4492 -- LDVT (input) INTEGER
4493 -- The leading dimension of the array VT. LDVT >= 1; if
4494 -- JOBZ = 'A' or JOBZ = 'O' and M >= N, LDVT >= N;
4495 -- if JOBZ = 'S', LDVT >= min(M,N).
4496 --
4497 -- INFO (output) INTEGER
4498 -- = 0: successful exit.
4499 -- < 0: if INFO = -i, the i-th argument had an illegal value.
4500 -- > 0: SBDSDC did not converge, updating process failed.
4501 --
4502 -- PACK (optional) FLAG
4503 -- The packing of the matricies:
4504 -- 'C': column-major (default)
4505 -- 'R': row-major
4506
4507 PROCEDURE lapack_gesdd(jobz IN flag,
4508 m IN POSITIVEN,
4509 n IN POSITIVEN,
4510 a IN OUT utl_nla_array_dbl,
4511 lda IN POSITIVEN,
4512 s IN OUT utl_nla_array_dbl,
4513 u IN OUT utl_nla_array_dbl,
4514 ldu IN POSITIVEN,
4515 vt IN OUT utl_nla_array_dbl,
4516 ldvt IN POSITIVEN,
4517 info OUT INTEGER,
4518 pack IN flag DEFAULT 'C');
4519
4520 PROCEDURE lapack_gesdd(jobz IN flag,
4521 m IN POSITIVEN,
4522 n IN POSITIVEN,
4523 a IN OUT UTL_NLA_ARRAY_FLT,
4524 lda IN POSITIVEN,
4525 s IN OUT UTL_NLA_ARRAY_FLT,
4526 u IN OUT UTL_NLA_ARRAY_FLT,
4527 ldu IN POSITIVEN,
4528 vt IN OUT UTL_NLA_ARRAY_FLT,
4529 ldvt IN POSITIVEN,
4530 info OUT INTEGER,
4531 pack IN flag DEFAULT 'C');
4532 END UTL_NLA;