mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-03-02 17:44:40 +00:00
1. Commit library tape images, directories, and extracted text files. 2. Commit additional utilities under Unisys-Emode-Tools.
1036 lines
82 KiB
Plaintext
1036 lines
82 KiB
Plaintext
BEGIN 00000000
|
|
COMMENT MAXPLAN/STATMAN; 00000100
|
|
FILE IN CARD 0(2,10); FILE OUT LINE 4(2,15); 00000200
|
|
FILE OUT PUNCH 0(2,10); 00000300
|
|
BOOLEAN ARRAY SENSL[0:4]; 00000400
|
|
REAL XPR; 00000500
|
|
INTEGER QQ; 00000600
|
|
LABEL FINIS; 00000700
|
|
PROCEDURE ERROR(N); VALUE N; INTEGER N; BEGIN 00000800
|
|
FORMAT F(///////"STOP / PAUSE NO. ", I5); 00000900
|
|
WRITE (LINE, F, N); GO TO FINIS END; 00001000
|
|
REAL PROCEDURE INT(ARG1); VALUE ARG1; REAL ARG1; 00001100
|
|
BEGIN INT~(SIGN(ARG1)|ENTIER(ABS(ARG1))) END; 00001200
|
|
REAL PROCEDURE MAX(ARG1,ARG2); VALUE ARG1,ARG2; REAL ARG1,ARG2; 00001300
|
|
BEGIN MAX~(IF ARG1}ARG2 THEN ARG1 ELSE ARG2) END; 00001400
|
|
REAL PROCEDURE MIN(ARG1,ARG2); VALUE ARG1,ARG2; REAL ARG1,ARG2; 00001500
|
|
BEGIN MIN~(IF ARG1{ARG2 THEN ARG1 ELSE ARG2) END; 00001600
|
|
DEFINE TAPE5=PUNCH#, TAPE7=CARD#,SINQ=SIN#,SQRTQ=SQRT#, 00001700
|
|
COSQ=COS#,ATANQ=ARCTAN#; 00001800
|
|
ARRAY KOUNTQ,LKOUNTQ,NHYPQ,KTOTALQ,ISTABQ,CLONGQ,TCOSQ,TEMQ, 00001900
|
|
SHIFTQ,EXANGQ[0:30],LHYQ[0:400],IPROGQ[0:60],ITPQ[0:9], 00002000
|
|
IPARQ[0:23],VZEROQ[0:30,0:400],COSNQ,CLAMQ[0:30,0:30], 00002100
|
|
FMTQ[0:98],ROWQ[0:150],TITLEQ[0:12]; 00002200
|
|
REAL TOPQ,TIMEQ,TCCQ,TCQ,ANGQ,AHYPPCQ,PC1Q,PC2Q,PC3Q,TTOTALQ, 00002300
|
|
TPLOTQ,UPQ; 00002400
|
|
INTEGER NVARQ,NFACQ, KSWTQ,KHWTQ,KOUNT2Q,K,IMPQ,LASTQ, 00002500
|
|
LEGALQ,L,KRAPQ,MULTQ,KNQ,IMPSQ; 00002600
|
|
DEFINE IPLOTQ=IPARQ[8]#,KANGQ=IPARQ[9]#,KSTARTQ=IPARQ[10]#, 00002700
|
|
NCYCLEQ=IPARQ[11]#,KCYCLEQ=IPARQ[12]#,TOTIMQ=IPARQ[13]#, 00002800
|
|
WIDQ=IPARQ[14]#,SIGQ=IPARQ[15]#,XCLHCQ=IPARQ[16]#, 00002900
|
|
NCLCYQ=IPARQ[17]#,NCLSPQ=IPARQ[18]#,NCLHOQ=IPARQ[19]#, 00003000
|
|
ANFMINQ=IPARQ[20]#,ANGMINQ=IPARQ[21]#,CMAXQ=IPARQ[22]#, 00003100
|
|
NSHQ=IPARQ[23]#; 00003200
|
|
PROCEDURE TIMINQ(A); %******************************* 00003300
|
|
REAL A; 00003400
|
|
A~TIME(1); 00003500
|
|
PROCEDURE TIMOUTQ(A); %******************************* 00003600
|
|
REAL A; 00003700
|
|
A~(TIME(1)-A) DIV 60; 00003800
|
|
FILE IN FACMAT 2(2,100), ROTMAT 2(2,100), CORMAT 2(2,100); 00003900
|
|
FORMAT OKTL(100O); 00004000
|
|
SWITCH FILE SW~LINE,CARD,LINE,LINE,LINE,CORMAT,FACMAT,ROTMAT; 00004100
|
|
COMMENT ************************** PLOT ****************; 00004200
|
|
PROCEDURE PLOTQ; 00004300
|
|
BEGIN 00004400
|
|
OWN INTEGER I; 00004500
|
|
LABEL DUMMY; 00004600
|
|
I ~ 0; 00004700
|
|
GO TO DUMMY; 00004800
|
|
DUMMY: 00004900
|
|
END; 00005000
|
|
00005100
|
|
COMMENT ************************** EXTRA ****************; 00005200
|
|
PROCEDURE EXTRAQ; 00005300
|
|
BEGIN 00005400
|
|
OWN REAL X; 00005500
|
|
LABEL DUMMY; 00005600
|
|
COMMENT 00005700
|
|
THIS IS A DUMMY SUBROUTINE (SEE MAIN PROGRAM); 00005800
|
|
X ~ 0; 00005900
|
|
GO TO DUMMY; 00006000
|
|
DUMMY: 00006100
|
|
END; 00006200
|
|
00006300
|
|
COMMENT ************************** DUMMY ****************; 00006400
|
|
PROCEDURE DUMMYQ; 00006500
|
|
BEGIN 00006600
|
|
OWN REAL X; 00006700
|
|
LABEL DUMMY; 00006800
|
|
COMMENT 00006900
|
|
THIS IS A DUMMY SUBROUTINE (SEE MAIN PROGRAM); 00007000
|
|
X ~ 0; 00007100
|
|
GO TO DUMMY; 00007200
|
|
DUMMY: 00007300
|
|
END; 00007400
|
|
00007500
|
|
COMMENT ************************** HYPPC ****************; 00007600
|
|
PROCEDURE HYPPCQ; 00007700
|
|
BEGIN 00007800
|
|
OWN INTEGER JBQ,JAQ,JCQ; 00007900
|
|
OWN REAL V; 00008000
|
|
LABEL DUMMY,L6003; 00008100
|
|
COMMENT 00008200
|
|
THIS SUBROUTINE CALCULATES THE HYPERPLANE COUNT FOR EACH FACTOR 00008300
|
|
AND ALSO THE COUNT AND PERCENT VALUE OF POINTS FOR THE TOTAL 00008400
|
|
CALCULATE HYPERPLANE COUNT; 00008500
|
|
KOUNT2Q ~ 0; 00008600
|
|
FOR JBQ ~ 1, JBQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00008700
|
|
NHYPQ[JBQ] ~ 0; 00008800
|
|
FOR JAQ ~ 1, JAQ+1 STEP 1 UNTIL NVARQ DO BEGIN 00008900
|
|
V ~ 0; 00009000
|
|
FOR JCQ ~ 1, JCQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00009100
|
|
V ~ V+VZEROQ[JCQ,JAQ]|CLAMQ[JBQ,JCQ] END; 00009200
|
|
IF ABS(V)>WIDQ THEN GO TO L6003; 00009300
|
|
KOUNT2Q ~ KOUNT2Q+1; 00009400
|
|
NHYPQ[JBQ] ~ NHYPQ[JBQ]+1; 00009500
|
|
L6003: END; 00009600
|
|
END; 00009700
|
|
AHYPPCQ ~ (KOUNT2Q)|100/(NFACQ|NVARQ); 00009800
|
|
GO TO DUMMY; 00009900
|
|
DUMMY: 00010000
|
|
END; 00010100
|
|
00010200
|
|
COMMENT ************************** WEIGHT ****************; 00010300
|
|
PROCEDURE WEIGHTQ; 00010400
|
|
BEGIN 00010500
|
|
OWN INTEGER INDEXQ,ISQ,JSQ; 00010600
|
|
OWN REAL V; 00010700
|
|
LABEL DUMMY,L4,L5; 00010800
|
|
COMMENT 00010900
|
|
THIS IS THE SUBROUTINE THAT WEIGHTS THE POINTS WHEN FACTOR K 00011000
|
|
IS BEING SHIFTED ON FACTOR L; 00011100
|
|
INDEXQ ~ KSWTQ+1; 00011200
|
|
FOR ISQ ~ 1, ISQ+1 STEP 1 UNTIL NVARQ DO BEGIN 00011300
|
|
LHYQ[ISQ] ~ 0; 00011400
|
|
V ~ 0; 00011500
|
|
FOR JSQ ~ 1, JSQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00011600
|
|
V ~ V+VZEROQ[JSQ,ISQ]|CLAMQ[L,JSQ] END; 00011700
|
|
IF ABS(V)<WIDQ THEN GO TO L5; 00011800
|
|
IF KSWTQ>0 THEN GO TO L4; 00011900
|
|
LHYQ[ISQ] ~ 1; 00012000
|
|
GO TO L5; 00012100
|
|
L4: LHYQ[ISQ] ~ INT((5|ABS(V))*INDEXQ); 00012200
|
|
L5: END; 00012300
|
|
GO TO DUMMY; 00012400
|
|
DUMMY: 00012500
|
|
END; 00012600
|
|
00012700
|
|
COMMENT ************************** MXHEAD ****************; 00012800
|
|
PROCEDURE MXHEADQ; 00012900
|
|
BEGIN 00013000
|
|
INTEGER DX1; 00013100
|
|
INTEGER INDEX1; 00013200
|
|
FORMAT FL100(///" MAXPLANE OF 1 DECEMBER 1965 "), 00013300
|
|
FL102(//" PARAMETERS ARE"/X7," (1)",R9.3,X7," (2)",I5,X11, 00013400
|
|
" (3)",I5,X11," (4)",I5,X11," (5)",I5/X7," (6)",I5,X11, 00013500
|
|
" (7)",I5,X11," (8)",I5,X11," (9)",I5,X11,"(10)",I5/X7, 00013600
|
|
"(11)",I5,X11,"(12)",I5,X11,"(13)",R9.3,X7,"(14)",R9.3,X7, 00013700
|
|
"(15)",R9.3/X7,"(16)",I5,X11,"(17)",R9.3,X7,"(18)",I5,X11, 00013800
|
|
"(19)",I5,X11,"(20)",R9.3/X7,"(21)",R9.3,X7,"(22)",R9.3,X7, 00013900
|
|
"(23)",I5,X11,"(24)",I5,X11,"(25)",R9.3/X7,"(26)",I5,X11, 00014000
|
|
"(27)",I5/), 00014100
|
|
FL103(" "////X39,"I L L I N O I S M A X P L A N E"//X24, 00014200
|
|
12A6//X41,"ROTATION TO SIMPLE STRUCTURE"/X41,"WITH",I4, 00014300
|
|
" VARIABLES",I5," FACTORS"/X41,"HYPERPLANE WIDTH TAKEN AS", 00014400
|
|
R6.3///), 00014500
|
|
FL101(X16,"SHIFTED ON",X9,"HYPERPLANE COUNT",X5,"HYPERPLANE"/ 00014600
|
|
X5,"FACTOR FACTOR ANGLE THIS FACTOR ALL FACTORS ", 00014700
|
|
"PER CENT"); 00014800
|
|
LIST LIST1(TOTIMQ,FOR DX1 ~ 2 STEP 1 UNTIL 12 DO IPARQ[DX1],WIDQ,SIGQ, 00014900
|
|
ANFMINQ,NCLCYQ,XCLHCQ,NCLSPQ,NCLHOQ,UPQ,PC1Q,PC2Q,KHWTQ,KSWTQ, 00015000
|
|
TTOTALQ,KRAPQ,MULTQ), 00015100
|
|
LIST2(FOR INDEX1 ~ 1 STEP 1 UNTIL 12 DO TITLEQ[INDEX1],NVARQ, 00015200
|
|
NFACQ,WIDQ); 00015300
|
|
LABEL DUMMY; 00015400
|
|
COMMENT 00015500
|
|
THIS SUBROUTINE LISTS THE PARAMETERS AND PRINTS THE HEADING; 00015600
|
|
WRITE(LINE,FL100); 00015700
|
|
WRITE(LINE,FL102,LIST1); 00015800
|
|
WRITE(LINE,FL103,LIST2); 00015900
|
|
WRITE(LINE,FL101); 00016000
|
|
GO TO DUMMY; 00016100
|
|
DUMMY: 00016200
|
|
END; 00016300
|
|
00016400
|
|
COMMENT ************************** TIMOK ****************; 00016500
|
|
PROCEDURE TIMOKQ(L); 00016600
|
|
INTEGER L; 00016700
|
|
BEGIN 00016800
|
|
OWN REAL T,Y; 00016900
|
|
COMMENT THE FOLLOWING SUBROUTINES ARE REQUIRED: 00017000
|
|
TIMOUT, TIME; 00017100
|
|
LABEL DUMMY,L1,L2; 00017200
|
|
COMMENT 00017300
|
|
THIS SUBROUTINE CALCULATES IF THERE IS ENOUGH TIME FOR ONE 00017400
|
|
MORE CYCLE AND BASIC OUTPUT. TIME IS NOT ALLOWED FOR PLOTTING.; 00017500
|
|
TIMOUTQ(TCQ); 00017600
|
|
TOPQ ~ MAX(TOPQ,TCQ); 00017700
|
|
T ~ TIMEQ; 00017800
|
|
TIMOUTQ(T); 00017900
|
|
Y ~ (NVARQ); 00018000
|
|
IF TOTIMQ-T-TOPQ>.25|Y THEN GO TO L2 ELSE GO TO L1; 00018100
|
|
COMMENT 00018200
|
|
THERE IS SUFFICIENT TIME; 00018300
|
|
L1: L ~ 1; 00018400
|
|
GO TO DUMMY; 00018500
|
|
COMMENT 00018600
|
|
THERE IS NOT SUFFICIENT TIME; 00018700
|
|
L2: L ~ -1; 00018800
|
|
GO TO DUMMY; 00018900
|
|
DUMMY: 00019000
|
|
END; 00019100
|
|
00019200
|
|
COMMENT ************************** MXEND ****************; 00019300
|
|
PROCEDURE MXENDQ; 00019400
|
|
BEGIN 00019500
|
|
OWN REAL TTOTMQ,TTOTSQ; 00019600
|
|
COMMENT THE FOLLOWING SUBROUTINES ARE REQUIRED: 00019700
|
|
TIMOUT, TIME; 00019800
|
|
FORMAT FL5080(" ",X2,"NUMBER OF CYCLES =",I5,X10, 00019900
|
|
"TOTAL MAXPLANE TIME =",R4.0,R6.1/), 00020000
|
|
FL5081(/" LAST CYCLE TIME=",R6.1,X10,"GREATEST CYCLE TIME=", 00020100
|
|
R6.1,X10,"TOTAL OUTPUT TIME=",R6.1,X10/ 00020200
|
|
"PLOT SUBROUTINE TIME=",R6.1/" ",X52, 00020300
|
|
"(ABOVE TIMES ARE IN SECONDS)"/" "), 00020400
|
|
FL5003(/" TIMES FOR THIS RUN",X22,"TOTAL TIME =",R4.0,R6.1/ 00020500
|
|
X30,"(ABOVE TIMES IN MINUTES AND SECONDS MM SS.S)"); 00020600
|
|
LIST LIST1(KCYCLEQ,TTOTMQ,TTOTSQ), 00020700
|
|
LIST2(TTOTMQ,TTOTSQ), 00020800
|
|
LIST3(TCQ,TOPQ,TCCQ,TPLOTQ); 00020900
|
|
LABEL DUMMY; 00021000
|
|
COMMENT 00021100
|
|
THIS SUBROUTINE PRINTS SOME STATISTICS GIVING THE NUMBER OF 00021200
|
|
CYCLES AND VARIOUS TIMES; 00021300
|
|
TIMOUTQ(TIMEQ); 00021400
|
|
TTOTMQ ~ TTOTALQ/60; 00021500
|
|
TTOTMQ ~ INT(TTOTMQ); 00021600
|
|
TTOTSQ ~ TTOTALQ-60|TTOTMQ; 00021700
|
|
WRITE(LINE,FL5080,LIST1); 00021800
|
|
TTOTMQ ~ TIMEQ/60; 00021900
|
|
TTOTMQ ~ INT(TTOTMQ); 00022000
|
|
TTOTSQ ~ TIMEQ-60|TTOTMQ; 00022100
|
|
WRITE(LINE,FL5003,LIST2); 00022200
|
|
TIMOUTQ(TCCQ); 00022300
|
|
WRITE(LINE,FL5081,LIST3); 00022400
|
|
GO TO DUMMY; 00022500
|
|
DUMMY: 00022600
|
|
END; 00022700
|
|
00022800
|
|
COMMENT ************************** MXTEST ****************; 00022900
|
|
PROCEDURE MXTESTQ; 00023000
|
|
BEGIN 00023100
|
|
OWN INTEGER J; 00023200
|
|
COMMENT THE FOLLOWING SUBROUTINES ARE REQUIRED: 00023300
|
|
TIMOK, TIMOUT; 00023400
|
|
FORMAT FL112(X30,"*** DOUBLE SHIFTS STARTED"), 00023500
|
|
FL100(X30,"***MINIMUM ANGLE OF SEPARATION SET AT 30 DEGREES"), 00023600
|
|
FL101(X30, 00023700
|
|
"***POINTS WEIGHTED 1 IN 1/1, 5 IN 2/3, 15 IN 1/3 OF ", 00023800
|
|
"HYPERPLANE WIDTH "), 00023900
|
|
FL102(X30,"***OUTLYING HYPERPLANE POINTS WEIGHTED"), 00024000
|
|
FL103(X30,"***NO IMPROVEMENT IN STRUCTURE"), 00024100
|
|
FL104(X30,"***LESS THAN ",R4.1, 00024200
|
|
" PERCENT IMPROVEMENT IN 3 CYCLES"), 00024300
|
|
FL111(X30,"***SS HAS BEEN REACHED. BEGINNING FINAL SCAN."), 00024400
|
|
FL105(X30,"***2 DEGREE SHIFTS TO BE STARTED"), 00024500
|
|
FL106(X30,"***OUTLYING HYPERPLANE POINTS NOT WEIGHTED"), 00024600
|
|
FL107(//X30,"***MAXIMUM SIMPLE STRUCTURE HAS BEEN REACHED"//), 00024700
|
|
FL108(//X30, 00024800
|
|
"***MAXIMUM SIMPLE STRUCTURE FOR 6 DEGREE SHIFTS HAS ", 00024900
|
|
"BEEN REACHED"//), 00025000
|
|
FL109(//X30, 00025100
|
|
"***INSUFFICIENT TIME FOR NEXT CYCLE - PROGRAM WILL G", 00025200
|
|
"O TO OUTPUT",". THERE WILL BE NO PLOT."//), 00025300
|
|
FL110(X30, 00025400
|
|
"***THE SPECIFIED NUMBER OF CYCLES HAVE BEEN COMPLETE","D"/); 00025500
|
|
LIST LIST1(UPQ); 00025600
|
|
LABEL DUMMY,L1,L2,L3,L4,L5,L7,L9,L10,L11,L12,L13,L14,L15,L16,L17, 00025700
|
|
L80,L18,L182,L20,L21,L22,L23; 00025800
|
|
COMMENT 00025900
|
|
THIS SUBROUTINE TESTS FOR TERMINATING CONDITIONS AT THE END 00026000
|
|
OF EACH CYCLE 00026100
|
|
TEST IF SPECIFIED NUMBER OF CYCLES HAVE BEEN COMPLETED; 00026200
|
|
IF NCYCLEQ=KCYCLEQ THEN GO TO L23 ELSE GO TO L1; 00026300
|
|
COMMENT 00026400
|
|
TEST IF NUMBER OF CYCLES FOR MINIMUM ANGLE CHANGE ATTAINED; 00026500
|
|
L1: IF NCLCYQ=KCYCLEQ THEN GO TO L12 ELSE GO TO L2; 00026600
|
|
COMMENT 00026700
|
|
TEST IF HYPERPLANE 0/0 FOR MINIMUN ANGLE CHANGE ATTAINED; 00026800
|
|
L2: IF XCLHCQ>AHYPPCQ THEN GO TO L3 ELSE GO TO L11; 00026900
|
|
COMMENT 00027000
|
|
TEST IF CYCLE NUMBER FOR HYPERPLANE SPREAD WEIGHTING ATTAINED; 00027100
|
|
L3: IF NCLSPQ=KCYCLEQ THEN GO TO L13 ELSE GO TO L4; 00027200
|
|
COMMENT 00027300
|
|
TEST IF CYCLE NUMBER FOR WEIGHTING HYPERPLANE OUTLYERS ATTAINED; 00027400
|
|
L4: IF NCLHOQ=KCYCLEQ THEN GO TO L14 ELSE GO TO L5; 00027500
|
|
COMMENT 00027600
|
|
TEST FOR ANY IMPROVEMENT; 00027700
|
|
L5: IF IMPQ{0 THEN GO TO L15; 00027800
|
|
PC3Q ~ PC2Q; 00027900
|
|
PC2Q ~ PC1Q; 00028000
|
|
PC1Q ~ AHYPPCQ; 00028100
|
|
COMMENT 00028200
|
|
TEST FOR 3 CYCLE IMPROVEMENT LESS THAN SPECIFIED AMOUNT; 00028300
|
|
IF AHYPPCQ-PC3Q}UPQ THEN GO TO L7 ELSE GO TO L16; 00028400
|
|
COMMENT 00028500
|
|
TEST IF THERE IS SUFFICIENT TIME FOR ANOTHER CYCLE; 00028600
|
|
L7: TIMOKQ(L); 00028700
|
|
IF L}0 THEN GO TO L22; 00028800
|
|
LASTQ ~ 0; 00028900
|
|
L9: GO TO DUMMY; 00029000
|
|
COMMENT 00029100
|
|
SET INDICATOR TO SHOW THAT CYCLING TO BE TERMINATED; 00029200
|
|
L10: LASTQ ~ 1; 00029300
|
|
TIMOUTQ(TCQ); 00029400
|
|
GO TO DUMMY; 00029500
|
|
L11: NCLSPQ ~ KCYCLEQ; 00029600
|
|
NCLCYQ ~ KCYCLEQ; 00029700
|
|
MULTQ ~ 1; 00029800
|
|
WRITE(LINE,FL112); 00029900
|
|
L12: XCLHCQ ~ 200; 00030000
|
|
CMAXQ ~ 0.86603; 00030100
|
|
ANGMINQ ~ 0.5235988; 00030200
|
|
ANFMINQ ~ 30; 00030300
|
|
NSHQ ~ 20; 00030400
|
|
WRITE(LINE,FL100); 00030500
|
|
GO TO L3; 00030600
|
|
L13: KHWTQ ~ KHWTQ+1; 00030700
|
|
IF KHWTQ<1 THEN GO TO L4; 00030800
|
|
WRITE(LINE,FL101); 00030900
|
|
GO TO L4; 00031000
|
|
L14: IF KSWTQ<0 THEN GO TO L5; 00031100
|
|
WRITE(LINE,FL102); 00031200
|
|
KSWTQ ~ MAX(LEGALQ,1); 00031300
|
|
GO TO L5; 00031400
|
|
L15: WRITE(LINE,FL103); 00031500
|
|
GO TO L17; 00031600
|
|
L16: WRITE(LINE,FL104,LIST1); 00031700
|
|
COMMENT 00031800
|
|
TERMINATE IF 2 DEGREE SHIFTS WERE BEING DONE, OTHERWISE TEST IF 00031900
|
|
THEY ARE REQUIRED AND ADJUST PARAMETERS ACCORDINGLY; 00032000
|
|
L17: IF KANGQ}2 THEN GO TO L80; 00032100
|
|
IF KHWTQ{0 THEN GO TO L18; 00032200
|
|
L80: IF KRAPQ!0 THEN GO TO L20; 00032300
|
|
WRITE(LINE,FL111); 00032400
|
|
KANGQ ~ 1; 00032500
|
|
MULTQ ~ 0; 00032600
|
|
KHWTQ ~ 0; 00032700
|
|
NSHQ ~ 20; 00032800
|
|
KRAPQ ~ 1; 00032900
|
|
ANFMINQ ~ 60; 00033000
|
|
XCLHCQ ~ 50; 00033100
|
|
NCLCYQ ~ 4; 00033200
|
|
ANGMINQ ~ 1.047198; 00033300
|
|
ANGQ ~ .1047198; 00033400
|
|
KSWTQ ~ 0; 00033500
|
|
FOR J ~ 1, J+1 STEP 1 UNTIL NFACQ DO BEGIN 00033600
|
|
ISTABQ[J] ~ 0 END; 00033700
|
|
GO TO L7; 00033800
|
|
L18: IF KANGQ>0 THEN GO TO L21; 00033900
|
|
IF NCLSPQ>KCYCLEQ THEN GO TO L182; 00034000
|
|
WRITE(LINE,FL105); 00034100
|
|
CMAXQ ~ .86603; 00034200
|
|
KANGQ ~ 2; 00034300
|
|
ANGMINQ ~ .5235988; 00034400
|
|
ANFMINQ ~ 30; 00034500
|
|
NSHQ ~ 5; 00034600
|
|
KSWTQ ~ -5; 00034700
|
|
NCLHOQ ~ KCYCLEQ; 00034800
|
|
PC1Q ~ 0; 00034900
|
|
PC2Q ~ 0; 00035000
|
|
WRITE(LINE,FL106); 00035100
|
|
WRITE(LINE,FL100); 00035200
|
|
GO TO L7; 00035300
|
|
L182: KHWTQ ~ KHWTQ+1; 00035400
|
|
NCLSPQ ~ KCYCLEQ; 00035500
|
|
IF KHWTQ<1 THEN GO TO L7; 00035600
|
|
WRITE(LINE,FL101); 00035700
|
|
PC2Q ~ 0; 00035800
|
|
PC3Q ~ 0; 00035900
|
|
GO TO L7; 00036000
|
|
L20: WRITE(LINE,FL107); 00036100
|
|
GO TO L10; 00036200
|
|
L21: WRITE(LINE,FL108); 00036300
|
|
GO TO L10; 00036400
|
|
L22: WRITE(LINE,FL109); 00036500
|
|
TPLOTQ ~ 1; 00036600
|
|
LASTQ ~ 1; 00036700
|
|
GO TO DUMMY; 00036800
|
|
L23: WRITE(LINE,FL110); 00036900
|
|
GO TO L10; 00037000
|
|
DUMMY: 00037100
|
|
END; 00037200
|
|
00037300
|
|
COMMENT ************************** MXROTN ****************; 00037400
|
|
PROCEDURE MXROTNQ; 00037500
|
|
BEGIN 00037600
|
|
OWN INTEGER NPOSQ,KPREVQ,KTOTQ,M,MAQ,ITOTQ,MEQ,MFQ,KJQ,K0Q,KLQ,MBQ; 00037700
|
|
OWN REAL W3Q,W23Q,B,XNPOSQ,CORRMQ,TRYQ,EXQ,SHIFTLQ,SUMSQQ,V; 00037800
|
|
COMMENT THE FOLLOWING FUNCTIONS ARE REQUIRED: 00037900
|
|
ATAN, SQRT, SIN; 00038000
|
|
COMMENT THE FOLLOWING SUBROUTINES ARE REQUIRED: 00038100
|
|
WEIGHT; 00038200
|
|
BEGIN 00038300
|
|
LABEL DUMMY,L32,L33,L34,L4102,L5014,L5073,L400,L401,L42,L5022,L43, 00038400
|
|
L44,L45,L5075,L201,L540,L541,L542,L551,L553,L555,L320,L556, 00038500
|
|
L321,L544,L68,L203; 00038600
|
|
COMMENT 00038700
|
|
IN THIS SUBROUTINE FACTOR K IS ROTATED AGAINST FACTOR L. ALL 00038800
|
|
SHIFT POSITIONS THAT DO NOT VIOLATE THE ANGLE RESTRICTION ARE 00038900
|
|
TRIED AND IF ANY OF THESE IS BETTER THAN THE ORIGINAL POSITION 00039000
|
|
THE FACTOR IS SHIFTED TO THE BEST OF THESE.; 00039100
|
|
IMPSQ ~ 0; 00039200
|
|
W3Q ~ WIDQ/3; 00039300
|
|
W23Q ~ 2|W3Q; 00039400
|
|
COMMENT 00039500
|
|
CALCULATE ANGLES BETWEEN FACTORS; 00039600
|
|
FOR L ~ 1, L+1 STEP 1 UNTIL NFACQ DO BEGIN 00039700
|
|
IF L!K THEN GO TO L32; 00039800
|
|
EXANGQ[L] ~ 0; 00039900
|
|
GO TO L34; 00040000
|
|
L32: IF ABS(COSNQ[L,K])<.0349 THEN GO TO L33; 00040100
|
|
EXANGQ[L] ~ ATANQ((SQRTQ(1-COSNQ[L,K]*2))/COSNQ[ 00040200
|
|
L,K]); 00040300
|
|
IF EXANGQ[L]>0 THEN GO TO L34; 00040400
|
|
EXANGQ[L] ~ EXANGQ[L]+3.14159; 00040500
|
|
GO TO L34; 00040600
|
|
L33: EXANGQ[L] ~ 1.57079; 00040700
|
|
L34: LKOUNTQ[L] ~ 0 END; 00040800
|
|
COMMENT 00040900
|
|
CYCLE THAT PAIRS FACTOR WITH EACH OTHER FACTOR STARTS; 00041000
|
|
FOR L ~ 1, L+1 STEP 1 UNTIL NFACQ DO BEGIN 00041100
|
|
SHIFTQ[L] ~ 0; 00041200
|
|
COMMENT 00041300
|
|
DO NOT TRY AND SHIFT FACTOR ON ITSELF; 00041400
|
|
IF L=K THEN GO TO L201; 00041500
|
|
WEIGHTQ; 00041600
|
|
COMMENT 00041700
|
|
CALCULATE SHIFT POSITIONS; 00041800
|
|
B ~ EXANGQ[L]-ANGMINQ; 00041900
|
|
XNPOSQ ~ B/ANGQ; 00042000
|
|
NPOSQ ~ INT(XNPOSQ); 00042100
|
|
IF XNPOSQ}0 THEN GO TO L4102; 00042200
|
|
NPOSQ ~ NPOSQ-1; 00042300
|
|
L4102: IF KANGQ<2 THEN GO TO L5014; 00042400
|
|
NPOSQ ~ 2; 00042500
|
|
L5014: KPREVQ ~ 0; 00042600
|
|
KTOTQ ~ 0; 00042700
|
|
COMMENT 00042800
|
|
START OF CYCLE THAT TRIES EACH SHIFT POSITION; 00042900
|
|
FOR M ~ 1, M+1 STEP 1 UNTIL NSHQ DO BEGIN 00043000
|
|
CORRMQ ~ M-NSHQ+NPOSQ; 00043100
|
|
TRYQ ~ CORRMQ|ANGQ; 00043200
|
|
EXQ ~ EXANGQ[L]; 00043300
|
|
IF TRYQ}0 THEN GO TO L5073; 00043400
|
|
EXQ ~ 3.14159-EXQ; 00043500
|
|
L5073: SHIFTLQ ~ SINQ(TRYQ)/SINQ(EXQ-ABS(TRYQ)); 00043600
|
|
COMMENT 00043700
|
|
CALCULATE LAMBDA VECTOR FOR PROPOSED SHIFT; 00043800
|
|
SUMSQQ ~ 0; 00043900
|
|
FOR MAQ ~ 1, MAQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00044000
|
|
CLONGQ[MAQ] ~ CLAMQ[K,MAQ]+CLAMQ[L,MAQ]|SHIFTLQ; 00044100
|
|
SUMSQQ ~ SUMSQQ+CLONGQ[MAQ]*2 END; 00044200
|
|
SUMSQQ ~ 1/SQRTQ(SUMSQQ); 00044300
|
|
FOR MAQ ~ 1, MAQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00044400
|
|
CLONGQ[MAQ] ~ CLONGQ[MAQ]|SUMSQQ END; 00044500
|
|
COMMENT 00044600
|
|
COUNT (WEIGHTED) SUM OF HYPERPLANE VARIABLES; 00044700
|
|
ITOTQ ~ 0; 00044800
|
|
FOR MEQ ~ 1, MEQ+1 STEP 1 UNTIL NVARQ DO BEGIN 00044900
|
|
COMMENT 00045000
|
|
TO AVOID FACTORS SHARING HYPERPLANES DO NOT COUNT POINTS THAT 00045100
|
|
ARE IN THE HYPERPLANE OF L; 00045200
|
|
IF LHYQ[MEQ]{0 THEN GO TO L42; 00045300
|
|
V ~ 0; 00045400
|
|
FOR MFQ ~ 1, MFQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00045500
|
|
V ~ V+VZEROQ[MFQ,MEQ]|CLONGQ[MFQ] END; 00045600
|
|
V ~ ABS(V); 00045700
|
|
IF V}WIDQ THEN GO TO L42; 00045800
|
|
IF KHWTQ>0 THEN GO TO L401 ELSE GO TO L400; 00045900
|
|
COMMENT 00046000
|
|
DO NOT WEIGHT ACCORDING TO HYPERPLANE SPREAD; 00046100
|
|
L400: ITOTQ ~ ITOTQ+LHYQ[MEQ]; 00046200
|
|
GO TO L42; 00046300
|
|
COMMENT 00046400
|
|
WEIGHT ACCORDING TO HYPERPLANE SPREAD; 00046500
|
|
L401: ITOTQ ~ ITOTQ+LHYQ[MEQ]; 00046600
|
|
COMMENT 00046700
|
|
LHY WILL BE 1 IF THERE IS NO WEIGHTING OF OUTLYERS; 00046800
|
|
IF V}W23Q THEN GO TO L42; 00046900
|
|
ITOTQ ~ ITOTQ+4; 00047000
|
|
IF V}W3Q THEN GO TO L42; 00047100
|
|
ITOTQ ~ ITOTQ+5; 00047200
|
|
L42: END; 00047300
|
|
IF CORRMQ=0 THEN GO TO L5022 ELSE GO TO L43; 00047400
|
|
COMMENT 00047500
|
|
SET COUNT FOR ORIGINAL POSITION; 00047600
|
|
L5022: KPREVQ ~ ITOTQ; 00047700
|
|
L43: KOUNTQ[M] ~ ITOTQ; 00047800
|
|
COMMENT 00047900
|
|
CHOOSE BEST POSITION (IT MAY BE THE ORIGINAL ONE); 00048000
|
|
IF KTOTQ>KOUNTQ[M] THEN GO TO L44; 00048100
|
|
KTOTQ ~ KOUNTQ[M]; 00048200
|
|
KJQ ~ M; 00048300
|
|
L44: END; 00048400
|
|
COMMENT 00048500
|
|
IF NO POSITION BETTER THAN ORIGINAL GO TO NEXT SHIFT PLANE; 00048600
|
|
IF KTOTQ>KPREVQ THEN GO TO L45 ELSE GO TO L201; 00048700
|
|
COMMENT 00048800
|
|
RECORD BEST SHIFT AND HYPERPLANE COUNT; 00048900
|
|
L45: CORRMQ ~ KJQ-NSHQ+NPOSQ; 00049000
|
|
TRYQ ~ CORRMQ|ANGQ; 00049100
|
|
EXQ ~ EXANGQ[L]; 00049200
|
|
EXANGQ[L] ~ TRYQ; 00049300
|
|
IF TRYQ}0 THEN GO TO L5075; 00049400
|
|
EXQ ~ 3.14159-EXQ; 00049500
|
|
L5075: SHIFTQ[L] ~ SINQ(TRYQ)/SINQ(EXQ-ABS(TRYQ)); 00049600
|
|
LKOUNTQ[L] ~ KOUNTQ[KJQ]-KPREVQ; 00049700
|
|
L201: END; 00049800
|
|
COMMENT 00049900
|
|
ALL BEST MOVES ARE NOW IN SHIFT(L); 00050000
|
|
IF KANGQ>0 THEN GO TO L541; 00050100
|
|
L540: KNQ ~ 1; 00050200
|
|
GO TO L542; 00050300
|
|
L541: IF MULTQ{0 THEN GO TO L540; 00050400
|
|
KNQ ~ MAX(KNQ,2); 00050500
|
|
L542: M ~ 0; 00050600
|
|
K0Q ~ 1; 00050700
|
|
FOR KLQ ~ 1, KLQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00050800
|
|
TEMQ[KLQ] ~ 0 END; 00050900
|
|
L551: KTOTQ ~ 0; 00051000
|
|
FOR L ~ 1, L+1 STEP 1 UNTIL NFACQ DO BEGIN 00051100
|
|
IF LKOUNTQ[L]{KTOTQ THEN GO TO L553; 00051200
|
|
KTOTQ ~ LKOUNTQ[L]; 00051300
|
|
KJQ ~ L; 00051400
|
|
M ~ 1; 00051500
|
|
L553: END; 00051600
|
|
IF KTOTQ>0 THEN GO TO L555; 00051700
|
|
IF M>0 THEN GO TO L556 ELSE GO TO L320; 00051800
|
|
L555: TEMQ[KJQ] ~ SHIFTQ[KJQ]; 00051900
|
|
LKOUNTQ[KJQ] ~ -LKOUNTQ[KJQ]; 00052000
|
|
KOUNTQ[K0Q] ~ KJQ; 00052100
|
|
K0Q ~ K0Q+1; 00052200
|
|
IF K0Q>KNQ THEN GO TO L556 ELSE GO TO L551; 00052300
|
|
COMMENT 00052400
|
|
IF NO IMPROVING SHIFTS NOTE THAT THIS FACTOR WAS NOT MOVED; 00052500
|
|
L320: ISTABQ[K] ~ 1; 00052600
|
|
GO TO DUMMY; 00052700
|
|
L556: KOUNTQ[K0Q] ~ 0; 00052800
|
|
L321: TEMQ[K] ~ 1; 00052900
|
|
COMMENT 00053000
|
|
CALCULATE THE NEW LAMBDA VECTOR FOR THIS FACTOR; 00053100
|
|
FOR MAQ ~ 1, MAQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00053200
|
|
V ~ 0; 00053300
|
|
FOR MBQ ~ 1, MBQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00053400
|
|
V ~ V+CLAMQ[MBQ,MAQ]|TEMQ[MBQ] END; 00053500
|
|
CLONGQ[MAQ] ~ V END; 00053600
|
|
COMMENT 00053700
|
|
NORMALIZE; 00053800
|
|
SUMSQQ ~ 0; 00053900
|
|
FOR MAQ ~ 1, MAQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00054000
|
|
SUMSQQ ~ SUMSQQ+CLONGQ[MAQ]*2 END; 00054100
|
|
SUMSQQ ~ 1/SQRTQ(SUMSQQ); 00054200
|
|
FOR MAQ ~ 1, MAQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00054300
|
|
CLONGQ[MAQ] ~ CLONGQ[MAQ]|SUMSQQ END; 00054400
|
|
FOR MAQ ~ 1, MAQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00054500
|
|
V ~ 0; 00054600
|
|
IF MAQ=K THEN GO TO L68; 00054700
|
|
FOR MBQ ~ 1, MBQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00054800
|
|
V ~ V+CLONGQ[MBQ]|CLAMQ[MAQ,MBQ] END; 00054900
|
|
COMMENT 00055000
|
|
CHECK THAT ALL COSINES ARE WITHIN LEGAL RANGE; 00055100
|
|
IF ABS(V){CMAXQ THEN GO TO L68; 00055200
|
|
IF KNQ>1 THEN GO TO L544; 00055300
|
|
KJQ ~ KOUNTQ[1]; 00055400
|
|
LKOUNTQ[KJQ] ~ 0; 00055500
|
|
GO TO L542; 00055600
|
|
L544: KJQ ~ KOUNTQ[KNQ]; 00055700
|
|
TEMQ[KJQ] ~ 0; 00055800
|
|
LKOUNTQ[KJQ] ~ -LKOUNTQ[KJQ]; 00055900
|
|
KNQ ~ KNQ-1; 00056000
|
|
GO TO L321; 00056100
|
|
L68: TCOSQ[MAQ] ~ V END; 00056200
|
|
COMMENT 00056300
|
|
SET COSINES AND LAMBDA MATRICES FOR NEW POSITION; 00056400
|
|
FOR MAQ ~ 1, MAQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00056500
|
|
COSNQ[K,MAQ] ~ TCOSQ[MAQ]; 00056600
|
|
CLAMQ[K,MAQ] ~ CLONGQ[MAQ]; 00056700
|
|
COSNQ[MAQ,K] ~ TCOSQ[MAQ] END; 00056800
|
|
COMMENT 00056900
|
|
NOTE THERE WAS AN IMPROVEMENT; 00057000
|
|
IMPSQ ~ 1; 00057100
|
|
L203: GO TO DUMMY; 00057200
|
|
DUMMY: 00057300
|
|
END END; 00057400
|
|
00057500
|
|
COMMENT ************************** MXOUT ****************; 00057600
|
|
PROCEDURE MXOUTQ; 00057700
|
|
BEGIN 00057800
|
|
INTEGER DX1; 00057900
|
|
OWN INTEGER J1Q,J2Q,J3Q,I,JAQ,JBQ,JCQ,MAXRQ,J,DX2; 00058000
|
|
DEFINE VECTORQ=LHYQ#; 00058100
|
|
OWN REAL TIQ,X,V; 00058200
|
|
COMMENT THE FOLLOWING SUBROUTINES ARE REQUIRED: 00058300
|
|
TIMIN, TIME, TIMOUT, PWRITE, HYPPC; 00058400
|
|
FORMAT FL3005("DATA (",I5,") IN FORMAT ( 6X,6E12.5 )"), 00058500
|
|
FL3006(2I3,6R12.5), 00058600
|
|
FL3009("END OF DATA"), 00058700
|
|
FL10(R4.0,11I2,S3,2R3.0,S1,R2.0,I2,S1,R4.0,2I2,S1,3R4.0,2I2, 00058800
|
|
R10.2,2I1), 00058900
|
|
FL3004(//X30, 00059000
|
|
"***TRANSFORMATION MATRIX AND NEW PARAMETER CARD HAVE", 00059100
|
|
" BEEN PUNCHED"///), 00059200
|
|
FL3002(" ",X20, 00059300
|
|
"VECTOR COSINES (MAXIMUM COSINE ALLOWED BETWEEN VECT", 00059400
|
|
"ORS IS ",R6.3,")"), 00059500
|
|
FL2002(/" ",20R6.3/(" ",20R6.3)), 00059600
|
|
FL2012(" "//" ",X20,"TRANSFORMATION MATRIX (LAMBDA)"), 00059700
|
|
FL8010(/" PER CENT OF VARIABLES IN",R6.3," HYPERPLANE IS", 00059800
|
|
R5.1/), 00059900
|
|
FL2014(" ",X20,"REFERENCE STRUCTURE V(RS)"//X3,20I6/X6,20I6), 00060000
|
|
FL2003(/" ",I3,X1,20R6.3/(X8,20R6.3)), 00060100
|
|
FL2016(/" ",X3,20I6/(X4,20I6)), 00060200
|
|
FL2015(" ",X20, 00060300
|
|
"REFERENCE VECTOR STRUCTURE V(RS) WITH NON-SALIENT VA", 00060400
|
|
"LUES LESS THAN",R6.3," SUPPRESSED"//X7,30I4), 00060500
|
|
FL2044(I5,X2,S2,30R4.0); 00060600
|
|
LIST LIST1(NFACQ), 00060700
|
|
LIST2(K,J1Q,FOR DX1 ~ J2Q STEP 1 UNTIL J3Q DO CLAMQ[DX1,K]), 00060800
|
|
LIST3(TOTIMQ,FOR DX1 ~ 2 STEP 1 UNTIL 12 DO IPARQ[DX1],WIDQ,SIGQ, 00060900
|
|
ANFMINQ,NCLCYQ,XCLHCQ,NCLSPQ,NCLHOQ,UPQ,PC1Q,PC2Q,KHWTQ,KSWTQ, 00061000
|
|
TTOTALQ,KRAPQ,MULTQ), 00061100
|
|
LIST4(CMAXQ), 00061200
|
|
LIST5(FOR DX1 ~ 1 STEP 1 UNTIL NFACQ DO COSNQ[DX1,K]), 00061300
|
|
LIST6(FOR DX1 ~ 1 STEP 1 UNTIL NFACQ DO CLAMQ[DX1,K]), 00061400
|
|
LIST7(WIDQ,AHYPPCQ), 00061500
|
|
LIST8(FOR DX1 ~ 1 STEP 1 UNTIL NFACQ DO DX1), 00061600
|
|
LIST9(K,FOR DX1 ~ 1 STEP 1 UNTIL NFACQ DO VZEROQ[DX1,K]), 00061700
|
|
LIST10(FOR DX1 ~ 1 STEP 1 UNTIL NFACQ DO NHYPQ[DX1]), 00061800
|
|
LIST11(SIGQ,FOR DX1 ~ 1 STEP 1 UNTIL NFACQ DO DX1), 00061900
|
|
LIST12(J,FOR DX1 ~ 1 STEP 1 UNTIL NFACQ DO CLONGQ[DX1]); 00062000
|
|
LABEL DUMMY,L3007,L4021,L4023,L2999,L2019,L9902,L9900,L1,L2; 00062100
|
|
COMMENT 00062200
|
|
THIS SUBROUTINE CONTROLS OUTPUT; 00062300
|
|
TIMINQ(TCCQ); 00062400
|
|
COMMENT 00062500
|
|
PUNCH LAMBDA MATRIX; 00062600
|
|
WRITE(TAPE5,FL3005,LIST1); 00062700
|
|
FOR K ~ 1, K+1 STEP 1 UNTIL NFACQ DO BEGIN 00062800
|
|
J1Q ~ 1; 00062900
|
|
L3007: J3Q ~ 6|J1Q; 00063000
|
|
J2Q ~ J3Q-5; 00063100
|
|
J3Q ~ MIN(NFACQ,J3Q); 00063200
|
|
WRITE(TAPE5,FL3006,LIST2); 00063300
|
|
J1Q ~ J1Q+1; 00063400
|
|
IF NFACQ>J3Q THEN GO TO L3007; 00063500
|
|
END; 00063600
|
|
WRITE(TAPE5,FL3009); 00063700
|
|
TOTIMQ ~ TOTIMQ/60; 00063800
|
|
COMMENT 00063900
|
|
SET FOR READING TRANSFORMATION MATRIX ON SUBSEQUENT RUN; 00064000
|
|
IPARQ[4] ~ 2; 00064100
|
|
NCYCLEQ ~ NCYCLEQ-KCYCLEQ; 00064200
|
|
NCYCLEQ ~ MAX(0,NCYCLEQ); 00064300
|
|
TIQ ~ TIMEQ; 00064400
|
|
TIMOUTQ(TIQ); 00064500
|
|
TTOTALQ ~ TTOTALQ+TIQ; 00064600
|
|
COMMENT 00064700
|
|
PUNCH CONTINUATION PARAMETER CARD; 00064800
|
|
WRITE(TAPE5,FL10,LIST3); 00064900
|
|
WRITE(LINE,FL3004); 00065000
|
|
COMMENT 00065100
|
|
STORE RESULTS ON TAPE OR DISK IF REQUIRED; 00065200
|
|
IF IPARQ[7]{2 THEN GO TO L4021; 00065300
|
|
WRITE(SW[IPARQ[ 7]],OKTL,NFACQ,NFACQ); 00065400
|
|
FOR DX1~1 STEP 1 UNTIL NFACQ DO 00065500
|
|
WRITE(SW[IPARQ[ 7]],OKTL, FOR 00065600
|
|
DX2~1 STEP 1 UNTIL NFACQ DO COSNQ[DX2,DX1]); 00065700
|
|
L4021: IF IPARQ[3]{2 THEN GO TO L4023; 00065800
|
|
WRITE(SW[IPARQ[ 3]],OKTL,NVARQ,NFACQ); 00065900
|
|
FOR DX1~1 STEP 1 UNTIL NVARQ DO 00066000
|
|
WRITE(SW[IPARQ[ 3]],OKTL, FOR 00066100
|
|
DX2~1 STEP 1 UNTIL NFACQ DO VZEROQ[DX2,DX1]); 00066200
|
|
L4023: IF IPARQ[5]{2 THEN GO TO L2999; 00066300
|
|
WRITE(SW[IPARQ[ 5]],OKTL,NFACQ,NFACQ); 00066400
|
|
FOR DX1~1 STEP 1 UNTIL NFACQ DO 00066500
|
|
WRITE(SW[IPARQ[ 5]],OKTL, FOR 00066600
|
|
DX2~1 STEP 1 UNTIL NFACQ DO CLAMQ[DX2,DX1]); 00066700
|
|
COMMENT 00066800
|
|
PRINT COSINE MATRIX; 00066900
|
|
L2999: WRITE(LINE,FL3002,LIST4); 00067000
|
|
FOR K ~ 1, K+1 STEP 1 UNTIL NFACQ DO BEGIN 00067100
|
|
COSNQ[K,K] ~ 1; 00067200
|
|
WRITE(LINE,FL2002,LIST5); 00067300
|
|
END; 00067400
|
|
COMMENT 00067500
|
|
PRINT LAMBDA MATRIX; 00067600
|
|
WRITE(LINE,FL2012); 00067700
|
|
FOR K ~ 1, K+1 STEP 1 UNTIL NFACQ DO BEGIN 00067800
|
|
WRITE(LINE,FL2002,LIST6); 00067900
|
|
END; 00068000
|
|
COMMENT 00068100
|
|
CALCULATE AND PRINT VARIOUS HYPERPLANE PERCENT VALUES; 00068200
|
|
X ~ WIDQ; 00068300
|
|
FOR I ~ 1, I+1 STEP 1 UNTIL 5 DO BEGIN 00068400
|
|
WIDQ ~ I; 00068500
|
|
WIDQ ~ .05|WIDQ; 00068600
|
|
HYPPCQ; 00068700
|
|
WRITE(LINE,FL8010,LIST7); 00068800
|
|
END; 00068900
|
|
WIDQ ~ X; 00069000
|
|
HYPPCQ; 00069100
|
|
COMMENT 00069200
|
|
CALCULATE REFERENCE VECTOR MATRIX; 00069300
|
|
FOR JAQ ~ 1, JAQ+1 STEP 1 UNTIL NVARQ DO BEGIN 00069400
|
|
FOR JBQ ~ 1, JBQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00069500
|
|
V ~ 0; 00069600
|
|
FOR JCQ ~ 1, JCQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00069700
|
|
V ~ V+VZEROQ[JCQ,JAQ]|CLAMQ[JBQ,JCQ] END; 00069800
|
|
VECTORQ[JBQ] ~ V END; 00069900
|
|
FOR JBQ ~ 1, JBQ+1 STEP 1 UNTIL NFACQ DO BEGIN 00070000
|
|
VZEROQ[JBQ,JAQ] ~ VECTORQ[JBQ] END; 00070100
|
|
END; 00070200
|
|
COMMENT 00070300
|
|
PRINT REFERENCE VECTOR MATRIX; 00070400
|
|
WRITE(LINE,FL2014,LIST8); 00070500
|
|
FOR K ~ 1, K+1 STEP 1 UNTIL NVARQ DO BEGIN 00070600
|
|
WRITE(LINE,FL2003,LIST9); 00070700
|
|
END; 00070800
|
|
WRITE(LINE,FL2016,LIST10); 00070900
|
|
WRITE(LINE,FL8010,LIST7); 00071000
|
|
IF IPARQ[6]{2 THEN GO TO L2019; 00071100
|
|
WRITE(SW[IPARQ[ 6]],OKTL, NVARQ,NFACQ); 00071200
|
|
FOR DX1~1 STEP 1 UNTIL NVARQ DO 00071300
|
|
WRITE(SW[IPARQ[ 6]],OKTL, FOR 00071400
|
|
DX2~1 STEP 1 UNTIL NFACQ DO VZEROQ[DX2,DX1]); 00071500
|
|
COMMENT 00071600
|
|
PRINT REFERENCE VECTOR MATRIX WITH NON-SALIENTS SUPPRESSED; 00071700
|
|
L2019: WRITE(LINE,FL2015,LIST11); 00071800
|
|
FOR J ~ 1, J+1 STEP 1 UNTIL NVARQ DO BEGIN 00071900
|
|
FOR K ~ 1, K+1 STEP 1 UNTIL NFACQ DO BEGIN 00072000
|
|
IF ABS(VZEROQ[K,J])}SIGQ THEN GO TO L9902; 00072100
|
|
CLONGQ[K] ~ 0; 00072200
|
|
GO TO L9900; 00072300
|
|
L9902: CLONGQ[K] ~ VZEROQ[K,J]; 00072400
|
|
L9900: END; 00072500
|
|
WRITE(LINE,FL2044,LIST12); 00072600
|
|
END; 00072700
|
|
IF TPLOTQ>0 THEN GO TO L1 ELSE GO TO DUMMY; 00072800
|
|
COMMENT 00072900
|
|
IF PROGRAM TERMINATED FOR LACK OF TIME SUPPRESS PLOT; 00073000
|
|
L1: IPLOTQ ~ 0; 00073100
|
|
L2: GO TO DUMMY; 00073200
|
|
DUMMY: 00073300
|
|
END; 00073400
|
|
00073500
|
|
COMMENT ************************** MXCYCL ****************; 00073600
|
|
PROCEDURE MXCYCLQ; 00073700
|
|
BEGIN 00073800
|
|
OWN REAL EXQ; 00073900
|
|
COMMENT THE FOLLOWING SUBROUTINES ARE REQUIRED: 00074000
|
|
TIMIN, MXROTN, HYPPC; 00074100
|
|
FORMAT FL101(X5,I4,I7,R10.3,X9,I6,X6,I6,X4,R8.1), 00074200
|
|
FL1988(X5,"CYCLE NO.",I4," WITH",I6," HYPERPLANE VARIABLES (", 00074300
|
|
R6.2," PERCENT)."/); 00074400
|
|
LIST LIST1(K,L,TEMQ[L],NHYPQ[K],KOUNT2Q,AHYPPCQ), 00074500
|
|
LIST2(KCYCLEQ,KOUNT2Q,AHYPPCQ); 00074600
|
|
LABEL DUMMY,L1,L50,L10,L2,L4,L5; 00074700
|
|
COMMENT 00074800
|
|
THIS SUBROUTINE CONTROLS THE CYCLING OF THE FACTOR K THAT IS 00074900
|
|
BEING ROTATED; 00075000
|
|
TIMINQ(TCQ); 00075100
|
|
IMPQ ~ 0; 00075200
|
|
COMMENT 00075300
|
|
START ROTATING WITH THE FACTOR THAT IS SPECIFIED; 00075400
|
|
K ~ KSTARTQ; 00075500
|
|
L1: IF ISTABQ[K]>0 THEN GO TO L50 ELSE GO TO L10; 00075600
|
|
COMMENT 00075700
|
|
IF THE FACTOR WAS NOT MOVED LAST TIME SKIP IT FOR JUST THIS CYCLE; 00075800
|
|
L50: ISTABQ[K] ~ 0; 00075900
|
|
GO TO L5; 00076000
|
|
L10: MXROTNQ; 00076100
|
|
IF IMPSQ>0 THEN GO TO L2 ELSE GO TO L5; 00076200
|
|
COMMENT 00076300
|
|
IF A BETTER POSITION WAS FOUND FOR THE FACTOR PRINT HYPERPLANE 00076400
|
|
INFORMATION; 00076500
|
|
L2: HYPPCQ; 00076600
|
|
IMPQ ~ 1; 00076700
|
|
EXQ ~ -1; 00076800
|
|
L ~ KOUNTQ[1]; 00076900
|
|
L4: WRITE(LINE,FL101,LIST1); 00077000
|
|
IF MULTQ{0 THEN GO TO L5; 00077100
|
|
IF L=KOUNTQ[2] THEN GO TO L5; 00077200
|
|
L ~ KOUNTQ[2]; 00077300
|
|
IF L|(NFACQ+1-L){0 THEN GO TO L5; 00077400
|
|
IF TEMQ[L]!0 THEN GO TO L4; 00077500
|
|
L5: K ~ K+1; 00077600
|
|
IF K{NFACQ THEN GO TO L1; 00077700
|
|
KCYCLEQ ~ KCYCLEQ+1; 00077800
|
|
COMMENT 00077900
|
|
AT END OF CYCLE PRINT CYCLE STATISTICS; 00078000
|
|
WRITE(LINE,FL1988,LIST2); 00078100
|
|
GO TO DUMMY; 00078200
|
|
DUMMY: 00078300
|
|
END; 00078400
|
|
00078500
|
|
COMMENT ************************** COSCHK ****************; 00078600
|
|
PROCEDURE COSCHKQ; 00078700
|
|
BEGIN 00078800
|
|
INTEGER DX1; 00078900
|
|
OWN INTEGER NENDQ,I,J; 00079000
|
|
COMMENT THE FOLLOWING SUBROUTINES ARE REQUIRED: 00079100
|
|
MXCYCL, MXTEST, MXOUT, PLOT, MXEND; 00079200
|
|
FORMAT FL100(" COSINES OF ANGLES BETWEEN VECTORS INVALID (GREATER", 00079300
|
|
" THAN",R6.3, 00079400
|
|
"). RUN WILL TERMINATE IF NOT CORRECTED IN 3 CYCLES."///X10, 00079500
|
|
"COSINE MATRIX"/), 00079600
|
|
FL101(/I5,19R6.3/X5,11R6.3), 00079700
|
|
FL103(//X17,"HYPERPLANE COUNT",X5,"HYPERPLANE"/X5, 00079800
|
|
"FACTOR THIS FACTOR ALL FACTORS PER CENT"), 00079900
|
|
FL102(X30, 00080000
|
|
"COSINES WERE NOT CORRECTED IN 3 CYCLES. PROGRAM WILL", 00080100
|
|
" GO TO OUTPUT WITHOUT PLOTTING."//); 00080200
|
|
LIST LIST1(CMAXQ), 00080300
|
|
LIST2(I,FOR DX1 ~ 1 STEP 1 UNTIL NFACQ DO COSNQ[DX1,I]); 00080400
|
|
LABEL DUMMY,L2,L3,L4,L6,L8,L9; 00080500
|
|
COMMENT 00080600
|
|
THIS SUBROUTINE CHECKS THAT THE COSINES BETWEEN THE FACTORS ARE 00080700
|
|
WITHIN THE LIMITS SET BY THE MINIMUM ANGLE RESTRICTION. IF NOT, 00080800
|
|
3 CYCLES ARE ALLOWED TO ADJUST THE ANGLES. IF THERE ARE STILL 00080900
|
|
INVALID ANGLES AFTER 3 CYCLES, THE PROGRAM PROCEEDS TO 00081000
|
|
OUTPUT AND PRODUCTION IS TERMINATED.; 00081100
|
|
NENDQ ~ 0; 00081200
|
|
FOR I ~ 1, I+1 STEP 1 UNTIL NFACQ DO BEGIN 00081300
|
|
FOR J ~ 1, J+1 STEP 1 UNTIL NFACQ DO BEGIN 00081400
|
|
IF ABS(COSNQ[J,I])>CMAXQ THEN GO TO L3 ELSE GO TO L2; 00081500
|
|
COMMENT 00081600
|
|
TEST FOR COSINE TOO LARGE; 00081700
|
|
L2: END; 00081800
|
|
END; 00081900
|
|
GO TO DUMMY; 00082000
|
|
L3: IF NENDQ>0 THEN GO TO L6 ELSE GO TO L4; 00082100
|
|
COMMENT 00082200
|
|
BRANCH IF THIS IS NOT THE FIRST CLEAN-UP CYCLE; 00082300
|
|
L4: NCYCLEQ ~ KCYCLEQ+3; 00082400
|
|
COMMENT 00082500
|
|
SET TO CYCLE FOR 3 CYCLES; 00082600
|
|
NENDQ ~ 1; 00082700
|
|
WRITE(LINE,FL100,LIST1); 00082800
|
|
FOR I ~ 1, I+1 STEP 1 UNTIL NFACQ DO BEGIN 00082900
|
|
WRITE(LINE,FL101,LIST2); 00083000
|
|
END; 00083100
|
|
WRITE(LINE,FL103); 00083200
|
|
L6: MXCYCLQ; 00083300
|
|
MXTESTQ; 00083400
|
|
COMMENT 00083500
|
|
TEST FOR END CONDITION; 00083600
|
|
IF LASTQ{0 THEN GO TO L6; 00083700
|
|
IF NCYCLEQ=KCYCLEQ THEN GO TO L8 ELSE GO TO L9; 00083800
|
|
COMMENT 00083900
|
|
IF END CONDITION ON THIRD CYCLE SUPPRESS PRINT AND GO TO OUTPUT; 00084000
|
|
L8: WRITE(LINE,FL102); 00084100
|
|
IPLOTQ ~ 0; 00084200
|
|
COMMENT 00084300
|
|
IF NOT THIRD CYCLE JUST GO TO OUTPUT; 00084400
|
|
L9: MXOUTQ; 00084500
|
|
PLOTQ; 00084600
|
|
MXENDQ; 00084700
|
|
ERROR(0); 00084800
|
|
DUMMY: 00084900
|
|
END; 00085000
|
|
00085100
|
|
COMMENT ************************** MXZERO ****************; 00085200
|
|
PROCEDURE MXZEROQ; 00085300
|
|
BEGIN 00085400
|
|
INTEGER INDEX1,DX1,DX2; 00085500
|
|
OWN INTEGER N,M,J; 00085600
|
|
OWN REAL V; 00085700
|
|
COMMENT THE FOLLOWING FUNCTIONS ARE REQUIRED: 00085800
|
|
COS; 00085900
|
|
COMMENT THE FOLLOWING SUBROUTINES ARE REQUIRED: 00086000
|
|
PREAD, MXHEAD, COSCHK; 00086100
|
|
FORMAT FL101(12A6), 00086200
|
|
FL100(///// 00086300
|
|
" ***ERROR IN PARAMETERS OR TRANSFORMATION MATRIX - P", 00086400
|
|
"LEASE CHECK"//); 00086500
|
|
FORMAT FL102(I4," VARIABLES",I8," FACTORS --- INPUT MATRIX"); 00086510
|
|
LIST LIST1(FOR INDEX1 ~ 1 STEP 1 UNTIL 12 DO TITLEQ[INDEX1]); 00086600
|
|
LABEL DUMMY,L2,L4,L301,L307,L303,L309,L311,L313,L5069,L5071,L402, 00086700
|
|
L403,L404,L406,L28,L6,L9,L25,L5006,L31,L1003; 00086800
|
|
COMMENT 00086900
|
|
THIS SUBROUTINE READS IN THE FACTOE MATRIX, READS IN THE 00087000
|
|
TRANSFORMATION MATRIX OR GENERATES AN IDENTITY TRANSFORMATION 00087100
|
|
MATRIX, SETS THOSE PARAMETERS THAT ARE UNSPECIFIED TO 00087200
|
|
STANDARD VALUES, AND CALCULATES THE THE VECTOR COSINES.; 00087300
|
|
IF MULTQ>0 THEN GO TO L2; 00087400
|
|
KNQ ~ 0; 00087500
|
|
GO TO L4; 00087600
|
|
L2: KNQ ~ 3; 00087700
|
|
L4: TPLOTQ ~ 0; 00087800
|
|
KSTARTQ ~ MAX(1,KSTARTQ); 00087900
|
|
IF IPLOTQ>2 THEN GO TO L1003; 00088000
|
|
IF KANGQ>2 THEN GO TO L1003; 00088100
|
|
IF WIDQ>0 THEN GO TO L301; 00088200
|
|
WIDQ ~ 0.2; 00088300
|
|
L301: IF SIGQ>0 THEN GO TO L307; 00088400
|
|
SIGQ ~ .25; 00088500
|
|
L307: IF ANFMINQ>0 THEN GO TO L309; 00088600
|
|
ANFMINQ ~ 60; 00088700
|
|
XCLHCQ ~ 50; 00088800
|
|
L303: NCLCYQ ~ 4; 00088900
|
|
GO TO L313; 00089000
|
|
L309: IF XCLHCQ>0 THEN GO TO L311; 00089100
|
|
XCLHCQ ~ 100; 00089200
|
|
L311: IF NCLCYQ{0 THEN GO TO L303; 00089300
|
|
L313: ANGMINQ ~ .0174533|ANFMINQ; 00089400
|
|
ANGQ ~ .1047198; 00089500
|
|
IF (XPR ~ KANGQ-2)>0 THEN GO TO L1003; 00089600
|
|
IF XPR<0 THEN GO TO L5069; 00089700
|
|
ANGQ ~ ANGQ/3; 00089800
|
|
NSHQ ~ 5; 00089900
|
|
GO TO L5071; 00090000
|
|
L5069: NSHQ ~ INT((3.14159-2|ANGMINQ)/ANGQ); 00090100
|
|
L5071: CMAXQ ~ COSQ(ANGMINQ); 00090200
|
|
NCYCLEQ ~ NCYCLEQ+KCYCLEQ; 00090300
|
|
LEGALQ ~ KSWTQ; 00090400
|
|
IF (XPR ~ NCLSPQ)>0 THEN GO TO L403; 00090500
|
|
IF XPR=0 THEN GO TO L402; 00090600
|
|
KHWTQ ~ -5; 00090700
|
|
L402: NCLSPQ ~ NCLCYQ+2; 00090800
|
|
L403: IF (XPR ~ NCLHOQ)>0 THEN GO TO L406; 00090900
|
|
IF XPR=0 THEN GO TO L404; 00091000
|
|
KSWTQ ~ -5; 00091100
|
|
L404: NCLHOQ ~ NCLSPQ; 00091200
|
|
L406: IF UPQ>0 THEN GO TO L28; 00091300
|
|
UPQ ~ 1; 00091400
|
|
COMMENT 00091500
|
|
READ IN TITLE; 00091600
|
|
L28: READ(TAPE7,FL101,LIST1)[FINIS]; 00091700
|
|
IPARQ[2] ~ MAX(IPARQ[2],2); 00091800
|
|
COMMENT 00091900
|
|
READ IN FACTOR MATRIX; 00092000
|
|
READ(SW[IPARQ[ 2]],OKTL,NVARQ,NFACQ); 00092100
|
|
FOR DX1~1 STEP 1 UNTIL NVARQ DO 00092200
|
|
READ(SW[IPARQ[ 2]],OKTL, FOR 00092300
|
|
DX2~1 STEP 1 UNTIL NFACQ DO VZEROQ[DX2,DX1]); 00092400
|
|
WRITE(LINE,FL102,NVARQ,NFACQ); 00092500
|
|
00092600
|
|
FOR DX1~1 STEP 1 UNTIL NVARQ DO 00092700
|
|
WRITE(LINE,<20F6.3>, FOR DX2~1 STEP 1 UNTIL NFACQ DO 00092800
|
|
VZEROQ[DX2,DX1]); 00092900
|
|
IF IPARQ[4]>0 THEN GO TO L6 ELSE GO TO L9; 00093000
|
|
COMMENT 00093100
|
|
READ IN TRANSFORMATION MATRIX IF THERE IS ONE; 00093200
|
|
L6: READ(SW[IPARQ[ 4]],OKTL,N,M); 00093300
|
|
FOR DX1~1 STEP 1 UNTIL N DO 00093400
|
|
READ(SW[IPARQ[ 4]],OKTL, FOR DX2~100093500
|
|
STEP 1 UNTIL M DO CLAMQ[DX2,DX1]); 00093600
|
|
COMMENT 00093700
|
|
CHECK DIMENSIONS; 00093800
|
|
IF N!M THEN GO TO L1003; 00093900
|
|
IF N=NFACQ THEN GO TO L25 ELSE GO TO L1003; 00094000
|
|
COMMENT 00094100
|
|
GENERATE IDENTITY CLAM IF NEEDED; 00094200
|
|
L9: FOR J ~ 1, J+1 STEP 1 UNTIL NFACQ DO BEGIN 00094300
|
|
FOR K ~ 1, K+1 STEP 1 UNTIL NFACQ DO BEGIN 00094400
|
|
CLAMQ[K,J] ~ 0 END; 00094500
|
|
CLAMQ[J,J] ~ 1 END; 00094600
|
|
COMMENT 00094700
|
|
CALCULATE COSINE MATRIX; 00094800
|
|
L25: FOR J ~ 1, J+1 STEP 1 UNTIL NFACQ DO BEGIN 00094900
|
|
KTOTALQ[J] ~ 0; 00095000
|
|
ISTABQ[J] ~ 0; 00095100
|
|
CLONGQ[J] ~ 0; 00095200
|
|
TCOSQ[J] ~ 0; 00095300
|
|
EXANGQ[J] ~ 0; 00095400
|
|
FOR K ~ J, K+1 STEP 1 UNTIL NFACQ DO BEGIN 00095500
|
|
V ~ 0; 00095600
|
|
IF J=K THEN GO TO L5006; 00095700
|
|
FOR L ~ 1, L+1 STEP 1 UNTIL NFACQ DO BEGIN 00095800
|
|
V ~ V+CLAMQ[J,L]|CLAMQ[K,L] END; 00095900
|
|
L5006: COSNQ[J,K] ~ V; 00096000
|
|
COSNQ[K,J] ~ V END; 00096100
|
|
END; 00096200
|
|
MXHEADQ; 00096300
|
|
TOTIMQ ~ TOTIMQ|60; 00096400
|
|
IF (XPR ~ IPLOTQ-2)>0 THEN GO TO L1003; 00096500
|
|
IF XPR=0 THEN GO TO DUMMY; 00096600
|
|
COSCHKQ; 00096700
|
|
L31: GO TO DUMMY; 00096800
|
|
L1003: WRITE(LINE,FL100); 00096900
|
|
COMMENT 00097000
|
|
RETURN PROGRAM CONTROL TO MONITOR SYSTEM WITH ERROR CONDITION; 00097100
|
|
ERROR(0); 00097200
|
|
DUMMY: 00097300
|
|
END; 00097400
|
|
00097500
|
|
COMMENT ************************** MAINPRO ****************; 00097600
|
|
PROCEDURE MAINPRO; 00097700
|
|
BEGIN 00097800
|
|
INTEGER DX1; 00097900
|
|
COMMENT THE FOLLOWING SUBROUTINES ARE REQUIRED: 00098000
|
|
TIMIN, TIME, MXZERO, MXOUT, PLOT, DUMMY, MXCYCL, MXTEST, 00098100
|
|
MXEND, EXTRA; 00098200
|
|
FORMAT FL100(R4.0,11I2,2R3.2,R2.0,I2,R4.1,2I2,3R4.1,2I2,R10.4,2I1), 00098300
|
|
FL101(X30,"***ROTATION TERMINATED"); 00098400
|
|
LIST LIST1(TOTIMQ,FOR DX1 ~ 2 STEP 1 UNTIL 12 DO IPARQ[DX1],WIDQ,SIGQ, 00098500
|
|
ANFMINQ,NCLCYQ,XCLHCQ,NCLSPQ,NCLHOQ,UPQ,PC1Q,PC2Q,KHWTQ,KSWTQ, 00098600
|
|
TTOTALQ,KRAPQ,MULTQ); 00098700
|
|
LABEL L11,L2,L3; 00098800
|
|
L11: TIMINQ(TIMEQ); 00098900
|
|
COMMENT 00099000
|
|
THE PARAMETER CARD IS READ; 00099100
|
|
READ(TAPE7,FL100,LIST1)[FINIS]; 00099200
|
|
KRAPQ ~ ABS(KRAPQ); 00099300
|
|
MULTQ ~ ABS(MULTQ); 00099400
|
|
MXZEROQ; 00099500
|
|
IF IPLOTQ}2 THEN GO TO L2 ELSE GO TO L3; 00099600
|
|
COMMENT 00099700
|
|
IF THIS IS A PLOT ONLY RUN THE PROGRAM PROCEEDS TO OUTPUT; 00099800
|
|
L2: MXOUTQ; 00099900
|
|
PLOTQ; 00100000
|
|
GO TO L11; 00100100
|
|
L3: DUMMYQ; 00100200
|
|
COMMENT 00100300
|
|
DUMMY AND EXTRA, BELOW, ARE SUBROUTINES THAT RETURN CONTROL 00100400
|
|
WITHOUT DOING ANYTHING. THEY ALLOW THE USER TO INSERT HIS OWN 00100500
|
|
SUBROUTINES WHICH WILL WITH MOST COMPUTER SYSTEMS OVERRIDE THE 00100600
|
|
DUMMY SUBROUTINES. A POSSIBLE USE FOR THIS SUBROUTINE, DUMMY, 00100700
|
|
MIGHT BE TO BORDER THE FACTOR OR TRANSFORMATION MATRICES OR TO 00100800
|
|
PERMUTE THE COLUMNS AS MIGHT BE DESIRED WITH KSTART NOT ONE.; 00100900
|
|
MXCYCLQ; 00101000
|
|
MXTESTQ; 00101100
|
|
IF LASTQ{0 THEN GO TO L3; 00101200
|
|
WRITE(LINE,FL101); 00101300
|
|
MXOUTQ; 00101400
|
|
PLOTQ; 00101500
|
|
MXENDQ; 00101600
|
|
EXTRAQ; 00101700
|
|
COMMENT 00101800
|
|
EXTRA IS A DUMMY SUBROUTINE THAT DOES NOTHING BUT ALLOWS THE 00101900
|
|
USER TO INSERT HIS OWN SUBROUTINE, E.G. TO CALCULATE THE FACTOR 00102000
|
|
MATRICES FROM THE REFERENCE VECTOR MATRICES.; 00102100
|
|
GO TO L11; 00102200
|
|
END; 00102300
|
|
00102400
|
|
COMMENT ************************** OUTER BLOCK ************; 00102500
|
|
XPR~QQ~0; 00102600
|
|
SENSL[1]~FALSE; 00102700
|
|
SENSL[2]~FALSE; 00102800
|
|
SENSL[3]~FALSE; 00102900
|
|
SENSL[4]~FALSE; 00103000
|
|
MAINPRO; FINIS: 00103100
|
|
END OF OUTER BLK. 00103200
|
|
LAST CARD ON CRDIMG TAPE 99999999
|