1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-03-03 01:47:56 +00:00
Files
Paul Kimpel 2c72f7fd1d Commit CUBE Library version 13 of February 1972.
1. Commit library tape images, directories, and extracted text files.
2. Commit additional utilities under Unisys-Emode-Tools.
2018-05-27 11:24:23 -07:00

9199 lines
728 KiB
Fortran

C 1 84 SUBROUTINE AARGS 2 19 68 00000000
FILE 1 = OMNITAB,UNIT=READER 00000100
FILE 3 = OMNITAB,UNIT=PRINTER 00000200
FILE 2 = OMNITAB,UNIT=PUNCH 00000300
FILE 4 = OMNITAB,UNIT=DISK,AREA=6030,BLOCKING=30,RECORD=11,BUFFER=2 00000400
C THE PROGRAM WAS DEVELOPED AT THE NATIONAL BUREAU OF STANDARDS00000500
C IN WASHINGTON D.C. MOST OF ITS IDEAS AND PHILOSOPHIES ARE DUE 00000600
C TO J. HILSENRATH AND ARE EXPLAINED IN "OMNITAB", A COMPUTER 00000700
C PROGRAM FOR STATISTICAL AND NUMERICAL ANALYSIS, NATIONAL BUREAU 00000800
C OF STANDARD HANDBOOK 101 (1968), A MANUAL WRITTEN TO DESCRIBE THE 00000900
C ORIGINAL VERSION. THIS HANDBOOK MAY BE PROCURED FROM THE 00001000
C GOVERNMENT PRINTING OFFICE, WASHINGTON, D. C. 00001100
C THE ORIGINAL VERSION WAS WRITTEN PRIMARILY IN ASSEMBLY 00001200
C LANGUAGE FOR THE IBM 7094 AND WAS THEREFORE ALMOST EXCLUSIVELY 00001300
C AVAILABLE ONLY TO THOSE PERSONS WHO HAD ACCESS TO SUCH A MACHINE. 00001400
C BECAUSE OMNITAB PROVED TO BE SUCH A SUCCESS IN PROVIDING ACCESS TO00001500
C THE COMPUTER FOR PEOPLE WHO KNOW ALMOST NOTHING ABOUT COMPUTER 00001600
C PROGRAMMING, THE PROGRAM WAS REWITTEN DURING THE PAST YEAR IN 00001700
C FORTRAN IN AN ATTEMPT TO MAKE THE PROGRAM AVAILABLE TO AS MANY 00001800
C INSTALLATIONS AS POSSIBLE. 00001900
C THE VERSION OF THE PROGRAM DESCRIBED HERE WAS WRITTEN FOR 00002000
C THE NATIONAL BUREAU OF STANDARDS" UNIVAC 1108 INSTALLATION BY 00002100
C WALTER J. GILBERT, PHILIP WALSH, CARLA MESSINA, SALLY PEAVY, AND 00002200
C RUTH VARNER WITH THE COOPERATION OF THEIR STATISTICAL ENGINEERING 00002300
C LABORATORY. IT WAS ADAPTED FOR USE ON THE IBM 360/65 OF IOWA 00002400
C STATE UNIVERSITY BY R. L. CHAMBERLAIN UNDER PROJECT 101 OF THE 00002500
C IOWA AGRICULTURAL EXPERIMENT STATION, WHERE IT HAS PROVED 00002600
C INVALUABLE IN STATISTICAL CONSULTING. IT WAS CONVERTED FOR USE 00002700
C ON THE B5500 OF THE NAVAL AIR TEST CENTER BY SYSTEMS DESIGN AND 00002800
C PROGRAMMING SECTION OF COMPUTER SERVICES AND OPERATIONS BRANCH 00002900
C OF COMPUTER SERVICES DIVISION NAVAL AIR TEST CENTER PATUXENT 00003000
C RIVER, MARYLAND 00003100
SUBROUTINE AARGS 00003200
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00003300
COMMON/CONSTS/PI,E,HALFPI,DEG,RAD,XEXP,XTRIG,XALOG,CC( 192 ) 00003400
C 00003500
C THIS SUBROUTINE ASSEMBLES A FLOATING POINT NUMBER FROM A STRING OF00003600
C DIGITS ETC. M INITIALLY POINTS AT THE FIRST NUMBER. IT IS LEFT 00003700
C POINTING AT THE FIRST CHARACTER AFTER THE NUMBER. 00003800
C 00003900
C VALUE RETURNED IN ARG 00004000
C 00004100
C KARG = 1 = FLOATING POINT, = 0 = INTEGER, -1 = ERROR. 00004200
C 00004300
ARG=KARD(M) 00004400
SIG =1. 00004500
JEXP=0 00004600
IXS=1 00004700
IEXP=0 00004800
KARG=0 00004900
C 00005000
C LOOK BACK FOR MINUS SIGN AND/OR DECIMAL POINT 00005100
C 00005200
K=KARD(M-1) 00005300
IF(K.NE.37)GO TO 10 00005400
KARG=1 00005500
IEXP=-1 00005600
K=KARD(M-2) 00005700
10 IF(K.EQ.38)SIG =-1. 00005800
20 M=M+1 00005900
K=KARD(M) 00006000
IF(K.GE.10)GO TO 30 00006100
IEXP=IEXP-KARG 00006200
ARG=10.*ARG+FLOAT(K) 00006300
GO TO 20 00006400
30 IF(K.NE.37)GO TO 50 00006500
C 00006600
C DECIMAL POINT FOUND 00006700
C 00006800
IF(KARG.EQ.0)GO TO 40 00006900
CALL ERROR(3) 00007000
KARG=-1 00007100
RETURN 00007200
40 KARG=1 00007300
GO TO 20 00007400
C 00007500
C CHECK FOR EXPONENT E X, E+X, E-X, +X, -X 00007600
C 00007700
50 IF( K .NE. 14 ) GO TO 54 00007800
M = M + 1 00007900
K = KARD( M ) 00008000
IF( K .NE. 44 ) IF( K - 10 ) 56, 54, 54 00008100
52 M = M + 1 00008200
K = KARD( M ) 00008300
IF( K - 10 ) 56, 100, 100 00008400
54 IF( K .NE. 38 ) IF( K - 39 ) 100, 52, 100 00008500
IXS = -1 00008600
GO TO 52 00008700
56 KARG = KARG + 1 00008800
70 JEXP=10*JEXP+K 00008900
M=M+1 00009000
K=KARD(M) 00009100
IF( K .LT. 10 ) GO TO 70 00009200
C 00009300
C DONE WITH ARGUMENT 00009400
C 00009500
100 IF(KARG.NE.0)GO TO 120 00009600
110 ARG=SIG *ARG 00009700
RETURN 00009800
120 KARG=1 00009900
IEXP = IXS * JEXP + IEXP 00010000
C 00010100
C THE FOLLOWING CODING YIELDS MORE ACCURATE RESULTS THAN THE 00010200
C OBVIOUS ARG = ARG * 10. * IEXP 00010300
C 00010400
JEXP = IABS( IEXP ) 00010500
IF( JEXP .GT. IFIX( XALOG ) ) GO TO 130 00010600
IF( IEXP ) 123, 110, 126 00010700
123 ARG = ARG / 10. ** JEXP 00010800
GO TO 110 00010900
126 ARG = ARG * 10. ** JEXP 00011000
GO TO 110 00011100
130 CALL ERROR( 102 ) 00011200
ARG = 0. 00011300
GO TO 110 00011400
END 00011500
C 2 21 SUBROUTINE ADRESS( I, J ) 2 19 68 00011600
SUBROUTINE ADRESS( I, J ) 00011700
COMMON / BLOCKF / NCTOP 00011800
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00011900
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00012000
DIMENSION ARGS(100) 00012100
EQUIVALENCE( ARGS(1), RC(10001) ) 00012200
C 00012300
C CALCULATE ADDRESS OF ARGUMENT( I ). IF ARGUMENT( I ) IS A 00012400
C FLOATING POINT NUMBER, J = -(I+5000). IF ILLEGAL COLUMN NUMBER00012500
C J = 0. IF OK, J = ADDRESS 00012600
C 00012700
IF( KIND( I ) .EQ. 0 ) GO TO 10 00012800
C THE 10000 IS THE SIZE OF THE ARRAY 00012900
J = -( I + 10000) 00013000
GO TO 30 00013100
10 IF( IARGS( I ) .GE. 1 .AND. IARGS( I ) . LE. NCOL ) GO TO 20 00013200
J = 0 00013300
GO TO 30 00013400
20 J = ( NROW+NCTOP-1 ) * ( IARGS(I)-1 ) + NCTOP 00013500
30 RETURN 00013600
END 00013700
C 3 155 SUBROUTINE ALLSUB 2 19 68 00013800
SUBROUTINE ALLSUB 00013900
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00014000
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00014100
DIMENSION ARGS(100) 00014200
EQUIVALENCE( ARGS(1), RC(10001) ) 00014300
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00014400
COMMON / SCRAT / SCRA(10000),NS 00014500
EQUIVALENCE(L11,LL1),(L22,LL2) 00014600
C PROGRAMMED BY PHILIP J. WALSH (NBS 453.40) MAY, 1967 00014700
C 00014800
C 00014900
C COMMAND IS OF THE FORM XXXX OF ORDER ++ OF COL ++, STORE IN ++ 00015000
C XXXX MAY BE (A) NLSUB FOR NORMALIZED LAGUERRE POLYNOMIALS 00015100
C (B) LSUB FOR LAGUERRE POLYNOMIALS 00015200
C (C) HSUB FOR HERMITE POLYNOMIALS 00015300
C (D) USUB FOR CHEBYSHEV POLYNOMIALS 00015400
C (E) PSUB FOR LEGENDRE POLYNOMIALS 00015500
C (F) TSUB FOR CHEBYSHEV POLYNOMIALS 00015600
C SEE RECURSIVE FORMULAE FOR THESE POLYNOMIALS FURTHER IN CODE 00015700
C EACH OF THE COMMANDS REQUIRE THREE ARGUMENTS 00015800
IF ( NARGS .EQ. 3 ) GO TO 1 00015900
200 CALL ERROR(10) 00016000
GO TO 99 00016100
1 IF( KIND( 1 ) + KIND( 3 ) .EQ. 0 ) GO TO 2 00016200
13 CALL ERROR( 3 ) 00016300
GO TO 99 00016400
C CHECK THAT X IS WITHIN WORKSHEET AND GET ADDRESS OF ARGUMENT COLUMN 00016500
2 CALL ADRESS( 2, L11 ) 00016600
IF( L11 ) 13, 25, 3 00016700
25 CALL ERROR( 11 ) 00016800
GO TO 99 00016900
3 IARGS( 4 ) = IARGS( 1 ) + IARGS( 3 ) - 1 00017000
KIND( 4 ) = 0 00017100
CALL ADRESS( 4, L22 ) 00017200
IF( L22 .LE. 0 ) GO TO 25 00017300
4 CALL ADRESS( 3, L22 ) 00017400
IF (NRMAX .NE. 0 ) GO TO 6 00017500
CALL ERROR(9) 00017600
GO TO 99 00017700
6 IF( NERROR .NE. 0 ) GO TO 99 00017800
IJK = LL1 00017900
IJ = LL2 00018000
DO 12 I = 1, NRMAX 00018100
SCRA( 1 ) = RC( IJK ) 00018200
GO TO ( 8,8,9,9,10,10) , L2 00018300
8 RC( IJ ) = 1. - SCRA( 1 ) 00018400
GO TO 11 00018500
9 RC( IJ ) = 2. * SCRA( 1 ) 00018600
GO TO 11 00018700
10 RC( IJ ) = SCRA( 1 ) 00018800
11 IJK = IJK + 1 00018900
12 IJ = IJ + 1 00019000
IF(IARGS(1) .EQ. 1 ) GO TO 99 00019100
N = IARGS(1)-1 00019200
DO 101 J = 1,NRMAX 00019300
IJK = LL1 + J 00019400
IJ = LL2 + J 00019500
SCRA (1) = 1.0 00019600
SCRA( 2 ) = RC( IJK - 1 ) 00019700
SCRA( 3 ) = RC( IJ - 1 ) 00019800
SCRA (4) = 1.0 00019900
SCRA (5) = 2.0 00020000
DO 100 I = 1,N 00020100
IARGS( 4 ) = IARGS( 3 ) + I 00020200
CALL ADRESS( 4, LL22 ) 00020300
GO TO(30,40,50,60,70,80) , L2 00020400
C ITYPE = 1 NLSUB NORMALIZED LAGUERRE POLYNOMIALS 00020500
C RECURSION FORMULA L(N+1) =(1.+2.*N-X)*L(N)-N**2 *L(N-1) 00020600
C L(0) = 1. 00020700
C L(1) = -X+1. 00020800
C L(2) = X**2 - 4.0*X +2. 00020900
C L(3) =-X**3 + 9.0*X**2-18.0*X+6. 00021000
C 00021100
C L(N)= EXP(X)*(DN/DXN(X**N*EXP(-X))) 00021200
C 00021300
30 SCRA (4) = I 00021400
SCRA (6) = 1.0 + 2.0*SCRA (4) 00021500
SCRA (7) = SCRA (4)*SCRA (4) 00021600
SCRA (8) = (SCRA (6)-SCRA (2))*SCRA (3)-SCRA (7)*SCRA (1) 00021700
GO TO 90 00021800
C ITYPE = 2 LSUB LAGUERRE POLYNOMIALS 00021900
C RECURSION FORMULA L(N+1)=(((2.*N+1)-X)*L(N)-N*L(N-1))/ 00022000
C (N+1) 00022100
C L(0) = 1. 00022200
C L(1) = -X+1. 00022300
C L(2) = .5 (XX*2 - 4.*X +2) 00022400
C L(3) = (-X**3 + 9.*X**2 - 18.* X +6.)/6. 00022500
C 00022600
C **** SEE ABRAMOWITZ, M. AND STEGUN, I.A., HANDBOOK OF MATHEMATICAL 00022700
C FUNCTIONS, NATIONAL BUREAU OF STANDARDS APPLIED MATHEMATICS00022800
C SERIES 55, SUPERINTENDENT OF DOCUMENTS, U.S. GOVERNMENT 00022900
C PRINTING OFFICE, WASHINGTON, D.C. 20402 00023000
C 00023100
C **** SEE HILSENRATH,ZIEGLER,MESSINA,WALSH,HERBOLD,, OMNITAB, NBS 00023200
C HANDBOOK 101 (MARCH 4, 1966) - FOR FORMULAE USED 00023300
40 SCRA (4) = I 00023400
SCRA (6) = SCRA (4) + 1.0 00023500
SCRA (7) = SCRA (4) + SCRA (6) 00023600
SCRA (8) = ((SCRA (7)-SCRA (2))*SCRA (3)-SCRA (4)*SCRA (1))/ 00023700
1 SCRA (6) 00023800
GO TO 90 00023900
C ITYPE = 3 HSUB HERMITE POLYNOMIALS 00024000
C RECURSION FORMULA H(N+1) = 2.0*X*H(N)-2.0*N*H(N-1) 00024100
C 00024200
C H(0) = 1. 00024300
C H(1) = 2.0*X 00024400
C H(2) = 4.0*X**2-2. 00024500
C H(3) = 8.0*X**3-12.*X 00024600
50 SCRA (8)=2.0*(SCRA (2)*SCRA (3)-SCRA (4)*SCRA (1)) 00024700
SCRA (4) = SCRA (4) + 1.0 00024800
GO TO 90 00024900
C ITYPE = 4 USUB CHEBYSHEV POLYNOMIALS 00025000
C 00025100
C RECURSION FORMULA U(N) = 2.0*X*U(N-1)-U(N-2) 00025200
C 00025300
C U(0) = 1. 00025400
C U(1) = 2.0*X 00025500
C U(2) = 4.0*X**2-1.0 00025600
C U(3) = 8.0*X**3-4.0*X 00025700
C 00025800
60 SCRA (8) = 2.0*SCRA (2)*SCRA (3)-SCRA (1) 00025900
GO TO 90 00026000
C ITYPE = 5 PSUB LEGENDRE POLYNOMIALS 00026100
C 00026200
C RECUSION FORMULA P(N+1) =X*P(N)+(N/N+1)*(X*P(N)-P(N-1)) 00026300
C 00026400
C P(0) = 1. 00026500
C P(1) = X. 00026600
C P(2) = (3./2.)*X**2-(1./2.) 00026700
C P(3) = 2.5*X**3-1.5*X 00026800
C 00026900
70 SCRA (6)=SCRA (4)/SCRA (5) 00027000
SCRA (8)=(1.0+SCRA (6))*SCRA (2)*SCRA (3)-SCRA (6)*SCRA (1) 00027100
SCRA (4) = SCRA (5) 00027200
SCRA (5) = SCRA (5) + 1.0 00027300
GO TO 90 00027400
C ITYPE = 6 TSUB CHEBYSHEV POLYNOMIALS 00027500
C 00027600
C RECURSION FORMULA 00027700
C 00027800
C T(0) = 1. 00027900
C T(1) = X 00028000
C T(2) = 2.*X**2-1. 00028100
C T(3) = 4.*X**3-3.*X 00028200
80 SCRA (8) = 2.0 * SCRA (2)*SCRA (3)-SCRA (1) 00028300
90 CONTINUE 00028400
91 LJMN = LL22 + J 00028500
RC( LJMN - 1 ) = SCRA( 8 ) 00028600
SCRA (1) = SCRA (3) 00028700
SCRA (3) = SCRA (8) 00028800
98 CONTINUE 00028900
100 CONTINUE 00029000
101 CONTINUE 00029100
99 RETURN 00029200
END 00029300
C 4 35 SUBROUTINE APRINT 2 19 68 00029400
SUBROUTINE APRINT 00029500
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00029600
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00029700
DIMENSION ARGS(100) 00029800
EQUIVALENCE( ARGS(1), RC(10001) ) 00029900
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00030000
IF( NARGS .EQ. 4 ) GO TO 30 00030100
10 CALL ERROR( 205 ) 00030200
20 RETURN 00030300
30 J = 1 00030400
I = 4 00030500
CALL CKIND( I ) 00030600
IF( I .NE. 0 ) GO TO 10 00030700
K = IARGS( 1 ) 00030800
CALL MTXCHK( J ) 00030900
IF( J .NE. 0 .OR. IARGS( 4 ) .GE. 50 ) GO TO 10 00031000
IARGS( 1 ) = K 00031100
K = IARGS( 3 ) 00031200
IARGS( 51 ) = IARGS( 1 ) 00031300
IARGS( 52 ) = IARGS( 2 ) 00031400
L = IARGS( 4 ) 00031500
DO 40 I = 2, L 00031600
IARGS( I+1 ) = IARGS( I ) + 1 00031700
IARGS( I+51 ) = IARGS( I+1 ) 00031800
40 KIND( I+1 ) = 0 00031900
NARGS = L + 1 00032000
L1 = 6 00032100
LL = IARGS( 1 ) 00032200
50 DO 60 I = 1, K 00032300
CALL PRINTX 00032400
IARGS( 51 ) = LL + I 00032500
DO 60 J = 1, NARGS 00032600
60 IARGS( J ) = IARGS( J+50 ) 00032700
GO TO 20 00032800
END 00032900
C 5 90 SUBROUTINE ARITH 2 19 68 00033000
SUBROUTINE ARITH 00033100
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00033200
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00033300
DIMENSION ARGS(100) 00033400
EQUIVALENCE( ARGS(1), RC(10001) ) 00033500
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00033600
DIMENSION II( 4 ), KK( 4 ) 00033700
EQUIVALENCE (I1,II(1)),(I2,II(2)),(I3,II(3)),(I4,II(4)) 00033800
C 00033900
C THIS SUBROUTINE PERFORMS ADD, SUB, MULT DIV, RAISE FOR 00034000
C THREE AND FOUR ARGUMENTS. 00034100
C 00034200
IF( NARGS .EQ. 3 .OR. NARGS .EQ. 4 ) GO TO 2 00034300
CALL ERROR( 10 ) 00034400
GO TO 10 00034500
2 IF( KIND( NARGS ) .EQ. 0 ) GO TO 15 00034600
CALL ERROR ( 20 ) 00034700
GO TO 10 00034800
5 CALL ERROR( 11 ) 00034900
10 RETURN 00035000
15 DO 30 I = 1, NARGS 00035100
KK( I ) = 1 00035200
CALL ADRESS( I, II( I ) ) 00035300
IF( II( I ) ) 20, 5, 30 00035400
20 KK( I ) = 0 00035500
II( I ) = -II( I ) 00035600
30 CONTINUE 00035700
IF( NERROR .NE. 0 ) GO TO 10 00035800
IF( NRMAX .GT. 0 ) GO TO 40 00035900
CALL ERROR( 9 ) 00036000
GO TO 10 00036100
40 JJ = II( NARGS ) + NRMAX - 1 00036200
IJ = L2 + 5 * ( NARGS - 3 ) 00036300
GO TO (100,200,300,400,500,600,700,800,900,1000), IJ 00036400
100 DO 110 I = I3, JJ 00036500
RC( I ) = RC( I1 ) + RC( I2 ) 00036600
I1 = I1 + KK( 1 ) 00036700
110 I2 = I2 + KK( 2 ) 00036800
GO TO 10 00036900
200 DO 210 I = I3, JJ 00037000
RC( I ) = RC( I2 ) - RC( I1 ) 00037100
I1 = I1 + KK( 1 ) 00037200
210 I2 = I2 + KK( 2 ) 00037300
GO TO 10 00037400
300 DO 310 I = I3, JJ 00037500
RC( I ) = RC( I1 ) * RC( I2 ) 00037600
I1 = I1 + KK( 1 ) 00037700
310 I2 = I2 + KK( 2 ) 00037800
GO TO 10 00037900
400 DO 410 I = I3, JJ 00038000
RC( I ) = RC( I1 ) / RC( I2 ) 00038100
I1 = I1 + KK( 1 ) 00038200
410 I2 = I2 + KK( 2 ) 00038300
GO TO 10 00038400
500 DO 510 I = I3, JJ 00038500
RC( I ) = FEXP2( RC( I1 ), RC( I2 ) ) 00038600
I1 = I1 + KK( 1 ) 00038700
510 I2 = I2 + KK( 2 ) 00038800
GO TO 10 00038900
600 DO 610 I = I4, JJ 00039000
RC( I ) = RC( I ) + ( RC( I1 ) + RC( I2 ) ) * RC( I3 ) 00039100
I1 = I1 + KK( 1 ) 00039200
I2 = I2 + KK( 2 ) 00039300
610 I3 = I3 + KK( 3 ) 00039400
GO TO 10 00039500
700 DO 710 I = I4, JJ 00039600
RC( I ) = RC( I ) + ( RC( I2 ) - RC( I1 ) ) * RC( I3 ) 00039700
I1 = I1 + KK( 1 ) 00039800
I2 = I2 + KK( 2 ) 00039900
710 I3 = I3 + KK( 3 ) 00040000
GO TO 10 00040100
800 DO 810 I = I4, JJ 00040200
RC( I ) = RC( I ) + ( RC( I1 ) * RC( I2 ) ) * RC( I3 ) 00040300
I1 = I1 + KK( 1 ) 00040400
I2 = I2 + KK( 2 ) 00040500
810 I3 = I3 + KK( 3 ) 00040600
GO TO 10 00040700
900 DO 910 I = I4, JJ 00040800
RC( I ) = RC( I ) + ( RC( I1 ) / RC( I2 ) ) * RC( I3 ) 00040900
I1 = I1 + KK( 1 ) 00041000
I2 = I2 + KK( 2 ) 00041100
910 I3 = I3 + KK( 3 ) 00041200
GO TO 10 00041300
1000 DO 1010 I = I4, JJ 00041400
RC( I ) = RC( I ) + RC( I3 ) * FEXP2( RC( I1 ), RC( I2 ) ) 00041500
I1 = I1 + KK( 1 ) 00041600
I2 = I2 + KK( 2 ) 00041700
1010 I3 = I3 + KK( 3 ) 00041800
GO TO 10 00041900
END 00042000
C 6 134 SUBROUTINE ARYVEC 2 19 68 00042100
SUBROUTINE ARYVEC 00042200
C SUBROUTINE ARYVEC 9/27/67 00042300
C ***** 00042400
C SUBROUTINE TO MULTIPLY MATRIX TIME VECTOR 00042500
C OR VECTOR TRANSPOSE TIME MATRIX 00042600
C L2=1 MULTIPLY MATRIX TIME VECTOR 00042700
C GENERAL FORM OF COMMAND 00042800
C M(AV) A (,) N,K VECTOR IN COL I STORE IN COLUMN J 00042900
C M(AV) A (,) N,K VECTOR IN COL I STORE IN ROW K COL J 00043000
C N AND K MUST BE SPECIFIED 00043100
C L2=2 MULTIPLY VECTOR TRANSPOSE TIMES MATRIX 00043200
C GENERAL FORM OF COMMAND 00043300
C M(VTA) A (,) N,K VECTOR IN COL I STORE IN ROW J 00043400
C M(VTA) A (,) N,K VECTOR IN COL I STORE IN ROW K COL J 00043500
C N AND K MUST BE SPECIFIED 00043600
C IF ONLY ROW IS GIVEN FOR STORAGE COL 1 IS ASSUMED 00043700
C ***** 00043800
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00043900
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00044000
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00044100
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00044200
DIMENSION ARGS(100) 00044300
EQUIVALENCE( ARGS(1), RC(5001) ) 00044400
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00044500
COMMON / SCRAT / X , NS 00044600
DIMENSION A( 10000 ) 00044700
DOUBLE PRECISION X(5000), SUM 00044800
COMMON /MULTC/ NS2 00044900
NS2 = NS/2 00045000
C ***** 00045100
C CHECK FOR CORRECT NUMBER OF ARGUMENTS 00045200
C ***** 00045300
IF(NARGS.NE.6.AND.NARGS.NE.7) CALL ERROR(10) 00045400
C ***** 00045500
C CHECK TO SEE IF ALL ARGUMENTS ARE INTEGERS 00045600
C ***** 00045700
J=NARGS 00045800
CALL CKIND(J) 00045900
IF(J.NE.0) CALL ERROR(3) 00046000
C ***** 00046100
C CHECK TO SEE IF DIMENSIONS ARE OUT OF RANGE 00046200
C ***** 00046300
GO TO (200,220),L2 00046400
200 IADD=IARGS(4) 00046500
IADD2=IARGS(3) 00046600
ICOMP=NROW 00046700
GO TO 240 00046800
220 IADD=IARGS(3) 00046900
IADD2=IADD 00047000
ICOMP=NCOL 00047100
C ***** 00047200
C COMPUTE ADDRESSES OF COLUMNS 00047300
C ***** 00047400
240 IARGS(10)=IARGS(NARGS) 00047500
IARGS(8)=1 00047600
GO TO ( 440 , 410 ),L2 00047700
410 IF(NARGS.EQ.7) GO TO 420 00047800
J=2 00047900
IROWSV=IARGS(6) 00048000
GO TO 430 00048100
420 IARGS(12)=IARGS(4) 00048200
IARGS(11)=1 00048300
IARGS(9)=IARGS(6) 00048400
J=3 00048500
430 IARGS(7)=IARGS(3) 00048600
GO TO 460 00048700
440 J=3 00048800
IARGS(12)=1 00048900
IARGS(11)=IARGS(3) 00049000
IARGS(7)=IARGS(4) 00049100
IF(NARGS.EQ.6) GO TO 450 00049200
IARGS(9)=IARGS(6) 00049300
GO TO 460 00049400
450 IARGS(9)=1 00049500
460 IARGS(6)=IARGS(5) 00049600
IARGS(5)=1 00049700
CALL MTXCHK(J) 00049800
IF(J-1) 490,470,480 00049900
470 CALL ERROR(3) 00050000
RETURN 00050100
480 CALL ERROR (17) 00050200
RETURN 00050300
C ***** 00050400
C CHECK FOR PREVIOUS ERRORS 00050500
C ***** 00050600
490 IF(NERROR.NE.0) RETURN 00050700
GO TO (580 ,600 ),L2 00050800
580 ICS=IARGS(9) 00050900
IAP=IARGS(1) 00051000
IP=IARGS(3) 00051100
JP=IARGS(4) 00051200
IAD1=NROW 00051300
IAD2=1 00051400
IBP=IARGS(5) 00051500
GO TO 660 00051600
600 IBP=IARGS(1) 00051700
IAP=IARGS(5) 00051800
IP=IARGS(4) 00051900
IF(NARGS.EQ.7) GO TO 620 00052000
JP=IARGS(3) 00052100
ICS=IROWSV 00052200
GO TO 640 00052300
620 JP=IARGS(3) 00052400
ICS=IARGS(9) 00052500
640 IAD1=1 00052600
IAD2=NROW 00052700
660 IC=1 00052800
DO 740 I=1,IP 00052900
IA=IAP 00053000
IB=IBP 00053100
IS=NS2 00053200
DO 680 J=1,JP 00053300
X(IS)=RC(IA)*RC(IB) 00053400
IS=IS-1 00053500
IA=IA+IAD1 00053600
680 IB=IB+1 00053700
CALL SORTSM(JP,SUM) 00053800
A(IC) = SUM 00053900
IC=IC+1 00054000
GO TO (700,720),L2 00054100
700 IAP=IAP+1 00054200
GO TO 740 00054300
720 IBP=IBP+NROW 00054400
740 CONTINUE 00054500
C ***** 00054600
C STORE RESULTS IN WORKSHEET 00054700
C ***** 00054800
IS=1 00054900
DO 800 I=1,IP 00055000
RC(ICS) = A(IS) 00055100
IS=IS+1 00055200
ICS=ICS+IAD2 00055300
800 CONTINUE 00055400
RETURN 00055500
END 00055600
C 7 88 SUBROUTINE ASTER 2 19 68 00055700
SUBROUTINE ASTER 00055800
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00055900
DIMENSION NAM(2) 00056000
C 00056100
C ASTERISKS HAVE BEEN FOUND, LOOK FOR A SPECIAL FORM OF ARGUMENT. 00056200
C 00056300
C FORMS CAN BE.. 00056400
C 00056500
C *PHYSCON* A PHYSICAL CONSTANT NAME, FL.PT. 00056600
C **VARCON** A -VARIABLE- CONSTANT TO BE USED AS AN INTEGER (TRUN)00056700
C *VARCON* A -VARIABLE- CONSTANT TO BE USED AS A FL.PT. NUMBER 00056800
C **ROW,COLUMN** A WORKSHEET ENTRY TO BE TRUNCATED AND USED AS INT00056900
C *ROW,COLUMN* A WORKSHEET ENTRY TO BE USED AS FLOATING POINT 00057000
C 00057100
C NONBLA IS A FUNCTION WHICH RETURNS THE NEXT NON-BLANK CHARACTER 00057200
C IN THE CARD AND ALSO POINTS M AT IT 00057300
C 00057400
C KARG = 1, SINGLE *. KARG = 0, DOUBLE *. 00057500
C 00057600
155 CONTINUE 00057700
I=M 00057800
L=KARG 00057900
K=NONBLA(I) 00058000
10 IF(K.NE.40)GO TO 20 00058100
C 00058200
C A LONG LINE OF ASTERISKS FOUND, SKIP OVER THEM AND IGNORE 00058300
C 00058400
KARG=7 00058500
15 M=M+1 00058600
IF(KARD(M)-40)120,15,120 00058700
20 IF(K.GE.36)GO TO 999 00058800
IF(K.GE.10)GO TO 50 00058900
C 00059000
C NUMBER IS FIRST NON-BLANK CHARACTER, SET N = COMMA 00059100
C 00059200
N=43 00059300
30 CALL AARGS 00059400
IF(KARG.NE.0) GO TO 999 00059500
I = M 00059600
IF(NONBLA(I).EQ.N)IF(N-40)40,45,40 00059700
GO TO 999 00059800
40 I = M + 1 00059900
IF(NONBLA( I ).GE.10)GO TO 999 00060000
C 00060100
C SET N = ASTERISK 00060200
C 00060300
N=40 00060400
T=ARG 00060500
GO TO 30 00060600
45 ARG2=ARG 00060700
ARG=T 00060800
KARG=5 00060900
GO TO 100 00061000
C 00061100
C LETTER FOUND FIRST 00061200
C 00061300
50 CALL NNAME(NAM(1)) 00061400
CALL PHYCON(NAM(1)) 00061500
IF(ARG.EQ.0.)GO TO 60 00061600
C 00061700
C PHYSICAL CONSTANT FOUND, SET KARG = 1 00061800
C 00061900
KARG=1 00062000
IF(L)999,999,90 00062100
C 00062200
C NAME NOT IN PHYSICAL CONSTANT LIST, TRY VARIABLE LIST 00062300
C 00062400
60 CALL VARCON(NAM(1)) 00062500
IF(ARG.NE.0.)GO TO 80 00062600
CALL ERROR(8) 00062700
70 KARG=1 00062800
RETURN 00062900
80 KARG=3 00063000
90 I = M 00063100
IF(NONBLA(I).NE.40)GO TO 999 00063200
100 M=M+1 00063300
C 00063400
C CHECK THAT THE NUMBER OF ASTERISKS AT THE END OF THE EXPRESSION 00063500
C IS THE SAME AS AT THE BEGINNING. L=0 MEANS 1, L=1 MEANS 2 00063600
C 00063700
IF(L.NE.0)IF(KARD(M)-40)110,999,110 00063800
IF(KARD(M).NE.40.OR.KARD(M+1).EQ.40)GO TO 999 00063900
M=M+1 00064000
110 KARG=KARG+L 00064100
120 RETURN 00064200
999 CALL ERROR(7) 00064300
GO TO 70 00064400
END 00064500
C 8 44 SUBROUTINE BEGIN 2 19 68 00064600
SUBROUTINE BEGIN 00064700
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00064800
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00064900
COMMON /BLOCKB/NSTMT,NSTMTX,NSTMTH,NCOM,LCOM,IOVFL,COM(2000) 00065000
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00065100
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00065200
DIMENSION ARGS(100) 00065300
EQUIVALENCE( ARGS(1), RC(10001) ) 00065400
C 00065500
C THIS SUBROUTINE CONTAINS THE CODING FOR BEGIN AND SCAN, AN 00065600
C ARGITRARY GROUPING. 00065700
C 00065800
IF( L2 .EQ. 1 ) GO TO 50 00065900
C 00066000
C SCAN (CARD UP TO AND INCLUDING CARD COLUMN ++ ) 00066100
IF(NARGS .EQ. 1 .AND. KIND(1) .EQ. 0 .AND. IARGS(1) .GE. 6 .AND. 00066200
1 IARGS(1) .LE. 80 ) GO TO 10 00066300
K = 205 00066400
GO TO 60 00066500
10 KRDEND = IARGS( 1 ) 00066600
GO TO 20 00066700
C 00066800
C BEGIN STORING INSTRUCTIONS AT NUMBER ++ 00066900
C IF NO NUMBER IS GIVEN, 1 IS ASSUMED. 00067000
C 00067100
50 IF( MODE .EQ. 1 ) GO TO 70 00067200
K = 5 00067300
60 CALL ERROR( K ) 00067400
20 RETURN 00067500
70 IF( NARGS - 1 ) 90, 100, 80 00067600
80 K = 10 00067700
GO TO 60 00067800
90 NSTMT = 0 00067900
95 MODE = 3 00068000
GO TO 20 00068100
100 IF ( KIND(1) . EQ. 0 ) GO TO 110 00068200
K = 20 00068300
GO TO 60 00068400
110 IF( IARGS( 1 ) .GT. 0 .AND. IARGS( 1 ) .LT. 1000 ) GO TO 120 00068500
K = 7 00068600
GO TO 60 00068700
120 NSTMT = 10 * ( IARGS( 1 ) - 1 ) 00068800
GO TO 95 00068900
END 00069000
C 9 80 SUBROUTINE BEJN 2 19 68 00069100
SUBROUTINE BEJN 00069200
COMMON /RJN/R(100),Z,J 00069300
DOUBLE PRECISION X,R,Z,A,B,C,D,E,F,G,P,Q,Y 00069400
Y=1.D0 00069500
102 X=Z 00069600
DO 101 N=1,100 00069700
101 R(N)=0.0 00069800
LA=0 00069900
IF (X.LE.60.) GO TO 10 00070000
LA=1 00070100
IF (X.LE.100.) GO TO 9 00070200
WRITE (6,31) 00070300
31 FORMAT (37H X GREATER THAN 100. NO VALUES GIVEN) 00070400
GO TO 25 00070500
9 X=X/2.D0 00070600
10 A=X/2.D0 00070700
IF (X.GT.15.) GO TO 5 00070800
B=1.D0 00070900
C=1.D0 00071000
DO 1 N=1,30 00071100
J=N 00071200
B=B*A/C 00071300
C=C+1.D0 00071400
IF (B.LT..5D-9) GO TO 2 00071500
1 CONTINUE 00071600
2 D=B*A/C 00071700
A=A**2 00071800
K=X+6.D0 00071900
E=K 00072000
F=K+J 00072100
G=F+1.D0 00072200
P=1.D0 00072300
Q=1.D0 00072400
DO 3 N=1,K 00072500
P=1.D0-P*A/(E*F)*Y 00072600
Q=1.D0-Q*A/(E*G)*Y 00072700
E=E-1.D0 00072800
F=F-1.D0 00072900
3 G=G-1.D0 00073000
R(J+1)=B*P 00073100
R(J+2)=D*Q 00073200
20 DO 4 N=1,J 00073300
K=J-N+1 00073400
A=K 00073500
4 R(K)=2.D0*A*R(K+1)/X-R(K+2)*Y 00073600
IF (LA.EQ.0) GO TO 25 00073700
LA=LA-1 00073800
A=R(1)*R(100) 00073900
B=.0D0 00074000
DO 11 N=1,99 00074100
K=100-N 00074200
A=A+R(N+1)*R(K) 00074300
11 B=B+R(N)*R(K) 00074400
J=98 00074500
R(100)=A 00074600
R(99)=B 00074700
X=Z 00074800
GO TO 20 00074900
5 K=1.5*X 00075000
B=1.D0 00075100
C=K 00075200
DO 6 N=1,K 00075300
B=A*B/C 00075400
6 C=C-1.D0 00075500
P=2.D-9 00075600
IF (LA.EQ.1) P=5.D-20 00075700
C=K+1 00075800
DO 7 N=1,30 00075900
J=K+N 00076000
B=B*A/C 00076100
C=C+1.D0 00076200
IF (B.LT.P) GO TO 2 00076300
IF (J.EQ.98) GO TO 2 00076400
7 CONTINUE 00076500
GO TO 2 00076600
25 RETURN 00076700
ENTRY BEIN 00076800
Y=-1.D0 00076900
GO TO 102 00077000
END 00077100
C 10 265 SUBROUTINE BESSEL 2 19 68 00077200
SUBROUTINE BESSEL 00077300
COMMON /BLOCKD/R(10100),IA(100),KI(100),ART(100),NR,NRO,NC,NARGS, 00077400
1VWX(8),NER 00077500
DIMENSION ARGS(100) 00077600
EQUIVALENCE( ARGS(1), R(10001) ) 00077700
DOUBLE PRECISION X,Y,A(200),B(200),W(200),Z,E,P,Q,S,T 00077800
COMMON / RJN / Z,W 00077900
COMMON / BEZON / A,B,K,L 00078000
COMMON / ABEKI / X,Y,P,Q,S,T 00078100
COMMON /BLOCKE/NAME(4),L1,L2,ISR 00078200
C 00078300
C WJG PATCH )())()()())()()()()()()()()()()()()() 00078400
C 00078500
IF( NARGS .GE. 3 ) IF( KI ( 1 ) ) 8805, 8808, 8805 00078600
CALL ERROR( 10 ) 00078700
8802 RETURN 00078800
8805 CALL ERROR( 3 ) 00078900
GO TO 8802 00079000
8808 L2 = IA ( 1 ) 00079100
IF( L2 .LT. 1 .OR. L2 .GT. 37 ) GO TO 8805 00079200
DO 8812 I = 2, NARGS 00079300
KI ( I-1 ) = KI ( I ) 00079400
IA ( I-1 ) = IA ( I ) 00079500
8812 ARGS( I-1 ) = ARGS( I ) 00079600
NARGS = NARGS - 1 00079700
C 00079800
C END PATCH )()()()()()()()()())()()()()() 00079900
C 00080000
IF (L2.GT.28) GO TO 20 00080100
N=0 00080200
L=L2/2 00080300
L=2*L 00080400
IF (L.EQ.L2) N=1 00080500
IF (L2.GT.12) GO TO 10 00080600
IF (NARGS.GT.2) CALL ERROR(10) 00080700
CALL ADRESS(NARGS,J) 00080800
IF (J.LE.0) CALL ERROR(11) 00080900
LT=1 00081000
IF (KI(1).EQ.1) GO TO 1 00081100
CALL ADRESS (1,JA) 00081200
LT=2 00081300
1 M=1 00081400
IF (L2.GT.2) M=5 00081500
IF (L2.GT.4) M=3 00081600
IF (L2.GT.6) M=7 00081700
IF (L2.GT.8) M=3 00081800
IF (L2.GT.10) M=7 00081900
L=0 00082000
IF (L2.GT.4) L=1 00082100
IF (L2.GT.8) L=2 00082200
K=0 00082300
IF (LT.EQ.1) GO TO 6 00082400
DO 4 I=1,NR 00082500
X=R(JA) 00082600
JA=JA+1 00082700
Y=1.D0 00082800
IF (L.EQ.0) GO TO 3 00082900
IF (L.EQ.2) GO TO 2 00083000
IF (DABS(X).LT.85.) GO TO 3 00083100
K=K+1 00083200
2 IF (DABS(X).GT.700.) GO TO 3 00083300
Y=DEXP(X) 00083400
IF (M.EQ.3) Y=1.D0/Y 00083500
3 R(J)=Y*DBEJ(X,N,M) 00083600
4 J=J+1 00083700
5 IF (K.NE.0) CALL ERROR(105) 00083800
RETURN 00083900
6 X=ARGS(1) 00084000
Y=1.D0 00084100
IF (L.EQ.0) GO TO 8 00084200
IF (L.EQ.2) GO TO 7 00084300
IF (DABS(X).LT.85.) GO TO 8 00084400
K=1 00084500
7 IF (DABS(X).GT.700.) GO TO 8 00084600
Y=DEXP(X) 00084700
IF (M.EQ.3) Y=1.D0/Y 00084800
8 X=Y*DBEJ(X,N,M) 00084900
DO 9 I=1,NR 00085000
R(J)=X 00085100
9 J=J+1 00085200
GO TO 5 00085300
10 IF (L2.GT.20) GO TO 30 00085400
IF (NARGS.GT.3) CALL ERROR(10) 00085500
M=1 00085600
IF (L2.GT.14) M=2 00085700
IF (L2.GT.16) M=1 00085800
IF (L2.GT.18) M=2 00085900
L=0 00086000
IF (L2.GT.16) L=1 00086100
Y=.785398163397D0 00086200
LV=0 00086300
JX=0 00086400
11 CALL ADRESS(NARGS,J2) 00086500
IF (J2.LE.0) CALL ERROR(11) 00086600
CALL ADRESS (NARGS-1,J1) 00086700
IF (J1.LE.0) CALL ERROR(11) 00086800
LT=0 00086900
IF (KI(1).EQ.1) GO TO 12 00087000
CALL ADRESS (1,JA) 00087100
LT=1 00087200
12 K=0 00087300
KA=0 00087400
IF (LT+LV.EQ.0) GO TO 19 00087500
IF (LV.EQ.0) GO TO 32 00087600
IF (LT.EQ.0) GO TO 33 00087700
111 DO 17 I=1,NR 00087800
IF (KA.EQ.0) X=R(JA) 00087900
JA=JA+1 00088000
E=1.D0 00088100
IF (JX.NE.0) Y=R(JB) 00088200
JB=JB+1 00088300
IF(M.EQ.2) CALL CBEK 00088400
IF(M.EQ.1) CALL CBEI 00088500
Z=X*DCOS(Y) 00088600
IF (L.EQ.1) GO TO 13 00088700
IF (DABS(Z).LT.85.) GO TO 14 00088800
K=K+1 00088900
13 E=DEXP(Z) 00089000
IF (M.EQ.1) E=1.D0/E 00089100
14 IF (N.EQ.0) GO TO 15 00089200
R(J1)=E*S 00089300
R(J2)=E*T 00089400
GO TO 16 00089500
15 R(J1)=E*P 00089600
R(J2)=E*Q 00089700
16 J1=J1+1 00089800
17 J2=J2+1 00089900
18 IF (K.NE.0) CALL ERROR(105) 00090000
RETURN 00090100
19 IF (JX.EQ.0) GO TO 33 00090200
Y=ARGS(2) 00090300
X=ARGS(1) 00090400
KA=1 00090500
JX=0 00090600
GO TO 111 00090700
30 IF (NARGS.GT.4) CALL ERROR(10) 00090800
JX=1 00090900
LV=0 00091000
IF (KI(2).EQ.1) GO TO 31 00091100
CALL ADRESS (2,JB) 00091200
IF (JB.LE.0) CALL ERROR(11) 00091300
LV=1 00091400
31 M=1 00091500
IF (L2.GT.22) M=2 00091600
IF (L2.GT.24) M=1 00091700
IF (L2.GT.26) M=2 00091800
L=0 00091900
IF (L2.GT.24) L=1 00092000
GO TO 11 00092100
32 IF (JX.EQ.0) GO TO 111 00092200
Y=ARGS(2) 00092300
JX=0 00092400
GO TO 111 00092500
33 KA=1 00092600
X=ARGS(1) 00092700
GO TO 111 00092800
20 IF (L2.GT.32) GO TO 27 00092900
200 IF (NARGS.GT.2) CALL ERROR (10) 00093000
CALL ADRESS(NARGS,J) 00093100
IF (J.LE.0) CALL ERROR(11) 00093200
LT=0 00093300
IF (KI(1).EQ.1) GO TO 21 00093400
CALL ADRESS (1,JA) 00093500
IF (JA.LE.0) CALL ERROR(11) 00093600
LT=1 00093700
21 IF (LT.EQ.0) X=ARGS(1) 00093800
IF (L2.GT.37) GO TO 25 00093900
IF (L2.EQ.32) GO TO 25 00094000
IF (L2.GT.29) GO TO 23 00094100
DO 22 N=1,NR 00094200
IF (LT.EQ.1) X=R(JA) 00094300
JA=JA+1 00094400
R(J)=BINTJ0(X) 00094500
22 J=J+1 00094600
RETURN 00094700
23 K=1 00094800
IF (L2.EQ.31) K=2 00094900
DO 24 N=1,NR 00095000
IF (LT.EQ.1) X=R(JA) 00095100
JA=JA+1 00095200
R(J)=COMELL(X,K) 00095300
24 J=J+1 00095400
RETURN 00095500
25 IF (LT.EQ.1) CALL ERROR (20) 00095600
Z=X 00095700
IF (L2.EQ.32) CALL BEJN 00095800
IF (L2.EQ.38) CALL BEIN 00095900
IF (L2.EQ.39) GO TO 49 00096000
K=NR 00096100
IF (K.GT.100) K=100 00096200
DO 26 N=1,K 00096300
R(J)=W(N) 00096400
26 J=J+1 00096500
RETURN 00096600
27 IF (L2.GT.34) GO TO 42 00096700
L=NR 00096800
IF (NR.GT.200) L=200 00096900
IF (NARGS.GT.2) CALL ERROR(10) 00097000
CALL ADRESS (NARGS,J) 00097100
IF (J.LE.0) CALL ERROR(11) 00097200
IF (KI(1).EQ.1) CALL ERROR(20) 00097300
CALL ADRESS (1,JA) 00097400
IF (JA.LE.0) CALL ERROR(11) 00097500
IF (L2.EQ.33) GO TO 29 00097600
CALL BEZONE 00097700
GO TO 28 00097800
29 CALL BEZERO 00097900
28 DO 40 N=1,L 00098000
R(JA)=A(N) 00098100
R(J)=B(N) 00098200
JA=JA+1 00098300
40 J=J+1 00098400
RETURN 00098500
42 IF (L2.GT.36) GO TO 46 00098600
IF (NARGS.GT.2) CALL ERROR(10) 00098700
CALL ADRESS(NARGS,J) 00098800
IF (J.LE.0) CALL ERROR(11) 00098900
LT=0 00099000
IF (KI(1).EQ.1) GO TO 43 00099100
CALL ADRESS (1,JA) 00099200
IF (JA.LE.0) CALL ERROR(11) 00099300
LT=1 00099400
43 IF (LT.EQ.0) X=ARGS(1) 00099500
K=0 00099600
IF (L2.EQ.36) K=1 00099700
DO 45 N=1,NR 00099800
IF (LT.NE.0) X=R(JA) 00099900
JA=JA+1 00100000
CALL STRUVE (X,Y,Z) 00100100
IF (K.EQ.0) GO TO 44 00100200
R(J)=Z 00100300
GO TO 45 00100400
44 R(J)=Y 00100500
45 J=J+1 00100600
RETURN 00100700
46 IF (L2.GT.37) GO TO 200 00100800
IF (NARGS.GT.3) CALL ERROR(10) 00100900
CALL ADRESS (NARGS,J) 00101000
IF (J.LE.0) CALL ERROR(11) 00101100
IF (KI(1).EQ.1) CALL ERROR (20) 00101200
CALL ADRESS (1,JA) 00101300
IF (JA.LE.0) CALL ERROR(11) 00101400
JB=IA(2) 00101500
K=IA(2) 00101600
DO 47 N=1,NR 00101700
A(N)=R(JA) 00101800
47 JA=JA+1 00101900
CALL FOURIA 00102000
DO 48 N=1,JB 00102100
R(J)=B(N) 00102200
48 J=J+1 00102300
RETURN 00102400
49 A(1)=DBEJ(X,0,7) 00102500
A(2)=DBEJ(X,1,7) 00102600
R(J)=A(1) 00102700
R(J+1)=A(2) 00102800
J=J+2 00102900
DO 50 I=3,NR 00103000
Z=I-2 00103100
A(I)=A(I-2)+2.*Z*A(I-1)/X 00103200
R(J)=A(I) 00103300
50 J=J+1 00103400
RETURN 00103500
END 00103600
C 11 59 SUBROUTINE BEZERO 2 19 68 00103700
SUBROUTINE BEZERO 00103800
DOUBLE PRECISION A(200),B(200),X,Y,AA,AB,AC 00103900
COMMON /BEZON/A,B,M,L 00104000
KB=1 00104100
N=M 00104200
25 J=4*N-1 00104300
IF (J.GT.44) GO TO 20 00104400
GO TO (1,2,3,4,5,6,7,8,9,10,11),N 00104500
1 X=2.404825577D0 00104600
Y=.5191474973D0 00104700
GO TO 30 00104800
2 X=5.5200781103D0 00104900
Y=-.3402648065D0 00105000
GO TO 30 00105100
3 X=8.6537279129D0 00105200
Y=.2714522999D0 00105300
GO TO 30 00105400
4 X=11.7915344391D0 00105500
Y=-.2324598314D0 00105600
GO TO 30 00105700
5 X=14.9309177086D0 00105800
Y=.2065464331D0 00105900
GO TO 30 00106000
6 X=18.0710639679D0 00106100
Y=-.187728803D0 00106200
GO TO 30 00106300
7 X=21.2116366299D0 00106400
Y=.1732658942D0 00106500
GO TO 30 00106600
8 X=24.3524715308D0 00106700
Y=-.1617015507D0 00106800
GO TO 30 00106900
9 X=27.493479132D0 00107000
Y=.1521812138D0 00107100
GO TO 30 00107200
10 X=30.6346064684D0 00107300
Y=-.1441659777D0 00107400
GO TO 30 00107500
11 X=33.7758202136D0 00107600
Y=.1372969434D0 00107700
GO TO 30 00107800
20 X=J 00107900
X=X*3.1415926536D0 00108000
AA=1.D0/X**2 00108100
AB=1.D0+2.D0*AA*(1.D0-AA*(31.D0-AA*(3779.D0-AA*6277237.D0/7)/5.D0)00108200
1/3.D0) 00108300
J=N/2 00108400
J=2*J 00108500
AC=1.D0 00108600
IF (J.EQ.N) AC=-1.D0 00108700
Y=AC*1.595769122D0*(1.-AA**2*56.D0/3.D0)/DSQRT(X) 00108800
X=X*AB/4.D0 00108900
30 A(KB)=X 00109000
B(KB)=Y 00109100
N=N+1 00109200
KB=KB+1 00109300
IF (KB.LE.L) GO TO 25 00109400
RETURN 00109500
END 00109600
C 12 58 SUBROUTINE BEZONE 2 19 68 00109700
SUBROUTINE BEZONE 00109800
DOUBLE PRECISION A(200),B(200),R,S,T,X,Y 00109900
COMMON /BEZON/A,B,M,L 00110000
KB=1 00110100
N=M 00110200
25 J=4*N+1 00110300
IF (J.GT.46) GO TO 20 00110400
GO TO (1,2,3,4,5,6,7,8,9,10,11),N 00110500
1 X=3.8317059702D0 00110600
Y=-.4027593957D0 00110700
GO TO 30 00110800
2 X=7.0155866698D0 00110900
Y= .3001157525D0 00111000
GO TO 30 00111100
3 X=10.1734681351D0 00111200
Y= -.2497048771D0 00111300
GO TO 30 00111400
4 X=13.3236919363D0 00111500
Y= .2183594072D0 00111600
GO TO 30 00111700
5 X=16.4706300509D0 00111800
Y= -.1964653715D0 00111900
GO TO 30 00112000
6 X=19.6158585105D0 00112100
Y= .180063375D0 00112200
GO TO 30 00112300
7 X=22.7600843806D0 00112400
Y= -.1671846005D0 00112500
GO TO 30 00112600
8 X=25.9036720876D0 00112700
Y= .1567249863D0 00112800
GO TO 30 00112900
9 X=29.0468285349D0 00113000
Y= -.1480111100D0 00113100
GO TO 30 00113200
10 X=32.1896799110D0 00113300
Y= .1406057982D0 00113400
GO TO 30 00113500
11 X=35.3323075501D0 00113600
Y= -.1342112403D0 00113700
GO TO 30 00113800
20 X=J 00113900
X=X*3.1415926536D0 00114000
R=1.D0/X**2 00114100
S=1.D0-6.D0*R*(1.D0-R*(1.D0-R*(157.2D0-130080.6D0*R/7.D0))) 00114200
J=N/2 00114300
J=2*J 00114400
T=1.D0 00114500
IF (J.NE.N) T=-1.D0 00114600
Y=T*1.595769122D0*(1.D0+R**2*24.D0*(1.D0-81.6*R))/DSQRT(X) 00114700
X=S*X/4.D0 00114800
30 A(KB)=X 00114900
B(KB)=Y 00115000
N=N+1 00115100
KB=KB+1 00115200
IF (KB.LE.L) GO TO 25 00115300
RETURN 00115400
END 00115500
C 13 21 FUNCTION BINTJ0(X) 2 19 68 00115600
DOUBLE PRECISION FUNCTION BINTJ0(X) 00115700
COMMON /RJN/A(100),Z 00115800
DOUBLE PRECISION A,Z,X,B,C 00115900
Z=DABS(X) 00116000
IF (Z.GT.100.) GO TO 20 00116100
CALL BEJN 00116200
IF (Z.GT.60.) GO TO 2 00116300
B=.0D0 00116400
DO 1 N=2,100,2 00116500
1 B=B+A(N) 00116600
B=2.D0*B 00116700
GO TO 3 00116800
20 A(1)=DBEJ(Z,0,7) 00116900
A(2)=DBEJ(Z,1,7) 00117000
2 C=1.D0/Z**2 00117100
B=1.D0+A(2)*(1.D0-C*(1.D0-C*(9.D0-C*(225.D0-C*11025.D0)))) 00117200
C=1.D0-C*(3.D0-C*(45.D0-C*(1575.D0-99225.D0*C))) 00117300
B=B-A(1)*C/Z 00117400
3 BINTJ0=B 00117500
RETURN 00117600
END 00117700
C 14 45 BLOCK DATA 2 19 68 00117800
BLOCK DATA 00117900
COMMON/CONSTS/PI,E,HALFPI,DEG,RAD,XEXP,XTRIG,XALOG,CC( 192 ) 00118000
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00118100
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00118200
COMMON / ABCDEF / L( 48 ) 00118300
COMMON / PCONST / P( 40 ), N( 40 ) 00118400
C 00118500
C THIS BLOCK DEFINES CONSTANTS TO BE USED THROUGHOUT OMNITAB 00118600
C WHOSE VALUE (ACCURACY) WILL HAVE TO BE CHANGED IN GOING FROM 00118700
C ONE SIZE FLOATING POINT NUMBER TO ANOTHER 00118800
C 00118900
DATA PI,E,HALFPI,DEG,RAD,XEXP,XTRIG,XALOG/3.14159265359, 00119000
12.71828182846,1.57079632679,57.295779513,1.74532925199E-2,158., 00119100
2.8E6,549755813887./ 00119200
DATA NMCARD / 15*1H ,1HY,1HO,1HU,1H ,1HD,1HU,2*1HM,1HY,1H,,1H , 00119300
1 1HY,1HO,1HU,1H ,1HL,1HE,1HF,1HT,1H ,1HO,2*1HF,1H ,1HT,1HH,1HE, 00119400
2 1H ,1H-,1HO,1HM,1HN,1HI,1HT,1HA,1HB,1H-,1H ,1HC,1HA,1HR,1HD, 00119500
3 15*1H / 00119600
DATA L(1),L(2),L(3),L(4),L(5),L(6),L(7),L(8),L(9),L(10)/ 00119700
1 1H0,1H1,1H2,1H3,1H4,1H5,1H6,1H7,1H8,1H9/ 00119800
DATA L(11),L(12),L(13),L(14),L(15),L(16),L(17),L(18),L(19),L(20)/00119900
1 1HA,1HB,1HC,1HD,1HE,1HF,1HG,1HH,1HI,1HJ/ 00120000
DATA L(21),L(22),L(23),L(24),L(25),L(26),L(27),L(28),L(29),L(30)/00120100
1 1HK,1HL,1HM,1HN,1HO,1HP,1HQ,1HR,1HS,1HT/ 00120200
DATA L(31),L(32),L(33),L(34),L(35),L(36),L(37),L(38),L(39),L(40)/00120300
1 1HU,1HV,1HW,1HX,1HY,1HZ,1H/,1H.,1H-,1H+/ 00120400
DATA L(41),L(42),L(43),L(44),L(45),L(46),L(47),L(48)/ 00120500
1 1H*,1H(,1H),1H,,1H ,1H=,1H",1H$/ 00120600
DATA P(1),P(2),P(3),P(4),P(5),P(6),P(7),P(8),P(9),P(10)/ 00120700
12*3.14159265359,2*2.71828182846,2.997925E8,2.997925E10, 00120800
2 1.60210E-19,1.60210E-20,2*6.02252E23/ 00120900
DATA P(11),P(12),P(13),P(14),P(15),P(16),P(17),P(18),P(19),P(20)/ 00121000
1 9.1091E-31,9.1091E-28,1.67252E-27,1.67252E-24,9.64870E4,9648.70, 00121100
2 66.256E-34,6.6256E-27,2*7.29720E-3/ 00121200
DATA P(21),P(22),P(23),P(24),P(25),P(26),P(27),P(28),P(29),P(30)/ 00121300
1 1.758796E11,17587960.,10973731.,109737.31,2.67519E8,26751.9, 00121400
2 9.2732E-24,9.2732E-21,8.3143,8.3143E7/ 00121500
DATA P(31),P(32),P(33),P(34),P(35),P(36),P(37),P(38),P(39),P(40)/ 00121600
1 1.38054E-23,1.38054E-16,3.7405E-16,3.7405E-5,1.43879E-2,1.43879, 00121700
2 5.6697E-8,5.6697E-5,6.670E-11,6.670E-8/ 00121800
C 00121900
DATA N(1),N(2),N(3),N(4),N(5),N(6),N(7),N(8),N(9),N(10)/ 00122000
1 11907,3645,2187,12393,10206,9612,9909,4374,5832,1069/ 00122100
DATA N(11),N(12),N(13),N(14),N(15),N(16),N(17),N(18),N(19),N(20)/ 00122200
1 12749,13379,5143,10046,13122,8019,2606,2750,14101,5103/ 00122300
END 00122400
C 15 79 SUBROUTINE CBEI 2 19 68 00122500
SUBROUTINE CBEI 00122600
C COMPUTES I0(Z) AND I1(Z) FOR COMPLEX ARGUMENT R*E(IS)=Z 00122700
COMMON /ABEKI/R,S,A,B,C,D 00122800
DOUBLE PRECISION A,B,C,D,E,F,G,H,P,Q,R,S,T,X,Y,Z,V,U,W,AA 00122900
E=DCOS(S) 00123000
F=DSIN(S) 00123100
IF (R.GT.15.5) GO TO 3 00123200
P=1.D0-2.D0*F**2 00123300
AA=P 00123400
Q=2.D0*E*F 00123500
W=Q 00123600
A=1.D0 00123700
B=0.D0 00123800
C=1.D0 00123900
U=0.D0 00124000
G=1.D0 00124100
T=2.D0 00124200
X=(R/2.D0)**2 00124300
V=X 00124400
Y=X 00124500
DO 1 N=1,60 00124600
Z=1.D0/G**2 00124700
H=1.D0/(G*T) 00124800
A=A+X*Z*P 00124900
B=B+X*Z*Q 00125000
C=C+V*H*P 00125100
U=U+V*H*Q 00125200
X=X*Y*Z 00125300
IF (X.LT..5D-10) GO TO 2 00125400
V=V*Y*H 00125500
Z=P 00125600
P=Z*AA-Q*W 00125700
Q=Q*AA+Z*W 00125800
G=G+1.D0 00125900
1 T=T+1.D0 00126000
2 D=R*(C*F+U*E)/2.D0 00126100
C=R*(C*E-U*F)/2.D0 00126200
GO TO 6 00126300
3 Z=DEXP(R*E)/DSQRT(6.283185307D0*R) 00126400
X=S/2.D0-R*F 00126500
Y=Z*DCOS(X) 00126600
Z=Z*DSIN(X) 00126700
W=-1.D0 00126800
G=1.D0 00126900
H=3.D0 00127000
P=E 00127100
Q=F 00127200
T=1.D0 00127300
U=0.D0 00127400
V=1.D0 00127500
X=0.D0 00127600
A=1.D0 00127700
B=1.D0/(8.D0*R) 00127800
C=B 00127900
D=B 00128000
DO 4 N=1,20 00128100
AA=B*G**2/A 00128200
T=T+AA*P 00128300
U=U+AA*Q 00128400
AA=C*W*H/A 00128500
V=V+AA*P 00128600
X=X+AA*Q 00128700
B=B*D*G**2/A 00128800
IF (B.LT..5D-10) GO TO 5 00128900
C=C*D*W*H/A 00129000
W=W+2.D0 00129100
G=G+2.D0 00129200
H=H+2.D0 00129300
A=A+1.D0 00129400
AA=P*E-Q*F 00129500
Q=F*P+E*Q 00129600
4 P=AA 00129700
5 A=Y*T-Z*U 00129800
B=-(Y*U+T*Z) 00129900
C=Y*V-Z*X 00130000
D=-(Y*X+Z*V) 00130100
6 RETURN 00130200
END 00130300
C 16 102 SUBROUTINE CBEK 2 19 68 00130400
SUBROUTINE CBEK 00130500
C COMPUTES K0(Z) AND K1(Z) FOR COMPLEX ARGUMENT Z=R*E(IS) 00130600
COMMON /ABEKI/R,S,A,B,C,D 00130700
DOUBLE PRECISION A,B,C,D,E,F,G,H,P,Q,R,S,T,U,V,W,X,Y,Z, 00130800
1AA(40),AB(40),AC,AD,AE 00130900
E=DCOS(S) 00131000
F=DSIN(S) 00131100
IF (R.GT.8.) GO TO 5 00131200
P=1.D0-2.D0*F**2 00131300
Q=2.D0*E*F 00131400
W=P 00131500
Z=Q 00131600
X=(R/2.D0)**2 00131700
Y=X 00131800
V=X 00131900
G=E*(4.D0*E**2-3.D0) 00132000
H=F*(3.D0-4.D0*F**2) 00132100
T=DLOG(R/2.D0)+.5772156649D0 00132200
A=-T 00132300
B=-S 00132400
C=E*(T-0.5D0)-S*F 00132500
U=F*(T-0.5D0)+S*E 00132600
AC=1.D0 00132700
AD=2.D0 00132800
L=L-10 00132900
IF (L.GT.1) GO TO 2 00133000
AA(1)=1.D0 00133100
AB(1)=1.25D0 00133200
DO 1 N=2,40 00133300
AE=N 00133400
AA(N)=AA(N-1)+1.D0/AE 00133500
1 AB(N)=AA(N)+1.D0/(2.D0*(AE+1.D0)) 00133600
2 L=20 00133700
DO 3 N=1,40 00133800
AE=T-AA(N) 00133900
D=P*AE-S*Q 00134000
AE=Q*AE+S*P 00134100
A=A-D*X/AC**2 00134200
B=B-AE*X/AC**2 00134300
AE=T-AB(N) 00134400
D=G*AE-H*S 00134500
AE=H*AE+G*S 00134600
C=C+D*Y/(AC*AD) 00134700
U=U+AE*Y/(AC*AD) 00134800
X=X*V/AC**2 00134900
IF (X.LT..5D-10) GO TO 4 00135000
Y=Y*V/(AC*AD) 00135100
AC=AC+1.D0 00135200
AD=AD+1.D0 00135300
AE=P 00135400
P=AE*W-Q*Z 00135500
Q=Q*W+AE*Z 00135600
AE=G 00135700
G=AE*W-H*Z 00135800
3 H=H*W+AE*Z 00135900
4 C=E/R+R*C/2.D0 00136000
D=-F/R+R*U/2.D0 00136100
GO TO 8 00136200
5 U=DEXP(-R*E)*DSQRT(1.5707963268D0/R) 00136300
V=R*F+S/2.D0 00136400
Y=U*DCOS(V) 00136500
Z=U*DSIN(V) 00136600
W=-1.D0 00136700
G=1.D0 00136800
H=3.D0 00136900
P=E 00137000
Q=F 00137100
T=1.D0 00137200
U=0.D0 00137300
V=1.D0 00137400
X=0.D0 00137500
A=1.D0 00137600
B=1.D0/(8.D0*R) 00137700
C=B 00137800
D=B 00137900
AC=-1.D0 00138000
DO 6 N=1,12 00138100
AD=AC*B*G**2/A 00138200
AE=AC*C*W*H/A 00138300
T=T+AD*P 00138400
U=U-AD*Q 00138500
V=V+AE*P 00138600
X=X-AE*Q 00138700
AD=B 00138800
B=B*D*G**2/A 00138900
IF (B.GT.AD) GO TO 7 00139000
IF (B.LT..5D-10) GO TO 7 00139100
C=C*D*W*H/A 00139200
W=W+2.D0 00139300
H=H+2.D0 00139400
G=G+2.D0 00139500
A=A+1.D0 00139600
AC=-1.D0*AC 00139700
AD=P 00139800
P=AD*E-Q*F 00139900
6 Q=Q*E+AD*F 00140000
7 A=Y*T+U*Z 00140100
B=Y*U-T*Z 00140200
C=Y*V+X*Z 00140300
D=Y*X-V*Z 00140400
8 RETURN 00140500
END 00140600
C 17 24 SUBROUTINE CHANGE 2 19 68 00140700
SUBROUTINE CHANGE 00140800
C 00140900
C CHANGE SIGNS OF COLS ++, ++, ++, ETC. 00141000
C 00141100
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00141200
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00141300
DIMENSION ARGS(100) 00141400
EQUIVALENCE( ARGS(1), RC(10001) ) 00141500
IF (NARGS) 910,910,5 00141600
5 DO 20 I=1,NARGS 00141700
CALL ADRESS( I, J ) 00141800
IF(J) 903,911,10 00141900
10 IF (NERROR .NE. 0) RETURN 00142000
DO 20 N=1,NRMAX 00142100
JJ=J+N-1 00142200
20 RC(JJ)=-RC(JJ) 00142300
GO TO 999 00142400
903 CALL ERROR (3) 00142500
GO TO 999 00142600
910 CALL ERROR (10) 00142700
GO TO 999 00142800
911 CALL ERROR (11) 00142900
999 RETURN 00143000
END 00143100
C 18 19 SUBROUTINE CHKCOL( J ) 2 19 68 00143200
SUBROUTINE CHKCOL( J ) 00143300
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00143400
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00143500
DIMENSION ARGS(100) 00143600
EQUIVALENCE( ARGS(1), RC(10001) ) 00143700
C 00143800
C THIS ROUTINE CHECKS THAT ALL "NARGS" ARGUMENTS ARE LEGAL 00143900
C COLUMN NUMBERS AND CONVERTS THEM IN IARGS TO THEIR BEGINNING 00144000
C ADDRESSES. 00144100
IF( NARGS .GT. 0 ) GO TO 20 00144200
10 J = 1 00144300
GO TO 40 00144400
20 DO 30 I = 1, NARGS 00144500
CALL ADRESS( I, IARGS( I ) ) 00144600
IF( IARGS( I ) .LE. 0 ) GO TO 10 00144700
30 CONTINUE 00144800
J = 0 00144900
40 RETURN 00145000
END 00145100
C 19 26 SUBROUTINE CKIND(J) 2 19 68 00145200
SUBROUTINE CKIND(J) 00145300
C**** CKIND 00145400
C**** S PEAVY 5/22/67 00145500
C**** THE FIRST J VALUES OF KIND ARE CHECKED 00145600
C**** IF ALL ARE =0 THEN J=0 00145700
C**** IF ALL ARE =1 THEN J=1 00145800
C**** IF SOME ARE 0 AND SOME 1 J=2 00145900
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00146000
ONROW, 00146100
1NCOL,NARGS,VWXYZ(8),NERROR 00146200
DIMENSION ARGS(100) 00146300
EQUIVALENCE( ARGS(1), RC(10001) ) 00146400
JA=J 00146500
J=0 00146600
DO 10 I=1,JA 00146700
IF(KIND(I).NE.0) GO TO 15 00146800
10 CONTINUE 00146900
RETURN 00147000
15 J=1 00147100
DO 20 I=1,JA 00147200
IF(KIND(I).NE.1) GO TO 30 00147300
20 CONTINUE 00147400
RETURN 00147500
30 J=2 00147600
RETURN 00147700
END 00147800
C 20 46 FUNCTION COMELL (Z,I) 2 19 68 00147900
DOUBLE PRECISION FUNCTION COMELL (Z,I) 00148000
C COMPLETE ELLIPTIC INTEGRALS - FIRST AND SECOND KIND 00148100
DOUBLE PRECISION Z,X,A,B,C,D,E,P,Q 00148200
X=Z 00148300
IF (DABS(Z).LT.1.D0) GO TO 1 00148400
WRITE (6,2) 00148500
2 FORMAT (50H MODULUS GREATER OR EQUAL TO 1.+VALUE SET TO .9999) 00148600
X=.9999 00148700
1 A=X**2 00148800
B=DSQRT(1.D0-A) 00148900
IF (X.GT..996) GO TO 6 00149000
B=(1.D0-B)/(1.D0+B) 00149100
A=B**2 00149200
B=1.D0+B 00149300
C=1.D0 00149400
D=C 00149500
E=2.D0 00149600
IF (I.EQ.1) GO TO 3 00149700
B=1.D0/B 00149800
D=-1.D0 00149900
3 P=A 00150000
DO 4 N=1,90 00150100
C=C+P*(D/E)**2 00150200
P=P*A*(D/E)**2 00150300
IF (P.LT..1D-9) GO TO 5 00150400
D=D+2.D0 00150500
4 E=E+2.D0 00150600
5 A=B*C*1.570796326D0 00150700
GO TO 8 00150800
6 A=DLOG(4.D0/B) 00150900
Q=B**2 00151000
IF (I.GT.1) GO TO 7 00151100
B=.25D0*(A-1.D0) 00151200
C=.140625D0*(A-1.666666666D0) 00151300
D=9.765625D-2*(A-1.233333333D0) 00151400
E=1255.D0*(A-1.27904761904D0)/16384.D0 00151500
A=A+Q*(B+Q*(C+Q*(D+Q*E))) 00151600
GO TO 8 00151700
7 B=.5D0*(A-.5D0) 00151800
C=.1875D0*(A-1.083333333D0) 00151900
D=.1171875D0*(A-1.2D0) 00152000
E=175.D0*(A-1.251190476D0)/2048.D0 00152100
A=1.+Q*(B+Q*(C+Q*(D+Q*E))) 00152200
8 COMELL=A 00152300
RETURN 00152400
END 00152500
C 21 113 FUNCTION DBEJ(X,N,M) 2 19 68 00152600
DOUBLE PRECISION FUNCTION DBEJ(X,N,M) 00152700
DOUBLE PRECISION E,H,X,A,B,C,D,Y,S(120),T(1200) 00152800
1 IF (DABS(X).GT.16.5) GO TO 10 00152900
A=(X/2.D0)**2 00153000
J=X/.4+6.8 00153100
B=J 00153200
C=J+N 00153300
D=-1.D0 00153400
IF (M.GT.1) D=1.D0 00153500
IF (M.GT.3) GO TO 3 00153600
Y=1.D0 00153700
DO 2 I=1,J 00153800
Y=1.D0+Y*A/(B*C)*D 00153900
B=B-1.D0 00154000
2 C=C-1.D0 00154100
IF (N.GT.0) Y=X*Y/2.D0 00154200
GO TO 55 00154300
3 L=L-10 00154400
IF (L.GT.0) GO TO 5 00154500
E=1.0D0 00154600
S(1)=.5772156649015D0 00154700
S(61)=S(1)-.5D0 00154800
DO 4 I=2,60 00154900
S(I)=S(I-1)-1.D0/E 00155000
S(I+60)=S(I)-1.D0/(2.D0*(E+1.D0)) 00155100
4 E=E+1.D0 00155200
5 L=100 00155300
E=DLOG(X/2.D0) 00155400
DO 6 I=1,120 00155500
6 T(I)=S(I)+E 00155600
IF (M.LT.6) GO TO 11 00155700
IF (X.GT.8.) GO TO 10 00155800
11 IA=0 00155900
IF (N.GT.0) IA=60 00156000
IF (M.GT.5) D=-1.D0 00156100
I=J+IA+1 00156200
Y=T(I) 00156300
DO 7IB=1,J 00156400
I=J-IB+IA+1 00156500
Y=T(I)-D*A*Y/(B*C) 00156600
B=B-1.D0 00156700
7 C=C-1.D0 00156800
IF (N.GT.0) Y=X*Y/2.D0 00156900
IF (M.GT.5) GO TO 8 00157000
Y=Y*.636619772368D0 00157100
IF (N.NE.0) Y=-.636619772368D0/X+Y 00157200
GO TO 55 00157300
8 Y=-Y 00157400
IF (N.NE.0) Y=1.D0/X-Y 00157500
GO TO 55 00157600
10 A=8.D0*X 00157700
H=N 00157800
H=(2.*H)**2 00157900
T(1)=(H-1.D0)/A 00158000
D=T(1) 00158100
DO 30 I=2,20 00158200
K=I 00158300
B=I 00158400
C=(2*I-1)**2 00158500
T(I)=(H-C)/(A*B) 00158600
E=D 00158700
D=T(I)*D 00158800
E=DABS(D/E) 00158900
IF (DABS(D).LT..5D-10) GO TO 32 00159000
IF (E.GT..91) GO TO 32 00159100
30 T(I+2)=0.0D0 00159200
32 A=-1.D0 00159300
IF (M.LE.1) GO TO 20 00159400
IF (M.LE.3) GO TO 12 00159500
IF (M.LE.5) GO TO 20 00159600
A=1.D0 00159700
12 Y=1.D0 00159800
DO 14 I=1,K 00159900
J=K-I+1 00160000
14 Y=1.D0+A*Y*T(J) 00160100
A=1.D0 00160200
IF (X.LT.700.D0) A=DEXP(X) 00160300
IF (M.LE.5) GO TO 16 00160400
Y=Y/(A*DSQRT(.636619772368D0*X)) 00160500
GO TO 55 00160600
16 Y=Y*A/DSQRT(6.283185307D0*X) 00160700
GO TO 55 00160800
20 Y=DSQRT(3.1415926536D0*X) 00160900
J=K/2 00161000
K=2*J 00161100
J=J-1 00161200
A=1.D0 00161300
H=A 00161400
DO 21 I=1,J 00161500
IA=K-2*I+1 00161600
A=1.D0-A*T(IA)*T(IA+1) 00161700
21 H=1.D0-H*T(IA)*T(IA-1) 00161800
A=(1.D0-T(1)*T(2)*A)/Y 00161900
H=T(1)*H/Y 00162000
B=DSIN(X) 00162100
C=DCOS(X) 00162200
D=A-H 00162300
E=A+H 00162400
IF (M.GT.2) GO TO 24 00162500
IF (N.EQ.0) GO TO 22 00162600
Y=E*B-D*C 00162700
GO TO 55 00162800
22 Y=D*B+E*C 00162900
GO TO 55 00163000
24 IF (N.EQ.0) GO TO 26 00163100
Y=-D*B-E*C 00163200
GO TO 55 00163300
26 Y=E*B-D*C 00163400
GO TO 55 00163500
55 DBEJ=Y 00163600
60 RETURN 00163700
END 00163800
C 22 10 FUNCTION DBEY( X , N ) 2 19 68 00163900
DOUBLE PRECISION FUNCTION DBEY (X,N) 00164000
DOUBLE PRECISION X 00164100
C 00164200
C THIS IS A DUMMY FUNCTION. THIS FUNCTION WAS LEFT OUT OF 00164300
C THE LATEST LISTING OF THE OMNITAB PROGRAM FROM THE BUREAU OF 00164400
C STANDARDS. SO THIS ROUTINE WAS SUBSTITUTED UNTIL THE CORRECT ROUTINE00164500
C CAN BE OBTAINED. R. L. CHAMBERLAIN 2/12/600164600
C 00164700
RETURN 00164800
END 00164900
C 23 47 SUBROUTINE DEFINE 2 19 68 00165000
SUBROUTINE DEFINE 00165100
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00165200
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00165300
DIMENSION ARGS(100) 00165400
EQUIVALENCE( ARGS(1), RC(10001) ) 00165500
C 00165600
C DEFINE $$ INTO ROW ++, COL ++. 00165700
C DEFINE ROW ++, COL ++ INTO ROW ++, COL ++. 00165800
C DEFINE ROW ++, COL ++ INTO COL ++. 00165900
C 00166000
IF( NARGS .NE. 3 ) IF( NARGS - 4 ) 200, 40, 200 00166100
IF( KIND( 1 ) .EQ. 0 ) GO TO 40 00166200
10 I = NARGS 00166300
GO TO 100 00166400
20 IF( NERROR .EQ. 0 ) RC( L ) = ARGS( 1 ) 00166500
30 RETURN 00166600
40 I = 2 00166700
GO TO 100 00166800
50 ARGS( 1 ) = RC( L ) 00166900
IF( NARGS .EQ. 4 ) GO TO 10 00167000
CALL ADRESS( 3, I ) 00167100
IF ( I ) 210, 220, 60 00167200
60 IF( NERROR .NE. 0 ) GO TO 30 00167300
IF( NRMAX .EQ. 0 ) GO TO 70 00167400
CALL VECTOR( ARGS( 1 ), I ) 00167500
GO TO 30 00167600
70 I = 9 00167700
80 CALL ERROR( I ) 00167800
GO TO 30 00167900
C 00168000
C CHECK AND CALCULATE WORKSHEET ENTRY LOCATION INTO L 00168100
C 00168200
100 CALL ADRESS (I, L ) 00168300
IF ( L ) 210, 220, 110 00168400
110 IF( KIND(I-1) .EQ. 0 .AND. IARGS(I-1) .GT. 0 .AND. IARGS(I-1) .LE.00168500
1 NROW ) GO TO 120 00168600
I = 16 00168700
GO TO 80 00168800
120 L = L + IARGS(I-1) - 1 00168900
IF( I - 2 ) 50, 50, 20 00169000
200 I = 10 00169100
GO TO 80 00169200
210 I = 20 00169300
GO TO 80 00169400
220 I = 11 00169500
GO TO 80 00169600
END 00169700
C 24 21 SUBROUTINE DIMENS 2 19 68 00169800
SUBROUTINE DIMENS 00169900
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00170000
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00170100
DIMENSION ARGS(100) 00170200
EQUIVALENCE( ARGS(1), RC(10001) ) 00170300
NRC = 10000 00170400
IF( NARGS .EQ. 2 ) IF( KIND( 1 ) + KIND( 2 ) ) 30, 40, 30 00170500
K = 10 00170600
10 CALL ERROR( K ) 00170700
20 RETURN 00170800
30 K = 20 00170900
GO TO 10 00171000
40 IF( IARGS( 1 ) .GT. 0 .AND. IARGS( 2 ) .GT. 0 .AND. IARGS( 1 ) * 00171100
1 IARGS( 2 ) .LE. NRC ) GO TO 50 00171200
K = 3 00171300
GO TO 10 00171400
50 NROW = IARGS( 1 ) 00171500
NCOL = IARGS( 2 ) 00171600
NRMAX = MIN0( NROW, NRMAX ) 00171700
GO TO 20 00171800
END 00171900
C 25 4 SUBROUTINE DUMMY 2 19 68 00172000
SUBROUTINE DUMMY 00172100
CALL X( 5HDUMMY ) 00172200
RETURN 00172300
END 00172400
C 26 27 SUBROUTINE ERASE 2 19 68 00172500
SUBROUTINE ERASE 00172600
C 00172700
C ERASE COL ++,++, ++, ETC. 00172800
C 00172900
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00173000
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00173100
DIMENSION ARGS(100) 00173200
EQUIVALENCE( ARGS(1), RC(10001) ) 00173300
IF( NARGS .EQ. 0 ) GO TO 50 00173400
CALL CHKCOL( I ) 00173500
IF( I .EQ. 0 ) GO TO 30 00173600
I = 20 00173700
10 CALL ERROR( I ) 00173800
20 RETURN 00173900
30 IF( NERROR .NE. 0 .OR. NRMAX .EQ. 0 ) GO TO 20 00174000
DO 40 I = 1, NARGS 00174100
40 CALL VECTOR( 0., IARGS( I ) ) 00174200
GO TO 20 00174300
C 00174400
C CLEAR ALL OF DIMENSIONED WORKSHEET. 00174500
C 00174600
50 IF( NERROR .NE. 0 ) GO TO 20 00174700
NRMAX = NROW * NCOL 00174800
CALL VECTOR( 0., 1 ) 00174900
NRMAX = 0 00175000
GO TO 20 00175100
END 00175200
C 27 199 SUBROUTINE ERROR(I) 2 19 68 00175300
SUBROUTINE ERROR(I) 00175400
COMMON /BLOCKC/KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00175500
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00175600
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00175700
DIMENSION ARGS(100) 00175800
EQUIVALENCE( ARGS(1), RC(10001) ) 00175900
COMMON / BLOCKX / INDEX( 6, 8 ), LEVEL 00176000
COMMON / SPRV / NERCON,NERR 00176100
DIMENSION IL(2) 00176200
DATA INCERR, IBL, IL(1),IL(2) / 1 , 2H , 2H/I, 2H/F / 00176300
ISCRUN=ISCRAT 00176400
C 00176500
C IF I IS NEGATIVE, SET INCERR = 1, SO THAT ERRORS WILL BE TALLIED. 00176600
C IF I IS ZERO, SET INCERR = 0 AND CLEAR NERROR TO ZERO. ERRORS 00176700
C WILL NOT BE TALLIED. (THEY ARE FORGIVEN). 00176800
C IF 1 .LE. I .LE. 100, FATAL ERROR 00176900
C IF 101 .LE. I .LE. 200, ARITHMETIC ERROR 00177000
C IF 201 .LE. I .LE. INFORMATIVE DIAGNOSTIC 00177100
C 00177200
NERR = NERR + 1 00177300
IF( I ) 7000, 7001, 7003 00177400
7000 INCERR = 1 00177500
GO TO 7002 00177600
7001 INCERR = 0 00177700
NERROR = 0 00177800
7002 RETURN 00177900
7003 IF( I .GT. 100 ) GO TO 200 00178000
NERROR = NERROR + INCERR 00178100
WRITE(ISCRUN,8000) 00178200
8000 FORMAT(84X) 00178300
WRITE(ISCRUN,8001) 00178400
8001 FORMAT(15H*** FATAL ERROR,69X) 00178500
GO TO (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, 00178600
1 23,24,25,26,27,28,29,30), I 00178700
1 WRITE(ISCRUN,801) 00178800
801 FORMAT(29H*** NAME NOT FOUND IN LIBRARY,55X) 00178900
GO TO 900 00179000
2 WRITE(ISCRUN,802) 00179100
802 FORMAT(28H*** ILLEGAL STATEMENT NUMBER,56X) 00179200
GO TO 888 00179300
3 WRITE(ISCRUN,803) 00179400
803 FORMAT(28H*** ILLEGAL ARGUMENT ON CARD,56X) 00179500
GO TO 888 00179600
4 GO TO 900 00179700
5 WRITE(ISCRUN,805) 00179800
805 FORMAT(38H*** COMMAND NOT ALLOWED IN REPEAT MODE,46X) 00179900
GO TO 900 00180000
6 WRITE(ISCRUN,806) 00180100
806 FORMAT(54H*** NUMBER MAY NOT BEGIN CARD BETWEEN BEGIN AND FINISH, 00180200
130X) 00180300
GO TO 900 00180400
7 WRITE(ISCRUN,807) 00180500
807 FORMAT(23H*** ILLEGAL *STATEMENT*,61X) 00180600
GO TO 900 00180700
8 WRITE(ISCRUN,808) 00180800
808 FORMAT(34H*** PHYSICAL CONSTANT NOT IN TABLE,50X) 00180900
GO TO 900 00181000
9 WRITE(ISCRUN,809) 00181100
809 FORMAT(13H*** NRMAX = 0,71X) 00181200
GO TO 900 00181300
10 WRITE(ISCRUN,810) 00181400
810 FORMAT(31H*** ILLEGAL NUMBER OF ARGUMENTS,53X) 00181500
GO TO 888 00181600
11 WRITE(ISCRUN,811) 00181700
811 FORMAT(40H*** COLUMN NUMBER TOO BIG OR LESS THAN 1,44X) 00181800
GO TO 888 00181900
12 WRITE(ISCRUN,812) 00182000
812 FORMAT(33H*** COMMAND STORAGE AREA OVERFLOW,51X) 00182100
GO TO 900 00182200
13 WRITE(ISCRUN,813) 00182300
813 FORMAT(30H*** STATEMENT NUMBER NOT FOUND,54X) 00182400
GO TO 888 00182500
14 WRITE(ISCRUN,814) 00182600
814 FORMAT(35H*** ILLEGAL OR NO FORMAT DESIGNATOR,49X) 00182700
GO TO 900 00182800
15 WRITE(ISCRUN,815) 00182900
815 FORMAT(34H*** DIMENSIONED AREA EXCEEDS LIMIT,50X) 00183000
GO TO 888 00183100
16 WRITE(ISCRUN,816) 00183200
816 FORMAT(27H*** ILLEGAL SIZE ROW NUMBER,57X) 00183300
GO TO 888 00183400
17 WRITE(ISCRUN,817) 00183500
817 FORMAT(39H*** DEFINED MATRIX OVERFLOWS WORKSHEET,45X) 00183600
GO TO 888 00183700
18 WRITE(ISCRUN,818) 00183800
818 FORMAT(36H*** INTEGER ARGUMENT LESS THAN -8191,48X) 00183900
GO TO 888 00184000
19 WRITE(ISCRUN,819) 00184100
819 FORMAT(48H*** STORED PERFORM STATEMENT WILL EXECUTE ITSELF,36X) 00184200
GO TO 900 00184300
20 WRITE(ISCRUN,820) 00184400
820 FORMAT(29H*** IMPROPER TYPE OF ARGUMENT,55X) 00184500
GO TO 888 00184600
21 WRITE(ISCRUN,821) 00184700
821 FORMAT(26H*** COMMAND MUST BE STORED,58X) 00184800
GO TO 900 00184900
22 WRITE(ISCRUN,822) 00185000
822 FORMAT(31H*** MATRIX IS (NEARLY) SINGULAR,53X) 00185100
GO TO 900 00185200
23 WRITE(ISCRUN,823) 00185300
823 FORMAT(33H*** MATRIX IS TOO LARGE TO INVERT,51X) 00185400
GO TO 900 00185500
24 CONTINUE 00185600
25 CONTINUE 00185700
26 CONTINUE 00185800
27 CONTINUE 00185900
28 CONTINUE 00186000
29 CONTINUE 00186100
30 GO TO 900 00186200
888 IF( LEVEL .EQ. 0 ) GO TO 900 00186300
NRG = MIN0( NARGS , 10 ) 00186400
DO 890 II = 1,8 00186500
890 KIND( II + 89 ) = IBL 00186600
IF( NARGS .EQ. 0 ) GO TO 894 00186700
DO 892 II = 1,NRG 00186800
J = KIND( II ) 00186900
IF( J .EQ. 0 ) ARGS( II ) = IARGS( II ) 00187000
892 KIND( II + 89 ) = IL( J+1 ) 00187100
894 WRITE(ISCRUN,896) NARGS 00187200
896 FORMAT(4X,I6,70H ARGUMENTS IN COMMAND. THE FIRST 8 ENTRIES IN THE00187300
1 ARGUMENT POOL ARE..,4X) 00187400
WRITE(ISCRUN,897) ( ARGS( II ) , KIND( II+89 ), II = 1,8 ) 00187500
897 FORMAT(4X,8(F8.2,A2)) 00187600
900 IF( LEVEL .NE. 0 ) CALL RNDOWN 00187700
C FORCE OUT OF REPEAT MODE IF FATAL ERROR 00187800
IF( I .LE. 100 ) LEVEL = 0 00187900
WRITE( ISCRUN, 901 ) 00188000
901 FORMAT(84X) 00188100
RETURN 00188200
200 IF( NERR.LE.NERCON) GO TO 201 00188300
WRITE(ISCRUN,9999) NERCON 00188400
9999 FORMAT(1H*,I5,58H INFORMATIVE AND ARITHMETIC DIAGNOSTICS HAVE BEEN00188500
1 PRINTED.,20X) 00188600
WRITE(ISCRUN,9998) 00188700
9998 FORMAT(61H* THE PRINTING OF ANY SUCH ADDITIONAL DIAGNOSTICS IS DEL00188800
1ETED. ,23X ) 00188900
RETURN 00189000
201 IF( I .GT. 200 ) GO TO 400 00189100
C 00189200
C 00189300
C ARITHMETIC TROUBLES, SET FLAGS 00189400
C 00189500
CALL AERR(I-100) 00189600
250 RETURN 00189700
C 00189800
C INFORMATIVE DIAGNOSTIC 00189900
C 00190000
400 IF( MOD( LLIST , 2 ) .EQ. 0 ) GO TO 250 00190100
WRITE(ISCRUN, 901) 00190200
WRITE(ISCRUN, 490) 00190300
490 FORMAT(24H* INFORMATIVE DIAGNOSTIC,60X) 00190400
II=I-200 00190500
GO TO (401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412,00190600
1 413, 414, 415 ), II 00190700
401 WRITE(ISCRUN,501) 00190800
501 FORMAT(52H* TOO MUCH DATA IN SET, READ OR GENERATE, SPILL LOST, 00190900
132X) 00191000
GO TO 900 00191100
402 WRITE(ISCRUN,502) 00191200
502 FORMAT(61H* COMMAND NOT ALLOWED IN REPEAT MODE. EXECUTED BUT NOT S00191300
1TORED,23X) 00191400
GO TO 900 00191500
403 WRITE( ISCRUN, 503 ) 00191600
503 FORMAT(38H* VALUE REQUESTED IN SHORTEN NOT FOUND,46X) 00191700
GO TO 900 00191800
404 WRITE( ISCRUN, 504 ) 00191900
504 FORMAT(32H* BAD HEAD. COLUMN GT 50 OR NO /,52X) 00192000
GO TO 900 00192100
405 WRITE( ISCRUN, 505 ) 00192200
505 FORMAT(68H* THIS COMMAND WAS NOT EXECUTED BECAUSE ITS MEANING WAS 00192300
1QUESTIONABLE,16X) 00192400
GO TO 900 00192500
406 WRITE(ISCRUN,506) 00192600
506 FORMAT(24H* F LESS THAT 0, SET = 0,60X) 00192700
GO TO 900 00192800
407 WRITE(ISCRUN,507) 00192900
507 FORMAT(24H* NU1 OR NU2 LESS THAN 1,60X) 00193000
GO TO 900 00193100
408 WRITE(ISCRUN,508) 00193200
508 FORMAT(33H* NU1 OR NU2 TRUNCATED TO INTEGER,51X) 00193300
GO TO 900 00193400
409 WRITE(ISCRUN,509) 00193500
509 FORMAT(34H* IMPROPER TITLE NUMBER, ASSUMED 1,50X) 00193600
GO TO 900 00193700
410 WRITE(ISCRUN,510) 00193800
510 FORMAT(36H* COLUMN TOO SHORT FOR ENTIRE MATRIX,48X) 00193900
GO TO 900 00194000
411 WRITE(ISCRUN,511) 00194100
511 FORMAT(52H* ASTERISK STRING IMPLYING "THRU" INCORRECT, IGNORED, 00194200
1 32X) 00194300
GO TO 900 00194400
412 WRITE(ISCRUN,512) 00194500
512 FORMAT(34H* LAST ARGUMENT IN COMMAND IGNORED,50X) 00194600
GO TO 900 00194700
413 WRITE(ISCRUN,513) 00194800
513 FORMAT(50H* DEMOTE WENT PAST BOTTOM OF WORKSHEET, SPILL LOST,34X) 00194900
414 CONTINUE 00195000
415 CONTINUE 00195100
GO TO 900 00195200
END 00195300
C 28 32 SUBROUTINE EXCHNG 2 19 68 00195400
SUBROUTINE EXCHNG 00195500
C 00195600
C EXCHANGE COL ++ WITH ++, COL ++ WITH ++, ETC. 00195700
C 00195800
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00195900
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00196000
DIMENSION ARGS(100) 00196100
EQUIVALENCE( ARGS(1), RC(10001) ) 00196200
IF (NARGS) 910,910,5 00196300
5 IF (NARGS.NE.(NARGS/2)*2) GO TO 910 00196400
DO 30 I=1,NARGS,2 00196500
CALL ADRESS( I, J ) 00196600
IF (J) 903,911,10 00196700
10 CALL ADRESS( I+1, K ) 00196800
IF (K) 903,911,11 00196900
11 IF (NERROR.NE.0) RETURN 00197000
DO 20 N=1,NRMAX 00197100
JJ=J+N-1 00197200
KK=K+N-1 00197300
WORK=RC(JJ) 00197400
RC(JJ)=RC(KK) 00197500
RC(KK)=WORK 00197600
20 CONTINUE 00197700
30 CONTINUE 00197800
GO TO 999 00197900
903 CALL ERROR (3) 00198000
GO TO 999 00198100
910 CALL ERROR (10) 00198200
GO TO 999 00198300
911 CALL ERROR (11) 00198400
999 RETURN 00198500
END 00198600
C 29 80 SUBROUTINE EXPAND( J, WHERE ) 2 19 68 00198700
SUBROUTINE EXPAND( J, WHERE ) 00198800
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00198900
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00199000
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00199100
DIMENSION ARGS(100) 00199200
EQUIVALENCE( ARGS(1), RC(10001) ) 00199300
DIMENSION WHERE( 1 ) 00199400
C 00199500
C THIS ROUTINE EXPANDS STORED COMMANDS FROM WHERE TO A USABLE 00199600
C FORM IN ARGS, IARGS AND KIND. 00199700
C 00199800
II = 0 00199900
I = 0 00200000
JJJ = J 00200100
C 00200200
C CONVERT ONLY FIRST ARGUMENT IF COMMAND IS INCREMENT OR RESTORE 00200300
C 00200400
IF( L1 .NE. 14 ) GO TO 10 00200500
IF( L2 .GE. 6 .AND. L2 .LE. 8 ) JJJ = 2 00200600
10 II = II + 1 00200700
15 I = I + 1 00200800
IF( I .GE. JJJ ) GO TO 45 00200900
T= WHERE( I ) 00201000
IF( T ) 40, 30, 20 00201100
20 KIND( II ) = 0 00201200
IARGS( II ) = T - 8192. 00201300
GO TO 10 00201400
30 KIND( II ) = 1 00201500
I = I + 1 00201600
ARGS( II ) = WHERE( I ) 00201700
GO TO 10 00201800
40 IF( T .EQ. -1. ) GO TO 100 00201900
CALL XPND( WHERE( I ), K ,ARGS( II ) , KND ) 00202000
IF( K .GE. 0 ) GO TO 50 00202100
K = - K 00202200
42 CALL ERROR( K ) 00202300
45 RETURN 00202400
50 KIND( II ) = KND 00202500
IF( KND .EQ. 0 ) IARGS( II ) = ARGS( II ) 00202600
I = I + K 00202700
GO TO 10 00202800
C 00202900
C IF STORED VALUE = -1, THEN ARGS (INTEGER) ARE TO BE EXPANDED FROM 00203000
C PREVIOUS ARG TO FOLLOWING WITH A MAXIMUM TOTAL OF 50 00203100
C 00203200
100 I = I + 1 00203300
C PICK UP NEXT ARG 00203400
IU = WHERE( I ) 00203500
IF( KIND( II-1 ) .NE. 0 .OR. I .GE. J ) GO TO 200 00203600
IF( IU ) 160, 200, 105 00203700
105 IU =IU - 8192 00203800
K= IU - IARGS( II-1 ) 00203900
NARGS = NARGS + IABS( K ) - 1 00204000
IF ( NARGS .GT. 50 ) GO TO 250 00204100
IF ( K ) 110,15,120 00204200
110 INC = -1 00204300
K = -K 00204400
GO TO 140 00204500
120 INC = 1 00204600
140 DO 150 IT = 1, K 00204700
KIND( II ) = 0 00204800
IARGS( II ) = IARGS( II-1 ) + INC 00204900
150 II = II + 1 00205000
GO TO 15 00205100
C 00205200
C EXPAND FORM IARG *** "" ARG "" 00205300
C 00205400
160 CALL XPND( WHERE( I ) , K , ARGS( II ) , KND ) 00205500
IF( K .LT. 0 ) GO TO 42 00205600
I = I + K 00205700
IF( KND .EQ. 0 ) GO TO 170 00205800
K = 20 00205900
GO TO 42 00206000
170 IU = ARGS( II ) 00206100
GO TO 105 00206200
200 CALL ERROR( 211 ) 00206300
GO TO 10 00206400
250 K= 10 00206500
GO TO 42 00206600
END 00206700
C 30 97 SUBROUTINE EXPCON 2 19 68 00206800
SUBROUTINE EXPCON 00206900
C**** EXPCON SUBROUTINE S PEAVY 9/12/67 00207000
C**** COMMANDS 00207100
C**** L2=1" MVECDIAG,AVECDIAG 00207200
C**** MVECDIAG A(,, ++) R=,, C=++ STORE IN COL ++ 00207300
C**** OR MVECDIAG A(,, ++) R=,, C=++ START STORING IN (,, ++) 00207400
C**** L2=2" MVECMAT,AVECTARR 00207500
C**** MVECMAT A(,, ++) R=,, C=++ STORE IN COL ++ 00207600
C**** OR MVECMAT A(,, ++) R=,, C=++ START STORING IN (,, ++) 00207700
C**** THE MATRIX A IS STORED BY ROWS AS A COL VECTOR 00207800
C**** L2=3" MMATVEC 00207900
C**** MMATVEC COL +++ STORE IN A(,, ++) AS R=,, BY C=++ MATRI00208000
C**** OR MMATVEC STARTING (,, ++) IN A(,, ++) AS R=,, BY C=++ MATRI00208100
C**** THIS OPERATION IS THE REVERSE OF MVECMAT 00208200
COMMON / SCRAT / A(10000),NS 00208300
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00208400
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00208500
DIMENSION ARGS(100) 00208600
EQUIVALENCE( ARGS(1), RC(10001) ) 00208700
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00208800
IF(NARGS.LT.5.OR.NARGS.GT.6) CALL ERROR (10) 00208900
IF(L2.EQ.3) GO TO 300 00209000
100 J=NARGS 00209100
CALL CKIND(J) 00209200
IF(J.NE.0) CALL ERROR(3) 00209300
J=1 00209400
CALL MTXCHK(J) 00209500
IF(J.NE.0) CALL ERROR(17) 00209600
CALL ADRESS(NARGS,ILL) 00209700
IF(ILL.LE.0) CALL ERROR(11) 00209800
IM=IARGS(1) 00209900
ILC=ILL 00210000
IL=IARGS(3) 00210100
IF(L2.GT.1) IL=IL*IARGS(4) 00210200
IF(NARGS.EQ.6) ILC=ILC+IARGS(5)-1 00210300
IXX=ILC+IL-1 00210400
IF(L2-2) 105,200,310 00210500
C**** VEC DIAG 00210600
105 IF(IXX.LE.ILL+NROW-1) GO TO 120 00210700
IXX=ILL+NROW-1 00210800
CALL ERROR( 210 ) 00210900
C**** ERROR 220 "COLUMN NOT LONG ENOUGH TO STORE ALL OF DIAGONAL. 00211000
C**** NROW ELEMENTS WILL BE STORED. " 00211100
120 IF(NERROR.NE.0) RETURN 00211200
DO 130 I=ILC,IXX 00211300
RC(I)=RC(IM) 00211400
130 IM=IM+1+NROW 00211500
RETURN 00211600
C**** VECTMAT 00211700
200 IF(IXX.LE.ILL+NROW-1) GO TO 220 00211800
IXX=ILL+NROW-1 00211900
CALL ERROR( 210 ) 00212000
C**** ERROR 221" "COLUMN NOT LONG ENOUGH TO STORE ALL OF MATRIX (ARRAY).00212100
C**** NROW ELEMENTS WILL BE STORED." 00212200
220 IF(NERROR.NE.0) RETURN 00212300
KMX=IARGS(4) 00212400
NMX=IARGS(3) 00212500
IMM=IM 00212600
DO 240 J=1,NMX 00212700
IM=IMM 00212800
DO 230 I=1,KMX 00212900
RC(ILC)=RC(IM) 00213000
IM=IM+NROW 00213100
IF(ILC.EQ.IXX) RETURN 00213200
230 ILC=ILC+1 00213300
240 IMM=IMM+1 00213400
RETURN 00213500
C**** RESTORE MATRIX OR ARRAY 00213600
300 IL=IARGS(1) 00213700
IC=2 00213800
IF(NARGS.NE.6) GO TO 302 00213900
IC=3 00214000
ILL=IARGS(2) 00214100
302 DO 305 I=1,4 00214200
IARGS(I)=IARGS(IC) 00214300
305 IC=IC+1 00214400
IARGS( 5)=IL 00214500
IARGS(6)=ILL 00214600
GO TO 100 00214700
310 IF(IXX.LE.ILL+NROW-1) GO TO 320 00214800
IXX=ILL+NROW-1 00214900
CALL ERROR( 210 ) 00215000
C**** ERROR 222""NOT N BY K ELEMENTS IN COLUMN TO RESTORE AS N BY K 00215100
C**** MATRIX (ARRAY). THEREFORE NROW ELEMENTS WILL BE STORED." 00215200
320 IF(NERROR.NE.0) RETURN 00215300
NMX=IARGS(3) 00215400
KMX=IARGS(4) 00215500
DO 340 I=1,NMX 00215600
IMC=IM 00215700
DO 330 J=1,KMX 00215800
RC(IMC)=RC(ILC) 00215900
IF(ILC.EQ.IXX) RETURN 00216000
IMC=IMC+NROW 00216100
330 ILC=ILC+1 00216200
340 IM=IM+1 00216300
RETURN 00216400
END 00216500
C 31 49 SUBROUTINE EXTREM 2 19 68 00216600
SUBROUTINE EXTREM 00216700
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00216800
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00216900
DIMENSION ARGS(100) 00217000
EQUIVALENCE( ARGS(1), RC(10001) ) 00217100
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00217200
C 00217300
C L2 = 4,5 MAX L2 = 6,7 MIN 00217400
C 00217500
C MAX OF ++ TO ++ 00217600
C MAX OF ++ TO ++, CORRESP ENTRY OF ++ TO ++, ++ TO ++, ETC. 00217700
C LIKEWISE FOR MIN. 00217800
C 00217900
IF( NARGS .GT. 0 .AND. MOD( NARGS, 2 ) .EQ. 0 ) GO TO 30 00218000
I=10 00218100
10 CALL ERROR( I ) 00218200
20 RETURN 00218300
30 CALL CHKCOL( I ) 00218400
IF( I .EQ. 0 ) GO TO 40 00218500
I = 20 00218600
GO TO 10 00218700
40 IF( NERROR .NE. 0 ) GO TO 20 00218800
J=0 00218900
IF( NRMAX - 1 ) 50, 110, 60 00219000
50 I=9 00219100
GO TO 10 00219200
60 J = IARGS( 1 ) 00219300
K = J + 1 00219400
L = K + NRMAX - 2 00219500
IF( L2 .GT. 5 ) GO TO 80 00219600
C 00219700
C FIND MAXIMUM 00219800
C 00219900
DO 70 I = K, L 00220000
IF( RC( J ) .LT. RC( I ) ) J = I 00220100
70 CONTINUE 00220200
GO TO 100 00220300
C 00220400
C FIND MINIMUM 00220500
C 00220600
80 DO 90 I = K, L 00220700
IF( RC( J ) .GT. RC( I ) ) J = I 00220800
90 CONTINUE 00220900
100 J = J - IARGS( 1 ) 00221000
110 DO 120 I = 1, NARGS, 2 00221100
K = IARGS( I ) + J 00221200
XY=RC(K) 00221300
120 CALL VECTOR (XY,IARGS(I+1)) 00221400
GO TO 20 00221500
END 00221600
C 32 9 FUNCTION FCOS( X ) 2 19 68 00221700
FUNCTION FCOS( X ) 00221800
COMMON/CONSTS/PI,E,HALFPI,DEG,RAD,XEXP,XTRIG,XALOG,CC( 192 ) 00221900
IF( ABS( X ) .GT. XTRIG ) GO TO 2 00222000
FCOS = COS( X ) 00222100
1 RETURN 00222200
2 CALL ERROR( 110 ) 00222300
FCOS = 0. 00222400
GO TO 1 00222500
END 00222600
C 33 9 FUNCTION FEXP( X ) 2 19 68 00222700
FUNCTION FEXP( X ) 00222800
COMMON/CONSTS/PI,E,HALFPI,DEG,RAD,XEXP,XTRIG,XALOG,CC( 192 ) 00222900
IF( X .GT. XEXP ) GO TO 2 00223000
FEXP = EXP( X ) 00223100
1 RETURN 00223200
2 CALL ERROR( 102 ) 00223300
FEXP = 0. 00223400
GO TO 1 00223500
END 00223600
C 34 12 FUNCTION FEXP2( B, E ) 2 19 68 00223700
FUNCTION FEXP2( B, E ) 00223800
C 00223900
C THIS FUNCTION IS INCLUDED TO CATCH EXPONENTIATION ERRORS BEFORE 00224000
C THE SYSTEM DOES 00224100
C 00224200
IE = E 00224300
IF( E .EQ. FLOAT( IE ) ) GO TO 2 00224400
FEXP2 = FEXP( E * FLOG( B ) ) 00224500
1 RETURN 00224600
2 FEXP2 = B ** IE 00224700
GO TO 1 00224800
END 00224900
C 35 4 SUBROUTINE FFLOAT 2 19 68 00225000
SUBROUTINE FFLOAT 00225100
CALL X( "FFLOAT" ) 00225200
RETURN 00225300
END 00225400
C 36 4 SUBROUTINE FIXED 2 19 68 00225500
SUBROUTINE FIXED 00225600
CALL X( "FIXED" ) 00225700
RETURN 00225800
END 00225900
C 37 40 SUBROUTINE FIXFLO 2 19 68 00226000
SUBROUTINE FIXFLO 00226100
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00226200
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00226300
DIMENSION ARGS(100) 00226400
EQUIVALENCE( ARGS(1), RC(10001) ) 00226500
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00226600
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00226700
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00226800
DIMENSION ITYPE( 2 ), N( 11 ) 00226900
DATA N(1),N(2),N(3),N(4),N(5),N(6),N(7),N(8),N(9),N(10),N(11) / 00227000
1 2H0), 2H1), 2H2), 2H3), 2H4), 2H5), 2H6), 2H7), 2H8), 2H9),3H10)/00227100
DATA ITYPE(1), ITYPE(2) / 2H8F, 4H1P8E / 00227200
C 00227300
C L2 = 3 FOR FIXED, L2 = 4 FOR FLOAT 00227400
C 00227500
C FORMAT IS 4 WORDS WHEN FLOAT IS EXECUTED 2. BECOMES 1P8E 00227600
C 1. C WHEN FIXED IS EXECUTED 2. BECOMES 8F 00227700
C 2. 1P8E 00227800
C 3. 15. 00227900
C 4. 6) 00228000
C 00228100
C THIS ROUTINE ASSUMES THAT AT LEAST FOUR CHARACTERS MAY BE STORED 00228200
C IN A WORD, THAT UNUSED SPACE IN A WORD INITIALIZED WITH CHARACTERS00228300
C WILL BE FILLED WITH BLANKS, AND THAT BLANKS ARE IGNORED IF FORMAT 00228400
C SCANNING (EXCEPT IN HOLLERITH FIELDS). 00228500
C 00228600
IF( NARGS .EQ. 1 ) IF( KIND( 1 ) ) 30, 40, 30 00228700
I = 10 00228800
10 CALL ERROR( I ) 00228900
20 RETURN 00229000
30 I = 20 00229100
GO TO 10 00229200
40 I = IARGS( 1 ) 00229300
IF( I .GE. 0 .AND. I .LE. 10 ) GO TO 50 00229400
I = 3 00229500
GO TO 10 00229600
50 IFMTX( 4 ) = N( I+1 ) 00229700
IFMTX( 2 ) = ITYPE( L2-2 ) 00229800
GO TO 20 00229900
END 00230000
C 38 41 SUBROUTINE FLIP 2 19 68 00230100
SUBROUTINE FLIP 00230200
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00230300
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00230400
DIMENSION ARGS(100) 00230500
EQUIVALENCE( ARGS(1), RC(10001) ) 00230600
EQUIVALENCE (I,IARGS(100)),(J,IARGS(99)),(K,IARGS(98)), 00230700
1 (KK,IARGS(97)),(M,IARGS(96)),(MM,IARGS(95)),(MMM,IARGS(94)), 00230800
2 (N,IARGS(93)),(NN,IARGS(92)),(A,ARGS(1)) 00230900
C 00231000
C FLIP COL ++ INTO COL ++, ++ INTO ++, ETC. 00231100
C 00231200
IF( NARGS .GT. 0 .AND. MOD( NARGS, 2 ) .GE. 0 ) GO TO 20 00231300
I = 10 00231400
10 CALL ERROR( I ) 00231500
15 RETURN 00231600
20 CALL CHKCOL( I ) 00231700
IF( I .EQ. 0 ) GO TO 30 00231800
I = 20 00231900
GO TO 10 00232000
30 IF( NERROR .NE. 0 ) GO TO 15 00232100
IF( NRMAX - 1 ) 35, 15, 40 00232200
35 I = 9 00232300
GO TO 10 00232400
40 KK = NRMAX - 1 00232500
K = KK / 2 00232600
DO 60 I = 1, NARGS, 2 00232700
M = IARGS( I ) 00232800
N = IARGS( I+1 ) 00232900
MM = M + KK 00233000
NN = N + KK 00233100
MMM = M + K 00233200
DO 50 J = M, MMM 00233300
A = RC( J ) 00233400
RC( N ) = RC( MM ) 00233500
RC( NN ) = A 00233600
N = N + 1 00233700
MM = MM - 1 00233800
50 NN = NN - 1 00233900
60 CONTINUE 00234000
GO TO 15 00234100
END 00234200
C 39 8 FUNCTION FLOG( X ) 2 19 68 00234300
FUNCTION FLOG( X ) 00234400
IF( X .GT. 0. ) GO TO 1 00234500
CALL ERROR( 101 ) 00234600
FLOG = 0. 00234700
GO TO 2 00234800
1 FLOG = ALOG( X ) 00234900
2 RETURN 00235000
END 00235100
C 40 59 SUBROUTINE FPROB 2 19 68 00235200
SUBROUTINE FPROB 00235300
C WRITTEN BY S PEAVY 10/13/67 00235400
C COMMAND IS AS FOLLOWING 00235500
C FPROBABILITY V1 $$,V2 $$, F $$, STORE Q IN COL ++ 00235600
COMMON / SCRAT / A(10000),NS 00235700
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00235800
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00235900
DIMENSION ARGS(100) 00236000
EQUIVALENCE( ARGS(1), RC(10001) ) 00236100
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00236200
IF (NARGS.NE.4) CALL ERROR(10) 00236300
IF (KIND(NARGS).NE.0) CALL ERROR (3) 00236400
I1=1 00236500
I2=1 00236600
I3=1 00236700
150 CALL ADRESS (1,IARGS(1)) 00236800
IF(IARGS(1)) 160,170,175 00236900
160 I1=2 00237000
V1=ARGS(1) 00237100
GO TO 180 00237200
170 CALL ERROR (11) 00237300
175 L=IARGS(1) 00237400
180 CALL ADRESS (2,IARGS(2)) 00237500
IF(IARGS(2)) 190,200,205 00237600
190 I2=2 00237700
V2=ARGS(2) 00237800
GO TO 210 00237900
200 CALL ERROR(11) 00238000
205 M=IARGS(2) 00238100
210 CALL ADRESS(3,IARGS(3)) 00238200
IF(IARGS(3)) 220,230,235 00238300
220 I3=2 00238400
F=ARGS(3) 00238500
GO TO 240 00238600
230 CALL ERROR(11) 00238700
235 N=IARGS(3) 00238800
240 CALL ADRESS(NARGS,K) 00238900
IF(K.LE.0) CALL ERROR (11) 00239000
IF(NERROR.NE.0) RETURN 00239100
IF(I1+I2+I3.NE.6) GO TO 260 00239200
CALL PROB(V1,V2,F,Q) 00239300
DO 250 I=1,NRMAX 00239400
RC(K)=Q 00239500
250 K=K+1 00239600
RETURN 00239700
260 DO 330 I=1,NRMAX 00239800
GO TO (270,280),I1 00239900
270 V1=RC(L) 00240000
L=L+1 00240100
280 GO TO (290,300),I2 00240200
290 V2=RC(M) 00240300
M=M+1 00240400
300 GO TO (310,320),I3 00240500
310 F=RC(N) 00240600
N=N+1 00240700
320 CALL PROB(V1,V2,F,RC(K)) 00240800
330 K=K+1 00240900
RETURN 00241000
END 00241100
C 41 38 SUBROUTINE FOURIA 2 19 68 00241200
SUBROUTINE FOURIA 00241300
COMMON /BEZON/Y(200),A,R(199), N,KAA 00241400
DOUBLE PRECISION Y,A,R,AA,AB, AC,BA,BB,AD 00241500
M=N/2 00241600
K=2*M 00241700
L=0 00241800
IF (N.EQ.K) GO TO 2 00241900
L=1 00242000
2 AB=N 00242100
AA=6.28318530717D0/AB 00242200
A=0.0 00242300
R(M)=.0 00242400
AC=1. 00242500
DO 3 I=1,N 00242600
A=A+Y(I) 00242700
R(M)=R(M)+AC*Y(I) 00242800
3 AC=-1.*AC 00242900
A=A/AB 00243000
R(M)=R(M)/AB 00243100
J=M+L-1 00243200
KA=M+1 00243300
DO 5 K=1,J 00243400
BA=Y(1) 00243500
BB=0.0 00243600
AC=K 00243700
AC=AC*AA 00243800
DO 4 I=2,N 00243900
AD=I-1 00244000
AD=AD*AC 00244100
BA=BA+Y(I)*DCOS(AD) 00244200
4 BB=BB+Y(I)*DSIN(AD) 00244300
R(K)=2.*BA/AB 00244400
R(KA)=2.*BB/AB 00244500
5 KA=KA+1 00244600
IF (L.EQ.1) GO TO 6 00244700
R(KA)=0. 00244800
6 RETURN 00244900
END 00245000
C 42 9 FUNCTION FSIN( X ) 2 19 68 00245100
FUNCTION FSIN( X ) 00245200
COMMON/CONSTS/PI,E,HALFPI,DEG,RAD,XEXP,XTRIG,XALOG,CC( 192 ) 00245300
IF( ABS( X ) .GT. XTRIG ) GO TO 2 00245400
FSIN = SIN( X ) 00245500
1 RETURN 00245600
2 CALL ERROR( 110 ) 00245700
FSIN = 0. 00245800
GO TO 1 00245900
END 00246000
C 43 8 FUNCTION FSQRT( X ) 2 19 68 00246100
FUNCTION FSQRT( X ) 00246200
IF( X .LT. 0. ) GO TO 2 00246300
FSQRT = SQRT( X ) 00246400
1 RETURN 00246500
2 CALL ERROR( 101 ) 00246600
FSQRT = 0. 00246700
GO TO 1 00246800
END 00246900
C 44 207 SUBROUTINE FUNCT 2 19 68 00247000
SUBROUTINE FUNCT 00247100
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00247200
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00247300
DIMENSION ARGS(100) 00247400
EQUIVALENCE( ARGS(1), RC(10001) ) 00247500
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00247600
COMMON/CONSTS/PI,E,HALFPI,DEG,RAD,XEXP,XTRIG,XALOG,CC( 192 ) 00247700
DIMENSION II( 2 ) 00247800
EQUIVALENCE ( I1, II( 1 ) ), ( I2, II( 2 ) ) 00247900
C 00248000
C THIS SUBROUTINE HANDLES ALL TWO AND THREE ARGUMENT FUNCTIONS. 00248100
C IF THE FIRST ARGUMENT IS A CONSTANT, THE FUNCTION IS EVALUATED 00248200
C ONLY ONCE. 00248300
C 00248400
IF( NARGS .EQ. 2 .OR. NARGS .EQ. 3 ) GO TO 10 00248500
CALL ERROR( 10 ) 00248600
GO TO 200 00248700
10 CALL ADRESS( NARGS, IL ) 00248800
IF( IL ) 20, 30, 40 00248900
20 CALL ERROR( 20 ) 00249000
GO TO 200 00249100
30 CALL ERROR( 11 ) 00249200
GO TO 200 00249300
40 ILZ = IL + NRMAX - 1 00249400
NARGS = NARGS - 1 00249500
DO 50 I = 1, NARGS 00249600
CALL ADRESS( I, II( I ) ) 00249700
IF( II( I ) ) 45, 30, 50 00249800
45 II( I ) = -II( I ) 00249900
50 CONTINUE 00250000
IF( KIND( 1 ) .EQ. 0 ) GO TO 55 00250100
X = ARGS( 1 ) 00250200
LOCRTN = 1 00250300
GO TO 250 00250400
52 ARGS( 1 ) = X 00250500
55 IF( NERROR .NE. 0 ) GO TO 200 00250600
IF( NRMAX .NE. 0 ) GO TO 60 00250700
CALL ERROR( 9 ) 00250800
GO TO 200 00250900
60 IF( NARGS .EQ. 2 ) GO TO 90 00251000
IF( KIND( 1 ) .EQ. 0 ) GO TO 70 00251100
C 00251200
C TWO ARGUMENTS, FIRST IS A CONSTANT 00251300
C 00251400
CALL VECTOR( ARGS( 1 ), IL ) 00251500
GO TO 200 00251600
C 00251700
C TWO ARGUMENTS, FIRST IS A COLUMN NUMBER 00251800
C 00251900
70 LOCRTN = 2 00252000
I = IL 00252100
80 IF ( I .GT.ILZ ) GO TO 200 00252200
X = RC( I1 ) 00252300
GO TO 250 00252400
75 RC( I ) = X 00252500
I1 = I1 + 1 00252600
I=I+1 00252700
GO TO 80 00252800
90 K2 = 1 - KIND( 2 ) 00252900
IF( KIND( 1 ) .EQ. 0 ) GO TO 110 00253000
C 00253100
C THREE ARGUMENTS, FIRST ONE A CONSTANT 00253200
C 00253300
DO 100 I = IL, ILZ 00253400
RC( I ) = RC( I ) + RC( I2 ) * ARGS( 1 ) 00253500
100 I2 = I2 + K2 00253600
GO TO 200 00253700
C 00253800
C THREE ARGUMENTS, FIRST A COLUMN NUMBER 00253900
C 00254000
110 LOCRTN = 3 00254100
I=IL 00254200
120 IF ( I .GT.ILZ ) GO TO 200 00254300
X = RC( I1 ) 00254400
GO TO 250 00254500
115 RC( I ) = RC( I ) + RC( I2 ) * X 00254600
I1 = I1 + 1 00254700
I2 = I2 + K2 00254800
I=I+1 00254900
GO TO 120 00255000
200 RETURN 00255100
250 GO TO ( 300,310,320,330,340,350,360,370,380,390,400,410,420,430, 00255200
1 440,450,460,460,470,480,480,490,500,500,510,520,530,540,550,560, 00255300
2 570,580,590,600,610,620,630 ) , L2 00255400
260 CALL ERROR( L ) 00255500
X = 0. 00255600
275 GO TO ( 52, 75, 115 ), LOCRTN 00255700
C SIN 00255800
300 X = FSIN( X ) 00255900
GO TO 275 00256000
C COS 00256100
310 X = FCOS( X ) 00256200
GO TO 275 00256300
C TAN 00256400
320 X = FSIN( X ) / FCOS( X ) 00256500
GO TO 275 00256600
C COT 00256700
330 X = FCOS( X ) / FSIN( X ) 00256800
GO TO 275 00256900
C ASIN 00257000
340 IF( ABS( X ) - 1. ) 341, 342, 343 00257100
341 X = ATAN( X / SQRT( 1. - X ** 2 ) ) 00257200
GO TO 275 00257300
342 X = SIGN( HALFPI, X ) 00257400
GO TO 275 00257500
343 L = 103 00257600
GO TO 260 00257700
C ACOS 00257800
350 IF( ABS( X ) - 1. ) 351, 351, 343 00257900
351 X = ATAN( SQRT( 1. - X ** 2 ) / X ) 00258000
GO TO 275 00258100
C ATAN 00258200
360 X = ATAN( X ) 00258300
GO TO 275 00258400
C ACOT 00258500
370 X = ATAN( 1. / X ) 00258600
GO TO 275 00258700
C SIND 00258800
380 X = RAD * X 00258900
GO TO 300 00259000
C COSD 00259100
390 X = RAD * X 00259200
GO TO 310 00259300
C TAND 00259400
400 X = RAD * X 00259500
GO TO 320 00259600
C COTD 00259700
410 X = RAD * X 00259800
GO TO 330 00259900
C ASIND 00260000
420 IF( ABS( X ) - 1. ) 421, 422, 343 00260100
421 X = DEG * ATAN(X/SQRT(1. - X ** 2 ) ) 00260200
GO TO 275 00260300
422 X = SIGN( 90., X ) 00260400
GO TO 275 00260500
C ACOSD 00260600
430 IF( ABS( X ) - 1. ) 431, 431, 343 00260700
431 X = DEG * ATAN(SQRT( 1. - X ** 2 ) / X) 00260800
GO TO 275 00260900
C ATAND 00261000
440 X = DEG * ATAN(X) 00261100
GO TO 275 00261200
C ACOTD 00261300
450 X = DEG * ATAN( 1. / X) 00261400
GO TO 275 00261500
C ABS 00261600
460 X = ABS( X ) 00261700
GO TO 275 00261800
C SQRT 00261900
470 X = FSQRT( X ) 00262000
GO TO 275 00262100
C EXP 00262200
480 X = FEXP( X ) 00262300
GO TO 275 00262400
C NEXP 00262500
490 X = FEXP( -X ) 00262600
GO TO 275 00262700
C LOG 00262800
500 X = FLOG( X ) 00262900
GO TO 275 00263000
C LOG10 00263100
510 IF( X .GT. 0. ) GO TO 511 00263200
L = 101 00263300
GO TO 260 00263400
511 X = ALOG10( X ) 00263500
GO TO 275 00263600
C ALOG 00263700
520 IF( X .GT. XALOG ) GO TO 522 00263800
X = 10. ** X 00263900
GO TO 275 00264000
522 L = 102 00264100
GO TO 260 00264200
C SINH 00264300
530 Y = FEXP( X ) 00264400
X = .5 * ( Y + 1. / Y ) * TANH( X ) 00264500
GO TO 275 00264600
C COSH 00264700
540 Y = FEXP( X ) 00264800
X = .5 * ( Y + 1. / Y ) 00264900
GO TO 275 00265000
C TANH 00265100
550 X = TANH( X ) 00265200
GO TO 275 00265300
C COTH 00265400
560 X = 1. / TANH( X ) 00265500
GO TO 275 00265600
C ASINH 00265700
570 X = SIGN( ALOG( ABS( X ) + SQRT( X ** 2 + 1. ) ), X ) 00265800
GO TO 275 00265900
C ACOTH 00266000
580 X = ALOG( ABS( X ) + SQRT( X ** 2 - 1. ) ) 00266100
GO TO 275 00266200
C ATANH 00266300
590 IF( ABS( X ) .LT. 1. ) GO TO 592 00266400
L = 103 00266500
GO TO 260 00266600
592 X = .5 * ALOG( ( 1. + X ) / ( 1. - X ) ) 00266700
GO TO 275 00266800
C ACOTH 00266900
600 IF( ABS( X ) .LT. 1. ) GO TO 602 00267000
X = .5 * ALOG( ( X + 1. ) / ( X - 1. ) ) 00267100
GO TO 275 00267200
602 L = 103 00267300
GO TO 260 00267400
610 X = QNORML( X ) 00267500
GO TO 275 00267600
C INTEGER 00267700
620 X = AINT( X) 00267800
GO TO 275 00267900
C FRACTIONAL 00268000
630 X = X - AINT( X ) 00268100
GO TO 275 00268200
END 00268300
C 45 40 SUBROUTINE GENER 2 19 68 00268400
SUBROUTINE GENER 00268500
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00268600
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00268700
DIMENSION ARGS(100) 00268800
EQUIVALENCE( ARGS(1), RC(10001) ) 00268900
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00269000
C GENERATE 00269100
C NARGS MUST BE .GE. 4 AND EVEN 00269200
IF( NARGS .GE. 4 .AND. MOD( NARGS, 2 ) .EQ. 0 ) GO TO 20 00269300
CALL ERROR (10) 00269400
GO TO 200 00269500
C GET STORAGE COLUMN ADDRESS 00269600
20 CALL ADRESS( NARGS, J ) 00269700
IF( J .GT. 0 ) GO TO 30 00269800
CALL ERROR(3) 00269900
GO TO 200 00270000
30 IF( NERROR .NE. 0 ) GO TO 200 00270100
C CONVERT INTEGERS TO FLOATING POINT 00270200
DO 40 I = 2, NARGS 00270300
IF( KIND( I-1 ) .EQ. 0 ) ARGS( I-1 ) = IARGS( I-1 ) 00270400
40 CONTINUE 00270500
RC( J ) = ARGS( 1 ) 00270600
NDROW = J + NROW - 1 00270700
DO 130 I = 4, NARGS, 2 00270800
S = SIGN( 1., ARGS( I - 2 ) ) 00270900
ENDER = ARGS( I - 1 ) - .01 * ARGS( I - 2 ) 00271000
100 J = J + 1 00271100
RC( J ) = RC( J - 1 ) + ARGS( I - 2 ) 00271200
IF( S * ( RC( J ) - ENDER ) ) 110, 120, 120 00271300
C NOT DONE 00271400
110 IF( J .LT. NDROW ) GO TO 100 00271500
C EXCEEDED COLUMN LENGTH 00271600
CALL ERROR( 201 ) 00271700
GO TO 150 00271800
C PASSES GENERATE UPPER BOUND, SET IN UPPER BOUND 00271900
120 RC( J ) = ARGS( I - 1 ) 00272000
130 CONTINUE 00272100
150 NRMAX = MAX0( NRMAX, J - NDROW + NROW ) 00272200
200 RETURN 00272300
END 00272400
C 46 61 SUBROUTINE HEADS 2 19 68 00272500
SUBROUTINE HEADS 00272600
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00272700
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00272800
DIMENSION ARGS(100),NDIGIT(10) 00272900
EQUIVALENCE( ARGS(1), RC(10001) ) 00273000
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00273100
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00273200
DIMENSION LHEAD(2,8),K(6) 00273300
DATA NDIGIT / 1H0,1H1,1H2,1H3,1H4,1H5,1H6,1H7,1H8,1H9 / 00273400
DATA KOLUMN /6HCOLUMN/ 00273500
DATA IBLANK / 1H / 00273600
C 00273700
C THIS SUBROUTINE INSERTS THE HEADINGS OVER THE COLUMNS WHEN THE 00273800
C STANDARD FORMAT IS CALLED FOR. 00273900
C 00274000
C 00274100
C THIS ROUTINE IS NON-STANDARD. IT HAS BEEN IMPLEMENTED HERE 00274200
C ASSUMING B5500 WORD SIZE 00274300
C 00274400
C IN IARGS(51) THRU IARGS(NARGS+50) IS A LIST OF COLUMN NUMBERS. 00274500
C IF THE NUMBER IS .LE. 50, A 12-CHARACTER HEADING IS TO BE TAKEN 00274600
C FROM ARRAY IHEAD AS SETUP BY SUBROUTINE XHEAD. IF .GT. 50, THE 00274700
C HEADING COLUMN XXXX IS TO BE USED WHERE XXXX IS THE NUMBER, 00274800
C CONVERTED FOR DECIMAL PRINTOUT. THE HEADINGS ARE TO BE PRINTED 00274900
C OVER THE DATA WHICH IS IN FORMAT 1P8E15.6 00275000
C IF HEADING = 0, SETUP COLUMN XXXX 00275100
C 00275200
NARGS = MIN0( NARGS, 8 ) 00275300
DO 100 I = 1, NARGS 00275400
J = IARGS( I+50 ) 00275500
IF( J .GT. 50 ) GO TO 30 00275600
IF( IHEAD( 1, J ) .EQ. 0 ) GO TO 30 00275700
LHEAD( 1, I ) = IHEAD( 1, J ) 00275800
LHEAD( 2, I ) = IHEAD( 2, J ) 00275900
GO TO 100 00276000
C 00276100
C GENERATE COLUMN XXXX 00276200
C 00276300
30 LHEAD(1,I)=KOLUMN 00276400
LL=J 00276500
DO 40 L=1,6 00276600
K( L ) = LL / (10**(6-L )) 00276700
LL = LL - K( L ) * ( 10**(6-L) ) 00276800
40 K( L ) = K( L ) + 1 00276900
KK = 0 00277000
DO 45 L =1,6 00277100
LL = K( L ) 00277200
IF ( LL .EQ. 1 .AND. KK .EQ. 0 ) GO TO 44 00277300
KK = 1 00277400
K( L ) = NDIGIT( LL ) 00277500
GO TO 45 00277600
44 K( L ) = IBLANK 00277700
45 CONTINUE 00277800
CALL PK5500(6,K,LHEAD(2,I)) 00277900
100 CONTINUE 00278000
WRITE( IPRINT, 200 ) ( ( LHEAD(I,J), I = 1,2),J=1,NARGS) 00278100
200 FORMAT(8(3X,2A6)) 00278200
RETURN 00278300
END 00278400
C 47 95 SUBROUTINE IFS 2 19 68 00278500
SUBROUTINE IFS 00278600
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00278700
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00278800
DIMENSION ARGS(100) 00278900
EQUIVALENCE( ARGS(1), RC(10001) ) 00279000
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00279100
COMMON / BLOCKX / INDEX( 6, 8 ), LEVEL 00279200
DIMENSION II( 3 ), K( 3 ), NNN( 6 ) 00279300
EQUIVALENCE ( I1, II(1) ), ( I2, II(2) ), ( I3, II(3) ) 00279400
C 00279500
C THIS COMMAND MAY APPEAR ONLY AS A STORED COMMAND. 00279600
C 00279700
C 00279800
C IFLT, IFEQ, IFGT, IFGE, IFNE, IFLE CORRESPOND TO L2 = 9, 14 00279900
C 00280000
C COMMANDS MAY HAVE 2 OR 3 ARGUMENTS (ONLY IFEQ AND IFNE MAY HAVE 3)00280100
C ANY ARGUMENT MAY BE OF ANY TYPE, COLUMN NUMBER OR CONSTANT. 00280200
C 00280300
C IN IFEQ AND IFNE THIRD ARG, IF GIVEN, IS TOLERANCE AND TEST GOES 00280400
C 00280500
C I ARG1-ARG2 I I I 00280600
C I --------- I .LT. I ARG3 I 00280700
C I ARG2 I I I 00280800
C 00280900
C IF NO TOLERANCE IS GIVEN, 0. IS ASSUMED 00281000
C A GIVEN TOLERANCE IS IGNORED ON IFLT, IFLE, IFGT, IFGE 00281100
C EXAMPLES OF HOW COMMANDS READ. 00281200
C IFLT 8.32 LT EVERY ENTRY OF COL 34, CONDITION IS TRUE 00281300
C IFGE EACH ELEM COL 1 .GE. CORRESP. ELEM. COL 5, COND. IS TRUE 00281400
C IFEQ 2. .EQ. 5. CONDITION TRUE (USEFUL WHEN INCREMENTING ARGS. ) 00281500
C 00281600
C IF CONDITION IS FALSE, NO ACTION IS TAKEN. 00281700
C IF CONDITION IS TRUE, THERE ARE TWO POSSIBILITIES.. 00281800
C 1. IF THE TEST COMMAND IS THE LAST ONE IN THE REPEAT LOOP 00281900
C CURRENTLY BEING EXECUTED, THE LOOP IS TERMINATED (DROPPED 00282000
C BACK TO THE NEXT OUTER LEVEL IF MORE THAN ONE LEVEL DEEP). 00282100
C 2. IF THE TEST COMMAND IS NOT THE LAST ONE, ALL THAT HAPPENS IS 00282200
C THAT THE REST OF THE LOOP IS NOT PERFORMED. THAT IS, IF THE 00282300
C LOOP COUNTER HAS NOT REACHED ITS UPPER LIMIT, IT IS ADVANCED 00282400
C ONE AND THE LOOP IS BEGUN FROM THE TOP AGAIN. 00282500
C 00282600
IF( LEVEL .GT. 0 ) GO TO 10 00282700
CALL ERROR( 21 ) 00282800
GO TO 200 00282900
10 IF( NARGS .EQ. 2 ) GO TO 30 00283000
IF( NARGS .EQ. 3 ) GO TO 25 00283100
CALL ERROR( 10 ) 00283200
GO TO 200 00283300
20 CALL ERROR( 11 ) 00283400
GO TO 200 00283500
25 IF( L2 .EQ. 10 .OR. L2 .EQ. 13 ) GO TO 30 00283600
CALL ERROR( 212 ) 00283700
NARGS = 2 00283800
30 DO 50 I = 1, NARGS 00283900
CALL ADRESS( I, II( I ) ) 00284000
IF( II( I ) ) 40, 20, 50 00284100
40 II( I ) = -II( I ) 00284200
50 K( I ) = 1 - KIND( I ) 00284300
IF( NRMAX.NE.0 .OR. KIND(1)+KIND(2).EQ.2 ) IF( NERROR ) 200,60,20000284400
CALL ERROR( 9 ) 00284500
GO TO 200 00284600
60 NNN( 4 ) = 0 00284700
NNN( 5 ) = 0 00284800
NNN( 6 ) = 0 00284900
DO 110 I = 1, NRMAX 00285000
IF( NARGS .EQ. 2 ) GO TO 65 00285100
C CHECK EQ,NE WITHIN BOUNDS 00285200
IF( ABS(RC(I1)/RC(I2)-1.).LT.ABS(RC(I3)) ) NNN( 5 ) = NNN( 5 ) + 100285300
I3 = I3 + K( 3 ) 00285400
GO TO 100 00285500
C CHECK IFS WITHOUT BOUNDS 00285600
65 IF( RC( I1 ) - RC( I2 ) ) 70, 80, 90 00285700
70 NNN( 4 ) = NNN( 4 ) + 1 00285800
GO TO 100 00285900
80 NNN( 5 ) = NNN( 5 ) + 1 00286000
GO TO 100 00286100
90 NNN( 6 ) = NNN( 6 ) + 1 00286200
100 I1 = I1 + K( 1 ) 00286300
110 I2 = I2 + K( 2 ) 00286400
NNN( 1 ) = NNN( 5 ) + NNN( 6 ) 00286500
NNN( 2 ) = NNN( 4 ) + NNN( 6 ) 00286600
NNN( 3 ) = NNN( 4 ) + NNN( 5 ) 00286700
IF( NARGS .NE. 2 ) NNN( 2 ) = NRMAX - NNN( 5 ) 00286800
IF(NNN(L2-8).EQ.0) IF(INDEX(2,LEVEL)-INDEX(3,LEVEL))210,210,220 00286900
200 RETURN 00287000
C 00287100
C IF-COMMAND NOT AT END OF PERFORM LOOP, ADVANCE LOOP COUNT. 00287200
C 00287300
210 INDEX( 2, LEVEL ) = INDEX( 3, LEVEL ) + 1 00287400
GO TO 200 00287500
C 00287600
C IF-COMMAND IS AT END OF PERFORM LOOP, TERMINATE LOOP. 00287700
C 00287800
220 LEVEL = LEVEL - 1 00287900
GO TO 200 00288000
END 00288100
C 48 26 SUBROUTINE INPUT 2 19 68 00288200
SUBROUTINE INPUT 00288300
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00288400
COMMON /BLOCKB/NSTMT,NSTMTX,NSTMTH,NCOM,LCOM,IOVFL,COM(2000) 00288500
COMMON /BLOCKC/KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00288600
C 00288700
C THIS ROUTINE HANDLES THE READING OF INPUT RECORDS. 00288800
C IF KIO = 0, INPUT IS CARD IMAGE FROM CARD READER OR TAPE. 00288900
C IF KIO = 1, INPUT IS REAL-TIME FROM A KEYBOARD. 00289000
C 00289100
KRDKNT=KRDKNT+1 00289200
IF(KIO.EQ.0)GO TO 20 00289300
IF(MODE.EQ.3)GO TO 10 00289400
WRITE(KBDOUT,5) 00289500
5 FORMAT(9H READY ) 00289600
GO TO 20 00289700
10 WRITE(KBDOUT,15)NSTMT 00289800
15 FORMAT(9H READY ,I3,3H / ) 00289900
GO TO 20 00290000
20 READ(INUNIT,25)NEWCD 00290100
25 FORMAT(80A1) 00290200
50 KARD(1)=0 00290300
KARD(2)=0 00290400
KARD( KRDEND+3 ) = 46 00290500
CALL OMCONV( NEWCD, KARD(3), KRDEND ) 00290600
RETURN 00290700
END 00290800
C 49 79 SUBROUTINE INVCHK(A,M,N,AINV,M1,Y, 2 19 68 00290900
SUBROUTINE INVCHK(A,M,N,AINV,M1,Y,L2,ERR,IND) 00291000
C INVCHK FOR OMNITAB UNIVAC 1108 S. PEAVY 5/24/67 00291100
C THIS SUBROUTINE INVERTS A MATRIX AND PROVIDES ALL THE CHECKS DESCR00291200
C IN PAC-1 00291300
C 00291400
C A IS THE MATRIX TO BE INVERTED 00291500
C 00291600
C M IS THE SIZE OF A AS DIMENSIONED IN THE CALLING PROGRAM A(M,M) 00291700
C 00291800
C N IS THE SIZE OF A TO BE INVERTED 00291900
C N LESS THAN OR =M-1 00292000
C 00292100
C AINV WILL CONTAIN THE INVERTED MATRIX IF INVERSION IS OBTAINABLE 00292200
C 00292300
C M1 IS THE SIZE OF AINV AS DIMENSIONED IN THE CALLING PROGRAM 00292400
C AINV(M1,2*M1) M1 MUST BE GREATER OR =N+1 00292500
C AINV MUST HAVE TWICE AS MANY COLUMNS AS ROWS 00292600
C A AND AINV CANNOT BE SAME OR EQUIVALENT 00292700
C 00292800
C ERR WILL CONTAIN THE 3 WAYS OF EVALUATING NORM CHECKS 00292900
C ERR IS A DIMENSIONED AS ERR(3) 00293000
C 00293100
C IND IS AN INDICATOR 00293200
C IND=0 MATRIX INVERTED AND ERROR CHECKS MADE 00293300
C IND=1 MATRIX SINGULAR 00293400
C 00293500
C COLUMN AINV(N+1,I) I=1,...,N WILL CONTAIN THE ERROR BOUND OF 00293600
C THE SUM CHECKS+1. 00293700
C 00293800
DIMENSION A(M,M),AINV(M1,M1),ERR(3),ANORM(2,3) 00293900
DIMENSION Y(N) 00294000
DATA ZERO/0.0/,ONE/1.0/ 00294100
5 NA=N 00294200
8 DO 10 I=1,NA 00294300
DO 10 J=1,NA 00294400
10 AINV(J,I)=A(J,I) 00294500
NB=NA 00294600
IF (L2.EQ.1) GO TO 11 00294700
NB=NB+1 00294800
DO 3 I=1,NA 00294900
AINV(I,NA+1)=Y(I) 00295000
3 AINV(NA+1,I)=ZERO 00295100
AINV(NA+1,NA+1)=-ONE 00295200
NA=NA+1 00295300
11 DO 13 I=1,NA 00295400
SUM=ZERO 00295500
AINV(NA+1,I)=ZERO 00295600
DO 12 J=1,NA 00295700
12 SUM=SUM+AINV(I,J) 00295800
13 AINV(I,NA+1)=-SUM 00295900
AINV(NA+1,NA+1)=ONE 00296000
NB=NB+1 00296100
15 CALL SPINV(AINV,NB,M1,IND) 00296200
IF(IND.NE.0) RETURN 00296300
90 DO 170 K=1,2 00296400
DO 100 I=1,3 00296500
100 ANORM(K,I)=ZERO 00296600
DO 160 I=1,N 00296700
SUM=ZERO 00296800
DO 150 J=1,N 00296900
GO TO (110,120),K 00297000
110 TEMP= ABS(AINV(I,J)) 00297100
GO TO 140 00297200
120 TEMP=ZERO 00297300
DO 130 L=1,N 00297400
130 TEMP=TEMP+A(I,L)*AINV(L,J) 00297500
IF(I.EQ.J) TEMP=ONE-TEMP 00297600
TEMP= ABS(TEMP) 00297700
140 ANORM(K,1)=ANORM(K,1)+TEMP**2 00297800
IF(ANORM(K,2).LT.TEMP) ANORM(K,2)=TEMP 00297900
150 SUM=SUM+TEMP 00298000
IF(ANORM(K,3).LT.SUM) ANORM(K,3)=SUM 00298100
160 CONTINUE 00298200
ANORM(K,1)=FSQRT(ANORM(K,1)) 00298300
170 ANORM(K,2)=FLOAT(N)* ANORM(K,2) 00298400
DO 180 K=1,3 00298500
180 ERR(K)=(ANORM(1,K)*ANORM(2,K))/(1. -ANORM(2,K)) 00298600
190 RETURN 00298700
END 00298800
C 50 90 SUBROUTINE INVERT 2 19 68 00298900
SUBROUTINE INVERT 00299000
C**** MATRIX INVERSION, SOLUTION OF SYSTEM OF EQUATIONS 00299100
C**** S PEAVY 5/22/67 00299200
C**** MINVERT (+++,+++) SIZE +++,+++ STORE (+++,+++) 00299300
C**** MINVERT (+++,+++) SIZE +++ STORE (+++,+++) 00299400
C**** SOLVE (+++,+++,) SIZE +++,+++ Y VECTOR +++ STORE +++ 00299500
C**** SOLVE (+++,+++) SIZE +++ Y VECTOR +++ STORE +++ 00299600
C**** LARGEST MATRIX TO BE INVERTED OR SYSTEM TO BE SOLVED IS 50 00299700
C**** 00299800
C**** L2=1 INVERT 00299900
C**** L2=2 SOLVE 00300000
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00300100
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00300200
COMMON / SCRAT / A(10000),NS 00300300
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00300400
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00300500
ONROW, 00300600
1NCOL,NARGS,VWXYZ(8),NERROR 00300700
DIMENSION ARGS(100) 00300800
EQUIVALENCE( ARGS(1), RC(10001) ) 00300900
COMMON /BLOCKC/KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00301000
DIMENSION IR(4),ERR(3) 00301100
IF(NARGS.EQ.6.OR.NARGS.EQ.5) GO TO 1200 00301200
CALL ERROR(10) 00301300
RETURN 00301400
1200 J=NARGS 00301500
CALL CKIND (J) 00301600
IF(J.NE.0) GO TO 200 00301700
IF (NARGS.EQ.5) GO TO 90 00301800
IF (IARGS(3).NE.IARGS(4)) GO TO 210 00301900
90 IR(1)=IARGS(1) 00302000
IR(2)=IARGS(2) 00302100
IR(3)=IARGS(3) 00302200
IR(4)=IARGS(3) 00302300
CALL MACHK (IR,J) 00302400
IF(J.NE.0) CALL ERROR(17) 00302500
IF(L2.EQ.2) GO TO 95 00302600
IR(1)=IARGS(NARGS-1) 00302700
IR(2)=IARGS(NARGS) 00302800
CALL MACHK(IR,J) 00302900
IF(J.NE.0) CALL ERROR(17) 00303000
95 IF(2*((IARGS(3)+2)**2).GT.NS ) GO TO 230 00303100
IF(NERROR.NE.0) RETURN 00303200
CALL ADRESS(2,J) 00303300
JA=J+IARGS(1)-1 00303400
M1=IARGS(3)+1 00303500
IF(L2.EQ.2) M1=M1+1 00303600
CALL ADRESS(NARGS-1,JC) 00303700
CALL ADRESS(NARGS ,JB) 00303800
CALL INVCHK(RC(JA),NROW,IARGS(3),A,M1,RC(JC),L2,ERR,IND) 00303900
C**** CHECK TO SEE IF MATRIX WAS INVERTED. YES, IF IND=0 00304000
IF(IND.NE.0) GO TO 240 00304100
IA=IARGS(3) 00304200
IF(L2.EQ.2) GO TO 130 00304300
C**** STORE INVERTED MATRIX 00304400
JB=JB+IARGS(NARGS-1)-1 00304500
DO 110 I=1,IA 00304600
JC=JB 00304700
JD=(I-1)*M1+1 00304800
DO 100 J=1,IA 00304900
RC(JC)=A(JD) 00305000
JC=JC+1 00305100
100 JD=JD+1 00305200
110 JB=JB+NROW 00305300
GO TO 150 00305400
C**** STORE RESULTS OF SOLUTION 00305500
130 JC=M1*IARGS(3)+1 00305600
CALL ADRESS(NARGS,J) 00305700
DO 140 I=1,IA 00305800
RC(J)=A(JC) 00305900
JC=JC+1 00306000
140 J=J+1 00306100
C**** DETERMINE SMALLEST ERROR BOUND 00306200
150 SERR = AMIN1( ERR( 1 ), ERR( 2 ), ERR( 3 ) ) 00306300
WRITE(ISCRAT,160) SERR 00306400
160 FORMAT(6X,20(1H+),43H SMALLEST ERROR BOUND ON INVERTED MATRIX IS, 00306500
1E8.1,7H ++++) 00306600
RETURN 00306700
200 CALL ERROR(3) 00306800
RETURN 00306900
210 CALL ERROR(210) 00307000
C**** PRINT ROW AND COLUMNS DO NOT AGREE,SIZE OF COLUMNS IS SET TO ROW 00307100
GO TO 90 00307200
230 CALL ERROR( 23 ) 00307300
C**** PRINT MATRIX TOO LARGE TO INVERT 00307400
RETURN 00307500
240 CALL ERROR(22) 00307600
C**** PRINT MATRIX IS SINGULAR OR NEAR SINGULAR-NO INVERSE 00307700
RETURN 00307800
END 00307900
C 51 18 FUNCTION LOCATE( L ) 2 19 68 00308000
FUNCTION LOCATE( L ) 00308100
COMMON /BLOCKB/NSTMT,NSTMTX,NSTMTH,NCOM,LCOM,IOVFL,COM(2000) 00308200
C 00308300
C THIS FUNCTION SEARCHES THE LIST OF STORED COMMANDS TO SEE IF ONE 00308400
C WITH STATEMENT NUMBER L EXISTS. IF IT DOES, RETURN ITS LOCATION. 00308500
C IF IT DOESN"T EXIST, RETURN NEGATIVE THE LOCATION OF THE NEXT 00308600
C HIGHER STATEMENT NUMBER. 00308700
C 00308800
I = 1 00308900
AL = L 00309000
10 IF( COM( I ) - AL ) 20, 30, 40 00309100
20 I = I + IFIX( COM( I+1) ) 00309200
GO TO 10 00309300
30 LOCATE = I 00309400
GO TO 50 00309500
40 LOCATE = -I 00309600
50 RETURN 00309700
END 00309800
C 52 420 SUBROUTINE LOOKUP 2 19 68 00309900
SUBROUTINE LOOKUP 00310000
DIMENSION NOUT(6),NO(4),IG(40),JF(50),IR(16),N(14),IO(28),IS(28), 00310100
1 MA(18),MM(10),MB(24),JS(12),JT(10),JZ(34),MZ(20),MJ(28),LB(10), 00310200
2 LD(6),MX(3),NX(10) 00310300
DIMENSION MV(16) 00310400
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00310500
C 00310600
DATA N(1),N(2),N(3),N(4),N(5),N(6),N(7),N(8),N(9),N(10),N(11), 00310700
1 N(12),N(13),N(14)/10705,2604,16038,16767,17496,18225,18954,1377, 00310800
2 15001,5*0/ 00310900
DATA NOUT(1),NOUT(2),NOUT(3),NOUT(4),NOUT(5),NOUT(6) / 729, 1458, 00311000
1 2187,2916, 3645, 4374 / 00311100
C 00311200
C SUMMARY,LIST 00311300
C 00311400
DATA NO(1),NO(2),NO(3),NO(4)/14431,9522,9010,14580/ 00311500
C 00311600
C SIN,COS,TAN,COT/ARCSIN,ARCCOS,ARCTAN,ARCCOT/SIND,COSD,TAND,COSD/ 00311700
C ASIND,ACOSD,ATAND,ACOTD/ASIN,ACOS,ATAN,ACOT/ 00311800
C 00311900
DATA IG(1),IG(2),IG(3),IG(4),IG(5),IG(6),IG(7),IG(8)/14108,0,2611,00312000
1 0,14621,0,2612,0/ 00312100
DATA IG(9),IG(10),IG(11),IG(12),IG(13),IG(14),IG(15),IG(16)/1218, 00312200
1 14108,1218,2611,1218,14621,1218,2612/ 00312300
DATA IG(17),IG(18),IG(19),IG(20),IG(21),IG(22),IG(23),IG(24)/ 00312400
1 14108,2916,2611,2916,14621,2916,2612,2916/ 00312500
DATA IG(25),IG(26),IG(27),IG(28),IG(29),IG(30),IG(31),IG(32)/1251,00312600
1 10314,825,13959,1270,10314,825,14688/ 00312700
DATA IG(33),IG(34),IG(35),IG(36),IG(37),IG(38),IG(39),IG(40)/1251,00312800
1 10206,825,13851,1270,10206,825,14580/ 00312900
C 00313000
C ABS,ABSOLUTE,SQRT,EXP,EXPONENT,NEGEXP,LOG,LOGE,LOGTEN,ANTILOG/ 00313100
C 00313200
DATA JF(1),JF(2),JF(3),JF(4),JF(5),JF(6),JF(7),JF(8),JF(9),JF(10),00313300
1 JF(11),JF(12),JF(13),JF(14),JF(15),JF(16),JF(17),JF(18),JF(19), 00313400
2 JF(20)/ 00313500
3 802,0,802,11280,14328,14580,4309,0,4309,11318,10348,4309,9160,0, 00313600
4 9160,3645,9160,14729,1127,6900/ 00313700
C 00313800
C SINH,COSH,TANH,COTH /ASINH,ACOSH,ATANH,ACOTH,DEVNOR,INTEGER, 00313900
C FRACTIONAL/ 00314000
C 00314100
DATA JF(21),JF(22),JF(23),JF(24),JF(25),JF(26),JF(27),JF(28)/ 00314200
1 14108,5832,2611,5832,14621,5832,2612,5832/ 00314300
DATA JF(29),JF(30),JF(31),JF(32),JF(33),JF(34),JF(35),JF(36), 00314400
* JF(37),JF(38),JF(39),JF(40),JF(41),JF(42) / 00314500
1 1251,10422,825,14067,1270,10422,825,14796,3073,10629,6959,3839, 00314600
2 4861,2736 / 00314700
C 00314800
C ADD,SUB,MULT,DIV,RAISE,SUBTRA,MULTIPLY,DIVIDE/ 00314900
C 00315000
DATA IR(1),IR(2),IR(3),IR(4),IR(5),IR(6),IR(7),IR(8),IR(9),IR(10),00315100
1 IR(11),IR(12),IR(13),IR(14),IR(15),IR(16)/841,0,14420,0,10056, 00315200
2 14580,3181,0,13158,13986,14420,15067,10056,14839,3181,6674/ 00315300
C 00315400
C GENERATE,SET, ... ETC. 00315500
C 00315600
DATA (IO(I),I=1,28)/ 5252,4132,14006,0,4641,3753,4713,1278,12003, 00315700
1 14580,10630,15673,14431,9522,10364,11698,14284,2322,2395,0,9793, 00315800
2 729,9793,0,11698,3645,5590,11880/ 00315900
00316000
00316100
C 00316200
C BEGIN,SCAN,REPEAT,EXECUTE,PERFORM,INCREMENT,INDEX,RESTORE 00316300
C IFLT,IFEQ,IFGT,IFGE,IFNE,IFLE 00316400
C 00316500
DATA IS(1),IS(2),IS(3),IS(4),IS(5),IS(6),IS(7),IS(8),IS(9),IS(10),00316600
1 IS(11),IS(12),IS(13),IS(14),IS(15),IS(16),IS(17),IS(18),IS(19), 00316700
2 IS(20),IS(21),IS(22),IS(23),IS(24),IS(25),IS(26),IS(27),IS(28) / 00316800
3 1600,6939,13933,10206,13273,3692,4298,2774,11817,4797,6942,13270,00316900
4 6943,4293,13276,15003,6735,14580,6728,12393,6730,14580,6730,3645,00317000
5 6737, 3645, 6735, 3645 / 00317100
C 00317200
C MDEFINE,ADEFINE,AERASE,MIDENT,ADIAG,MDIAG,MZERO,AZERO,MERASE 00317300
C 00317400
DATA MA(1),MA(2),MA(3),MA(4),MA(5),MA(6),MA(7),MA(8), 00317500
1 MA(9),MA(10),MA(11),MA(12),MA(13),MA(14),MA(15),MA(16), 00317600
2 MA(17),MA(18) / 9590, 4631, 00317700
3 842, 4631, 882, 1247, 9724, 4043, 846, 918, 00317800
4 9594, 918, 10184, 13527, 1436, 13527, 9630, 1247 / 00317900
C 00318000
C MINVERT,LINEAR,INVERT 00318100
C MMULT,MRAISE 00318200
C 00318300
DATA MM(1),MM(2),MM(3),MM(4),MM(5),MM(6),MM(7),MM(8),MM(9),MM(10)/00318400
1 9734, 16191, 9005, 3690, 6961, 4151, 9849, 9288, 9964, 7079 / 00318500
C 00318600
C MADD,MSUB,MTRANS,AADD,ASUB,AMULT,ADIVIDE,ARAISE,ATRANS,SCALAR, 00318700
C ASCALAR,MSCALAR 00318800
C 00318900
DATA MB(1),MB(2),MB(3),MB(4),MB(5),MB(6),MB(7),MB(8) / 00319000
1 9508, 2916, 10011, 1458, 10035, 1126, 760, 2916 / 00319100
DATA MB(9),MB(10),MB(11),MB(12),MB(13),MB(14),MB(15),MB(16) / 00319200
1 1263, 1458, 1101, 9288, 846, 16285, 1216, 7079 / 00319300
DATA MB(17), MB(18), MB(19), MB(20), MB(21), MB(22),MB(23),MB(24)/00319400
1 1287, 1126,13933, 8793, 1245, 1054, 9993, 1054 / 00319500
C 00319600
C NLSUB,LSUB,HSUB,USUB,PSUB,TSUB 00319700
C 00319800
DATA JS(1),JS(2),JS(3),JS(4),JS(5),JS(6),JS(7),JS(8),JS(9),JS(10),00319900
1 JS(11),JS(12) / 10549, 15363, 9282, 1458, 6366, 1458, 15843, 00320000
2 1458, 12198, 1458, 15114, 1458 / 00320100
C 00320200
C PARSUM,PARPROD,RMS,AVERAGE,SUM 00320300
C 00320400
DATA JT(1),JT(2),JT(3),JT(4),JT(5),JT(6),JT(7),JT(8),JT(9),JT(10)/00320500
1 11709, 14431, 11709, 12165, 13492, 0, 1328, 13156, 14431, 0 / 00320600
C 00320700
C ROWSUM,PRODUCT,DEFINE, ,MAX,MAXIMUM,MIN,MINIMUM,SORT,ORDER, 00320800
C ERASE,EXCHANGE,FLIP,CHANGE,HIERARCHY L1=21, L2 = 1, 14 00320900
C 00321000
DATA JZ( 1),JZ( 2),JZ( 3),JZ( 4),JZ( 5),JZ( 6),JZ( 7),JZ( 8) / 00321100
1 13550, 14431, 12165, 3486, 3057, 6944, 9528, 0 / 00321200
DATA JZ( 9),JZ(10),JZ(11),JZ(12),JZ(13),JZ(14),JZ(15),JZ(16) / 00321300
1 9528, 6933, 9734, 0, 9734, 6933, 14274, 14580 / 00321400
DATA JZ(17),JZ(18),JZ(19),JZ(20),JZ(21),JZ(22),JZ(23),JZ(24), 00321500
1 JZ(25),JZ(26) / 11425, 4131, 4132, 13986, 4296, 5873, 4707, 00321600
2 11664, 2404, 10400 / 00321700
DATA JZ(27),JZ(28),JZ(29),JZ(30),JZ(31),JZ(32),JZ(33),JZ(34) / 00321800
1 6080, 13167, 9010, 14580, 10623, 7094, 10785, 8748 / 00321900
C 00322000
C POLYFIT,SPOLYFIT,FIT,SFIT,SOLVE,SSOLVE 00322100
C 00322200
DATA MZ(1),MZ(2),MZ(3),MZ(4),MZ(5),MZ(6),MZ(7),MZ(8),MZ(9),MZ(10),00322300
1 MZ(11),MZ(12) / 12081,18396,14298,9429,4637,0,14022,14580,14268, 00322400
2 16173, 14379, 9347 / 00322500
C 00322600
C CLOSE,COUNT,SHORTEN,EXPAND,DUPLICATE,MOVE,BLOCKTRANSFER,AMOVE, 00322700
C MMOVE,PROMOTE,DEMOTE,DIMENSION,SEPARATE,INSERT 00322800
C 00322900
DATA MJ(1),MJ(2),MJ(3),MJ(4),MJ(5),MJ(6),MJ(7),MJ(8),MJ(9),MJ(10),00323000
1 MJ(11),MJ(12),MJ(13),MJ(14),MJ(15),MJ(16),MJ(17),MJ(18),MJ(19), 00323100
2 MJ(20),MJ(21),MJ(22),MJ(23),MJ(24),MJ(25),MJ(26),MJ(27),MJ(28) / 00323200
3 2526, 13986, 2613, 10746, 14082, 00323300
4 13667,4309,1111,3499,8994,9904,3645,1797,2504, 00323400
5 1095,16173,9843,16173,12165,9902,3064, 00323500
6 11480,3172,4042,14002,1216,6958,4151 / 00323600
C 00323700
C STATIS,SSTATIS,FORGIVE,CHECK,FPROB 00323800
C 00323900
DATA LB(1),LB(2),LB(3),LB(4),LB(5),LB(6),LB(7),LB(8),LB(9),LB(10)/00324000
1 14392,14842,14384,1278,4797,5368,2408,2484,4824,10989 / 00324100
C 00324200
C SELECT,SEARCH,CENSOR 00324300
C 00324400
DATA LD(1),LD(2),LD(3),LD(4),LD(5),LD(6) / 00324500
1 13998, 3746, 13987, 13211, 2336, 14274 / 00324600
C 00324700
C XX, X, XAX FOR M(XX"), M(X"X), M(XAX") AND M(X"AX) 00324800
C 00324900
DATA MX(1), MX(2), MX(3) / 18144, 17496, 17547 / 00325000
C 00325100
C YATES 00325200
C 00325300
DATA NX(1),NX(2) /18272,4158/ 00325400
C 00325500
C 00325600
C MVECDIAG,AVECDIAG,MVECMAT,AVECMAT,MMATVEC,AARRVEC,MPRINT,APRINT 00325700
C 00325800
DATA MV(1),MV(2),MV(3),MV(4),MV(5),MV(6),MV(7),MV(8),MV(9),MV(10),00325900
1 MV(11),MV(12),MV(13),MV(14),MV(15),MV(16) / 10076,2304,1328,2304,00326000
2 10076,2539,1328,2232,9829,15179,774,13721,9927,6959,1179,6959 / 00326100
C*-.-*-.-*-.-*-.-*-.-*-.-*-.-*-.-*-.-*-.-*-.-*-.-*-.-*-.-*-.-*-.-*-.-*C 00326200
C 00326300
C CHECK NAMES WITH QUALIFIERS FIRST 00326400
C 00326500
C 00326600
C RESET (NRMAX,COLTOP,V,W,X,Y,Z) L1=1, L2=1,7 00326700
C 00326800
IF(NAME(1).NE.13276.OR.NAME(2).NE.4185)GO TO 110 00326900
DO 104 K=2,7 00327000
I=K 00327100
IF(NAME(3).EQ.N(I).AND.NAME(4).EQ.N(I+7))GO TO 106 00327200
104 CONTINUE 00327300
I=1 00327400
106 L1=1 00327500
L2=I 00327600
GO TO 900 00327700
C 00327800
C PRINT (A,B,C,D,E,F) A = STANDARD FORMAT L1=2, L2=1,6 00327900
C 00328000
110 IF(NAME(1).NE.12159.OR.NAME(2).NE.10746)GO TO 120 00328100
L1=2 00328200
GO TO 122 00328300
C 00328400
C PUNCH (A,B,C,D,E,F) L1=3, L2=1,6 00328500
C 00328600
120 IF(NAME(1).NE.12245.OR.NAME(2).NE.2403)GO TO 130 00328700
L1=3 00328800
122 DO 124 L9 = 2, 7 00328900
L2=L9 00329000
IF( NAME( 3 ) .EQ. NOUT( L2-1 ) ) GO TO 900 00329100
124 CONTINUE 00329200
L2 = 1 00329300
GO TO 900 00329400
C 00329500
C NO (SUMMARY,LIST) L1=4, L2 = 1,2 00329600
C 00329700
130 IF(NAME(1).NE.10611)GO TO 140 00329800
L1=4 00329900
DO 134 K=2,4,2 00330000
I=K 00330100
IF(NAME(3).EQ.NO(I-1).AND.NAME(4).EQ.NO(I))GO TO 136 00330200
134 CONTINUE 00330300
GO TO 899 00330400
136 L2=I/2 00330500
GO TO 900 00330600
C 00330700
C READ (A,B,C,D,E,F) L1 = 5, L2 = 1, 7 00330800
C 00330900
140 IF(NAME(1).NE.13258.OR.NAME(2).NE.2916) GO TO 150 00331000
L1 = 5 00331100
GO TO 122 00331200
C 00331300
C ABRIDGE (A,B,C,D,E,F) L1 = 6, L2 = 1, 7 00331400
C 00331500
150 IF(NAME(1).NE.801.OR.NAME(2).NE.6676) GO TO 160 00331600
L1 = 6 00331700
GO TO 122 00331800
C 00331900
C DUMMY (A,B,C,D,E,F) L1 = 7, L2 = 1, 7 00332000
C 00332100
160 IF(NAME(1).NE.3496.OR.NAME(2).NE.10152) GO TO 170 00332200
L1 = 7 00332300
GO TO 122 00332400
C 00332500
C THESE NAMES ARE TREATED AS 00332600
C M(XX"), M(X"X), M(XAX"), M(X"AX) SPECIAL CASED BY OMNITAB. 00332700
C M(X"X) IS EQUIVALENT TO M X 00332800
C AND THE " IS IGNORED, ETC. 00332900
C 00333000
170 IF( NAME( 1) .NE. 9477 ) GO TO 180 00333100
L1 = 8 00333200
DO 174 L9 = 1, 3 00333300
L2=L9 00333400
IF( NAME(3) .EQ. MX(L2) ) GO TO 900 00333500
174 CONTINUE 00333600
GO TO 899 00333700
C 00333800
C MVECDIAG,AVECDIAG,MVECMAT,AVECMAT,MMATVEC,AARRVEC,MPRINT,APRINT 00333900
C APRINT AND MPRINT HAVE OPTIONS A,B,C,D,E,F 00334000
C 00334100
180 DO 184 L2 = 2, 9 00334200
IF(NAME(1).EQ.MV(2*L2-3).AND.NAME(2).EQ.MV(2*L2-2)) GO TO 186 00334300
184 CONTINUE 00334400
GO TO 190 00334500
186 L2 = L2 / 2 00334600
L1 = 27 00334700
IF(L2 .NE. 4 ) GO TO 900 00334800
L1 = 9 00334900
GO TO 122 00335000
190 CONTINUE 00335100
C 00335200
C ADD,SUB,MULT,DIV,RAISE,SUBTRA,MULTIP,DIVIDE L1 = 11, L2 = 1, 5 00335300
C 00335400
200 DO 204 K=2,16,2 00335500
I=K 00335600
IF(NAME(1).EQ.IR(I-1).AND.NAME(2).EQ.IR(I))GO TO 206 00335700
204 CONTINUE 00335800
GO TO 210 00335900
206 L1 = 11 00336000
L2=I/2 00336100
IF(L2.GE.6)L2=L2-4 00336200
GO TO 900 00336300
C 00336400
C (SIN,COS,TAN,COT,ARCSIN,ARCCOS,ARCTAN,ARCCOT) DEGREES L1=12,L2=1,1600336500
C ((SIND,COSD,ETC..)) 00336600
210 L1 = 12 00336700
DO 214 K = 2, 40, 2 00336800
I=K 00336900
IF(NAME(1).EQ.IG(I-1) .AND.NAME(2).EQ.IG(I))GO TO 216 00337000
214 CONTINUE 00337100
GO TO 220 00337200
216 L2 = I / 2 00337300
IF(L2.GT.16)L2=L2-12 00337400
IF(L2.LT.8.AND.NAME(3).EQ.3058.AND.NAME(4).EQ.13262)L2=L2+8 00337500
GO TO 900 00337600
C 00337700
C CHECK THE REST OF THE FUNCTIONS L1 = 12 , L2 = 17, 42 00337800
C 00337900
220 DO 224 K=2,42,2 00338000
I=K 00338100
IF(NAME(1).EQ.JF(I-1) .AND.NAME(2).EQ.JF(I))GO TO 226 00338200
224 CONTINUE 00338300
GO TO 230 00338400
226 L2 = I / 2 + 16 00338500
GO TO 900 00338600
C 00338700
C GENERATE,SET,FIXED,FLOATING,PLOT,NOSUMM, SUMMARY,NEWPAGE,SPACE 00338800
C CGS,MKSA,MKS,PAGE L1 = 13, L2 = 1, 13 00338900
C 00339000
230 DO 234 K= 2, 28, 2 00339100
I=K 00339200
IF( NAME(1).EQ.IO(I-1).AND.NAME(2).EQ.IO(I) ) GO TO 236 00339300
234 CONTINUE 00339400
GO TO 240 00339500
236 L1 = 13 00339600
L2 = I / 2 00339700
GO TO 900 00339800
C 00339900
C BEGIN,SCAN,REPEAT,EXECUTE,PERFORM,INCREMENT,INDEX,RESTORE 00340000
C IFLT,IFEQ,IFI ,JVI,IFLE 00340100
C 00340200
240 DO 244 K = 2, 28, 2 00340300
I=K 00340400
IF( NAME(1) .EQ. IS( I-1 ) .AND. NAME(2) .EQ. IS(I ) ) GO TO 246 00340500
244 CONTINUE 00340600
GO TO 250 00340700
246 L2 = I / 2 00340800
L1 = 14 00340900
GO TO 900 00341000
C 00341100
C MDEFINE,ADEFINE,AERASE,MIDENT,ADIAG,MDIAG,MZERO,AZERO,MERASE 00341200
C L1 = 15, L2 = 1, 4 00341300
C L2=1, 4 00341400
250 DO 254 L9 = 1, 9 00341500
L2=L9 00341600
IF(NAME(1) .EQ. MA(2*L2-1) .AND. NAME(2) .EQ. MA(2*L2)) GO TO 256 00341700
254 CONTINUE 00341800
GO TO 260 00341900
256 L1 = 15 00342000
IF( L2 .GT. 1 ) L2 = L2 - 1 00342100
IF( L2 - 5 ) 900, 257, 258 00342200
257 L2 = 4 00342300
GO TO 900 00342400
258 L2 = 2 00342500
GO TO 900 00342600
C 00342700
C MINVERT,LINEAR,INVERT L1 = 16, L2 = 1, 2 00342800
C MMULT,MRAISE L1 = 17, L2 = 1, 2 00342900
C 00343000
260 DO 264 L9 = 1, 5 00343100
L2=L9 00343200
IF(NAME(1) .EQ. MM(2*L2-1) .AND. NAME(2) .EQ. MM(2*L2)) GO TO 266 00343300
264 CONTINUE 00343400
GO TO 270 00343500
266 L1 = 16 00343600
IF( L2 - 3 ) 900, 267, 268 00343700
267 L2 = 1 00343800
GO TO 900 00343900
268 L1 = 17 00344000
L2 = L2 - 3 00344100
GO TO 900 00344200
C 00344300
C MADD,MSUB,MTRANS,AADD,ASUB,AMULT,ADIVIDE,ARAISE,ATRANS,SCALAR, 00344400
C ASCALAR,MSCALAR L1 = 18, L2 = 1, 8 00344500
C 00344600
270 DO 274 L9 = 1, 12 00344700
L2=L9 00344800
IF(NAME(1) .EQ. MB(2*L2-1) .AND. NAME(2) .EQ. MB(2*L2)) GO TO 276 00344900
274 CONTINUE 00345000
GO TO 280 00345100
276 L1 = 18 00345200
IF( L2 - 9 ) 900, 277, 278 00345300
277 L2 = 3 00345400
GO TO 900 00345500
278 L2 = 6 00345600
GO TO 900 00345700
C 00345800
C NLSUB,LSUB,HSUB,USUB,PSUB,TSUB L1 = 19, L2 = 1, 6 00345900
C 00346000
280 L1 = 19 00346100
DO 284 L9 = 1, 6 00346200
L2=L9 00346300
IF(NAME(1) .EQ. JS(2*L2-1) .AND. NAME(2) .EQ. JS(2*L2)) GO TO 900 00346400
284 CONTINUE 00346500
C PARSUM,PARPROD,RMS,AVERAGE,SUM 00346600
C L1 = 20, L2 = 1, 5 00346700
L1 = 20 00346800
DO 294 L9 = 1, 5 00346900
L2=L9 00347000
IF(NAME(1) .EQ. JT(2*L2-1) .AND. NAME(2) .EQ. JT(2*L2)) GO TO 900 00347100
294 CONTINUE 00347200
L1 = 21 00347300
C 00347400
C ROWSUM,PRODUCT,DEFINE,MAX,MAXIMUM,MIN,MINIMUM,SORT,ORDER, 00347500
C ERASE,EXCHANGE,FLIP,CHANGE,HEIRARCHY,LIST,NOLIST,NULL 00347600
C L1 = 21, L2 = 1, 17 00347700
C 00347800
DO 304 L2=1,17 00347900
IF(NAME(1) .EQ. JZ(2*L2-1) .AND. NAME(2) .EQ. JZ(2*L2)) GO TO 90000348000
304 CONTINUE 00348100
C 00348200
C POLYFIT,SPOLYFIT,FIT,SFIT,SOLVE,SSOLVE 00348300
C L1 = 22 L2 = 1, 6 00348400
L1 = 22 00348500
DO 314 L9 = 1, 6 00348600
L2=L9 00348700
IF( NAME(1) .EQ. MZ(2*L2-1) .AND. NAME(2) .EQ. MZ(2*L2)) GO TO 90000348800
314 CONTINUE 00348900
C 00349000
C CLOSE,COUNT,SHORTEN,EXPAND,DUPLICATE,MOVE,BLOCKTRANSFER,AMOVE, 00349100
C MMOVE,PROMOTE,DEMOTE,DIMENSION,SEPARATE,INSERT 00349200
C L1 = 23, L2 = 1, 14 00349300
C 00349400
L1 = 23 00349500
DO 324 L9 = 1, 14 00349600
L2=L9 00349700
IF(NAME(1).EQ.MJ(2*L2-1).AND.NAME(2).EQ.MJ(2*L2)) GO TO 900 00349800
324 CONTINUE 00349900
C 00350000
C STATIS,SSTATIS,FORGIVE,CHECK,FPROB 00350100
C 00350200
L1 = 24 00350300
DO 334 L9 = 1, 5 00350400
L2=L9 00350500
IF( NAME(1).EQ.LB(2*L2-1) .AND. NAME(2).EQ.LB(2*L2) ) GO TO 900 00350600
334 CONTINUE 00350700
C 00350800
C SELECT,SEARCH,CENSOR 00350900
C 00351000
L1 = 25 00351100
DO 344 L9 = 1, 3 00351200
L2=L9 00351300
IF( NAME(1).EQ.LD(2*L2-1) .AND. NAME(2).EQ.LD(2*L2) ) GO TO 900 00351400
344 CONTINUE 00351500
L1 = 26 00351600
IF ( NAME(1) .EQ. NX(1) .AND. NAME(2) .EQ. NX(2) ) GO TO 900 00351700
899 L1=0 00351800
CALL NEWJOB 00351900
900 RETURN 00352000
END 00352100
C 53 24 SUBROUTINE MACHK(IR,J) 2 19 68 00352200
SUBROUTINE MACHK(IR,J) 00352300
C**** WORK SHEET CHECK FOR MATRIX OR ARRAY 00352400
C**** S PEAVY 5/22/67 00352500
DIMENSION IR(4) 00352600
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00352700
ONROW, 00352800
1NCOL,NARGS,VWXYZ(8),NERROR 00352900
DIMENSION ARGS(100) 00353000
EQUIVALENCE( ARGS(1), RC(10001) ) 00353100
C**** IF J=0 EVERYTHING IS FINE 00353200
C**** IF J=1 NOT ENOUGH ROWS 00353300
C**** IF J=2 NOT ENOUGH COLUMNS 00353400
C**** IF J=3 NOT ENOUGH ROWS AND COLUMNS 00353500
C**** IR(1) STARTING ROW 00353600
C**** IR(2) STARTING COLUMN 00353700
C**** IR(3) NO. OF ROWS 00353800
C**** IR(4) NO. OF COLUMNS 00353900
JA=0 00354000
JB=0 00354100
IF( IR(1) + IR(3) - 1 .GT. NROW ) JA = 1 00354200
IF( IR(2) + IR(4) - 1 .GT. NCOL ) JB = 2 00354300
J=JA+JB 00354400
RETURN 00354500
END 00354600
C 54 232 SUBROUTINE MATRIX 2 19 68 00354700
SUBROUTINE MATRIX 00354800
C SUBROUTINE MATRIX R VARNER 8/24/67 00354900
C **** 00355000
C L2=1 ADD MATRICES A+B MADD A(,) N,M, TO B(,) N,M AND S ORE IN C(,) 00355100
C MADD A(,) N,M TO B(,) AND STORE IN C(,) 00355200
C L2=2 SUB MATRICES A-B MSUB A(,) N,M FROM B(,)N,M AND STORE IN C(,) 00355300
C MSUB A(,) N,M FROM B(,) AND STORE IN C(,) 00355400
C L2=3 TRANSPOSE MATRIX MTRANS A(,) N,M AND STORE IN C(,) 00355500
C TRANSPOSE ARRAY ATRANS A(,) N,M AND STORE IN C(,) 00355600
C L2=4 ARRAY ADD AADD 00355700
C L2=5 ARRAY SUBTRACT ASUB 00355800
C L2=6 ARRAY MULTIPLY AMULT 00355900
C L2=7 ARRAY DIVIDE ADIV 00356000
C L2=8 ARRAY RAISE ARAISE 00356100
C GENERAL FORMS FOR ARRAY OPERATIONS 00356200
C A(,) N,M B(,) N,K STORE IN C(,) ARRAY BY ARRAY 00356300
C A(,) N,M B(,) STORE IN C(,) ARRAY BY ARRAY 00356400
C A(,) N,M K STORE IN C(,) ARRAY BY COLUMN 00356500
C A(,) N K STORE IN C(,) ARRAY BY COLUMN 00356600
C A(,) N,M X STORE IN C(,) ARRAY BY CONSTANT 00356700
C A(,) N X STORE IN C(,) ARRAY BY CONSTANT 00356800
C **** 00356900
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00357000
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00357100
COMMON / SCRAT / A(10000),NS 00357200
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00357300
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00357400
DIMENSION ARGS(100) 00357500
EQUIVALENCE( ARGS(1), RC(10001) ) 00357600
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00357700
DIMENSION IR(4),ISAVE(2) 00357800
EQUIVALENCE(IR,ISAVE) 00357900
C **** 00358000
C CHECK TO SEE IF WE HAVE CORRECT NUMBER OF ARGUMENTS 00358100
C IF NOT NO FURTHER CHECKING IS DONE 00358200
C **** 00358300
NPA=NARGS 00358400
IF(L2-3)100,120,140 00358500
100 IF(NARGS.NE.8.AND.NARGS.NE.10) GO TO 400 00358600
GO TO 600 00358700
120 IF(NARGS.NE.6.AND.NARGS.NE.5) GO TO 400 00358800
GO TO 600 00358900
140 IF(NARGS.LT.6.OR.NARGS.GT.10.OR.NARGS.EQ.9) GO TO 400 00359000
GO TO 600 00359100
400 CALL ERROR(10) 00359200
C **** 00359300
C CHECK TO SEE IF ALL ARGUMENTS ARE INTEGERS 00359400
C IF NOT NO FURTHER CHECKING IS DONE 00359500
C **** 00359600
600 IF(L2.GT.3) GO TO 640 00359700
605 J=NARGS 00359800
NP=NARGS 00359900
CALL CKIND(J) 00360000
610 IF(J.EQ.0) GO TO 800 00360100
620 CALL ERROR(3) 00360200
640 IF(NARGS.GT.7) GO TO 605 00360300
ISAVE(1)=IARGS(NARGS) 00360400
IARGS(NARGS)=IARGS(NARGS-2) 00360500
IARGS(NARGS-2)=IARGS(NARGS-1) 00360600
IARGS(NARGS-1)=ISAVE(1) 00360700
ISAVE(1)=KIND(NARGS) 00360800
KIND(NARGS)=KIND(NARGS-2) 00360900
KIND(NARGS-2)=KIND(NARGS-1) 00361000
KIND(NARGS-1)=ISAVE(1) 00361100
NARGS=NARGS-1 00361200
GO TO 605 00361300
C***** 00361400
C CHECK TO SEE IF DIMENSIONS ARE CORRECT IF THEY ARE GIVEN 00361500
C IF NOT NO FURTHER CHECKING IS DONE 00361600
C **** 00361700
800 IF(NARGS.NE.10) GO TO 1100 00361800
IF(IARGS(3).EQ.IARGS(7).AND.IARGS(4).EQ.IARGS(8))GO TO 1100 00361900
CALL ERROR(3) 00362000
C **** 00362100
C CHECK TO SEE IF ARGUMENTS ARE OUT OF RANGE 00362200
C IF YES NO FURTHER CHECKING IS DONE 00362300
C **** 00362400
1100 IF(NARGS.LT.8) GO TO 1140 00362500
1120 IP=3 00362600
GO TO 1160 00362700
1140 IP=2 00362800
IF(L2.EQ.3.AND.NPA.EQ.6) GO TO 1160 00362900
IF(L2.GT.3.AND.NPA.EQ.7) GO TO 1160 00363000
IR(4)=IARGS(3) 00363100
GO TO 1165 00363200
1160 IR(4)=IARGS(4) 00363300
1165 IR(3)=IARGS(3) 00363400
IROW = IR(3) 00363500
ICOL = IR(4) 00363600
JP=1 00363700
DO 1240 I=1,IP 00363800
IF(I.EQ.3) GO TO 1180 00363900
IR(1)=IARGS(JP) 00364000
IR(2)=IARGS(JP+1) 00364100
IF(L2.EQ.3.AND.NPA.EQ.6.AND.I.EQ.2) GO TO 1170 00364200
GO TO 1200 00364300
1170 IR(3)=IARGS(4) 00364400
IR(4)=IARGS(3) 00364500
1180 IR(1)=IARGS(5) 00364600
IR(2)=IARGS(6) 00364700
1200 CALL MACHK(IR,J) 00364800
JP=NARGS-1 00364900
IF(J.EQ.0) GO TO 1240 00365000
CALL ERROR(17) 00365100
1240 CONTINUE 00365200
C ***$ 00365300
C FIND ADRESSES OF COLUMNS 00365400
C ***** 00365500
IF(L2-3)1500,1600,1640 00365600
1500 ISAVE(1)=IARGS(1) 00365700
ISAVE(2)=IARGS(3) 00365800
IARGS(1)=IARGS(2) 00365900
IARGS(2)=IARGS(6) 00366000
IARGS(3)=IARGS(NARGS) 00366100
NARGS=3 00366200
CALL CHKCOL(J) 00366300
IARGS(1)=IARGS(1)+ISAVE(1)-1 00366400
IARGS(2)=IARGS(2)+IARGS(5)-1 00366500
IARGS( 3)=IARGS(3)+IARGS(NP-1)-1 00366600
GO TO 1800 00366700
1600 ISAVE(2)=IARGS(3) 00366800
1620 ISAVE(1)=IARGS(1) 00366900
IARGS(1)=IARGS(2) 00367000
IARGS(2)=IARGS(NP) 00367100
NARGS=2 00367200
CALL CHKCOL(J) 00367300
IARGS(1)=IARGS(1)+ISAVE(1)-1 00367400
IARGS(2)=IARGS(2)+IARGS(NP-1)-1 00367500
GO TO 1800 00367600
1640 IF (NPA.GE.8) GO TO 1500 00367700
IF(KIND(NPA ).NE.0) GO TO 1600 00367800
CALL ADRESS(NPA,J) 00367900
ISAVE(2)=IARGS(3) 00368000
IARGS(3)=J 00368100
GO TO 1620 00368200
C ***** 00368300
C CHECK TO SEE IF THERE WERE PREVIOUS ERRORS 00368400
C ***** 00368500
1800 IF(NERROR.NE.0) RETURN 00368600
C ***** 00368700
C SUM ELEMENTS IN SCRATCH AREA 00368800
C SUBTRACT ELEMENTS IN SCRATCH AREA 00368900
C PRODUCTS AND QUOTIENTS FORMED USING DOUBLE PRECISION IN SCRATCH AREA00369000
C TRANSPOSE IN SCRATCH AREA 00369100
C ***** 00369200
NROWPP=NROW 00369300
IF(L2-3)2000,1900,2040 00369400
1900 IIB=ICOL 00369500
JJB=IROW 00369600
NROWPP=0 00369700
K=1 00369800
GO TO 2030 00369900
2000 NROWP=NROW 00370000
IBP=IARGS(2) 00370100
2020 IIB=IROW 00370200
JJB=ICOL 00370300
K=0 00370400
2030 IS=1 00370500
IAP=IARGS(1) 00370600
GO TO 2100 00370700
2040 IF(NPA.GE.8) GO TO 2000 00370800
IF(KIND(NPA ).EQ.1) GO TO 2065 00370900
2060 IBP=IARGS(3) 00371000
2065 IARGS(3)=IARGS(2) 00371100
NROWP=0 00371200
GO TO 2020 00371300
2100 DO 3560 J=1,JJB 00371400
IA=IAP+(J-1)*K 00371500
IB=IBP 00371600
DO 3540 I=1,IIB 00371700
GO TO (2120,2140,2200,2220,2240,2260,2280,2300),L2 00371800
2120 A(IS)=RC(IA)+RC(IB) 00371900
GO TO 3500 00372000
2140 A(IS)=RC(IA)-RC(IB) 00372100
GO TO 3500 00372200
2160 A(IS)=RC(IA)*RC(IB) 00372300
GO TO 3500 00372400
2180 A(IS)=RC(IA)/RC(IB) 00372500
GO TO 3500 00372600
2200 A(IS)=RC(IA) 00372700
IA=IA+NROW 00372800
GO TO 3530 00372900
2220 IF(NPA.GE.8.OR.(KIND(NPA ).EQ.0.AND.NPA.LT.8)) GO TO 2120 00373000
A(IS)=RC(IA)+ARGS(NPA-2) 00373100
GO TO 3520 00373200
2240 IF(NPA.GE.8.OR.(KIND(NPA ).EQ.0.AND.NPA.LT.8)) GO TO 2140 00373300
A(IS)=RC(IA)-ARGS(NPA-2) 00373400
GO TO 3520 00373500
2260 IF(NPA.GE.8.OR.(KIND(NPA ).EQ.0.AND.NPA.LT.8)) GO TO 2160 00373600
A(IS)=RC(IA)*ARGS(NPA-2) 00373700
GO TO 3500 00373800
2280 IF(NPA.GE.8.OR.(NPA.LT.8.AND.KIND(NPA ).EQ.0)) GO TO 2180 00373900
A(IS)=RC(IA)/ARGS(NPA-2) 00374000
GO TO 3500 00374100
2300 IF(NPA.GE.8.OR.(NPA.LT.8.AND.KIND(NPA ).EQ.0)) GO TO 2320 00374200
A(IS)=FEXP2(RC(IA),ARGS(NPA-2)) 00374300
GO TO 3500 00374400
2320 A(IS)=FEXP2(RC(IA),RC(IB)) 00374500
GO TO 3500 00374600
3500 IB=IB+1 00374700
3520 IA=IA+1 00374800
3530 IS=IS+1 00374900
3540 CONTINUE 00375000
IAP=IAP+NROWPP 00375100
IBP=IBP+NROWP 00375200
3560 CONTINUE 00375300
C ***** 00375400
C MOVE SUMS TO WORKSHEET 00375500
C MOVE DIFFERENCES TO WORKSHEET 00375600
C MOVE ARRAY PRODUCT TO WORKSHEET 00375700
C MOVE ARRAY QUOTIENT TO SORKSHEET 00375800
C MOVE TRANSPOSE TO WORKSHEET 00375900
C MOVE RAISED MATRIX TO WORKSHEET 00376000
C ***** 00376100
IF(L2.NE.3) GO TO 3820 00376200
3800 IIB=ICOL 00376300
JJB=IROW 00376400
ICP=IARGS(2) 00376500
GO TO 3840 00376600
3820 ICP=IARGS(3) 00376700
3840 IS=1 00376800
3880 DO 4080 J=1,JJB 00376900
IC=ICP 00377000
DO 4060 I=1,IIB 00377100
4000 RC(IC)=A(IS) 00377200
IC=IC+1 00377300
IS=IS+1 00377400
4060 CONTINUE 00377500
ICP=ICP+NROW 00377600
4080 CONTINUE 00377700
RETURN 00377800
END 00377900
C 55 83 SUBROUTINE MDAMAD 2 19 68 00378000
SUBROUTINE MDAMAD 00378100
C SUBROUTINE MDAMAD R VARNER 9/26/67 00378200
C ***** 00378300
C SUBROUTINE TO PRE OR POST MULTIPLY A MATRIX BY A DIAGONAL STORED 00378400
C AS A COLUMN 00378500
C L2=1 M(AD) 00378600
C MATRIX A IS POSTMULTIPLIED BY THE DIAGONAL D STORED IN COL I 00378700
C GENERAL FORM OF COMMAND 00378800
C M(AD) A(,) N,K, D IN COL I STORE IN C(,) 00378900
C L2=2 MDA) 00379000
C MATRIX A IS PREMULTIPLIED BY THE DIAGONAL D STORED IN COL I 00379100
C GENERAL FORM OF COMMAND 00379200
C M(DA), A(,) N,K K IN COL I STORE IN C(,) 00379300
C ***** 00379400
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00379500
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00379600
COMMON / SCRAT / A(10000),NS 00379700
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00379800
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00379900
DIMENSION ARGS(100) 00380000
EQUIVALENCE( ARGS(1), RC(10001) ) 00380100
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00380200
C **** 00380300
C CHECK FOR CORRECT NUMBER OF ARGUMENTS 00380400
C ***** 00380500
IF(NARGS.NE.7)CALL ERROR(10) 00380600
C ***** 00380700
C CHECK TO SEE THAT ALL ARGUMENTS ARE INTEGERS 00380800
C ***** 00380900
J=NARGS 00381000
CALL CKIND(J) 00381100
IF(J.NE.0) CALL ERROR(3) 00381200
C ***** 00381300
C CHECK TO SEE IF DIMENSIONS ARE OUT OF RANGE 00381400
C COMPUTE ADDRESSES OF COLUMNS 00381500
C ***** 00381600
IARGS(12)=IARGS(4) 00381700
IARGS(11)=IARGS(3) 00381800
IARGS(10)=IARGS(7) 00381900
IARGS(9)=IARGS(6) 00382000
IARGS(8)= 1 00382100
GO TO (100, 120 ),L2 00382200
100 IARGS(7)=IARGS(4) 00382300
GO TO 140 00382400
120 IARGS(7)=IARGS(3) 00382500
140 IARGS(6)=IARGS(5) 00382600
IARGS(5)= 1 00382700
J=3 00382800
CALL MTXCHK(J) 00382900
IF(J-1) 190 , 160 ,180 00383000
160 CALL ERROR(3) 00383100
RETURN 00383200
180 CALL ERROR(17) 00383300
RETURN 00383400
C ***** 00383500
C CHECK FOR PREVIOUS ERRORS 00383600
C ***** 00383700
190 IF(NERROR.NE.0) RETURN 00383800
IP=IARGS(4) 00383900
JP=IARGS(3) 00384000
GO TO ( 200, 220 ) ,L2 00384100
220 I1=0 00384200
I2=1 00384300
GO TO 260 00384400
200 I1=1 00384500
I2=0 00384600
260 IA=IARGS(1) 00384700
IDP=IARGS(5) 00384800
IB=IARGS(9) 00384900
DO 340 I=1,IP 00385000
ID=IDP 00385100
DO 300 J=1,JP 00385200
RC(IB)=RC(ID)*RC(IA) 00385300
ID=ID+I2 00385400
IA=IA+1 00385500
IB=IB+1 00385600
300 CONTINUE 00385700
IB=IB+NROW-JP 00385800
IA=IA+NROW-JP 00385900
IDP=IDP+I1 00386000
340 CONTINUE 00386100
RETURN 00386200
END 00386300
C 56 182 SUBROUTINE MISC2 2 19 68 00386400
SUBROUTINE MISC2 00386500
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00386600
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00386700
DIMENSION ARGS(100) 00386800
EQUIVALENCE( ARGS(1), RC(10001) ) 00386900
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00387000
COMMON / SCRAT / A(10000),NS 00387100
C SUBROUTINE BY CARLA MESSINA NSRDS - NBS JULY 1967 00387200
C 00387300
C TYPE 4 IS EXPAND $$ TO ,, POWER IN INTERVALS OF ,, START STORE ++ 00387400
C THE POWERS MAY BE INTEGER OR NOT 00387500
C TYPE 1 IS CLOSE UP ROWS HAVING ** IN ++,++, ETC 00387600
C TYPE 2 IS COUNT LENGTH OF COLUMN ++, STORE IN COLUMN ++ 00387700
C TYPE 3 IS SHORTEN COL ++ FOR COL ++ = ** STORE IN COL ++ AND COL ++ 00387800
C TYPE 5 IS DUPLICATE ,, TIMES THE ARRAY IN ,, ++ R=,, C=,, START 00387900
C STORING IN ,, ++ 00388000
C 00388100
DIMENSION IR(4) 00388200
J=NARGS 00388300
IF (NARGS - 2) 10,40,40 00388400
10 K = 10 00388500
20 CALL ERROR(K) 00388600
30 RETURN 00388700
40 GO TO (50,75,50 ,400,600) , L2 00388800
50 IF (KIND(L2)) 60,60,70 00388900
60 K = 3 00389000
GO TO 20 00389100
70 KIND(L2) = 0 00389200
ARG1 = ARGS(L2) 00389300
IARGS(L2) = IARGS(L2+1) 00389400
75 CALL CHKCOL(J) 00389500
IF (J) 60,80,60 00389600
80 DO 90 I=1,NARGS 00389700
90 IARGS(I) = IARGS(I) - 1 00389800
IF (L2 - 2) 110,110,100 00389900
100 IF (NARGS - 5) 10,110,10 00390000
110 IF (NERROR .NE. 0) GO TO 30 00390100
IF (NRMAX) 120,120,130 00390200
120 K = 9 00390300
GO TO 20 00390400
130 IF (L2 - 2) 140,200,300 00390500
C CLOSE UP 00390600
140 DO 190 J=2,NARGS 00390700
K = IARGS(J) 00390800
M = 0 00390900
DO 160 I=1,NRMAX 00391000
J1 = K + I 00391100
148 IF ( RC( J1 ) - ARG1 ) 160,150,160 00391200
150 M = M + 1 00391300
IF ( (M+I) .EQ. (NRMAX+1) ) GO TO 161 00391400
K1 = J1 +1 00391500
K3 = K + NRMAX 00391600
DO 155 K2 = K1,K3 00391700
155 RC( K2 - 1 ) = RC( K2 ) 00391800
GO TO 148 00391900
160 CONTINUE 00392000
161 IF ( M .EQ. 0 ) GO TO 190 00392100
M = NRMAX - M + 1 00392200
DO 180 I = M,NRMAX 00392300
J1 = K + I 00392400
180 RC(J1) = 0.0 00392500
190 CONTINUE 00392600
GO TO 30 00392700
C COUNT 00392800
200 IF (NRMAX - 2) 260,260,210 00392900
210 DO 250 I=3,NRMAX 00393000
J = IARGS(1) + I 00393100
IF (RC(J-2)) 250,220,250 00393200
220 IF (RC(J-1)) 250,230,250 00393300
230 IF (RC(J )) 250,240,250 00393400
240 ARG1 = I - 3 00393500
GO TO 270 00393600
250 CONTINUE 00393700
260 ARG1 = NRMAX 00393800
270 IARGS(2) = IARGS(2) + 1 00393900
CALL VECTOR (ARG1,IARGS(2)) 00394000
GO TO 30 00394100
C SHORTEN 00394200
300 IF (NRMAX - 2) 30,310,310 00394300
310 DO 360 K=2,NRMAX 00394400
J1 = IARGS(2) + K 00394500
IF (ARG1 - RC(J1-1)) 320,330,340 00394600
320 IF (ARG1 - RC(J1 )) 360,350,350 00394700
330 NRMAX = K - 1 00394800
GO TO 370 00394900
340 IF (ARG1 - RC(J1)) 350,350,360 00395000
350 NRMAX = K 00395100
GO TO 370 00395200
360 CONTINUE 00395300
K = 203 00395400
CALL ERROR(K) 00395500
370 DO 380 I=1,NRMAX 00395600
K = IARGS(1) + I 00395700
J = IARGS(4) + I 00395800
M = IARGS(5) + I 00395900
K1 = IARGS(2) + I 00396000
RC(M) = RC(K1) 00396100
380 RC(J)= RC(K) 00396200
GO TO 30 00396300
C EXPAND 00396400
400 IF (NARGS - 4) 10,410,10 00396500
410 CALL ADRESS(4,K1) 00396600
IF (K1) 60,60,420 00396700
420 IF (KIND(1)) 460,430,460 00396800
430 CALL ADRESS(1,IARGS(1)) 00396900
IF (IARGS(1)) 60,60,440 00397000
440 K = IARGS(1) - 1 00397100
DO 450 I=1,NRMAX 00397200
J = K + I 00397300
450 A(I) = RC(J) 00397400
GO TO 480 00397500
460 DO 470 I=1,NRMAX 00397600
470 A(I) = ARGS(1) 00397700
480 IF (KIND(2)) 500,490,500 00397800
490 ARGS(2) = IARGS(2) 00397900
500 IF (KIND(3)) 520,510,520 00398000
510 ARGS(3) = IARGS(3) 00398100
520 IF (ARGS(2)*ARGS(3)) 530,530,540 00398200
530 K = 20 00398300
GO TO 20 00398400
540 IF (ABS(ARGS(3)) - ABS(ARGS(2))) 550,550,530 00398500
550 IF (NERROR .NE. 0) GO TO 30 00398600
IF (NRMAX) 120,120,560 00398700
560 CC = ARGS(3) 00398800
570 DO 580 I=1,NRMAX 00398900
K = K1-1 + I 00399000
580 RC(K) = FEXP2(A(I),CC) 00399100
IF (ABS(CC) - ABS(ARGS(2))) 590,30,30 00399200
590 CC = CC + ARGS(3) 00399300
IARGS(4) = IARGS(4) + 1 00399400
CALL ADRESS(4,K1) 00399500
IF (K1) 60,60,570 00399600
C DUPLICATE 00399700
600 IF (NARGS - 7) 10,610,10 00399800
610 CALL CKIND(J) 00399900
IF (J) 60,620,60 00400000
620 DO 630 I=2,5 00400100
630 IR(I-1) = IARGS(I) 00400200
CALL MACHK(IR,J) 00400300
IF (J) 640,650,640 00400400
640 K = 17 00400500
GO TO 20 00400600
650 IR(1) = IARGS(6) 00400700
IR(2) = IARGS(7) 00400800
IR(3) = IARGS(1)*IARGS(4) 00400900
IR(4) = IARGS(5) 00401000
CALL MACHK(IR,J) 00401100
IF (J) 640,660,640 00401200
660 IF (IARGS(1)-1) 60,670,670 00401300
670 CALL ADRESS(3,IARGS(3)) 00401400
CALL ADRESS(7,IARGS(7)) 00401500
J = IARGS(6) + IARGS(1)*IARGS(4) - 1 00401600
IF (NRMAX - J) 680,690,690 00401700
680 NRMAX = J 00401800
IF (NRMAX - NROW) 690,690,640 00401900
690 IF (NERROR .NE. 0) GO TO 30 00402000
IEND = IARGS(1) 00402100
IX = IARGS(2) - 1 00402200
IY = IARGS(3) - NROW - 1 00402300
LONG = IARGS(4) 00402400
LWIDE = IARGS(5) 00402500
J = 0 00402600
DO 700 I=1,LWIDE 00402700
IY = IY + NROW 00402800
DO 700 K=1,LONG 00402900
K1 = IX + IY + K 00403000
J = J + 1 00403100
700 A(J) = RC(K1) 00403200
IARGS(6) = IARGS(6) - NROW - 1 00403300
IY = IARGS(7) -LONG - 1 00403400
DO 710 JJ = 1, IEND 00403500
J = 0 00403600
IY = IY + LONG 00403700
IX = IARGS(6) 00403800
DO 710 I=1,LWIDE 00403900
IX = IX + NROW 00404000
DO 710 K=1,LONG 00404100
K1 = IX + IY + K 00404200
J = J + 1 00404300
710 RC(K1) = A(J) 00404400
GO TO 30 00404500
END 00404600
C 57 64 SUBROUTINE MKRON 2 19 68 00404700
SUBROUTINE MKRON 00404800
C ROUTINE WRITTEN FOR OMNITAB 11/ 3/67 BY S PEAVY 00404900
C 00405000
C KRONECKER PRODUCT OF TWO MATRICES A(N,C)*B(M,K)=D 00405100
C 00405200
C FIRST FOUR ARGUMENTS DEFINE MATRIX A STARTING POS AND SIZE 00405300
C NEXT FOUR ARGUMENTS DEFINE MATRIX B STARTING POS AND SIZE 00405400
C LAST TWO ARGUMENTS INDICATE WHERE RESULT IS TO BE STORED D 00405500
C COMMAND IS" 00405600
C MKRON A(,, ++),R=,, C=,,*B(,, ++),R=,, C=,, STORE D(,, ++) 00405700
C 00405800
C 00405900
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00406000
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00406100
DIMENSION ARGS(100) 00406200
EQUIVALENCE( ARGS(1), RC(10001) ) 00406300
COMMON / SCRAT / A(10000),NS 00406400
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00406500
COMMON/CONSTS/PI,E,HALFPI,DEG,RAD,XEXP,XTRIG,XALOG,CC( 192 ) 00406600
IF(NARGS.NE.10)CALL ERROR(10) 00406700
J=NARGS 00406800
CALL CKIND(J) 00406900
IF(J.NE.0) CALL ERROR(3) 00407000
IF(NERROR.NE.0)RETURN 00407100
IARGS(11)=IARGS(3)*IARGS(7) 00407200
IARGS(12)=IARGS(4)*IARGS(8) 00407300
J=3 00407400
CALL MTXCHK(J) 00407500
IF(J.EQ.0) GO TO 150 00407600
CALL ERROR(17) 00407700
RETURN 00407800
150 NRA=IARGS(3) 00407900
NCA=IARGS(4) 00408000
NRB=IARGS(7) 00408100
NCB=IARGS(8) 00408200
NDS=1 00408300
KA=IARGS(1) 00408400
DO 300 ICA=1,NCA 00408500
LA=IARGS(5) 00408600
DO 250 ICB=1,NCB 00408700
K=KA 00408800
DO 200 IRA=1,NRA 00408900
T=RC(K) 00409000
K=K+1 00409100
L=LA 00409200
DO 200 IRB=1,NRB 00409300
A(NDS)=T*RC(L) 00409400
L=L+1 00409500
200 NDS=NDS+1 00409600
250 LA=LA+NROW 00409700
300 KA=KA+NROW 00409800
NRC=IARGS(11) 00409900
NCC=IARGS(12) 00410000
NDS=1 00410100
KA=IARGS(9) 00410200
DO 410 I=1,NCC 00410300
K=KA 00410400
DO 400 J=1,NRC 00410500
RC(K)=A(NDS) 00410600
NDS=NDS+1 00410700
400 K=K+1 00410800
410 KA =KA+NROW 00410900
RETURN 00411000
END 00411100
C 58 156 SUBROUTINE MMULT 2 19 68 00411200
SUBROUTINE MMULT 00411300
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00411400
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00411500
DIMENSION ARGS(100) 00411600
EQUIVALENCE( ARGS(1), RC(10001) ) 00411700
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00411800
C ***** 00411900
C SUBROUTINE TO MULTIPLY MATRICES 00412000
C GENERAL FORMS OF MMULT 00412100
C MMULT A(,) N,K, BY B(,) K,M AND STORE IN C(,) 00412200
C MMULT A(,) N BY B(,) N AND STORE IN C(,) 00412300
C MMULT A(,) N BY B(,) AND STORE IN C(,) 00412400
C MMULT A(,) N,K, BY B(,) M AND STORE IN C(,) 00412500
C ***** 00412600
COMMON/MULTC/NS2 00412700
COMMON / SCRAT / X,NS 00412800
DIMENSION A(10000) 00412900
DOUBLE PRECISION X(5000), SUM 00413000
DIMENSION IR(4),ISAVE(2) 00413100
EQUIVALENCE(IR,ISAVE) 00413200
NS2=NS/2 00413300
C ***** 00413400
C CHECK TO SEE IF WE HAVE CORRECT NUMBER OF ARGUMENTS 00413500
C ***** 00413600
100 IF(NARGS.GT.10.OR.NARGS.LT.7) CALL ERROR(10) 00413700
C ***** 00413800
C CHECK TO SEE IF ALL ARGUMENTS ARE INTEGERS 00413900
C ***** 00414000
600 J=NARGS 00414100
CALL CKIND(J) 00414200
IF(J.EQ.0) GO TO 800 00414300
CALL ERROR(3) 00414400
C ***** 00414500
C CHECK TO SEE IF DIMENSIONS ARE CORRECT 00414600
C ***** 00414700
800 IF(NARGS.EQ.10) GO TO 840 00414800
IF(NARGS.EQ.8) GO TO 860 00414900
GO TO 1100 00415000
840 IF(IARGS(4).NE.IARGS(7)) GO TO 880 00415100
GO TO 1100 00415200
860 IF(IARGS(3).EQ.IARGS(6)) GO TO 1100 00415300
880 CALL ERROR(3) 00415400
C ***** 00415500
C CHECK TO SEE IF ARGUMENTS ARE OUT OF RANGE 00415600
C ***** 00415700
1100 IP=3 00415800
1160 JERR=0 00415900
DO 1320 I=1,IP 00416000
IF(I.NE.1) GO TO 1200 00416100
IR(1)=IARGS(1) 00416200
IR(2)=IARGS(2) 00416300
IR(3)=IARGS(3) 00416400
IROWA=IARGS(3) 00416500
IF(NARGS.GT.8) GO TO 1180 00416600
IR(4)=IARGS(3) 00416700
ICOLA=IARGS(3) 00416800
GO TO 1300 00416900
1180 IR(4)=IARGS(4) 00417000
ICOLA=IARGS(4) 00417100
GO TO 1300 00417200
1200 IF(I.EQ.3) GO TO 1240 00417300
IR(1)=IARGS(NARGS-1) 00417400
IR(2)=IARGS(NARGS) 00417500
IR(3)=IARGS(3) 00417600
IF(NARGS.GT.8) GO TO 1220 00417700
IR(4)=IARGS(3) 00417800
GO TO 1300 00417900
1220 IR(4)=IARGS(NARGS-2) 00418000
GO TO 1300 00418100
1240 IF(NARGS.GT.8) GO TO 1260 00418200
IR(1)=IARGS(4) 00418300
IR(2)=IARGS(5) 00418400
IR(3)=IARGS(3) 00418500
IR(4)=IARGS(3) 00418600
ICOLB=IARGS(3) 00418700
GO TO 1300 00418800
1260 IR(1)=IARGS(5) 00418900
IR(2)=IARGS(6) 00419000
IF(NARGS.EQ.10) GO TO 1280 00419100
IR(3)=IARGS(4) 00419200
IR(4)=IARGS(7) 00419300
ICOLB=IARGS(7) 00419400
GO TO 1300 00419500
1280 IR(3)=IARGS(7) 00419600
IR(4)=IARGS(8) 00419700
ICOLB=IARGS(8) 00419800
1300 CALL MACHK(IR,J) 00419900
IF(J.EQ.0) GO TO 1320 00420000
CALL ERROR(17) 00420100
JERR=JERR+1 00420200
1320 CONTINUE 00420300
C ***** 00420400
C FIND ADDRESSES OF COLUMNS 00420500
C ***** 00420600
NP=NARGS 00420700
ISAVE(1)=IARGS(1) 00420800
IARGS(1)=IARGS(2) 00420900
ISAVE(2)=IARGS(3) 00421000
IARGS(3)=IARGS(NARGS) 00421100
NARGS=3 00421200
IF(NP.GT.8) GO TO 1540 00421300
IARGS(2)=IARGS(5) 00421400
GO TO 1580 00421500
1540 IARGS(2)=IARGS(6) 00421600
1580 CALL CHKCOL(J) 00421700
IARGS(1)=IARGS(1)+ISAVE(1)-1 00421800
IARGS(3)=IARGS(3)+IARGS(NP-1)-1 00421900
IF(NP.GT.8) GO TO 1620 00422000
IARGS(2)=IARGS(2)+IARGS(4)-1 00422100
GO TO 1800 00422200
1620 IARGS(2)=IARGS(2)+IARGS(5)-1 00422300
C ***** 00422400
C CHECK TO SEE IF PREVIOUS ERRORS 00422500
C ***** 00422600
1800 IF(NERROR.NE.0) RETURN 00422700
C ***** 00422800
C BEGIN MULTIPLICATION 00422900
C ***** 00423000
ISP=1 00423100
IBP=IARGS(2) 00423200
DO 3040 ICB=1,ICOLB 00423300
IAP=IARGS(1) 00423400
DO 3020 IRA=1,IROWA 00423500
IS=NS2 00423600
IA=IAP 00423700
IB=IBP 00423800
DO 3000 J=1,ICOLA 00423900
X(IS)=RC(IA)*RC(IB) 00424000
IS=IS-1 00424100
IA=IA+NROW 00424200
IB=IB+1 00424300
3000 CONTINUE 00424400
C ***** 00424500
C CALL ROUTINE TO SORT PRODUCTS AND SUM 00424600
C ***** 00424700
CALL SORTSM (ICOLA,SUM) 00424800
A(ISP)=SUM 00424900
ISP=ISP+1 00425000
3020 IAP=IAP+1 00425100
3040 IBP=IBP+NROW 00425200
C ***** 00425300
C STORE MATRIX PRODUCT 00425400
C ***** 00425500
IS=1 00425600
ICP=IARGS(3) 00425700
DO 8100 J=1,ICOLB 00425800
IC=ICP 00425900
DO 8080 I=1,IROWA 00426000
RC(IC)=A(IS) 00426100
IS=IS+1 00426200
IC=IC+1 00426300
8080 CONTINUE 00426400
8100 ICP=ICP+NROW 00426500
RETURN 00426600
END 00426700
C 59 111 SUBROUTINE MOP 2 19 68 00426800
SUBROUTINE MOP 00426900
C**** SUBROUTINE TO DO MDEFINE,ADEFINE,MZERO,AZERO,MERASE,AERASE,MEDENT 00427000
C**** S PEAVY FOR OMNITAB UNIVAC 1108 9/ 1/67 00427100
C**** COMMANDS ARE AS FOLLOWS 00427200
C**** 00427300
C**** II MDEFINE (+++,+++) N +++ VALUE *** 00427400
C**** I MDEFINE (+++,++) N ++,K ++ VALUE *** 00427500
C**** III SAME AS I EXCEPT COMMAND IS ADEFINE 00427600
C**** IV SAME AS II EXCEPT COMMAND IS ADEFINE 00427700
C**** V MZERO (+++,+++) N +++,K +++ 00427800
C**** VI MZERO (+++,+++) N +++ 00427900
C**** VII AZERO (+++,+++) N +++, K +++ 00428000
C**** IX SAME AS V EXCEPT COMMAND IS MERASE 00428100
C**** VIII AZERO (+++,+++) N +++ 00428200
C**** X SAME AS VI EXCEPT COMMAND IS MERASE 00428300
C**** XI SAME AS VII EXCEPT COMMAND IS AERASE 00428400
C**** XII SAME AS VIII EXCEPT COMMAND IS AERASE 00428500
C**** XIII MIDENT (+++,+++) N +++, N +++ 00428600
C**** XIV MIDENT (+++,+++) R=+++,C=+++,X=*** 00428700
C**** XV MDIAG (+++,+++) N +++ N +++ COL +++ 00428800
C**** XVI MDIAG (+++,+++) N +++ COL +++ 00428900
C**** VII MDIAG (+++,+++) N +++ N +++ VALUE *** 00429000
C**** VIII MDIAG (+++,+++) N +++ VALUE *** 00429100
C**** XIX MDIAG (+++,+++) N +++ N +++ ITH,JTH ELEM""(+++,+++)"" 00429200
C**** XX MDIAG (+++,+++) N +++ ITH,JTH,ELEM ""(+++,+++)"" 00429300
C**** XXI SAME AS XV-XX EXCEPT COMMAND IS ADIAG 00429400
C**** 00429500
C**** L2=1 MDEFINE,ADEFINE 00429600
C**** L2=2 MZERO,AZERO,MERASE,AERASE 00429700
C**** L2=3 MIDENT 00429800
C**** L2=4 MDIAG,ADIAG 00429900
C**** 00430000
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00430100
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00430200
COMMON / SCRAT / A(10000),NS 00430300
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00430400
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00430500
DIMENSION ARGS(100) 00430600
EQUIVALENCE( ARGS(1), RC(10001) ) 00430700
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00430800
DATA ONE/1.0/,ZERO/0.0/ 00430900
GO TO (100,150,160,180),L2 00431000
100 IF(NARGS.NE.4.AND.NARGS.NE.5) CALL ERROR (10) 00431100
IF(KIND(NARGS).NE.1) CALL ERROR (3) 00431200
IF(NARGS.EQ.4) IARGS(4)=IARGS(3) 00431300
CONST=ARGS(NARGS) 00431400
CONSTA=ARGS(NARGS) 00431500
J=NARGS-1 00431600
105 CALL CKIND (J) 00431700
IF(J.NE.0) CALL ERROR (3) 00431800
J=1 00431900
CALL MTXCHK(J) 00432000
IF(J.NE.0) CALL ERROR (17) 00432100
IF(NERROR.NE.0) RETURN 00432200
JB=IARGS(1) 00432300
N=IARGS(3) 00432400
K=IARGS(4) 00432500
JA=JB 00432600
IF(L2.EQ.4) GO TO 190 00432700
DO 120 KA=1,K 00432800
JC=JB 00432900
DO 110 NA=1,N 00433000
RC(JC)=CONST 00433100
110 JC=JC+1 00433200
RC(JA)=CONSTA 00433300
JA=JA+NROW+1 00433400
120 JB=JB+NROW 00433500
RETURN 00433600
150 IF(NARGS.NE.3.AND.NARGS.NE.4) CALL ERROR(10) 00433700
CONST=ZERO 00433800
CONSTA=ZERO 00433900
J=NARGS 00434000
IF(NARGS.EQ.4) GO TO 105 00434100
IARGS(4)=IARGS(3) 00434200
J=NARGS-1 00434300
GO TO 105 00434400
160 CONST=ZERO 00434500
CONSTA=ONE 00434600
J=NARGS 00434700
IF(NARGS.NE.3) GO TO 170 00434800
IARGS(4)=IARGS(3) 00434900
GO TO 105 00435000
170 IF(NARGS.EQ.4.AND.KIND(4).EQ.0) GO TO 105 00435100
CONSTA=ARGS(NARGS) 00435200
J = J-1 00435300
IF(NARGS.EQ.5) GO TO 105 00435400
IF(NARGS.NE.4) CALL ERROR (10) 00435500
IARGS(4)=IARGS(3) 00435600
GO TO 105 00435700
180 J=NARGS-1 00435800
IF(NARGS.NE.4.AND.NARGS.NE.5) CALL ERROR (10) 00435900
IF(NARGS.EQ.5) GO TO 105 00436000
IARGS(5) = IARGS(4) 00436100
IARGS(4)=IARGS(3) 00436200
GO TO 105 00436300
190 IF(KIND(NARGS).EQ.0) GO TO 210 00436400
DO 200 NA=1,N 00436500
RC(JB)=ARGS(NARGS) 00436600
200 JB=JB+1+NROW 00436700
RETURN 00436800
210 KIND(5)=0 00436900
CALL ADRESS(5,M) 00437000
IF(M.GT.0) GO TO 220 00437100
CALL ERROR (11) 00437200
RETURN 00437300
220 DO 230 NA=1,N 00437400
RC(JB)=RC(M) 00437500
M=M+1 00437600
230 JB=JB+1+NROW 00437700
RETURN 00437800
END 00437900
C 60 55 SUBROUTINE MOVE 2 19 68 00438000
SUBROUTINE MOVE 00438100
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00438200
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00438300
DIMENSION ARGS(100) 00438400
EQUIVALENCE( ARGS(1), RC(10001) ) 00438500
C THIS ROUTINE IS ALSO CALLED BLOCKTRANSFER 00438600
IF( NARGS .EQ. 6 ) GO TO 70 00438700
K = 10 00438800
10 CALL ERROR( K ) 00438900
20 RETURN 00439000
40 K = 20 00439100
GO TO 20 00439200
50 K = 11 00439300
GO TO 20 00439400
70 IARGS( 9 ) = IARGS( 1 ) + IARGS( 3 ) - 1 00439500
IARGS( 13 ) = IARGS( 5 ) + IARGS( 3 ) - 1 00439600
IF( KIND( 1 ) + KIND( 3 ) + KIND( 4 ) + KIND( 5 ) .NE. 0 )GO TO 4000439700
IF( IARGS( 1 ) .GT. 0 .AND. IARGS( 3 ) .GT. 0 .AND. IARGS( 5 ) 00439800
1 .GT. 0 .AND. IARGS( 9 ) .LE. NROW .AND. IARGS( 13 ) .LE. NROW ) 00439900
2 GO TO 80 00440000
K = 16 00440100
GO TO 10 00440200
80 IARGS( 10 ) = IARGS( 2 ) + IARGS( 4 ) - 1 00440300
KIND( 10 ) = 0 00440400
IARGS( 14 ) = IARGS( 6 ) + IARGS( 4 ) - 1 00440500
KIND( 14 ) = 0 00440600
DO 90 I = 2, 14, 4 00440700
CALL ADRESS( I , IDUMY ) 00440800
IARGS( I ) = IDUMY 00440900
IF( IARGS( I ) ) 40, 50, 90 00441000
90 IARGS( I ) = IARGS( I ) - 1 00441100
C 00441200
C IF MOVE IS UP, IR = -1, IF DOWN, IR = +1 00441300
C IF MOVE IS LEFT, IC = -1, IF RIGHT, IC = +1 00441400
C DIRECTION OF MOVE IS SUCH THAT THE TWO AREAS CAN BE OVERLAPPING 00441500
C AND IT WILL BE DONE PROPERLY. 00441600
C 00441700
IR = ISIGN( 1, IARGS( 5 ) - IARGS( 1 ) ) 00441800
IC = ISIGN( 1, IARGS( 6 ) - IARGS( 2 ) ) 00441900
MM = IARGS( 4*IR+5 ) + IARGS( 4*IC+6 ) 00442000
NN = IARGS( 4*IR+9 ) + IARGS( 4*IC+10 ) 00442100
IC = IC * NROW 00442200
MMM = IARGS( 3 ) 00442300
NNN = IARGS( 4 ) 00442400
DO 210 J = 1, NNN 00442500
M = MM 00442600
N = NN 00442700
DO 200 I = 1, MMM 00442800
RC( N ) = RC ( M ) 00442900
M = M - IR 00443000
200 N = N - IR 00443100
MM = MM - IC 00443200
210 NN = NN - IC 00443300
GO TO 20 00443400
END 00443500
C 61 124 SUBROUTINE MRAISE 2 19 68 00443600
SUBROUTINE MRAISE 00443700
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00443800
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00443900
DIMENSION ARGS(100) 00444000
EQUIVALENCE( ARGS(1), RC(10001) ) 00444100
C ***** 00444200
C SUBROUTINE TO RAISE A MATRIX TO A POWER 00444300
C GENERAL FORMS OF MRAISE 00444400
C MRAISE A(,) N,N TO M POWER AND STORE IN C(,) 00444500
C MRAISE A(,) N TO M POWER AND STORE IN C(,) 00444600
C M MAY BE INTEGER OR REAL 00444700
C ***** 00444800
COMMON/MULTC/NS2 00444900
COMMON / SCRAT / X,NS 00445000
DIMENSION A(10000) 00445100
DOUBLE PRECISION X(5000), SUM 00445200
DIMENSION IR(4),ISAVE(2) 00445300
EQUIVALENCE (IR,ISAVE) 00445400
NS2=NS/2 00445500
C ***** 00445600
C CHECK NUMBER OF ARGUMENTS 00445700
C ***** 00445800
IF(NARGS.NE.7.AND.NARGS.NE.6) CALL ERROR(10) 00445900
C ***** 00446000
C CHECK TO SEE IF ALL ARGUMENTS ARE INTEGER 00446100
C ***** 00446200
J=NARGS 00446300
CALL CKIND(J) 00446400
IF(J.EQ.0) GO TO 800 00446500
IF(KIND (NARGS-2).NE.0) GO TO 620 00446600
CALL ERROR (3) 00446700
GO TO 800 00446800
620 IARGS(NARGS-2)=ARGS(NARGS-2) 00446900
C ***** 00447000
C CHECK TO SEE IF DIMENSIONS ARE CORRECT 00447100
C ***** 00447200
800 IF(NARGS.EQ.6) GO TO 1100 00447300
IF(IARGS(3).NE.IARGS(4)) CALL ERROR(3) 00447400
C ***** 00447500
C CHECK TO SEE IF ARGUMENTS ARE OUT OF RANGE 00447600
C ***** 00447700
1100 IR(3)=IARGS(3) 00447800
IR(4)=IARGS(4) 00447900
IR(1)=IARGS(1) 00448000
IR(2)=IARGS(2) 00448100
CALL MACHK(IR,J) 00448200
IF(J.NE.0) CALL ERROR(17) 00448300
IR(1)=IARGS(NARGS-1) 00448400
IR(2)=IARGS(NARGS) 00448500
CALL MACHK(IR,J) 00448600
IF(J.NE.0) CALL ERROR(17) 00448700
C ***** 00448800
C CHECK TO SEE IF PREVIOUS ERRORS 00448900
C ***** 00449000
IF(NERROR.NE.0) RETURN 00449100
C ***** 00449200
C FIND ADDRESSES OF COLUMNS 00449300
C ***** 00449400
NP=NARGS 00449500
ISAVE(1)=IARGS(1) 00449600
IARGS(1)=IARGS(2) 00449700
IARGS(2)=IARGS(NARGS) 00449800
NARGS=2 00449900
CALL CHKCOL(J) 00450000
IARGS(1)=IARGS(1)+ISAVE(1)-1 00450100
IARGS(2)=IARGS(2)+IARGS(NP-1)-1 00450200
ISIZE=IARGS(3) 00450300
C ***** 00450400
C BEGIN MULTIPLICATION 00450500
C ***** 00450600
C ***** 00450700
C MOVE ORIGINAL MATRIX TO SCRATCH AREA (COLUMNWISE) 00450800
C ***** 00450900
IP=IARGS(1) 00451000
IC=1 00451100
DO 4040 J=1,ISIZE 00451200
DO 4020 I=1,ISIZE 00451300
A(IC)=RC(IP) 00451400
IC=IC+1 00451500
IP=IP+1 00451600
4020 CONTINUE 00451700
IP=IP+NROW-ISIZE 00451800
4040 CONTINUE 00451900
NPOW=IARGS(NP-2)-1 00452000
IXP=NS-ISIZE*2 00452100
DO 5040 K=1,NPOW 00452200
ISAVP=IARGS(2) 00452300
IMP=NS2 00452400
IF(K.GT.1) GO TO 4060 00452500
IRP=IARGS(1) 00452600
GO TO 4070 00452700
4060 IRP=IARGS(2) 00452800
4070 DO 5040 I=1,ISIZE 00452900
ISAV =ISAVP 00453000
IC=1 00453100
IZ=IRP 00453200
IX=IXP 00453300
C ***** 00453400
C SAVE ROW OF MATRIX 00453500
C ***** 00453600
DO 4080 J=1,ISIZE 00453700
A(IX)=RC(IZ) 00453800
IX=IX-1 00453900
IZ=IZ+NROW 00454000
4080 CONTINUE 00454100
DO 5020 J=1,ISIZE 00454200
IX=IXP 00454300
IM=IMP 00454400
DO 5000 JP=1,ISIZE 00454500
X(IM)=A(IX)*A(IC) 00454600
IM=IM-1 00454700
IX=IX-1 00454800
IC=IC+1 00454900
5000 CONTINUE 00455000
CALL SORTSM(ISIZE,SUM) 00455100
RC(ISAV )=SUM 00455200
ISAV =ISAV +NROW 00455300
5020 CONTINUE 00455400
ISAVP=ISAVP+1 00455500
IRP=IRP+1 00455600
5040 CONTINUE 00455700
RETURN 00455800
END 00455900
C 62 96 SUBROUTINE MSCROW 2 19 68 00456000
SUBROUTINE MSCROW 00456100
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00456200
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00456300
DIMENSION ARGS(100) 00456400
EQUIVALENCE( ARGS(1), RC(10001) ) 00456500
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00456600
C SUBROUTINE BY CARLA MESSINA 221.04 JUNE 1967 00456700
C TYPE 1 IS PARSUM OF COL ++ , STORE IN COL ++ 00456800
C TYPE 2 IS PARPRODUCT OF COL ++, STORE IN COL ++ 00456900
C TYPE 3 IS ROOT MEAN SQUARE RMS OF COL ++, STORE IN COL ++ 00457000
C TYPE 4 IS AVERAGE OF COL ++, STORE IN COL ++ (DOWN TO NRMA00457100
C TYPE 5 IS SUM COL ++, STORE IN COL ++ (DOWN TO NRMAX) 00457200
C SUM COL ++ FROM ROW ,, TO ROW ,, STORE IN COL ++ 00457300
C SUM COL ++ FROM ROWS NUMBERED ,, ,, ,, ,, ETC STORE 00457400
C THE THREE TYPES OF SUM ARE IDENTIFIED BY THE NO. OF NARGS =2,3 AND 4 O00457500
ELEM = 0.0 00457600
IF (NARGS - 2) 10,40,40 00457700
10 K = 10 00457800
20 CALL ERROR(K) 00457900
30 RETURN 00458000
40 CALL ADRESS( 1, J1 ) 00458100
IF (J1) 50,50,60 00458200
50 K = 3 00458300
GO TO 20 00458400
60 CALL ADRESS( NARGS, J2 ) 00458500
IF (J2) 50,50,70 00458600
70 IF (NARGS - 3) 200,80,80 00458700
80 IF (L2-5) 10,85,10 00458800
85 NARG1 = NARGS -1 00458900
DO 100 I=2,NARG1 00459000
IF (KIND(I) .NE. 0) GO TO 120 00459100
IF (IARGS(I)) 120,120,90 00459200
90 IF (IARGS(I)-NROW) 100,100,120 00459300
100 CONTINUE 00459400
IF (NERROR .NE. 0) GO TO 30 00459500
IF( NARGS - 4 ) 110, 110, 170 00459600
C 00459700
C SUM FROM ROW ,, TO ROW ,, 00459800
C 00459900
110 IF (IARGS(2) - IARGS(3)) 130,130,120 00460000
120 K = 16 00460100
GO TO 20 00460200
130 IF (NRMAX) 140,140,150 00460300
140 K = 9 00460400
GO TO 20 00460500
150 J = J1 + IARGS( 2 ) 00460600
ELEM = ELEM + RC( J - 1 ) 00460700
IARGS(2) = IARGS(2) + 1 00460800
IF (IARGS(2) - IARGS(3)) 150,150,160 00460900
160 CALL VECTOR (ELEM,J2) 00461000
GO TO 30 00461100
170 IF (NRMAX) 140,140,180 00461200
C 00461300
C SUM DISCRETE ROWS 00461400
C 00461500
180 DO 190 I = 2, NARG1 00461600
J = J1 + IARGS( I ) 00461700
190 ELEM = ELEM + RC( J - 1 ) 00461800
GO TO 160 00461900
200 IF (NERROR .NE. 0) GO TO 30 00462000
IF (NRMAX) 140,140,210 00462100
210 FNRMAX = NRMAX 00462200
C 00462300
C PARSUM, PARPRODUCT 00462400
C 00462500
IF( L2 - 3 ) 220, 280, 300 00462600
220 J = L2 - 1 00462700
RC( J2 ) = RC( J1 ) 00462800
IF( NRMAX .EQ. 1 ) GO TO 30 00462900
DO 240 I = 2, NRMAX 00463000
J1 = J1 + 1 00463100
J2 = J2 + 1 00463200
IF( J .EQ. 0 ) GO TO 230 00463300
RC( J2 ) = RC( J2 - 1 ) * RC( J1 ) 00463400
GO TO 240 00463500
230 RC( J2 ) = RC( J2 - 1 ) + RC( J1 ) 00463600
240 CONTINUE 00463700
GO TO 30 00463800
C 00463900
C RMS 00464000
C 00464100
280 DO 290 I = 1,NRMAX 00464200
J = J1 + I 00464300
290 ELEM = ELEM + RC( J - 1 ) ** 2 00464400
ELEM = FSQRT(ELEM/FNRMAX) 00464500
GO TO 160 00464600
C 00464700
C AVERAGE, SUM ENTIRE ROW 00464800
C 00464900
300 DO 310 I = 1,NRMAX 00465000
J = J1 + I 00465100
310 ELEM = ELEM + RC( J - 1 ) 00465200
IF (L2 - 5) 320,160,160 00465300
320 ELEM = ELEM/FNRMAX 00465400
GO TO 160 00465500
END 00465600
C 63 116 SUBROUTINE MXTX 2 19 68 00465700
SUBROUTINE MXTX 00465800
C ***** 00465900
C SUBROUTINE TO MULTIPLY MATRIX A BY ITS TRANSPOSE 00466000
C OR TRANSPOSE OF MATRIX A BY MATRIX A 00466100
C L2=1 MULTIPLY MATRIX BY ITS TRANSPOSE 00466200
C GENERAL FORM OF COMMAND 00466300
C M(XXT) A(,) N,K, STORE IN C(,) N,K DEFINE X 00466400
C M(XXT) A(,) N STORE IN C(,) 00466500
C L2=2 MULTIPLY TRANSPOSE OF MATRIX BY ITSELF 00466600
C GENERAL FORM OF COMMAD 00466700
C M(XTX) A(,) N,K STORE IN C(,) N,K DEFINE X 00466800
C M(XTX) A(,)N STORE IN C(,) 00466900
C L2 = 3 IS M(XAX") SET L2 = 1 AND CALL TRANSF 00467000
C ***** 00467100
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00467200
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00467300
COMMON / BLOCKF / NCTOP 00467400
DIMENSION ARGS(100) 00467500
EQUIVALENCE( ARGS(1), RC(10001) ) 00467600
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00467700
COMMON / SCRAT / X,NS 00467800
DIMENSION A(10000) 00467900
DOUBLE PRECISION X(5000), SUM 00468000
DIMENSION IR(4),ISAVE(2) 00468100
EQUIVALENCE (IR,ISAVE) 00468200
COMMON / MULTC / NS2 00468300
C ***** 00468400
C CHECK FOR CORRECT NUMBER OF AGRUMENTS 00468500
C DECIDE WHETHER COMMAND IS M(XAX") OR M(X"AX) 00468600
C L2 = 3 MEANS M(XAX") L2 = 2, NARGS .GT. 6 MEANS M(X"AX) 00468700
C 00468800
IF( L2-2 ) 100, 10, 20 00468900
10 IF( NARGS .LE. 6 ) GO TO 100 00469000
20 L2 = 4 - L2 00469100
CALL TRANSF 00469200
RETURN 00469300
100 IF(NARGS .NE. 5 .AND. NARGS .NE. 6 ) CALL ERROR(10) 00469400
C ***** 00469500
C CHECK TO SEE IF ALL ARGUMENTS ARE INTEGERS 00469600
C ***** 00469700
J=NARGS 00469800
CALL CKIND(J) 00469900
IF(J.NE.0) CALL ERROR(3) 00470000
C ***** 00470100
C CHECK TO SEE IF DIMENSIONS ARE OUT OF RANGE 00470200
C COMPUTE ADDRESSES 00470300
C ***** 00470400
IF( NARGS.EQ. 6 ) GO TO 120 00470500
IARGS(6) = IARGS(NARGS) 00470600
IARGS(5) = IARGS(NARGS-1) 00470700
IARGS(4) = IARGS(3) 00470800
120 GO TO (140,160),L2 00470900
140 IARGS(8)=IARGS(3) 00471000
IARGS(7)=IARGS(3) 00471100
GO TO 200 00471200
160 IARGS(8)=IARGS(4) 00471300
IARGS(7)=IARGS(4) 00471400
200 J=2 00471500
CALL MTXCHK(J) 00471600
IF(J-1) 260, 220, 240 00471700
220 CALL ERROR(3) 00471800
RETURN 00471900
240 CALL ERROR(17) 00472000
RETURN 00472100
C ***** 00472200
C CHECK FOR PREVIOUS ERRORS 00472300
C ***** 00472400
260 IF(NERROR .NE. 0) RETURN 00472500
GO TO (300,320),L2 00472600
300 IP=IARGS(3) 00472700
JP=IARGS(4) 00472800
IADD1=NROW 00472900
IADD2=1 00473000
GO TO 340 00473100
320 IP=IARGS(4) 00473200
JP=IARGS(3) 00473300
IADD1=1 00473400
IADD2=NROW 00473500
340 NS2=NS/2 00473600
IC=1 00473700
IBP=IARGS(1) 00473800
DO 440 K=1,IP 00473900
IAP=IARGS(1) 00474000
DO 420 I=1,IP 00474100
IA=IAP 00474200
IB=IBP 00474300
IS=NS2 00474400
DO 400 J=1,JP 00474500
X(IS)=RC(IA)*RC(IB) 00474600
IS=IS-1 00474700
IA=IA+IADD1 00474800
IB=IB+IADD1 00474900
400 CONTINUE 00475000
IAP=IAP+IADD2 00475100
CALL SORTSM(JP,SUM) 00475200
A(IC) = SUM 00475300
IC=IC+1 00475400
420 CONTINUE 00475500
IBP=IBP+IADD2 00475600
440 CONTINUE 00475700
C ***** 00475800
C MOVE FROM SCRATCH AREA TO STORAGE 00475900
C ***** 00476000
IS=1 00476100
IC = IARGS( 5 ) 00476200
DO 520 I=1,IP 00476300
DO 500 J=1,IP 00476400
RC(IC) = A(IS) 00476500
IS=IS+1 00476600
IC=IC+1 00476700
500 CONTINUE 00476800
IC = IC + ( NROW+NCTOP-1 ) - IP 00476900
520 CONTINUE 00477000
RETURN 00477100
END 00477200
C 64 40 SUBROUTINE MTXCHK(J) 2 19 68 00477300
SUBROUTINE MTXCHK(J) 00477400
C S PEAVY FOR OMNITAB 9/5/67 00477500
C J AS INPUT = NO OF MATRICES TO BE CHECKED 00477600
C IARGS(1), IARGS(5),...,IARGS(4*(J-1)+1) STARTING ROW OF MAT 00477700
C IARGS(2), IARGS(6),...,IARGS(4*(J-1)+2) STARTING COLUMN OF MAT 00477800
C IARGS(3), IARGS(7),...,IARGS(4*(J-1)+3) NO. OF ROWS 00477900
C IARGS(4), IARGS(8),...,IARGS(4*(J-1)+4) NO OF COLUMNS 00478000
C 00478100
C UPON RETURN 00478200
C J=0 IF ALL MATRICES ARE IN WORK SHEET 00478300
C AND 00478400
C IARGS(1),IARGS(5),...,IARGS(4*(J-1)+1) WILL CONTAIN STARTING 00478500
C ADDRESS OF MATRIX 00478600
C J GT ZERO IF MATRIX IS NOT IN WORK SHEET 00478700
C J=1 SOME IARGS ARE NEGATIVE, J=2 MATRIX TO BIG FOR WORK SHEET 00478800
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00478900
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00479000
COMMON / SCRAT / A(10000),NS 00479100
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00479200
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00479300
DIMENSION ARGS(100) 00479400
EQUIVALENCE( ARGS(1), RC(10001) ) 00479500
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00479600
JA=J 00479700
JB=4*J 00479800
J = 0 00479900
DO 100 I=1,JB 00480000
IF(IARGS(I).GT.0) GO TO 100 00480100
J=1 00480200
RETURN 00480300
100 CONTINUE 00480400
DO 120 I=1,JB,4 00480500
IF(IARGS(I)+IARGS(I+2)-1.GT.NROW) GO TO 130 00480600
IF(IARGS(I+1)+IARGS(I+3)-1.GT.NCOL) GO TO 130 00480700
CALL ADRESS(I+1,JC) 00480800
120 IARGS(I)=JC+IARGS(I)-1 00480900
RETURN 00481000
130 J=2 00481100
RETURN 00481200
END 00481300
C 65 75 SUBROUTINE NNAME(NAME) 2 19 68 00481400
SUBROUTINE NNAME(NAME) 00481500
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00481600
DIMENSION NAME(2),MISC(6) 00481700
C 00481800
C THIS SUBROUTINE ASSEMBLES A NAME UP TO THE FIRST NON-LETTER OR UP TO 00481900
C SIX LETTER, WHICHEVER IS FIRST. THE INDEX, M, IS INITIALLY POINTING AT00482000
C THE FIRST LETTER, IT IS LEFT POINTING AT THE FIRST NON-LETTER. 00482100
C 00482200
C 00482300
C 00482400
C 00482500
C 00482600
C 00482700
C 00482800
C SPACE OUT SO THAT TABLE LIES ALL ON ONE PAGE 00482900
C 00483000
C 00483100
C 00483200
C 00483300
C 00483400
C 00483500
C 00483600
C 00483700
C 00483800
C 00483900
C 00484000
C 00484100
C CONVERSION TABLE FOR ALPHABETIC TO NUMERIC AS USED BY OMNITAB. 00484200
C 00484300
C A 729 27 1 00484400
C B 1458 54 2 00484500
C C 2187 81 3 00484600
C D 2916 108 4 00484700
C E 3645 135 5 00484800
C F 4374 162 6 00484900
C G 5103 189 7 00485000
C H 5832 216 8 00485100
C I 6561 243 9 00485200
C J 7290 270 10 00485300
C K 8019 297 11 00485400
C L 8748 324 12 00485500
C M 9477 351 13 00485600
C N 10206 378 14 00485700
C O 10935 405 15 00485800
C P 11664 432 16 00485900
C Q 12393 459 17 00486000
C R 13122 486 18 00486100
C S 13851 513 19 00486200
C T 14580 540 20 00486300
C U 15309 567 21 00486400
C V 16038 594 22 00486500
C W 16767 621 23 00486600
C X 17496 648 24 00486700
C Y 18225 675 25 00486800
C Z 18954 702 26 00486900
C 00487000
C 00487100
C THE FIRST THREE CHARACTERS GO INTO THE FIRST WORD OF NAME 00487200
C THE SECOND THREE CHARACTERS GO INTO THE SECOND WORD OF NAME 00487300
C 00487400
C 00487500
DO 10 I=1,6 00487600
10 MISC(I)=0 00487700
DO 20 I=1,6 00487800
L=KARD(M)-9 00487900
IF(L.LT.1.OR.L.GE.27)GO TO 40 00488000
MISC(I)=L 00488100
20 M=M+1 00488200
30 IF(KARD(M).LT.10.OR.KARD(M).GE.36)GO TO 40 00488300
M=M+1 00488400
GO TO 30 00488500
40 NAME(1)=MISC(3)+27*(MISC(2)+27*MISC(1)) 00488600
NAME(2)=MISC(6)+27*(MISC(5)+27*MISC(4)) 00488700
RETURN 00488800
END 00488900
C 66 13 FUNCTION NONBLA(I) 2 19 68 00489000
FUNCTION NONBLA(I) 00489100
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00489200
C 00489300
C SCAN KARD STARTING AT KARD(I) UNTIL A NON-BLANK CHARACTER IS 00489400
C FOUND. POINT M AT IT AND ALSO RETURN IT AS FUNCTION VALUE. 00489500
C 00489600
M=I 00489700
1 IF(KARD(M).NE.44)GO TO 2 00489800
M=M+1 00489900
GO TO 1 00490000
2 NONBLA=KARD(M) 00490100
RETURN 00490200
END 00490300
C 67 38 SUBROUTINE OMCONV( NWCD, KRD, KRDE 2 19 68 00490400
SUBROUTINE OMCONV( NWCD, KRD, KRDEND ) 00490500
COMMON / ABCDEF / L(48) 00490600
C 00490700
C ARRAY L CONTAINS THE ALPHABET FORMATTED 1H 00490800
C 00490900
C THIS ROUTINE CONVERTS INPUT CARD IMAGES TO A STANDARD CODE SO 00491000
C THAT OMNITAB CAN DEAL WITH THE CHARACTERS AS INTEGERS. 00491100
C 00491200
C 00491300
C THIS ROUTINE IS INCLUDED ONLY FOR COMPLETENESS. IT SHOULD BE 00491400
C REWRITTEN IN ASSEMBLY LANGUAGE FOR EACH COMPUTER. ALSO, IT 00491500
C CANNOT MEET ASA STANDARDS BECAUSE ASA DOES NOT REQUIRE THAT DATA 00491600
C READ WITH FORMAT A1 BE STORED THE SAME AS HOLLERITH DATA SETUP 00491700
C WITH 1H ALTHOUGH THEY WILL BE THE SAME ON MOST COMPUTERS. 00491800
C 00491900
C ALSO, ASA DOESNT RECOGNIZE THE CHARACTER " APOSTROPHE WHICH 00492000
C OMNITAB EQUATES TO THE * ASTERISK. 00492100
C THIS LAST ITEM IS NOT IMPORTANT TO THE EXECUTION OF OMNITAB, IT 00492200
C IS ONLY A CONVENIENCE. 00492300
C 00492400
DIMENSION NWCD( 1 ), KRD( 1 ) 00492500
DO 30 I = 1, KRDEND 00492600
IJK = I 00492700
K=NWCD(I) 00492800
IF(K.NE.L(45))GO TO 10 00492900
J=45 00493000
GO TO 30 00493100
10 DO 20 M=1,46 00493200
J=M 00493300
IF(K.EQ.L(J))GO TO 30 00493400
20 CONTINUE 00493500
IF(K.NE.L(47))GO TO 25 00493600
J=41 00493700
30 KRD(I)=J-1 00493800
RETURN 00493900
25 KRD( IJK ) = 46 00494000
RETURN 00494100
END 00494200
C 68 311 SUBROUTINE OMNIT 2 19 68 00494300
SUBROUTINE OMNIT 00494400
C *************** THIS IS THE MAIN OMNITAB ROUTINE *****************00494500
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00494600
COMMON /BLOCKB/NSTMT,NSTMTX,NSTMTH,NCOM,LCOM,IOVFL,COM(2000) 00494700
COMMON /BLOCKC/KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00494800
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00494900
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00495000
DIMENSION ARGS(100) 00495100
EQUIVALENCE( ARGS(1), RC(10001) ) 00495200
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00495300
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00495400
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00495500
DATA IBLANK/1H /,LETSGO/-1/ 00495600
C 00495700
C THIS IS THE MAIN OMNITAB PROGRAM 00495800
C 00495900
C 00496000
C SUBROUTINES CALLED BY THIS PROGRAM.. 00496100
C SETUP,INPUT,ERROR,STMT,NNAME,AARGS,ASTER,SETQ,READQ,STORE,XECUTE 00496200
C AERR,XOMNIT,XFORMT,LOOKUP 00496300
C 00496400
C 00496500
C MOD = 1 INTERPRETIVE MODE 00496600
C = 2 DATA MODE (READ SET) 00496700
C = 3 STORAGE MODE (BETWEEN BEGIN AND FINISH) 00496800
C =4 IMPLIED STORAGE MODE (STATEMENT NUMBER GIVEN) 00496900
C 00497000
C 00497100
C 0 = 0, 1 = 1, ETC., 9 = 9, A = 10, B = 11, ETC, Z= 35, / = 36 00497200
C . = 37, - = 38, + = 39, * = 40, ( = 41, ) = 42, , = 43 00497300
C BLANK = 44, = = 45, $ AND OTHERS = 46 00497400
C 00497500
C-----------------------------------------------------------------------00497600
C 00497700
C THIS IS A CALL TO SYSTEM TO ESTABLISH THE PRINTER PAGE TO BE 00497800
C 62 LINES LONG STARTING ON LINE 3. UNIQUE TO NBS 1108 INSTALLATION.00497900
C 00498000
C CALL PGSIZE( 3, 62 ) 00498100
C 00498200
C-----------------------------------------------------------------------00498300
CALL SETUP 00498400
50 IF(MODE.EQ.3)NSTMT=NSTMT+10 00498500
IF(MODE.EQ.4)MODE=1 00498600
NAME(1)=0 00498700
NAME(2)=0 00498800
NAME(3)=0 00498900
NAME(4)=0 00499000
NARGS=0 00499100
J=0 00499200
C 00499300
C CHECK FOR ACCUMULATED ERRORS DURING LAST EXECUTED COMMAND 00499400
C 00499500
CALL AERR(0) 00499600
52 CALL INPUT 00499700
C 00499800
C SCANNING BEGINS WITH THE THIRD CHARACTER. THE FIRST TWO ARE DUMMY 00499900
C TO KEEP THE PROGRAM OUT OF TROUBLE. SCANNING TERMINATES WITH A $ 00500000
C A $ HAS BEEN PLANTED IN THE (KRDEND+1)-TH POSITION. 00500100
C 00500200
M=2 00500300
55 M=M+1 00500400
K=KARD(M) 00500500
IF(K.GE.36)IF(K-46)55,58,55 00500600
IF(K.GE.10)GO TO 70 00500700
C 00500800
C A NUMBER IS THE FIRST ALPHANUMERIC CHARACTER ENCOUNTERED, ERROR IF00500900
C IN MODE 3 00501000
C 00501100
CALL OUTPUT 00501200
IF(MODE.NE.3)GO TO 60 00501300
57 CALL ERROR(2) 00501400
GO TO 52 00501500
58 IF( MODE .NE. 4 ) CALL OUTPUT 00501600
GO TO 50 00501700
60 CALL STMT(NSTMT) 00501800
IF(KARG.NE.0)IF(MODE-2)57,98,57 00501900
C 00502000
C IF AN ILLEGAL STATEMENT NUMBER WAS FOUND, KARG = 1 (KARG = 0 IF 00502100
C LEGAL) 00502200
C 00502300
MODE=4 00502400
C 00502500
C M IS POINTING AT THE FIRST LETTER ON THE CARD, ASSEMBLE NAME. 00502600
C 00502700
70 CALL NNAME(NAME(1)) 00502800
C 00502900
C 00503000
C CHECK THE FIRST NAME FOR SPECIAL NAMES... 00503100
C OMNITAB, FORMAT, NOTE, FOOTNOTE, HEAD,TITLE 00503200
C 00503300
C OMNITAB 00503400
C 00503500
IF(NAME(1).NE.11300.OR.NAME(2).NE.7102)IF(LETSGO)80,81,81 00503600
C 00503700
C IF NOT THE FIRST OMNITAB CARD, WRITE EOF RECORD. 00503800
C 00503900
IF (LETSGO .NE. -1 ) WRITE( ISCRAT, 75 ) 00504000
75 FORMAT(1HZ,83X) 00504100
LETSGO=LETSGO+1 00504200
80 CALL XOMNIT(LETSGO) 00504300
IF( LETSGO .NE. -1 ) GO TO 50 00504400
LETSGO=0 00504500
C 00504600
C FINISH 00504700
C 00504800
81 IF(NAME(1).NE.4631.OR.NAME(2).NE.7082) GO TO 811 00504900
MODE = 1 00505000
GO TO 58 00505100
C 00505200
C FORMAT 00505300
C 00505400
811 IF( MODE .NE. 4 ) CALL OUTPUT 00505500
IF(NAME(1).NE.4797.OR.NAME(2).NE.9524) GO TO 82 00505600
CALL XFORMT 00505700
812 IF(MODE.GE.3)CALL ERROR(202) 00505800
IF(MODE.NE.3)MODE=1 00505900
GO TO 50 00506000
C 00506100
C NOTE 00506200
C 00506300
82 IF(NAME(1).NE.10631.OR.NAME(2).NE.3645)GO TO 83 00506400
822 WRITE(IPRINT,825)(NEWCD(I-2),I=M,74) 00506500
825 FORMAT(10X,72A1) 00506600
LNCNT=LNCNT+1 00506700
GO TO 812 00506800
C 00506900
C FOOTNOTE 00507000
C 00507100
83 IF(NAME(1).NE.4794.OR.NAME(2).NE.14973)GO TO 84 00507200
IF(LNCNT.GE.61)GO TO 822 00507300
DO 831 LNCNX=LNCNT,61 00507400
831 WRITE(IPRINT,832) 00507500
832 FORMAT(1H ) 00507600
LNCNT=61 00507700
GO TO 822 00507800
C 00507900
C HEAD 00508000
C 00508100
84 IF(NAME(1).NE.5968.OR.NAME(2).NE.2916)GO TO 85 00508200
CALL XHEAD 00508300
GO TO 812 00508400
C 00508500
C TITLES. TITLEX=TITLE5 , TITLEY = TITLE6 00508600
C 00508700
85 IF ( NAME(1) .NE. 14843 ) GO TO 87 00508800
C CHECK NAME TITLE 00508900
IF ( NAME(2) .EQ. 8883 ) GO TO 852 00509000
C CHECK TITLEX AND TITLEY 00509100
K = 5 00509200
IF ( NAME(2) .NE. 8908 ) IF ( NAME(2) - 8907 ) 87,854,87 00509300
K = 6 00509400
GO TO 854 00509500
852 K = KARD( M ) 00509600
IF ( K .GE. 1 .AND. K .LE. 6 ) GO TO 854 00509700
CALL ERROR(209) 00509800
K = 1 00509900
854 MM = MIN0( M+59 , 81 ) 00510000
DO 856 I=1,60 00510100
856 ITLE(I,K) = IBLANK 00510200
I = 1 00510300
DO 858 MX=M,MM 00510400
ITLE(I,K) = NEWCD( MX-1 ) 00510500
858 I = I + 1 00510600
GO TO 812 00510700
C 00510800
C STOP 00510900
C 00511000
87 IF(NAME(1).NE.14406.OR.NAME(2).NE.11664)GO TO 89 00511100
WRITE( ISCRAT, 75 ) 00511200
CALL XSTOP 00511300
STOP 00511400
C 00511500
C M IS POINTING AT THE FIRST NON-LETTER AFTER NAME. LOOK FOR 00511600
C POSSIBLE NAME QUALIFIER OR ARGUMENTS OR END OF CARD. 00511700
C 00511800
89 K=KARD(M) 00511900
IF(K.LT.36)IF(K-10)100,90,90 00512000
IF(K.EQ.40)GO TO 100 00512100
IF(K.EQ.46)GO TO 200 00512200
M=M+1 00512300
GO TO 89 00512400
C 00512500
C A LETTER FOUND, ASSEMBLE SECOND NAME (COMMAND QUALIFIER). 00512600
C 00512700
90 CALL NNAME(NAME(3)) 00512800
C 00512900
C CHECK SPECIAL CASE OF NAMES M(XAX"), M(X"AX), M(XX"), M(X"X) 00513000
C 00513100
C SKIP ONE CHARACTER (") IF FIRST NAME =(M ) 00513200
IF( NAME(1) .EQ. 9477 ) M = M + 1 00513300
GO TO 100 00513400
C 00513500
C SCAN FOR ARGUMENTS AND END OF CARD 00513600
C 00513700
98 M=3 00513800
100 J=J+1 00513900
GO TO 102 00514000
101 M=M+1 00514100
102 K=KARD(M) 00514200
IF(K.GE.10)IF(K-40)101,120,199 00514300
C 00514400
C NUMBER FOUND, CONVERT ARGUMENT. IF KARG RETURNED = 0, NUMBER IS 00514500
C INTEGER,IF KARG = 1, NUMBER IS FLOATING POINT, IF KARG = -1, ERROR00514600
C 00514700
CALL AARGS 00514800
IF(KARG)50,105,103 00514900
103 ARGTAB(J)=0. 00515000
J=J+1 00515100
GO TO 110 00515200
C 00515300
C ARGUMENT IS AN INTEGER. ADD A BIAS OF 8192 THEN CHECK THAT IT IS 00515400
C .GT. 0 00515500
C 00515600
105 ARG=ARG+8192. 00515700
IF(ARG.GT.0.)GO TO 110 00515800
CALL ERROR(18) 00515900
GO TO 50 00516000
110 ARGTAB(J)=ARG 00516100
115 NARGS = NARGS + 1 00516200
GO TO 100 00516300
C 00516400
C ASTERISK FOUND, CONVERT 00516500
C 00516600
C IF BRACKETED BY SINGLE ASTERISKS, QUANTITY IS TO BE USED AS A 00516700
C FLOATING POINT ARGUMENT.IF BRACKETED BY DOUBLE ASTERISKS, QUANTITY00516800
C IS TO BE TRUNCATED AND USED AS AN INTEGER ARGUMENT. 00516900
C 00517000
120 KARG=1 00517100
M=M+1 00517200
IF(KARD(M).NE.40)GO TO 125 00517300
KARG=0 00517400
M=M+1 00517500
125 CALL ASTER 00517600
C 00517700
C THE TERMINAL ASTERISK(S) HAVE BEEN CHECKED TO BE THE SAME AS THE 00517800
C INTITAL SET (IF NO ERROR) AND M IS POINTING AT THE FIRST CHARACTER00517900
C AFTER THE LAST ASTERISK. 00518000
C 00518100
C KARG RETURNED AS 1 = ERROR FOUND 00518200
C 2 = FLOATING POINT CONSTANT, Z.B. *PI* 00518300
C 3 = INTEGER NAMED VARIABLE, Z.B. **NRMAX** 00518400
C 4 = FL. PT. NAMED VARIABLE, Z.B. *NRMAX* 00518500
C 5 = INTEGER ROW-COLUMN, Z.B. **3,40** 00518600
C 6 = FL. PT. ROW-COLUMN, Z.B. *1,2* 00518700
C 7 = STRING OF ASTERISKS Z.B. *** 00518800
C 00518900
C A STRING OF THREE OR MORE ASTERISKS IMPLIES -THRU- 00519000
C EXAMPLE.. 00519100
C ERASE 1 2 3 4 12 13 14 15 16 20 IS EQUIVALENT TO 00519200
C ERASE 1 *** 4, 12 *** 16, 20 00519300
C 00519400
C PRINT 1 20 19 18 17 16 15 14 IS EQUIVALENT TO 00519500
C PRINT 1, 20 *** 14 00519600
C 00519700
C 00519800
GO TO ( 50, 103, 135, 135, 140, 140, 150 ), KARG 00519900
135 ARGTAB(J)=-2.*ARG-FLOAT(KARG-3) 00520000
GO TO 115 00520100
140 ARGTAB(J)=-(ARG+8208.) 00520200
ARG2=ARG2+8192. 00520300
IF(KARG.EQ.6)ARG2=-ARG2 00520400
J=J+1 00520500
ARGTAB(J)=ARG2 00520600
GO TO 115 00520700
150 IF( J .GT. 0 ) GO TO 155 00520800
CALL ERROR( 211 ) 00520900
GO TO 102 00521000
155 ARGTAB( J ) = -1. 00521100
GO TO 100 00521200
C 00521300
C 00521400
C ARGTAB SETUP 00521500
C 00521600
C IF ENTRY .GT. 0, IT IS AN INTEGER CONSTANT (Z.B. COLUMN NUMBER) 00521700
C TO WHICH A BIAS OF 8192 HAS BEEN ADDED. THIS IS TO SAY THAT A 00521800
C NEGATIVE INTEGER ARGUMENT MAY NOT BE EXPLICITLY GIVEN OR MODIFIED 00521900
C TO BE LESS THAT -8191. 00522000
C 00522100
C IF ENTRY .EQ.0, THE NEXT ENTRY IS A FLOATING POINT CONSTANT. 00522200
C 00522300
C IF ENTRY .LT. 0, ARGUMENT IS A VARIABLE. SET SIGN POSITIVE AND.. 00522400
C 00522500
C IF ENTRY .LT. 16, IT IS A NAMED VARIABLE REFERENCE NUMBER 00522600
C 00522700
C 2,3 NRMAX 6,7 V 10,11 X 00522800
C IF 4,5 COLTOP 8,9 W 12,13 Y 00522900
C 14,15 Z 00523000
C 00523100
C 00523200
C V,W,X,Y,Z, ARE FOR PROGRAMMING CONVENIENCE ONLY AND DO NOT00523300
C AFFECT THE OPERATION OF OMNITAB 00523400
C 00523500
C IF ENTRY IS EVEN, CURRENT VALUE TO BE TRUNCATED AND USED 00523600
C AS AN INTEGER ARGUMENT. 00523700
C IF ENTRY IS ODD. THE CURRENT VALUE IS TO BE USED AS A 00523800
C FLOATING POINT ARGUMENT. 00523900
C 00524000
C IF ENTRY .GT. 16, IT IS A WORKSHEET REFERENCE (ROW,COLUMN) TO 00524100
C WHICH A BIAS OF 8192. HAS BEEN ADDED. 00524200
C ENTRY - 8208 = ROW NUMBER 00524300
C ABS(NEXT ENTRY) = COLUMN NUMBER TO WHICH A BIAS OF 8192. 00524400
C HAS BEEN ADDED. 00524500
C 00524600
C IF NEXT ENTRY IS NEGATIVE, WORKSHEET CONTENTS ARE TO BE 00524700
C USED AS A FLOATING POINT CONSTANT. IF +, WORKSHEET VALUE 00524800
C TO BE TRUNCATED AND USED AS AN INTEGER ARGUMENT. 00524900
C 00525000
C 00525100
199 IF(K.NE.46)GO TO 101 00525200
C 00525300
C END OF CARD FOUND ( $ ENCOUNTERED) 00525400
C 69 32C 2 19 68 00525500
C 00525600
200 IF(J.EQ.0)J=1 00525700
IF(MODE.NE.2.OR.NAME(1).NE.0)GO TO 210 00525800
C 00525900
C IN INPUT MODE AND NO POSSIBLE NAME, RETURN TO SET OR READ ROUTINE 00526000
C 00526100
202 CALL EXPAND( J, ARGTAB ) 00526200
IF( ISRFLG .EQ. 0 ) GO TO 204 00526300
CALL SETQ 00526400
GO TO 50 00526500
204 CALL READQ 00526600
GO TO 50 00526700
C 00526800
C LOOK UP NAME (AND POSSIBLE QUALIFIER) IN DICTIONARY. RETURN 00526900
C COORDINATES OF ENTRY. IF L1 = 0, NAME NOT FOUND 00527000
C 00527100
210 CALL LOOKUP 00527200
IF(L1.NE.0)GO TO 220 00527300
IF(MODE.EQ.2)GO TO 202 00527400
CALL ERROR(1) 00527500
GO TO 50 00527600
C 00527700
C NAME FOUND 00527800
C 00527900
220 IF(MODE.EQ.2)MODE=1 00528000
IF(MODE.EQ.1)GO TO 222 00528100
CALL STORE(J) 00528200
GO TO 50 00528300
222 CALL EXPAND( J, ARGTAB ) 00528400
CALL XECUTE 00528500
GO TO 50 00528600
END 00528700
C 70 477 SUBROUTINE ORTHO 2 19 68 00528800
SUBROUTINE ORTHO 00528900
C 00529000
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00529100
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00529200
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00529300
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00529400
DIMENSION ARGS(100) 00529500
EQUIVALENCE( ARGS(1), RC(10001) ) 00529600
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00529700
COMMON / SCRAT / SCRA(10000),NS 00529800
C ******* ******* ******* 00529900
C ORTHONORMALIZATION PROGRAM BY PHILIP J. WALSH JULY 1, 1967 00530000
C LEAST SQUARES PROGRAM USING GRAM SCHMIDT PROCESS 00530100
C 00530200
C POLYFIT Y IN ++, WEIGHTS IN ++, X IN ++, DEGREE ++, STORE COEF.IN00530300
C ++ AND DEVIATIONS IN ++ 00530400
C 00530500
C FIT Y IN ++, WEIGHTS IN ++, X IN ++, X IN ++, ..., STORE COEF. IN 00530600
C ++ AND DEVIATIONS IN ++ 00530700
C 00530800
C SOLVE B IN ++, USING COEF. MATRIX IN ++, ++, ..., ++, STORE COEF IN00530900
C ++ AND DEVIATIONS IN ++ 00531000
C 00531100
C 00531200
C 00531300
C 00531400
IX1 (I,J,IN) = IN + I * (I-1)/2 + J 00531500
IX2 (I,J,IP) = IP + I * (I-1)/2 + J 00531600
C PRECHECKING SECTION 00531700
IF(NARGS .GT. 0 ) GO TO 10000 00531800
K = 10 00531900
GO TO 10001 00532000
10000 NRBAR = 1 00532100
N = NRMAX 00532200
FN = N 00532300
C GET Y COLUMN (OR B COLUMN IF SOLVE) 00532400
CALL ADRESS( 1,L11) 00532500
IF ( L11 ) 9000, 9000, 9010 00532600
9000 K = 11 00532700
10001 CALL ERROR( K ) 00532800
RETURN 00532900
9010 CALL ADRESS(NARGS,L66) 00533000
CALL ADRESS(NARGS-1,L55) 00533100
IF (L66) 9000,9000, 8000 00533200
8000 IF (L55) 9000,9000, 8010 00533300
8010 L66 = L66 - 1 00533400
L55 = L55 -1 00533500
GO TO ( 9020, 9020, 9020, 9020, 9030, 9030) , L2 00533600
C GET WEIGHTS (IF NOT SOLVE ) 00533700
9020 CALL ADRESS( 2, L22) 00533800
IF ( L22) 9000, 9000, 9040 00533900
9040 NMUI = 2 00534000
L22 = L22 - 1 00534100
SU = 0. 00534200
DO 9100 I = 1, NRMAX 00534300
IF (RC( I + L22 ) ) 9110,9100, 9110 00534400
9110 SU = SU + 1.0 00534500
9100 CONTINUE 00534600
GO TO (9050,9050,9060,9060), L2 00534700
C THIS IS POLYFIT 00534800
9050 IF( NARGS .NE. 6) GO TO 9000 00534900
M = IARGS(4) + 1 00535000
GO TO 9120 00535100
C THIS IS FIT 00535200
9060 M = NARGS - 4 00535300
IF (NARGS - 5) 9000, 9120, 9120 00535400
C THIS IS SOLVE 00535500
9030 M = NARGS - 3 00535600
DENOM = 1.0 00535700
NMUI = 1 00535800
IF ( NARGS - 4) 9000, 9070, 9070 00535900
C Y IN L11 W IN L22 AND WEIGHT SWITCH SET AT THIS POINT 00536000
C 00536100
C CALCULATE SCRATCH AREA REQUIREMENTS ... 00536200
9120 FM = M 00536300
IF (FN - SU ) 9000, 9140, 9150 00536400
9150 IF (SU - FM ) 9000, 9160, 9140 00536500
9140 DENOM = FSQRT( SU - FM ) 00536600
GO TO 9070 00536700
9160 DENOM = 1.0 00536800
9070 NPM = N + M 00536900
M1 = M - 1 00537000
M2 = M + 1 00537100
N1 = N - 1 00537200
N2 = N + 1 00537300
MD1 = ( M * (M2)) / 2 00537400
C 00537500
C 00537600
ND1 = M2 * NPM 00537700
C 00537800
C X REQUIRES ND1 CELLS 00537900
C GET SCRA (ND1 + 1) FOR START OF PK 00538000
ND2 = M*NPM 00538100
MD3 = ND2 + N 00538200
ND3 = ND1 00538300
C ADD NPM TO REACH XP 00538400
ND4 = ND3 + NPM 00538500
C ADD NPM TO REACH QK 00538600
ND5 = ND4 + NPM 00538700
C ADD (M+1) TO REACH CV 00538800
ND6 = ND5 + M2 00538900
C ADD (M*(M+1))/2 + M TO REACH VCV 00539000
ND66 = MD1 + M 00539100
ND7 = ND6 + ND66 00539200
C ADD THE SAME AMOUNT TO REACH Q 00539300
ND8 = ND7 + ND66 00539400
C Q IS (M+1) CELLS LONG THEN COMES Q2 00539500
ND9 = ND8 + M2 00539600
C Q2 E AND EP ARE EACH M CELLS LONG 00539700
ND10 = ND9 + M 00539800
ND11 = ND10 + M 00539900
ND12 = ND11 + M 00540000
C THE A MATRIX IS NEXT 00540100
ND13 = ND12 + MD1 00540200
C GRAM FACTOR STORAGE 00540300
ND14 = ND13 + M2 00540400
C ENF 00540500
C CV DIAGONALS 00540600
ND16 = ND14 + M 00540700
C VCV DIAGONALS 00540800
ND17 = ND16 + M 00540900
ND18 = ND17 + M 00541000
IF( ND18 - 10000 ) 9090,9090,9000 00541100
C 00541200
9090 IF( NERROR .NE. 0 ) RETURN 00541300
GO TO ( 1, 1, 2, 2, 3, 3 ), L2 00541400
C THIS IS POLYFIT 00541500
1 CALL ADRESS(3,L33) 00541600
IF (L33) 9000, 9000, 11 00541700
11 L33 = L33 - 1 00541800
DO 21 I = 1, N 00541900
K = I + NPM 00542000
SCRA( I) = 1.0 00542100
21 SCRA(K) = RC(I + L33) 00542200
IF ( M .EQ. 2 ) GO TO 100 00542300
DO 41 K = 2, M1 00542400
K2 = K* NPM 00542500
K1 = K2 - NPM 00542600
DO 31 I = 1, N 00542700
I2 = I + K2 00542800
I1 = I + K1 00542900
31 SCRA(I2) = SCRA(I1) * RC(I + L33) 00543000
41 CONTINUE 00543100
GO TO 100 00543200
2 I = 3 00543300
GO TO 14 00543400
3 I = 2 00543500
14 L44 = NARGS - 2 00543600
J = 0 00543700
DO 44 I1 = I,L44 00543800
K1 = J * NPM 00543900
CALL ADRESS(I1, L33) 00544000
IF (L33) 9000, 9000, 24 00544100
24 L33 = L33 - 1 00544200
DO 54 I2 = 1, N 00544300
K2 = K1 + I2 00544400
54 SCRA(K2) = RC(I2 + L33) 00544500
44 J = J + 1 00544600
C GENERATE IDENTITY MATRIX AUGMENTATION 00544700
100 DO 120 K = 1, M 00544800
K1 = (K - 1) * NPM + N 00544900
DO 110 I = 1, M 00545000
K2 = K1 + I 00545100
110 SCRA( K2) = 0.0 00545200
K2 = K1 + K 00545300
120 SCRA(K2) = 1.0 00545400
C BEGIN THE G.S. PROCESS 00545500
200 NBEI = 1 00545600
NRHI = 1 00545700
I18 = 1 00545800
210 NGAI = 2 00545900
NSII = 2 00546000
230 NDEI = 1 00546100
NNUI = 1 00546200
LZ1 = 1 00546300
LZ2 = 1 00546400
C K CONTROLS WHOLE LOOP 00546500
K = 1 00546600
240 NTHI = 1 00546700
250 NALI = 1 00546800
NOMI = 1 00546900
260 DO 270 J = 1, M 00547000
NJ = ND3 + N + J 00547100
270 SCRA (NJ) = 0.0 00547200
C**** BOX 6. 00547300
390 KD1 =(K-1)* NPM 00547400
DO 300 I = 1, N 00547500
I1 = ND3 + I 00547600
I2 = KD1 + I 00547700
GO TO ( 280, 290), NMUI 00547800
C**** PK(I) 00547900
280 SCRA( I1) = SCRA (I2) 00548000
GO TO 300 00548100
290 SCRA (I1) = SCRA (I2) * RC ( I + L22) 00548200
300 CONTINUE 00548300
310 GO TO ( 320, 330), NOMI 00548400
320 DO 340 I = 1, K 00548500
I1 = (I-1)*NPM 00548600
SUM = 0.0 00548700
DO 350 J = 1, NPM 00548800
I2 = I1 + J 00548900
J2 = J + ND3 00549000
350 SUM = SUM + SCRA(J2) * SCRA(I2) 00549100
I2 = I + ND5 00549200
C**** QK(I) 00549300
340 SCRA(I2) = SUM 00549400
GO TO 360 00549500
330 DK2 = 0. 00549600
I1 =(K-1) * NPM 00549700
DO 370 I = 1, NPM 00549800
370 DK2 = DK2 + SCRA ( I + ND3) * SCRA (I + I1) 00549900
DK = FSQRT( DK2 ) 00550000
C**** GRAM FACTORS 00550100
SCRA ( I18 + ND13) = DK 00550200
I18 = I18 + 1 00550300
K1 = (K-1)* NPM 00550400
DO 380 I = 1, NPM 00550500
380 SCRA (I + K1) = SCRA (I + K1) / DK 00550600
NOMI = 1 00550700
GO TO 390 00550800
C**** BOX8 00550900
360 GO TO ( 400, 410), NDEI 00551000
400 LZ1 = -LZ1 00551100
IF (LZ1) 420, 430, 430 00551200
C**** BOX8A 00551300
430 K1 = K- 1 00551400
DO 440 I = 1, K1 00551500
440 SCRA (I+ND5) = - SCRA(I +ND5) 00551600
SCRA (K+ND5) = 1.0 00551700
DO 450 I = 1, NPM 00551800
SUM = 0.0 00551900
DO 460 J = 1, K 00552000
J1 = (J-1)* NPM 00552100
460 SUM = SUM + SCRA (I +J1) * SCRA (J+ND5 ) 00552200
C**** XP(I) 00552300
450 SCRA (I + ND4 ) = SUM 00552400
GO TO 470 00552500
C**** BOX8B GET QK(I18) 00552600
420 SCRA(ND14+I18)=FSQRT(SCRA(ND5+K)) 00552700
GO TO 430 00552800
C**** NDE1 00552900
410 LZ2 = -LZ2 00553000
IF (LZ2) 480, 430, 430 00553100
C**** GET E AMD OTHER VECTORS 00553200
480 DO 490 I = 1, M 00553300
SCRA (I + ND8) = SCRA( I + ND5) 00553400
490 SCRA (I + ND9) = SCRA( I + ND5) * SCRA (I + ND5) 00553500
SCRA ( ND8 + M2) = SCRA (ND5 + M2) 00553600
SCRA ( ND10 + 1) = SCRA ( ND8 +M2) - SCRA(ND9 + 1) 00553700
DO 500 J = 2, M 00553800
J1 = J - 1 00553900
500 SCRA (ND10 + J) = SCRA (ND10 + J1) - SCRA( ND9 + J) 00554000
FI = 1.0 00554100
DO 510 I = 1, M 00554200
IF (FN - FI) 520,520, 530 00554300
530 IF ( SCRA ( ND10 +I)) 540,550,550 00554400
540 SCRA (ND11 + I) = - SQRT ( ABS ( SCRA ( I+ND10))/(FN-FI)) 00554500
GO TO 510 00554600
550 SCRA(I + ND11) = SQRT(SCRA(I + ND10)/(FN-FI)) 00554700
GO TO 510 00554800
520 SCRA (I+ND10) = -1.0 00554900
510 FI = FI + 1.0 00555000
GO TO 430 00555100
C**** BOX9 00555200
470 GO TO (610,620,630), NTHI 00555300
610 K1 = (K-1)* NPM 00555400
DO 640 I= 1, NPM 00555500
640 SCRA ( I + K1) = SCRA (I + ND4) 00555600
GO TO 800 00555700
620 DO 650 I = 1, N 00555800
650 RC( I + L66) = SCRA ( I + ND4) 00555900
DO 660 I = 1, M 00556000
NI = N+I 00556100
KK1= I+1 00556200
660 RC(L55+KK1) = - SCRA( NI + ND4) 00556300
NTHI = 3 00556400
GO TO 610 00556500
630 GO TO 900 00556600
C**** BOX10 00556700
800 GO TO (810, 830), NALI 00556800
810 NOMI = 2 00556900
NALI = 2 00557000
GO TO 390 00557100
830 IF (K - M) 820, 1000, 1000 00557200
820 K= K+1 00557300
GO TO 240 00557400
900 GO TO (910,920), NNUI 00557500
910 NNUI = 2 00557600
GO TO 1200 00557700
920 SS = DK / DENOM 00557800
SSQ = SS*SS 00557900
930 RC ( L55 +1) = SS 00558000
GO TO 1200 00558100
1000 GO TO (1010,1020), NBEI 00558200
C** ****** ***** ****** ***** ****** ***** 00558300
C GET THE A MATRIX 00558400
1010 K1 = 1 00558500
DO 1060 I = 1, M 00558600
I1 = I*N + (I-1)*M 00558700
DO 1070 J = 1, I 00558800
I2 = J + I1 00558900
K2 = K1 + ND12 00559000
SCRA(K2) = SCRA (I2) 00559100
1070 K1 = K1+ 1 00559200
1060 CONTINUE 00559300
GMDT = 1.0 00559400
DO 1080 I = 1, M 00559500
1080 GMDT = GMDT *(SCRA (I + ND13)/ SCRA(I +ND14) ) 00559600
GMDT = GMDT * GMDT 00559700
C 00559800
NDEI = 2 00559900
NBEI = 2 00560000
NTHI = 2 00560100
K = K + 1 00560200
GO TO 1030 00560300
1020 GO TO 900 00560400
1030 GO TO (1040,1050),NGAI 00560500
1040 GO TO 900 00560600
C GET CV MATRIC 00560700
1050 CONTINUE 00560800
DO 111 IH = 1, M 00560900
LOC = IX2 (IH,0, ND6) 00561000
DO 111 J = 1, IH 00561100
SUM = 0. 00561200
DO 112 KK = IH, M 00561300
LOC1 = IX1( KK, IH, ND12) 00561400
LOC2 = IX1( KK, J, ND12) 00561500
112 SUM = SUM + SCRA (LOC1)* SCRA(LOC2) 00561600
111 SCRA ( LOC + J) = SUM 00561700
J = 1 00561800
SCRA(J+ND16)=FSQRT(SCRA(J+ND6)) 00561900
DO 2050 I = 2, M 00562000
J1 = I + J + ND6 00562100
C** THE ARGUMENT IN THE FOLLOWING SQRT OCCASIONALLY IS NEGATIV00562200
SCRA(I+ND16)=FSQRT(SCRA(J1)) 00562300
2050 J = J + I 00562400
NGAI = 1 00562500
GO TO 900 00562600
1200 GO TO (1210,1220),NRHI 00562700
1210 IF(NRBAR) 1230,1500,1230 00562800
1230 NRBAR = NRBAR - 1 00562900
NTHI = 2 00563000
NRHI = 2 00563100
L11 = L11 - 1 00563200
DO 1240 I = 1,N 00563300
I1 = I + ND2 00563400
1240 SCRA(I1) = RC(I+L11) 00563500
DO 1250 I = 1, M 00563600
I1 = I + MD3 00563700
1250 SCRA(I1) = 0. 00563800
GO TO 250 00563900
1220 GO TO (1410,1420), NSII 00564000
1410 GO TO 1210 00564100
C GET VCV AND DEV AND COEF 00564200
1420 DO 1421 I = 1,MD1 00564300
1421 SCRA(I + ND7) = SSQ* SCRA(I + ND6) 00564400
DO 2070 I = 1,M 00564500
J1 = I + L55 + M2 00564600
SCRA(I+ND17)= SS*SCRA(I+ND16) 00564700
2070 RC(J1) = SCRA(I+ND17) 00564800
GO TO 1210 00564900
C THE CALCULATIONS ARE COMPLETED. NOW OUTPUT THE RESULTS 00565000
1500 GO TO ( 2000, 5000, 2000, 5000, 2000, 5000), L2 00565100
5000 RETURN 00565200
2000 CALL PAGE (4) 00565300
C GET POLYFIT INFORMATION 00565400
IF ( L2 - 3 ) 2010,2020,2100 00565500
C THIS IS POLYFIT 00565600
2010 WRITE(IPRINT,2001) IARGS(4),IARGS(1),IARGS(3) 00565700
KL1 = IARGS( 4 ) + 1 00565800
DO 2700 I=1,KL1 00565900
2700 IARGS(I+2) = I-1 00566000
GO TO 2030 00566100
C THIS IS FIT 00566200
2020 J=NARGS-2 00566300
WRITE(IPRINT,2021) (IARGS(I),I=1,J) 00566400
2030 I = SU 00566500
WRITE(IPRINT,2031) I,IARGS(2) 00566600
IF ( L2 .NE. 3 ) GO TO 2701 00566700
WRITE(IPRINT,2032) 00566800
GO TO 2702 00566900
2701 WRITE(IPRINT,2732) 00567000
2702 L55 = L55+1 00567100
DO 2038 I = 1,M 00567200
J = I + M + L55 00567300
WRITE(IPRINT,2235) IARGS(I+2),RC(I+L55),RC(J) 00567400
2038 CONTINUE 00567500
WRITE(IPRINT,2033) SS 00567600
WRITE(IPRINT,2034) 00567700
DO2040 I = 1, M 00567800
LOC = IX2(I,0,ND6) 00567900
2040 WRITE(IPRINT,2035) (SCRA(J+LOC),J=1,I) 00568000
WRITE(IPRINT,2036) 00568100
WRITE(IPRINT,2035) (SCRA(I+ND16),I=1,M) 00568200
C REPEAT THIS FOR VARIANCE COVARIANCE MATRIX 00568300
WRITE(IPRINT,2037) 00568400
DO 2060 I = 1, M 00568500
LOC = IX2(I,0,ND7) 00568600
2060 WRITE(IPRINT,2035) (SCRA(J+LOC),J=1,I) 00568700
WRITE(IPRINT,2071) 00568800
WRITE(IPRINT,2035) (SCRA(I+ND17),I=1,M) 00568900
WRITE(IPRINT,2082) 00569000
DO 2083 I = 1,M 00569100
LOC = IX2(I,0,ND12) 00569200
2083 WRITE(IPRINT,2035) (SCRA(J+LOC),J=1,I) 00569300
CALL PAGE (4) 00569400
WRITE(IPRINT,2081) GMDT 00569500
WRITE(IPRINT,2080) 00569600
DO 2090 I = 1, M 00569700
2090 WRITE(IPRINT,2035) SCRA(I+ND13),SCRA(I+ND8),SCRA(I+ND9) 00569800
1 , SCRA (I + ND10), SCRA (I + ND11), SCRA (I + ND14) 00569900
WRITE(IPRINT,2035)SCRA(ND14),SCRA(ND9) 00570000
WRITE(IPRINT,2133) 00570100
IDF=SU 00570200
XSQR=SCRA(ND9)/SU 00570300
JGO = 2 00570400
IF ( L2 .EQ. 1 ) JGO = 1 00570500
WRITE(IPRINT,2134) SCRA(ND9),IDF,XSQR 00570600
DO 2091 I=1,M 00570700
IDF = SU-FLOAT(I) 00570800
XSQR=SCRA(I+ND9) 00570900
XSQE=SCRA(I+ND10)/FLOAT(IDF) 00571000
FCALC=XSQR/XSQE 00571100
JONE=1 00571200
GO TO (2781,2782),JGO 00571300
2782 WRITE(IPRINT,2135) IARGS(I+2),SCRA(I+ND9),JONE,XSQR,FCALC,SCRA(I +00571400
1 ND10),IDF, XSQE,SCRA(I+ND11) 00571500
GO TO 2091 00571600
2781 WRITE(IPRINT,2735) IARGS(I+2),SCRA(I+ND9),JONE,XSQR,FCALC,SCRA(I +00571700
1 ND10),IDF, XSQE,SCRA(I+ND11) 00571800
2091 CONTINUE 00571900
XSQ=SCRA(ND9)-SCRA(ND10+M) 00572000
XSQE=XSQ/FLOAT(M) 00572100
FCALC=XSQE/(SCRA(M+ND10)/(SU-FLOAT(M))) 00572200
WRITE(IPRINT,2136)XSQ,M,XSQE,FCALC 00572300
GO TO 5000 00572400
2100 J = NARGS - 2 00572500
WRITE(IPRINT,2110) (IARGS(I),I=1,J) 00572600
WRITE(IPRINT,2115) 00572700
L55 = L55 + 1 00572800
DO 2120 I = 1,M 00572900
J = I + M + L55 00573000
WRITE(IPRINT,2035) RC(I+L55),RC(J) 00573100
2120 CONTINUE 00573200
GO TO 5000 00573300
2001 FORMAT(25H0POLYNOMIAL FIT OF DEGREE I3,19H TO THE FUNCTION IN I4, 00573400
1 1H.//42H THE INDEPENDENT VARIABLE (X) IS IN COLU00573500
1MN I4,1H.) 00573600
2021 FORMAT(34H0REGRESSION FIT OF THE FUNCTION IN I4,11H,WEIGHTS IN I4,00573700
127H,USING VARIABLES IN COLUMNS// (14I5) ) 00573800
2032 FORMAT(62H0VARIABLE IN COLUMN COEFFICIENT AND ITS STANDARD DEV00573900
1IATION,/) 00574000
2732 FORMAT(62H0TERM OF DEGREE COEFFICIENT AND ITS STANDARD DEV00574100
1IATION,/) 00574200
2031 FORMAT(1H0,I4,34H NON-ZERO WEIGHTS APPEAR IN COLUMN I4,1H.) 00574300
2033 FORMAT(20H0STANDARD DEVIATION 1P1E15.7) 00574400
2035 FORMAT(1P8E15.7) 00574500
2034 FORMAT(54H0THE INVERSE OF THE X"X MATRIX OF THE NORMAL EQUATIONS/)00574600
2036 FORMAT(53H0THE SQUARE ROOT OF THE DIAGONALS OF THE ABOVE MATRIX/) 00574700
2037 FORMAT(50H0THE VARIANCE-COVARIANCE MATRIX OF THE REGRESSION , 00574800
112HCOEFFICIENTS/) 00574900
2071 FORMAT(67H0THE SQUARE ROOT OF THE DIAGONALS IN THE VARIANCE-COVARI00575000
1ANCE MATRIX / ) 00575100
2080 FORMAT( 1H0,5X,2HGF,14X,2HFC,13X,3HSFC,13X,3HSSR,13X,1HR, 00575200
1 13X,2HVN /) 00575300
2081 FORMAT(20H0GRAM DETERMINANT 1P1E15.7) 00575400
2082 FORMAT(20H0THE A(I,J) MATRIX /) 00575500
2110 FORMAT(36H0SOLUTION OBTAINED BY FIT TO COLUMN I3,/30H USING COE00575600
1FFICIENTS IN COLUMNS /(14I5)) 00575700
2115 FORMAT(28H0SOLUTION AND UNCERTAINTIES /) 00575800
2133 FORMAT(//30X,21H ANALYSIS OF VARIANCE,/ 7H0SOURCE,17X,15HSUM OF S00575900
1QUARES , 7H D.F.,6X,11HMEAN SQUARE,10X,1HF,12X,4HS.D.) 00576000
2134 FORMAT( 6H0TOTAL,18X,1PE15.7,I6,4X,1PE15.7 ) 00576100
2135 FORMAT(19H0VARIABLE IN COLUMN,I5,1PE15.7,I6,4X,1PE15.7,0PF11.2,/ 00576200
1 9H RESIDUAL,15X,1PE15.7,I6,4X,1PE15.7,19X,1PE15.7 ) 00576300
2735 FORMAT(19H0TERM OF DEGREE ,I5,1PE15.7,I6,4X,1PE15.7,0PF11.2,/ 00576400
1 9H RESIDUAL,15X,1PE15.7,I6,4X,1PE15.7,19X,1PE15.7 ) 00576500
2136 FORMAT(16H0TOTAL REDUCTION,8X,1PE15.7,I6,4X,1PE15.7,F11.2 ) 00576600
2235 FORMAT(14X,I4,7X,2(1PE15.7) ) 00576700
END 00576800
C 71 22 SUBROUTINE OUTPUT 2 19 68 00576900
SUBROUTINE OUTPUT 00577000
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00577100
COMMON /BLOCKB/NSTMT,NSTMTX,NSTMTH,NCOM,LCOM,IOVFL,COM(2000) 00577200
COMMON /BLOCKC/KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00577300
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00577400
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00577500
DIMENSION ARGS(100) 00577600
EQUIVALENCE( ARGS(1), RC(10001) ) 00577700
COMMON / FLAGS / NSUMRY, LLIST 00577800
C 00577900
C WRITE RECORD ON SCRATCH UNIT 00578000
C 00578100
IF( NERROR .EQ. 0 .AND. LLIST .EQ. 0 ) GO TO 15 00578200
IF( MODE .EQ. 3 ) GO TO 20 00578300
WRITE( ISCRAT, 10 ) NEWCD 00578400
10 FORMAT(4X,80A1) 00578500
15 RETURN 00578600
20 I = NSTMT / 10 00578700
WRITE( ISCRAT, 25 ) I, NEWCD 00578800
25 FORMAT(1H+,I3,80A1) 00578900
GO TO 15 00579000
END 00579100
C 72 18 SUBROUTINE PAGE( J ) 2 19 68 00579200
SUBROUTINE PAGE( J ) 00579300
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00579400
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00579500
C 00579600
C BRING UP A NEW PAGE AND PRINT OMNITAB CARD AND PAGE NUMBER 00579700
C THEN, IF J = 0, DONE 00579800
C J = 1, PRINT TITLE1 00579900
C J = 2, PRINT TITLE1, 2 00580000
C ETC. FOR J = 3, 4 00580100
C 00580200
NPAGE = NPAGE + 1 00580300
WRITE( IPRINT, 100 ) NMCARD, NPAGE 00580400
IF( J .LE. 0 .OR. J .GT. 4 ) GO TO 10 00580500
WRITE( IPRINT, 101 ) ( ( ITLE( I, II ), I = 1, 60 ), II = 1, J ) 00580600
10 RETURN 00580700
100 FORMAT(1H1,19X,72A1,10X,4HPAGE,I4) 00580800
101 FORMAT(1X,120A1/1X,120A1) 00580900
END 00581000
C 73 4 SUBROUTINE PAGEX 2 19 68 00581100
SUBROUTINE PAGEX 00581200
CALL X( "PAGEX" ) 00581300
RETURN 00581400
END 00581500
C 74 93 SUBROUTINE PDMOTE 2 19 68 00581600
SUBROUTINE PDMOTE 00581700
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00581800
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00581900
DIMENSION ARGS(100) 00582000
EQUIVALENCE( ARGS(1), RC(10001) ) 00582100
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00582200
L2 = L2 - 10 00582300
C 00582400
C L2 " 0 FOR PROMOTE, 1 FOR DEMOTE ( L2 ORIGINALLY 10, 11 ) 00582500
C 00582600
IF( MOD( NARGS, 2 ) .NE. 0 ) GO TO 30 00582700
I = 10 00582800
10 CALL ERROR( I ) 00582900
20 RETURN 00583000
30 NR = IARGS( 1 ) 00583100
IARGS( 1 ) = 1 00583200
CALL CHKCOL( I ) 00583300
IF( I .EQ. 0 ) GO TO 40 00583400
I = 20 00583500
GO TO 10 00583600
C 00583700
C IF NUMBER OF ROWS TO BE MOVED IS NEGATIVE, FLIP INSTRUCTIONS. 00583800
C I.E. PROMOTE -6 IS THE SAME AS DEMOTE 6 . 00583900
40 IF( NR ) 50, 20, 60 00584000
50 L2 = 1 - L2 00584100
NR = -NR 00584200
60 NARGS = NARGS - 1 00584300
C 00584400
C CHECK DISTANCE OF MOVE 00584500
C 00584600
IF( L2 .EQ. 0 ) GO TO 80 00584700
IF( NR + NRMAX .LE. NROW ) GO TO 100 00584800
CALL ERROR(213) 00584900
NRMAX = NROW - NR 00585000
GO TO 100 00585100
70 I = 205 00585200
GO TO 10 00585300
80 IF( NR - NRMAX ) 100, 90, 70 00585400
C 00585500
C PROMOTE "NRMAX" ... 00585600
C 00585700
90 IF( NARGS .NE. 0 ) GO TO 20 00585800
IF( NRMAX .EQ. 0 ) GO TO 70 00585900
J = IARGS( 1 ) 00586000
DO 95 I = 1, NCOL 00586100
CALL VECTOR( 0., J ) 00586200
95 J = J + NROW 00586300
GO TO 20 00586400
100 LIMIT = NARGS 00586500
IF( LIMIT .EQ. 0 ) LIMIT = 2 * NCOL 00586600
IF( NERROR .NE. 0 ) GO TO 20 00586700
IF( NRMAX .NE. 0 ) GO TO 110 00586800
GO TO 10 00586900
C 00587000
C START PROMOTING OR DEMOTING 00587100
C 00587200
110 DO 200 I = 1, LIMIT, 2 00587300
IF( NARGS .NE. 0 ) GO TO 120 00587400
K1 = IARGS( 1 ) 00587500
K2 = K1 00587600
IARGS( 1 ) = IARGS( 1 ) + NROW 00587700
GO TO 130 00587800
120 K1 = IARGS (I+1 ) 00587900
K2 = IARGS( I+2 ) 00588000
130 IF( L2 .EQ. 0 ) GO TO 150 00588100
C 00588200
C DEMOTE COL AT K1 TO COL AT K2 00588300
C 00588400
K1 = K1 + NRMAX 00588500
K2 = K2 + NRMAX + NR 00588600
DO 140 J = 1, NRMAX 00588700
K1 = K1 - 1 00588800
K2 = K2 - 1 00588900
140 RC ( K2 ) = RC( K1 ) 00589000
GO TO 200 00589100
C 00589200
C PROMOTE COL AT K1 TO COL AT K2 00589300
C 00589400
150 JJ = NRMAX - NR 00589500
K1 = K1 + NR 00589600
DO 160 J = 1, JJ 00589700
RC( K2 ) = RC( K1 ) 00589800
K1 = K1 + 1 00589900
160 K2 = K2 + 1 00590000
C 00590100
C IF PROMOTE ARRAY, FILL REST OF COLUMN WITH ZEROES. 00590200
C 00590300
IF( NARGS .NE. 0 ) GO TO 200 00590400
JJ = JJ + 1 00590500
DO 170 J = JJ, NRMAX 00590600
RC( K2 ) = 0. 00590700
170 K2 = K2 + 1 00590800
200 CONTINUE 00590900
IF( L2 .NE. 0 ) NRMAX = NRMAX + NR 00591000
GO TO 20 00591100
END 00591200
C 75 47 SUBROUTINE PHYCON(NAME) 2 19 68 00591300
SUBROUTINE PHYCON(NAME) 00591400
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00591500
COMMON / PCONST / P( 40 ), N( 40 ) 00591600
DATA J/-1/ 00591700
C 00591800
C PHYSICAL CONSTANT LIST 00591900
C 00592000
C ENTRIES ARE IN PAIRS, FIRST MKS VALUE, THEN CGS (ELECTROMAGNETIC) 00592100
C 00592200
C 00592300
C PI PI 00592400
C E BASE OF NATURAL LOGS 00592500
C C SPEED OF LIGHT IN VACUUM 00592600
C Q ELEMENTARY CHARGE 00592700
C N AVOGADRO CONSTANT 00592800
C ME ELECTRON REST MASS 00592900
C MP PROTON REST MASS 00593000
C F FARADAY CONSTANT 00593100
C H PLANCK CONSTANT 00593200
C ALPHA FINE STRUCTURE CONSTANT 00593300
C QME CHARGE TO MASS RATIO FOR ELECTRON 00593400
C RINF RYDBERG CONSTANT 00593500
C GAMMA GYROMAGNETIC RATIO OF PROTON (CORRECTED FOR H2O) 00593600
C MUB BOHR MAGNETON 00593700
C R GAS CONSTANT 00593800
C K BOLTZMANN CONSTANT 00593900
C CONE FIRST RADIATION CONSTANT 00594000
C CTWO SECOND RADIATION CONSTANT 00594100
C SIGMA STEPHAN-BOLTZMANN CONSTANT 00594200
C G GRAVITATIONAL CONSTANT 00594300
C 00594400
C 00594500
C IF NAME .LE. 0, NAME = INDEX FROM MKS,CGS 0 = CGS, -1 = MKS 00594600
C 00594700
IF(NAME.GT.0)GO TO 10 00594800
J=NAME 00594900
RETURN 00595000
10 DO 20 IM=1,20 00595100
I = IM 00595200
IF(NAME.EQ.N(I))GO TO 30 00595300
20 CONTINUE 00595400
ARG=0. 00595500
RETURN 00595600
30 I=I+I+J 00595700
ARG=P(I) 00595800
RETURN 00595900
END 00596000
C 76 348 SUBROUTINE PLOT 2 19 68 00596100
SUBROUTINE PLOT 00596200
C**** WRITTEN BY S. PEAVY 11/ 8/67 00596300
C**** WRITTEN BY S. PEAVY 10/26/67 00596400
C**** THIS ROUTINE PLOTS MAX. OF 5 CURVES. IF MORE THEN ONE POINT FALLS 00596500
C**** ON THE SAME POSITION A TALLY IS KEPT AND THE NUMBER IS PRINTED. 00596600
C**** THE USER MAY PROVIDE THE BOUNDS ON THE X,Y COORDINATES. 00596700
C**** IF BOUNDS ARE PROVIDED,THEY MUST APPEAR IN PAIRS AS READ NOS. IF A00596800
C**** PAIR OF REAL NOS ARE EQUAL THE PROGRAM ASSUMES THERE ARE NO BOUNDS00596900
C**** COMMANDS FOR USING THIS PLOT ARE AS FOLLOWS 00597000
C**** FOR THE AXIS THAT PAIR REPRESENTS AND THE BOUNDS WILL BE CALCULAT-00597100
C**** ED. 00597200
C**** COMMANDS FOR USING PLOT ARE AS FOLLOWS 00597300
C**** I PLOT Y +++,+++,... X +++ 00597400
C**** II PLOT Y +++,+++,....,(YMIN,YMAX) X +++ (XMIN,XMAX) 00597500
C**** III PLOT Y +++,+++,....,(YMIN,YMAX) X ++1 00597600
C**** IV PLOT Y +++,+++,.... V +++ (XMIN,XMAX) 00597700
C**** V PLOT Y +++,+++,.... X (XMIN,XMAX) (YMIN,YMAX) 00597800
C**** 00597900
C**** ERRORS 00598000
C**** I WHEN TYPE II COMMAND IS USED THERE MUST BE TWO PAIRS OF REAL 00598100
C**** NOS. OTHERWISE THE FOLLOWING MESSAGE IS PRINTED 00598200
C**** " Y BOUNDS ARE NOT SET UP CORRECTLY" 00598300
C**** I IF BOUNDS ARE PROVIDED, THEN THERE MUST BE FOUR REAL NOS. 00598400
C**** II IF A SINGLE REAL NO. APPEARS AHEAD OF COLUMN NOS., THE FOLLOW-00598500
C**** ING MESSAGE WILL BE PRINTED AND NO PLOTTING WILL TAKE PLACE 00598600
C**** " Y BOUNDS ARE NOT SET UP CORRECTLY" 00598700
C**** III IF A PLOT COMMAND ENDS WITH ONE REAL NO, THE FOLLOWING MESSAGE00598800
C**** WILL BE PRINTED AND PLOTTING WILL BE TERMINATED 00598900
C**** " X BOUNDS ARE NOT SET UP CORRECTLY" 00599000
C**** IV IF MORE THEN 5 PLOTS ARE REQUESTED PER GRAPH, NO GRAPH WILL BE00599100
C**** PRODUCED AND FOLLOWING MESSAGE WILL BE PRINTED. 00599200
C**** " MORE THEN 5 PLOTS WERE REQUISTED PER GRAPH" 00599300
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00599400
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00599500
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00599600
COMMON / SCRAT / A(10000),NS 00599700
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00599800
ONROW, 00599900
1NCOL,NARGS,VWXYZ(8),NERROR 00600000
DIMENSION ARGS(100) 00600100
EQUIVALENCE( ARGS(1), RC(10001) ) 00600200
DIMENSION TIT(60),TITX(60) 00600300
EQUIVALENCE(TIT,ITLE(1,6)),(TITX,ITLE(1,5)) 00600400
DIMENSION X(1),KCCL(6),PRINT(101),XP(6),BOOL(5),IDGT(9) 00600500
EQUIVALENCE (RC(1),X(1) ) 00600600
INTEGER PRINT,BLANK 00600700
EQUIVALENCE (X0,XMIN),(X1,XMAX),(Y0,YMIN),(Y1,YMAX) 00600800
DIMENSION IHD(3,6),IPR(101) 00600900
INTEGER BOOL,COL1,COL2 00601000
DATA BOOL(1),BOOL(2),BOOL(3),BOOL(4),BOOL(5)/1H.,1H*,1H+,1H,,1H-/,00601100
1COL1,COL2/3HCOL ,3HUMN /,BLANK/ 1H / 00601200
DATA IDGT(1),IDGT(2),IDGT(3),IDGT(4),IDGT(5),IDGT(6),IDGT(7), 00601300
1 IDGT(8),IDGT(9)/1H2,1H3,1H4,1H5,1H6,1H7,1H8,1H9,1HX / 00601400
C**** INITIAL SWITCHES 00601500
DATA IXPR/1HX/ 00601600
IF( L2 .EQ. 5) KLIM=101 00601700
IF( L2 .EQ. 14) KLIM=61 00601800
KLIM1=KLIM-1 00601900
IF(L2 .EQ. 5) KIM=5 00602000
IF(L2 .EQ. 14) KIM=3 00602100
ISWT=1 00602200
ISWT1=0 00602300
XUP=1.E+35 00602400
XDOWN=-1.E+35 00602500
YUP=1.E+35 00602600
YDOWN=-1.E+35 00602700
NCN=0 00602800
IF(NARGS.EQ.2) GO TO 115 00602900
IF(KIND(NARGS).EQ.0) GO TO 110 00603000
IF(KIND(NARGS)-KIND(NARGS-1).NE.0) GO TO 710 00603100
C**** X OR Y BOUNDS ARE PROVIDED 00603200
IF(KIND(NARGS-2).EQ.0) GO TO 100 00603300
IF(KIND(NARGS-3).EQ.0) GO TO 710 00603400
ISWT=5 00603500
YUP=ARGS(NARGS) 00603600
YDOWN=ARGS(NARGS-1) 00603700
XUP=ARGS(NARGS-2) 00603800
XDOWN=ARGS(NARGS-3) 00603900
NARGS=NARGS-4 00604000
GO TO 115 00604100
C**** X BOUNDS ARE PROVIDED 00604200
100 ISWT=3 00604300
XUP=ARGS(NARGS) 00604400
XDOWN=ARGS(NARGS-1) 00604500
NARGS=NARGS-2 00604600
C**** CHECK TO SEE IF THERE ARE Y BOUNDS 00604700
110 IF(KIND(NARGS-1)-KIND(NARGS-2).NE.0) GO TO 700 00604800
IF(KIND(NARGS-1).EQ.0) GO TO 115 00604900
C**** Y LIMITS ARE PROVIDED 00605000
ISWT=ISWT+1 00605100
YUP=ARGS(NARGS-1) 00605200
YDOWN=ARGS(NARGS-2) 00605300
IARGS(NARGS-2)=IARGS(NARGS) 00605400
KIND(NARGS-2)=0 00605500
NARGS=NARGS-2 00605600
115 DO 120 I=1,NARGS 00605700
120 KCCL(I)=IARGS(I) 00605800
M=NARGS-1 00605900
IF(NARGS.GT.6) GO TO 720 00606000
CALL CHKCOL(J) 00606100
IF(J.GT.0) GO TO 730 00606200
C**** NO ERROR FOUND IN COLUMN NOS. 00606300
IF(NERROR.GE.1) RETURN 00606400
C**** SEARCH FOR MAX AND MIN ON AXIS, IF BOUNDS ARE NOT PROVIDED, 00606500
C**** OTHERWISE TALLY NO OF POINTS THAT FALL OUTSIDE OF BOUNDS . 00606600
IF(XUP.GE.XDOWN) GO TO 122 00606700
XAP=XDOWN 00606800
XAN=XUP 00606900
GO TO 124 00607000
122 XAP=XUP 00607100
XAN=XDOWN 00607200
124 IF(YUP.GE.YDOWN) GO TO 125 00607300
YAP=YDOWN 00607400
YAN=YUP 00607500
GO TO 126 00607600
125 YAP=YUP 00607700
YAN=YDOWN 00607800
126 K1=IARGS(NARGS) 00607900
K2=K1-1+NRMAX 00608000
IF(ISWT-2)127,1000,135 00608100
127 X1=X(K1) 00608200
X0=X1 00608300
DO 130 I=K1,K2 00608400
IF(X1.GE.X(I)) GO TO 128 00608500
X1=X(I) 00608600
GO TO 130 00608700
128 IF(X0.LE.X(I)) GO TO 130 00608800
X0=X(I) 00608900
130 CONTINUE 00609000
133 XAP=X1 00609100
XAN=X0 00609200
135 GO TO(138,170 ,136,170, 170 ),ISWT 00609300
136 KEY=2 00609400
GO TO 140 00609500
138 KEY=1 00609600
140 DO 167 J=1,M 00609700
K1=IARGS(NARGS) 00609800
K3=IARGS(J) 00609900
K4=K3-1+NRMAX 00610000
IF(J.GT.1) GO TO 145 00610100
Y1=X(K3) 00610200
Y0=Y1 00610300
KY=1 00610400
145 GO TO( 147,155 ),KEY 00610500
147 DO 150 I=K3 ,K4 00610600
IF(Y1.LT.X(I)) Y1=X(I) 00610700
IF(Y0.GT.X(I)) Y0=X(I) 00610800
150 CONTINUE 00610900
GO TO 167 00611000
155 DO 165 I=K3,K4 00611100
IF(X(K1).GE.XAN.AND.X(K1).LE.XAP) GO TO (160,162),KY 00611200
GO TO 165 00611300
160 Y1=X(I) 00611400
Y0=X(I) 00611500
KY=2 00611600
GO TO 165 00611700
162 IF(Y1.LT.X(I)) Y1=X(I) 00611800
IF(Y0.GT.X(I)) Y0=X(I) 00611900
165 K1=K1+1 00612000
167 CONTINUE 00612100
YAP=Y1 00612200
YAN=Y0 00612300
IF(ISWT.EQ.1) GO TO 1990 00612400
GO TO 180 00612500
170 Y1=YUP 00612600
Y0=YDOWN 00612700
ISWT1=1 00612800
IF(ISWT.EQ.2) GO TO 1100 00612900
180 X1=XUP 00613000
X0=XDOWN 00613100
GO TO 1100 00613200
C**** DETERMINE X AND Y INCREMENTS FOR PLOT 00613300
195 YDELTA=(YMAX-YMIN)/50. 00613400
K1=IARGS(NARGS) 00613500
IF( L2 .EQ. 5) XDELTA=(XMAX-XMIN)/100. 00613600
IF( L2 .EQ. 14) XDELTA=(XMAX-XMIN)/60. 00613700
YL =YMAX-YDELTA/2. 00613800
YT=YMAX 00613900
IF(ISWT.GT.1) WRITE(IPRINT,610) NTOT,NCN 00614000
GO TO 2300 00614100
198 KYTL=1 00614200
IF(YMAX.LT.YMIN) KYTL=2 00614300
KXTL=1 00614400
IF(XMAX.LT.XMIN) KXTL=2 00614500
ITB=1 00614600
C**** THE I LOOP CONTROLS THE 5 DIVISIONS OF THE Y ORDINATE 00614700
DO 350 I=1,6 00614800
L=1 00614900
C**** THE J LOOP IS FOR EACH LINE OF PRINT WITHIN THE DIVISIONS 00615000
DO 350 J=1,10 00615100
C**** BLANK OUT PRINT BUFFER LINE. 00615200
DO 200 K=1,KLIM 00615300
200 PRINT(K)=BLANK 00615400
C**** THE KK INDEX IS FOR EACH CURVE. KK LESS THAN 6. 00615500
DO 270 KK=1,M 00615600
K3=IARGS(KK) 00615700
K4=K3-1+NRMAX 00615800
K5=K1 00615900
C**** THIS DETERMINES IF Y(K) VALUE IS ON THE PRESENT PRINT LINE 00616000
DO 260 K=K3,K4 00616100
GO TO (202,201), KYTL 00616200
202 IF(X(K)-YT )205,205,260 00616300
205 IF(X(K)-YL )260,260,210 00616400
201 IF(X(K)-YL) 203,203,260 00616500
203 IF(X(K)-YT) 260,260,210 00616600
C**** YES. Y(K) BELONGS ON THIS PRINT LINE 00616700
C**** THEREFORE DETERMIND WHERE ALL THE X(K5) FALL ON THE X-AXIS 00616800
210 XL=XMIN 00616900
XT=XMIN+XDELTA/2. 00617000
DO 255 KA=1,KLIM 00617100
GO TO (212,211) , KXTL 00617200
211 IF(X(K5)-XT) 250,250,213 00617300
213 IF(X(K5) -XL) 220,220,250 00617400
212 IF(X(K5)-XL ) 250,215,215 00617500
215 IF(X(K5)-XT ) 220,250,250 00617600
220 IF(PRINT(KA)-BLANK)240,230,240 00617700
230 PRINT(KA)=BOOL(KK) 00617800
GO TO 260 00617900
C**** IF MORE THEN ONE POINT FALLS ON THE PRINT POSITION, TALLY THE NO. 00618000
C**** OF POINTS. 00618100
240 DO 242 KKK=1,9 00618200
IF(PRINT(KA)-IDGT(KKK)) 242,244,242 00618300
242 CONTINUE 00618400
PRINT(KA)=IDGT(1) 00618500
GO TO 260 00618600
244 IF(PRINT(KA).NE.IDGT(9)) PRINT(KA)=IDGT(KKK+1) 00618700
GO TO 260 00618800
250 XL=XT 00618900
255 XT=XT+XDELTA 00619000
260 K5=K5+1 00619100
270 CONTINUE 00619200
YP=YT*YL 00619300
YT=YL 00619400
YL=YL-YDELTA 00619500
GO TO (280,300),L 00619600
280 IF(I-5) 285,285,400 00619700
285 L=2 00619800
YS = YT + YDELTA / 2. 00619900
C**** THIS PATH IS EXECUTED ONCE IN EVERY DIVISION OF THE Y-AXIS. EVERY 00620000
C**** TENTH LINE, STARTING WITH ZERO LINE 00620100
IF(YP ) 286,286,295 00620200
286 IF(L2 .EQ. 5)WRITE(IPRINT,299) TIT(ITB),YS, PRINT 00620300
IF(L2 .EQ. 14) WRITE(IPRINT,298) TIT(ITB),YS,(PRINT(IB),IB=1,61) 00620400
GO TO 350 00620500
290 FORMAT(1X,A1,1PE11.4,1H+,101A1,1H+) 00620600
291 FORMAT(1X,A1,1PE11.4,1H+,61A1,1H+) 00620700
295 IF(L2 .EQ. 5) WRITE(IPRINT,290) TIT(ITB),YS, PRINT 00620800
IF(L2 .EQ.14) WRITE(IPRINT,291) TIT(ITB),YS,(PRINT(IB),IB=1,61) 00620900
GO TO 350 00621000
298 FORMAT(1X,A1,1PE11.4,1HX,61A1,1HX) 00621100
299 FORMAT(1X,A1,1PE11.4,1HX,101A1,1HX) 00621200
300 IF(YP ) 302,302,306 00621300
C**** PRINTS LINE 00621400
302 IF( L2 .EQ. 5) WRITE(IPRINT,304) TIT(ITB), PRINT 00621500
IF( L2 .EQ. 14) WRITE(IPRINT,303) TIT(ITB),(PRINT(IB),IB=1,61) 00621600
303 FORMAT(1X,A1,11X,1HX,61A1,1HX) 00621700
304 FORMAT(1X,A1,11X,1HX,101A1,1HX) 00621800
GO TO 350 00621900
306 IF( L2 .EQ. 5) WRITE(IPRINT,310) TIT(ITB), PRINT 00622000
IF( L2 .EQ. 14) WRITE(IPRINT,309) TIT(ITB),(PRINT(IB),IB=1,61) 00622100
309 FORMAT(1X,A1,11X,1H-,61A1,1H-) 00622200
310 FORMAT(1X,A1,11X,1H-,101A1,1H-) 00622300
350 ITB=ITB+1 00622400
400 IF(YP ) 402,402,406 00622500
402 IF( L2 .EQ. 5) WRITE(IPRINT,299) TIT(51),YMIN,PRINT 00622600
IF( L2 .EQ. 14) WRITE(IPRINT,298) TIT(51),YMIN,(PRINT(IB),IB=1,61)00622700
GO TO 408 00622800
406 IF( L2 .EQ. 5) WRITE(IPRINT,290) TIT(51),YMIN,PRINT 00622900
IF( L2 .EQ. 14) WRITE(IPRINT,291) TIT(51),YMIN,(PRINT(IB),IB=1,61)00623000
C**** LAST LINE OF PRINT OUT PLUS X VALUES ALONG X-AXIS. 00623100
408 IF( L2 .EQ. 14) GO TO 430 00623200
WRITE(IPRINT,620)IPR 00623300
WRITE(IPRINT,420) XP 00623400
409 WRITE(IPRINT,630) TITX 00623500
420 FORMAT(6(7X,1PE13.4)) 00623600
RETURN 00623700
430 WRITE(IPRINT,620) (IPR(I),I=1,61) 00623800
WRITE(IPRINT,420) (XP(I),I=1,4) 00623900
GO TO 409 00624000
600 FORMAT(12H ABS- COLUMN,I6, 7H; ORD- ,5(2A3,I5,2H (,A1,4H), )) 00624100
605 FORMAT( 6H ABS- ,2A6,6H;ORD- ,5(2A6,2H (,A1,3H), )) 00624200
610 FORMAT(29H TOTAL NO. OF PTS. PLOTTED IS,I5,60H AND NO. NOT PLOTTED00624300
1 BECAUSE THEY FALL OUTSIDE OF BOUNDS IS,I5 ) 00624400
620 FORMAT(14X,101A1) 00624500
630 FORMAT(34X,60A1) 00624600
C**** THIS PRINTS OUT THAT "Y BOUNDS ARE NOT SET UP CORRECTLY". 00624700
700 CONTINUE 00624800
C**** THIS PRINTS OUT THAT "X BOUNDS ARE NOT SET UP CORRECTLY". 00624900
710 CONTINUE 00625000
C**** THIS PRINT "COL. NOS. APPEAR AS ARGUMENTS". 00625100
730 CALL ERROR(20) 00625200
725 NERROR = NERROR - 1 00625300
RETURN 00625400
C**** THIS PRINTS THAT "MORE THEN 5 PLOTS WERE REQUISTED PER GRAPH". 00625500
720 CALL ERROR(10) 00625600
GO TO 725 00625700
1000 KEY=1 00625800
1010 DO 1050 IK=1,M 00625900
IKK=IARGS(IK) 00626000
DO 1045 I=K1,K2 00626100
IF(X(IKK).GE.YAN.AND.X(IKK).LE.YAP) GO TO (1030,1040),KEY 00626200
GO TO 1045 00626300
1030 X1=X(I) 00626400
X0=X1 00626500
KEY=2 00626600
GO TO 1045 00626700
1040 IF(X1.LT.X(I)) X1=X(I) 00626800
IF(X0.GT.X(I)) X0=X(I) 00626900
1045 IKK=IKK+1 00627000
1050 CONTINUE 00627100
IF(KEY.EQ.2) GO TO 133 00627200
X0=XDOWN 00627300
X1=XUP 00627400
GO TO 133 00627500
1100 DO 1120 J=1,M 00627600
K1=IARGS(NARGS) 00627700
K3=IARGS(J) 00627800
K4=K3-1+NRMAX 00627900
DO 1120 I=K3,K4 00628000
IF(X(I).GT.YAP.OR.X(I).LT.YAN) GO TO 1110 00628100
IF(X(K1).LE.XAP.AND.X(K1).GE.XAN) GO TO 1120 00628200
1110 NCN=NCN+1 00628300
1120 K1=K1+1 00628400
NTOT=M*NRMAX-NCN 00628500
C**** DETERMINE TYPE OF HEADINGS TO BE PRINTED 00628600
1990 KTLE=0 00628700
DO 2000 I=1,NARGS 00628800
J=KCCL(I) 00628900
IF(J.GT.50.OR.IHEAD(1,J).EQ.0) GO TO 2005 00629000
IHD(1,I)=IHEAD(1,J) 00629100
IHD(2,I)=IHEAD(2,J) 00629200
IHD(3,I) = IHEAD(3,J) 00629300
KTLE=KTLE+1 00629400
2000 CONTINUE 00629500
C**** STARTS A NEW PAGE AND PRINTS TITLE 1 AND 2 00629600
2005 CALL PAGE(2) 00629700
IF(KTLE.EQ.NARGS) GO TO 2010 00629800
WRITE(IPRINT,600) KCCL(NARGS),(COL1,COL2,KCCL(I),BOOL(I),I=1,M) 00629900
GO TO 195 00630000
2010 WRITE (IPRINT,605) (IHD(I,NARGS),I=1,2), ((IHD(I,J),I=1,2), 00630100
1 BOOL(J ),J=1,M) 00630200
GO TO 195 00630300
2300 XP(1)=XMIN 00630400
IF( L2 .EQ. 5) XP(6)=XMAX 00630500
IF( L2 .EQ. 14) XP(4)=XMAX 00630600
XR=20.*XDELTA 00630700
DO 2310 I=2,KIM 00630800
2310 XP(I)=XP(I-1)+XR 00630900
DO 2320 J=1,KLIM1 00631000
2320 IPR(J)=BOOL(5) 00631100
DO 2330 I=1,KLIM,10 00631200
2330 IPR(I)=BOOL(3) 00631300
IF(XMIN*XMAX.GE.0) GO TO 2370 00631400
J=0 00631500
DO 2340 I=2,KIM 00631600
IF(XP(I-1)*XP(I))2345,2360,2340 00631700
2340 CONTINUE 00631800
I=KIM 00631900
GO TO 2360 00632000
2345 XXP=XP(I-1)+XDELTA 00632100
DO 2350 J=1,20 00632200
IF(XP(I-1)*XXP .LE.0.0) GO TO 2360 00632300
2350 XXP=XXP+XDELTA 00632400
J=20 00632500
2360 N=(I-2)*20+J 00632600
IPR(N)=IXPR 00632700
IPR(N)=IXPR 00632800
2370 IF( L2 .EQ. 5) WRITE(IPRINT,620) IPR 00632900
IF(L2 .EQ. 14) WRITE(IPRINT,620) (IPR(I),I=1,61) 00633000
GO TO 198 00633100
END 00633200
C 77 13 SUBROUTINE PNT(ND15) 2 19 68 00633300
SUBROUTINE PNT(ND15) 00633400
COMMON /BLOCKD/R(10100),IA(100),KI(100),ART(100),NR,NRO,NC,NARGS, 00633500
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00633600
DIMENSION ARGS(100) 00633700
EQUIVALENCE( ARGS(1), R(10001) ) 00633800
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00633900
COMMON / SCRAT / SCRA(10000),NS 00634000
00634100
00634200
1 PRINT 40, (SCRA(I), I = 1,ND15) 00634300
RETURN 00634400
40 FORMAT(8E16.8) 00634500
END 00634600
C 78 71 SUBROUTINE PRINTX 2 19 68 00634700
SUBROUTINE PRINTX 00634800
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00634900
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00635000
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00635100
DIMENSION ARGS(100) 00635200
EQUIVALENCE( ARGS(1), RC(10001) ) 00635300
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00635400
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00635500
DIMENSION KFMT( 17 ) 00635600
IF ( L1 .EQ. 2 .OR. L1 .EQ. 3 ) IF( NARGS ) 20,20,45 00635700
IF( NARGS .GT. 1 ) GO TO 40 00635800
C 00635900
C L1 = 2 FOR PRINT, L1 = 6 FOR ABRIDGE 00636000
C L1 = 3 FOR PUNCH 00636100
C 00636200
20 CALL ERROR( 205 ) 00636300
30 RETURN 00636400
40 LL = IARGS( 1 ) 00636500
IARGS( 1 ) = 1 00636600
IF( LL .LE. 0 .OR. LL .GT. NROW ) GO TO 20 00636700
45 DO 46 I = 1, NARGS 00636800
46 IARGS( I+50 ) = IARGS( I ) 00636900
50 CALL CHKCOL( I ) 00637000
IF( I .NE. 0 ) GO TO 20 00637100
60 IF( NERROR .NE. 0 ) GO TO 30 00637200
CALL SETFMT( KFMT ) 00637300
IF( L1 .EQ. 2 ) GO TO 80 00637400
IF ( L1 .EQ. 3 ) GO TO 150 00637500
C 00637600
C ABRIDGE 00637700
C 00637800
DO 70 I = 2, NARGS 00637900
J = IARGS( I ) + LL 00638000
70 ARGS( I ) = RC( J-1 ) 00638100
WRITE( IPRINT, KFMT ) ( ARGS( I ), I = 2, NARGS ) 00638200
GO TO 30 00638300
C 00638400
C PRINT 00638500
C 00638600
80 LL = NRMAX 00638700
90 IF( LL .GT. 51 ) GO TO 100 00638800
J = LL 00638900
LL = 0 00639000
GO TO 110 00639100
100 LL = LL - 50 00639200
J = 50 00639300
110 CALL PAGE( 4 ) 00639400
IF( L2 .EQ. 1 ) CALL HEADS 00639500
WRITE( IPRINT, 130 ) 00639600
DO 140 M = 1, J 00639700
DO 120 I = 1, NARGS 00639800
K = IARGS( I ) 00639900
IARGS( I ) = IARGS( I ) + 1 00640000
120 ARGS( I ) = RC( K ) 00640100
WRITE( IPRINT, KFMT ) ( ARGS( I ), I = 1, NARGS ) 00640200
IF( MOD( M, 10 ) .EQ. 0 ) WRITE( IPRINT, 130 ) 00640300
130 FORMAT(1X) 00640400
140 CONTINUE 00640500
IF( LL ) 30, 30, 90 00640600
C 00640700
C PUNCH 00640800
C 00640900
150 DO 170 M=1,NRMAX 00641000
DO 160 I=1,NARGS 00641100
K = IARGS( I ) 00641200
IARGS( I ) = IARGS( I ) + 1 00641300
160 ARGS( I ) = RC( K ) 00641400
WRITE(IPUNCH, KFMT ) ( ARGS( I ) , I=1,NARGS ) 00641500
170 CONTINUE 00641600
RETURN 00641700
END 00641800
C 79 89 SUBROUTINE PROB (VNU1,VNU2,F,Q) 2 19 68 00641900
SUBROUTINE PROB (VNU1,VNU2,F,Q) 00642000
DOUBLE PRECISION C,A,X,W,ONE,B,TA,TB,G 00642100
DATA C/.6366197723675814D0/,EP/1.E-5/,ONE/1.D0/,TWO/2.0/,ONEP/1./,00642200
1 P5/.5/ 00642300
NU1=VNU1+EP 00642400
NU2=VNU2+EP 00642500
V1=NU1 00642600
V2=NU2 00642700
IF (ABS(V1-VNU1).GT.EP) GO TO 310 00642800
IF( ABS(V2-VNU2).GT.EP) GO TO 310 00642900
IF(F.GE.0.) GO TO 80 00643000
F=0. 00643100
C**** ERROR " SET F=0 SINCE F LESS THEN 0" 00643200
CALL ERROR (206) 00643300
80 IF(NU1.LT.0.OR.NU2.LT.0) GO TO 300 00643400
105 MNU1=MOD(NU1,2) 00643500
MNU2=MOD(NU2,2) 00643600
IF(MNU2.NE.0) GO TO 120 00643700
I1=NU2/2-1 00643800
X=V2/(V2+V1*F) 00643900
V4=V1/TWO 00644000
I4=NU1 00644100
90 A=ONE 00644200
IF(I1.EQ.0) GO TO 110 00644300
W=A 00644400
DO 100 I=1,I1 00644500
T=I 00644600
W=((V4+T-ONEP)/T)*X*W 00644700
100 A=A+W 00644800
110 Q=A*(ONE-X)**V4 00644900
IF( I4.EQ.NU1) Q=ONEP-Q 00645000
115 IF(Q.LT.0.) Q=0 00645100
IF(Q.GT.ONEP) Q=ONEP 00645200
RETURN 00645300
120 IF(MNU1.NE.0) GO TO 130 00645400
I1=NU1/2-1 00645500
X=ONEP-V2/(V2+V1*F) 00645600
V4=V2/TWO 00645700
I4=NU2 00645800
GO TO 90 00645900
130 IF(NU2.NE.1) GO TO 170 00646000
IF(NU1.NE.1) GO TO 140 00646100
Q=C*ATAN(ONEP/FSQRT(F)) 00646200
GO TO 115 00646300
140 X=ATAN(FSQRT(V2/(V1*F))) 00646400
I1= (NU1-3)/2 00646500
IS=1 00646600
145 TB=DSIN(X) 00646700
A=DCOS(X) 00646800
IF(I1.EQ.0) GO TO 160 00646900
TA=A**2 00647000
W=A 00647100
DO 150 I=1,I1 00647200
V3=I 00647300
W= V3/(V3+P5)*TA*W 00647400
150 A=A+W 00647500
160 A=C*(X+TB*A) 00647600
Q=A 00647700
GO TO (115,180),IS 00647800
170 X=ATAN(FSQRT(V1*F/V2)) 00647900
I1= (NU2-3)/2 00648000
IS=2 00648100
GO TO 145 00648200
180 IF(NU1.NE.1) GO TO 190 00648300
Q=ONE-A 00648400
GO TO 115 00648500
190 I1=(NU1-3)/2 00648600
B=ONE 00648700
IF(I1.EQ.0) GO TO 210 00648800
W=B 00648900
DO 200 I=1,I1 00649000
V3=I 00649100
W= (V2+TWO*V3-ONEP)/(TWO*V3+ONEP)*TB**2*W 00649200
200 B=B+W 00649300
210 G=C 00649400
I1=(NU2-1)/2 00649500
DO 220 I=1,I1 00649600
V3=I 00649700
220 G=(TWO*V3)/(TWO*V3-ONEP)*G 00649800
Q=ONE-A+G*TB*DCOS(X)**NU2*B 00649900
GO TO 115 00650000
C**** PRINT " EITHER NU1 OR NU2 IS LESS THEN 1 " 00650100
300 CALL ERROR (207) 00650200
RETURN 00650300
C**** PRINT " EITHER NU1 OR NU2 IS NOT A INTEGER PROGRAM USES LARGEST 00650400
C**** INTEGER CONTAINED " 00650500
310 CALL ERROR(208) 00650600
GO TO 105 00650700
END 00650800
C 80 55 SUBROUTINE PROROW 2 19 68 00650900
SUBROUTINE PROROW 00651000
C PROGRAMMED BY CARLA MESSINA MAY,1967 00651100
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00651200
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00651300
DIMENSION ARGS(100) 00651400
EQUIVALENCE( ARGS(1), RC(10001) ) 00651500
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00651600
COMMON / SCRAT / A(10000),NS 00651700
IF (NARGS - 3) 10,40,40 00651800
10 K = 10 00651900
20 CALL ERROR(K) 00652000
30 RETURN 00652100
40 CALL CHKCOL(J) 00652200
IF (J) 50,60,50 00652300
50 K = 3 00652400
GO TO 20 00652500
60 IF (NRMAX) 70,70,80 00652600
70 K = 9 00652700
GO TO 20 00652800
80 IF (NERROR .NE. 0) RETURN 00652900
DO 100 I=1,NRMAX 00653000
A(I) = 0.0 00653100
GO TO (100,90), L2 00653200
90 A(I) = 1.0 00653300
100 CONTINUE 00653400
IF( NARGS - 4 ) 110, 200, 200 00653500
110 IF (IARGS(1) - IARGS(2)) 120,120,50 00653600
120 K = IARGS(1) 00653700
DO 150 I=1,NRMAX 00653800
J = K + I - 1 00653900
GO TO (130,140), L2 00654000
130 A(I) = A(I) + RC(J) 00654100
GO TO 150 00654200
140 A(I) = A(I)*RC(J) 00654300
150 CONTINUE 00654400
IF (IARGS(1) + NROW - IARGS(2)) 160,160,170 00654500
160 IARGS(1) = IARGS(1) + NROW 00654600
GO TO 120 00654700
170 K = IARGS(NARGS) 00654800
DO 180 I=1,NRMAX 00654900
J = K + I - 1 00655000
180 RC(J) = A(I) 00655100
GO TO 30 00655200
200 II = NARGS - 1 00655300
DO 250 L=1,II 00655400
K = IARGS(L) 00655500
DO 250 I=1,NRMAX 00655600
J = K + I - 1 00655700
GO TO (230,240), L2 00655800
230 A(I) = A(I)+RC(J) 00655900
GO TO 250 00656000
240 A(I) = A(I)*RC(J) 00656100
250 CONTINUE 00656200
GO TO 170 00656300
END 00656400
C 81 19 FUNCTION QNORML(X) 2 19 68 00656500
FUNCTION QNORML(X) 00656600
C 00656700
C A FUNCTION FROM AMS 55 CHAPTER 26 TO COMPUTE THE INVERSE NORMAL 00656800
C INTEGRAL FOR THE PROBABILITY X 00656900
C 00657000
IF ( X .LE. 0.0 .OR. X .GE. 1.0 ) GO TO 10 00657100
IF (X .EQ. 0.5) GO TO 1 00657200
GO TO 2 00657300
10 CALL AERR( 3 ) 00657400
1 QNORML=0.0 00657500
RETURN 00657600
2 P=X 00657700
IF (X .GT. 0.5) P=1.0-X 00657800
T=SQRT(ALOG(1.0/(P**2)) ) 00657900
QNORML=T-(2.515517+.802853*T+.010328*T**2)/(1.0+1.432788*T+.18926900658000
1*T**2+.001308*T**3) 00658100
IF ( X .LT. 0.5 ) QNORML = -1.0 * QNORML 00658200
RETURN 00658300
END 00658400
C 82 25 SUBROUTINE READQ 2 19 68 00658500
SUBROUTINE READQ 00658600
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00658700
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00658800
DIMENSION ARGS(100) 00658900
EQUIVALENCE( ARGS(1), RC(10001) ) 00659000
COMMON / QRS / NDROW, IFLAG, J, NNARG 00659100
IF( IFLAG .NE. 0 ) GO TO 99 00659200
IF( J .LT. NROW ) GO TO 10 00659300
IFLAG = 1 00659400
CALL ERROR( 201 ) 00659500
GO TO 99 00659600
C NNARG CONTAINS NARGS OF READ COMMAND 00659700
C IARGS(51) THRU IARGS(NNARG+50) CONTAINS ADDRESSES OF COLUMN TOPS 00659800
10 DO 30 I = 1, NNARG 00659900
K = IARGS( I + 50 ) + J 00660000
IF( KIND( I ) .EQ. 0 ) GO TO 20 00660100
RC( K ) = ARGS( I ) 00660200
GO TO 30 00660300
20 RC( K ) = IARGS( I ) 00660400
30 CONTINUE 00660500
C J IS CARD COUNT. IT COUNTS FROM ZERO. 00660600
J = J + 1 00660700
NRMAX = J 00660800
99 RETURN 00660900
END 00661000
C 83 77 SUBROUTINE READX 2 19 68 00661100
SUBROUTINE READX 00661200
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00661300
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00661400
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00661500
DIMENSION ARGS(100) 00661600
EQUIVALENCE( ARGS(1), RC(10001) ) 00661700
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00661800
COMMON / QRS / NDROW, IFLAG, J, NNARG 00661900
COMMON /BLOCKC/KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00662000
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00662100
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00662200
DIMENSION KFMT(17) 00662300
IF( L2 .NE. 1 ) GO TO 200 00662400
ISRFLG = 0 00662500
IF( NARGS .GT. 0 ) GO TO 10 00662600
5 CALL ERROR( 10 ) 00662700
GO TO 99 00662800
10 MODE = 2 00662900
CALL CHKCOL( I ) 00663000
IF( I .EQ. 0 ) GO TO 20 00663100
15 CALL ERROR( 3 ) 00663200
GO TO 99 00663300
20 IF( NERROR .NE. 0 ) GO TO 99 00663400
DO 30 I = 1, NARGS 00663500
IARGS( I + 50 ) = IARGS( I ) 00663600
IARGS( I ) = 0 00663700
30 ARGS( I ) = 0. 00663800
IFLAG = 0 00663900
J = 0 00664000
NNARG = NARGS 00664100
GO TO 100 00664200
99 IFLAG = 1 00664300
100 RETURN 00664400
C 00664500
C FORMATTED READ 00664600
C READ X N C C C C 00664700
C 00664800
C N = NUMBER OF CARDS TO READ. IF N = 0, READ UNTIL A 00664900
C BLANK CARD IS FOUND 00665000
C X IS THE FORMAT IDENTIFIER, A,B,C,D,E,F 00665100
C 00665200
200 IF( NARGS .LE. 1 ) GO TO 5 00665300
C SETUP FORMAT 00665400
CALL SETFMT( KFMT ) 00665500
C CHECK AND CONVERT ARGUMENTS 00665600
DO 210 I = 2, NARGS 00665700
CALL ADRESS( I, IARGS( I ) ) 00665800
210 IF( IARGS( I ) .LE. 0 ) GO TO 311 00665900
IF( IARGS( 1 ) ) 15, 220, 230 00666000
220 N = 10000 00666100
GO TO 240 00666200
230 N = IARGS( 1 ) 00666300
240 DO 280 I = 1, N 00666400
READ( INUNIT, KFMT ) ( ARGS( J ), J = 2, NARGS ) 00666500
C CHECK IF LOOKING FOR BLANK CARD 00666600
IF( IARGS( 1 ) .NE. 0 ) GO TO 260 00666700
DO 250 J = 2, NARGS 00666800
250 IF( ARGS( J ) .NE. 0. ) GO TO 260 00666900
C BLANK CARD FOUND, TERMINATE READ. 00667000
GO TO 290 00667100
C IF THERE IS TOO MUCH DATA, DO NOT ENTER EXCESS 00667200
260 IF( I .GT. NROW ) GO TO 280 00667300
DO 270 J = 2, NARGS 00667400
K = IARGS( J ) 00667500
IARGS( J ) = K + 1 00667600
270 RC( K ) = ARGS( J ) 00667700
280 CONTINUE 00667800
I = N + 1 00667900
290 I = I - 1 00668000
NRMAX = MAX0( NRMAX, MIN0( I, NROW ) ) 00668100
WRITE( ISCRAT, 300 ) I 00668200
300 FORMAT(5X,I4,31H DATA CARDS READ BUT NOT LISTED,44X) 00668300
IF( I .GT. NROW ) CALL ERROR( 201 ) 00668400
GO TO 100 00668500
311 CALL ERROR( 11 ) 00668600
GO TO 100 00668700
END 00668800
C 84 33 SUBROUTINE RESET 2 19 68 00668900
SUBROUTINE RESET 00669000
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00669100
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00669200
COMMON / BLOCKF / NCTOP 00669300
DIMENSION ARGS(100) 00669400
EQUIVALENCE( ARGS(1), RC(10001) ) 00669500
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00669600
IF ( NARGS .EQ. 1 ) IF ( L2 - 2 )30,110,100 00669700
K = 10 00669800
10 CALL ERROR( K ) 00669900
20 RETURN 00670000
C RESET NRMAX 00670100
30 IF( KIND(1) .NE. 0 ) IARGS(1) = ARGS(1) 00670200
40 IF( IARGS( 1 ) .GE. 0 .AND. IARGS( 1 ) .LE. NROW ) GO TO 50 00670300
K = 3 00670400
GO TO 10 00670500
50 NRMAX = IARGS( 1 ) 00670600
GO TO 20 00670700
C RESET V,W,X,Y,Z 00670800
100 IF( KIND(1) .EQ. 0 ) ARGS(1) = IARGS(1) 00670900
VWXYZ( L2-2 ) = ARGS( 1 ) 00671000
GO TO 20 00671100
C RESET COLTOP 00671200
110 IF ( KIND( 1 ) .NE. 0 ) IARGS(1) = ARGS(1) 00671300
IF ( IARGS ( 1 ) .GE. 0 .AND. IARGS( 1 ) .LE. (NROW+NCTOP-1)) 00671400
1 GO TO 120 00671500
K = 3 00671600
GO TO 10 00671700
120 J = NCTOP 00671800
NCTOP = IARGS( 1 ) 00671900
NROW = NROW + ( J - NCTOP ) 00672000
GO TO 20 00672100
END 00672200
C 85 23 SUBROUTINE RNDOWN 2 19 68 00672300
SUBROUTINE RNDOWN 00672400
COMMON /BLOCKC/KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00672500
COMMON / BLOCKX / INDEX( 6, 8 ), LEVEL 00672600
C 00672700
C IF AN ERROR IS MADE IN A STORED STATEMENT, THIS ROUTINE PRINTS 00672800
C OUT EXACTLY WHEN AND WHERE IT OCCURRED. 00672900
C 00673000
A = FLOAT( INDEX( 6, LEVEL ) ) / 10. 00673100
WRITE( ISCRAT, 10 ) A 00673200
10 FORMAT(31H IN COMMAND AT STATEMENT NUMBER,F6.1,47X) 00673300
N = LEVEL - 1 00673400
20 IF( N ) 70, 50, 30 00673500
30 A = FLOAT( INDEX( 6, N ) ) / 10. 00673600
WRITE( ISCRAT, 40 ) INDEX( 5, N + 1 ), INDEX( 4, N + 1 ), A 00673700
40 FORMAT(10H CYCLE NO.,I4,3H OF,I4,24H OF PERFORM AT STATEMENT,F6.1,00673800
1 33X) 00673900
N = N - 1 00674000
GO TO 20 00674100
50 WRITE( ISCRAT, 60 ) INDEX( 5, 1 ), INDEX( 4, 1 ) 00674200
60 FORMAT(10H CYCLE NO.,I4,3H OF,I4,31H OF EXTERNAL PERFORM STATEMENT00674300
1.,32X) 00674400
70 RETURN 00674500
END 00674600
C 86 177 SUBROUTINE SELECT 2 19 68 00674700
SUBROUTINE SELECT 00674800
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00674900
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00675000
DIMENSION ARGS(100) 00675100
EQUIVALENCE( ARGS(1), RC(10001) ) 00675200
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00675300
COMMON / SCRAT / A(10000),NS 00675400
C 00675500
C ITYPE=1 SELECT IN COL ++ VALUES APPROX COL ++ TO WITHIN **, 00675600
C STORE IN COL ++ 00675700
C ITYPE=1 SELECT IN COL ++ VALUES APPROX COL ++ TO WITHIN **, 00675800
C STORE IN COL ++ TO COL ++ 00675900
C ITYPE=1 SELECT IN COL ++ VALUES APPROX COL ++ TO WITHIN **, 00676000
C STORE ++ TO ++, STORE NUMBER FALLING WITHIN TOL IN CO00676100
C 00676200
C ITYPE=2 SEARCH IN COL ++ FOR NUMBERS IN ++, TRANSFER CORRESP VALUE00676300
C FROM ++ INTO ++, ++ INTO ++, ETC 00676400
C 00676500
C ITYPE=3 CENSOR COL ++ FOR $$, REPLACING BY $$, STORE IN COL ++ 00676600
C 00676700
C BY CARLA G. MESSINA NSRDS NBS 00676800
C 00676900
GO TO (10,90,120) ,L2 00677000
10 IF (KIND(3)) 40,20,40 00677100
20 K=3 00677200
30 CALL ERROR(K) 00677300
35 RETURN 00677400
40 IARGS(3)= IARGS(2) 00677500
KIND(3)=0 00677600
IF (NARGS - 4) 50,60,70 00677700
50 K=10 00677800
GO TO 30 00677900
60 IARGS(5)=IARGS(4) 00678000
NARGS = NARGS+ 1 00678100
KIND(5) = KIND(4) 00678200
70 IF (NARGS - 6) 80,80,50 00678300
80 IF (IARGS(4) - IARGS(5)) 220,220,20 00678400
90 IF (NARGS - 4) 50,100,100 00678500
100 IF (2*(NARGS/2) - NARGS) 50,110,50 00678600
110 CALL CHKCOL(J) 00678700
IF (J) 20,190,20 00678800
120 IF (NARGS-4) 50,130,50 00678900
130 DO 140 I=1,4 00679000
140 CALL ADRESS(I,IARGS(I)) 00679100
IF (IARGS(1)) 20,20,150 00679200
150 IF (IARGS(4)) 20,20,160 00679300
160 DO 180 I=2,3 00679400
IF (KIND(I)) 180,170,180 00679500
170 IF (IARGS(I)) 20,20,180 00679600
180 CONTINUE 00679700
190 IF (NERROR .NE. 0) GO TO 35 00679800
IF (NRMAX) 200,200,210 00679900
200 K=9 00680000
GO TO 30 00680100
210 GO TO (300,500,600) , L2 00680200
220 IF (IARGS(5) - IARGS(4) - NRMAX + 1) 110,110,230 00680300
230 IARGS(5) =IARGS(4) + NRMAX - 1 00680400
GO TO 110 00680500
C SELECT 00680600
300 DO 330 I=1,NRMAX 00680700
L = IARGS( 1 ) + I - 1 00680800
K = IARGS( 2 ) + I - 1 00680900
J = IARGS(4) + I -1 00681000
M = NRMAX + I 00681100
A(I) = RC(K) 00681200
A(M) = RC(L) 00681300
310 RC(J) = 0.0 00681400
IF (J - I - IARGS(5) + 1) 320,330,330 00681500
320 J = NROW + J 00681600
GO TO 310 00681700
330 CONTINUE 00681800
ARG3= ARGS(3) 00681900
DO 480 I=1,NRMAX 00682000
I9 = 2*NRMAX + 1 00682100
I11 = 5*NRMAX 00682200
DO 335 I10 = I9, I11 00682300
335 A( I10 ) = 0.0 00682400
K= NRMAX + 1 00682500
L = 2*NRMAX 00682600
M= 3*NRMAX 00682700
N = 4*NRMAX 00682800
I1 = IARGS(4) + I - 1 00682900
J1 = IARGS(6) + I - 1 00683000
DO 350 J=K,L 00683100
AT = ABS(A(I) - A(J)) 00683200
IF ( ABS(ARG3) - AT) 350,340,340 00683300
340 M = M + 1 00683400
A(M) = AT 00683500
N = N + 1 00683600
A(N) = A(J) 00683700
350 CONTINUE 00683800
IF (M - 3*NRMAX + 1) 360,380,400 00683900
360 IF (NARGS-5) 480,480,370 00684000
370 RC(J1)=0.0 00684100
GO TO 480 00684200
380 RC(I1) =A(N) 00684300
IF (NARGS - 5) 480,480,390 00684400
390 RC(J1) = 1.0 00684500
GO TO 480 00684600
400 M1 = 3*NRMAX + 2 00684700
410 K2 = 0 00684800
DO 430 J=M1,M 00684900
IF (A(J) - A(J-1)) 420,430,430 00685000
420 AT = A(J) 00685100
A(J) = A(J-1) 00685200
A(J-1) =AT 00685300
N = J + NRMAX 00685400
AT = A(N) 00685500
A(N) = A(N-1) 00685600
A(N-1) = AT 00685700
K2 = K2 +1 00685800
430 CONTINUE 00685900
IF (K2) 440,440,410 00686000
440 N = 4*NRMAX + 1 00686100
450 RC(I1) = A(N) 00686200
I1= I1 + NROW 00686300
N = N +1 00686400
IF (I1 - I - IARGS(5) + 1) 450,450,460 00686500
460 IF (NARGS - 5) 480,480,470 00686600
470 RC(J1) = M - 3*NRMAX 00686700
480 CONTINUE 00686800
GO TO 35 00686900
C SEARCH 00687000
500 I1 = NARGS - 1 00687100
DO 520 I =1,NRMAX 00687200
K = IARGS(1) + I - 1 00687300
L = IARGS(2) + I - 1 00687400
M = NRMAX + I 00687500
A(I) = RC(L) 00687600
A(M) = RC(K) 00687700
J1 = 2 00687800
DO 510 N=3,I1,2 00687900
L= J1*NRMAX + I 00688000
M = IARGS(N) + I - 1 00688100
A(L) = RC(M) 00688200
510 J1 = J1 + 1 00688300
DO 520 N =4,NARGS,2 00688400
M = IARGS(N) + I - 1 00688500
520 RC(M) = 0.0 00688600
K = NRMAX + 1 00688700
L = 2*NRMAX 00688800
DO 560 I=1,NRMAX 00688900
AT = ABS(A(I)/1.E8) 00689000
DO 550 J=K,L 00689100
IF ( ABS(A(I) - A(J)) - AT) 530,550,550 00689200
530 J1=1 00689300
DO 540 N=4,NARGS,2 00689400
M= IARGS(N) + I - 1 00689500
I1= J1*NRMAX + J 00689600
RC(M) = A(I1) 00689700
540 J1 =J1 + 1 00689800
GO TO 560 00689900
550 CONTINUE 00690000
560 CONTINUE 00690100
GO TO 35 00690200
C CENSOR 00690300
600 DO 610 I=1,NRMAX 00690400
J = IARGS(1) + I -1 00690500
610 A(I) = RC(J) 00690600
DO 660 J=2,3 00690700
K = (J-1)*NRMAX 00690800
IF (KIND(J)) 640,620,640 00690900
620 DO 630 I=1,NRMAX 00691000
I1 = IARGS(J) + I - 1 00691100
K = K + 1 00691200
630 A(K) = RC(I1) 00691300
GO TO 660 00691400
640 ARG3 = ARGS(J) 00691500
DO 650 I =1,NRMAX 00691600
K = K +1 00691700
650 A(K) = ARG3 00691800
660 CONTINUE 00691900
DO 680 I=1,NRMAX 00692000
J= NRMAX + I 00692100
K= 2*NRMAX + I 00692200
L = IARGS(4) + I - 1 00692300
IF (A(I) - A(J)) 670,670,680 00692400
670 A(I) = A(K) 00692500
680 RC(L) = A(I) 00692600
GO TO 35 00692700
END 00692800
C 87 4 SUBROUTINE SEPINS 2 19 68 00692900
SUBROUTINE SEPINS 00693000
CALL X( "SEPINS" ) 00693100
RETURN 00693200
END 00693300
C 88 52 SUBROUTINE SET 2 19 68 00693400
SUBROUTINE SET 00693500
COMMON /BLOCKC/KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00693600
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00693700
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00693800
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00693900
DIMENSION KFMT(17) 00694000
DIMENSION NOUT(6) 00694100
DATA NOUT(1),NOUT(2),NOUT(3),NOUT(4),NOUT(5),NOUT(6) / 729, 1458, 00694200
1 2187,2916, 3645, 4374 / 00694300
DIMENSION ARGS(100) 00694400
EQUIVALENCE( ARGS(1), RC(10001) ) 00694500
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00694600
COMMON / QRS / NDROW, IFLAG, J, NNARG 00694700
ISRFLG = 1 00694800
IF ( NARGS .GE. 1 .AND. NARGS .LE. 3 ) GO TO 10 00694900
CALL ERROR( 10 ) 00695000
GO TO 99 00695100
10 MODE = 2 00695200
DO 12 I=1,6 00695300
L2 = I+1 00695400
IF ( NAME(3) .EQ. NOUT(L2-1) ) GO TO 14 00695500
12 CONTINUE 00695600
GO TO 16 00695700
14 L1 = 0 00695800
CALL SETFMT( KFMT ) 00695900
16 CALL ADRESS( NARGS , J ) 00696000
IF( J ) 15, 17, 20 00696100
15 CALL ERROR( 3 ) 00696200
GO TO 99 00696300
17 CALL ERROR( 11 ) 00696400
GO TO 99 00696500
20 NDROW = J + NROW - 1 00696600
IF( NARGS .EQ. 1 ) GO TO 30 00696700
IF ( L1 .EQ. 0 ) GO TO 200 00696800
IF( KIND( 1 ) .NE. 0 ) GO TO 15 00696900
IF( IARGS( 1 ) .LE. NROW .AND. IARGS( 1 ) .GT. 0 ) GO TO 25 00697000
CALL ERROR( 16 ) 00697100
GO TO 99 00697200
25 J = J + IARGS( 1 ) - 1 00697300
30 IFLAG = 0 00697400
MODE = 2 00697500
GO TO 100 00697600
99 IFLAG = 1 00697700
100 RETURN 00697800
200 KROW = 1 00697900
IF ( NARGS .EQ. 3 ) KROW = IARGS(2) 00698000
J = J + KROW - 1 00698100
JEND = IARGS(1) + J - 1 00698200
READ ( INUNIT , KFMT ) ( RC( I ),I=J,JEND) 00698300
NRMAX =MAX0(NRMAX, IARGS(1) + KROW - 1 ) 00698400
GO TO 100 00698500
END 00698600
C 89 24 SUBROUTINE SETFMT( KFMT ) 2 19 68 00698700
SUBROUTINE SETFMT( KFMT ) 00698800
DIMENSION KFMT( 17 ) 00698900
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00699000
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00699100
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00699200
C 00699300
C SETUP FORMAT STATEMENT 00699400
C 00699500
C 00699600
C USE STANDARD FORMAT IF L2 = 1 OR IF REQUESTED FORMAT HAS NOT BEEN 00699700
C SUPPLIED YET. 00699800
C 00699900
IF( L2 .NE. 1 .AND. IFMT( 1, L2-1 ) .NE. 0 ) GO TO 30 00700000
C USE STANDARD FORMAT IF L2 = 1 OR IF REQUESTED FORMAT HAS NOT BEEN 00700100
C SUPPLIED YET. 00700200
C 00700300
IF( L2 .NE. 1 .AND. IFMT( 1, L2-1 ) .NE. 0 ) GO TO 30 00700400
DO 10 I = 1, 4 00700500
10 KFMT( I ) = IFMTX( I ) 00700600
20 RETURN 00700700
30 DO 40 I = 1, 17 00700800
40 KFMT( I ) = IFMT( I, L2-1 ) 00700900
GO TO 20 00701000
END 00701100
C 90 28 SUBROUTINE SETQ 2 19 68 00701200
SUBROUTINE SETQ 00701300
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00701400
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00701500
DIMENSION ARGS(100) 00701600
EQUIVALENCE( ARGS(1), RC(10001) ) 00701700
COMMON / QRS / NDROW, IFLAG, J, NNARG 00701800
C CHECK IF END OF ROW HAS BEEN EXCEEDED PREVIOUSLY IN THIS SET. 00701900
IF( IFLAG .NE. 0 .OR. NARGS .EQ. 0 ) GO TO 99 00702000
C J IS WHERE NEXT DATA ITEM IS TO GO IN COLUMN 00702100
C JJ IS WHERE LAST DATA ITEM OF THIS SET IS TO GO 00702200
C NDROW IS ADDRESS OF LAST ELEMENT OF ROW. 00702300
JJ = J + NARGS - 1 00702400
IF( JJ .LE. NDROW ) GO TO 10 00702500
CALL ERROR( 201 ) 00702600
IFLAG = 1 00702700
IF( J .GT. NDROW ) GO TO 99 00702800
JJ = NDROW 00702900
10 K = 1 00703000
DO 30 I = J, JJ 00703100
IF( KIND( K ) .EQ. 0 ) GO TO 20 00703200
RC( I ) = ARGS( K ) 00703300
GO TO 30 00703400
20 RC( I ) = IARGS( K ) 00703500
30 K = K + 1 00703600
J = JJ + 1 00703700
NRMAX = MAX0( NRMAX, JJ - NDROW + NROW ) 00703800
99 RETURN 00703900
END 00704000
C 91 94 SUBROUTINE SORDER 2 19 68 00704100
SUBROUTINE SORDER 00704200
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00704300
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00704400
DIMENSION ARGS(100) 00704500
EQUIVALENCE( ARGS(1), RC(10101) ) 00704600
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00704700
COMMON / SCRAT / A(10000),NS 00704800
C SUBROUTINE BY CARLA MESSINA 221.04 JUNE 1967 00704900
C L2=8 FOR SORT, L2=9 FOR ORDER, L2=14 FOR HEIRARCHY 00705000
C 00705100
C TYPE 1 IS HEIRARCHY OF COL ++, STORE IN COL ++ 00705200
C HEIRARCHY GIVES THE ROW LOCATION OF THE SMALLEST NO. OF THE 00705300
C THE FIRST COLUMN IN THE FIRST ROW OF THE SECOND COLUMN 00705400
C THE ROW NO. OF THE SECOND LOWEST NO. OF THE FIRST COLUMN IS STORED00705500
C IN THE SECOND ROW OF THE SECOND COLUMN, ..... THE ROW NO. OF THE 00705600
C LARGEST NO. OF THE FIRST COL IS STORED IN THE NRMAX ROW OF THE 2ND00705700
C COLUMN. THE FIRST COLUMN IS UNCHANGED BY THIS COMMAND. 00705800
C TYPE 2 IS ORDER COLUMNS ++,++,++, ETC 00705900
C ORDER PLACES EACH ONE OF THE GIVEN COLUMNS IN NUMERICALLY 00706000
C INCREASING ORDER. 00706100
C TYPE 3 IS SORT COL ++ CARRY ALONG COLUMNS ++,++, ETC 00706200
C SORT PLACES THE FIRST COLUMN IN NUMERICALLY INCREASING ORDER 00706300
C WHILE PRESERVING THE ROW RELATIONSHIPS AMONG THE GIVEN COLUMNS 00706400
C 00706500
C THESE INSTRUCTIONS CAN BE DONE FASTER IF A MACHINE LANGUAGE 00706600
C PROGRAM IS SUBSTITUTED FOR THIS ONE. 00706700
C 00706800
IF (NARGS) 10,10,40 00706900
10 K=10 00707000
20 CALL ERROR(K) 00707100
30 RETURN 00707200
40 CALL CHKCOL(J) 00707300
IF (J) 50,60,50 00707400
50 K=3 00707500
GO TO 20 00707600
60 IF( L2 - 9 ) 80, 80, 70 00707700
70 IF (NARGS-2) 10,80,10 00707800
80 IF (NERROR) 30,90,30 00707900
90 IF (NRMAX-1) 100,110,120 00708000
100 K=9 00708100
GO TO 20 00708200
110 IF( L2 - 9 ) 30, 30, 215 00708300
120 K3=1 00708400
K = IARGS(1) -1 00708500
130 DO 140 I =1,NRMAX 00708600
J=K+I 00708700
L = NRMAX + I 00708800
A(I) = RC(J) 00708900
140 A(L) = I 00709000
150 K1 = NRMAX 00709100
160 K1 = K1 -1 00709200
K2=0 00709300
IF (K1-1) 170,170,180 00709400
170 K1 = 2 00709500
180 DO 200 I=1,K1 00709600
IF (A(I)-A(I+1)) 200,200,190 00709700
190 CC = A(I) 00709800
A(I) = A(I+1) 00709900
A(I+1) = CC 00710000
L=NRMAX + I 00710100
CC = A(L) 00710200
A(L) = A(L+1) 00710300
A(L+1) = CC 00710400
K2=1 00710500
200 CONTINUE 00710600
IF (K2) 160,210,160 00710700
210 IF( L2 - 9 ) 240, 240, 220 00710800
215 A(NRMAX+1)=1.0 00710900
220 K= IARGS(2) - 1 00711000
DO 230 I=1,NRMAX 00711100
J= K+ I 00711200
L=NRMAX + I 00711300
230 RC(J) = A(L) 00711400
GO TO 30 00711500
240 DO 250 I=1,NRMAX 00711600
J= K+ I 00711700
250 RC(J) = A(I) 00711800
IF (NARGS-2) 30,260,260 00711900
260 IF( L2 - 9 ) 290, 270, 270 00712000
270 IF (NARGS-K3) 30,30,280 00712100
280 K3 = K3 + 1 00712200
K = IARGS(K3) - 1 00712300
GO TO 130 00712400
290 DO 310 I =2,NARGS 00712500
K = IARGS(I) - 1 00712600
DO 300 J=1,NRMAX 00712700
L = NRMAX + J 00712800
J1 = A(L) + K 00712900
300 A(J) = RC(J1) 00713000
DO 310 J=1,NRMAX 00713100
J1= K + J 00713200
310 RC(J1) = A(J) 00713300
GO TO 30 00713400
END 00713500
C 92 40 SUBROUTINE SORTSM(N,SUM) 2 19 68 00713600
SUBROUTINE SORTSM(N,SUM) 00713700
C ***** 00713800
C SORT COLUMN OF PRODUCTS FOR MATRIX MULTIPLICATION 00713900
C AFTER SORTING START SUMMING BEGIN IN MIDDLE OF SORTED COLUMN 00714000
C ***** 00714100
COMMON/MULTC/NS2 00714200
COMMON / SCRAT / X,NS 00714300
DIMENSION A(10000) 00714400
DOUBLE PRECISION X(5000), SUM, SAVE 00714500
00714600
IF ( N .NE. 1 ) GO TO 80 00714700
SUM = X( NS2 ) 00714800
RETURN 00714900
80 SUM = X(NS2) 00715000
IS = NS2 - 1 00715100
DO 120 I=2,N 00715200
SUM = SUM + X(IS) 00715300
120 IS=IS-1 00715400
RETURN 00715500
END 00715600
C 93 24 SUBROUTINE SPACE 2 19 68 00715700
SUBROUTINE SPACE 00715800
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00715900
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00716000
DIMENSION ARGS(100) 00716100
EQUIVALENCE( ARGS(1), RC(10001) ) 00716200
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00716300
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00716400
IF( NARGS - 1 ) 60, 40, 10 00716500
10 I = 10 00716600
20 CALL ERROR( I ) 00716700
30 RETURN 00716800
40 IF ( KIND(1) .EQ. 0 ) IF ( IARGS(1) ) 50,30,70 00716900
I = 20 00717000
GO TO 20 00717100
50 I = 3 00717200
GO TO 20 00717300
60 IARGS( 1 ) = 1 00717400
70 J = MIN0( 60, IARGS( 1 ) ) 00717500
IF( NERROR .NE. 0 ) GO TO 30 00717600
DO 80 I = 1, J 00717700
80 WRITE( IPRINT, 90 ) 00717800
90 FORMAT(1X) 00717900
GO TO 30 00718000
END 00718100
C 94 84 SUBROUTINE SPINV(A,M,KK,ISIG) 2 19 68 00718200
SUBROUTINE SPINV(A,M,KK,ISIG) 00718300
C7058MI MATRIX INVERSION WITH MINIMUM ROUNDOFF ERROR ACCUMULATION. PREC00718400
DATA ONE/1.0/,ZERO/0.0/,ER/1.E-8/ 00718500
DIMENSION A(1) 00718600
ISIG = 0 00718700
N = M 00718800
NN = KK 00718900
N2 = N + N 00719000
DO 10 J=1,N 00719100
NJCOL = (N + J - 1) * NN 00719200
DO 10 I=1,N 00719300
KINJ = NJCOL + I 00719400
IF(I-J)4,6,4 00719500
4 A(KINJ)=ZERO 00719600
GO TO 10 00719700
6 A(KINJ) = ONE 00719800
10 CONTINUE 00719900
C DETERMINE MAXIMUM ABS OF VARIABLE BEING ELIMINATED. THIS BECOMES PIV00720000
L = 0 00720100
12 L = L + 1 00720200
LCOL = NN*L-NN 00720300
KLL = LCOL + L 00720400
IF(L - N)13,30,1000 00720500
C FIND THE LARGEST ELEMENT IN THE LTH COLUMN. 00720600
13 J1 = L 00720700
C = ABS ( A(KLL) ) 00720800
L1 = L + 1 00720900
DO 20 I = L1,N 00721000
KIL = LCOL + I 00721100
X = ABS (A(KIL)) 00721200
IF(C - X)14,20,20 00721300
C RECORD THE NUMBER OF THE ROW HAVING THE GREATER ELEMENT. 00721400
14 J1 = I 00721500
C C BECOMES THE GREATER. 00721600
C = X 00721700
20 CONTINUE 00721800
C INTERCHANGE ROW J1 WITH ROW L. J1 IS THE ROW WITH THE LARGEST ELEMENT00721900
C TEST TO SEE IF INTERCHANGING IS NECESSARY. 00722000
IF(J1 - L)22,30,22 00722100
22 DO 24 J = L,N2 00722200
JCOL = NN*J-NN 00722300
KJIJ = JCOL + J1 00722400
HOLD = A(KJIJ) 00722500
KLJ = JCOL + L 00722600
A(KJIJ) = A(KLJ) 00722700
A(KLJ) = HOLD 00722800
24 CONTINUE 00722900
C IF THE LARGEST ABSOLUTE ELEMENT IN A COLUMN IS ZERO WE HAVE A SINGUL00723000
30 IF(ABS(A(KLL))-ER)33,33,32 00723100
33 ISIG = 4 00723200
GO TO 1000 00723300
C ZERO ALL THE ELEMENTS IN THE LTH COLUMN BUT THE PIVOTAL ELEMENT. 00723400
32 L1 = 1 00723500
L2 = L - 1 00723600
IF(L2)321,321,323 00723700
321 IF(L-N)322,46,322 00723800
322 L1 = L + 1 00723900
L2 = N 00724000
323 DO 324 I = L1,L2 00724100
KIL = LCOL + I 00724200
Z = -A(KIL)/A(KLL) 00724300
DO 324 J = L,N2 00724400
JCOL = NN*J - NN 00724500
KIJ = JCOL + I 00724600
KLJ = JCOL + L 00724700
324 A(KIJ) = A(KIJ) + Z*A(KLJ) 00724800
IF(N - L2)12,12,321 00724900
C DIVIDE BY DIAGONAL ELEMENTS. 00725000
46 DO 48 I = 1,N 00725100
KKK = NN*I - NN + I 00725200
ZZ = A(KKK) 00725300
DO 48 J = 1,N2 00725400
KKI = NN*J - NN + I 00725500
48 A(KKI) = A(KKI)/ZZ 00725600
C RETURN AFTER PUTTING A INVERSE INTO B 00725700
49 DO 50 J = 1,N 00725800
JCOL = NN*J - NN 00725900
NJCOL = NN * N + JCOL 00726000
DO 50 I = 1,N 00726100
KIJ = JCOL + I 00726200
KINJ = NJCOL + I 00726300
50 A(KIJ) = A(KINJ) 00726400
1000 RETURN 00726500
END 00726600
C 95 449 SUBROUTINE STATIS 2 19 68 00726700
SUBROUTINE STATIS 00726800
C PROGRAM WRITTEN BY S. PEAVY 8/31/67 00726900
C**** OMNITAB COMMAN IS AS FOLLOWS 00727000
C**** I WITH WEIGHTS 00727100
C**** A. STATIS COL +++ WEIGHTS +++ START STORING RESULTS +++ 00727200
C**** (RESULTS WILL BE STORED IN THE NEXT 4 COL) 00727300
C**** B. STATIS COL +++ WHTS +++ RESULTS +++,+++,+++,+++ 00727400
C**** II WITHOUT WHTS 00727500
C**** A. SAME AS I. A. EXCEPT WHTS COL OMITTED 00727600
C**** B. SAME AS I. B. EXCEPT WHTS COL OMITTED 00727700
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00727800
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00727900
COMMON / SCRAT / A(10000),NS 00728000
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00728100
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00728200
DIMENSION ARGS(100) 00728300
EQUIVALENCE( ARGS(1), RC(10001) ) 00728400
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00728500
DIMENSION SA(1250,3),ISA(1250) 00728600
DIMENSION IB(10) 00728700
EQUIVALENCE (A(101),ISA),(A(1351),SA),(NRMAX,NARMAX) 00728800
DIMENSION BCON(4),BKCON(4),AKCON(4),AT5(6),CK1(6),DK2(6),XK1(7), 00728900
1 YK2(7) 00729000
DATA BCON/3.6948,-1.6561,.406,2.7764/,BKCON/7.45894,-.89082, 00729100
1 .61522,2.56706/,AKCON/-.51732,-.61863,-.04122,.55897/,AT5/ 00729200
2 1.9599640,2.3722712,2.8224986,2.5558497,1.5895341,.7328982/,CK1/ 00729300
3 -.70285,-.02006,-.01687,-.01447,-.01263,.67839/,DK2/-1.49016, 00729400
4 .13384,.09764,.07476,.05931,1.68641/,XK1/-40.343875,14.1365, 00729500
5 -2.743342,.84143957,.001066,-6.3701507E-6,1.749484E-8/,YK2/ 00729600
6 50.298233,-11.395210,6.0537922,1.1542370,-9.8051279E-4,5.5609437E00729700
7 -6,1.4584433E-8/,CONK/1.959964/ 00729800
DATA ZERO/0.0/,ONE/1.0/,TWO/2.0/ 00729900
NXCOL=IARGS(1) 00730000
NXWT= IARGS(2) 00730100
ISTORE=1 00730200
NAR=NARGS 00730300
IWT=1 00730400
IF(NARGS.EQ.1) GO TO 80 00730500
IF(NARGS.EQ.3.AND.IARGS(NARGS).LT.0) GO TO 70 00730600
GO TO 90 00730700
70 NARGS=NARGS-1 00730800
IWT=2 00730900
80 ISTORE=2 00731000
GO TO 95 00731100
90 IF(NARGS.NE.2.AND.NARGS.NE.3.AND.NARGS.NE .5.AND.NARGS.NE.6) 00731200
1CALL ERROR (10) 00731300
95 J=NARGS 00731400
CALL CKIND(J) 00731500
IF(J .NE.0) CALL ERROR (3) 00731600
CALL CHKCOL(J) 00731700
IF(J.NE.0) CALL ERROR(11) 00731800
IF(NARMAX*4.GT.NS ) CALL ERROR (225) 00731900
IF(NERROR.NE.0) RETURN 00732000
IXN=NRMAX 00732100
A(1)=NRMAX 00732200
K=IARGS(1) 00732300
M=1 00732400
IF(NAR .EQ.3.OR.NAR .EQ.6) GO TO 120 00732500
NZW=NRMAX 00732600
SUM=0.0 00732700
S2=0. 00732800
WT=0.0 00732900
DO 100 I=1,IXN 00733000
SA(I,2)=RC(K) 00733100
SA(I,3)=1.0 00733200
ISA(I)=M 00733300
SA(I,1)=RC(K) 00733400
K=K+1 00733500
M=M+1 00733600
WT=WT+1. 00733700
SUM=SUM+SA(I,2) 00733800
100 S2=S2+SA(I,2)**2 00733900
SUMWT=SUM 00734000
GO TO 150 00734100
120 SUM=0. 00734200
WT=0. 00734300
SUMWT=0.0 00734400
MA=IARGS(2) 00734500
S2=0.0 00734600
IWT=2 00734700
DO 130 I=1,IXN 00734800
IF(RC(MA).EQ.0.)GO TO 125 00734900
SA(M,2)=RC(K) 00735000
SA(M,3)=RC(MA) 00735100
ISA(M)=M 00735200
SA(M,1)=RC(K) 00735300
S2=S2+SA(M,2)**2*RC(MA) 00735400
SUM=SUM+RC(K) 00735500
WT=WT+RC(MA) 00735600
SUMWT=SA(M,2)*RC(MA)+SUMWT 00735700
M=M+1 00735800
125 K=K+1 00735900
130 MA=MA+1 00736000
NZW=M-1 00736100
150 A(2)=NZW 00736200
A(3)=SUM/A(2) 00736300
A(4)=SUMWT/WT 00736400
A(24)=(2*A(2)-1.)/3. 00736500
A(25)=FSQRT((16.*A(2)-29.)/90.) 00736600
A(39)=S2 00736700
IXN=NZW 00736800
IXNM1=IXN-1 00736900
405 IST=0 00737000
DO 410 I=2,IXN 00737100
IF(SA(I-1,1).LE.SA(I,1)) GO TO 410 00737200
K=ISA(I-1) 00737300
ISA(I-1)=ISA(I) 00737400
ISA(I)=K 00737500
T=SA(I-1,1) 00737600
SA(I-1,1)=SA(I,1) 00737700
SA(I,1)=T 00737800
IST=1 00737900
410 CONTINUE 00738000
IF(IST.NE.0) GO TO 405 00738100
NALPHA=.05*A(2) 00738200
IXA=NALPHA+1 00738300
IXNA=IXN-NALPHA 00738400
TSUM=0. 00738500
TWSUM=0 00738600
TWT=0 00738700
DO 660 I=IXA,IXNA 00738800
M=ISA(I) 00738900
TWSUM=TWSUM+SA(I,1)*SA(M,3) 00739000
TWT=TWT+SA(M,3) 00739100
660 TSUM=TSUM+SA(I,1) 00739200
A(7)=TSUM/(A(2)-2.*FLOAT(NALPHA)) 00739300
A(8)=TWSUM/TWT 00739400
N2=(NZW+1)/2 00739500
A(5)=SA(N2,1) 00739600
IF(MOD(NZW,2).EQ.0) A(5)=(A(5)+SA(N2+1,1))/TWO 00739700
A(6)=(SA(1,1)+SA(IXN,1))/TWO 00739800
A(11)=SA(IXN,1)-SA(1,1) 00739900
A(34)=SA(1,1) 00740000
A(35)=SA(IXN,1) 00740100
DELX=A(11)/10. 00740200
XB=SA(1,1) 00740300
XT=XB+DELX 00740400
L=1 00740500
DO 520 I=1,10 00740600
IC=0 00740700
500 IF(SA(L,1).GE.XT) GO TO 510 00740800
IC=IC+1 00740900
L=L+1 00741000
IF(L.NE.IXN) GO TO 500 00741100
510 A(I+50)=IC 00741200
520 XT=XT+DELX 00741300
IF(L.GT.IXN) GO TO 527 00741400
DO 524 I=L,IXN 00741500
IF(SA(I ,1).GE.XT-DELX) A(60)=A(60)+1. 00741600
524 CONTINUE 00741700
527 DO 530 I=1,IXNM1 00741800
530 SA(I,3)=SA(I+1,1)-SA(I,1) 00741900
LA=1 00742000
DO 420 I=1,IXN 00742100
K=ISA(I) 00742200
SA(K,1)=LA 00742300
420 LA=LA+1 00742400
K=0 00742500
RNS=0. 00742600
RNSS=ONE 00742700
LR=0 00742800
DO 470 I=1,IXNM1 00742900
IF(SA(I,3).NE.0.AND.K.EQ.0) GO TO 460 00743000
IF(SA(I,3).NE.0) GO TO 430 00743100
RNS=RNS+RNSS 00743200
K=K+1 00743300
GO TO 470 00743400
430 K=K+1 00743500
RNS=RNS+RNSS 00743600
RNS=RNS/FLOAT(K) 00743700
DO 450 L=1,K 00743800
LR=LR+1 00743900
LRR=ISA(LR) 00744000
450 SA(LRR,1)=RNS 00744100
LR=LR-1 00744200
RNS=0. 00744300
K=0 00744400
460 LR=LR+1 00744500
470 RNSS=RNSS+ONE 00744600
ICI=0 00744700
IPLUS=0 00744800
IMINUS=0 00744900
IDRUNS=0 00745000
IC=0 00745100
ADEV=0.0 00745200
DEV3=0.0 00745300
DEV2=0.0 00745400
DEV=0.0 00745500
DEVI=0.0 00745600
DEVWT=0. 00745700
DEV4=0.0 00745800
AK=1. 00745900
KWT=IARGS(2) 00746000
NRXX=KWT+NRMAX-1 00746100
TA=1.0 00746200
DO 250 I=1,IXN 00746300
T=SA(I,2)-A(4) 00746400
SA(I,3)=T 00746500
DEV=T+DEV 00746600
ADEV=ADEV+ABS(T) 00746700
DEV2=DEV2+T**2 00746800
DEV3=DEV3+T**3 00746900
DEV4=DEV4+T**4 00747000
DEVI=AK*T+DEVI 00747100
AK=AK+1.0 00747200
IF(IWT.EQ.1) GO TO 210 00747300
203 IF(RC(KWT).NE.0.)GO TO 204 00747400
IF(KWT.GE.NRXX ) GO TO 200 00747500
KWT=KWT+1 00747600
GO TO 203 00747700
204 TA=RC(KWT) 00747800
210 DEVWT=DEVWT+TA*T**2 00747900
200 IF(T.LT.0) GO TO 230 00748000
IPLUS=IPLUS+1 00748100
ICI=+1 00748200
GO TO 240 00748300
230 IMINUS=IMINUS+1 00748400
ICI=-1 00748500
240 IF(IC.EQ.ICI) GO TO 250 00748600
IC=ICI 00748700
IDRUNS=IDRUNS+1 00748800
250 KWT=KWT+1 00748900
A(13)=DEVWT/(A(2)-1.) 00749000
A(9)=FSQRT(A(13)) 00749100
A(10)=A(9)/FSQRT(WT) 00749200
A(14)=100.*A(9)/A(4) 00749300
A(28)=IPLUS 00749400
A(29)=IMINUS 00749500
A(31)=1.+(2.*A(28)*A(29)/A(2)) 00749600
A(32)=FSQRT((2.*A(28)*A(29)*(2.*A(28)*A(29)-A(28)-A(29))) / 00749700
1( (A(28)+A(29))**2*(A(2)-1.))) 00749800
A(36)=(DEV3/A(2))**2/( (A(2)-1.)/A(2)*A(13))**3 00749900
A(37)=(DEV4/A(2))/( (A(2)-1.) /A(2)*A(13))**2 00750000
A(38)=SUMWT 00750100
A(40)=DEVWT 00750200
A(30)=IDRUNS 00750300
A(33)=(A(30)-A(31))/A(32) 00750400
A(19)=12.*DEVI/(A(2)*(A(2)**2-1.)) 00750500
A(20)=FSQRT((1./(A(2)-2.))*(12.*DEV2/(A(2)*(A(2)**2-1.))-A(19)**2)00750600
1) 00750700
A(21)=A(19)/A(20) 00750800
CALL PROB(ONE,A(2)-ONE ,A(21)*A(21),A(22)) 00750900
DIF=0 00751000
IRUN=1 00751100
TA=SA(2,2)-SA(1,2) 00751200
DO 300 I=2,IXN 00751300
T=SA(I,2)-SA(I-1,2) 00751400
DIF=DIF+T**2 00751500
IF (TA*T.GE.0) GO TO 300 00751600
TA=T 00751700
IRUN=IRUN+1 00751800
300 CONTINUE 00751900
A(23)=IRUN 00752000
A(26)=DIF/(A(2)-1.) 00752100
A(27)=A(26)/A(13) 00752200
A(41)=A(4)*FSQRT(WT)/A(9) 00752300
A(12)=ADEV /A(2) 00752400
NU=NZW-1 00752500
VNU=NU 00752600
T=ZERO 00752700
TK1=ZERO 00752800
TK2=ZERO 00752900
IF(NU.GE.5) GO TO 1210 00753000
DO 1200 I=1,4 00753100
V=I/NU 00753200
T=T+BCON(I)*V 00753300
TK2=BKCON(I)*V+TK2 00753400
1200 TK1=TK1+AKCON(I)*V 00753500
GO TO 1260 00753600
1210 T= (((( AT5(6)/VNU+AT5(5))/VNU+AT5(4))/VNU+AT5(3))/VNU+AT5(2))/VNU00753700
1 +AT5(1) 00753800
IF (NU.GT. 10 ) GO TO 1230 00753900
DO 1220 I=1,6 00754000
V=(I+4)/NU 00754100
TK1=TK1+CK1(I)*V 00754200
1220 TK2=TK2+DK2(I)*V 00754300
GO TO 1260 00754400
1230 IF(NU.GT.100) GO TO 1250 00754500
DO 1240 I=1,7 00754600
V=VNU**(I-4) 00754700
TK1=TK1+XK1(I)*V 00754800
1240 TK2=TK2+YK2(I)*V 00754900
GO TO 1260 00755000
1250 V2=FSQRT(TWO*VNU) 00755100
V2M1=FSQRT(TWO*VNU-ONE) 00755200
TK1=V2/(CONK +V2M1) 00755300
TK2=V2/(-CONK+V2M1) 00755400
1260 A(15)=A(4)-T*A(10) 00755500
A(16)=A(4)+T*A(10) 00755600
A(17)=TK1*A(9) 00755700
A(18)=TK2*A(9) 00755800
C**** START PRINT OUT 00755900
IF(L2.EQ.2) GO TO 930 00756000
CALL PAGE (4) 00756100
IF(IWT.EQ.2) GO TO 760 00756200
WRITE(IPRINT,1000)NXCOL,NZW 00756300
GO TO 785 00756400
760 IF(NZW.NE.NRMAX) GO TO 770 00756500
WRITE(IPRINT,1010) NXCOL,NXWT,NZW 00756600
GO TO 780 00756700
770 WRITE(IPRINT,1020) NXCOL,NXWT,NZW,NRMAX 00756800
780 WRITE (IPRINT,1030) 00756900
785 DO 790 I=1,10 00757000
790 IB(I)=A(I+50) 00757100
WRITE(IPRINT,1040) (IB(I),I=1,10) 00757200
WRITE(IPRINT,1050) 00757300
WRITE(IPRINT,1060) ( A(I+2),A(I+8),I=1,6) 00757400
WRITE(IPRINT,1070) (A(I),I=15,18) 00757500
WRITE(IPRINT,1080) (A(I),A(I+15),I=19,22),(A(I),I=38,41) 00757600
IB(1)=A(23) 00757700
IB(2)=A(28) 00757800
IB(3)=A(29) 00757900
IB(4)=A(30) 00758000
WRITE(IPRINT,1090) IB(1),(A(I),I=24,27),(IB(I),I=2,4), 00758100
1(A(I),I=31,33) 00758200
WRITE(IPRINT,1100) 00758300
KB=ISA(1) 00758400
T=SA(KB,2) 00758500
LINEP=40 00758600
LINE=0 00758700
LW=IARGS(2) 00758800
DO 870 I=1,IXNM1 00758900
IF(LINEP.LT.40) GO TO 810 00759000
LINEP=0 00759100
CALL PAGE (4) 00759200
WRITE(IPRINT,1110) 00759300
IF(IWT.EQ.1) GO TO 800 00759400
WRITE(IPRINT,1120) 00759500
GO TO 810 00759600
800 WRITE(IPRINT,1130) 00759700
810 K=ISA(I+1) 00759800
TA=SA(K,2)-T 00759900
GO TO (850,840),IWT 00760000
840 IF(RC(LW).NE.0) GO TO 845 00760100
LW=LW+1 00760200
GO TO 840 00760300
845 WRITE(IPRINT,1150) I,SA(I,2),SA(I,1),SA(I,3),RC(LW),ISA(I),T,TA 00760400
LW=LW+1 00760500
GO TO 860 00760600
850 WRITE(IPRINT,1140)I,SA(I,2),SA(I,1),SA(I,3),ISA(I),T,TA 00760700
860 T=SA(K,2) 00760800
LINE=LINE+1 00760900
IF(LINE.NE.10) GO TO 870 00761000
LINE=0 00761100
LINEP=LINEP+10 00761200
WRITE(IPRINT,1160) 00761300
870 CONTINUE 00761400
IF(IWT.EQ.1) GO TO 920 00761500
900 IF(RC(LW).NE.0) GO TO 910 00761600
LW=LW+1 00761700
GO TO 900 00761800
910 WRITE (IPRINT,1150) NZW,SA(NZW,2),SA(NZW,1),SA(NZW,3),RC(LW), 00761900
1 ISA(NZW),T 00762000
GO TO 930 00762100
920 WRITE(IPRINT,1140) NZW,SA(NZW,2),SA(NZW,1),SA(NZW,3),ISA(NZW),T 00762200
930 IF(ISTORE.EQ.2) RETURN 00762300
IF(NARGS.EQ.2.OR.NARGS.EQ.3) GO TO 940 00762400
L=IARGS(NARGS-3) 00762500
M=IARGS(NARGS-2) 00762600
K=IARGS(NARGS-1) 00762700
J=IARGS(NARGS) 00762800
GO TO 950 00762900
940 L=IARGS(NARGS) 00763000
M=L+NROW 00763100
K=M+NROW 00763200
J=K+NROW 00763300
950 DO 960 I=1,NZW 00763400
MB=ISA(I) 00763500
RC(K)=SA(MB,2) 00763600
RC(M)=SA(I,1) 00763700
RC(J)=SA(I,3) 00763800
M=M+1 00763900
K=K+1 00764000
960 J=J+1 00764100
IF(NZW.EQ.NRMAX) GO TO 975 00764200
NZW1=NZW+1 00764300
DO 970 I=NZW1,NRMAX 00764400
RC(M)=0. 00764500
RC(K)=0. 00764600
RC(J)=0. 00764700
M=M+1 00764800
K=K+1 00764900
970 J=J+1 00765000
975 NTOP=60 00765100
IF ( NROW .LT. NTOP ) NTOP = NROW 00765200
DO 980 I=1,NTOP 00765300
RC(L)=A(I) 00765400
980 L=L+1 00765500
IF(NRMAX.LT.60) RETURN 00765600
DO 990 I=61,NRMAX 00765700
RC(L)=0. 00765800
990 L=L+1 00765900
RETURN 00766000
1000 FORMAT(1H0,4X,28HSTATISTICAL ANALYSIS OF COL ,I4,33X,4HN = ,I4) 00766100
1010 FORMAT(1H0,4X,28HSTATISTICAL ANALYSIS OF COL ,I4,8X,15HWEIGHTS IN 00766200
1COL ,I4,6X,4HN = ,I4) 00766300
1020 FORMAT(1H0,4X,28HSTATISTICAL ANALYSIS OF COL ,I4,8X,15HWEIGHTS IN 00766400
1COL ,I4,6X,4HN = ,I4,33H(NO OF NON-ZERO WTS) COL LENGTH =,I4) 00766500
1030 FORMAT(1H0,24X,64HALL COMPUTATIONS ARE BASED ON OBSERVATIONS WITH 00766600
1NON-ZERO WEIGHTS ) 00766700
1040 FORMAT(1H0/15X,28HFREQUENCY DISTRIBUTION (1-6),7X,10I6) 00766800
1050 FORMAT(1H0/5X, 26HMEASURES OF LOCATION (2-2),34X,28HMEASURES OF DI00766900
1SPERSION (2-6)) 00767000
1060 FORMAT(1H0, 00767100
1 9X,26HUNWEIGHTED MEAN =, 1PE15.7,20X, 00767200
2 26HSTANDARD DEVIATION =, E15.7 / 00767300
310X,26HWEIGHTED MEAN =, E15.7,20X, 00767400
4 26HS.D. OF MEAN =, E15.7 / 00767500
510X,26HMEDIAN =, E15.7,20X 00767600
6 26HRANGE =, E15.7 / 00767700
710X,26HMID-RANGE =, E15.7,20X, 00767800
8 26HMEAN DEVIATION =, E15.7 / 00767900
910X,26H5 PCT UNWTD TRIMMED MEAN =, E15.7,20X 00768000
A 26HVARIANCE =, E15.7 / 00768100
B10X,26H5 PCT WTD TRIMMED MEAN =, E15.7,20X 00768200
C 26HCOEFFICIENT OF VARIATION =, E15.7 ) 00768300
1070 FORMAT (1H0// 00768400
120X,50HA TWO-SIDED 95 PCT CONFIDENCE INTERVAL FOR MEAN IS 1PE11.4,00768500
2 3H TO,E11.4, 6H (2-2)/ 00768600
320X,50HA TWO-SIDED 95 PCT CONFIDENCE INTERVAL FOR S.D. IS, E11.4, 00768700
4 3H TO,E11.4, 6H (2-7)) 00768800
1080 FORMAT 00768900
1(1H0//5X,30HLINEAR TREND STATISTICS (5-1) ,30X,16HOTHER STATISTICS00769000
2//10X,5HSLOPE,20X,1H=,1PE15.7,20X,7HMINIMUM,18X,1H=,E15.7/ 00769100
3 10X,13HS.D. OF SLOPE,12X,1H=,E15.7,20X,7HMAXIMUM,18X,1H=,E15.7/ 00769200
4 10X,26HSLOPE/S.D. OF SLOPE = T =,E15.7,20X,8HBETA ONE,17X,1H=, 00769300
5 E15.7/10X,35HPROB EXCEEDING ABS VALUE OF OBS T =,0PF6.3,20X, 00769400
6 8HBETA TWO,17X,1H=,1PE15.7/71X,17HWTD SUM OF VALUES,8X,1H=,E15.7/00769500
7 71X,18HWTD SUM OF SQUARES,7X,1H=,E15.7/5X,24HTESTS FOR NON-RANDO00769600
8MNESS,42X,26HWTD SUM OF DEVS SQUARED =,E15.7/71X,11HSTUDENT"S T, 00769700
9 14X,1H=,E15.7) 00769800
1090 FORMAT( 10X, 26HNO OF RUNS UP AND DOWN =,I5/10X,26HEXPECTED NO O00769900
1F RUNS = ,F7.1/10X,26HS.D. OF NO OF RUNS =,F8.2/10X 00770000
2 26HMEAN SQ SUCCESSIVE DIFF =,1PE16.7/10X,26HMEAN SQ SUCC DIFF/V00770100
3AR =,0PF9.3///10X,24HDEVIATIONS FROM WTD MEAN//15X,21HNO OF + S00770200
4IGNS =,I5/15X,21HNO OF - SIGNS =I5/15X,10HNO OF RUNS, 00770300
5 10X,1H=,I5/15X,21HEXPECTED NO OF RUNS =,F7.1/15X,12HS.D. OF RUNS,00770400
6 8X,1H=,F8.2/15X,21HDIFF./S.D. OF RUNS =F9.3) 00770500
1100 FORMAT(/////68H NOTE - ITEMS IN PARENTHESES REFER TO PAGE NUMBER I00770600
1N NBS HANDBOOK 91) 00770700
1110 FORMAT(// 27X,12HOBSERVATIONS,47X,20HORDERED OBSERVATIONS) 00770800
1120 FORMAT(1H0,8X,1HI,9X, 4HX(I),9X,4HRANK,7X, 9HX(I)-MEAN,7X,4HW(I) 00770900
1, 16X, 3HNO.,8X,4HX(J), 10X, 11HX(J+1)-X(J)) 00771000
1130 FORMAT(1H0,8X,1HI, 9X, 4HX(I),9X,4HRANK,7X, 9HX(I)-MEAN,27X, 00771100
1 3HNO.,8X, 4HX(J), 10X, 11HX(J+1)-X(J)) 00771200
1140 FORMAT(I10,1PE17.7,0PF9.1,1PE17.7,22X,I6,1P2E17.7) 00771300
1150 FORMAT(I10,1PE17.7,0PF9.1,1PE17.7,1PE12.3,10X,I6,1P2E17.7) 00771400
1160 FORMAT(1H ) 00771500
END 00771600
C 96 54 SUBROUTINE STMT( NSTMT ) 2 19 68 00771700
SUBROUTINE STMT( NSTMT ) 00771800
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00771900
C 00772000
C THIS SUBROUTINE ASSEMBLES AND CHECKS A STATEMENT NUMBER. 00772100
C 00772200
C CALLED BY.. .MAIN. 00772300
C 00772400
MISC=10*KARD(M) 00772500
10 M=M+1 00772600
K=KARD(M) 00772700
IF(K.GE.10)GO TO 30 00772800
MISC=10*(MISC+K) 00772900
IF(MISC.LT.10000)GO TO 10 00773000
C 00773100
C ILLEGAL STATEMENT NUMBER EXIT 00773200
C 00773300
20 KARG=1 00773400
RETURN 00773500
C 00773600
C NON-NUMERIC FOUND, IS IT A . 00773700
C 00773800
30 IF(K.EQ.37)GO TO 50 00773900
C 00774000
C IS IT A / 00774100
C 00774200
40 IF(K.EQ.36)GO TO 70 00774300
C 00774400
C IS IT A SPACE 00774500
C 00774600
IF(K-44)20,60,20 00774700
C 00774800
C . FOUND, MUST BE FOLLOWED BY ONE AND ONLY ONE NUMERAL 00774900
C 00775000
50 M=M+1 00775100
K=KARD(M) 00775200
IF(K.GE.10)GO TO 20 00775300
MISC=MISC+K 00775400
60 M=M+1 00775500
K=KARD(M) 00775600
GO TO 40 00775700
70 M=M+1 00775800
K=KARD(M) 00775900
C 00776000
C / FOUND, MUST BE FOLLOWED BY BLANKS THEN/OR A LETTER 00776100
C 00776200
IF(K.EQ.44)GO TO 70 00776300
IF(K.GE.36.OR.K.LT.10)GO TO 20 00776400
C 00776500
C LEGAL STATEMENT NUMBER FOUND 00776600
C 00776700
NSTMT=MISC 00776800
KARG=0 00776900
RETURN 00777000
END 00777100
C 97 78 SUBROUTINE STORE( J ) 2 19 68 00777200
SUBROUTINE STORE( J ) 00777300
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00777400
COMMON /BLOCKB/NSTMT,NSTMTX,NSTMTH,NCOM,LCOM,IOVFL,COM(2000) 00777500
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00777600
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00777700
DIMENSION ARGS(100) 00777800
EQUIVALENCE( ARGS(1), RC(10001) ) 00777900
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00778000
C STORAGE LAYOUT.. STATEMENT NUMBER 00778100
C NUMBER OF WORDS IN ENTRY 00778200
C NARGS+64*(L1+64*L2) 00778300
C ALL ITEMS ARE STORED IN ( ENTRY 1 ) 00778400
C FLOATING POINT TO ALLOW ( 2 ) 00778500
C CONVERSION TO DOUBLE- ..... 00778600
C PRECISION. ( LAST WORD ) 00778700
C 00778800
IF(IOVFL .NE. 0 ) RETURN 00778900
IZE = J + 2 00779000
IF( NSTMT .GT. NSTMTH ) GO TO 80 00779100
C 00779200
C STATEMENT IS AN INSERTION OR A REPLACEMENT 00779300
C 00779400
L = NSTMT 00779500
L = LOCATE( L ) 00779600
IF( L .GT. 0 ) GO TO 30 00779700
C 00779800
L = -L 00779900
IDIF = IZE 00780000
10 LL = NCOM 00780100
C STATEMENT IS AN INSERTION, OPEN GAP 00780200
II = LL + IDIF 00780300
IF( II .GE. LCOM ) GO TO 90 00780400
DO 20 I = L, NCOM 00780500
COM( II ) = COM( LL ) 00780600
II = II - 1 00780700
20 LL = LL - 1 00780800
GO TO 60 00780900
C 00781000
C STATEMENT IS REPLACEMENT 00781100
C 00781200
30 IDIF = IZE - IFIX( COM( L+1 ) ) 00781300
IF( IDIF ) 40, 60, 10 00781400
C 00781500
C NEW STATEMENT SMALLER THAN OLD, CLOSE UP GAP. 00781600
C 00781700
40 I = L - IDIF 00781800
II = L 00781900
DO 50 JJ= I, NCOM 00782000
COM( II ) = COM( JJ) 00782100
50 II = II + 1 00782200
C 00782300
C INSERT STATEMENT 00782400
C 00782500
60 COM( L ) = NSTMT 00782600
COM( L+1 ) = IZE 00782700
COM( L+2 ) = NARGS + 64 * ( L1 + 64 * L2 ) 00782800
NCOM = NCOM + IDIF 00782900
IF( IZE .EQ. 3 ) GO TO 75 00783000
DO 70 I = 4, IZE 00783100
COM( L+3 ) = ARGTAB( I-3 ) 00783200
70 L = L + 1 00783300
75 CONTINUE 00783400
RETURN 00783500
C 00783600
C PUT STATEMENT ON END 00783700
C 00783800
80 L = NCOM 00783900
IDIF = IZE 00784000
NSTMTX = NSTMTH 00784100
NSTMTH = NSTMT 00784200
IF( NCOM + IDIF .LT. LCOM ) GO TO 60 00784300
C 00784400
C COM STORAGE OVERFLOW 00784500
C 00784600
90 IOVFL = 1 00784700
CALL ERROR( 12 ) 00784800
RETURN 00784900
END 00785000
C 98 26 SUBROUTINE STRUVE 2 19 68 00785100
SUBROUTINE STRUVE (Z,A,B) 00785200
DOUBLE PRECISION Z,A,B,C,X,P,Q,R,S 00785300
COMMON /RJN/C(100),X 00785400
X=DABS(Z) 00785500
IF (X.GT.70.) GO TO 2 00785600
CALL BEJN 00785700
P=.0D0 00785800
Q=.0D0 00785900
DO 1 N=1,49 00786000
J=2*N 00786100
K=J+1 00786200
R=J-1 00786300
S=4*N**2-1 00786400
P=P+C(J)/R 00786500
1 Q=Q+C(K)/S 00786600
A=P/.78539816339D0 00786700
B=(2.D0*Q+1.D0-C(1))/1.5707963268D0 00786800
GO TO 3 00786900
2 S=1.D0/X**2 00787000
P=1.D0-S*(1.D0-9.D0*S*(1.D0-25.D0*S*(1.D0-49.D0*S))) 00787100
A=DBEY(X,0)+P/(X*1.5707963268D0) 00787200
Q=1.D0+S*(1.D0-3.D0*S*(1.D0-15.D0*S*(1.D0-35.D0*S))) 00787300
B=DBEY(X,1)+Q/( 1.5707963268D0) 00787400
3 RETURN 00787500
END 00787600
C 99 172 SUBROUTINE TRANSF 2 19 68 00787700
SUBROUTINE TRANSF 00787800
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00787900
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00788000
DIMENSION ARGS(100) 00788100
EQUIVALENCE( ARGS(1), RC(10001) ) 00788200
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00788300
C ***** 00788400
C SUBROUTINE TO PROVIDE TRANSFORMATIONS B=UAU(T) AND C=U(I)AU 00788500
C L2=1 TRANSFORMATION B=UAU(T) 00788600
C GENERAL FORMS OF TRANSFORM 00788700
C TRANSFORM A(,) R=N R=M ROWS OF U (,) STORE IN C(,) 00788800
C M(XAXT) A(,) K,K U(,) N,K STORE IN C(,) 00788900
C M(XAXT) A(,) K U(,) N,K STORE IN C(,) 00789000
C L2=2 BACK TRANSFORMATION C=U(T)ALL 00789100
C GENERAL FORMS OF BACKTRANS 00789200
C BACKTRANS A(,) R=N R=M ROWS OF U(T)(,) STORE IN C(,)00789300
C M(XTAX) A(,) N,N U(,) N,K STORE IN C(,)00789400
C M(XTAX) A(,) N U(,) N,K STORE IN C(,)00789500
C ***** 00789600
COMMON / SCRAT / X,NS 00789700
DIMENSION A(10000) 00789800
DOUBLE PRECISION X(5000), SUM 00789900
DIMENSION IR(4),ISAVE(2) 00790000
EQUIVALENCE (IR,ISAVE) 00790100
COMMON /MULTC/NS2 00790200
C ***** 00790300
C CHECK TO SEE IF WE HAVE CORRECT NUMBER OF ARGUMENTS 00790400
C ***** 00790500
IF(NARGS.GT.10.OR.NARGS.LT.8) CALL ERROR(10) 00790600
C ***** 00790700
C CHECK TO SEE IF ALL ARGUMENTS ARE INTEGERS 00790800
C ***** 00790900
J=NARGS 00791000
CALL CKIND(J) 00791100
IF(J.NE.0) CALL ERROR(3) 00791200
C ***** 00791300
C CHECK TO SEE IF DIMENSIONS ARE CORRECT 00791400
C ***** 00791500
IF(NARGS.EQ.8) GO TO 230 00791600
IF(NARGS.EQ.10) GO TO (200, 220 ),L2 00791700
GO TO (160,180),L2 00791800
160 IF(IARGS(3).NE.IARGS(7)) CALL ERROR(3) 00791900
GO TO 230 00792000
180 IF(IARGS(3).NE.IARGS(6)) CALL ERROR(3) 00792100
GO TO 230 00792200
200 IF(IARGS(3).NE.IARGS(4).OR.IARGS(3).NE.IARGS(8)) CALL ERROR(3) 00792300
GO TO 230 00792400
220 IF(IARGS(3).NE.IARGS(4).OR.IARGS(3).NE.IARGS(7)) CALL ERROR(3) 00792500
C ***** 00792600
C CHECK TO SEE IF DIMENSIONS ARE OUT OF RANGE 00792700
C ***** 00792800
230 IR(1)=IARGS(1) 00792900
IR(2)=IARGS(2) 00793000
IR(3)=IARGS(3) 00793100
IR(4)=IARGS(3) 00793200
CALL MACHK(IR,J) 00793300
IF(J.NE.0) CALL ERROR(17) 00793400
IF(NARGS.EQ.9) GO TO 300 00793500
IR(1)=IARGS(5) 00793600
IR(2)=IARGS(6) 00793700
IF(NARGS.EQ.10) GO TO 280 00793800
GO TO (240 , 260 ),L2 00793900
240 IR(3)=IARGS(4) 00794000
IR(4)=IARGS(3) 00794100
GO TO 340 00794200
260 IR(3)=IARGS(3) 00794300
IR(4)=IARGS(4) 00794400
GO TO 340 00794500
280 IR(3)=IARGS(7) 00794600
IR(4)=IARGS(8) 00794700
GO TO 340 00794800
300 DO 320 I=1,4 00794900
320 IR(I)=IARGS(I+3) 00795000
340 CALL MACHK(IR,J) 00795100
IF(J.NE.0) CALL ERROR(17) 00795200
IR(1)=IARGS(NARGS-1) 00795300
IR(2)=IARGS(NARGS) 00795400
IF(NARGS.EQ.8) GO TO 420 00795500
GO TO (360, 380),L2 00795600
360 IJ=7 00795700
GO TO 400 00795800
380 IJ=8 00795900
400 IF(NARGS.EQ.9) GO TO 410 00796000
IR(3)=IARGS(IJ) 00796100
IR(4)=IARGS(IJ) 00796200
GO TO 440 00796300
410 IR(3)=IARGS(IJ-1) 00796400
IR(4)=IARGS(IJ-1) 00796500
GO TO 440 00796600
420 IR(3)=IARGS(4) 00796700
IR(4)=IARGS(4) 00796800
440 CALL MACHK(IR,J) 00796900
IF(J.NE.0) CALL ERROR(17) 00797000
C ***** 00797100
C CHECK FOR PREVIOUS ERRORS 00797200
C ***** 00797300
IF(NERROR.NE.0) RETURN 00797400
C ***** 00797500
C FIND ADDRESSES OF COLUMNS 00797600
C ***** 00797700
NP=NARGS 00797800
ISAVE(1)=IARGS(1) 00797900
ISAVE(2)=IARGS(3) 00798000
IARGS(1)=IARGS(2) 00798100
IF(NARGS.EQ.9) GO TO 460 00798200
IARGS(2)=IARGS(6) 00798300
GO TO 480 00798400
460 IARGS(2)=IARGS(5) 00798500
480 IARGS(3)=IARGS(NARGS) 00798600
NARGS=3 00798700
CALL CHKCOL(J) 00798800
IARGS(1)=IARGS(1)+ISAVE(1)-1 00798900
IF(NP.EQ.9) GO TO 500 00799000
IARGS(2)=IARGS(2)+IARGS(5)-1 00799100
GO TO 520 00799200
500 IARGS(2)=IARGS(2)+IARGS(4)-1 00799300
520 IARGS(3)=IARGS(3)+IARGS(NP-1)-1 00799400
NS2=NS/2 00799500
IROWA=ISAVE(2) 00799600
ISP=1 00799700
IF(NP.EQ.8) GO TO 560 00799800
IF(NP.EQ.10) GO TO 540 00799900
IROWU=IARGS(L2+5) 00800000
GO TO 580 00800100
540 IROWU=IARGS(L2+6) 00800200
GO TO 580 00800300
560 IROWU=IARGS(4) 00800400
580 GO TO (600 ,620),L2 00800500
600 IADD1=1 00800600
IADD2=NROW 00800700
GO TO 640 00800800
620 IADD1=NROW 00800900
IADD2=1 00801000
640 DO 720 J=1,IROWU 00801100
DO 700 I=1,IROWU 00801200
IUP=IARGS(2)+(I-1)*IADD1 00801300
IA=IARGS(1) 00801400
IUT=IARGS(2)+(J-1)*IADD1 00801500
ISX=NS2 00801600
DO 680 L=1,IROWA 00801700
IU=IUP 00801800
DO 660 K=1,IROWA 00801900
X(ISX)=RC(IU)*RC(IA)*RC(IUT) 00802000
ISX=ISX-1 00802100
IU=IU+IADD2 00802200
IA=IA+1 00802300
660 CONTINUE 00802400
IA=IA+NROW-IROWA 00802500
IUT=IUT+IADD2 00802600
680 CONTINUE 00802700
CALL SORTSM (IROWA*IROWA,SUM) 00802800
A(ISP)=SUM 00802900
ISP=ISP+1 00803000
700 CONTINUE 00803100
IC=IC+NROW-IROWU 00803200
720 CONTINUE 00803300
C ***** 00803400
C STORE RESULTS IN WORKSHEET 00803500
C ***** 00803600
IS=1 00803700
IC=IARGS(3) 00803800
DO 820 J=1,IROWU 00803900
DO 800 I=1,IROWU 00804000
RC(IC)=A(IS) 00804100
IS=IS+1 00804200
IC=IC+1 00804300
800 CONTINUE 00804400
IC=IC+NROW-IROWU 00804500
820 CONTINUE 00804600
RETURN 00804700
END 00804800
C 100 21 SUBROUTINE VARCON(NAME) 2 19 68 00804900
SUBROUTINE VARCON(NAME) 00805000
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00805100
DIMENSION NAME(2),N(14) 00805200
DATA N(1),N(2),N(3),N(4),N(5),N(6),N(7),N(8),N(9),N(10),N(11), 00805300
1 N(12),N(13),N(14)/10705,2604,16038,16767,17496,18225,18954,1377, 00805400
2 15001,5*0/ 00805500
C 00805600
C LOOKUP NAME IN VARIABLE-NAME TABLE 00805700
C 00805800
C NAMES IN TABLE 00805900
C 00806000
C NRMAX,COLTOP,V,W,X,Y,Z 00806100
C 00806200
DO 10 IM=1,7 00806300
I = IM 00806400
IF(NAME(1).EQ.N(I).AND.NAME(2).EQ.N(I+7))GO TO 20 00806500
10 CONTINUE 00806600
I=0 00806700
20 ARG=I 00806800
RETURN 00806900
END 00807000
C 101 14 SUBROUTINE VECTOR( A, J ) 2 19 68 00807100
SUBROUTINE VECTOR( A, J ) 00807200
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00807300
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00807400
DIMENSION ARGS(100) 00807500
EQUIVALENCE( ARGS(1), RC(10001) ) 00807600
C 00807700
C VECTORIZE A IN TO COLUMN STARTING AT J 00807800
C 00807900
IF( NRMAX .EQ. 0 ) GO TO 20 00808000
K = J + NRMAX - 1 00808100
DO 10 I = J, K 00808200
10 RC( I ) = A 00808300
20 RETURN 00808400
END 00808500
C 102 6 SUBROUTINE X(S) 2 19 68 00808600
SUBROUTINE X(S) 00808700
PRINT 10, S 00808800
10 FORMAT(A6) 00808900
RETURN 00809000
END 00809100
C 103 346 SUBROUTINE XECUTE 2 19 68 00809200
SUBROUTINE XECUTE 00809300
COMMON / FLAGS / NSUMRY, LLIST 00809400
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00809500
COMMON /BLOCKB/NSTMT,NSTMTX,NSTMTH,NCOM,LCOM,IOVFL,COM(2000) 00809600
COMMON /BLOCKC/KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00809700
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00809800
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00809900
DIMENSION ARGS(100) 00810000
EQUIVALENCE( ARGS(1), RC(10001) ) 00810100
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00810200
COMMON / BLOCKX / INDEX( 6, 8 ), LEVEL 00810300
90 IF ( L1 .LE. 30 ) GO TO 00810400
1(100, 200, 200, 400, 500, 200, 700, 800, 900, 1000, 1100, 00810500
2 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200,00810600
3 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000 ), L1 00810700
CALL GOJOB 00810800
GO TO 9000 00810900
100 CALL RESET 00811000
GO TO 9000 00811100
200 CALL PRINTX 00811200
GO TO 9000 00811300
400 IF( L2 .NE. 1 ) GO TO 402 00811400
401 NSUMRY = 0 00811500
GO TO 9000 00811600
C 00811700
C NO LIST OR NOLIST 00811800
C 00811900
C LIST (WITH NO ARGUMENT) = LIST 3 00812000
C LIST 0 = NO LISTING LIST 1 = LIST ONLY INFORMATIVE DIAGS00812100
C LIST 2 = LIST ONLY ARITH ERR LIST 3 = LIST BOTH TYPES OF ERRORS 00812200
C 00812300
C IF A FATAL ERROR OCCURS, LLIST IS SET TO AND KEPT AT 3 00812400
C 00812500
402 IARGS(1) = 0 00812600
404 IF( NERROR .EQ. 0 ) LLIST = IARGS( 1 ) 00812700
WRITE( ISCRAT, 406 ) IARGS( 1 ) 00812800
406 FORMAT(1H,,I1,82X) 00812900
GO TO 9000 00813000
C 00813100
C LIST 00813200
C 00813300
410 IF( NARGS .EQ. 0 .OR. IARGS(1) .LT. 0 .OR. IARGS(1).GT.3) 00813400
1 IARGS(1) = 3 00813500
GO TO 404 00813600
500 CALL READX 00813700
GO TO 9000 00813800
700 CALL DUMMY 00813900
GO TO 9000 00814000
800 CALL MXTX 00814100
GO TO 9000 00814200
900 CALL APRINT 00814300
GO TO 9000 00814400
1000 GO TO 9000 00814500
1100 CALL ARITH 00814600
GO TO 9000 00814700
1200 CALL FUNCT 00814800
GO TO 9000 00814900
1300 GO TO ( 1301,1302,1303,1304,1305, 401,1307,1308,1309,1310,1312, 00815000
1 1312,1313,1305), L2 00815100
1301 CALL GENER 00815200
GO TO 9000 00815300
1302 CALL SET 00815400
GO TO 9000 00815500
1303 CONTINUE 00815600
1304 CALL FIXFLO 00815700
GO TO 9000 00815800
1305 CALL PLOT 00815900
GO TO 9000 00816000
1307 NSUMRY = 1 00816100
GO TO 9000 00816200
1308 CALL PAGE( 4 ) 00816300
GO TO 9000 00816400
1309 CALL SPACE 00816500
GO TO 9000 00816600
1310 CALL PHYCON( 0 ) 00816700
GO TO 9000 00816800
1312 CALL PHYCON( -1 ) 00816900
GO TO 9000 00817000
1313 CALL PAGEX 00817100
GO TO 9000 00817200
1400 IF( L2 .GT. 2 ) GO TO 1410 00817300
CALL BEGIN 00817400
GO TO 9000 00817500
1410 IF( L2 .LE. 5 ) GO TO 13000 00817600
IF( L2 .LE. 8 ) GO TO 14000 00817700
CALL IFS 00817800
GO TO 9000 00817900
1500 CALL MOP 00818000
GO TO 9000 00818100
1600 CALL INVERT 00818200
GO TO 9000 00818300
1700 IF( L2 .EQ. 2 ) GO TO 1720 00818400
CALL MMULT 00818500
GO TO 9000 00818600
1720 CALL MRAISE 00818700
GO TO 9000 00818800
1800 CALL MATRIX 00818900
GO TO 9000 00819000
1900 CALL ALLSUB 00819100
GO TO 9000 00819200
2000 CALL MSCROW 00819300
GO TO 9000 00819400
2100 GO TO ( 2101, 2101, 2103, 2104, 2104, 2104, 2104, 2108, 2108, 00819500
1 2110, 2111, 2112, 2113,2108,410 , 402, 9000), L2 00819600
2101 CALL PROROW 00819700
GO TO 9000 00819800
2103 CALL DEFINE 00819900
GO TO 9000 00820000
2104 CALL EXTREM 00820100
GO TO 9000 00820200
2108 CALL SORDER 00820300
GO TO 9000 00820400
2110 CALL ERASE 00820500
GO TO 9000 00820600
2111 CALL EXCHNG 00820700
GO TO 9000 00820800
2112 CALL FLIP 00820900
GO TO 9000 00821000
2113 CALL CHANGE 00821100
GO TO 9000 00821200
2200 CALL ORTHO 00821300
GO TO 9000 00821400
2300 GO TO ( 2310, 2310, 2310, 2310, 2310, 2320, 2320,2320, 2320, 2330,00821500
1 2330, 2340, 2350, 2350 ), L2 00821600
2310 CALL MISC2 00821700
GO TO 9000 00821800
2320 CALL MOVE 00821900
GO TO 9000 00822000
2330 CALL PDMOTE 00822100
GO TO 9000 00822200
2340 CALL DIMENS 00822300
GO TO 9000 00822400
2350 CALL SEPINS 00822500
GO TO 9000 00822600
2400 GO TO ( 2410, 2410, 2430, 2440, 2450 ), L2 00822700
2410 CALL STATIS 00822800
GO TO 9000 00822900
2430 CALL ERROR( 0 ) 00823000
GO TO 9000 00823100
2440 CALL ERROR( -1 ) 00823200
GO TO 9000 00823300
2450 CALL FPROB 00823400
GO TO 9000 00823500
2500 CALL SELECT 00823600
GO TO 9000 00823700
2600 CONTINUE 00823800
CALL YATES 00823900
GO TO 9000 00824000
2700 CONTINUE 00824100
CALL EXPCON 00824200
2800 CONTINUE 00824300
2900 CONTINUE 00824400
3000 CONTINUE 00824500
9000 CALL AERR( 0 ) 00824600
9009 IF( LEVEL .GT. 0 ) GO TO 13130 00824700
RETURN 00824800
C THIS IS WHERE THE REPEAT = EXECUTE = PERFORM COMMAND IS 00824900
C EXECUTED. NESTED PERFORMS UP TO EIGHT LEVELS ARE ALLOWED. 00825000
C CURRENT LEVEL IS STORED IN -LEVEL- . 00825100
C 00825200
C INDEX( 1, LEVEL ) CONTAINS LOCATION OF COMMAND AT ARG1 (FIRST) 00825300
C INDEX( 2, LEVEL ) CONTAINS RUNNING INDEX FROM ARG 1 TO ARG 2 00825400
C INDEX( 3, LEVEL ) CONTAINS LOCATION OF COMMAND AT ARG2 (LAST) 00825500
C INDEX( 4, LEVEL ) CONTAINS THIRD ARG ( REPEAT COUNT ) 00825600
C INDEX( 5, LEVEL ) CONTAINS CURRENT LEVEL COUNTER (1 TO ARG 3) 00825700
C INDEX( 6, LEVEL ) CONTAINS STATEMENT NUMBER OF STATEMENT CURRENTLY00825800
C BEING EXECUTED. 00825900
C 00826000
13000 IF( NARGS - 3 ) 13002, 13010, 13008 00826100
13002 IF( NARGS - 1 ) 13008, 13004, 13006 00826200
C 00826300
C SECOND ARG MISSING, MAKE SAME AS FIRST ARG 00826400
C 00826500
13004 IARGS( 2 ) = IARGS( 1 ) 00826600
KIND( 2 ) = KIND( 1 ) 00826700
C 00826800
C THIRD ARG MISSING, SET TO INTEGER 1 00826900
C 00827000
13006 IARGS( 3 ) = 1 00827100
KIND( 3 ) = 0 00827200
GO TO 13020 00827300
13008 CALL ERROR( 10 ) 00827400
GO TO 9000 00827500
13010 IF( KIND( 3 ) .EQ. 0 .AND. IARGS( 3 ) .GT. 0 ) GO TO 13020 00827600
13015 CALL ERROR( 3 ) 00827700
GO TO 9000 00827800
13020 DO 13040 I = 1, 2 00827900
IF( KIND( I ) .EQ. 0 ) GO TO 13030 00828000
IARGS( I ) = 10. * ARGS( I ) + .5 00828100
GO TO 13035 00828200
13030 IARGS( I ) = 10 * IARGS( I ) 00828300
13035 IF( IARGS( I ) .GT. NSTMTH ) GO TO 13038 00828400
IARGS( I ) = LOCATE( IARGS( I )) 00828500
IF( IARGS( I ) .GT. 0 ) GO TO 13040 00828600
13038 CALL ERROR ( 13 ) 00828700
GO TO 9000 00828800
13040 CONTINUE 00828900
13045 IF( LEVEL .LT. 8 ) GO TO 13050 00829000
CALL ERROR( 19 ) 00829100
GO TO 9000 00829200
13050 IF( NERROR .NE. 0 ) GO TO 9000 00829300
LEVEL = LEVEL + 1 00829400
INDEX( 1, LEVEL ) = IARGS( 1 ) 00829500
INDEX( 3, LEVEL ) = IARGS( 2 ) 00829600
INDEX( 4, LEVEL ) = IARGS( 3 ) 00829700
INDEX( 5, LEVEL ) = 0 00829800
C OUTER LOOP 00829900
13100 INDEX( 5, LEVEL ) = INDEX( 5, LEVEL ) + 1 00830000
IF( INDEX( 5, LEVEL ) .LE. INDEX( 4, LEVEL ) ) GO TO 13110 00830100
C END OF OUTER LOOP, REDUCE LEVEL BY 1 00830200
LEVEL = LEVEL - 1 00830300
GO TO 9009 00830400
C INNER LOOP 00830500
13110 INDEX( 2, LEVEL ) = INDEX( 1, LEVEL ) 00830600
13130 I2 = INDEX( 2, LEVEL ) 00830700
IF( I2 .GT. INDEX( 3, LEVEL ) ) GO TO 13100 00830800
INDEX( 6, LEVEL ) = COM( I2) 00830900
K = COM( I2 + 1 ) 00831000
INDEX( 2, LEVEL ) = INDEX( 2, LEVEL ) + K 00831100
L2 = COM( I2 + 2 ) 00831200
L1 = L2 / 64 00831300
NARGS = L2 - 64 * L1 00831400
L2 = L1 / 64 00831500
L1 = L1 - 64 * L2 00831600
CALL EXPAND( K - 2, COM( I2 + 3 ) ) 00831700
GO TO 90 00831800
C 00831900
C L2 = 6,7,8 INCREMENT, INDEX, RESTORE 00832000
C 00832100
14000 IF( L2 - 7 ) 14010, 14500, 14020 00832200
C 00832300
C INCREMENT, T = 1. RESTORE, T = 0. 00832400
C 00832500
14010 T = 1. 00832600
GO TO 14030 00832700
14020 T = 0. 00832800
14030 IF( NARGS .GE. 2 ) GO TO 14040 00832900
14035 K = 10 00833000
GO TO 14410 00833100
14040 IF( KIND( 1 ) .EQ. 0 ) GO TO 14050 00833200
J = 10. * ARGS( 1 ) + .5 00833300
GO TO 14053 00833400
14050 J = 10 * IARGS ( 1 ) 00833500
14053 IF( J .GT. NSTMTH ) GO TO 14056 00833600
J = LOCATE( J ) 00833700
C J HAS LOCATION OF COMMAND TO BE MODIFIED 00833800
IF( J .GT. 0 ) GO TO 14060 00833900
14056 K = 13 00834000
GO TO 14410 00834100
14060 JJ = J + IFIX( COM( J+1 ) ) 00834200
C 00834300
C CHECK THAT COMMAND HAS THE PROPER NUMBER OF ARGUMENTS 00834400
C 00834500
IF( NARGS - 1 .NE. MOD( IFIX( COM( J+2) ), 64 ))GO TO 14035 00834600
J = J + 3 00834700
C SKIP OVER HEADER 00834800
C 00834900
C CHECK IF THIS COMMAND IS STORED. IF SO, PULL OUT INTO ARGTAB. 00835000
C 00835100
IF (LEVEL .EQ. 0 ) GO TO 14100 00835200
K = 2 * NARGS 00835300
DO 14070 I = 2, K 00835400
ARGTAB( I ) = COM( I2+4 ) 00835500
14070 I2 = I2 + 1 00835600
C I2 HAS LOCATION OF THIS COMMAND 00835700
14100 I = 2 + KIND( 1 ) 00835800
14200 IF( COM ( J ) ) 14280, 14210, 14260 00835900
C 00836000
C FLOATING POINT CONST. 00836100
C 00836200
14210 IF( ARGTAB( I ) ) 14212, 14220, 14400 00836300
C INCR. FLT. PT. CONSTANT BY "STATEMENT" 00836400
14212 IF( ARGTAB( I ) .EQ. -1. ) GO TO 14400 00836500
CALL XPND( ARGTAB(I) , K , Y , KND ) 00836600
IF( K .LT. 0 ) GO TO 14264 00836700
IF( KND .EQ. 0 ) GO TO 14400 00836800
COM( J+1 ) = T * COM( J+1 ) + Y 00836900
14214 J = J + 2 00837000
14216 I = I + K + 1 00837100
GO TO 14250 00837200
14220 COM( J+1 ) = T * COM( J+1 ) + ARGTAB( I+1 ) 00837300
14230 J = J + 2 00837400
14240 I = I + 2 00837500
14250 IF( J - JJ ) 14200, 14420, 14420 00837600
C 00837700
C COLUMN NUMBER 00837800
C 00837900
14260 IF ( ARGTAB( I ) ) 14262,14400,14268 00838000
C 00838100
C INTEGER CONSTANT MODIFIED BY "" STATEMANT"" 00838200
14262 IF ( ARGTAB( I ) .EQ. -1. ) GO TO 14400 00838300
CALL XPND( ARGTAB( I ) , K , Y,KND) 00838400
IF ( K .GE. 0 ) IF ( KND ) 14400,14266,14400 00838500
14264 K = -K 00838600
GO TO 14410 00838700
14266 COM( J ) = T * COM( J ) + Y 00838800
J=J+1 00838900
GO TO 14216 00839000
14268 COM( J ) = T * ( COM( J ) - 8192. ) + ARGTAB( I ) 00839100
IF( COM( J ) ) 14390, 14390, 14270 00839200
14270 J = J + 1 00839300
I = I + 1 00839400
GO TO 14250 00839500
C 00839600
C VARIABLE *REFERENCE* 00839700
C 00839800
C NRMAX, V, W, X, Y, Z CAN ONLY INCREMENT BY 0 OR 0. 00839900
C WHETHER 0 OR 0. INCREMENTS ""X"" OR"X" IS IMMATERIAL 00840000
C 00840100
14280 IF (COM( J ) .LT. -16. ) GO TO 14290 00840200
IF ( COM( J ) .EQ. -1. ) GO TO 14430 00840300
C 00840400
C 00840500
IF ( ABS( ARGTAB( I ) ) + ABS( ARGTAB( I+1 ) ) .NE. 0. ) 00840600
1 IF ( ARGTAB( I ) - 8192. ) 14400,14270,14400 00840700
J = J + 1 00840800
GO TO 14240 00840900
C 00841000
C *ROW,COL*REFERENCE. 00841100
C 00841200
14290 IF( ARGTAB( I ) + 16. ) 14295, 14400, 14400 00841300
14295 COM( J ) = T * ( COM( J ) + 8208. ) + ARGTAB( I ) 00841400
IF( COM( J ) .GT. -16. ) GO TO 14400 00841500
IF( COM( J+1 ) * ARGTAB( I+1 ) ) 14400, 14400, 14300 00841600
14300 Y = T * ( ABS( COM( J+1 ) ) - 8192. ) + ABS( ARGTAB( I+1 ) ) 00841700
IF ( Y ) 14400, 14400, 14310 00841800
14310 COM( J+1 ) = SIGN( Y, COM( J+1 ) ) 00841900
GO TO 14230 00842000
14390 K = 18 00842100
GO TO 14410 00842200
14400 K = 20 00842300
14410 CALL ERROR( K ) 00842400
14420 GO TO 9000 00842500
C 00842600
C *** (=THRU) IGNORE. INCREM. OR RESTORE MAY OR MAY NOT 00842700
C HAVE CORRESPONDING *** 00842800
C 00842900
14430 IF ( ARGTAB( I ) .EQ. -1. ) I = I + 1 00843000
J = J + 1 00843100
GO TO 14250 00843200
C 00843300
C INDEX 00843400
C 00843500
14500 CALL X( "INDEX" ) 00843600
GO TO 9000 00843700
END 00843800
C 104 25 SUBROUTINE XFORMT 2 19 68 00843900
SUBROUTINE XFORMT 00844000
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00844100
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00844200
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00844300
C 00844400
C LOOK FOR LETTER A-F FOLLOWED BY NON-ALPHANUMERIC CHARACTER 00844500
C A $ = 46 STOPS THE SCAN 00844600
C 00844700
10 M = M + 1 00844800
IF( KARD(M).LT.10 .OR. KARD(M).GT.15 ) IF(KARD(M)-46) 10,90,10 00844900
IF( KARD( M+1 ) .LE. 35 ) GO TO 90 00845000
L2 = KARD( M ) 00845100
C 00845200
C LOOK FOR ( 00845300
C 00845400
20 M = M + 1 00845500
IF( KARD(M) .NE. 41 ) IF( KARD(M)-46 ) 20, 90, 20 00845600
C 00845700
C PACK UP FORMAT TO END OF CARD ($) 00845800
C 00845900
CALL PK5500(KRDEND+3-M , NEWCD(M-2),IFMT( 1, L2-9 )) 00846000
30 RETURN 00846100
90 CALL ERROR( 205 ) 00846200
GO TO 30 00846300
END 00846400
C 105 22 SUBROUTINE XHEAD 2 19 68 00846500
SUBROUTINE XHEAD 00846600
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00846700
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00846800
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00846900
GO TO 50 00847000
40 M = M + 1 00847100
50 IF( KARD( M) .GE. 10 ) IF( KARD( M ) - 46 ) 40, 70 , 40 00847200
CALL AARGS 00847300
I = ARG 00847400
IF( KARG .EQ. 0 .AND. I .GT. 0 .AND. I .LT. 50 ) GO TO 100 00847500
70 CALL ERROR( 204 ) 00847600
80 RETURN 00847700
90 M = M + 1 00847800
100 IF( KARD( M ) .NE. 36 ) IF( KARD( M ) - 46 ) 90, 70, 90 00847900
C 00848000
C SLASH FOUND. PICK UP NEXT 12 CHARACTERS IN FORMAT A1 AND PACK 00848100
C INTO FORMAT A6. THIS PORTION OF THIS IS NON-STANDARD AND WILL 00848200
C HAVE TO BE REWRITTEN FOR MACHINES OTHER THAN B5500 00848300
C 00848400
CALL PK5500(12,NEWCD(M-1),IHEAD(1,I)) 00848500
RETURN 00848600
END 00848700
C 106 47 SUBROUTINE XPND( T , K , Y , KND ) 2 19 68 00848800
SUBROUTINE XPND( T , K , Y , KND ) 00848900
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00849000
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00849100
DIMENSION ARGS(100) 00849200
EQUIVALENCE( ARGS(1), RC(10001) ) 00849300
DIMENSION T( 2 ) 00849400
C 00849500
C THIS SUBROUTINE TAKES A ""STATEMENT"" REFERENCE AS STORED 00849600
C AND EXPANDS IT INTO THE PROPER ARGUMENT WITH CHECKING. 00849700
C 00849800
C K IS RETURNED 0 IF ARG IN STATEMENT IS ONE WORD LONG 00849900
C K IS RETURNED 1 IF ARG IN STATEMENT IS TWO WORDS LONG 00850000
C K IS RETURNED -( ERROR NUMBER ) IF ERROR OCCURS. 00850100
C 00850200
IT = -T( 1 ) 00850300
IF( IT .LT. 16 ) GO TO 60 00850400
C 00850500
C ""ROW,COL"" ENTRY 00850600
C 00850700
IT =IT - 8208 00850800
IF( IT .GT. 0 .AND. IT .LE. NROW ) GO TO 41 00850900
K = -16 00851000
GO TO 44 00851100
41 IARGS( 100 ) = ABS( T(2) ) - 8192 00851200
KIND( 100 ) = 0 00851300
CALL ADRESS( 100 , J ) 00851400
IF( J .NE. 0 ) GO TO 46 00851500
K = -11 00851600
44 RETURN 00851700
46 J = J + IT 00851800
KND= 0 00851900
IF( T(2) .LT. 0 ) KND = 1 00852000
Y = RC( J - 1 ) 00852100
K=1 00852200
GO TO 44 00852300
C 00852400
C NRMAX , V , W , X , Y , Z , REFERENCE. 00852500
C 00852600
60 IU = IT / 2 00852700
KND = IT - 2 * IU 00852800
K = 0 00852900
IF( IU .LE. 1 ) GO TO 70 00853000
Y = VWXYZ( IU-2 ) 00853100
GO TO 44 00853200
70 Y= NRMAX 00853300
GO TO 44 00853400
END 00853500
C 107 55 SUBROUTINE XSTOP 2 19 68 00853600
SUBROUTINE XSTOP 00853700
COMMON /BLOCKC/KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00853800
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00853900
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00854000
DIMENSION ARGS(100) 00854100
EQUIVALENCE( ARGS(1), RC(10001) ) 00854200
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00854300
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00854400
COMMON / SCRAT / A(10000),NS 00854500
DIMENSION ITEMP( 84 ) 00854600
EQUIVALENCE ( ITEMP( 1 ), A( 1 ) ) 00854700
COMMON / FLAGS / NSUMRY, LLIST 00854800
DATA IZ, IP / 1HZ, 1H+ / 00854900
DATA N0, KOMMA / 1H0,1H, / 00855000
C 00855100
C THIS ROUTINE REWINDS THE SCRATCH UNIT AND PRINTS IT. 00855200
C 00855300
REWIND ISCRAT 00855400
LLIST = 0 00855500
IF ( NERROR .EQ. 0 ) LLIST = 3 00855600
30 CALL PAGE( 0 ) 00855700
WRITE( IPRINT, 35 ) 00855800
35 FORMAT(//) 00855900
DO 80 J = 1, 50 00856000
READ( ISCRAT, 40 ) ITEMP 00856100
40 FORMAT( 84A1 ) 00856200
IF( ITEMP( 1 ) . EQ. IZ ) GO TO 100 00856300
IF( ITEMP( 1 ) . EQ.IP ) GO TO 60 00856400
IF ( ITEMP( 1 ) .EQ. KOMMA ) GO TO 55 00856500
WRITE( IPRINT, 50 ) ITEMP 00856600
50 FORMAT(20X,84A1) 00856700
GO TO 80 00856800
55 LLIST = 3 00856900
IF ( ITEMP( 2 ) .EQ. N0 . AND . NERROR .EQ. 0 ) LLIST = 0 00857000
GO TO 80 00857100
60 WRITE( IPRINT, 70 ) ( ITEMP( I ), I = 2, 84 ) 00857200
70 FORMAT(18X,3A1,3X,80A1) 00857300
80 CONTINUE 00857400
GO TO 30 00857500
100 REWIND ISCRAT 00857600
IF( NERROR - 1 ) 110,130,150 00857700
110 WRITE( IPRINT, 120 ) 00857800
120 FORMAT(///40X,32HCONGRATULATIONS, NO FATAL ERRORS) 00857900
GO TO 200 00858000
130 WRITE( IPRINT, 140 ) 00858100
140 FORMAT(///40X,20HONLY ONE FATAL ERROR) 00858200
GO TO 200 00858300
150 WRITE( IPRINT, 160 ) NERROR 00858400
160 FORMAT(///40X,I4,7H ERRORS) 00858500
200 WRITE( IPRINT , 180 ) 00858600
180 FORMAT(///80X,"CSD OMNITAB VERSION OF AUG.16,1968"/1H1) 00858700
KRDKNT = 0 00858800
LLIST = 3 00858900
RETURN 00859000
END 00859100
C 108 53 SUBROUTINE YATES 2 19 68 00859200
SUBROUTINE YATES 00859300
C 00859400
C YATES ALGORITHM 00859500
C 00859600
C STATEMENT IS 00859700
C 00859800
C YATES ALGORITHM FOR ++ FACTORS,OBS IN COL ++,STORE CONTRASTS IN00859900
C 00860000
C 00860100
C ALL 3 ARGUMENTS MUST BE INTEGERS 00860200
C 00860300
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00860400
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00860500
COMMON / SCRAT / A(10000),NS 00860600
C 00860700
C CHECK ARGS 00860800
C 00860900
J=0 00861000
IF ( NARGS .EQ. 3 ) GO TO 10 00861100
CALL ERROR(10) 00861200
J=1 00861300
10 DO 20 K=1,3 00861400
IF ( KIND( K ) .NE. 0 ) GO TO 30 00861500
20 CONTINUE 00861600
IF ( J .EQ. 1 ) RETURN 00861700
GO TO 40 00861800
30 CALL ERROR(3) 00861900
RETURN 00862000
40 NFACT= IARGS(1) 00862100
CALL ADRESS( 2 , NYOBS ) 00862200
CALL ADRESS( 3 , NYCONT ) 00862300
IF ( 2**NFACT .GT. NROW ) GO TO 30 00862400
IF ( NYOBS .EQ. 0 .OR. NYCONT .EQ. 0 ) GO TO 30 00862500
LL=NFACT*2**NFACT 00862600
IF ( NERROR .NE. 0 ) RETURN 00862700
DO 50 I=1,LL 00862800
50 A(I)=0.0 00862900
L=2**NFACT 00863000
NY=NYOBS-1 00863100
DO 55 I=1,L 00863200
55 A(I)=RC(NY+I) 00863300
NYATES=L / 2 00863400
DO 60 I1=1,NFACT 00863500
DO 60 I2=1,NYATES 00863600
A(I1*L+I2)=A((I1-1)*L+2*I2)+ A( (I1-1)*L+2*I2-1) 00863700
A(I1*L+NYATES+I2) = A( (I1-1)*L+2*I2) - A( (I1-1)*L+2*I2-1) 00863800
60 CONTINUE 00863900
L1 = NFACT * L 00864000
DO 70 I=1,L 00864100
RC(NYCONT)= A(L1+I) 00864200
70 NYCONT=NYCONT+1 00864300
RETURN 00864400
END 00864500
C 109 208C MAIN AND CROSS REFERENCE TABLE 2 19 68 00864600
C MAIN AND CROSS REFERENCE TABLE 00864700
C 00864800
C 00864900
C THIS IS A CROSS-REFERENCE TABLE SHOWING WUICH SUBPROGRAMS 00865000
C REFERENCE PARTICULAR BLOCKS OF COMMON OR PARTICULAR SUBPROGRAMS. 00865100
C THIS LIST DOES NOT INCLUDE THOSE MANY SUBROUTINES CALLED ONLY BY 00865200
C THE SUBROUTINE "XECUTE". 00865300
C 00865400
C OMNITAB USES NO UNLABELLED COMMON. 00865500
C 00865600
C 00865700
C 00865800
C 00865900
C******************** LABELLED COMMON **********************************00866000
C 00866100
C 00866200
C ABCDEF 00866300
C BLOCK OMCONV 00866400
C BLOCKA 00866500
C AARGS ASTER BEGIN INPUT NNAME NONBLA OMNIT OUTPUT 00866600
C PHYCON READX SET SETUP STMT STORE VALUES XFORMT 00866700
C XECUTE XHEAD XOMNIT 00866800
C BLOCKB 00866900
C BEGIN INPUT LOCATE OMNIT OUTPUT STORE XOMNIT XECUTE 00867000
C BLOCKC 00867100
C AERR ERROR INPUT INVERT OMNIT OUTPUT RNDOWN SETUP 00867200
C XOMNIT XSTOP XECUTE 00867300
C BLOCKD 00867400
C ADRESS ALLSUB APRINT ARITH BEGIN CHANGE CHKCOL CKIND 00867500
C DEFINE DIMENS ERASE ERROR EXCHNG EXPAND EXPCON EXTREM 00867600
C FIXFLO FLIP FPROB FUNCT GENER HEADS IFS INVERT 00867700
C MACHK MATRIX MISC2 MMULT MOP MOVE MRAISE MSCROW 00867800
C MTXCHK MXTX OMNIT ORTHO OUTPUT PDMOTE PLOT PRINTX 00867900
C PROROW READQ READX RESET SELECT SET SETQ SETUP 00868000
C SORDER SPACE STATIS STORE TRANSF VECTOR XOMNIT XPND 00868100
C XECUTE XSTOP 00868200
C BLOCKE 00868300
C ALLSUB APRINT ARITH BEGIN EXPAND EXPCON EXTREM FIXFLO 00868400
C FPROB FUNCT IFS INVERT LOOKUP MATRIX MISC2 MMULT 00868500
C MOP MRAISE MSCROW MXTX OMNIT ORTHO PDMOTE PRINTX 00868600
C PROROW READX RESET SELECT SET SETFMT SORDER STATIS 00868700
C STORE TRANSF XECUTE 00868800
C BLOCKX 00868900
C AERR ERROR IFS RNDOWN SETUP XECUTE 00869000
C CONSTS 00869100
C AARGS FUNCT FSIN FCOS FEXP SETUP VALUES 00869200
C FLAGS 00869300
C AERR ERROR OUTPUT XOMNIT XSTOP XECUTE 00869400
C HEADER 00869500
C FIXFLO HEADS OMNIT PAGE PLOT PRINTX SETFMT SETUP 00869600
C SPACE VALUES XFORMT XHEAD XOMNIT XSTOP 00869700
C MULTC 00869800
C MMULT MRAISE MXTX SORTSM TRANSF 00869900
C PCONST 00870000
C BLOCK PHYCON SETUP 00870100
C QRS 00870200
C READQ READX SET SETQ 00870300
C SCRAT 00870400
C EXPCON FPROB INVERT MATRIX MISC2 MMULT MOP MRAISE 00870500
C MXTX ORTHO PLOT PROROW SELECT SETUP SORDER SORTSM 00870600
C STATIS TRANSF XSTOP 00870700
C SPRV 00870800
C ERROR SETUP XOMNIT 00870900
C 00871000
C 00871100
C 00871200
C 00871300
C******************** SUBROUTINES AND FUNCTIONS ************************00871400
C 00871500
C 00871600
C AARGS 00871700
C ASTER OMNIT XHEAD 00871800
C ADRESS 00871900
C ALLSUB ARITH CHANGE CHKCOL DEFINE EXCHNG EXPCON FPROB 00872000
C FUNCT GENER IFS INVERT MISC2 MOP MOVE MSCROW 00872100
C ORTHO SELECT SET XPND 00872200
C AERR 00872300
C ERROR OMNIT SETUP XECUTE 00872400
C ASTER 00872500
C OMNIT 00872600
C CHKCOL 00872700
C ERASE EXTREM FLIP MISC2 PDMOTE PLOT PRINTX PROROW 00872800
C READX SELECT SORDER STATIS 00872900
C CKIND 00873000
C APRINT EXPCON INVERT MATRIX MISC2 MMULT MOP MRAISE 00873100
C MXTX STATIS TRANSF 00873200
C ERROR 00873300
C AARGS ALLSUB APRINT ARITH ASTER BEGIN CHANGE DEFINE 00873400
C DIMENS ERASE EXCHNG EXPAND EXPCON EXTREM FIXFLO FLIP 00873500
C FPROB FUNCT FSIN FCOS FSQRT FEXP FLOG GENER 00873600
C IFS INVERT MATRIX MISC2 MMULT MOP MOVE MRAISE 00873700
C MSCROW MXTX OMNIT ORTHO PDMOTE PAGE PRINTX PROROW 00873800
C READQ READX RESET SELECT SET SETQ SORDER SPACE 00873900
C STATIS STORE TRANSF XFORMT XOMNIT XECUTE 00874000
C EXPAND 00874100
C OMNIT XECUTE 00874200
C FCOS 00874300
C FUNCT 00874400
C FEXP 00874500
C FUNCT FEXP2 00874600
C FEXP2 00874700
C ARITH MATRIX MISC2 00874800
C FEXP3 00874900
C MATRIX 00875000
C FLOG 00875100
C FUNCT FEXP2 00875200
C FLOG10 00875300
C FUNCT 00875400
C FSIN 00875500
C FUNCT 00875600
C FSQRT 00875700
C FUNCT INVCHK MSCROW ORTHO STATIS 00875800
C HEADS 00875900
C PRINTX 00876000
C INPUT 00876100
C OMNIT 00876200
C INVCHK 00876300
C INVERT 00876400
C LOCATE 00876500
C STORE XECUTE 00876600
C LOOKUP 00876700
C OMNIT 00876800
C MACHK 00876900
C INVERT 00877000
C MOVE 00877100
C MISC2 XECUTE 00877200
C MTXCHK 00877300
C APRINT EXPCON MATRIX MMULT MOP MRAISE MXTX TRANSF 00877400
C NNAME 00877500
C ASTER OMNIT 00877600
C NONBLA 00877700
C ASTER 00877800
C OMCONV 00877900
C INPUT 00878000
C OMNIT 00878100
C OMNSYM OMNREL OMNITA MNITAB 00878200
C OUTPUT 00878300
C OMNIT 00878400
C PAGE 00878500
C ORTHO PLOT PRINTX STATIS XSTOP XECUTE 00878600
C PGSIZE 00878700
C OMNIT 00878800
C PHYCON 00878900
C ASTER XECUTE 00879000
C PK5500 00879100
C XFORMT XHEAD HEADS 00879200
C PRINTX 00879300
C APRINT XECUTE 00879400
C PROB 00879500
C FPROB STATIS 00879600
C READQ 00879700
C OMNIT 00879800
C RNDOWN 00879900
C AERR ERROR 00880000
C SETFMT 00880100
C PRINTX 00880200
C SETQ 00880300
C OMNIT 00880400
C SETUP 00880500
C OMNIT 00880600
C SORTSM 00880700
C MMULT MRAISE MXTX TRANSF 00880800
C SPINV 00880900
C INVCHK 00881000
C STMT 00881100
C OMNIT 00881200
C STORE 00881300
C OMNIT 00881400
C TRANSF 00881500
C MXTX 00881600
C VARCON 00881700
C ASTER 00881800
C VECTOR 00881900
C DEFINE ERASE EXTREM FUNCT MISC2 MSCROW PDMOTE 00882000
C XECUTE 00882100
C OMNIT 00882200
C XFORMT 00882300
C OMNIT 00882400
C XHEAD 00882500
C OMNIT 00882600
C XOMNIT 00882700
C OMNIT 00882800
C XPND 00882900
C EXPAND XECUTE 00883000
C XSTOP 00883100
C OMNIT XOMNIT 00883200
C 00883300
C******************** SYSTEM FUNCTIONS *********************************00883400
C 00883500
C *ALOG 00883600
C FUNCT FLOG 00883700
C *ALOG10 00883800
C FUNCT 00883900
C *ATAN 00884000
C FUNCT 00884100
C *COS 00884200
C FCOS 00884300
C *EXP 00884400
C FEXP 00884500
C *SIN 00884600
C FSIN 00884700
C *SQRT 00884800
C FUNCT FSQRT ORTHO 00884900
C *TANH 00885000
C FUNCT 00885100
CALL OMNIT 00885200
STOP 00885300
END 00885400
C 110 60 SUBROUTINE XOMNIT(LG) 2 19 68 00885500
SUBROUTINE XOMNIT(LG) 00885600
COMMON / BLOCKF / NCTOP 00885700
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00885800
COMMON /BLOCKB/NSTMT,NSTMTX,NSTMTH,NCOM,LCOM,IOVFL,COM(2000) 00885900
COMMON /BLOCKC/KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00886000
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00886100
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00886200
DIMENSION ARGS(100) 00886300
EQUIVALENCE( ARGS(1), RC(10001) ) 00886400
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00886500
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00886600
COMMON / FLAGS / NSUMRY, LLIST 00886700
COMMON / SPRV / NERCON,NERR 00886800
DATA LBLANK/1H / 00886900
DIMENSION IH( 4 ) 00887000
DATA IH(1),IH(2),IH(3),IH(4) / 1H(, 4H1P8E, 3H15., 2H6) / 00887100
C 00887200
C IF LG IS NEG, FIRST CARD WAS NOT "OMNITAB" CARD. IF LG= 0, FIRST 00887300
C CARD = "OMNITAB", ELSE SUBSEQUENT "OMNITAB" CARD FOUND. 00887400
C 00887500
IF(LG)300,200,100 00887600
C 00887700
C GO THROUGH "STOP" SEQUENCE AND RETURN 00887800
100 CALL XSTOP 00887900
200 DO 210 I=1,72 00888000
210 NMCARD(I)=NEWCD(I) 00888100
C 00888200
C INITIALIZE SYSTEM 00888300
C 00888400
300 DO 310 I = 1, 64 00888500
DO 310 J = 1, 6 00888600
310 ITLE( I, J ) = LBLANK 00888700
DO 315 I = 1, 50 00888800
IHEAD( 1, I ) = 0 00888900
IHEAD( 3 , I) = 0 00889000
IHEAD( 4 , I) = 0 00889100
315 IHEAD( 2, I ) = 0 00889200
DO 320 J = 1, 6 00889300
320 IFMT( 1, J ) = 0 00889400
DO 325 I = 1, 4 00889500
325 IFMTX( I ) = IH( I ) 00889600
MODE=1 00889700
NRMAX=0 00889800
NROW=101 00889900
NCOL= 99 00890000
NCTOP = 1 00890100
NERR = 0 00890200
LLIST = 3 00890300
NSUMRY = 0 00890400
NERROR = 0 00890500
NSTMT=0 00890600
NSTMTH=0 00890700
NCOM=1 00890800
CALL RANDM(0) 00890900
LCOM=2000 00891000
IOVFL=0 00891100
NPAGE = 0 00891200
DO 330 I=1,10100 00891300
330 RC(I)=0. 00891400
RETURN 00891500
END 00891600
C 111 33 SUBROUTINE SETUP 2 19 68 00891700
SUBROUTINE SETUP 00891800
COMMON / BLOCKA/MODE,M,KARD(83),KARG,ARG,ARG2,NEWCD(80),KRDEND 00891900
COMMON / SPRV / NERCON,NERR 00892000
COMMON /BLOCKC/KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00892100
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00892200
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00892300
DIMENSION ARGS(100) 00892400
EQUIVALENCE( ARGS(1), RC(10001) ) 00892500
COMMON / SCRAT / A(10000),NS 00892600
COMMON / HEADER/NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00892700
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00892800
COMMON / BLOCKX / INDEX( 6, 8 ), LEVEL 00892900
COMMON / PCONST / P( 40 ), N( 40 ) 00893000
COMMON/CONSTS/PI,E,HALFPI,DEG,RAD,XEXP,XTRIG,XALOG,CC( 192 ) 00893100
NERCON = 100 00893200
P( 1 ) = PI 00893300
P( 2 ) = PI 00893400
P( 3 ) = E 00893500
P( 4 ) = E 00893600
KRDKNT = 0 00893700
KRDEND = 80 00893800
NERROR = 0 00893900
LEVEL = 0 00894000
MODE=1 00894100
INUNIT=1 00894200
IPRINT=3 00894300
IPUNCH=2 00894400
ISCRAT=4 00894500
NS = 10000 00894600
KIO = 0 00894700
CALL AERR(-1) 00894800
RETURN 00894900
END 00895000
C 112 27 SUBROUTINE NEWJOB 2 19 68 00895100
SUBROUTINE NEWJOB 00895200
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00895300
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00895400
DIMENSION ARGS(100) 00895500
EQUIVALENCE( ARGS(1), RC(10101) ) 00895600
COMMON / BLOCKE / NAME( 4 ), L1, L2, ISR 00895700
DIMENSION K( 4 ) 00895800
C AD, DA, AV, V 00895900
DATA K / 837, 2943, 1323, 16038 / 00896000
C CHECK AURANDOM OR ANRANDOM 00896100
IF (NAME(1).NE. 1314 .OR. NAME(2) .NE. 1111) GO TO 10 00896200
L1 = 40 00896300
L2=1 00896400
GO TO 2 00896500
10 IF (NAME(1).NE. 1125 .OR. NAME(2) .NE. 1111) GO TO 40 00896600
L1=40 00896700
L2=2 00896800
2 RETURN 00896900
C L1 = 41 MDAMAD 00897000
C L1 = 42 ARYVEC 00897100
40 IF( NAME(1) .NE. 9477 ) GO TO 200 00897200
DO 50 I = 1, 4 00897300
50 IF( NAME( 3 ) .EQ. K( I ) ) GO TO 70 00897400
GO TO 2 00897500
70 L1 = I/3 + 41 00897600
L2 = 2 - MOD( I, 2 ) 00897700
GO TO 2 00897800
C MKRON 00897900
200 IF( NAME(1) .NE. 9792 .OR. NAME(2) .NE. 11313 ) GO TO 90 00898000
L1 = 43 00898100
GO TO 2 00898200
C DUMP SCRATCH AREA 00898300
90 IF( NAME(1) .NE. 3496 .OR. NAME(2) .NE. 11664 ) GO TO 100 00898400
L1 = 45 00898500
GO TO 2 00898600
100 CONTINUE 00898700
GO TO 2 00898800
END 00898900
C 113 8 SUBROUTINE GOJOB 2 19 68 00899000
SUBROUTINE GOJOB 00899100
COMMON / BLOCKE / NAME(4), L1, L2, ISR 00899200
IF (L1.EQ.40)CALL RANDM(1) 00899300
IF( L1 .EQ. 41 ) CALL MDAMAD 00899400
IF( L1 .EQ. 42 ) CALL ARYVEC 00899500
IF( L1 .EQ. 43 ) CALL MKRON 00899600
IF( L1 .EQ. 45 ) CALL XDUMP 00899700
RETURN 00899800
END 00899900
C 114 52 SUBROUTINE AERR(I) 00900000
SUBROUTINE AERR(I) 00900100
COMMON /BLOCKC/ KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00900200
COMMON /BLOCKX/ INDEX(6,8),LEVEL 00900300
COMMON /FLAGS/ NSUMRY,LLIST 00900400
C***** 00900500
C WHEN ARITHMETIC TROUBLES DEVELOP, THIS ROUTINE TALLIES THEM AND THEN 00900600
C PRINTS THE RESULT WHEN THE COMMAND IS DONE 00900700
C***** 00900800
DIMENSION MESS(6) 00900900
IF(I)80,60,50 00901000
C***** 00901100
C DATA COMING IN 00901200
C***** 00901300
50 J = MIN0(I,6) 00901400
MESS(J) = MESS(J) + 1 00901500
55 RETURN 00901600
C***** 00901700
C DUMP RESULTS, END OF COMMAND 00901800
C***** 00901900
60 IF(LLIST.LT.2) GO TO 80 00902000
DO 70 J = 1,6 00902100
IF(MESS(J).EQ.0) GO TO 70 00902200
WRITE(ISCRAT,601) 00902300
WRITE(ISCRAT,291) MESS(J) 00902400
291 FORMAT(34H** ARITHMETIC FAULT,ZERO RETURNED,I4,6H TIMES,40X) 00902500
GO TO (201,202,203,204,205,206),J 00902600
201 WRITE(ISCRAT,701) 00902700
701 FORMAT(35H** NEGATIVE ARGUMENT TO SQRT OR LOG,49X) 00902800
GO TO 600 00902900
202 WRITE(ISCRAT,702) 00903000
702 FORMAT(43H** EVALUATION OF EXPONENT PRODUCES OVERFLOW,41X) 00903100
GO TO 600 00903200
203 WRITE(ISCRAT,703) 00903300
703 FORMAT(45H** ARGUMENT OUT OF BOUNDS TO INVERSE FUNCTION,39X) 00903400
GO TO 600 00903500
204 CONTINUE 00903600
205 CONTINUE 00903700
206 WRITE(ISCRAT,706) J 00903800
706 FORMAT(16H** ERROR MESSAGE,I2,66X) 00903900
600 IF(LEVEL .NE. 0) CALL RNDOWN 00904000
WRITE(ISCRAT,601) 00904100
601 FORMAT(84X) 00904200
MESS(J)=0 00904300
70 CONTINUE 00904400
GO TO 55 00904500
C***** 00904600
C INITIALIZATION SECTION 00904700
C***** 00904800
80 DO 85 J=1,6 00904900
85 MESS(J)=0 00905000
GO TO 55 00905100
END 00905200
C 115 26 SUBROUTINE PK5500 (N,IALPH,JALPH) 00905300
SUBROUTINE PK5500 (N,IALPH,JALPH) 00905400
C***** 00905500
C THIS ROUTINE PICKS UP CHARACTERS IN FORMAT A1 AND PACKS INTO 00905600
C FORMAT A6. THIS ROUTINE IS NON-STANDARD AND WILL HAVE TO BE 00905700
C REWRITTEN FOR MACHINES OTHER THAN BURROUGHS B-5500 00905800
C***** 00905900
DIMENSION IALPH(1),JALPH(1,1) 00906000
J=N/6 00906100
K=MOD(N,6) 00906200
L=1 00906300
DO 15 I=1,J 00906400
M=L+5 00906500
IS=12 00906600
DO 10 I1=L,M 00906700
JALPH(1,I)=CONCAT(JALPH(1,I),IALPH(I1),IS,12,6) 00906800
10 IS=IS+6 00906900
15 L=L+6 00907000
IF(K.EQ.0)RETURN 00907100
I=J+1 00907200
M=L+K 00907300
IS=12 00907400
DO 20 I1=L,M 00907500
JALPH(1,I)=CONCAT(JALPH(1,I),IALPH(I1),IS,12,6) 00907600
20 IS=IS+6 00907700
RETURN 00907800
END 00907900
C 116 SUBROUTINE RANDM(IST) 00908000
SUBROUTINE RANDM( IST ) 00908100
C 00908200
C THIS ROUTINE GENERATES RANDOM NUMBER. IT IS WRITTEN FOR 00908300
C THE IBM 360/65. ( R L CHAMBERLAIN, JULY 1968 ) 00908400
C 00908500
C THE COMMANDS ARE 00908600
C L2=1 (UNIFORM) 00908700
C AURANDOM (,, ,++) ,,X,, 00908800
C AURANDOM (,, ,++) ,,X,, STARTING WITH ,, 00908900
C 00909000
C L2=2 00909100
C (NORMAL) 00909200
C ANRANDOM (,, ,++) ,,X,, 00909300
C ANRANDOM (,, ,++) ,,X,, STARTING WITH 00909400
C 00909500
C 00909600
C REF. MATH NOTE NO. 551, BOEING SCIENTIFIC RESEARCH LABS 00909700
C MARSAGLIA AND BRAY, ONE-LINE RANDOM NUMBER GENERATORS 00909800
C 00909900
C 00910000
COMMON / BLOCKF / NCTOP 00910100
COMMON /BLOCKC/KIO,INUNIT,ISCRAT,KBDOUT,KRDKNT 00910200
DOUBLE PRECISION DEN 00910300
COMMON /BLOCKD/ RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00910400
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00910500
COMMON/BLOCKE/NAME(4),L1,L2,ISRFLG 00910600
COMMON / RNDOM / INITX,LAMBDA 00910700
IF ( IST .EQ. 0 ) GO TO 500 00910800
L = 2**35-1 00910900
DEN=2**35 00911000
GO TO (10,10,30,40,50 ),NARGS 00911100
10 K=9 00911200
15 CALL ERROR( K ) 00911300
RETURN 00911400
30 IF ( KIND(1) + KIND(2) + KIND(3) .EQ. 0 ) GO TO 31 00911500
K=3 00911600
GO TO 15 00911700
31 CONTINUE 00911800
IARGS(4)=IARGS(3) 00911900
KIND(4)=0 00912000
GO TO 60 00912100
40 IF ( KIND(1) + KIND(2) + KIND(3) + KIND(4) .EQ. 0 ) GO TO 41 00912200
K=3 00912300
GO TO 15 00912400
41 CONTINUE 00912500
GO TO 60 00912600
50 IF ( KIND(1) + KIND(2) + KIND(3) + KIND(4) + KIND(5) .EQ. 0 ) 00912700
1 GO TO 51 00912800
K=3 00912900
GO TO 15 00913000
51 INITX = IARGS( 5 ) 00913100
60 IF ( (IARGS(4) + IARGS(2) - 1) .LE. NCOL ) GO TO 62 00913200
61 K=16 00913300
GO TO 15 00913400
62 IF ( (IARGS(1) + IARGS(3) - 1) .GT.(NROW - NCTOP + 1) ) GO TO 61 00913500
NNN=IARGS(4) 00913600
NNM=IARGS(3) 00913700
IF ( NERROR .NE. 0 ) RETURN 00913800
DO 100 I=1,NNN 00913900
CALL ADRESS( 2, MMM ) 00914000
IF ( L2 .EQ. 1 ) GO TO 65 00914100
IF (MOD(NNM,2) .NE. 0) NNM=NNM-1 00914200
65 DO 90 I2=1,NNM 00914300
INITX = MOD( INITX*LAMBDA , L ) 00914400
RC( MMM + I2 - 1 ) = FLOAT( INITX ) / DEN 00914500
GO TO (90,70),L2 00914600
70 L1=1+MOD(I2,2) 00914700
GO TO (80,90),L1 00914800
80 J1=MMM+I2-1 00914900
J2=J1-1 00915000
XY=SQRT(-2.0*ALOG(RC(J2)) ) 00915100
RC(J2)= COS(6.283185*RC(J1))*XY 00915200
RC(J1)= SIN(6.283185*RC(J1))*XY 00915300
90 CONTINUE 00915400
IF ( L2 . EQ. 1 ) GO TO 100 00915500
IF (MOD(IARGS(3),2) .EQ. 0) GO TO 100 00915600
INITX = MOD( INITX*LAMBDA , L ) 00915700
TEMP1 = FLOAT( INITX ) / DEN 00915800
INITX = MOD( INITX*LAMBDA , L ) 00915900
TEMP2 = FLOAT( INITX ) / DEN 00916000
XY = SQRT(-2.0*ALOG(TEMP1)) 00916100
TEMP1 = COS(6.283185*TEMP2)*XY 00916200
MM1 = J1 + 1 00916300
RC(MM1) = TEMP1 00916400
NNM = NNM + 1 00916500
180 FORMAT(///20X,"SYSTEMS DESIGN AND PROGRAMMING OMNITAB VERSION OF A00916600
1UG.16,1968"/20X,"NAVAL AIR TEST CENTER,PATUXENT RIVER,MD."/1H1) 00916700
100 IARGS( 2 ) = IARGS( 2 ) + 1 00916800
WRITE(ISCRAT,200) INITX 00916900
200 FORMAT( 40H **** THE LAST INTEGER GENERATED WAS,I12,5H ****, 00917000
1 27X ) 00917100
RETURN 00917200
C 00917300
C INITIALIZATION 00917400
C 00917500
500 CONTINUE 00917600
LAMBDA=5**13 00917700
INITX=LAMBDA 00917800
RETURN 00917900
END 00918000
C 118 14 SUBROUTINE XDUMP 00918100
SUBROUTINE XDUMP 00918200
COMMON/BLOCKD/RC(10100),IARGS(100),KIND(100),ARGTAB(100),NRMAX, 00918300
1 NROW,NCOL,NARGS,VWXYZ(8),NERROR 00918400
COMMON / HEADER /NMCARD(72),ITLE(64,6),IHEAD(4,50),IFMT(17,6), 00918500
1 IFMTX(4),LNCNT,IPRINT,NPAGE,IPUNCH 00918600
IF(IARGS(1) .GT. 0 .AND. IARGS(1) .LE. 10000 ) GO TO 10 00918700
IARGS(1) = 1000 00918800
10 CALL PAGE(0) 00918900
WRITE(IPRINT,100) IARGS(1) 00919000
100 FORMAT(//10H THE FIRST,I10,30H LOCATIONS OF THE SCRATCH AREA/) 00919100
CALL PNT( IARGS(1) ) 00919200
RETURN 00919300
END 00919400
00919500
00919600
99999999