Fix spurious reference to xsperr.
parent
2590d6bdb2
commit
ee161fc7b4
@ -1,252 +0,0 @@
|
||||
C
|
||||
C Parallel Sparse BLAS v2.0
|
||||
C (C) Copyright 2006 Salvatore Filippone University of Rome Tor Vergata
|
||||
C Alfredo Buttari University of Rome Tor Vergata
|
||||
C
|
||||
C Redistribution and use in source and binary forms, with or without
|
||||
C modification, are permitted provided that the following conditions
|
||||
C are met:
|
||||
C 1. Redistributions of source code must retain the above copyright
|
||||
C notice, this list of conditions and the following disclaimer.
|
||||
C 2. Redistributions in binary form must reproduce the above copyright
|
||||
C notice, this list of conditions, and the following disclaimer in the
|
||||
C documentation and/or other materials provided with the distribution.
|
||||
C 3. The name of the PSBLAS group or the names of its contributors may
|
||||
C not be used to endorse or promote products derived from this
|
||||
C software without specific written permission.
|
||||
C
|
||||
C THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
C ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
C TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
C PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS
|
||||
C BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
C CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
C SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
C INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
C CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
C ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
C POSSIBILITY OF SUCH DAMAGE.
|
||||
C
|
||||
C
|
||||
C SUBROUTINE DCRDI(TRANS,M,N,DESCRA,A,IA1,IA2,IP1,DESCRN,
|
||||
C AN,IAN1,IAN2,IP2,LAN,LIAN1,LIAN2,
|
||||
C IAUX,LIAUX,IERRV)
|
||||
C
|
||||
C Purpose: CSR to DIA format conversion
|
||||
C =======
|
||||
C
|
||||
C Parameter:
|
||||
C =========
|
||||
C
|
||||
C TRANS - CHARACTER*1
|
||||
C On entry TRANS specifies whether A needs to be transposed
|
||||
C Unchanged on exit.
|
||||
C
|
||||
C M - INTEGER
|
||||
C On entry M specifies the number of rows of the matrix A.
|
||||
C M must be greater than zero.
|
||||
C Unchanged on exit.
|
||||
C
|
||||
C N - INTEGER
|
||||
C On entry M specifies the number of columns of the matrix A.
|
||||
C N must be equal to M (for the time being).
|
||||
C Unchanged on exit.
|
||||
C
|
||||
C K - INTEGER
|
||||
C On entry K specifies the number of columns of the matrix A.
|
||||
C K must be greater than or equal to zero.
|
||||
C Not used, because matrix supposed to be square.
|
||||
C Unchanged on exit.
|
||||
C
|
||||
C DESCRA - CHARACTER*5 array of DIMENSION (9)
|
||||
C On entry DESCRA defines the format of the sparse matrix.
|
||||
C Unchanged on exit.
|
||||
C
|
||||
C A - DOUBLE PRECISION array of DIMENSION (*)
|
||||
C On entry A specifies the values of the input sparse
|
||||
C matrix in CSR storage.
|
||||
C Unchanged on exit.
|
||||
C
|
||||
C IA1 - INTEGER array of dimension (*)
|
||||
C On entry IA1 holds integer information on columns of input
|
||||
C sparse matrix A, i.e. which column corresponding element in
|
||||
C A belongs to.
|
||||
C Unchanged on exit.
|
||||
C
|
||||
C IA2 - INTEGER array of dimension (*)
|
||||
C On entry IA2 holds rows pointers
|
||||
C Unchanged on exit.
|
||||
C
|
||||
C DESCRN - CHARACTER*5 array of DIMENSION (9)
|
||||
C On entry DESCRN defines the new format of the sparse matrix.
|
||||
C Unchanged on exit.
|
||||
C
|
||||
C AN - DOUBLE PRECISION array of DIMENSION (*)
|
||||
C On exit AN specifies the values of the input sparse
|
||||
C matrix in DIA storage (by diagonals).
|
||||
C
|
||||
C IAN1 - INTEGER array of dimension (*)
|
||||
C On exit IAN1 holds integer information on columns of output
|
||||
C sparse matrix A, i.e. which diagonal is stored in each column.
|
||||
C
|
||||
C IAN2 - INTEGER array of dimension (*)
|
||||
C On exit IAN2 holds in the first element the number of diagonals
|
||||
C of the matrix, i.e. the number of columns of output matrix AN.
|
||||
C
|
||||
C IAUX - INTEGER array of DIMENSION(LIAUX)
|
||||
C Work area.
|
||||
C
|
||||
C LIAUX - INTEGER
|
||||
C On entry LIAUX specifies the dimension of IAUX.
|
||||
C LIAUX must be greater than zero.
|
||||
C Unchanged on exit.
|
||||
C
|
||||
C IERRV - INTEGER array of dimension .....
|
||||
C On exit specifies if an error occur as follow:
|
||||
C IERRV(1) = 0 no error
|
||||
C IERRV(1) > 0 error
|
||||
C
|
||||
C
|
||||
SUBROUTINE DCRDI(TRANS,M,N,DESCRA,A,IA1,IA2,IP1,DESCRN,
|
||||
* AN,IAN1,IAN2,IP2,LAN,LIAN1,LIAN2,
|
||||
* IAUX,LIAUX,IERRV)
|
||||
IMPLICIT NONE
|
||||
C
|
||||
C .. Scalar Arguments ..
|
||||
INTEGER M, N, LAN, LIAN1, LIAN2, LIAUX
|
||||
CHARACTER TRANS
|
||||
C .. Array Arguments ..
|
||||
DOUBLE PRECISION A(*), AN(*)
|
||||
INTEGER IA1(*), IA2(*), IAN1(*), IAN2(*), IP1(*), IP2(*),
|
||||
* IAUX(LIAUX), IERRV(*)
|
||||
CHARACTER DESCRA*11, DESCRN*11
|
||||
C .. Local Scalars ..
|
||||
INTEGER I, J, K, MAXND
|
||||
C .. External Subroutines ..
|
||||
C EXTERNAL XSPERR
|
||||
C .. Executable Statements ..
|
||||
C
|
||||
|
||||
C
|
||||
C Check for argument errors
|
||||
C
|
||||
IF (TRANS.NE.'T' .AND. TRANS.NE.'N') THEN
|
||||
CALL XSPERR('TRANS ',ICHAR(TRANS),1,'DCRDI',IERRV)
|
||||
ENDIF
|
||||
IF (M.LE.0) THEN
|
||||
CALL XSPERR('MATDIM ',M,2,'DCRDI',IERRV)
|
||||
ENDIF
|
||||
IF (N.LE.0) THEN
|
||||
CALL XSPERR('MATDIM ',N,3,'DCRDI',IERRV)
|
||||
ENDIF
|
||||
IF(LIAN2.LT.1) THEN
|
||||
CALL XSPERR('MATST ',LIAN2,16,'DCRDI',IERRV)
|
||||
LIAN2 = 1
|
||||
ENDIF
|
||||
MAXND = M + N - 1
|
||||
IF (LIAUX.LT.MAXND) THEN
|
||||
CALL XSPERR('LWORK ',LIAUX,18,'DCRDI',IERRV)
|
||||
LIAUX = MAXND
|
||||
ENDIF
|
||||
IF (IERRV(1).NE.0) RETURN
|
||||
|
||||
|
||||
DO J=1,MAXND
|
||||
IAUX(J)=0
|
||||
ENDDO
|
||||
DO I=1,M ! single out diagonals
|
||||
DO J=IA2(I),IA2(I+1)-1
|
||||
IAUX(M-I+IA1(J))=1
|
||||
ENDDO
|
||||
ENDDO
|
||||
|
||||
IAN2(1)=0 ! Computing number of diagonals
|
||||
DO J=1,MAXND
|
||||
IAN2(1)=IAN2(1)+IAUX(J)
|
||||
ENDDO
|
||||
|
||||
IF (LAN.LT.(M*IAN2(1))) THEN
|
||||
CALL XSPERR('MATST ',LAN,14,'DCRDI',IERRV)
|
||||
LAN = M * IAN2(1)
|
||||
ENDIF
|
||||
IF (LIAN1.LT.IAN2(1)) THEN
|
||||
CALL XSPERR('MATST ',LIAN1,15,'DCRDI',IERRV)
|
||||
LIAN1 = IAN2(1)
|
||||
ENDIF
|
||||
IF (IERRV(1).NE.0) RETURN
|
||||
|
||||
DO I = 1, 3
|
||||
DESCRN(I:I)=DESCRA(I:I)
|
||||
ENDDO
|
||||
IP1(1)=0
|
||||
IP2(1)=0
|
||||
|
||||
DO I=1,M ! zeroing AN
|
||||
DO J=1,IAN2(1)
|
||||
AN(M*(J-1)+I)=0.D0
|
||||
ENDDO
|
||||
ENDDO
|
||||
|
||||
IF(TRANS.EQ.'N') THEN
|
||||
C
|
||||
C Input matrix need not be permuted
|
||||
C
|
||||
K=0
|
||||
DO J=M,MAXND ! main & upper diagonals
|
||||
IF(IAUX(J).EQ.1) THEN
|
||||
K=K+1
|
||||
IAN1(K)=J-M
|
||||
ENDIF
|
||||
ENDDO
|
||||
DO J=M-1,1,-1 ! lower diagonals
|
||||
IF(IAUX(J).EQ.1) THEN
|
||||
K=K+1
|
||||
IAN1(K)=J-M
|
||||
ENDIF
|
||||
ENDDO
|
||||
|
||||
DO I=1,M ! build AN (nonzeros only)
|
||||
DO J=IA2(I),IA2(I+1)-1
|
||||
DO K=1,IAN2(1)
|
||||
IF((IA1(J)-I).EQ.IAN1(K))THEN
|
||||
AN(M*(K-1)+I)=A(J)
|
||||
GOTO 10
|
||||
ENDIF
|
||||
ENDDO
|
||||
10 ENDDO
|
||||
ENDDO
|
||||
|
||||
ELSE
|
||||
C
|
||||
C Input matrix has to be permuted (square matrix only)
|
||||
C
|
||||
K=0
|
||||
DO J=M,1,-1 ! main & upper diagonals
|
||||
IF(IAUX(J).EQ.1) THEN
|
||||
K=K+1
|
||||
IAN1(K)=M-J
|
||||
ENDIF
|
||||
ENDDO
|
||||
DO J=M+1,MAXND ! lower diagonals
|
||||
IF(IAUX(J).EQ.1) THEN
|
||||
K=K+1
|
||||
IAN1(K)=M-J
|
||||
ENDIF
|
||||
ENDDO
|
||||
|
||||
DO I=1,M ! build AN (nonzeros only)
|
||||
DO J=IA2(I),IA2(I+1)-1
|
||||
DO K=1,IAN2(1)
|
||||
IF((I-IA1(J)).EQ.IAN1(K))THEN
|
||||
AN(M*(K-1)+IA1(J))=A(J)
|
||||
GOTO 20
|
||||
ENDIF
|
||||
ENDDO
|
||||
20 ENDDO
|
||||
ENDDO
|
||||
|
||||
ENDIF
|
||||
|
||||
RETURN
|
||||
END
|
||||
|
@ -1,180 +0,0 @@
|
||||
C
|
||||
C Parallel Sparse BLAS v2.0
|
||||
C (C) Copyright 2006 Salvatore Filippone University of Rome Tor Vergata
|
||||
C Alfredo Buttari University of Rome Tor Vergata
|
||||
C
|
||||
C Redistribution and use in source and binary forms, with or without
|
||||
C modification, are permitted provided that the following conditions
|
||||
C are met:
|
||||
C 1. Redistributions of source code must retain the above copyright
|
||||
C notice, this list of conditions and the following disclaimer.
|
||||
C 2. Redistributions in binary form must reproduce the above copyright
|
||||
C notice, this list of conditions, and the following disclaimer in the
|
||||
C documentation and/or other materials provided with the distribution.
|
||||
C 3. The name of the PSBLAS group or the names of its contributors may
|
||||
C not be used to endorse or promote products derived from this
|
||||
C software without specific written permission.
|
||||
C
|
||||
C THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
C ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
C TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
C PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS
|
||||
C BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
C CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
C SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
C INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
C CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
C ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
C POSSIBILITY OF SUCH DAMAGE.
|
||||
C
|
||||
C
|
||||
C SUBROUTINE DCREL(TRANS,M,N,DESCRA,A,IA1,IA2,IP1,DESCRN,
|
||||
C AN,IAN1,IAN2,IP2,LAN,LIAN1,LIAN2,
|
||||
C IAUX,LIAUX,IERRV)
|
||||
C
|
||||
C Purpose: CSR to ELL format conversion
|
||||
C =======
|
||||
C
|
||||
C Parameter:
|
||||
C =========
|
||||
C
|
||||
C ...
|
||||
C IAN2 - Vector: first element is max number of columns in matrices
|
||||
C ARN,IAN1, elements to M+1 are column index of diagonal
|
||||
C in ARN,IAN1 (in future releases)
|
||||
C ...
|
||||
C
|
||||
C
|
||||
SUBROUTINE DCREL(TRANS,M,N,DESCRA,A,IA1,IA2,IP1,DESCRN,
|
||||
* AN,IAN1,IAN2,IP2,LAN,LIAN1,LIAN2,
|
||||
* IAUX,LIAUX,IERRV)
|
||||
IMPLICIT NONE
|
||||
C
|
||||
C .. Scalar Arguments ..
|
||||
INTEGER LAN, LIAUX, LIAN1, LIAN2, M, N
|
||||
CHARACTER TRANS
|
||||
C .. Array Arguments ..
|
||||
DOUBLE PRECISION A(*), AN(*)
|
||||
INTEGER IA1(*), IA2(*), IAN1(*), IAN2(*), IP1(*), IP2(*),
|
||||
* IAUX(LIAUX), IERRV(*)
|
||||
CHARACTER DESCRA*11, DESCRN*11
|
||||
C .. Local Scalars ..
|
||||
INTEGER I, J, LWORKR
|
||||
C .. External Subroutines ..
|
||||
EXTERNAL XSPERR
|
||||
C .. Executable Statements ..
|
||||
C
|
||||
|
||||
C
|
||||
C Check for argument errors
|
||||
C
|
||||
IF (TRANS.NE.'T' .AND. TRANS.NE.'N') THEN
|
||||
CALL XSPERR('TRANS ',ICHAR(TRANS),1,'DCREL',IERRV)
|
||||
ENDIF
|
||||
IF (M.LE.0) THEN
|
||||
CALL XSPERR('MATDIM ',M,2,'DCREL',IERRV)
|
||||
ENDIF
|
||||
IF (N.LE.0) THEN
|
||||
CALL XSPERR('MATDIM ',N,3,'DCREL',IERRV)
|
||||
ENDIF
|
||||
IF(LIAN2.LT.1) THEN
|
||||
LIAN2 = 1
|
||||
CALL XSPERR('MATST ',LIAN2,16,'DCREL',IERRV)
|
||||
ENDIF
|
||||
IF (TRANS.EQ.'N') THEN
|
||||
LWORKR = 0
|
||||
ELSE IF (TRANS.EQ.'T') THEN
|
||||
LWORKR = N
|
||||
ENDIF
|
||||
IF (LIAUX.LT.LWORKR) THEN
|
||||
CALL XSPERR('LWORK ',LIAUX,18,'DCREL',IERRV)
|
||||
LIAUX = LWORKR
|
||||
ENDIF
|
||||
IF (IERRV(1).NE.0) RETURN
|
||||
|
||||
|
||||
descrn(1:3) = descra(1:3)
|
||||
IP1(1)=0
|
||||
IP2(1)=0
|
||||
|
||||
IF(TRANS.EQ.'N') THEN
|
||||
C
|
||||
C Input matrix need not be permuted
|
||||
C
|
||||
IAN2(1)=IA2(2)-IA2(1)
|
||||
DO I = 2, M
|
||||
IAN2(1) = MAX0(IAN2(1),IA2(I+1)-IA2(I))
|
||||
ENDDO
|
||||
|
||||
IF (LAN.LT.(M*IAN2(1))) THEN
|
||||
CALL XSPERR('MATST ',LAN,14,'DCREL',IERRV)
|
||||
LAN = M * IAN2(1)
|
||||
ENDIF
|
||||
IF (LIAN1.LT.(M*IAN2(1))) THEN
|
||||
CALL XSPERR('MATST ',LIAN1,15,'DCREL',IERRV)
|
||||
LIAN1 = M * IAN2(1)
|
||||
ENDIF
|
||||
IF (IERRV(1).NE.0) RETURN
|
||||
|
||||
DO I=1,M
|
||||
DO J=IA2(I),IA2(I+1)-1
|
||||
AN(M*(J-IA2(I))+I)=A(J)
|
||||
IAN1(M*(J-IA2(I))+I)=IA1(J)
|
||||
ENDDO
|
||||
DO J=IA2(I+1)-IA2(I)+1,IAN2(1)
|
||||
AN(M*(J-1)+I)=0.D0
|
||||
IAN1(M*(J-1)+I)=IAN2((J-2)*M+I)
|
||||
ENDDO
|
||||
ENDDO
|
||||
|
||||
ELSE
|
||||
C
|
||||
C Input matrix has to be permuted
|
||||
C
|
||||
|
||||
DO J=1,N
|
||||
IAUX(I)=0
|
||||
ENDDO
|
||||
DO I=1,M
|
||||
DO J=IA2(I),IA2(I+1)-1
|
||||
IAUX(IA1(J))=IAUX(IA1(J))+1
|
||||
ENDDO
|
||||
ENDDO
|
||||
IAN2(1)=IAUX(1)
|
||||
DO I = 2, M
|
||||
IAN2(1) = MAX0(IAN2(1),IAUX(I))
|
||||
ENDDO
|
||||
|
||||
IF (LAN.LT.(N*IAN2(1))) THEN
|
||||
CALL XSPERR('MATST ',LAN,14,'DCREL',IERRV)
|
||||
LAN = N * IAN2(1)
|
||||
ENDIF
|
||||
IF (LIAN1.LT.(N*IAN2(1))) THEN
|
||||
CALL XSPERR('MATST ',LIAN1,15,'DCREL',IERRV)
|
||||
LIAN1 = N * IAN2(1)
|
||||
ENDIF
|
||||
IF (IERRV(1).NE.0) RETURN
|
||||
|
||||
DO J=1,N
|
||||
IAUX(I)=0
|
||||
ENDDO
|
||||
DO I=1,M
|
||||
DO J=IA2(I),IA2(I+1)-1
|
||||
IAUX(IA1(J))=IAUX(IA1(J))+1
|
||||
AN (N*(IAUX(IA1(J)))+IA1(J))=A(J)
|
||||
IAN1(N*(IAUX(IA1(J)))+IA1(J))=I
|
||||
ENDDO
|
||||
ENDDO
|
||||
DO I=1,N
|
||||
DO J=IAUX(I)+1,IAN2(I)
|
||||
AN (N*(J-1)+I)=0.D0
|
||||
IAN1(N*(J-1)+I)=IAN1(N*IAUX(I)+I)
|
||||
ENDDO
|
||||
ENDDO
|
||||
|
||||
ENDIF
|
||||
|
||||
|
||||
RETURN
|
||||
END
|
||||
|
Loading…
Reference in New Issue