C
C Program PLGN to convert polygons described by names of the vertices C into the same polygons described by indices of the vertices C C Version: 5.80 C Date: 2004, June 11 C C Coded by: Ludek Klimes C Department of Geophysics, Charles University Prague, C Ke Karlovu 3, 121 16 Praha 2, Czech Republic, C E-mail: klimes@seis.karlov.mff.cuni.cz C C....................................................................... C C Description of data files: C C Input data read from the standard input device (*): C The data are read by the list directed input (free format) and C consist of a single string 'SEP': C 'SEP'...String in apostrophes containing the name of the input C SEP parameter or history file with the input data. C No default, 'SEP' must be specified and cannot be blank. C C C Input data file 'SEP': C File 'SEP' has the form of the SEP C parameter file. The parameters, which do not differ from their C defaults, need not be specified in file 'SEP'. C Data specifying input files: C VRTX='string'... Name of the file with vertices of the polygons. C Description of file VRTX C Default: VRTX='vrtx.out' C PLGNS='string'... Name of the file describing the polygons in C terms of the names of the vertices. C Description of file PLGNS C Default: PLGNS='plgns.out' C Data specifying output file: C PLGN='string'... Name of the file describing the polygons in C terms of the indices of the vertices. C Description of file PLGN C Default: PLGN='plgn.out' C C C Input file VRTX with the vertices: C (1) None to several strings terminated by / (a slash) C (2) For each vertex data (2.1): C (2.1) 'NAME',X1,X2,X3,Z1,Z2,Z3,/ C 'NAME'... Name of the vertex. Different vertices must have C different names. C X1,X2,X3... Coordinates of the vertex. C Z1,Z2,Z3... Normal to the surface at the vertex. C /... None to several values terminated by a slash. C (3) / or end of file. C C C Input file PLGNS with the polygons: C (1) For each polygon data (1.1): C (1.1) 'VRTX1','VRTX2',...,'VRTXN',/ C 'VRTX1','VRTX2',...,'VRTXN'... Strings containing the names of N C vertices of the polygon. The names must correspond to the C names in file VRTX. C /... List of vertices must be terminated by a slash. C (2) / or end of file. C C C Output file PLGN with the polygons: C (1) For each polygon data (1.1): C (1.1) I1,I2,...,IN,/ C I1,I2,...,IN... Integer indices of N vertices of the polygon. C The vertices in file VRTX are indexed by positive integers C according to their order. C /... List of vertices is terminated by a slash. C C======================================================================= C C String array for the vertex names: INTEGER MVRTX,MIVRTX PARAMETER (MVRTX=2048,MIVRTX=21) CHARACTER*12 VRTX(MVRTX) INTEGER IVRTX(MIVRTX) COMMON /VRTXC/ VRTX C C Filenames and parameters: CHARACTER*80 FSEP,FVRTX,FPLGNS,FPLGN INTEGER LU,LU2,IUNDEF PARAMETER (LU=1,LU2=2) C Input data: CHARACTER*10 FORMAT CHARACTER*1 TEXT C Other variables: INTEGER NVRTX,NIVRTX,N,I,I1 C C MVRTX...Maximum number of vertices in the list of points plus C the number of vertices of the largest polygon plus 1. C MIVRTX..Maximum number of vertices of a single polygon increased C by 1. C NVRTX...Number of vertices in the list of points. C C----------------------------------------------------------------------- C C Reading name of SEP file with input data: WRITE(*,'(A)') '+PLGN: Enter input filename: ' FSEP=' ' READ (*,*) FSEP C C Reading all data from the SEP file into the memory: IF (FSEP.NE.' ') THEN CALL RSEP1(LU,FSEP) ELSE C PLGN-05 CALL ERROR('PLGN-05: SEP file not given') C Input file in the form of the SEP (Stanford Exploration Project) C parameter or history file must be specified. C There is no default filename. ENDIF C WRITE(*,'(A)') '+PLGN: Working ... ' C C Reading input and output filenames: CALL RSEP3T('VRTX',FVRTX,'vrtx.out') CALL RSEP3T('PLGNS',FPLGNS,'plgns.out') CALL RSEP3T('PLGN',FPLGN,'plgn.out') C C Reading vertices: OPEN(LU,FILE=FVRTX) READ(LU,*) (TEXT,I=1,20) NVRTX=0 10 CONTINUE NVRTX=NVRTX+1 IF(NVRTX.GT.MVRTX) THEN C PLGN-01 CALL ERROR('PLGN-01: Too small array VRTX') C Dimension MVRTX of array VRTX should be C increased. END IF VRTX(NVRTX)='$' READ(LU,*,END=11) VRTX(NVRTX) IF(VRTX(NVRTX).EQ.'$') THEN GO TO 11 END IF GO TO 10 11 CONTINUE NVRTX=NVRTX-1 CLOSE(LU) C C Checking vertex names: DO 15 I=1,NVRTX DO 14 I1=I+1,NVRTX IF(VRTX(I).EQ.VRTX(I1)) THEN C PLGN-02 CALL ERROR('PLGN-02: Different vertices have the same name') C Strings identifying different vertices in the list of points C are equal within the considered length, see array C VRTX. END IF 14 CONTINUE 15 CONTINUE C C Output format FORMAT='(99(I0,A))' I=INT(ALOG10(FLOAT(NVRTX)))+1 FORMAT(6:6)=CHAR(ICHAR('0')+I) C C Reading polygons: OPEN(LU,FILE=FPLGNS) OPEN(LU2,FILE=FPLGN) NIVRTX=MIN0(MVRTX,NVRTX+MIVRTX) DO 21 I=NVRTX+1,NIVRTX VRTX(I)='$' 21 CONTINUE 22 CONTINUE READ(LU,*,END=29) (VRTX(I),I=NVRTX+1,NIVRTX) IF(VRTX(NVRTX+1).EQ.'$') THEN GO TO 29 END IF DO 25 I=NVRTX+1,NIVRTX IF(VRTX(I).EQ.'$') THEN N=I-NVRTX-1 GO TO 27 END IF DO 23 I1=1,NVRTX IF(VRTX(I).EQ.VRTX(I1)) THEN IVRTX(I-NVRTX)=I1 GO TO 24 END IF 23 CONTINUE C PLGN-03 CALL ERROR('PLGN-03: Vertex not found') C String identifying a vertex of a polygon does not match any C vertex in the list of points. 24 CONTINUE 25 CONTINUE C PLGN-04 CALL ERROR('PLGN-04: Too small array VRTX or IVRTX') C Dimension MVRTX of array VRTX or C dimension MIVRTX of array IVRTX should be increased. 27 CONTINUE WRITE(LU2,FORMAT) (IVRTX(I),' ',I=1,N-1),IVRTX(N),' /' DO 28 I=NVRTX+1,NVRTX+N VRTX(I)='$' 28 CONTINUE GO TO 22 29 CONTINUE C CLOSE(LU) CLOSE(LU2) WRITE(*,'(A)') '+PLGN: Done. ' C STOP END C C======================================================================= C INCLUDE 'error.for' C error.for INCLUDE 'sep.for' C sep.for INCLUDE 'length.for' C length.for C C======================================================================= C