1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
C***********************************************************************
C***********************************************************************
C
C Version: 0.3
C Last modified: December 27, 1994
C Authors: Esmond G. Ng and Barry W. Peyton
C
C Mathematical Sciences Section, Oak Ridge National Laboratory
C
C***********************************************************************
C***********************************************************************
C
C ------------------------------------------------------
C INPUT NUMERICAL VALUES INTO SPARSE DATA STRUCTURES ...
C ------------------------------------------------------
C
SUBROUTINE INPNV ( NEQNS, XADJF, ADJF, ANZF, PERM, INVP,
& NSUPER, XSUPER, XLINDX, LINDX,
& XLNZ, LNZ, OFFSET )
C
INTEGER XADJF(*), ADJF(*)
DOUBLE PRECISION ANZF(*)
INTEGER PERM(*), INVP(*)
INTEGER NEQNS, NSUPER
INTEGER XSUPER(*), XLINDX(*), LINDX(*)
INTEGER XLNZ(*)
DOUBLE PRECISION LNZ(*)
INTEGER OFFSET(*)
C
INTEGER I, II, J, JLEN, JSUPER, LAST, OLDJ
C
DO 500 JSUPER = 1, NSUPER
C
C ----------------------------------------
C FOR EACH SUPERNODE, DO THE FOLLOWING ...
C ----------------------------------------
C
C -----------------------------------------------
C FIRST GET OFFSET TO FACILITATE NUMERICAL INPUT.
C -----------------------------------------------
JLEN = XLINDX(JSUPER+1) - XLINDX(JSUPER)
DO 100 II = XLINDX(JSUPER), XLINDX(JSUPER+1)-1
I = LINDX(II)
JLEN = JLEN - 1
OFFSET(I) = JLEN
100 CONTINUE
C
DO 400 J = XSUPER(JSUPER), XSUPER(JSUPER+1)-1
C -----------------------------------------
C FOR EACH COLUMN IN THE CURRENT SUPERNODE,
C FIRST INITIALIZE THE DATA STRUCTURE.
C -----------------------------------------
DO 200 II = XLNZ(J), XLNZ(J+1)-1
LNZ(II) = 0.0
200 CONTINUE
C
C -----------------------------------
C NEXT INPUT THE INDIVIDUAL NONZEROS.
C -----------------------------------
OLDJ = PERM(J)
LAST = XLNZ(J+1) - 1
DO 300 II = XADJF(OLDJ), XADJF(OLDJ+1)-1
I = INVP(ADJF(II))
IF ( I .GE. J ) THEN
LNZ(LAST-OFFSET(I)) = ANZF(II)
ENDIF
300 CONTINUE
400 CONTINUE
C
500 CONTINUE
RETURN
END
|