C
C Program CRTCART converting the rays calculated by program CRT from
C curvilinear to Cartesian coordinates.
C
C Version: 5.20
C Date: 1998, February 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 E-mail: klimes@seis.karlov.mff.cuni.cz
C
C.......................................................................
C
C
C Description of data files:
C
C Main input data read from external interactive device (*):
C The data consist of character strings, read by list directed (free
C format) input. The strings have thus to be enclosed in
C apostrophes. The interactive * external unit may be redirected to
C the file containing the data.
C (1) 'MODEL','RAYALL','INIALL','RAY2P','INI2P',/
C 'MODEL'... Formatted file with the input data for the model.
C Only integer KOORS specifying the type of the coordinate
C system is read from data file MODEL.
C 'RAYALL'... Input file CRT-R with the quantities stored along rays
C (see C.R.T.5.5.1), or input file CRT-S with the quantities
C stored at the specified surfaces (see C.R.T.5.5.2).
C 'INIALL'... Input file CRT-I with the quantities at the initial
C points of rays, corresponding to file RAYALL (see
C C.R.T.6.1).
C 'RAY2P'... Output file CRT-R or CRT-S, with the quantities
C corresponding to the 2-point rays only.
C 'INI2P'... Output file CRT-I with the quantities at the initial
C points of 2-point rays, corresponding to file RAY2P (see
C C.R.T.6.1).
C Default: 'MODEL'='model.dat', 'RAYALL'='r01.out', 'INIALL'='r01i.out',
C 'RAY2P'='ray2p.out', 'INI2P'='ini2p.out'.
C
C Formatted file MODEL:
C See the description within source code file 'model.for'.
C Description of data MODEL
C
C Unformatted files RAYALL and RAY2P:
C See the description within source code file 'writ.for'.
C Description of files CRT-R
C Description of files CRT-S
C
C Unformatted files INIALL and INI2P:
C See the description within source code file 'writ.for'.
C Description of files CRT-I
C
C-----------------------------------------------------------------------
C
C Common block /POINTC/ to store the results of complete ray tracing:
INCLUDE 'pointc.inc'
C pointc.inc
C None of the storage locations of the common block are altered.
C
C Subroutines and external functions required:
EXTERNAL AP00
C AP00... File 'ap.for'.
C
C-----------------------------------------------------------------------
C
C Auxiliary storage locations:
INTEGER LU1,LU2,LU3,LU4,I
PARAMETER (LU1=1,LU2=2,LU3=3,LU4=4)
CHARACTER*80 FILE0,FILE1,FILE2,FILE3,FILE4
CHARACTER*1 TEXTM
C
C.......................................................................
C
C Opening input and output files:
FILE0='model.dat'
FILE1='r01.out'
FILE2='r01i.out'
FILE3='ray2p.out'
FILE4='ini2p.out'
WRITE(*,'(2A)')
* ' Enter 4 filenames',
* ' (model.dat, r01.out, r01i.out, ray2p.out, ini2p.out): '
READ(*,*) FILE0,FILE1,FILE2,FILE3,FILE4
OPEN(LU1,FILE=FILE0,STATUS='OLD')
READ(LUN,*) TEXTM
I=0
READ(LUN,*) I
CALL METR1(I)
CLOSE(LU1)
OPEN(LU1,FILE=FILE1,FORM='UNFORMATTED',STATUS='OLD')
OPEN(LU2,FILE=FILE2,FORM='UNFORMATTED',STATUS='OLD')
OPEN(LU3,FILE=FILE3,FORM='UNFORMATTED')
OPEN(LU4,FILE=FILE4,FORM='UNFORMATTED')
C
C Loop for the points of rays
10 CONTINUE
C Reading the results of the complete ray tracing
CALL AP00(0,LU1,LU2)
IF(IWAVE.LT.1)THEN
C End of rays
GO TO 80
END IF
C Conversion to Cartesian coordinates
CALL TOCART(Y,YL)
WRITE(LU3) IWAVE,IRAY,NY,ICB1,ISRF,X,YL,(Y(I),I=1,NY)
IF(IPT.LE.1)THEN
C New ray - recording the initial point
CALL TOCART(YI,YLI)
WRITE(LU4) -IWAVE,IRAY,ICB1I,IEND,ISHEET,IREC,YLI,YI
END IF
GO TO 10
C
80 CONTINUE
CLOSE(LU1)
CLOSE(LU2)
CLOSE(LU3)
CLOSE(LU4)
STOP
END
C
C=======================================================================
C
C
C
SUBROUTINE TOCART(Y,YL)
REAL Y(11),YL(6)
C
C This subroutine transforms points, slowness vectors, R.C.C.S. basis
C vector and velocity gradient from the model coordinates to Cartesian
C coordinates.
C
C Input and output:
C Y... Array containing basic quantities computed along the ray
C (C.R.T.5.2.1).
C Description of Y
C YL... Array containing local quantities at the point of the ray
C (C.R.T.5.5.4).
C Description of YL
C
C Subroutines and external functions required:
EXTERNAL CARTES
C
C Date: 1998, February 28
C Coded by Ludek Klimes
C
C-----------------------------------------------------------------------
C
C Auxiliary storage locations:
REAL CART(3),CART1,CART2,CART3
REAL PDER(9),PDER1,PDER2,PDER3,PDER4,PDER5,PDER6,PDER7,PDER8,PDER9
EQUIVALENCE (CART(1),CART1),(CART(2),CART2),(CART(3),CART3)
EQUIVALENCE (PDER(1),PDER1),(PDER(2),PDER2),(PDER(3),PDER3)
EQUIVALENCE (PDER(4),PDER4),(PDER(5),PDER5),(PDER(6),PDER6)
EQUIVALENCE (PDER(7),PDER7),(PDER(8),PDER8),(PDER(9),PDER9)
C
C.......................................................................
C
C Conversion of model coordinates to Cartesian coordinates CART:
CALL CARTES(Y(3),.TRUE. ,CART,PDER)
C Transposed transformation matrix PDER of covariant vectors:
CALL CARTES(Y(3),.FALSE.,CART,PDER)
C
C Transformations:
Y( 3)=CART1
Y( 4)=CART2
Y( 5)=CART3
CART1=PDER1*Y( 6)+PDER2*Y( 7)+PDER3*Y( 8)
CART2=PDER4*Y( 6)+PDER5*Y( 7)+PDER6*Y( 8)
CART3=PDER7*Y( 6)+PDER8*Y( 7)+PDER9*Y( 8)
Y( 6)=CART1
Y( 7)=CART2
Y( 8)=CART3
CART1=PDER1*Y( 9)+PDER2*Y(10)+PDER3*Y(11)
CART2=PDER4*Y( 9)+PDER5*Y(10)+PDER6*Y(11)
CART3=PDER7*Y( 9)+PDER8*Y(10)+PDER9*Y(11)
Y( 9)=CART1
Y(10)=CART2
Y(11)=CART3
CART1=PDER1*YL(4)+PDER2*YL(5)+PDER3*YL(6)
CART2=PDER4*YL(4)+PDER5*YL(5)+PDER6*YL(6)
CART3=PDER7*YL(4)+PDER8*YL(5)+PDER9*YL(6)
YL(4)=CART1
YL(5)=CART2
YL(6)=CART3
END
C
C=======================================================================
C
INCLUDE 'error.for'
C error.for
INCLUDE 'metric.for'
C metric.for
INCLUDE 'ap.for'
C ap.for
C
C=======================================================================
C