C
C Program INV4 to subtract two sets of grid values of a function C describing the model: GRID1-GRID2=GRID3. C C Date: 1996, September 30 C Coded by Ludek Klimes C C ...................................................................... C C C Description of the data files: C C Main input data file read from the interactive device (*): C (1) 'GRID1','GRID2','GRID3',/ C 'GRID1','GRID2','GRID3'... Names of the input and output C files described below. C /... Obligatory slash to enable future compatible extensions. C Default: 'GRID1'='inv3.dat', 'GRID2'='inv3.out', C 'GRID3'='dif.out'. C C Input files 'GRID1','GRID2': C (1) TEXTG,IGROUP C Identification of the group. C TEXTG...A string. If its first character is 'I' or 'S', the C computed function describes a surface. Otherwise, it C describes a material parameter. C IGROUP..Index of a surface, or of a complex block. C (2) TEXTF C This input is not performed for a surface, i.e. if the first C character of textg (see above) is 'I' or 'S'. C TEXTF...String identifying a material parameter. C (3) K1,K2,K3 C K1,K2,K3... Indices of coordinates. C (4) N1,N2,N3 C N1,N2,N3... Numbers of grid lines. C (5) X1(1),...,X1(N1) C The grid coordinates corresponding to the first independent C variable. C (6) X2(1),...,X2(N2) C The grid coordinates corresponding to the second independent C variable. C (7) X3(1),...,X3(N3) C The grid coordinates corresponding to the third independent C variable. C (8) (((W(I1,I2,I3),I1=1,N1),I2=1,N2),I3=1,N3) C The values of function W at grid points. Function value C W(I1,I2,I3) corresponds to point (X1(I1),X2(I2),X3(I3)). C C Output file 'GRID3': C (1) 'DIFFERENCES ............................' (a string) C (2) (((D(I1,I2,I3),I1=1,N1),I2=1,N2),I3=1,N3) C Differences of function values. C C----------------------------------------------------------------------- C C Filenames: CHARACTER*80 FILE1,FILE2,FILE3 C C Logical unit numbers: INTEGER LU1,LU2,LU3 PARAMETER (LU1=11) PARAMETER (LU2=12) PARAMETER (LU3=13) C C Auxiliary storage locations: CHARACTER*3 TEXT INTEGER MX PARAMETER (MX=100) INTEGER ICB,K1,K2,K3,N1,N2,N3,I1,I2,I3 REAL X(MX,3),V1(MX),V2(MX) C C....................................................................... C C Opening data files and reading the input data: WRITE(*,'(A)') ' Enter names of input and output files: ' FILE1='inv3.dat' FILE2='inv3.out' FILE3='dif.out' READ(*,*) FILE1,FILE2,FILE3 OPEN(LU1,FILE=FILE1,STATUS='OLD') OPEN(LU2,FILE=FILE2,STATUS='OLD') OPEN(LU3,FILE=FILE3) WRITE(*,'(A)') '+ ' C READ(LU1,*) TEXT,ICB READ(LU2,*) TEXT,I2 IF(ICB.NE.I2) THEN C INV4-01 CALL ERROR('INV4-01: Different index of a function') END IF IF(TEXT(1:1).NE.'I'.AND.TEXT(1:1).NE.'S') THEN READ(LU1,*) TEXT READ(LU2,*) TEXT END IF READ(LU1,*) K1,K2,K3 READ(LU2,*) I1,I2,I3 IF(K1.NE.I1.OR.K2.NE.I2.OR.K3.NE.I3) THEN C INV4-02 CALL ERROR('INV4-02: Different indices of coordinates') END IF READ(LU1,*) N1,N2,N3 READ(LU2,*) I1,I2,I3 IF(N1.NE.I1.OR.N2.NE.I2.OR.N3.NE.I3) THEN C INV4-03 CALL ERROR('INV4-03: Different numbers of grid lines') END IF IF(MAX0(N1,N2,N3).GT.MX) THEN C INV4-04 CALL ERROR('INV4-04: Too many grid lines') END IF READ(LU1,*) (X(I1,K1),I1=1,N1) READ(LU2,*) (X(I1,K1),I1=1,N1) READ(LU1,*) (X(I2,K2),I2=1,N2) READ(LU2,*) (X(I2,K2),I2=1,N2) READ(LU1,*) (X(I3,K3),I3=1,N3) READ(LU2,*) (X(I3,K3),I3=1,N3) WRITE(LU3,'(A)') '''DIFFERENCES ............................''' DO 23 I3=1,N3 DO 22 I2=1,N2 READ(LU1,*) (V1(I1),I1=1,N1) READ(LU2,*) (V2(I1),I1=1,N1) DO 21 I1=1,N1 V1(I1)=V1(I1)-V2(I1) 21 CONTINUE WRITE(LU3,'(8F10.6)') (V1(I1),I1=1,N1) 22 CONTINUE IF(N1.NE.1.AND.N2.NE.1) WRITE(LU3,*) 23 CONTINUE C STOP END C C======================================================================= C INCLUDE 'error.for' C error.for C C======================================================================= C