C------------------------------------------------------------------------ SUBROUTINE FILLIA C ****************************************************************** C FILL IA ARRAY FOR A STRUCTURED GRID INPUT WITH CONNECTIONS- PER-NODE C ****************************************************************** USE vtumod, ONLY:NODES,IA,NEQS,NJA, 1 IPRCONN,IOUT,vtknlay use global, only:NROW,NCOL C------------------------------------------------------------------- C nlay=vtknlay C1------INITIALIZE IA ARRAY AND NJA NJA = 0 DO I=1,NEQS + 1 IA(I) = 0 ENDDO C------------------------------------------------------------ C2-----COMPUTE CONNECTIONS PER ROW IN IA C------------------------------------------------------------ NNDLAY = NCOL*NROW C2A-----PREVIOUS LAYER DO K = 1,NLAY - 1 KDEL = (K-1)*NNDLAY DO IJ = 1,NNDLAY ND1 = IJ + KDEL ND2 = ND1 + NNDLAY IA(ND2) = IA(ND2) + 1 ENDDO ENDDO C2B-----PREVIOUS ROW DO K = 1,NLAY KDEL = (K-1)*NNDLAY DO I = 1,NROW - 1 DO J = 1,NCOL ND1 = J + NCOL*(I-1) + KDEL ND2 = ND1 + NCOL IA(ND2) = IA(ND2) + 1 ENDDO ENDDO ENDDO C2C-----PREVIOUS AND NEXT COLUMN DO K = 1,NLAY KDEL = (K-1)*NNDLAY DO I = 1,NROW DO J = 1,NCOL - 1 ND1 = J + NCOL*(I-1) + KDEL ND2 = ND1 + 1 IA(ND1) = IA(ND1) + 1 IA(ND2) = IA(ND2) + 1 ENDDO ENDDO ENDDO C2D-----NEXT ROW DO K = 1,NLAY KDEL = (K-1)*NNDLAY DO I = 1,NROW - 1 DO J = 1,NCOL ND1 = J + NCOL*(I-1) + KDEL IA(ND1) = IA(ND1) + 1 ENDDO ENDDO ENDDO C2E-----NEXT LAYER DO K = 1,NLAY - 1 KDEL = (K-1)*NNDLAY DO IJ = 1,NNDLAY ND1 = IJ + KDEL IA(ND1) = IA(ND1) + 1 ENDDO ENDDO C2G-------DIAGONAL DO N = 1,NODES IA(N) = IA(N) + 1 ENDDO C2H-------PRINT NUMBER OF CONNECTIONS PER NODE IF REQUESTED IF(IPRCONN.NE.0)THEN WRITE(IOUT,*)'NUMBER OF CONNECTIONS PER NODE IS BELOW, 40I10' WRITE(IOUT,55)(IA(I),I=1,NODES) 55 FORMAT(40I10) ENDIF C------------------------------------------------------------ C3-------NEXT COMPUTE CUMULATIVE OF CONNECTIONS PER ROW IN IA C------------------------------------------------------------ DO II=2,NODES+1 IA(II) = IA(II) + IA(II-1) ENDDO C-------IA(N+1) IS CUMULATIVE_IA(N) + 1 DO II=NODES+1,2,-1 IA(II) = IA(II-1) + 1 ENDDO IA(1) = 1 NJA = IA(NODES+1) - 1 C C4------RETURN RETURN END C ----------------------------------------------------------------------- SUBROUTINE FILLJA C ****************************************************************** C CREATES JA ARRAY FOR A STRUCTURED GRID INPUT. C ****************************************************************** use vtumod, only:NODES,IA,JA,NJA,NEQS,vtknlay USE GLOBAL, ONLY:NROW,NCOL C---------------------------------------------------------- C nlay=vtknlay C C1------INITIALIZE JA ARRAY DO I=1,NJA JA(I) = 0 ENDDO NNDLAY = NCOL*NROW C2------PUT DIAGONAL IN FIRST LOCATION DO I=1,NODES JA(IA(I)) = I ENDDO C3-------PREVIOUS LAYER DO K = 1,NLAY - 1 KDEL = (K-1)*NNDLAY DO IJ = 1,NNDLAY ND1 = IJ + KDEL ND2 = ND1 + NNDLAY CALL FINDJA(ND2,ND1) ENDDO ENDDO C4-------PREVIOUS ROW DO K = 1,NLAY KDEL = (K-1)*NNDLAY DO I = 1,NROW - 1 DO J = 1,NCOL ND1 = J + NCOL*(I-1) + KDEL ND2 = ND1 + NCOL CALL FINDJA(ND2,ND1) ENDDO ENDDO ENDDO C5-------PREVIOUS AND NEXT COLUMN DO K = 1,NLAY KDEL = (K-1)*NNDLAY DO I = 1,NROW DO J = 1,NCOL - 1 ND1 = J + NCOL*(I-1) + KDEL ND2 = ND1 + 1 CALL FINDJA(ND1,ND2) CALL FINDJA(ND2,ND1) ENDDO ENDDO ENDDO C6-------NEXT ROW DO K = 1,NLAY KDEL = (K-1)*NNDLAY DO I = 1,NROW - 1 DO J = 1,NCOL ND1 = J + NCOL*(I-1) + KDEL ND2 = ND1 + NCOL CALL FINDJA(ND1,ND2) ENDDO ENDDO ENDDO C7-------NEXT LAYER DO K = 1,NLAY - 1 KDEL = (K-1)*NNDLAY DO IJ = 1,NNDLAY ND1 = IJ + KDEL ND2 = ND1 + NNDLAY CALL FINDJA(ND1,ND2) ENDDO ENDDO C------------------------------------------------------------------ C9------RETURN RETURN END C ----------------------------------------------------------------------- SUBROUTINE FINDJA(I,J) C ****************************************************************** C ADD J TO THE ADJACENCY LIST FOR I C ****************************************************************** USE vtumod, ONLY:IA,JA,NJA C---------------------------------------------------------- IF(I.NE.J)THEN DO II=IA(I),IA(I+1)-1 IF(JA(II).EQ.0)THEN C1----------FILL FIRST AVAILABLE NONZERO SPACE JA(II) = J GOTO 100 ENDIF ENDDO ENDIF 100 CONTINUE C2------RETURN RETURN END