SUBROUTINE SPCHO1 (NEQNS,A,NNZA,INDA,XADJF,PERM,INVP, & colcnt,snode,nnzl,nsub,nsuper,xsuper, & iwork,xadj,adjncy,indlnz,lnz,diag,ierr) C C ----------- C PARAMETERS. C ----------- C INTEGER IWSIZ,NEQNS,NNZA, NSUPER,iflag INTEGER I,I0,nnzc,nnzl,nsub C INTEGER ADJNCY(NNZA), COLCNT(NEQNS) ,SNODE(NEQNS) INTEGER INVP(NEQNS) , IWORK(7*NEQNS+3),PERM(NEQNS) INTEGER XADJ(NEQNS+1),XSUPER(NEQNS+1),xadjf(neqns+1) INTEGER INDA(NNZA+NEQNS),indlnz(nnza+neqns) DOUBLE PRECISION A(NNZA),LNZ(NNZA),diag(neqns) c iwsiz=7*neqns+3 xadjf(1)=1 do 100 i=2,neqns 100 xadjf(i)=xadjf(i-1)+inda(i-1) xadjf(neqns+1)=nnza+1 c call dspt(neqns,neqns,a,nnza,inda,xadjf,lnz,iwork,indlnz) ierr=5 do 107 i=1,nnza if (a(i) .ne. lnz(i) ) then ierr=1 return endif 107 continue do 108 i=1,neqns if (xadjf(i) .ne. iwork(i)) then ierr=1 return endif 108 continue c c A -DIAG(A) c i0=0 i1=i0 i=1 ierr=0 idiag0=0 nnzc=nnza-neqns if (inda(neqns+1) .ne. 1 .or. inda(neqns+nnza) .ne. neqns & .or. inda(neqns).eq. 0 ) then ierr=1 return endif do 10 k=1,nnza 08 i0=i0+1 if(i0-i1.gt.inda(i)) then i1=i0 i=i+1 goto 08 endif j=inda(neqns+k) if (i .eq. j) then if (idiag0+1 .ne. i) then ierr=1 return endif idiag0=i diag(i)=-a(k) endif 10 continue c do 200 i=1,neqns iwork(i)=1 200 iwork(i+neqns)=i call dspasp(neqns,neqns,a,nnza,inda, & diag,neqns,iwork,lnz,nnzc,indlnz,ierr) xadj(1)=1 do 210 i=2,neqns 210 xadj(i)=xadj(i-1)+indlnz(i-1) xadj(neqns+1)=nnzc+1 DO 310 i=1,nnzc 310 adjncy(i)=indlnz(neqns+i) C*********************************************************************** C PURPOSE - THIS ROUTINE CALLS LIU'S MULTIPLE MINIMUM DEGREE ROUTINE. C*********************************************************************** C CALL ORDMMD ( NEQNS , XADJ , adjncy, INVP ,PERM, 1 IWSIZ , IWORK , NSUB, IFLAG ) C*********************************************************************** C PURPOSE: C THIS SUBROUTINE COMPUTES THE STORAGE REQUIREMENTS AND SETS UP C PRELIMINARY DATA STRUCTURES FOR THE SYMBOLIC FACTORIZATION. C CAUTION: THE ADJACENCY VECTOR ADJNCY WILL BE DESTROYED DO 410 i=1,nnza-neqns 410 adjncy(i)=indlnz(neqns+i) C C NOTE: C THIS VERSION PRODUCES THE MAXIMAL SUPERNODE PARTITION (I.E., C THE ONE WITH THE FEWEST POSSIBLE SUPERNODES). C CALL SFINIT(NEQNS , NNZc , XADJ , ADJNCY, PERM , & INVP , COLCNT, NNZL , NSUB , NSUPER, & SNODE , XSUPER, IWSIZ , IWORK , IFLAG ) return end c-------------------------------------------------------------------