Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Статистический анализ данных в геологии. Кн. 2

.pdf
Скачиваний:
1
Добавлен:
12.11.2023
Размер:
19.38 Mб
Скачать

IF(J4.EQ.1) REWIND J4 IF(J4.EQ.1) CALL ICL0SE(J4,1) IF(J5.EQ.2) REWIND J5 IF(J5.EQ,2) CALL ICLOSE(J5,1) JOP = -1

CALL PAUSE(2) RETURN

52 DO 53 1=1,NRA IF(KORFO.EQ.'K') WRITE(I6,217) I

217 FORMATC Enter row \I3,' of matrix A: ') READ(J4,*,END=500) (AM(I,J),J=1 ,NCA)

53 CONTINUE IF(KORFO.EQ.'F’) REWIND J4 IF(JOP.EQ.3) GOTO 54

ООО

...

READ IN MATRIX В

KORF = 'F' IF(KORF.EQ.’K') J5 = 0 IF(KORF.EQ.'K') GOT© 56 J5 = 2

WRITE(I6,219)

219 FORMAT(/' Enter name of file containing matrix B: '} CALL FNRDIN(FNAME)

IF(LZ.LT.O) RETURN

CALL FILOPN(0,J5,FNAME) IF(LZ.LT.O) RETURN

56 IF(KORF.EQ.'K') WRITE(I6,220)

220 FORMATS Enter number of rows and columns for matrix B: ') READ(J5,‘,END=5C0) NRB.NCB IF(NRB.GT.MAXR.OR.NCB.GT.MAXC) GOTO 57

ООО

...

CHECK CONSISTENCYOF MATRIX DIMENSIONS

54 GOTO (71,72,80,73,80,73), 10PM1

71 IF(NRA.EQ.NRB.AND.NCA.EQ.NCB) GOTO 80 CALL TONE

WRITE(I6,221)

221 FORMAT^ Error - Matrices A and В do not have compatible’, 1’ dimensions.')

LZ = -9

CALL PAUSE(2) RETURN

72 IF(NCA.EQ.NRB) GOTO 80 CALL TONE WRITE(I6,221)

LZ = -9

CALL PAUSE(2) * '

382

о о о

о р о

RETURN

73 IF(NRA.EQ.NCA) GOTO 80 CALL TONE

WRITE(I6,222)

222 FORMATS Error ■ Matrix A is not a square matrix,')

LZ = -9

CALL PAUSE(2) RETURN

80 IF(JOP.EQ,3) GOTO 59

... DIMENSIONS OF A AND В ARE COMPATIBLE. NOW READ !N MATRIX B.

DO 58 1=1 ,NRB

IF(KORF.EQ.'K') WRITE(i6,223) I

223 FORMATC Enter row ',I3,' of matrix B: ') READ(J5,*,END=500) (BM(I,J),J=1 ,NCB)

58 CONTINUE IF(KORF.EQ.'F) REWIND J5

... DETERMINE DIMENSIONS OF C: THE SOLUTION MATRIX

59 GOTO (81,82,81.81,83,81), IOPM*

81 NRC = NRA

NCC . NCA RETURN

82 NRC = NRA

NCC л NCB

RETURN

о о с>

О О С> С) о

83 NF.C = NCA NCC = NRA RETURN

... END OF FILE ENCOUNTERED

500 LZ = -9 CALL CLSALL CALL INVLID(3) CALL PAUSE(2) RETURN

END

PAUSE AFTER PRINTOUTOF RESULTS ONMONITOR

SUBROUTINE PAUSE(IOP) COMMON /IOLUN/ I5,I6,J5,J6,J4

COMMON /IONAT/ KORF.MON.IPRT.KORFO

S83

CHARACTERS KORF.MON.IPRT.KORFO

CHARACTERS IPAUSE

C

IF(IOP.EQ,3) GOTO 100

IF(IOP.EQ,1) WRITE(I6,201)

201FORMAT(/' Press RETURN to go to the main menu of options') IF(IOP.EQ,2) WRITE(I6,202)

202FORMAT(/’ Press RETURN to return to the menu of options') w

IF(IOP.EQ.O) WRITE(I6,200)

200 FORMAT^ Press RETURN to continue')

101 READ(I5,299) IPAUSE

299 FORMAT(A1) RETURN

C

100 IF(MON.EQ.'Y') WRITE(I6,202) IF(MON.EQ.'N'.AND.iPRT.EQ.'N') WRITE(I6,202) IF(MON.EQ.'N'.AND.IPRT.EQ.’Y') WRITE(I6,203)

203 FORMAT(/' Output file created') IF(MON.EQ.'N'.AND.IPRT.EQ.'Y') WRITE(!6,202) GOTO 101

END

* # * * * < ► * * * * * * * * # * * * * * * * * * * * * * * * * < ► » * * * * * * * * * * * * * * *

о о о о о о о о

CHECKS IFFILE IS NEW OR OLD, THEN OPENS IT

IUNK = 0 : FILE SHOULD EXIST

= 1 : UNKNOWN FILE

SUBROUTINE FILOPN(IUNK,IFlL,FNAME)

COMMON TLC/ SV(20),LZ,LU,Z11 ,Z22,D11,D22,N2Z,NSP,DPC,DFT,UPA COMMON /IOLUN/ I5,I6,J5,J6,J4

CHARACTERS6 FNAME LOGICAL*2 FILEOK

C

IF(IUNK.EQ.O) GOTO 100 INQUIRE(FlLE=FNAME,EXIST=FlLEOK)

IF(FILEOK) OPEN(IF!L,FILE=FNAME,STATUS='OLD',FORM='FORMATTED') IF(,NOT.FILEOK) OPEN(IFIL,FILE=FNAME,STATUS='NEW',

1 FORM='FORMATTED') CALL FILADD(IFIL) RETURN

100 INQUIRE(FILE=FNAME,EXIST=FILEOK) IF(FILEOK) GOTO 102

WRITE(I6,200) FNAME

200 FORMAT(/' File ',A16,' does not exist

1//’ Enter correct file name or press RETURN to abort: ') CALL FNRDIN(FNAME)

384

IF(LZ.LT.O) RETURN GOTO 100

102 OPEN(IFIL,FILE=FNAME,STATUS='OLD,,FORM='FORMATTED') CALL FILADD(IFIL)

RETURN END

о

О О О О

KEEPS TRACK OF ALL LUN OF CURRENTLY OPENED FILES

SUBROUTINE FILADD(IFIL)

COMMON /FLINDX/ IFLUN(2G)

DO 100 1=1,20 IF(IFLUN(l).EQ.O) GOTO 101

100 CONTINUE

101 J=l

IFLUN(J) = I FIL RETURN

END

О О О О О О

READS IN FILE NAME AND CHECKS FOR LENGTH AND NONSTANDARD CHARACTERS

О О

SUBROUTINE FNRDIN(FNAME) COMMON /IOLUN/ I5,I6,J5,J6,J4

COMMON f X L C l SV(20),LZ,LU,Z11 ,Z22,D11 ,D22,NZZ,NSP,DPC,DFT,UPA COMMON /ASC/ iALPHA(96)

CHARACTER'1 (ALPHA

CHARACTER-16 FNAME CHARACTER-1 ANAME(16),CHOL EQUIVALENCE (ANAME(1),FNAME)

О О О

105 READ(l5,200) ANAME

200 FORMAT(16A1) WRITE(FNAME,'(16A1)') ANAME IF(FNAME.NE.IALPHA(1)) GOTO 100 LZ = -9

CALL CLSALL RETURN

... CHECK FOR TOTAL LENGTH

100 DO 101 1=1,16 IF(ANAME(I).EQ.IALPHA(1)) GOTO 102

25 — П 5

385

101 CONTINUE

NT = 16

GOTO 103

102 NT = I - 1

_ о о о

О О О О О О О О О О

.. CHECK FOR PERIOD = IALPHA(15)

103 IF(NT.LE.O) GOTO 300 DO 104 1=1,NT

IF(ANAME(I).EQ.IALPHA(15)) GOTO 106 04 CONTINUE

IP = 0

NL = NT

NR = 0 GOTO 107

106 IP = I NL = IP - 1

NR = NT - IP

107 IF(NL.LE.0.OR,NL.GT.8) GOTO 300 IF(NR.GT,3) GOTO 300

CHECK FOR APPROPRIATE CHARACTERS. CAN BE DIGIT, LOWER OR UPPER

.. CASE LETTER.

DO 108 1=1,NT

IF(l.EQ.IP) GOTO 108

CHOL = ANAME(I)

IC = ICHAR(CHOL)

.. 48 TO 57 - ASCII RANGE FOR DIGITS

IF(lC‘.GE.48.AND.IC.LE.57) GOTO 108

.. 65 TO 90 - ASCII RANGE FOR UPEER CASE LETTERS

IF(!C.GE.65.AND.IC.LE.90) GOTO 108

О О О

-

.. 97 TO 122 ■ASCII RANGE FOR LOWER CASE LETTERS

IF(IC.GE.97.ANDJC.LE.122) GOTO 108 GOTO 300

108 CONTINUE

RETURN

300 CALL INVLID(2) GOTO 105

END

6 6

3 8 6

О О О

^

CLOSE ALL CURRENTLY OPENED IDLES

SUBROUTINE CLSALL COMMON /FLINDX/ IFLUN(20) DO 100 1=1,20 IF(IFLUN(l).EQ.O) GOTO 100

JFIL = IFLUN(I) CALL ICLOSE(JFIL,1)

00 CONTINUE RETURN END

О О О О О

CLOSE FILE I, IOP = 0 IS DELTE, IOP = 1 IS KEEP

SUBROUTINE ICLOSE(I.IOP) COMMON /FLINDX/ IFLUN(20)

IF(IOP.EQ.O) CLOSE(l;STATUS=’DELETE’) IF(IOP.EQ.1) CLOSE(l,STATUS=’KEEP’) DO 100 J=1,20

IF(IFLUN(J).EQ.I) IFLUN(J) = 0 00 CONTINUE

RETURN END

О О О О О

DATA ENTRY SUBROUTINE

SUBROUTINE DATENT

COMMON rXLCI SV(20),LZ,LU,Z11 ,Z22,D11,D22,NZZ,NSP,DPC,DFT UPA COMMON /IOLUN/ I5,I6,J5,J6,J4

COMMON /DATQ/ A(1 00,2),B(2,2),C(2),D(100,4) COMMON /NAMEF/ FNAME

CHARACTERS 6 FNAME

C

NCMAX = 100

CALL CLEAR '.7RITE(I6,205)

205 FORMATS DATA ENTRY MODULE',//) WRITE(I6,200)

200 FORMAT(/’ Enter name of file to store data. ’) CALL FNRDIN(FNAME)

IF(LZ.LT 0) RETURN

CALL FILOPN(1,20,FNAME) 104 WRITE(l6,202)

25*

387

202 FORMAT^ Enter number cf rows and columns of data matrix: ') 102 CALL IREAD;2,K !’ OW,NCOL,105,105)

IF(LZ.LT.O) RETURN

I F(NROW.GE.1 .AND.NCOL.GE.1) GOTO 101 CALL INVLID(1)

GOTO 102

101 IF{NCOL.LE.NCMAX) GOTO 105 WRITE(I6,206) NCMAX

20G FORMAT^ Number of columns exceed max of ',I4,’ - Try again') GOTO 104

105 VV'Rn E(20,*) NROW,NCOL DO 100 l=1,NROW

DO 103 J=1,NCOL

WRITERS,203) U

203 FORMATC Enter vslua tor rev,1

column ',14,

1’ of data matrix: ')

 

CALL RREA0(1 ,ZA,AG5,A05,A05)

 

IF(LZ.LT.O) RETURN

 

A(J,1) = ZA

 

103 CONTINUE

 

WRITE(20,*) (A(J,1),J=1 ,NCOL)

 

100 CONTINUE

REWIND20

CALL ICLOSE(20,1) WRITE(I6,204) FNAME

204 FORMAT(F Data now stored in file ‘,A16) CALL PAUSE(2)

RETURN

END

**fcC-»«*#*****i*> *.? «&***•«*•*** r- ******* *' '•***

subroutine CLEAR clears tha monitor screen

о о о о о о

ООО

SUBROUTINECLEAR

CHARACTERS ESC

CHARACTER*3 SEQ

CHARACTERSCLS

SEQ='[2J‘

ESC=CHAR(027)

WRITE (CLS,'(A1,A3)') ESC,SEQ

WRITE (*,*) CLS

RETURN

END

ASKS USER FOR DATEAND TIME TO BEWRITTEN ONTO ALL

3 8 8

ООО

PRINTOUT FILES

SUBROUTINE DATE

COMMON /IOLUN/ I5,I6,J5,J6,J4 COMMON /ASC/ IALPHA(S6) COMMON /DAT I Mr IDATE(8),ITIME(5) CHARACTER'1 lALPHA.IDATE.ITIME DIMENSION IN(6)

105 WRITE(I6,200)

200 FORMAT(//,’ Enier current date (MM-DD-YY): READ(I5,201) IDATE

201 F0RMAT(8A1) CHECK FOR Q, U OR H

CALL QUH(IDATE(1),IQUIT)

IF(IQUIT.EQ.I) STOP ' '

IF(IDATE(3).NE.]ALPHA(14)) GOTO 100 IF(IDATE(6).NE,IALPHA(1 4)) GOTO 100

DO 102 1=1,6

IN(l> = -1000

102CONTINUE

DO 101 1=1,96 IF(IDATE(1).EQ.IALPHA(I)) IN(1) = I 17 IF(IDATE(2).EQ.IALPHA(I)) IN(2) = I 17 IF(IDATE(4).EQ.IALPHA(I)) IN(3) = I 17 IF(IDATE(5).EQ,IALPHA(I)) IN(4) = I 17 IF(1DATE(7).EQ.IALPHA(I)) IN(5) = I 17

1F(IDATE(8).EQ.IALPHA(I)) IN(6) = I 17 101 CONTINUE

DO 103 1=1,6 IF(IN(I).EQ.-1000) GOTO 100

103 CONTINUE

IF(IN(1 ).NE.-16.AND.IN(1),NE.0.AND.IN(1 ).NE.1) GOTO 100 IF(IN(2).LT.O.OR.IN(2).GT.9) GOTO 100

IF(IN(1 ).LE.O.AND,IN(2).EQ.O) GOTO 100

IF(IN(1).EQ.1 ,AND,IN(2).GT.2) GOTO 100 IF(IN(3).GT.-16.AND.!N(3).LT.0) GOTO 100 IF(IN(3).GT.3) GOTO 100 IF(IN(4).LT.0.OR.IN(4).GT.9) GOTO 100 IF(IN(3).LE.0.AND.IN(4).EQ,0) GOTO 100

3 8 9

IF(IN(3).EQ.3.AND.IN(4).GT 1) GOTO 100 GOTO 104

С

100 CALL INVLID( 1 GOTO 105

C

104

WRiTE(l6,203)

 

 

203

FORMAT(/’ Enter current time (HH:MM) ')

Lt

READ(I5,204) ITIME

204 FORMAT(5A1)

о о

 

 

.. CHECK FOR Q, U OR H

 

о

 

 

CALL QUH(IT!ME(1 ),IQUIT)

 

IF(IQUIT.EQ.I) GOTO 105

 

о

 

 

IF(ITIME(3).NE.IALPHA(27)) GOTO 106

о

 

 

DO 107 1=1,4

 

IN(I) =

1000

 

’“107 CONTINUE

 

о

v

 

DO 108 1=1,96

 

IF(ITIME(1).EQJALPHA(!)) IN(1) = I

17

IF(ITIME(2).EQ.IALPHA(I)) IN(2) = I

17

IF(ITIME(4).EQ.IALPHA(I)) IN(3) = I

1 "

IF(ITIME(5).EQ.IALPHA(I)) IN'4) = I

17

108 CONTINUE

 

о

 

 

DO 109 1=1,4

 

IF(IN(I).EQ.-1000) GOTO 106

 

109 CONTINUE

 

О

 

 

IF(IN(1 ).GT 16.ANDJN(1).LT.0) GOTO 106 IF(IN(1 ).GT.2> GOTO 106 IF(IN(2).LT.0.OR.(N(2).GT.9) GOTO 106 IF(IN(1 ).EQ,2.AND.IN(2),GT.4j GOTO 106 IF(IN(3).LT.0,OR.IN(3).GT.5) GOTO 106 IF()N(4).LT.0.OR.IN(4) G~ 9) GOTO 106 CALL PAUSE(1)

RETURN

О

106 CALL INVUD(1 GOTO 104

END

О О О

CHECKS FOR Q, U OR H

о о о о о о

О О О О О

.SUBROUTINE QUH(ICH.IQUIT) COMMON /ASC/ IALPHA(96) CHARACTER'1 IALPHA.ICH

IOUIT = 0

IP :CH.EQ,;ALPHA(50).OR.ICH.EQ.IALPHA(82)) IQUIT = 1

IF OH.EQ.IALPHA(54).OR.ICH.EQ.IALPHA(86)) IQUIT = 1

IF,,CH.EQ.IALPHA(41).OR.ICH.EQ.IALPHA(73}) IQUIT = 1

RETURN

END

WRITES INVALID ENTRY MESSAGE

 

 

SUBROUTINE INVLID'IOP)

 

 

COMMON /IOLUN/ |5,I6,J5,J6,J4

 

 

CALL TONE

 

 

 

IF(!OP.EQ.1) WRITE(I6.200)

 

 

200 FORMAT(/' Invalid entry, Try again ')

 

 

IF(IOP.EQ.2) WRITE(I6,201)

 

 

201 FORMATf/1

Invalid file name. Try again or press RETURN to abort

 

IF(IOP.EQ.3) WRITE(I6,202)

 

 

202 FORMAT)/'

Error • End of file encountered,',

 

 

v.9X,'You must recreate your data file.')

 

 

IFilOP.EQ.4) WRITE(I6,203)

 

 

203 FORMATf/'

Error - The dimensions of the data matrix are',

 

1 ',9X,'invalid

for this module.')

 

 

IF(IOP.EQ,5) WRITE(I6,204)

 

 

204 FORMATf/' An internal error has occurred in the prog'aT ',

 

1/' Please check If your data is appropriate for this opt.cn.';

 

RETURN

 

 

 

END

 

 

 

. INITIALIZE CHARACTER ARRAYS

 

 

SUBROUTINE INITTS

 

 

COMMON /FLINDX' IFLUN(20)

 

 

COMMON /CHAR/ ISOUTf 180),LPT

_

A

COMMON /TLC/ SAVE(20),LZ.LU,Z1,Z2,Dl,D2.NZ,NSTEP,OcPINC,DrL.i

COMMON /FLS/ K5,K6.K7,K8,K9,K10,K11,K12,K13,IPCH,ILP,IPLOT,NCHAN

COMMON /ASC/ IALPHA(96)

DIMENSION JALPHA(96)

391