* * $Id$ * * $Log$ * Revision 1.1.1.1 1996/04/01 15:03:24 mclareni * Mathlib gen * * #include "gen/pilot.h" SUBROUTINE RECPAR (NDIM,UMINUS,UPLUS,FLOBD,FUPBD,MAXDPH,ENTREE,TRE 1E,PARTN,ENTBUC,BUCKTS,IBUC) INTEGER NDIM,ENTREE,ENTBUC,TREE(4,1000),MAXDPH REAL UMINUS(NDIM),UPLUS(NDIM),PARTN(18001),BUCKTS(IBUC) COMMON /MLIMIT/ MFLAG LOGICAL MFLAG COMMON /ISTRGE/ BUKMAX, DUMMY1(12000) COMMON /BUKSZE/ MAXWRD C*NS INTEGER MAXWRD,TREMAX,BUKMAX,PARENT,COORD INTEGER MAXWRD,TREMAX,BUKMAX,PARENT LOGICAL TERMNL INTEGER SNODES(100) INTEGER PNODES,MNODES REAL SPRTNS(100) INTEGER PPRTNS,MPRTNS INTEGER SAXES(100) INTEGER PAXES,MAXES IF(100.GT.100) GOTO 420 PNODES=0 MNODES=100 IF(100.GT.100) GOTO 440 PPRTNS=0 MPRTNS=100 IF(100.GT.100) GOTO 460 PAXES=0 MAXES=100 TREMAX=BUKMAX-1 TERMNL=.FALSE. IRBUC=IBUC-(MAXWRD*(ENTBUC-1)) IRBUC=IBUC-(MAXWRD*(ENTBUC-1)) CALL SPLIT(NDIM,UMINUS,UPLUS,FLOBD,FUPBD,TERMNL,ITREE,PARTN(ENTRE 1E),BUCKTS(MAXWRD*(ENTBUC-1)+1),IRBUC) TREE(4,ENTREE)=-ITREE IF(TERMNL) RETURN PNODES=PNODES+1 IF(PNODES.GT.MNODES) GOTO 320 SNODES(PNODES)=ENTREE TREE(1,ENTREE)=0 10 ENTREE=ENTREE+1 IF(ENTREE.GT.TREMAX) GOTO 380 TERMNL=PNODES.GE.MAXDPH IF(PNODES.LE.0) GOTO 210 PARENT=SNODES(PNODES) JTREE=TREE(4,PARENT) PAXES=PAXES+1 IF(PAXES.GT.MAXES) GOTO 360 SAXES(PAXES)=JTREE IF(TREE(1,PARENT).NE.0) GOTO 90 IF(JTREE.GE.0) GOTO 20 PPRTNS=PPRTNS+1 IF(PPRTNS.GT.MPRTNS) GOTO 340 SPRTNS(PPRTNS)=UPLUS(-JTREE) UPLUS(-JTREE)=PARTN(PARENT) GOTO 30 20 PPRTNS=PPRTNS+1 IF(PPRTNS.GT.MPRTNS) GOTO 340 SPRTNS(PPRTNS)=UMINUS(JTREE) UMINUS(JTREE)=PARTN(PARENT) 30 IRBUC=IBUC-(MAXWRD*(ENTBUC-1)) IRBUC=IBUC-(MAXWRD*(ENTBUC-1)) CALL SPLIT(NDIM,UMINUS,UPLUS,FLOBD,FUPBD,TERMNL,ITREE,PARTN(ENTRE 1E),BUCKTS(MAXWRD*(ENTBUC-1)+1),IRBUC) TREE(4,ENTREE)=-ITREE IF(.NOT.(.NOT.TERMNL)) GOTO 50 IF(JTREE.GE.0) GOTO 40 TREE(2,PARENT)=ENTREE TREE(1,ENTREE)=0 PNODES=PNODES+1 IF(PNODES.GT.MNODES) GOTO 320 SNODES(PNODES)=ENTREE GOTO 10 40 TREE(3,PARENT)=ENTREE TREE(1,ENTREE)=0 PNODES=PNODES+1 IF(PNODES.GT.MNODES) GOTO 320 SNODES(PNODES)=ENTREE GOTO 10 50 ENTREE=ENTREE-1 IF(ENTREE.LT.1) GOTO 400 IF(JTREE.GE.0) GOTO 60 TREE(2,PARENT)=-ENTBUC GOTO 70 60 TREE(3,PARENT)=-ENTBUC 70 TREE(1,PARENT)=ENTBUC ENTBUC=ENTBUC+1 IF(ENTBUC.GT.BUKMAX) GOTO 390 IF(PAXES.LE.0) GOTO 220 JTREE=SAXES(PAXES) PAXES=PAXES-1 IF(PAXES.LT.0) GOTO 280 IF(JTREE.GE.0) GOTO 80 IF(PPRTNS.LE.0) GOTO 240 UPLUS(-JTREE)=SPRTNS(PPRTNS) PPRTNS=PPRTNS-1 IF(PPRTNS.LT.0) GOTO 300 GOTO 10 80 IF(PPRTNS.LE.0) GOTO 240 UMINUS(JTREE)=SPRTNS(PPRTNS) PPRTNS=PPRTNS-1 IF(PPRTNS.LT.0) GOTO 300 GOTO 10 90 IF(JTREE.LE.0) GOTO 100 PPRTNS=PPRTNS+1 IF(PPRTNS.GT.MPRTNS) GOTO 340 SPRTNS(PPRTNS)=UPLUS(JTREE) UPLUS(JTREE)=PARTN(PARENT) GOTO 110 100 PPRTNS=PPRTNS+1 IF(PPRTNS.GT.MPRTNS) GOTO 340 SPRTNS(PPRTNS)=UMINUS(-JTREE) UMINUS(-JTREE)=PARTN(PARENT) 110 IRBUC=IBUC-(MAXWRD*(ENTBUC-1)) IRBUC=IBUC-(MAXWRD*(ENTBUC-1)) CALL SPLIT(NDIM,UMINUS,UPLUS,FLOBD,FUPBD,TERMNL,ITREE,PARTN(ENTRE 1E),BUCKTS(MAXWRD*(ENTBUC-1)+1),IRBUC) TREE(4,ENTREE)=-ITREE IF(.NOT.(.NOT.TERMNL)) GOTO 130 IF(JTREE.LE.0) GOTO 120 TREE(2,PARENT)=ENTREE TREE(1,ENTREE)=0 PNODES=PNODES+1 IF(PNODES.GT.MNODES) GOTO 320 SNODES(PNODES)=ENTREE GOTO 10 120 TREE(3,PARENT)=ENTREE TREE(1,ENTREE)=0 PNODES=PNODES+1 IF(PNODES.GT.MNODES) GOTO 320 SNODES(PNODES)=ENTREE GOTO 10 130 ENTREE=ENTREE-1 IF(ENTREE.LT.1) GOTO 400 IF(JTREE.LE.0) GOTO 140 TREE(2,PARENT)=-ENTBUC GOTO 150 140 TREE(3,PARENT)=-ENTBUC 150 IF(TREE(1,PARENT).EQ.0) GOTO 180 IF(PAXES.LE.0) GOTO 220 JTREE=SAXES(PAXES) PAXES=PAXES-1 IF(PAXES.LT.0) GOTO 280 IF(JTREE.LE.0) GOTO 160 IF(PPRTNS.LE.0) GOTO 240 UPLUS(JTREE)=SPRTNS(PPRTNS) PPRTNS=PPRTNS-1 IF(PPRTNS.LT.0) GOTO 300 GOTO 170 160 IF(PPRTNS.LE.0) GOTO 240 UMINUS(-JTREE)=SPRTNS(PPRTNS) PPRTNS=PPRTNS-1 IF(PPRTNS.LT.0) GOTO 300 170 PNODES=PNODES-1 IF(PNODES.LT.0) GOTO 260 IF(PNODES.LE.0) GOTO 210 PARENT=SNODES(PNODES) GOTO 150 180 IF(PAXES.LE.0) GOTO 220 JTREE=SAXES(PAXES) PAXES=PAXES-1 IF(PAXES.LT.0) GOTO 280 IF(JTREE.GE.0) GOTO 190 IF(PPRTNS.LE.0) GOTO 240 UPLUS(-JTREE)=SPRTNS(PPRTNS) PPRTNS=PPRTNS-1 IF(PPRTNS.LT.0) GOTO 300 GOTO 200 190 IF(PPRTNS.LE.0) GOTO 240 UMINUS(JTREE)=SPRTNS(PPRTNS) PPRTNS=PPRTNS-1 IF(PPRTNS.LT.0) GOTO 300 200 TREE(1,PARENT)=ENTBUC ENTBUC=ENTBUC+1 IF(ENTBUC.GT.BUKMAX) GOTO 390 GOTO 10 210 RETURN 220 WRITE(6,230) 230 FORMAT(' STACK AXES EMPTY') STOP 240 WRITE(6,250) 250 FORMAT(' STACK PRTNS EMPTY') STOP 260 WRITE(6,270) 270 FORMAT(' STACK NODES UNDERFLOW') STOP 280 WRITE(6,290) 290 FORMAT(' STACK AXES UNDERFLOW') STOP 300 WRITE(6,310) 310 FORMAT(' STACK PRTNS UNDERFLOW') STOP 320 WRITE(6,330) 330 FORMAT(' STACK NODES OVERFLOW') STOP 340 WRITE(6,350) 350 FORMAT(' STACK PRTNS OVERFLOW') STOP 360 WRITE(6,370) 370 FORMAT(' STACK AXES OVERFLOW') STOP 380 MFLAG=.TRUE. RETURN 390 MFLAG=.TRUE. RETURN 400 WRITE(6,410) 410 FORMAT(' ENTREE DECREMENTED PAST ONE') STOP 420 WRITE(6,430) MAXDPH 430 FORMAT(' MAXDPH = ',I10,' TOO LARGE') STOP 440 WRITE(6,450) MAXDPH 450 FORMAT(' MAXDPH = ',I10,' TOO LARGE') STOP 460 WRITE(6,470) MAXDPH 470 FORMAT(' MAXDPH = ',I10,' TOO LARGE') STOP END