123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /* dlaswp.f -- translated by f2c (version 20061008).
- You must link the resulting object file with libf2c:
- on Microsoft Windows system, link with libf2c.lib;
- on Linux or Unix systems, link with .../path/to/libf2c.a -lm
- or, if you install libf2c.a in a standard place, with -lf2c -lm
- -- in that order, at the end of the command line, as in
- cc *.o -lf2c -lm
- Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
- http://www.netlib.org/f2c/libf2c.zip
- */
- #include "f2c.h"
- #include "blaswrap.h"
- /* Subroutine */ int _starpu_dlaswp_(integer *n, doublereal *a, integer *lda, integer
- *k1, integer *k2, integer *ipiv, integer *incx)
- {
- /* System generated locals */
- integer a_dim1, a_offset, i__1, i__2, i__3, i__4;
- /* Local variables */
- integer i__, j, k, i1, i2, n32, ip, ix, ix0, inc;
- doublereal temp;
- /* -- LAPACK auxiliary routine (version 3.2) -- */
- /* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */
- /* November 2006 */
- /* .. Scalar Arguments .. */
- /* .. */
- /* .. Array Arguments .. */
- /* .. */
- /* Purpose */
- /* ======= */
- /* DLASWP performs a series of row interchanges on the matrix A. */
- /* One row interchange is initiated for each of rows K1 through K2 of A. */
- /* Arguments */
- /* ========= */
- /* N (input) INTEGER */
- /* The number of columns of the matrix A. */
- /* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) */
- /* On entry, the matrix of column dimension N to which the row */
- /* interchanges will be applied. */
- /* On exit, the permuted matrix. */
- /* LDA (input) INTEGER */
- /* The leading dimension of the array A. */
- /* K1 (input) INTEGER */
- /* The first element of IPIV for which a row interchange will */
- /* be done. */
- /* K2 (input) INTEGER */
- /* The last element of IPIV for which a row interchange will */
- /* be done. */
- /* IPIV (input) INTEGER array, dimension (K2*abs(INCX)) */
- /* The vector of pivot indices. Only the elements in positions */
- /* K1 through K2 of IPIV are accessed. */
- /* IPIV(K) = L implies rows K and L are to be interchanged. */
- /* INCX (input) INTEGER */
- /* The increment between successive values of IPIV. If IPIV */
- /* is negative, the pivots are applied in reverse order. */
- /* Further Details */
- /* =============== */
- /* Modified by */
- /* R. C. Whaley, Computer Science Dept., Univ. of Tenn., Knoxville, USA */
- /* ===================================================================== */
- /* .. Local Scalars .. */
- /* .. */
- /* .. Executable Statements .. */
- /* Interchange row I with row IPIV(I) for each of rows K1 through K2. */
- /* Parameter adjustments */
- a_dim1 = *lda;
- a_offset = 1 + a_dim1;
- a -= a_offset;
- --ipiv;
- /* Function Body */
- if (*incx > 0) {
- ix0 = *k1;
- i1 = *k1;
- i2 = *k2;
- inc = 1;
- } else if (*incx < 0) {
- ix0 = (1 - *k2) * *incx + 1;
- i1 = *k2;
- i2 = *k1;
- inc = -1;
- } else {
- return 0;
- }
- n32 = *n / 32 << 5;
- if (n32 != 0) {
- i__1 = n32;
- for (j = 1; j <= i__1; j += 32) {
- ix = ix0;
- i__2 = i2;
- i__3 = inc;
- for (i__ = i1; i__3 < 0 ? i__ >= i__2 : i__ <= i__2; i__ += i__3)
- {
- ip = ipiv[ix];
- if (ip != i__) {
- i__4 = j + 31;
- for (k = j; k <= i__4; ++k) {
- temp = a[i__ + k * a_dim1];
- a[i__ + k * a_dim1] = a[ip + k * a_dim1];
- a[ip + k * a_dim1] = temp;
- /* L10: */
- }
- }
- ix += *incx;
- /* L20: */
- }
- /* L30: */
- }
- }
- if (n32 != *n) {
- ++n32;
- ix = ix0;
- i__1 = i2;
- i__3 = inc;
- for (i__ = i1; i__3 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__3) {
- ip = ipiv[ix];
- if (ip != i__) {
- i__2 = *n;
- for (k = n32; k <= i__2; ++k) {
- temp = a[i__ + k * a_dim1];
- a[i__ + k * a_dim1] = a[ip + k * a_dim1];
- a[ip + k * a_dim1] = temp;
- /* L40: */
- }
- }
- ix += *incx;
- /* L50: */
- }
- }
- return 0;
- /* End of DLASWP */
- } /* _starpu_dlaswp_ */
|