C
C Program GRDMERGE to merge two nonoverlapping sets of values given on
C the same grid into a single set.
C
C Version: 5.20
C Date: 1997, October 27
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
C Description of the data files:
C
C The data are read in by the list directed input (free format).
C In the description of data files, each numbered paragraph indicates
C the beginning of a new input operation (new READ statement).
C If the symbolic name of the input variable is enclosed in apostrophes,
C the corresponding value in input data is of the type CHARACTER, i.e.
C it should be a character string enclosed in apostrophes. If the first
C letter of the symbolic name is I-N, the corresponding value is of the
C type INTEGER. Otherwise, the input parameter is of the type REAL and
C may or may not contain a decimal point.
C
C Input data read from the * external unit:
C The interactive * external unit may also be redirected to the file
C containing the relevant data.
C (1) 'SEP','GRD1','GRD2','GRD','GRDAUX',/
C 'SEP'...String in apostrophes containing the name of the input
C file with the data specifying grid dimensions.
C Description of file SEP
C 'GRD1','GRD2'... Strings in apostrophes containing the names of
C the input ASCII files with the grid values. No gridpoint
C may have the value defined in both the files if 'GRDAUX'
C is blank (default).
C 'GRD'... String in apostrophes containing the name of the output
C ASCII files containing the grid values collected from both
C the input files.
C 'GRDAUX'... String in apostrophes containing the name of the
C auxiliary output file. If specified and nonblank, the
C input grid values may overlap. Of each pair of overlaping
C values, the value of file GRD2 will be collected in this
C file. This file is not created if there is no overlap.
C /... Input data line must be terminated by a slash.
C Default: 'SEP'='grd.h', 'GRD1'='grd1.out', 'GRD2'='grd2.out',
C 'GRD'='grd.out', 'GRDAUX'=' '.
C
C
C Data file SEP has the form of the SEP (Stanford Exploration Project)
C parameter file:
C All the data are specified in the form of PARAMETER=VALUE, e.g.
C N1=50, with PARAMETER directly preceding = without intervening
C spaces and with VALUE directly following = without intervening
C spaces. The PARAMETER=VALUE couple must be delimited by a space
C or comma from both sides.
C The PARAMETER string is not case-sensitive.
C PARAMETER= followed by a space resets the default parameter value.
C All other text in the input files is ignored. The file thus may
C contain unused data or comments without leading comment character.
C Everything between comment character # and the end of the
C respective line is ignored, too.
C The PARAMETER=VALUE couples may be specified in any order.
C The last appearance takes precedence.
C Data specifying grid dimensions:
C N1=positive integer... Number of gridpoints along the X1 axis.
C Default: N1=1
C N2=positive integer... Number of gridpoints along the X2 axis.
C Default: N2=1
C N3=positive integer... Number of gridpoints along the X3 axis.
C Default: N3=1
C
C=======================================================================
C
C Common block /RAMC/:
INCLUDE 'ram.inc'
C ram.inc
C
C.......................................................................
C
INTEGER LU,N1,N2,N3,N1N2N3,I
REAL UNDEF
PARAMETER (LU=1,UNDEF=-999999.)
CHARACTER*80 FSEP,FGRD1,FGRD2,FGRD,FGRDA
LOGICAL LGRDA
C
C.......................................................................
C
C Main input data:
C Default:
FSEP ='grd.h'
FGRD1='grd1.out'
FGRD2='grd2.out'
FGRD ='grd.out'
FGRDA=' '
C Reading main input data:
WRITE (*,'(2A)')
* ' Enter filenames of Grid header + 2 input and 1 output grids: '
READ (*,*) FSEP,FGRD1,FGRD2,FGRD,FGRDA
C
C Reading all the data from file FGRD to the memory
C (SEP parameter file form):
CALL RSEP1(LU,FSEP)
C Recalling the data specifying grid dimensions
C (arguments: Name of value in input data, Variable, Default):
CALL RSEP3I('N1',N1,1)
CALL RSEP3I('N2',N2,1)
CALL RSEP3I('N3',N3,1)
N1N2N3=N1*N2*N3
IF(2*N1N2N3.GT.MRAM) THEN
C GRDMERGE-01
CALL ERROR('GRDMERGE-01: Too small array RAM(MRAM)')
C Array RAM(MRAM) allocated in include file 'ram.inc' is too small
C to contain two input grids (2*N1*N2*N3 values). You may wish to
C increse the dimension MRAM in file 'ram.inc'.
C ram.inc
END IF
C
C Reading input grids:
CALL RARRAY(LU,FGRD1,'FORMATTED',.TRUE.,UNDEF,N1N2N3,RAM)
CALL RARRAY(LU,FGRD2,'FORMATTED',.TRUE.,UNDEF,N1N2N3,
* RAM(N1N2N3+1))
C
C Merging the grids:
LGRDA=.FALSE.
DO 10 I=1,N1N2N3
IF(RAM(I).EQ.UNDEF) THEN
RAM(I)=RAM(N1N2N3+I)
RAM(N1N2N3+I)=UNDEF
ELSE
IF(RAM(N1N2N3+I).NE.UNDEF) THEN
IF(FGRDA.EQ.' ') THEN
C GRDMERGE-02
CALL ERROR('GRDMERGE-02: Overlapping grid values')
C Value at the same gridpoint is defined in both input files
C and the auxiliary file is not specified.
ELSE
LGRDA=.TRUE.
END IF
END IF
END IF
10 CONTINUE
C
C Writing output grid:
CALL WARRAY(LU,FGRD,'FORMATTED',.TRUE.,UNDEF,.FALSE.,0.,N1N2N3,
* RAM)
IF(LGRDA) THEN
CALL WARRAY(LU,FGRDA,'FORMATTED',.TRUE.,UNDEF,.FALSE.,0.,N1N2N3,
* RAM(N1N2N3+1))
END IF
STOP
END
C
C=======================================================================
C
INCLUDE 'error.for'
C error.for
INCLUDE 'sep.for'
C sep.for
INCLUDE 'forms.for'
C forms.for
INCLUDE 'length.for'
C length.for
C
C=======================================================================
C