PROGRAM   S M O O T H
*********************

PROGRAM SMOOTH IS DESIGNED FOR GENERATION OF SMOOTH VELOCITY
INPUT DATA FOR PROGRAM SEIS OR OTHER PROGRAMS WITH THE SAME
STRUCTURE OF INPUT DATA FOR VELOCITY DISTRIBUTION.

***************************************************************

SHORT DESCRIPTION OF THE PROGRAM.
*********************************

  PROGRAM SMOOTH TRANSFORMS AND SMOOTHES VELOCITY DATA DESCRIBING 
VELOCITY DISTRIBUTION IN ANY LAYER OF A 2-D LATERALLY VARYING 
LAYERED MODEL. THE INPUT VELOCITIES MAY BE SPECIFIED AT
ARBITRARY DEPTHS ON VERTICAL LINES OF A 2-D RECTANGULAR NETWORK
COVERING THE LAYER. THESE DEPTHS MAY BE DIFFERENT FOR DIFFERENT
NETWORK LINES. PROGRAM SMOOTH RETURNS THE SMOOTHED VELOCITY
VALUES AT GRID POINTS OF THE 2-D RECTANGULAR NETWORK IN THE
FORM OF INPUT DATA FOR PROGRAM SEIS83 (FOR MM=0 OR 2, SEE 
DESCRIPTION OF INPUT DATA IN SEIS).
  TWO TYPES OF DATA ARE MOST COMMONLY USED AS INPUT DATA FOR
PROGRAM SMOOTH:
  A) GRAPHS OF VELOCITY DEPTH VARIATIONS FOR DIFFERENT 
     X-COORDINATES ALONG THE PROFILE.
  B) MAPS OF VELOCITY ISOLINES.

  THE ALGORITHM USED IN THE PROGRAM SMOOTH FOR ANY LAYER CAN BE
DIVIDED INTO TWO STEPS:
  A) IN THE FIRST STEP LINEAR INTERPOLATION (OR EXTRAPOLATION,
IF NECESSARY) IS USED ALONG VERTICAL LINES OF THE VELOCITY NETWORK 
TO DETERMINE THE VELOCITY VALUES AT THE GRID POINTS OF 
THE RECTANGULAR NETWORK.
  B) IN THE SECOND STEP, THE SMOOTHED SPLINE ALGORITHM IS APPLIED 
TO SMOOTH DATA OBTAINED IN STEP 1. FOR THE DETAILED DESCRIPTION 
OF THE ALGORITHM USED FOR SMOOTHED 2-D SPLINES SEE:
  V.PRETLOVA: BICUBIC SPLINE SMOOTHING OF TWO-DIMENSIONAL 
  GEOPHYSICAL DATA. STUDIA GEOPH.ET GEOD.,20 (1976),168-177.

  FOR THE INSPECTION OF THE VELOCITY DISTRIBUTION GENERATED
BY THE PROGRAM SMOOTH FOR A LAYER, A PRINTER PLOT OF THE VELOCITY 
DISTRIBUTION IN THE LAYER MAY BE PRINTED ON THE LINE PRINTER IN 
THE SAME WAY AS THE PRINTER PLOT OF THE WHOLE MODEL IN PROGRAM 
SEIS. FOR SPECIFIED RANGES OF VELOCITIES, DIFFERENT DIGITS ARE 
PRINTED. IN THIS WAY, THE BOUNDARIES BETWEEN REGIONS COVERED BY 
DIFFERENT DIGITS REPRESENT ISOLINES OF VELOCITY.
  SMOOTHING OF VELOCITY DATA FOR SEVERAL LAYERS MAY BE PERFORMED 
WITHIN ONE RUN OF PROGRAM SMOOTH. IN THIS WAY THE GENERATED FILE 
WITH SMOOTHED VELOCITY VALUES FOR ALL LAYERS OF A 2-D LAYERED 
MODEL CAN BE DIRECTLY USED AS AN INPUT FILE IN THE PROGRAM PACKAGE 
SEIS OR ANY OTHER PROGRAM WITH THE SAME STRUCTURE OF INPUT 
VELOCITY DATA.

  PROGRAM SMOOTH IS A GENERAL-PURPOSE PROGRAM. IT CAN BE USED ALSO
IN MANY OTHER APPLICATIONS, WHERE IT IS NECESSARY TO FIND A 2-D
SMOOTHED APPROXIMATION OF DATA SPECIFIED REGULARLY OR IRREGULARLY
ALONG A SYSTEM OF LINES OF A 2-D RECTANGULAR NETWORK.

  THE PROCEDURE FOR BICUBIC SPLINE SMOOTHING WAS WRITTEN BY
V.PRETLOVA, 1980.

***************************************************************

INPUT DATA (THE INPUT DATA ARE READ IN FROM STANDARD INPUT BY 
LIST-DIRECTED INPUT (FREE FORMAT):
***************************************************************

1) ONE CARD
   LU,MTEXT                         FORMAT(I2,20A4)
      LU...     NUMBER OF FILE IN WHICH THE SMOOTHED VELOCITY 
                VALUES CORRESPONDING TO THE GRID POINTS OF 
                THE RECTANGULAR NETWORK ARE STORED. THE FILE 
                CAN BE USED IN THE PROGRAM PACKAGE SEIS OR 
                IN ANY OTHER PROGRAM WITH THE SAME STRUCTURE 
                OF INPUT VELOCITY DATA. FOR DETAILS SEE 
                THE DESCRIPTION OF THE OUTPUT FILE.
      MTEXT...  AN ARBITRARY ALPHANUMERIC TEXT DESCRIBING
                APPROXIMATED MODEL.

2) ONE CARD
   M,N,IPRINT,DELTA               FORMAT(3I5,F10.5)
      M...      NUMBER OF VERTICAL LINES IN THE RECTANGULAR 
                NETWORK (M.GT.2, M.LE.30).
      N...      NUMBER OF HORIZONTAL LINES IN THE RECTANGULAR 
                NETWORK (N.GT.2, N.LE.30).
      IPRINT... CONTROLS THE OUTPUT OF RESULTS ON THE LINE PRINTER:
             IPRINT=0... ONLY INPUT DATA ARE PRINTED ON 
                A LINE PRINTER.
             IPRINT=1... THE SAME AS FOR IPRINT=0 PLUS THE PRINTER 
                PLOT OF THE VELOCITY DISTRIBUTION FOR THE GIVEN 
                LAYER IS PRINTED.
             IPRINT>1... THE SAME AS FOR IPRINT=1 PLUS
                THE VELOCITY VALUES AT THE SPECIFIED GRID
                POINTS OF A RECTANGULAR NETWORK ARE PRINTED
                ON A LINE PRINTER. TWO TABLES ARE PRINTED:
                A) THE TABLE OF VELOCITY VALUES AT GRID
                   POINTS OBTAINED BY THE LINEAR INTERPOLATION
                   (EXTRAPOLATION) ALONG THE VERTICAL LINES
                   OF THE NETWORK.
                B) THE TABLE OF SMOOTHED VELOCITY VALUES
                   OBTAINED BY THE SMOOTHED BICUBIC SPLINE
                   ALGORITHM FROM DATA A).
      DELTA...  PARAMETER CONTROLLING THE EXTENT OF SMOOTHING.
                IT CONTROLS THE GLOBAL ACCURACY OF THE VELOCITY 
                DETERMINATION IN KM/S. FOR DELTA.LT.000001, 
                NO SMOOTHING IS PERFORMED, ONLY TRANSFORMATION 
                OF DATA INTO THE GRID POINTS OF A RECTANGULAR 
                NETWORK IS PERFORMED (PRINTER PLOT CORRESPONDS 
                TO INTERPOLATING BICUBIC SPLINES).
                RECOMMENDED VALUES: FOR AVERAGE SMOOTHING,
                USE DELTA EQUAL APPROXIMATELY TO 0.01.
                FOR LARGE SMOOTHING, USE DELTA AROUND 0.1.
                FOR VERY SLIGHT SMOOTHING, USE DELTA AROUND 0.001. 
                IN THE LATTER CASE AND FOR DELTA SMALLER THAN 0.001 
                THE SMOOTHED SPLINE APPROXIMATION PRACTICALLY 
                CORRESPONDS TO THE SPLINE INTERPOLATION.
  NOTE1: FOR VERY SMALL VALUES OF DELTA, THERE IS A DANGER  
OF EXPRESSIVE OSCILLATIONS OF THE VELOCITY DISTRIBUTION.
  NOTE2: DELTA HAS A GLOBAL CHARACTER. THUS, AT INDIVIDUAL POINTS 
THE DIFFERENCE BETWEEN THE VELOCITY VALUES OBTAINED BY THE LINEAR 
INTERPOLATION (EXTRAPOLATION) AND BY THE SMOOTHED SPLINE ALGORITHM 
MAY EXCEED DELTA.

3) ONE CARD
   INCLUDED ONLY IF IPRINT.NE.0.
   NIZ                                FORMAT(I5)
       NIZ...    CONTROLS THE PRINTER PLOT OF SMOOTHED 2-D
                 VELOCITY DISTRIBUTION ON A LINE PRINTER.
                 IT GIVES NUMBER OF ISOLINES TO BE SHOWN IN
                 THE PRINTER PLOT. REMEMBER THAT THE ISOLINES 
                 ARE SHOWN AS THE BOUNDARIES BETWEEN REGIONS 
                 COVERED BY DIFFERENT DIGITS STARTING FROM 0. 
                 USE NIZ.LE.10.

4) ONE CARD
   INCLUDED ONLY IF IPRINT.NE.0.
   FIZ(I),I=1,...,NIZ                  FORMAT(16F5.1)
      FIZ...    CONTROL THE PRINTER PLOT OF SMOOTHED 2-D VELOCITY 
                DISTRIBUTION ON A LINE PRINTER. FIZ(I) GIVES 
                THE VALUE OF VELOCITY ON THE I-TH ISOLINE OF 
                VELOCITY. USE FIZ(I).GT.FIZ(I-1) FOR I=2,3,...NIZ.

5) ONE CARD (OR GROUP OF CARDS)
   X(I),I=1,...,M                       FORMAT(16F5.1)
      X(I)...   X-COORDINATE OF THE I-TH VERTICAL LINE OF 
                THE NETWORK. NOTE THAT X(1) SPECIFIES THE LEFT-HAND 
                BOUNDARY AND X(M) SPECIFIES THE RIGHT-HAND BOUNDARY 
                OF THE 2-D RECTANGULAR NETWORK. IF THE PROGRAM SMOOTH 
                IS USED FOR SMOOTHING VELOCITY DATA FOR PROGRAM 
                PACKAGE SEIS83 OR ANY OTHER SIMILAR PROGRAM, X(1) AND 
                X(M) MUST BE SPECIFIED THE SAME FOR ALL LAYERS.

6) ONE CARD (OR GROUP OF CARDS)
   Y(I),I=1,...,N                       FORMAT(16F5.1)
      Y(I)...   Z-COORDINATE (DEPTH) OF THE I-TH HORIZONTAL
                LINE OF THE NETWORK.
                NOTE THAT Y(1) SPECIFIES THE UPPER BOUNDARY
                AND Y(N) SPECIFIES THE LOWER BOUNDARY OF THE
                2-D RECTANGULAR NETWORK.
                IF THE PROGRAM SMOOTH IS USED FOR SMOOTHING
                VELOCITY DATA FOR PROGRAM PACKAGE SEIS83
                OR ANY OTHER SIMILAR PROGRAM, Y(1) AND Y(N)
                MUST BE CHOSEN IN SUCH A WAY THAT THE NETWORK 
                COVERS THE WHOLE LAYER UNDER CONSIDERATION. 
                IF THE INTERFACES BOUNDING THE LAYER ARE CURVED, 
                THEN THE HORIZONTAL LINES OF THE NETWORK Y(1) AND 
                Y(N) MUST NOT INTERSECT THE INTERFACES AND MUST BE 
                FULLY SITUATED OUTSIDE THE LAYER.

7) ONE CARD
   NN(I),I=1,...,M                      FORMAT(26I3)
      NN(I)...  NUMBER OF Z-COORDINATES ALONG THE I-TH VERTICAL
                NETWORK LINE AT WHICH THE VELOCITY VALUES ARE
                SPECIFIED. THE SAME VERTICAL NETWORK LINES AS
                IN THE RECTANGULAR NETWORK X,Y, SEE CARDS 5,6,
                ARE USED HERE. THE Z-COORDINATES MAY, OF COURSE,
                DIFFER FROM COORDINATES Y(I), CORRESPONDING TO
                THE HORIZONTAL LINES OF THE RECTANGULAR NETWORK.
                IF THE NUMBERS NN(I) ARE THE SAME FOR ALL THE
                VERTICAL LINES, IT IS SUFFICIENT TO SPECIFY
                ONLY NN(1). NN(I) WILL BE AUTOMATICALLY PUT
                EQUAL TO NN(1).
  NOTE: IF THE PROGRAM SMOOTH IS USED FOR SMOOTHING DATA FOR 
PROGRAM PACKAGE SEIS, THE VELOCITY VALUES SHOULD BE SPECIFIED 
ONLY AT THOSE POINTS ON VERTICAL NETWORK LINES WHICH ARE SITUATED 
INSIDE THE LAYER OR AT THE LAYER INTERFACES, NOT OUTSIDE THE LAYER. 
A LINEAR EXTRAPOLATION IS USED IN THE PROGRAM SMOOTH TO FIND 
THE VELOCITY VALUES AT GRID POINTS SITUATED OUTSIDE THE LAYER.

8) A SYSTEM OF CARDS
   ((F(I,J),HY(J),J=1,N1),I=1,M)           FORMAT(16F5.1)
      F(I,J), HY(J)... Z-COORDINATE AND THE VELOCITY VALUE
                AT THE J-TH POINT ON THE I-TH VERTICAL GRID
                LINE. N1=NN(I), SEE 7 FOR NN(I).

******************************************************************

TERMINATION OF COMPUTATIONS
***************************

  AN ARBITRARY NUMBER OF SYSTEMS OF DATA TO BE SMOOTHED CAN BE
EVALUATED WITHIN ONE RUN OF PROGRAM SMOOTH. FOR EACH SYSTEM,
DATA 2-8 MUST BE READ IN. TO TERMINATE THE COMPUTATIONS, INSERT
TWO BLANK CARDS BEYOND THE LAST SYSTEM.

******************************************************************

NOTE

  IN THE FILE LU GENERATED FOR INPUT FOR PROGRAM SEIS, THE TOTAL
NUMBER OF VERTICAL LINES IN ALL LAYERS MUST NOT EXCEED 350. 
SIMILARLY, THE TOTAL NUMBER OF ALL HORIZONTAL LINES IN ALL LAYERS 
MUST NOT EXCEED 350. FINALLY, THE TOTAL NUMBER OF ALL GRID POINTS 
(IN ALL THE LAYERS) MUST NOT EXCEED 1000.

******************************************************************

THE OUTPUT ON A FILE LU
***********************

  THE OUTPUT ON THE FILE LU CORRESPONDS EXACTLY TO THE REQUIREMENTS
ON THE SPECIFICATION OF VELOCITY DISTRIBUTION IN THE PROGRAM PACKAGE 
SEIS, SEE SUB 4 (FOR MM=0 AND 2) IN DESCRIPTION OF INPUT DATA
FOR PROGRAM SEIS.
  FOR EACH LAYER, THE FILE LU CONTAINS THE FOLLOWING DATA SPECIFIED 
IN A FORMATTED FORM):
A) M,N                          FORMAT(2I5)
B) X(1),X(2),...,X(M)           FORMAT(8F10.5)
C) Y(1),Y(2),...,Y(N)           FORMAT(8F10.5)
D) THE VELOCITY VALUES AT GRID POINTS ALONG THE VERTICAL NETWORK LINES 
   (FROM THE TOP TO THE BOTTOM). FOR EACH VERTICAL LINE, N VALUES 
   OF VELOCITY ARE GIVEN, FORMAT (8F10.5). THE VERTICAL LINES ARE 
   TAKEN FROM THE LEFT TO THE RIGHT.

*******************************************************************