C CONNEC3D.FOR VER.11-NOV-2002 C C PROGRAM FOR CONNECTIVITY ANALYSIS OF A 3D INDICATOR MAP C C GIVEN AN INDICATOR FIELDS (VALUES 0 AND 1 ONLY), THE RANDOM SET C WITH VALUES 1 IS ANALYSED FOR CONNECTIVITY. C C INPUT PARAMETER FILE WITH C C IPHA : 0 OR 1 FOR CONNECTIVITY ANALYSIS OF PHASE 0 OR 1. C ICON : 6, 18 OR 26-CONNECTIVITY. C CINP : INPUT FILE WITH INDICATOR VARIABLE (VALUS 0/1 ONLY) C NX NY NZ : NUMBER OF POINTS IN X AND Y C DX DY DZ : GRID DIMENSIONS IN X AND Y C N2 : NUMBER OF LAGS FOR CONNECTIVITY FUNCTION CALCULATION C COUT : OUTPUT FILE WITH STATISTICS C COU2 : OUTPUT FILE WITH CONNECTED COMPONENTS C COU3 : OUTPUT FILE WITH CONNECTIVITY FUNCITON C C DX,DY,DZ ARE ONLY USED FOR CONVERTING GRID UNITS TO REAL UNITS. C NX : NUMBER OF POINTS ALONG THE X DIRECTION C NY : NUMBER OF POINTS ALONG THE Y DIRECTION C NZ : NUMBER OF POINTS ALONG THE Z DIRECTION C C IND(I,J,L) : 0/1 INDICATOR VALUE C AT THE TERMINATION OF THE PROGRAM THE MATRIX IND(I,J) CONTAINS C THE CONNECTED COMPONENTS WITH VALUES 1,2,3,4,5,... FOR FIRST, C SECOND, THIRD, ... ETC CONNECTED COMMPONENTS. C THE VALUE 0 REMAINS 0. C COUT : OUTPUT FILE WITH STATISTICS AND CONNECTIVITY FUNCTION. C COU2 : OUTPUT FILE WITH THE CONNECTED COMPONENTS. C COU3 : OUTPUT FILE WITH CONNECTIVITY FUNCTION C C FOR THE CONNECTIVITY FUNCTION: C NPX(K): NUMBER OF PAIRS OF VALUES SEPARATED A DISTANCE K ALONG C THE X DIRECTION AND THAT BELONG TO FACIES 1. C NPCX(K): NUMBER OF THE PREVIOUS VALUES THAT ARE CONNECTED. C NPY(K): NUMBER OF PAIRS OF VALUES SEPARATED A DISTANCE K ALONG C THE Y DIRECTION AND THAT BELONG TO FACIES 1. C NPCY(K): NUMBER OF THE PREVIOUS VALUES THAT ARE CONNECTED. C NPZ(K): NUMBER OF PAIRS OF VALUES SEPARATED A DISTANCE K ALONG C THE Z DIRECTION AND THAT BELONG TO FACIES 1. C NPCZ(K): NUMBER OF THE PREVIOUS VALUES THAT ARE CONNECTED. C C C PPHA : PROPORTION OF FACIES 1. C NCC : NUMBER OF CONNECTED COMPONENTS. C RISM : MEAN CONNECTED COMPONENT SIZE IN PIXELS. C RSME : MRAN SIZE IN REAL UNITS. C RTOT : MEAN SIZE RELATIVE TO SIZE OF FACIES 1. C RXME : MEAN LENGTH ALONG THE X DIRECTION. C RYME : MEAN LENGTH ALONG THE Y DIRECTION. C RZME : MEAN LENGTH ALONG THE Z DIRECTION. C ICOM : NUMBER OF THE LARGEST COMPONENT. C ISMA : SIZE IN PIXELS (OR LARGEST COMPONENT). C RSIZ : SIZE RELATIVE TO SIZE OF FACIES 1. C IXMA : MAXIMUM LENGTH ALONG X. C IYMA : MAXIMUM LENGTH ALONG Y. C IZMA : MAXIMUM LENGTH ALONG Z. C ISMI : SIZE OF SMALLEST COMPONENT. C IXMI : MINIMUM LENGTH ALONG X. C IYMI : MINIMUM LENGTH ALONG Y. C IZMI : MINIMUM LENGTH ALONG Z. C IPX : NUMBER OF PERCOLATING COMPONENTS ALONG X. C IPY : NUMBER OF PERCOLATING COMPONENTS ALONG Y. C IPZ : NUMBER OF PERCOLATING COMPONENTS ALONG Z. C CCFU(.,.) : CONNECTIVITY FUNCTION. C C CCFU(.,1): CONNECTIVITY FUNCTION ALONG X (E-W). C CCFU(.,2): CONNECTIVITY FUNCTION ALONG Y (N-S). C CCFU(.,3): CONNECTIVITY FUNCTION ALONG Z (VERTICAL). C CCFU(.,4): CONNECTIVITY FUNCTION ALONG 3D FIRST DIAGONAL. C CCFU(.,5): CONNECTIVITY FUNCTION ALONG 3D SECOND DIAGONAL. C CCFU(.,6): CONNECTIVITY FUNCTION ALONG 3D THIRD DIAGONAL. C CCFU(.,7): CONNECTIVITY FUNCTION ALONG 3D FOURTH DIAGONAL. C CCFU(.,8): MEAN CONNECTIVITY FUNCTION ALONG X AND Y. C CCFU(.,9): MEAN CONNECTIVITY FUNCTION ALONG X,Y,Z. C CCFU(.,10): MEAN CONNECTIVITY FUNCTION ALONG THE 3D DIAGONALS. C CCFU(.,11): CONNECTIVITY FUNCTION ALONG FIRST DIAGONAL X-Y PLANE. C CCFU(.,12): CONNECTIVITY FUNCTION ALONG SECOND DIAGONAL X-Y PLANE. C CCFU(.,13): CONNECTIVITY FUNCTION ALONG FIRST DIAGONAL X-Z PLANE. C CCFU(.,14): CONNECTIVITY FUNCTION ALONG SECOND DIAGONAL X-Z PLANE. C CCFU(.,15): CONNECTIVITY FUNCTION ALONG FIRST DIAGONAL Y-Z PLANE. C CCFU(.,16): CONNECTIVITY FUNCTION ALONG SECOND DIAGONAL Y-Z PLANE. C C C ---------------------------------------------------------------- C DIMENSION IND(512,512,512) C,NPX(256),NPY(256),NPCX(256),NPCY(256) C DIMENSION NPZ(256),NPCZ(256),NP1(256),NP2(256),NP3(256) C DIMENSION NP4(256) C,NPC1(256),NPC2(256),NPC3(256),NPC4(256) C DIMENSION CCFU(256,16) C DIMENSION NXY1(256),NXY2(256),NXZ1(256),NXZ2(256) C DIMENSION NYZ1(256),NYZ2(256),NCXY1(256),NCXY2(256) C DIMENSION NCXZ1(256),NCXZ2(256),NCYZ1(256),NCYZ2(256) C CHARACTER*12 CPAR,CINP,COU2 C C MATRIX DIMENSION LIMITATION C NXM=256 NYM=NXM NZM=NXM C CPAR="coninput.txt" OPEN (1,FILE=CPAR) READ (1,*) IPHA IF (IPHA.NE.0.AND.IPHA.NE.1) THEN WRITE (6,*)'ERROR IN PARAMETER FILE !!!' WRITE (6,*)'THE FIRST LINE IN THE PARAMETER FILE' WRITE (6,*)'MUST BE A 0 OR A 1' WRITE (6,*)'0 FOR CONNECTIVITY ANALYSIS OF PHASE 0' WRITE (6,*)'1 FOR CONNECTIVITY ANALYSIS OF PHASE 1' WRITE (6,*)'THE ACTUAL VALUE IN THE PARAMETER FILE IS: ',IPHA STOP END IF READ (1,*) ICON IF (ICON.NE.6.AND.ICON.NE.18.AND.ICON.NE.26) THEN WRITE (6,*)'ERROR IN PARAMETER FILE !!!' WRITE (6,*)'THE SECOND LINE IN THE PARAMETER FILE' WRITE (6,*)'MUST BE 6, 18 OR 26' WRITE (6,*)'6 MEANS 6-CONNECTIVITY (FACE CONNECTIVITY)' WRITE (6,*)'18 MEANS 18-CONNECTIVITY (FACE+EDGE CONNECTIVITY)' WRITE (6,*)'26 MEANS 26-CONNECTIVITY (FACE+EDGE+VERTEX CONN.)' WRITE (6,*)'THE ACTUAL VALUE IN THE PARAMETER FILE IS: ',ICON STOP END IF READ (1,100) CINP READ (1,*) NX,NY,NZ READ (1,*) DX,DY,DZ READ (1,100) COU2 CLOSE (1) IF (NX.GT.NXM) THEN WRITE (6,*)'ERROR IN PARAMETER FILE !!!' WRITE (6,*)'MAXIMUM ALLOWED NX IS ',NXM WRITE (6,*)'ACTUAL VALUE IS ',NX STOP END IF IF (NY.GT.NYM) THEN WRITE (6,*)'ERROR IN PARAMETER FILE !!!' WRITE (6,*)'MAXIMUM ALLOWED NY IS ',NYM WRITE (6,*)'ACTUAL VALUE IS ',NY STOP END IF IF (NZ.GT.NZM) THEN WRITE (6,*)'ERROR IN PARAMETER FILE !!!' WRITE (6,*)'MAXIMUM ALLOWED NZ IS ',NZM WRITE (6,*)'ACTUAL VALUE IS ',NZ STOP END IF C C READING EXPERIMENTAL INDICATOR DATA 3D FIELD C OPEN (1,FILE=CINP) JPHA=0 DO 1 I=1,NX DO 2 J=1,NY DO 3 L=1,NZ READ (1,*) VAL IND(I,J,L)=INT(VAL) IF (IPHA.EQ.0) THEN IF (INT(VAL).EQ.0) THEN IND(I,J,L)=1 ELSE IND(I,J,L)=0 END IF END IF IF (IND(I,J,L).NE.1.AND.IND(I,J,L).NE.0) THEN WRITE (6,*)'EXPERIMENTAL DATA MUST BE INDICATOR DATA 0/1' WRITE (6,*)'ACTUAL VALUE : ',IND(I,J,L) STOP END IF IF (IPHA.EQ.0) THEN IF (INT(VAL).EQ.0) THEN IND(I,J,L)=1 ELSE IND(I,J,L)=0 END IF END IF IF (IND(I,J,L).EQ.1) JPHA=JPHA+1 3 CONTINUE 2 CONTINUE 1 CONTINUE CLOSE (1) IARE=NX*NY*NZ PPHA=FLOAT(JPHA)/IARE WRITE (6,*) IF (ICON.EQ.6) WRITE (6,*)'6-CONNECTIVITY ANALYSIS' IF (ICON.EQ.18) WRITE (6,*)'18-CONNECTIVITY ANALYSIS' IF (ICON.EQ.26) WRITE (6,*)'26-CONNECTIVITY ANALYSIS' WRITE (6,*) WRITE (6,*)'PROPORTION OF PHASE 1 IS: ',PPHA C C C LOOKING FOR CONNECTED COMPONENTS C NCC=0 C 5 DO 6 I=1,NX DO 7 J=1,NY DO 67 L=1,NZ IF (IND(I,J,L).EQ.1) THEN IAI=I IAJ=J IAL=L GOTO 8 END IF 67 CONTINUE 7 CONTINUE 6 CONTINUE C NO MORE CONNECTED COMPONENTS SENDING CONTROL TO LABEL 20 GOTO 20 C C A NEW COMPONEND HAS BEEN FOUND, INCREASE NUMBER OF C CONNECTED COMPONENTS BY 1 C C 8 NCC=NCC+1 WRITE (6,*)'NCC : ',NCC C C LOOKING FOR COMPONENT NCC WITH LABEL NNC+1 C IND(IAI,IAJ,IAL)=NCC+1 DO 9 I=IAI,NX DO 10 J=IAJ,NY DO 68 L=IAL,NZ C C 6-CONNECTIVITY C IF ((I-1).GT.0) THEN IF (IND(I-1,J,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J,L)=NCC+1 END IF END IF IF (I+1.LE.NX) THEN IF (IND(I+1,J,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J,L)=NCC+1 END IF END IF IF (J-1.GT.0) THEN IF (IND(I,J-1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J-1,L)=NCC+1 END IF END IF IF (J+1.LE.NY) THEN IF (IND(I,J+1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J+1,L)=NCC+1 END IF END IF IF (L-1.GT.0) THEN IF (IND(I,J,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J,L-1)=NCC+1 END IF END IF IF (L+1.LE.NZ) THEN IF (IND(I,J,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J,L+1)=NCC+1 END IF END IF C C 18-CONNECTIVITY C IF (ICON.GT.6) THEN IF ((J-1).GT.0.AND.(L-1).GT.0) THEN IF (IND(I,J-1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J-1,L-1)=NCC+1 END IF END IF IF ((J+1).LE.NY.AND.(L-1).GT.0) THEN IF (IND(I,J+1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J+1,L-1)=NCC+1 END IF END IF IF ((J-1).GT.0.AND.(L+1).LE.NZ) THEN IF (IND(I,J-1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J-1,L+1)=NCC+1 END IF END IF IF ((J+1).LE.NY.AND.(L+1).LE.NZ) THEN IF (IND(I,J+1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J+1,L+1)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(L-1).GT.0) THEN IF (IND(I-1,J,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J,L-1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(L-1).GT.0) THEN IF (IND(I+1,J,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J,L-1)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(L+1).LE.NZ) THEN IF (IND(I-1,J,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J,L+1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(L+1).LE.NZ) THEN IF (IND(I+1,J,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J,L+1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(J+1).LE.NY) THEN IF (IND(I+1,J+1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J+1,L)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(J-1).GT.0) THEN IF (IND(I+1,J-1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J-1,L)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(J+1).LE.NY) THEN IF (IND(I-1,J+1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J+1,L)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(J-1).GT.0) THEN IF (IND(I-1,J-1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J-1,L)=NCC+1 END IF END IF END IF C C 26-CONNECTIVITY C IF (ICON.GT.18) THEN IF ((I-1).GT.0.AND.(J-1).GT.0.AND.(L-1).GT.0) THEN IF (IND(I-1,J-1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J-1,L-1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(J-1).GT.0.AND.(L-1).GT.0) THEN IF (IND(I+1,J-1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J-1,L-1)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(J+1).LE.NY.AND.(L-1).GT.0) THEN IF (IND(I-1,J+1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J+1,L-1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(J+1).LE.NY.AND.(L-1).GT.0) THEN IF (IND(I+1,J+1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J+1,L-1)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(J-1).GT.0.AND.(L+1).LE.NZ) THEN IF (IND(I-1,J-1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J-1,L+1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(J-1).GT.0.AND.(L+1).LE.NZ) THEN IF (IND(I+1,J-1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J-1,L+1)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(J+1).LE.NY.AND.(L+1).LE.NZ) THEN IF (IND(I-1,J+1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J+1,L+1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(J+1).LE.NY.AND.(L+1).LE.NZ) THEN IF (IND(I+1,J+1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J+1,L+1)=NCC+1 END IF END IF END IF 68 CONTINUE 10 CONTINUE 9 CONTINUE DO 40 I=IAI,1,-1 DO 41 J=IAJ,1,-1 DO 69 L=IAL,1,-1 C C 6-CONNECTIVITY C IF ((I-1).GT.0) THEN IF (IND(I-1,J,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J,L)=NCC+1 END IF END IF IF (I+1.LE.NX) THEN IF (IND(I+1,J,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J,L)=NCC+1 END IF END IF IF (J-1.GT.0) THEN IF (IND(I,J-1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J-1,L)=NCC+1 END IF END IF IF (J+1.LE.NY) THEN IF (IND(I,J+1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J+1,L)=NCC+1 END IF END IF IF (L-1.GT.0) THEN IF (IND(I,J,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J,L-1)=NCC+1 END IF END IF IF (L+1.LE.NZ) THEN IF (IND(I,J,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J,L+1)=NCC+1 END IF END IF C C 18-CONNECTIVITY C IF (ICON.GT.6) THEN IF ((J-1).GT.0.AND.(L-1).GT.0) THEN IF (IND(I,J-1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J-1,L-1)=NCC+1 END IF END IF IF ((J+1).LE.NY.AND.(L-1).GT.0) THEN IF (IND(I,J+1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J+1,L-1)=NCC+1 END IF END IF IF ((J-1).GT.0.AND.(L+1).LE.NZ) THEN IF (IND(I,J-1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J-1,L+1)=NCC+1 END IF END IF IF ((J+1).LE.NY.AND.(L+1).LE.NZ) THEN IF (IND(I,J+1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I,J+1,L+1)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(L-1).GT.0) THEN IF (IND(I-1,J,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J,L-1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(L-1).GT.0) THEN IF (IND(I+1,J,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J,L-1)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(L+1).LE.NZ) THEN IF (IND(I-1,J,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J,L+1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(L+1).LE.NZ) THEN IF (IND(I+1,J,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J,L+1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(J+1).LE.NY) THEN IF (IND(I+1,J+1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J+1,L)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(J-1).GT.0) THEN IF (IND(I+1,J-1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J-1,L)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(J+1).LE.NY) THEN IF (IND(I-1,J+1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J+1,L)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(J-1).GT.0) THEN IF (IND(I-1,J-1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J-1,L)=NCC+1 END IF END IF END IF C C 26-CONNECTIVITY C IF (ICON.GT.18) THEN IF ((I-1).GT.0.AND.(J-1).GT.0.AND.(L-1).GT.0) THEN IF (IND(I-1,J-1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J-1,L-1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(J-1).GT.0.AND.(L-1).GT.0) THEN IF (IND(I+1,J-1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J-1,L-1)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(J+1).LE.NY.AND.(L-1).GT.0) THEN IF (IND(I-1,J+1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J+1,L-1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(J+1).LE.NY.AND.(L-1).GT.0) THEN IF (IND(I+1,J+1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J+1,L-1)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(J-1).GT.0.AND.(L+1).LE.NZ) THEN IF (IND(I-1,J-1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J-1,L+1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(J-1).GT.0.AND.(L+1).LE.NZ) THEN IF (IND(I+1,J-1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J-1,L+1)=NCC+1 END IF END IF IF ((I-1).GT.0.AND.(J+1).LE.NY.AND.(L+1).LE.NZ) THEN IF (IND(I-1,J+1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I-1,J+1,L+1)=NCC+1 END IF END IF IF ((I+1).LE.NX.AND.(J+1).LE.NY.AND.(L+1).LE.NZ) THEN IF (IND(I+1,J+1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) IND(I+1,J+1,L+1)=NCC+1 END IF END IF END IF 69 CONTINUE 41 CONTINUE 40 CONTINUE C 62 NNN=0 DO 60 I=1,NX DO 61 J=1,NY DO 70 L=1,NZ C C 6-CONNECTIVITY C IF ((I-1).GT.0) THEN IF (IND(I-1,J,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I-1,J,L)=NCC+1 NNN=NNN+1 END IF END IF END IF IF (I+1.LE.NX) THEN IF (IND(I+1,J,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I+1,J,L)=NCC+1 NNN=NNN+1 END IF END IF END IF IF (J-1.GT.0) THEN IF (IND(I,J-1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I,J-1,L)=NCC+1 NNN=NNN+1 END IF END IF END IF IF (J+1.LE.NY) THEN IF (IND(I,J+1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I,J+1,L)=NCC+1 NNN=NNN+1 END IF END IF END IF IF (L-1.GT.0) THEN IF (IND(I,J,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I,J,L-1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF (L+1.LE.NZ) THEN IF (IND(I,J,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I,J,L+1)=NCC+1 NNN=NNN+1 END IF END IF END IF C C 18-CONNECTIVITY C IF (ICON.GT.6) THEN IF ((J-1).GT.0.AND.(L-1).GT.0) THEN IF (IND(I,J-1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I,J-1,L-1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((J+1).LE.NY.AND.(L-1).GT.0) THEN IF (IND(I,J+1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I,J+1,L-1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((J-1).GT.0.AND.(L+1).LE.NZ) THEN IF (IND(I,J-1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I,J-1,L+1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((J+1).LE.NY.AND.(L+1).LE.NZ) THEN IF (IND(I,J+1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I,J+1,L+1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I-1).GT.0.AND.(L-1).GT.0) THEN IF (IND(I-1,J,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I-1,J,L-1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I+1).LE.NX.AND.(L-1).GT.0) THEN IF (IND(I+1,J,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I+1,J,L-1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I-1).GT.0.AND.(L+1).LE.NZ) THEN IF (IND(I-1,J,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I-1,J,L+1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I+1).LE.NX.AND.(L+1).LE.NZ) THEN IF (IND(I+1,J,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I+1,J,L+1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I+1).LE.NX.AND.(J+1).LE.NY) THEN IF (IND(I+1,J+1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I+1,J+1,L)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I+1).LE.NX.AND.(J-1).GT.0) THEN IF (IND(I+1,J-1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I+1,J-1,L)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I-1).GT.0.AND.(J+1).LE.NY) THEN IF (IND(I-1,J+1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I-1,J+1,L)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I-1).GT.0.AND.(J-1).GT.0) THEN IF (IND(I-1,J-1,L).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I-1,J-1,L)=NCC+1 NNN=NNN+1 END IF END IF END IF END IF C C 26-CONNECTIVITY C IF (ICON.GT.18) THEN IF ((I-1).GT.0.AND.(J-1).GT.0.AND.(L-1).GT.0) THEN IF (IND(I-1,J-1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I-1,J-1,L-1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I+1).LE.NX.AND.(J-1).GT.0.AND.(L-1).GT.0) THEN IF (IND(I+1,J-1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I+1,J-1,L-1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I-1).GT.0.AND.(J+1).LE.NY.AND.(L-1).GT.0) THEN IF (IND(I-1,J+1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I-1,J+1,L-1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I+1).LE.NX.AND.(J+1).LE.NY.AND.(L-1).GT.0) THEN IF (IND(I+1,J+1,L-1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I+1,J+1,L-1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I-1).GT.0.AND.(J-1).GT.0.AND.(L+1).LE.NZ) THEN IF (IND(I-1,J-1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I-1,J-1,L+1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I+1).LE.NX.AND.(J-1).GT.0.AND.(L+1).LE.NZ) THEN IF (IND(I+1,J-1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I+1,J-1,L+1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I-1).GT.0.AND.(J+1).LE.NY.AND.(L+1).LE.NZ) THEN IF (IND(I-1,J+1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I-1,J+1,L+1)=NCC+1 NNN=NNN+1 END IF END IF END IF IF ((I+1).LE.NX.AND.(J+1).LE.NY.AND.(L+1).LE.NZ) THEN IF (IND(I+1,J+1,L+1).EQ.1) THEN IF (IND(I,J,L).EQ.NCC+1) THEN IND(I+1,J+1,L+1)=NCC+1 NNN=NNN+1 END IF END IF END IF END IF 70 CONTINUE 61 CONTINUE 60 CONTINUE IF (NNN.GT.0) GOTO 62 GOTO 5 C C THE CONNECTED COMPONENT IS THE COMPONENT WITH VALUES C IA(I,J,L)=NCC, WE SUBSTRACT 1 FROM THE LEBEL C 20 DO 50 I=1,NX DO 51 J=1,NY DO 71 L=1,NZ IF (IND(I,J,L).NE.0) IND(I,J,L)=IND(I,J,L)-1 71 CONTINUE 51 CONTINUE 50 CONTINUE C C OUTPUT FILE WITH CONNECTED COMPONENTS C OPEN (1,FILE=COU2) C DO 15 I=1,NX DO 16 J=1,NY DO 85 L=1,NZ WRITE (1,*) IND(I,J,L) 85 CONTINUE 16 CONTINUE 15 CONTINUE C CLOSE (1) C 100 FORMAT (A) 110 FORMAT (1X,'INPUT INDICATOR FILE : ',A12) 120 FORMAT (1X,'NX : ',I6) 130 FORMAT (1X,'NY : ',I6) 131 FORMAT (1X,'NZ : ',I6) 140 FORMAT (1X,'DX : ',F10.3) 150 FORMAT (1X,'DY : ',F10.3) 151 FORMAT (1X,'DZ : ',F10.3) 160 FORMAT (1X,'PROPORTION OF FACIES ',I1,' : ',F10.4) 170 FORMAT (/1X,'CONNECTED COMPONENTS STATISTICS'// * /1X,'NUMBER OF CONNECTED COMPONENTS : ',I6) 175 FORMAT (/1X,'AVERAGES'/1X,8('=')) 176 FORMAT (/1X,'MINIMA'/1X,6('=')) 177 FORMAT (/1X,'MAXIMA'/1X,6('=')) 178 FORMAT (/1X,'PERCOLATION'/1X,11('=')) 180 FORMAT (1X,'MEAN SIZE IN PIXELS : ',F10.4) 190 FORMAT (1X,'MEAN SIZE REAL UNITS : ',F12.4) 200 FORMAT (1X,'MEAN SIZE RELATIVE TO TOTAL AREA OF FACIES ',I1, * ' : ',F10.4) 210 FORMAT (1X,'MEAN LENGTH ALONG X (IN PIXELS) : ',F10.4) 220 FORMAT (1X,'MINIMUM LENGTH ALONG X (IN PIXELS) : ',I6) 230 FORMAT (1X,'MAXIMUM LENGTH ALONG X (IN PIXELS) : ',I6) 235 FORMAT (1X,'THE LARGEST COMPONENT IS NUMBER : ',I6) 236 FORMAT (1X,'WITH MAXIMUM SIZE IN PIXELS : ',I6) 237 FORMAT (1X,'AND RELATIVE TO TOTAL AREA OF FACIES ' * ,I1,' : ',F10.4) 238 FORMAT (1X,'SIZE IN PIXELS OF SMALLEST COMPONENT : ',I6) 240 FORMAT (1X,'MEAN LENGTH ALONG Y (IN PIXELS) : ',F10.4) 241 FORMAT (1X,'MEAN LENGTH ALONG Z (IN PIXELS) : ',F10.4) 250 FORMAT (1X,'MIMIMUN LENGTH ALONG Y (IN PIXELS) : ',I6) 260 FORMAT (1X,'MAXIMUM LENGTH ALONG Y (IN PIXELS) : ',I6) 251 FORMAT (1X,'MIMIMUN LENGTH ALONG Z (IN PIXELS) : ',I6) 261 FORMAT (1X,'MAXIMUM LENGTH ALONG Z (IN PIXELS) : ',I6) 270 FORMAT (1X,'NUMBER OF PERCOLATING COMPONENTS IN X : ',I6) 280 FORMAT (1X,'NUMBER OF PERCOLATING COMPONENTS IN Y : ',I6) 281 FORMAT (1X,'NUMBER OF PERCOLATING COMPONENTS IN Z : ',I6) 290 FORMAT (/1X,'OUTPUT FILE WITH CONNECTED COMPONENTS : ',A12) 295 FORMAT (/1X,'OUTPUT FILE WITH CONNECTIVIY FUNCTION : ',A12) 300 FORMAT (/1X,'CONNECTIVITY FUNCTION'/1X,21('=') * //1X,'ALONG THE X DIRECTION (1,0,0)') 310 FORMAT (F10.3,F12.6,2I12) 320 FORMAT (/1X,'ALONG THE Y DIRECTION (0,1,0)') 321 FORMAT (/1X,'ALONG THE Z DIRECTION (0,0,1)') 322 FORMAT (/1X,'ALONG THE FIRST 3D DIAGONAL (1,1,1)') 323 FORMAT (/1X,'ALONG THE SECOND 3D DIAGONAL (1,-1,1)') 324 FORMAT (/1X,'ALONG THE THIRD 3D DIAGONAL (-1,-1,1)') 325 FORMAT (/1X,'ALONG THE FOURTH 3D DIAGONAL (-1,1,1)') 327 FORMAT (/1X,'AVERAGE ALONG THE 3D DIAGONALS') 330 FORMAT (/1X,'AVERAGE ALONG X AND Y') 328 FORMAT (/1X,'AVERAGE ALONG X, Y AND Z') 329 FORMAT (/1X,'FIRST DIAGONAL ON THE X-Y PLANE (1,1,0)') 331 FORMAT (/1X,'SECOND DIAGONAL ON THE X-Y PLANE (1,-1,0') 332 FORMAT (/1X,'FIRST DIAGONAL ON THE X-Z PLANE (1,0,1)') 333 FORMAT (/1X,'SECOND DIAGONAL ON THE X-Z PLANE (1,0,-1)') 334 FORMAT (/1X,'FIRST DIAGONAL ON THE Y-Z PLANE (0,1,1)') 335 FORMAT (/1X,'SECOND DIAGONAL ON THE Y-Z PLANE (0,1,-1)') 400 FORMAT (25(/),1X,'CONNEC3D PROGRAM VER. 1.0'/1X,27('=')/// * 1X,'INPUT PARAMETER FILE ---> ',$) 410 FORMAT (/1X,'OUTPUT FILE WITH STATISTICS AND CONNECTIVITY ' * 'FUNCTION: ',A12) 420 FORMAT (/1X,'OUTPUT FILE WITH CONNECTED COMPONENTS: ',A12) 425 FORMAT (/1X,'OUTPUT FILE WITH CONNECTIVITY FUNCTION: ',A12) 430 FORMAT (1X,'OUTPUT RESULTS OF CONNEC3D'//1X'6-CONNECTIVITY' * ' ANALYSIS'/1X,'PARAMETER FILE WAS : ',A12//) 440 FORMAT (1X,'OUTPUT RESULTS OF CONNEC3D'//1X'18-CONNECTIVITY' * ' ANALYSIS'/1X,'PARAMETER FILE WAS : ',A12//) 450 FORMAT (1X,'OUTPUT RESULTS OF CONNEC3D'//1X'26-CONNECTIVITY' * ' ANALYSIS'/1X,'PARAMETER FILE WAS : ',A12//) END