Annotation of researchv10no/cmd/pfort/ASLEV.f, revision 1.1.1.1

1.1       root        1:       SUBROUTINE ASLEV(IPT)
                      2: C
                      3: C      ASLEV TAKES A SUBLATTICE WITH ITS ROOT AT NODE(IABS(IPT)))
                      4: C      AND READJUSTS THE LEVELS IN THE SUBLATTICE
                      5: C      IN ACCORDANCE WITH NEW LEVEL AT ROOT
                      6: C     NOTE, IPT LT 0 FROM CALL IN SETREF  (EXT) AND FROM ACTUALS
                      7: C     PASSED DOWN IN PROC
                      8: C
                      9:       INTEGER PNODE, STACK, PLAT, FIND, SYMLEN
                     10:       INTEGER ZERO(1)
                     11:       LOGICAL SYSERR, ERR, ABORT, GR
                     12:       COMMON /DETECT/ ERR, SYSERR, ABORT
                     13:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
                     14:       COMMON /SCR1/ LINODE, INODE(500)
                     15:       COMMON /SCR2/ LSTACK, STACK(500)
                     16:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
                     17:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
                     18:       DATA ZERO(1) /0/
                     19: C
                     20: C     STACK (IS) IS SIGNED NODE INDEX OF SUBPGM
                     21: C     IF GT 0, NODE IS ALONG A RED LINK TO PARENT
                     22: C     IF LT 0, NODE IS ALONG  A GREEN LINK TO PARENT
                     23: C
                     24: C     STACK(IS+1) IS PTR TO TWO WORD DESC ENTRY FOR THIS
                     25: C     SUBPGM, OR 0 FOR END OF DESC LIST
                     26: C
                     27:       K = IABS (IPT )
                     28:       K = SYMLEN + NODE(K) + 4
                     29:       STACK(2) = IPT
                     30:       STACK (1) = IABS ( LAT(K) )
                     31:       IS = 2
                     32: C      DOES TOP OF STACK ENTRY HAVE UNVISITED DESC
                     33:    10 IF (STACK(IS-1).NE.0) GO TO 20
                     34: C      TEST IF ARE DONE WITH SUBLATTICE
                     35:       IF (IS.EQ.2) RETURN
                     36: C      POP UP A LEVEL IN PATH
                     37:       IS = IS - 2
                     38:       GO TO 10
                     39: C      UPDATE ENTRY OF NEXT DESCENDENT TO BE CHECKED ON STACK
                     40:    20 K = STACK(IS-1)
                     41:       STACK(IS-1) = IABS (LAT(K+1))
                     42: C     LAT(K) CONTAINS SIGNED INDEX OF DESC BEING PROCESSED
                     43: C     SIGN INDICATES COLOR OF LINK TO PARENT, (I.E.
                     44: C     NODE AT TOP OF STACK)
                     45: C     LT 0 IS GREEN LINK, GT 0 IS RED LINK
                     46: C     L IS INDEX IN NODE(*) OF DESC BEING PROCESSED
                     47: C     KK IS INDEX IN LAT(*) OF DESC BEING PROCESSED
                     48:       LL = 1
                     49:       IF( LAT(K) .LT. 0) LL = -1
                     50:       KK = IABS(LAT(K))
                     51:       L = FIND(KK)
                     52: C     SKIP ALL DESC WITH NEGATIVE LEVELS
                     53:       IF (INODE(L).LT.0) GO TO 10
                     54: C     SEE IF STACK TOO SHORT FOR LOOPS
                     55:       IF( IS.LE.2) GOTO 40
                     56: C     CHECK FOR LOOPS IN PATH STACK DESC
                     57:       LOOP = 0
                     58:       GR = .FALSE.
                     59:       IF(LL.EQ.(-1)) GR = .TRUE.
                     60:       DO 60 I = 2,IS,2
                     61:       IF(LOOP) 70,70,90
                     62:    90 IF(STACK(I).LT.0) GR = .TRUE.
                     63:       GOTO 60
                     64:  70   IF(L.EQ.IABS(STACK(I))) LOOP = I
                     65:  60   CONTINUE
                     66: C      NO LOOPS
                     67:       IF(LOOP.EQ.0) GOTO 40
                     68: C     LOOP OF MIXED COLORED LINKS
                     69: C     DO NOT STACK DESC
                     70:       IF(GR) GOTO 10
                     71: C     RECURSION
                     72:       ABORT = .TRUE.
                     73:       CALL ERROR2(19H RECURSIVE CALL OF ,19,LAT(KK), 1, 1, 0)
                     74:       DO 80 K=LOOP,IS,2
                     75:       KK = IABS(STACK(K))
                     76:       KK = NODE(KK)
                     77:  80   CALL ERROR2(11H INVOLVING ,11,LAT(KK),1, 0, 0)
                     78:       CALL ERROR2(1H1, 0, ZERO, -3, 0, 1)
                     79:    30 RETURN
                     80: C      TEST IF DESC LEVEL IS ALREADY GT LEVEL OF PAR
                     81: C      THEN NEEDNT CHECK PART OF SUBLATTICE UNDER THIS DESC
                     82:    40 K = IABS (STACK(IS))
                     83:       IF (INODE(L).GT.INODE(K)) GO TO 10
                     84: C      PUSH DESC ONTO STACK AFTER FIXING HIS LEVEL
                     85:       INODE(L) = INODE(K) + 1
                     86: C      TEST AGAINST LNODE BECAUSE  SCRATCH ARRAY
                     87: C      IS AS LONG AS NODE ARRAY
                     88:       IF (IS+2.GT.LNODE) GO TO 50
                     89:       STACK(IS+2) = LL * L
                     90:       K = NODE(L) + SYMLEN + 4
                     91:       STACK(IS+1) = IABS( LAT(K))
                     92:       IS = IS + 2
                     93:       GO TO 10
                     94:    50 SYSERR = .TRUE.
                     95:       CALL ERROR1(43H IN ASLEV, PATH LONGER THAN NUMBER OF NODES, 43)
                     96:       GO TO 30
                     97:       END

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.