C
C Program NEWPAR to modify the effective elastic parameters (harmonic
C averages of elastic parameters) for 2-D elastic finite differences
C
C Date: 1999, May 28
C
C Coded by Ludek Klimes
C             Department of Geophysics, Charles University Prague
C             Ke Karlovu 3,  121 16  Praha 2,  Czech Republic
C             http://sw3d.cz/staff/klimes.htm
C
C.......................................................................
C                                                    
C Description of data files:
C
C Main input data read from the * input device:
C     The data are read in by the list directed input (free format), by
C     a single READ statement.  The data consist of character strings
C     which have to be enclosed in apostrophes.  Note that the
C     interactive * external unit may be piped or redirected to a file.
C     The following items are read:
C     'FSEP'..String in apostrophes containing the name of the input
C             file with the data specifying the dimensions of the basic
C             grid of N1*N2*N3 gridpoints.
C     /...    Input data line should be terminated by a slash.
C     Defaults: 'FSEP'='fd.h'.
C
C Data file 'FSEP' specifying grid dimensions have the form of the SEP
C (Stanford Exploration Project) 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 This program understands the following parameters common to nearly all
C programs dealing with SEP-like gridded data formats:
C     N1=positive integer... Number of gridpoints of the basic grid
C             along the X1 axis.  Default: N1=1
C     N2=positive integer... Number of gridpoints of the basic grid
C             along the X2 axis.  Default: N2=1
C     N3=positive integer... Number of gridpoints of the basic grid
C             along the X3 axis.  Default: N3=1
C And the following parameters specific to effective-parameter FD codes:
C     FORM='string'... Form of the input and output files:
C             FORM='formatted': Formatted ASCII files,
C             FORM='unformatted': Unformatted files.
C     A13='string', B13='string', C13='string'... Strings in apostrophes
C             containing the names of the input files with
C             (N1-1)*N2*(N3-1) values of the elastic parameters averaged
C             in the direction the X1 axis, along the gridlines shifted
C             half a grid interval in the direction of the X3 axis.
C             Defaults: A13=' ', B13=' ', C13=' '.
C     A31='string', B31='string', C31='string'... Strings in apostrophes
C             containing the names of the input files with
C             (N1-1)*N2*(N3-1) values of the elastic parameters averaged
C             in the direction the X3 axis, along the gridlines shifted
C             half a grid interval in the direction of the X1 axis.
C             Defaults: A31=' ', B31=' ', C31=' '.
C     AA13='string', BB13='string', CC13='string'... Strings in
c             apostrophes containing the names of the output files with
C             (N1-1)*N2*(N3-1) values of the average values of elastic
C             parameters A13 and A31, B13 and B31, C13 and C31,
C             respectively.
C             Defaults: AA13=' ', BB13=' ', CC13=' '.
C     Analogously A12, B12, C12, A21, B21, C21, AA12, BB12, CC12, A23,
C             B23, C23, A32, B32, C32, AA23, BB23 and CC23.
C
C=======================================================================
C
C Common block /RAMC/ to allocate large array RAM:
      INCLUDE 'ram.inc'
C     ram.inc
C
C-----------------------------------------------------------------------
C
C     Input and output data filenames and logical unit numbers:
      CHARACTER*80 FSEP
      INTEGER LU
      PARAMETER (LU=1)
C     FSEP... The name of the input data file with FD parameters in SEP
C             format.
C     LU...   Logical unit number to be used to read and write data
C             files.
C
      INTEGER NX,NZ,N,I
      REAL DX
C
C.......................................................................
C
C     Main input data:
C     Default:
      FSEP='fd.h'
C     Reading main input data:
      WRITE (*,'(2A)')
     *  ' Enter name of input SEP file [''fd.h'']: '
      READ (*,*) FSEP
C
C     Reading all the data from input SEP parameter file:
      CALL RSEP1(LU,FSEP)
C
C     Data specifying grid dimensions
      CALL FDGRID(MRAM/3,MRAM/3,MRAM/3,NX,NZ,DX)
      N=(NX-1)*(NZ-1)
C
C     Modifying the gridded effective elastic parameters A:
      CALL FDIN1(LU,NX-1,NZ-1,'A13',RAM     ,RAM(2*N+1),0,RAM)
      CALL FDIN1(LU,NX-1,NZ-1,'A31',RAM(N+1),RAM(2*N+1),0,RAM)
      DO 10 I=1,N
        RAM(I)=0.5*(RAM(I)+RAM(N+I))
   10 CONTINUE
      CALL FDOUT1(LU,NX-1,NZ-1,1.,'AA13',RAM,RAM(2*N+1))
C
C     Modifying the gridded effective elastic parameters B:
      CALL FDIN1(LU,NX-1,NZ-1,'B13',RAM     ,RAM(2*N+1),0,RAM)
      CALL FDIN1(LU,NX-1,NZ-1,'B31',RAM(N+1),RAM(2*N+1),0,RAM)
      DO 20 I=1,N
        RAM(I)=0.5*(RAM(I)+RAM(N+I))
   20 CONTINUE
      CALL FDOUT1(LU,NX-1,NZ-1,1.,'BB13',RAM,RAM(2*N+1))
C
C     Modifying the gridded effective elastic parameters C:
      CALL FDIN1(LU,NX-1,NZ-1,'C13',RAM     ,RAM(2*N+1),0,RAM)
      CALL FDIN1(LU,NX-1,NZ-1,'C31',RAM(N+1),RAM(2*N+1),0,RAM)
      DO 30 I=1,N
        RAM(I)=0.5*(RAM(I)+RAM(N+I))
   30 CONTINUE
      CALL FDOUT1(LU,NX-1,NZ-1,1.,'CC13',RAM,RAM(2*N+1))
C
      WRITE(*,'(A)') '+NEWPAR: done.                                   '
C
      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
      INCLUDE 'fdaux.for'
C     fdaux.for
      INCLUDE 'gmtra.for'
C     gmtra.for
C
C=======================================================================
C