J'ai lu le code vite fait. Comme ca, ca devrait marcher. Je n'ai pas verifie.
authorlangou <langou@users.noreply.github.com>
Wed, 26 Jan 2011 05:47:42 +0000 (05:47 +0000)
committerlangou <langou@users.noreply.github.com>
Wed, 26 Jan 2011 05:47:42 +0000 (05:47 +0000)
Je n'ai meme pas essaye de compiler en fait. En gros mettre LDA en parametre,
definir A comme etant A( LDA, N ) et pour l'increment du swap mettre LDA a la
place de N quand tu travailles sur les lignes. Donc c'est tout con.

Donc il faut ecrire un driver qui teste ca avec une LDA differente de N ... Et
appliquer les modifications aux autres routines CHE, CSY, ZHE, ZSY et SSY.

Sinon pourquoi dans DSYSWAPR, est ce que tu utilises DSWAP de temps en temps,
et de temps en temps tu le fais a la main?  Je n'ai pas regarde les details.

JL.

SRC/dsyswapr.f
SRC/dsytri2x.f

index f4aa0541cd83eb6fed3257faf8b99a70146be411..0a09f4aa99bd686f85e3107d072bc677c97dd78e 100644 (file)
@@ -1,4 +1,4 @@
-      SUBROUTINE DSYSWAPR( UPLO, N, A, I1, I2)
+      SUBROUTINE DSYSWAPR( UPLO, N, A, LDA, I1, I2)
 *
 *  -- LAPACK auxiliary routine (version 3.3.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
@@ -7,10 +7,10 @@
 *
 *     .. Scalar Arguments ..
       CHARACTER        UPLO
-      INTEGER          I1, I2, N
+      INTEGER          I1, I2, LDA, N
 *     ..
 *     .. Array Arguments ..
-      DOUBLE PRECISION A(N,N)
+      DOUBLE PRECISION A( LDA, N )
 *
 *  Purpose
 *  =======
@@ -41,6 +41,9 @@
 *          inverse is formed and the part of A above the diagonal is
 *          not referenced.
 *
+*  LDA     (input) INTEGER
+*          The leading dimension of the array A.  LDA >= max(1,N).
+*
 *  I1      (input) INTEGER
 *          Index of the first row to swap
 *
 *         LOWER
 *         first swap
 *          - swap row I1 and I2 from I1 to I1-1 
-         CALL DSWAP( I1-1, A(I1,1), N, A(I2,1), N )
+         CALL DSWAP( I1-1, A(I1,1), LDA, A(I2,1), LDA )
 *
 *         second swap :
 *          - swap A(I1,I1) and A(I2,I2)
index 64ddbf5d7538654d0376a7480bca8f40a568d092..f7b2940f4938cc88dd6a8b7305be193ec3278548 100644 (file)
             DO WHILE ( I .LE. N )
                IF( IPIV(I) .GT. 0 ) THEN
                   IP=IPIV(I)
-                 IF (I .LT. IP) CALL DSYSWAPR( UPLO, N, A, I ,IP )
-                 IF (I .GT. IP) CALL DSYSWAPR( UPLO, N, A, IP ,I )
+                 IF (I .LT. IP) CALL DSYSWAPR( UPLO, N, A, LDA, I ,IP )
+                 IF (I .GT. IP) CALL DSYSWAPR( UPLO, N, A, LDA, IP ,I )
                ELSE
                  IP=-IPIV(I)
                  I=I+1
                  IF ( (I-1) .LT. IP) 
-     $                  CALL DSYSWAPR( UPLO, N, A, I-1 ,IP )
+     $                  CALL DSYSWAPR( UPLO, N, A, LDA, I-1 ,IP )
                  IF ( (I-1) .GT. IP) 
-     $                  CALL DSYSWAPR( UPLO, N, A, IP ,I-1 )
+     $                  CALL DSYSWAPR( UPLO, N, A, LDA, IP ,I-1 )
               ENDIF
                I=I+1
             END DO
             DO WHILE ( I .GE. 1 )
                IF( IPIV(I) .GT. 0 ) THEN
                   IP=IPIV(I)
-                 IF (I .LT. IP) CALL DSYSWAPR( UPLO, N, A, I ,IP  )
-                 IF (I .GT. IP) CALL DSYSWAPR( UPLO, N, A, IP ,I )
+                 IF (I .LT. IP) CALL DSYSWAPR( UPLO, N, A, LDA, I ,IP  )
+                 IF (I .GT. IP) CALL DSYSWAPR( UPLO, N, A, LDA, IP ,I )
                ELSE
                  IP=-IPIV(I)
-                 IF ( I .LT. IP) CALL DSYSWAPR( UPLO, N, A, I ,IP )
-                 IF ( I .GT. IP) CALL DSYSWAPR(  UPLO, N, A, IP ,I )
+                 IF ( I .LT. IP) CALL DSYSWAPR( UPLO, N, A, LDA, I ,IP )
+                 IF ( I .GT. IP) CALL DSYSWAPR(  UPLO, N, A, LDA, IP ,I )
                  I=I-1
                ENDIF
                I=I-1