C
C Program INV1TT to evaluate the derivatives of the travel time with
C respect to the model coefficients.
C
C Version: 5.20
C Date: 1998, August 24
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 Just a preliminary demo version, illustrating the usage of the
C routines designed to calculate the variations of travel times with
C respect to model parameters (FORTRAN77 source code files 'var.for',
C 'spsp.for', 'ap.for').
C
C Program INV1TT assumes all model parameters (coefficients) stored in
C the common block /VALC/ as in the submitted versions of user-defined
C model specification FORTRAN77 source code files 'srfc.for', 'parm.for'
C and 'val.for'. Thus, unlike the other parts of the complete ray
C tracing, the INV1TT program cannot work with user's modifications of
C the subroutines SRFC1, SRFC2, PARM1, and PARM2.
C
C.......................................................................
C
C
C Description of data files:
C
C Main input data file read from the interactive device (*):
C (1) 'INV1TT'
C 'INV1TT' name of the input file described below.
C Default: 'INV1TT'='inv1tt.dat'.
C
C
C Input data INV1TT:
C This main data file contains the names of other input and output
C files. The data are read in by the list directed input (free
C format). In the list of input data below, each numbered paragraph
C indicates the beginning of a new input operation (new READ
C statement). All input variables are of the type CHARACTER. Only
C the first 80 characters of the strings are significant.
C (1) 'MODEL','POINTS','FTT','DATA','INV1LOG',/
C 'MODEL'... Input data file containing the model parameters.
C See the file 'model.for' of the package 'MODEL'.
C Description of MODEL
C 'POINTS'... Input data file containing the coordinates of shot and
C receiver points. Its structure is described below.
C Ignored (not opened) if the DATA filename below is
C blank.
C Description of file POINTS
C 'FTT'... Input data file containing the travel times from the
C field measurements. Its structure is described below.
C Ignored (not opened) if the DATA filename below is
C blank.
C Description of file FTT
C 'DATA'..Output file containing the computed travel times and their
C derivatives with respect to the model coefficients.
C Its structure is described below.
C If the filename is blank, no file with objective prior
C information is generated.
C Description of file DATA
C 'INV1LOG'... Output log file. Just for your information.
C Not opened and generated if the DATA filename above is
C blank.
C Description of file IN1LOG
C /... An obligatory slash at the end of line.
C Default: 'MODEL'='model.dat', 'DATA'='data.out',
C 'INV1LOG'='inv1log.out'.
C (2) DIST,VPOWER,/
C DIST... Maximum distance between the source or receiver point and
C the initial or end point of a synthetic ray.
C VPOWER... Velocity power for the computation of the travel-time
C check sum. If the VPOWER-th velocity power is expressed,
C in all blocks of the model, in terms of explicit functions
C of model coordinates, linearly homogeneous in their
C coefficients (e.g. B-splines), the travel time minus its
C check sum (see the log output file) should be zero within
C rounding errors. Otherwise, the check sum may have no
C sense.
C VPOWER=0: no check sum is evaluated and printed.
C /... An obligatory slash at the end of line.
C Default: VPOWER=0.0.
C (3) Any times the following data:
C 'CRT-R','CRT-S','CRT-I'
C 'CRT-R'... File with the quantities stored along rays (see
C C.R.T.5.5.1).
C Description of file CRT-R
C 'CRT-S'... File with the quantities at the points of
C intersection of rays with the specified surface at which
C the receivers are situated for the case of two-point ray
C tracing (see C.R.T.5.5.2).
C If this filename is not blank, just the two-point rays
C with minimum travel time at each receiver are considered.
C If this filename is blank, all rays are taken into
C account.
C Attention: All rays taken into account must start in some
C of the specified sources and terminate in some of the
C specified receivers, see the input file FTT.
C Description of file CRT-S
C 'CRT-I'... File with the quantities at the initial points
C of rays, corresponding to the above file rays or points of
C intersection (see C.R.T.6.1).
C Description of file CRT-I
C (4) / (a slash).
C Example of data INV1TT
C
C
C Input data file POINTS:
C This data file contains the coordinates of shot and receiver
C points. The data are read in by the list directed input
C (free format). In the list of input data below, each numbered
C paragraph indicates the beginning of a new input operation (new
C READ statement). The CHARACTER strings are explicitly mentioned
C in this description. Otherwise, if the first letter of the
C symbolic name of the input variable is I-N, the corresponding
C value in input data must be of the type INTEGER. Otherwise, the
C input parameter is of the type REAL.
C (1) Several strings terminated by / (a slash).
C (2) List of the sources and receivers: Any times the following data:
C (2.1) POINT,X1,X2,X3
C POINT...CHARACTER*11 string containing the name of the source or
C receiver point.
C X1,X2,X3... Coordinates of the source or receiver point.
C (3) / (a slash) or the end of file.
C Example of data POINTS
C
C
C Input data file FTT:
C This data file contains the travel times from the field
C measurements. The data are read in by the list directed input
C (free format). In the list of input data below, each numbered
C paragraph indicates the beginning of a new input operation (new
C READ statement). The CHARACTER strings are explicitly mentioned
C in this description. Otherwise, if the first letter of the
C symbolic name of the input variable is I-N, the corresponding
C value in input data must be of the type INTEGER. Otherwise, the
C input parameter is of the type REAL.
C (1) Several strings terminated by / (a slash).
C (2) List of the travel times: Any times the following data (2.1):
C (2.1) SOURCE,RECEIVER,TFIELD,TERR
C SOURCE..CHARACTER*11 string containing the name of the source
C point.
C RECEIVER... CHARACTER*11 string containing the name of the
C receiver point. The source and receiver points may be
C mutually interchanged.
C TFIELD..Travel time from a field measurement.
C TERR... Error of the travel time from a field measurement.
C (3) / (a slash) or the end of file.
C Example of data FTT
C
C
C Output file DATA:
C (1) ND,NM,(INDM(I),I=1,NM)
C ND... The number of data (i.e. the number of equations).
C NM... Number of unknown model coefficients.
C INDM... Indices of the model coefficients influencing the travel
C times. The indices correspond to the relative location in
C the memory.
C B-spline coefficients are listed in the same order as the
C grid velocities in the file 'MODEL'.
C (2) ND-times the following data (2.1):
C (2.1) KD,RD,ED,WD,(GD(I),I=1,NM)
C KD... Index of the field travel time within the file 'ftt'.
C The field travel times are indexed consecutively 1,2,3,...
C RD... Field travel time minus the computed synthetic travel
C time. In the case of multiple two-point rays, the first
C arrival of them is considered.
C ED... Prior error of the above travel time difference.
C Identical to TERR, file 'FTT', part (3). I.e. the
C synthetic travel time is assumed to be sufficiently
C accurate.
C WD... Field travel time (stored for the purpose to assess a
C posterior data misfit covariance weighting matrix).
C GD... Derivatives of the synthetic travel time with respect to
C the model coefficients INDM.
C
C
C Output log file INV1LOG:
C (1) For each considered ray:
C (1.1) SOURCE,RECEIVER,TFIELD,TDIF,SDIST,RDIST,CHECK
C SOURCE..Name of the source point.
C RECEIVER... Name of the receiver point.
C TFIELD..Travel time from a field measurement.
C TDIF... Field travel time minus the minimum synthetic travel time.
C SDIST...Distance between the source and the initial point of the
C synthetic ray.
C RDIST...Distance between the receiver and the end point of the
C synthetic ray.
C CHECK...Synthetic travel time minus the travel time resulting from
C the derivatives of the theoretical travel time with
C respect to the model coefficients. This quantity should
C not exceed in order the numerical error of the synthetic
C travel time.
C In this version defined just for the models described in
C the terms of velocity.
C
C-----------------------------------------------------------------------
C
C Common block /VALC/:
INCLUDE 'val.inc'
C val.inc
C None of the storage locations of the common block are altered.
C
C Common block /POINTC/:
INCLUDE 'pointc.inc'
C pointc.inc
C
C-----------------------------------------------------------------------
C
C Common block /RAMC/:
INCLUDE 'ram.inc'
C ram.inc
C
C Allocation of working arrays:
C
INTEGER MP,MT
PARAMETER (MP=1000)
PARAMETER (MT=4000)
CHARACTER*11 POINT(MP)
INTEGER KS(MT),KR(MT)
REAL COOR(3,MP),TFIELD(MT),TERR(MT),TTMIN(MT)
EQUIVALENCE (KS ,RAM )
EQUIVALENCE (KR ,RAM( MT+1))
EQUIVALENCE (TFIELD,RAM(2*MT+1))
EQUIVALENCE (TERR ,RAM(3*MT+1))
EQUIVALENCE (TTMIN ,RAM(4*MT+1))
EQUIVALENCE (COOR ,RAM(5*MT+1))
C
INTEGER INDM(NPAR)
REAL SUM(NPAR)
C INDM... Indices of the unknown model parameters.
EQUIVALENCE (SUM , RAM(5*MT+3*MP+1))
C
C Output data: subjective prior information, working array in SOFT
REAL CS(1)
C
C-----------------------------------------------------------------------
C
C Filenames:
CHARACTER*80 FILE2,FILE0,FILE1,FILE3,FILE4,FILE6
C
C Logical unit numbers:
INTEGER LU0,LU1,LU2,LU3,LU4,LU5,LU7,IU1,IU2
PARAMETER (LU0=10)
PARAMETER (LU1=11)
PARAMETER (LU2=12)
PARAMETER (LU3=13)
PARAMETER (LU4=14)
PARAMETER (LU5=15)
PARAMETER (LU7=17)
C
C Input data:
CHARACTER*1 TEXT(10)
CHARACTER*11 SRC,REC
INTEGER NP,NT
REAL DIST,DIST2,VPOWER
C POINT...Names of the source and receiver points.
C NP... Number of source and receiver points.
C NT... Number of field travel times.
C KS(I)...Index of the source point corresponding to the I-th field
C travel time.
C KR(I)...Index of the receiver point corresponding to the I-th
C field travel time.
C DIST... Maximum distance between the source or receiver point and
C the initial or end point of a synthetic ray.
C DIST2...DIST**2
C VPOWER... Velocity power for the computation of the travel-time
C check SUM.
C COOR... Coordinates of the source or receiver points.
C TFIELD..Field travel times.
C TERR... Field travel time errors.
C
C Output data: variations of the synthetic travel time:
INTEGER NSUM,NM
C NM... Number of the unknown model parameters.
C
C Auxiliary storage locations:
INTEGER IS,IR,IT,ND,IRAYTT,I,J,K
REAL TT,TTAUX,TDIF,XI1,XI2,XI3,XE1,XE2,XE3,PI(6),PE(6)
REAL SI,SE,RI,RE,SDIST,RDIST
C IS... Index of the source point.
C IR... Index of the receiver point.
C IT... Index of the field travel time.
C ND... Number of synthetic travel times corresponding to the
C field travel times.
C IRAYTT..Index of the last processed ray.
C I,J,K...Temporary storage locations.
C TTMIN...Minimum synthetic travel times corresponding to the
C individual field travel times.
C TT... Synthetic travel time.
C TTAUX...Temporary storage location.
C TDIF... Field travel time minus the minimum synthetic travel time.
C XI1,XI2,XI3,XE1,XE2,XE3... Coordinates of the initial and end
C points of the last processed ray.
C PI,PE...Slowness vectors at the initial and end points of the
C last processed ray.
C SI,SE,RI,RE... Squares of the distances between the source or
C receiver points and the initial or end points of the ray.
C SDIST...Distance between the source and the initial point of the
C synthetic ray.
C RDIST...Distance between the receiver and the end point of the
C synthetic ray.
C
C.......................................................................
C
C Opening data files and reading the input data:
C
C Main input data file read from the interactive device (*):
WRITE(*,'(A)') ' Enter the name of the main input data file: '
FILE0='inv1.dat'
READ(*,*) FILE0
WRITE(*,'(A)') '+ '
C
C Input data INV1TT:
OPEN(LU0,FILE=FILE0,STATUS='OLD')
FILE2='model.dat'
FILE4='data.out'
FILE6='inv1log.out'
READ(LU0,*) FILE2,FILE0,FILE1,FILE4,FILE6
VPOWER=0.
READ(LU0,*) DIST,VPOWER
DIST2=DIST*DIST
OPEN(LU4,FILE=FILE2,STATUS='OLD')
CALL MODEL1(LU4)
CLOSE(LU4)
C
C Number of unknown model parameters:
CALL SOFT(2,0,0,0,0,0,0,0.,NM,INDM,CS,1,CS)
WRITE(*,'(A,I4,A)') '+',NM,' model parameters'
C
C.......................................................................
C
C Reading source and receiver points:
C
OPEN(LU4,FILE=FILE0,STATUS='OLD')
NP=-1
READ(LU4,*,END=2) TEXT
1 CONTINUE
NP=NP+1
IF(NP.GE.MP) THEN
C INV1TT-01
CALL ERROR('INV1TT-01: Too many source and receiver points')
END IF
POINT(NP+1)=' '
READ(LU4,*,END=2) POINT(NP+1),(COOR(I,NP+1),I=1,3)
IF(POINT(NP+1).NE.' ') GO TO 1
2 CONTINUE
CLOSE(LU4)
C
C Reading field travel times:
C
OPEN(LU4,FILE=FILE1,STATUS='OLD')
NT=0
READ(LU4,*,END=2) TEXT
3 CONTINUE
NT=NT+1
IF(NT.GT.MT) THEN
C INV1TT-02
CALL ERROR('INV1TT-02: Too many field travel times')
END IF
SRC=' '
READ(LU4,*,END=9) SRC,REC,TFIELD(NT),TERR(NT)
IF(SRC.EQ.' ') THEN
GO TO 9
END IF
DO 4 I=1,NP
IF(SRC.EQ.POINT(I)) THEN
KS(NT)=I
GO TO 5
END IF
4 CONTINUE
C INV1TT-03
CALL ERROR('INV1TT-03: Source name not recognized')
5 CONTINUE
DO 6 I=1,NP
IF(REC.EQ.POINT(I)) THEN
KR(NT)=I
GO TO 7
END IF
6 CONTINUE
C INV1TT-04
CALL ERROR('INV1TT-04: Receiver name not recognized')
7 CONTINUE
GO TO 3
9 CONTINUE
NT=NT-1
CLOSE(LU4)
C
C.......................................................................
C
C Computing quantities describing objective prior information:
C
OPEN(LU5,STATUS='SCRATCH',FORM='UNFORMATTED')
OPEN(LU7,FILE=FILE6)
WRITE(*,*)
C
KS(NT+1)=NP+1
KR(NT+1)=NP+1
TFIELD(NT+1)=0.
IRAY=0
IWAVE=0
NSUM=IPAR(IPAR(IPAR(2)))
DO 12 I=1,NT
TTMIN(I)=999999.
12 CONTINUE
C
C Loop for the files with computed rays
20 CONTINUE
FILE1=' '
READ(LU0,*,END=70) FILE1,FILE2,FILE3
IF(FILE1.EQ.' ') THEN
GO TO 70
END IF
I=INDEX(FILE1,' ')
J=INDEX(FILE2,' ')
K=INDEX(FILE3,' ')
WRITE(*,'(''+Processing: '',3A)') FILE1(1:I),FILE2(1:J),
* FILE3(1:K)
WRITE(*,*)
OPEN(LU1,FILE=FILE1,FORM='UNFORMATTED',STATUS='OLD')
IF(FILE2.EQ.' ') THEN
IU1=0
IU2=LU1
ELSE
IU1=LU1
IU2=LU2
OPEN(LU2,FILE=FILE2,FORM='UNFORMATTED',STATUS='OLD')
END IF
OPEN(LU3,FILE=FILE3,FORM='UNFORMATTED',STATUS='OLD')
IRAYTT=0
C
C Loop for the points of intersection of rays with the surface
30 CONTINUE
C Reading the results of the complete ray tracing
CALL AP00(IU1,IU2,LU3)
IF(IPT.LE.1.AND.IRAYTT.NE.0)THEN
C New ray - recording results for the last ray iraytt
C loop for field travel times - searching for two-point ray
DO 39 IT=1,NT
IS=KS(IT)
IR=KR(IT)
SI=(COOR(1,IS)-XI1)**2+(COOR(2,IS)-XI2)**2
* +(COOR(3,IS)-XI3)**2
RI=(COOR(1,IR)-XI1)**2+(COOR(2,IR)-XI2)**2
* +(COOR(3,IR)-XI3)**2
SE=(COOR(1,IS)-XE1)**2+(COOR(2,IS)-XE2)**2
* +(COOR(3,IS)-XE3)**2
RE=(COOR(1,IR)-XE1)**2+(COOR(2,IR)-XE2)**2
* +(COOR(3,IR)-XE3)**2
IF(SE.LE.SI.AND.RI.LE.RE) THEN
C interchanging source and receiver points
SI=SE
RE=RI
IS=KR(IT)
IR=KS(IT)
END IF
IF((SI.LE.DIST2.AND.RE.LE.DIST2)) THEN
C Synthetic ray may correspond to the field travel time
C check for ray directions near the source
C (allowable angle deviation +-30 deg: cosine**2=0.750)
C (allowable angle deviation +-15 deg: cosine**2=0.933)
TTAUX=(COOR(1,IR)-COOR(1,IS))*(XE1-XI1)
* +(COOR(2,IR)-COOR(2,IS))*(XE2-XI2)
* +(COOR(3,IR)-COOR(3,IS))*(XE3-XI3)
IF(TTAUX.GT.0..AND.TTAUX*TTAUX.GT.
* 0.933*((COOR(1,IR)-COOR(1,IS))**2
* +(COOR(2,IR)-COOR(2,IS))**2
* +(COOR(3,IR)-COOR(3,IS))**2)
* *((XE1-XI1)**2+(XE2-XI2)**2+(XE3-XI3)**2) ) THEN
C Synthetic ray corresponds to the field travel time
TTAUX=TT-PI(1)*(COOR(1,IS)-XI1)
* -PI(2)*(COOR(2,IS)-XI2)
* -PI(3)*(COOR(3,IS)-XI3)
* +PE(1)*(COOR(1,IR)-XE1)
* +PE(2)*(COOR(2,IR)-XE2)
* +PE(3)*(COOR(3,IR)-XE3)
IF(TTAUX.LT.TTMIN(IT)) THEN
TTMIN(IT)=TTAUX
C Possible minimum synthetic travel time
SDIST=SQRT(SI)
RDIST=SQRT(RE)
WRITE(LU5) IT,TT,TTAUX,SDIST,RDIST,(SUM(I),I=1,NSUM)
END IF
END IF
END IF
39 CONTINUE
IF(NT.EQ.0) THEN
WRITE(LU5) NT+1,TT,TT,0.,0.,(SUM(I),I=1,NSUM)
END IF
IRAYTT=0
END IF
IF(IWAVE.EQ.0) THEN
GO TO 60
END IF
C *** for future extensions (selection of two-point rays):
C IF(IU1.NE.0) THEN
C CALL AP30(IREC)
C IF(IREC.EQ.0) THEN
C IF(IPT.LE.1.) THEN
C WRITE(*,'(''+WAVE:'',I3,'' RAY:'',I4,'' POINT:'',
C * I4)') IWAVE,IRAY,IPT
C END IF
C GO TO 30
C END IF
C END IF
C ***
IF(IPT.EQ.1.OR.MOD(IPT,10).EQ.0) THEN
WRITE(*,'(''+WAVE:'',I3,'' RAY:'',I4,'' POINT:'',I4)')
* IWAVE,IRAY,IPT
END IF
IRAYTT=IRAY
XI1=YI(3)
XI2=YI(4)
XI3=YI(5)
XE1=Y(3)
XE2=Y(4)
XE3=Y(5)
CALL AP01(TT,TTAUX)
CALL AP02(PI,PE)
CALL AP29(NSUM,SUM)
GO TO 30
C End of the loop for points of intersection of rays with surface
C
60 CONTINUE
CLOSE(LU1)
CLOSE(LU2)
GO TO 20
C
C All minimum travel times and their derivatives are stored in the
C scratch file LU5.
C
C.......................................................................
C
C Writing objective prior information:
C
70 CONTINUE
OPEN(LU4,FILE=FILE4)
I=MAX0(INDEX(FILE4,' ')-1,11)
WRITE(*,'(''+Generating the output: '',A)') FILE4(1:I)
ND=0
DO 71 I=1,NT
IF(TTMIN(I).LT.999999.) THEN
ND=ND+1
END IF
71 CONTINUE
C ND is the number of equations.
C
REWIND(LU5)
WRITE(LU4,'(I9,5I13)') ND,NM
WRITE(LU4,'(I9,5I13)') (INDM(I),I=1,NM)
WRITE(LU7,'(2A)') ' SOURCE RECEIVER TFIELD ',
* 'TFIELD-TT SDIST RDIST TT-CHECKSUM'
73 CONTINUE
READ(LU5,END=79) IT,TT,TTAUX,SDIST,RDIST,(SUM(I),I=1,NSUM)
TTMIN(NT+1)=TTAUX
IF(TTAUX.EQ.TTMIN(IT)) THEN
C Minimum synthetic travel time
C
C System of linear equations:
TDIF=TFIELD(IT)-TTAUX
WRITE(LU4,'(I9,4X,6G13.6)') IT,TDIF,TERR(IT),TFIELD(IT)
WRITE(LU4,'(6G13.6)') (SUM(INDM(I)),I=1,NM)
C
C Check sums and log output:
IF(VPOWER.NE.0.) THEN
TTAUX=0.
DO 74 I=1,NM
J=INDM(I)
IF(IPAR(IPAR(IPAR(1))).LT.J) THEN
IF(SUM(J).NE.0.) THEN
TTAUX=TTAUX+RPAR(J)*SUM(J)
END IF
END IF
74 CONTINUE
IS=KS(IT)
IR=KR(IT)
TTAUX=TT+VPOWER*TTAUX
WRITE(LU7,'(2(1X,A),5F12.6)') POINT(IS),POINT(IR),
* TFIELD(IT),TDIF,SDIST,RDIST,TTAUX
ELSE
WRITE(LU7,'(2(1X,A),5F12.6)') POINT(IS),POINT(IR),
* TFIELD(IT),TDIF,SDIST,RDIST
END IF
END IF
GO TO 73
C
79 CONTINUE
CLOSE(LU4)
CLOSE(LU5)
CLOSE(LU7)
STOP
END
C
C=======================================================================
C
INCLUDE 'error.for'
C error.for
INCLUDE 'modelv.for'
C modelv.for
INCLUDE 'metric.for'
C metric.for
INCLUDE 'srfc.for'
C srfc.for
INCLUDE 'parmv.for'
C parmv.for
INCLUDE 'valv.for'
C valv.for
INCLUDE 'fitv.for'
C fitv.for
INCLUDE 'var.for'
C var.for
INCLUDE 'spsp.for'
C spsp.for
INCLUDE 'soft.for'
C soft.for
INCLUDE 'means.for'
C means.for
INCLUDE 'ap.for'
C ap.for
INCLUDE 'apvar.for'
C apvar.for
C
C=======================================================================
C