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