C
C File 'crtin.for' for reading the input data for complete ray tracing
C
C Date: 1997, September 25
C Coded by Ludek Klimes
C
C.......................................................................
C
C This file consists of:
C CRTIN...Subroutine designed to open the data files for complete
C ray tracing and to read the input data sets CRT, MODEL,
C DCRT and INIT.
C CRTIN
C UNIT... Subroutine designed to control connecting and
C disconnecting the data files to logical units, and to
C determine the logical units from which the given data sets
C are to be read. Called e.g. by the subroutine CRTIN.
C UNIT
C
C.......................................................................
C
C
C Description of data files:
C
C Input data - main data set CRT:
C This main data file contains the names of other input files and
C the name of the output log file. It may or may not contain other
C input data. The names of the output files with the computed
C quantities (C.R.T.5.5) are specified in the subroutine file
C 'writ.for'.
C The data are read in by the list directed input (free format). In
C the list of input data below, each numbered paragraph indicates
C the beginning of a new input operation (new READ statement). All
C input variables are of the type CHARACTER. Only the first 80
C characters of the strings are significant.
C (1) TEXT
C The string describing the input data.
C (2) FILE(2)...data set MODEL
C The string containing the name of the file with the input data for
C the model. The data will be read in by the subroutine MODEL1.
C If FILE(2) is blank, data set MODEL is appended to this file.
C Description of data MODEL
C It is recommended to define only surfaces covering structural
C interfaces (MODEL SURFACES) in data set MODEL, and to define
C AUXILIARY SURFACES in data set DCRT.
C (3) FILE(3)...data set DCRT
C The string containing the name of the file with the input data for
C the complete ray tracing. The data will be read in by the
C subroutine RAY1.
C If FILE(3) is blank, data set DCRT is appended to this file.
C Description of data set DCRT
C (4) FILE(4)...data set INIT
C The string containing the name of the file with the input data
C specifying the initial conditions for rays. The data will be read
C in by the subroutine INIT1.
C If FILE(4) is blank, data set INIT is appended to this file.
C Description of data set INIT
C (5) FILE(5)...data set CODE
C The string containing the name of the file with the codes of
C elementary waves. The data will be read in by the subroutine
C CODE1.
C If FILE(4) is blank, data set CODE is appended to this file.
C It is recommended to append at most one of sets CODE, RPAR, WRIT.
C Description of data set CODE
C (6) FILE(5)...data set RPAR
C The string containing the name of the file with the data
C specifying the take-off parameters of the required rays. The data
C will be read in by the subroutine RPAR1.
C If FILE(5) is blank, data set CODE is appended to this file.
C It is recommended to append at most one of sets CODE, RPAR, WRIT.
C Description of data set RPAR
C (7) FILE(6)...data set WRIT
C The string containing the name of the file specifying the names of
C the output files with the computed quantities. These data will be
C read by the subroutine WRIT1.
C If FILE(6) is blank, data set WRIT is appended to this file.
C It is recommended to append at most one of sets CODE, RPAR, WRIT.
C Description of data set WRIT
C (8) FILE(6)...data set LOG
C The string containing the name of the output log file. The data
C will be written by the subroutines WRIT1, WRIT2, WRIT4 and WRIT5.
C The filenames FILE(1) to FILE(8) need not be mutually different,
C several data sets may be read from (or written to) the same data file.
C Each data file is closed when read over, and its logical unit number
C may be connected to another file to be opened. When more than one
C elementary wave is computed, it is not recommended to write the LOG
C output data set to the file containing the CODE, RPAR or WRIT data
C set.
C Example of data CRT all data sets separated
C Example of data CRT with DCRT and INIT
C
C=======================================================================
C
C
C
SUBROUTINE CRTIN(FILE1,LUCODE,LURPAR,LUWRIT,LULOG)
CHARACTER*(*) FILE1
INTEGER LUCODE,LURPAR,LUWRIT,LULOG
C
C Subroutine CRTIN is designed to open the data files for complete ray
C tracing and to read the input data sets CRT, MODEL, DCRT and INIT.
C
C Input:
C FILE1...The name of the main input data file CRT. The file is
C opened with the logical unit number LU(1)=5 defined in
C this subroutine. The name may be blank to use
C preconnected input device. Note that also logical units
C LU(2)=4, LU(3)=3 and LU(4)=2 may be used to connect other
C input data files always having non-blank filenames.
C
C Output:
C LUCODE..The logical unit connected to the file with the CODE data.
C LURPAR..The logical unit connected to the file with the RPAR data.
C LUWRIT..The logical unit connected to the file with the WRIT data.
C LULOG...The logical unit connected to the output LOG file.
C
C Subroutines and external functions required:
EXTERNAL MODEL1,RAY1,INIT1,UNIT
C MODEL1..File 'model.for' of the package 'model'.
C RAY1... File 'ray.for'.
C INIT1...File 'init.for'.
C UNIT... This file.
C Note that the above subroutines reference many other external
C procedures from various subroutine files. These indirectly
C referenced procedures are not named here, but are listed in the
C particular subroutine files.
C
C Date: 1997, September 6
C Coded by Ludek Klimes
C
C-----------------------------------------------------------------------
C
C Local storage locations:
C
C The name of the data:
CHARACTER*80 TEXTC
C TEXTC...String of 80 characters containing input data (1).
C
C Auxiliary storage locations:
INTEGER I
C I... Auxiliary loop variable
C
C Quantities describing data files and logical units:
INTEGER NFILE,IU,NU
PARAMETER (NFILE=8)
CHARACTER*80 FILE(NFILE)
PARAMETER (NU=4)
INTEGER LU(NU),KU(NU)
DATA LU/5,4,3,2/
C NFILE, FILE, IU, NU, LU, KU... For the description of these
C quantities see the subroutine unit below.
C
C.......................................................................
C
C The name of the main input file. This file contains the names of
C other input files
FILE(1)=FILE1
IF(NU.LT.4) THEN
C 102
CALL ERROR('102 in CRTIN: Less than 4 logical units')
C Four logical units must be available to read the input data and
C to write the output log file.
END IF
C
C (1) Main data file - contains the names of other input files
CALL UNIT(1,NFILE,FILE,IU,NU,LU,KU,'OLD')
READ(LU(IU),*) TEXTC
DO 10 I=2,NFILE
READ(LU(IU),*) FILE(I)
10 CONTINUE
C
C (2) Data for model
CALL UNIT(2,NFILE,FILE,IU,NU,LU,KU,'OLD')
CALL MODEL1(LU(IU))
C
C (3) Data for complete ray tracing
CALL UNIT(3,NFILE,FILE,IU,NU,LU,KU,'OLD')
CALL RAY1(LU(IU))
C
C (4) Data for initial points of rays
CALL UNIT(4,NFILE,FILE,IU,NU,LU,KU,'OLD')
CALL INIT1(LU(IU))
C
C (5) File containing the codes of elementary waves
CALL UNIT(5,NFILE,FILE,IU,NU,LU,KU,'OLD')
C The data file for the subroutine CODE1 remains open
LUCODE=LU(IU)
IU=0
C
C (6) File controlling the take-off parameters of rays
CALL UNIT(6,NFILE,FILE,IU,NU,LU,KU,'OLD')
C The data file for the subroutine RPAR1 remains open
LURPAR=LU(IU)
IU=0
C
C (7) File specifying the names of files with the computed
C quantities
CALL UNIT(7,NFILE,FILE,IU,NU,LU,KU,'OLD')
C The data file for the subroutine WRIT1 remains open
LUWRIT=LU(IU)
IU=0
C
C (8) The output LOG file
CALL UNIT(8,NFILE,FILE,IU,NU,LU,KU,'UNKNOWN')
C The output file for the subroutines WRIT1, WRIT2, WRIT4 and WRIT5
C remains open
LULOG=LU(IU)
C
RETURN
END
C
C=======================================================================
C
C
C
SUBROUTINE UNIT(IFILE,NFILE,FILE,IU,NU,LU,KU,STATUS)
INTEGER IFILE,NFILE,IU,NU,LU(NU),KU(NU)
CHARACTER*(*) FILE(NFILE),STATUS
C
C Subroutine UNIT is designed to control connecting and disconnecting
C the data files to logical units, and to determine the logical units
C from which the given data sets are to be read.
C
C Input:
C IFILE...Index of the data set to be read in. The data sets are
C indexed by integers from 1 to NFILE.
C NFILE...The total number of data sets.
C FILE... Character array containing the names of the files
C containing individual data sets. Different data sets may
C be stored in the same file. If IFILE=1, only FILE(1) has
C to be defined.
C IU... Index of the logical unit connected to the file containing
C the last read data set (i.e. the last data set was read
C from the logical unit LU(IU) connected to the file
C FILE(KU(IU)). Zero if no data are read in, or if there is
C no data file to close. Need not be defined if IFILE=1.
C NU... The maximum number of available logical units.
C LU... Array containing reference numbers of logical units.
C KU... Auxiliary array of the dimension at least NU.
C Its elements KU(1) to KU(NU) must not be modified between
C two invocations of this subroutine. Its values need not
C be defined if IFILE=1.
C KU(I)...Zero if the logical unit LU(I) is closed,
C otherwise the sequential number of the next data set to
C be read from this unit.
C
C Output:
C IU... Index of the logical unit connected to file with the data
C set to be read in (i.e. the next data set will be read
C from the logical unit LU(IU) connected to the file
C FILE(IFILE)). Zero if no logical unit is available.
C KU... Updated input values.
C
C Date: 1997, September 6
C Coded by Ludek Klimes
C
C-----------------------------------------------------------------------
C
C Auxiliary storage locations:
INTEGER IERR,JU,I
C
IF(IFILE.EQ.1) THEN
C No logical units are connected when opening the first data file
DO 10 JU=1,NU
KU(JU)=0
10 CONTINUE
ELSE
C Updating indices of next data sets to be read from open files:
DO 13 JU=1,NU
IF(0.LT.KU(JU).AND.KU(JU).LT.IFILE) THEN
C The data set from the file connected to the logical unit
C LU(JU) has been read. Determining the next data set
C contained in the file:
DO 11 I=IFILE,NFILE
IF(FILE(KU(JU)).EQ.FILE(I).OR.
* (KU(JU).EQ.1.AND.FILE(I).EQ.' ')) THEN
C The I-th data set will also be read from the last file
C connected to the logical unit LU(JU)
KU(JU)=I
GO TO 12
END IF
11 CONTINUE
C No other data set will be read from the last file. The file
C may be closed and the logical unit LU(IU) disconnected
12 CONTINUE
END IF
13 CONTINUE
C Closing the data file:
IF(IU.GT.0) THEN
C There is a file submitted to be closed
IF(0.LT.KU(IU).AND.KU(IU).LT.IFILE) THEN
C No other data set will be read from this file. The file
C may be closed and the logical unit LU(IU) disconnected
CLOSE(LU(IU))
KU(IU)=0
END IF
END IF
END IF
C
C Opening new data file:
IF(IFILE.GT.0) THEN
DO 21 JU=1,NU
IF(KU(JU).EQ.IFILE) THEN
C The data file is already open
IU=JU
RETURN
END IF
21 CONTINUE
C The data file has to be opened
DO 22 JU=1,NU
IF(KU(JU).EQ.0) THEN
C The logical unit LU(JU) may be connected to the data file
IU=JU
KU(IU)=IFILE
IF(FILE(IFILE).EQ.' ') THEN
OPEN(LU(IU),FILE=' ',STATUS='OLD',IOSTAT=IERR,ERR=90)
ELSE
OPEN(LU(IU),FILE=FILE(IFILE)
* ,STATUS=STATUS,IOSTAT=IERR,ERR=90)
END IF
RETURN
END IF
22 CONTINUE
C No logical unit available
IU=0
END IF
RETURN
C
90 CONTINUE
C 101
WRITE(*,'('' STATUS'',I5,'': '',A)') IERR,FILE(IFILE)
CALL ERROR('101 in UNIT: Open file error')
C Error encountered during execution of the OPEN statement.
END
C
C======================================================================
C