CTITLESACOR1 -- SEMI-LOG, LOG-LOG X-Y PLOTS FOR SDCORA 00000100 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CA AUTHOR FIELDER/KNIGHT 00000200 CA DESIGNER FIELDER 00000300 CA LANGUAGE FORTRAN 77 00000400 CA SYSTEM IBM/CRAY 00000500 CA WRITTEN 12/87 00000600 CA REVISED XX-XX-XX XXX WHY 00000700 CA 00000800 CA 00000900 CA CALL SACOR1(YRAY,XRAYA,NC,NUM, 00001000 CA * XAXIS,YAXIS, 00001100 CA * LINEAR,AAXIS, 00001200 CA * CMP,TITLE, 00001300 CA * ISIZE,ITYPE, 00001400 CA * ND, GRID, 00001500 CA * XRAYLG,YRAYLG) 00001600 CA 00001700 CA 00001800 CA ARGUMENT TYPE DESCRIPTION 00001900 CA -------- ---- ----------- 00002000 CA 00002100 CA YRAY( J,I) R4 Y-AXIS DATA ARRAY 00002200 CA I INDEX OF CURRENT SET OF POINTS TO PLOT 00002300 CA J INDEX OF NUM(I) POINTS TO PLOT 00002400 CA XRAYA( J) R4 X-AXIS DATA ARRAY (SAME FOR ALL YRAY(*,I)) 00002500 CA NC I4 NUMBER OF PLOTS ON A GRAPH 00002600 CA NC= -1 THE PLOT IS OPENED 00002700 CA NC= 0 THE PLOT IS CLOSED 00002800 CA NUM(I) I4 NUMBER OF DATA POINTS IN YRAY(*,I) 00002900 CA XAXIS C60 X-AXIS LABEL 00003000 CA YAXIS C60 Y-AXIS LABEL 00003100 CA LINEAR I4 SWITCH FOR TYPE OF PLOT 00003200 CA = 1 LOG-LOG PLOT 00003300 CA DEFAULT SIZE 00003400 CA = 2 SEMI-LOG PLOT 00003500 CA X-AXIS IS LINEAR 00003600 CA DEFAULT SIZE 00003700 CA = 3 SEMI-LOG PLOT 00003800 CA Y-AXIS IS LINEAR 00003900 CA DEFAULT SIZE 00004000 CA = 4 CARTESIAN PLOT 00004100 CA DEFAULT SIZE 00004200 CA = 5 LOG-LOG PLOT 00004300 CA AAXIS PARAMETERS DEFINED BY USER: 00004400 CA CCYX,CXINCH,XMIN,CCYY,CYINCH,YMIN 00004500 CA (SEE AAXIS BELOW) 00004600 CA = 6 SEMI-LOG PLOT 00004700 CA X-AXIS IS LINEAR 00004800 CA AAXIS PARAMETERS DEFINED BY USER: 00004900 CA CCYY,CYINCH,YMIN,XINCH,XMIN,XDIV 00005000 CA (SEE AAXIS BELOW) 00005100 CA = 7 SEMI-LOG PLOT 00005200 CA Y-AXIS IS LINEAR 00005300 CA AAXIS PARAMETERS DEFINED BY USER: 00005400 CA CCYX,CXINCH,XMIN,YINCH,YMIN,YDIV 00005500 CA (SEE AAXIS BELOW) 00005600 CA = 8 CARTESIAN PLOT 00005700 CA AAXIS PARAMETERS DEFINED BY USER: 00005800 CA XINCH,XMIN,XDIV,YINCH,YMIN,YDIV 00005900 CA (SEE AAXIS BELOW) 00006000 CA 00006100 CA AAXIS(6) R4 ARRAY WITH GRAPH PARAMETERS 00006200 CA USED ONLY WHEN LINEAR = 5,6,7,8 00006300 CA CONTAINS AN APPROPRIATE COMBINATION OF: 00006400 CA 00006500 CA 1. CCYX,CCYY:NUMBER OF CYCLES IN X AND/OR Y 00006600 CA THESE MUST BE WHOLE NUMBERS 00006700 CA 00006800 CA 2. XINCH,YINCH:LENGTH OF X/Y-AXIS IN INCHES 00006900 CA 00007000 CA 3. XMIN,YMIN:MINIMUM VALUES FOR X/Y AXIS 00007100 CA 00007200 CA 4. XDIV,YDIV:AXIS INCREMENT IN X/Y PER INCH 00007300 CA 00007400 CA 5. CXINCH,CYINCH:INCHES/CYCLE ALONG X/Y AXIS00007500 CA 00007600 CA CMP(I) C8 CHARACTER ARRAY FOR LABELING CURVE 'I' IN00007700 CA A MULTI-CURVE PLOT. PLOTTED TO THE LEFT 00007800 CA OF THE LAST POINT=(Y(NUM(I),I) IN EACH 00007900 CA ARRAY. IF CMP(1) = 'NO', NO LABELS ARE 00008000 CA WRITTEN. 00008100 CA 00008200 CA TITLE C128 PLOT TITLE 00008300 CA 00008400 CA ISIZE I4 SELECTS PLOT SIZE WHEN LINEAR<5 00008500 CA =0 PLOT SIZE IS 15" X 9.5" (X BY Y) 00008600 CA =1 PLOT SIZE IS 11" X 8.0" (X BY Y) 00008700 CA 00008800 CA ITYPE(I) I4 SWITCH FOR TYPE OF SYMBOL AND LINE 00008900 CA TO USE IN PLOTTING POINTS IN YRAY,XRAYA 00009000 CA =1 NO SYMBOL DRAWN 00009100 CA ODD I:SOLID LINE 00009200 CA EVEN I:DASHED LINE 00009300 CA =2 USE CALCOMP SYMBOL NPL(I) 00009400 CA NO CONNECTING LINES 00009500 CA =3 USE CALCOMP SYMBOL NPL(I) 00009600 CA AND SOLID CONNECTING LINES 00009700 CA 00009800 CA ND I4 PRIMARY DIMENSION OF ARRAYS XRAYA,YRAY 00009900 CA MUST BE = OR > NUM(I),ALL I 00010000 CA 00010010 CA GRID L4 IF .TRUE., A GRID IS SUPERIMPOSED ON PLOT00010020 CA 00010100 CA 00010200 CA SUBROUTINE LOGPLT GRAPHS SEVERAL ARRAYS OF DATA POINTS 00010300 CA USING A LOG-LOG SCALE OR A LOG-LINEAR SCALE, ALL ON THE 00010400 CA SAME PLOT. SCALES, ANNOTATION, AND TYPE OF GRAPH ARE 00010500 CA SPECIFIED BY CALLING PROGRAM. 00010600 CA 00010700 CAEND 00010800 C EJECT 00010900 C 00011000 SUBROUTINE SACOR1(YRAY,XRAYA,NC,NUM, 00011100 * XAXIS,YAXIS, 00011200 * LINEAR,AAXIS, 00011300 * CMP,TITLE, 00011400 * ISIZE,ITYPE, 00011500 * ND, GRID, 00011600 * XRAYLG,YRAYLG) 00011700 C 00011800 COMMON /SYSTEM/ SYSTEM 00011900 COMMON /SYSTEM/ SYBYPW 00012000 COMMON /SYSTEM/ SYLOCF 00012100 COMMON /SYSTEM/ JAPNMS(4) 00012200 C 00012300 C =================== 00012400 C ARRAYS IN CALL LIST 00012500 C =================== 00012600 C 00012700 REAL XRAYLG(ND),YRAYLG(ND) 00012800 REAL YRAY(ND,10),XRAYA(ND) 00012900 REAL AAXIS(6) 00013000 C 00013100 CHARACTER*128 TITLE 00013200 CHARACTER*64 XAXIS,YAXIS 00013300 CHARACTER*8 CMP(15) 00013400 C 00013500 INTEGER NUM(NC) 00013600 INTEGER ITYPE(NC) 00013700 C 00013710 LOGICAL GRID 00013720 C 00013800 C =================== 00013900 C LOCAL VARIABLES 00014000 C =================== 00014100 C 00014200 INTEGER S1CPCH 00014300 LOGICAL CRAY 00014400 C 00014500 INTEGER NPL(20) 00014600 C 00014700 CHARACTER*8 CHECK 00014800 C 00014900 C 00015000 DATA NPL/11,2,4,1,0,14,5,12,52,6,3,10,52,91,123,8,7,37,74,44/ 00015100 DATA CHECK/'NO '/ 00015200 C 00015300 IF(NC.EQ.-1) GO TO 1210 00015400 IF(NC.EQ.0) GO TO 1220 00015500 C 00015600 CRAY = .FALSE. 00015700 IF(S1CPCH(SYSTEM,1,'CRAY',1,4).EQ.0) CRAY=.TRUE. 00015800 C 00015900 IF(ISIZE.EQ.1) GO TO 10 00016000 C 00016100 XINCH=15. 00016200 YINCH=9.5 00016300 GO TO 20 00016400 C 00016500 10 XINCH=11.0 00016600 YINCH=8.0 00016700 C 00016800 20 XMIN=1.E20 00016900 YMIN = 1.E20 00017000 YMAX = 1.E-20 00017100 XMAX=1.E-20 00017200 C 00017300 C CALCULATE MINIMUM AND MAXIMUM VALUE OF X ARRAY DATA 00017400 C 00017500 DO 23I=1,NC 00017600 N= NUM(I) 00017700 IF ( N .LE. 1) GO TO 23 00017800 C 00017900 XN = XRAYA(1) 00018000 XM = XRAYA(1) 00018100 C 00018200 DO 21J=2,N 00018300 XN = AMIN1(XRAYA(J),XN) 00018400 XM = AMAX1(XRAYA(J),XM) 00018500 21 CONTINUE 00018600 C 00018700 CX CALL MINMAX(N,XRAYA,XN,XM) 00018800 C 00018900 IF(I.GE.2) GO TO 22 00019000 XXMIN= XN 00019100 XXMAX= XM 00019200 GO TO 23 00019300 C 00019400 22 IF(XM.GT.XXMAX) XXMAX= XM 00019500 IF(XN.LT.XXMIN) XXMIN=XN 00019600 C 00019700 23 CONTINUE 00019800 C 00019900 C DETERMINE TYPE OF PLOT 00020000 C 00020100 GO TO(24,25,24,25,24,25,24,25),LINEAR 00020200 C 00020300 24 IF(XXMIN.LE.0..OR.XXMAX.LE.0.) GO TO 1190 00020400 C 00020500 C CALCULATE MINIMUM AND MAXIMUM VALUE OF Y ARRAY DATA 00020600 C 00020700 25 DO28 I=1,NC 00020800 N= NUM(I) 00020900 IF (N .LE. 1) GO TO 28 00021000 C 00021100 YN = YRAY(1,I) 00021200 YM = YRAY(1,I) 00021300 C 00021400 DO 26J=2,N 00021500 YN = AMIN1(YRAY(J,I),YN) 00021600 YM = AMAX1(YRAY(J,I),YM) 00021700 26 CONTINUE 00021800 C 00021900 CX DO 7 J=1,N 00022000 CX YTEST(J)= YRAY(J,I) 00022100 CX 7 CONTINUE 00022200 C 00022300 CX CALL MINMAX(N,YRAY(1,I),YN,YM) 00022400 C 00022500 IF(I.GE.2) GO TO 27 00022600 YYMIN= YN 00022700 YYMAX= YM 00022800 GO TO 28 00022900 C 00023000 27 IF(YM.GT.YYMAX) YYMAX= YM 00023100 IF(YN.LT.YYMIN) YYMIN=YN 00023200 C 00023300 28 CONTINUE 00023400 C 00023500 C DETERMINE TYPE OF PLOT 00023600 C 00023700 GO TO(29,29,30,30,29,29,30,30), LINEAR 00023800 C 00023900 29 IF(YYMIN.LE.0..OR.YYMAX.LE.0.) GO TO 1200 00024000 C 00024100 30 GO TO ( 50 , 190 , 300 , 400 , 40 , 180 , 290 , 35 ),LINEAR 00024200 C 00024300 35 XINCH= AAXIS(1) 00024400 YINCH= AAXIS(4) 00024500 XMIN= AAXIS(2) 00024600 YMIN= AAXIS(5) 00024700 XDIV= AAXIS(3) 00024800 YDIV= AAXIS(6) 00024900 YMAX= (YDIV*YINCH) + YMIN 00025000 XMAX= (XDIV*XINCH) + XMIN 00025100 GO TO 480 00025200 C 00025300 40 NCYX= AAXIS(1) 00025400 NCYY= AAXIS(4) 00025500 CXINCH= AAXIS(2) 00025600 CYINCH= AAXIS(5) 00025700 XMIN= AAXIS(3) 00025800 YMIN= AAXIS(6) 00025900 GO TO 150 00026000 C 00026100 C FINDS MAXIMUMS AND MINIMUMS OF DATA PLOTTED FOR 00026200 C A LOG-LOG SYSTEM. 00026300 C CREATES APPROPRIATE SCALES. 00026400 C 00026500 50 CONTINUE 00026600 70 IF(XXMIN.GE.XMIN) GO TO 80 00026700 XMIN=XMIN/10. 00026800 GO TO 70 00026900 80 IF(XXMAX.LE.XMAX) GO TO 120 00027000 XMAX=XMAX*10. 00027100 GO TO 80 00027200 C 00027300 120 IF(YYMIN.GE.YMIN) GO TO 130 00027400 YMIN=YMIN/10. 00027500 GO TO 120 00027600 130 IF(YYMAX.LE.YMAX) GO TO 140 00027700 YMAX=YMAX*10. 00027800 GO TO 130 00027900 C 00028000 140 NCYX= ALOG10(XMAX) - ALOG10(XMIN) +.2 00028100 NCYY= ALOG10(YMAX) - ALOG10(YMIN) +.2 00028200 CXINCH= XINCH/NCYX 00028300 CYINCH= YINCH/NCYY 00028400 GO TO 480 00028500 C 00028600 C CREATES SCALES WHEN LINEAR=5 00028700 C 00028800 150 XMAX= 10.**NCYX * XMIN 00028900 NCYX= ALOG10(XMAX) - ALOG10(XMIN) + .2 00029000 XINCH= CXINCH * NCYX 00029100 160 IF(LINEAR.NE.5) GO TO 480 00029200 170 YMAX=10.**NCYY * YMIN 00029300 NCYY = ALOG10(YMAX) - ALOG10(YMIN) + .2 00029400 YINCH= CYINCH*NCYY 00029500 GO TO 480 00029600 C 00029700 C CREATES AXIS SCALES FOR SEMI-LOG PLOT - X-AXIS 00029800 C = LINEAR 00029900 C 00030000 180 NCYY= AAXIS(1) 00030100 CYINCH= AAXIS(2) 00030200 YMIN= AAXIS(3) 00030300 XINCH= AAXIS(4) 00030400 XMIN= AAXIS(5) 00030500 XDIV= AAXIS(6) 00030600 XMAX= (XDIV*XINCH) + XMIN 00030700 YMAX=10.**NCYY * YMIN 00030800 NCYY = ALOG10(YMAX) - ALOG10(YMIN) + .2 00030900 YINCH= CYINCH*NCYY 00031000 GO TO 480 00031100 C 00031200 190 IF(XXMIN.LT.XMIN) XMIN=XXMIN 00031300 IF(XXMAX.GT.XMAX) XMAX=XXMAX 00031400 C 00031500 NINCH=XINCH 00031600 STORX= XMAX 00031700 CX220 CALL UNITS(XDIV,XMIN,XMAX,NINCH) 00031800 220 CONTINUE 00031900 XMAX = XMIN + FLOAT(NINCH)*XDIV 00032000 IF(STORX.LE.XMAX) GO TO 250 00032100 XMAX= XMAX + XDIV 00032200 GO TO 220 00032300 C 00032400 250 IF(YYMIN.GE.YMIN) GO TO 260 00032500 YMIN=YMIN/10. 00032600 GO TO 250 00032700 260 IF(YYMAX.LE.YMAX) GO TO 270 00032800 YMAX=YMAX*10. 00032900 GO TO 260 00033000 C 00033100 270 IF(YMAX.EQ.0..OR.YMIN.EQ.0.) GO TO 1200 00033200 NCYY= ALOG10(YMAX) - ALOG10(YMIN) + .2 00033300 CYINCH = YINCH/NCYY 00033400 GO TO 480 00033500 C 00033600 C CREATES AXIS SCALES FOR SEMI-LOG PLOT - Y-AXIS 00033700 C = LINEAR 00033800 C 00033900 290 NCYX= AAXIS(1) 00034000 CXINCH= AAXIS(2) 00034100 XMIN= AAXIS(3) 00034200 YINCH= AAXIS(4) 00034300 YMIN= AAXIS(5) 00034400 YDIV= AAXIS(6) 00034500 YMAX= (YDIV*YINCH) + YMIN 00034600 XMAX= 10.**NCYX * XMIN 00034700 NCYX= ALOG10(XMAX) - ALOG10(XMIN) + .2 00034800 XINCH= CXINCH * NCYX 00034900 GO TO 480 00035000 C 00035100 300 IF(YYMIN.LT.YMIN) YMIN=YYMIN 00035200 IF(YYMAX.GT.YMAX) YMAX=YYMAX 00035300 C 00035400 NINCH=YINCH 00035500 STORY= YMAX 00035600 CX330 CALL UNITS(YDIV,YMIN,YMAX,NINCH) 00035700 330 CONTINUE 00035800 YMAX = YMIN + FLOAT(NINCH)*YDIV 00035900 IF(STORY.LE.YMAX) GO TO 360 00036000 YMAX= YMAX + YDIV 00036100 GO TO 330 00036200 C 00036300 360 IF(XXMIN.GE.XMIN) GO TO 370 00036400 XMIN=XMIN/10. 00036500 GO TO 360 00036600 370 IF(XXMAX.LE.XMAX) GO TO 380 00036700 XMAX=XMAX*10. 00036800 GO TO 370 00036900 C 00037000 380 IF(XMIN.EQ.0..OR.XMAX.EQ.0.) GO TO 1190 00037100 NCYX= ALOG10(XMAX) - ALOG10(XMIN) + .2 00037200 CXINCH = XINCH/NCYX 00037300 GO TO 480 00037400 C 00037500 C CREATES SCALES FOR FULLY LINEAR PLOT 00037600 C 00037700 400 IF(XXMIN.LT.XMIN) XMIN=XXMIN 00037800 IF(XXMAX.GT.XMAX) XMAX=XXMAX 00037900 C 00038000 NINCH=XINCH 00038100 STORX= XMAX 00038200 CX430 CALL UNITS(XDIV,XMIN,XMAX,NINCH) 00038300 430 CONTINUE 00038400 XMAX = XMIN + FLOAT(NINCH)*XDIV 00038500 IF(STORX.LE.XMAX) GO TO 440 00038600 XMAX= XMAX + XDIV 00038700 GO TO 430 00038800 C 00038900 440 IF(YYMIN.LT.YMIN) YMIN=YYMIN 00039000 IF(YYMAX.GT.YMAX) YMAX=YYMAX 00039100 C 00039200 NINCH=YINCH 00039300 STORY= YMAX 00039400 CX470 CALL UNITS(YDIV,YMIN,YMAX,NINCH) 00039500 470 CONTINUE 00039600 YMAX = YMIN + FLOAT(NINCH)*YDIV 00039700 IF(STORY.LE.YMAX) GO TO 480 00039800 YMAX= YMAX + YDIV 00039900 GO TO 470 00040000 C 00040100 C INITIALIZE 00040200 C 00040300 480 CONTINUE 00040400 C 00040500 C CALCULATE ORIGIN FOR NEXT PLOT 00040600 C 00040700 YINC= YINCH + 2. 00040800 XCUM= AMAX1(XCUM,XINCH) 00040900 YTST= YTST + YINC 00041000 IF(YTST.LE.30.) GO TO 485 00041100 C 00041200 QY= -YCUM 00041300 QX= XCUM + 4. 00041400 CALL PLOT(QX,QY,-3) 00041500 QY= YINC 00041600 QX=0. 00041700 YCUM=0. 00041800 YTST=YINC 00041900 GO TO 490 00042000 C 00042100 485 CONTINUE 00042200 YCUM= YCUM + QY 00042300 CALL PLOT(QX,QY,-3) 00042400 QY= YINC 00042500 C 00042600 C WRITE HEADING 00042700 C 00042800 490 Y1 = YINCH + 0.5 00042900 X1 =(XINCH-10.75)/2. 00043000 CALL SYMBOL(X1,Y1,.15,TITLE,0.,90) 00043100 C 00043200 C WRITE AXIS LABELS 00043300 C 00043400 500 CALL SYMBOL(X1,-.5,.15,XAXIS,0.,60) 00043500 510 Y=(YINCH-7.5)/2. 00043600 CALL SYMBOL(-.8,Y,.15,YAXIS,90.,60) 00043700 C 00043800 C CLOSE X & Y AXIS 00043900 C 00044000 520 CALL PLOT (0.0,0.0,3) 00044100 CALL PLOT (0.0,YINCH,2) 00044200 CALL PLOT (XINCH,YINCH,2) 00044300 CALL PLOT (XINCH,0.0,2) 00044400 CALL PLOT (0.0,0.0,2) 00044500 C 00044600 C DRAW AXIS TIC MARKS 00044700 C 00044800 C 00044810 C ==================================================================== 00044820 C LEFT TICKS 00044830 C ==================================================================== 00044840 C 00044850 GO TO ( 530 , 530 , 560 , 560 , 530 , 530 , 560 , 560 ), 00044900 *LINEAR 00045000 530 NCY=NCYY 00045100 XEND = 0.05 00045110 IF(GRID) XEND = XINCH 00045120 C 00045200 DO 550 I=1,NCY 00045300 C 00045400 DO 540 J=2,9 00045500 AI=FLOAT(J) 00045600 Y = CYINCH * ALOG10(AI) + CYINCH*FLOAT(I-1) 00045700 CALL PLOT(0.,Y,3) 00045800 CALL PLOT(0.05,Y,2) 00045900 540 CONTINUE 00046000 C 00046100 Y=CYINCH*FLOAT(I) 00046200 IF(Y.EQ.YINCH) GO TO 550 00046300 CALL PLOT(0.,Y,3) 00046400 CALL PLOT(XEND,Y,2) 00046500 550 CONTINUE 00046600 C 00046700 GO TO 580 00046800 560 NCY=YINCH 00046900 XEND = 0.05 00046910 IF(GRID) XEND = XINCH 00046920 C 00047000 DO 570 I=1,NCY 00047100 X1=XINCH-.05 00047200 Y=FLOAT(I) 00047300 CALL PLOT(0.,Y,3) 00047400 CALL PLOT(XEND,Y,2) 00047500 570 CONTINUE 00047600 C 00047700 C 00047710 C ==================================================================== 00047720 C TOP TICKS 00047730 C ==================================================================== 00047740 C 00047750 580 GO TO ( 590 , 620 , 590 , 620 , 590 , 620 , 590 , 620 ), 00047800 *LINEAR 00047900 590 NCX=NCYX 00048000 C 00048100 DO 610 I=1,NCX 00048200 C 00048300 DO 600 J=2,9 00048400 AJ=FLOAT(J) 00048500 X = CXINCH * ALOG10(AJ) + CXINCH*FLOAT(I-1) 00048600 CALL PLOT(X,YINCH-.10,3) 00048700 CALL PLOT(X,YINCH,2) 00048800 600 CONTINUE 00048900 C 00049000 X = CXINCH*FLOAT(I) 00049100 IF(X.EQ.XINCH) GO TO 610 00049200 CALL PLOT(X,YINCH-.1,3) 00049300 CALL PLOT(X,YINCH,2) 00049400 610 CONTINUE 00049500 C 00049600 GO TO 640 00049700 C 00049710 C ==================================================================== 00049720 C RIGHT TICKS 00049730 C ==================================================================== 00049740 C 00049750 620 NCX=XINCH 00049800 C 00049900 DO 630 I=1,NCX 00050000 X=FLOAT(I) 00050100 Y1=YINCH-.05 00050200 CALL PLOT(X,YINCH-.10,3) 00050300 CALL PLOT(X,YINCH,2) 00050400 630 CONTINUE 00050500 C 00050600 640 GO TO ( 650 , 650 , 680 , 680 , 650 , 650 , 680 , 680 ), 00050700 *LINEAR 00050800 650 NCY=NCYY 00050900 C 00051000 DO 670 I=1,NCY 00051100 C 00051200 DO 660 J=1,8 00051300 AI=10 - FLOAT(J) 00051400 PROD= CYINCH * ALOG10(AI) 00051500 Y = YINCH - (( CYINCH - PROD ) + CYINCH*FLOAT(I-1)) 00051600 CALL PLOT(XINCH-.05,Y,3) 00051700 CALL PLOT(XINCH,Y,2) 00051800 660 CONTINUE 00051900 C 00052000 Y=YINCH - (CYINCH*FLOAT(I)) 00052100 IF(Y.EQ.0.0) GO TO 700 00052200 CALL PLOT(XINCH-.10,Y,3) 00052300 CALL PLOT(XINCH,Y,2) 00052400 670 CONTINUE 00052500 C 00052600 GO TO 700 00052700 680 NCY=YINCH 00052800 NYINCH= YINCH 00052900 DIF= YINCH - NYINCH 00053000 X1= XINCH - .05 00053100 C 00053200 DO 690 I=1,NCY 00053300 Y=(YINCH-DIF) - FLOAT(I-1) 00053400 CALL PLOT(XINCH,Y,3) 00053500 CALL PLOT(X1,Y,2) 00053600 690 CONTINUE 00053700 C 00053710 C ==================================================================== 00053800 C BOTTOM TICKS 00053820 C ==================================================================== 00053830 C 00053840 700 GO TO ( 710 , 740 , 710 , 740 , 710 , 740 , 710 , 740 ), 00053900 *LINEAR 00054000 710 NCX=NCYX 00054100 YEND = 0.10 00054110 IF(GRID) YEND = YINCH 00054120 C 00054200 DO 730 I=1,NCX 00054300 C 00054400 DO 720 J=1,8 00054500 AJ=10 - FLOAT(J) 00054600 PROD= CXINCH * ALOG10(AJ) 00054700 X = XINCH - (( CXINCH - PROD ) + CXINCH*FLOAT(I-1)) 00054800 CALL PLOT(X,0.0,3) 00054900 CALL PLOT(X,0.05,2) 00055000 720 CONTINUE 00055100 C 00055200 X = XINCH - (CXINCH*FLOAT(I)) 00055300 IF(X.EQ. 0.0 ) GO TO 730 00055400 CALL PLOT(X,0.,3) 00055500 CALL PLOT(X,YEND,2) 00055600 730 CONTINUE 00055700 C 00055800 GO TO 760 00055900 740 NCX=XINCH 00056000 NXINCH= XINCH 00056100 DIF= XINCH - NXINCH 00056200 YEND = 0.10 00056210 IF(GRID) YEND = YINCH 00056220 C 00056300 DO 750 I=1,NCX 00056400 X=(XINCH-DIF) - FLOAT(I-1) 00056500 CALL PLOT(X,0.0,3) 00056600 CALL PLOT(X,YEND,2) 00056700 750 CONTINUE 00056800 C 00056900 C LABEL AXIS 00057000 C 00057100 760 GO TO ( 770 , 790 , 770 , 790 , 770 , 790 , 770 , 790 ), 00057200 *LINEAR 00057300 770 Y= -.2 00057400 X= 0. 00057500 XNUM=XMIN 00057600 NXP=NCYX+1 00057700 C 00057800 DO 780 I=1,NXP 00057900 X1= .20 + X 00058000 CALL NUMBER(X-.09,Y,.10,10.,0.,-1) 00058100 XSUP= ALOG10(XNUM) 00058200 CALL NUMBER(X1,Y+.05,.08,XSUP,0.,-1) 00058300 XNUM= XNUM*10. 00058400 780 X= X+CXINCH 00058500 C 00058600 GO TO 880 00058700 790 LINCH=XINCH + 1. 00058800 IF(XMAX.GE.10000.) GO TO 850 00058900 IF(XDIV.LT.0.001) GO TO 850 00059000 AXDIV= ABS(XDIV) 00059100 XNUM=XMIN 00059200 ALG= ALOG10(AXDIV) 00059300 IF(ALG) 810 , 800 , 820 00059400 800 NN=0 00059500 GO TO 830 00059600 810 NN= 3 00059700 GO TO 830 00059800 820 IF(XDIV.GE.10.) NN=0 00059900 IF(XDIV.LT.10.) NN= 1 00060000 C 00060100 830 DO 840 KK=1,LINCH 00060200 X1= FLOAT(KK)-1. 00060300 CALL NUMBER(X1-.09,-.15,.1,XNUM,0.,NN) 00060400 840 XNUM= FLOAT(KK)*XDIV + XMIN 00060500 C 00060600 GO TO 880 00060700 850 NN=2 00060800 AXNUM=XMIN 00060900 C 00061000 DO 870 LL=1,LINCH 00061100 IF(AXNUM.EQ.0.) GO TO 860 00061200 KNUM= ALOG10(AXNUM) 00061300 AKNUM= FLOAT(KNUM) 00061400 EXNUM= AXNUM/10.**AKNUM 00061500 X1A= FLOAT(LL) - 1.25 00061600 X2A= (1.0*(NN+2)*.1) + X1A 00061700 X3A= X2A + (.857*.1) 00061800 CALL NUMBER(X1A,-.15,.1,EXNUM,0.,NN) 00061900 CALL SYMBOL(X2A,-.15,.1,'E',0.,1) 00062000 CALL NUMBER(X3A,-.15,.1,AKNUM,0.,-1) 00062100 GO TO 870 00062200 860 CALL SYMBOL(-.25,-.15,.1,'0.00',0.,4) 00062300 870 AXNUM= FLOAT(LL)*XDIV + XMIN 00062400 C 00062500 880 GO TO( 890 , 890 , 910 , 910 , 890 , 890 , 910 , 910 ), 00062600 *LINEAR 00062700 890 Y=0. 00062800 X=-.5 00062900 YNUM=YMIN 00063000 NYP=NCYY+1 00063100 X1= .20 + X 00063200 C 00063300 DO 900 I=1,NYP 00063400 CALL NUMBER(X,Y,.10,10.,0.,-1) 00063500 YSUP= ALOG10(YNUM) 00063600 CALL NUMBER(X1,Y+.05,.08,YSUP,0.,-1) 00063700 YNUM= YNUM*10. 00063800 900 Y= Y+CYINCH 00063900 C 00064000 GO TO 1000 00064100 910 KINCH= YINCH + 1. 00064200 IF(YMAX.GE.10000.) GO TO 970 00064300 IF(YDIV.LT.0.001) GO TO 970 00064400 AYDIV= ABS(YDIV) 00064500 YNUM= YMIN 00064600 BLG= ALOG10(AYDIV) 00064700 IF(BLG) 930 , 920 , 940 00064800 920 NN=0 00064900 XX= -.25 00065000 GO TO 950 00065100 930 NN= 3 00065200 XX= -.6 00065300 GO TO 950 00065400 940 IF(YDIV.GE.10.) NN=0 00065500 IF(YDIV.LT.10.) NN= 1 00065600 XX= -.5 00065700 C 00065800 950 DO 960 JJ=1,KINCH 00065900 Y1= FLOAT(JJ)-1. 00066000 CALL NUMBER(XX,Y1,.1,YNUM,0.,NN) 00066100 960 YNUM= FLOAT(JJ)*YDIV + YMIN 00066200 C 00066300 GO TO 1000 00066400 970 NN=2 00066500 AYNUM=YMIN 00066600 C 00066700 DO 990 LL=1,KINCH 00066800 IF(AYNUM.EQ.0.) GO TO 980 00066900 LNUM= ALOG10(AYNUM) 00067000 ALNUM= FLOAT(LNUM) 00067100 EYNUM= AYNUM/10.**ALNUM 00067200 Y1= FLOAT(LL) - 1.00 00067300 X1Y= -.70 00067400 X2Y= (1.0*(NN+2)*.1) + X1Y 00067500 X3Y= X2Y + (.857*.1) 00067600 CALL NUMBER(X1Y,Y1,.1,EYNUM,0.,NN) 00067700 CALL SYMBOL(X2Y,Y1,.1,'E',0.,1) 00067800 CALL NUMBER(X3Y,Y1,.1,ALNUM,0.,-1) 00067900 GO TO 990 00068000 980 CALL SYMBOL(-.55,0.,.1,'0.00',0.,4) 00068100 990 AYNUM= FLOAT(LL)*YDIV + YMIN 00068200 C 00068300 C INSURE THAT XMIN AND XMAX ARE EXACT MULTIPLES 00068400 C OF 10 00068500 C 00068600 1000 GO TO ( 1010 , 1020 , 1010 , 1030 , 1010 , 1020 , 1010 , 00068700 * 1030 ),LINEAR 00068800 1010 XX1=ALOG10(XMAX)-NCYX 00068900 XX3=NCYX + ALOG10(XMIN) 00069000 C CALL FIX(XX1,L1) 00069100 CX CALL SACR07(XX1,L1) 00069200 IF (XX1 .LT.0.) THEN 00069300 L1 = XX1-.2 00069400 ELSE 00069500 L1 = XX1+.2 00069600 ENDIF 00069700 C CALL FIX(XX3,L3) 00069800 CX CALL SACR07(XX3,L3) 00069900 IF (XX3 .LT.0.) THEN 00070000 L3 = XX3-.2 00070100 ELSE 00070200 L3 = XX3+.2 00070300 ENDIF 00070400 XMIN= 10.**L1 00070500 XMAX= 10.**L3 00070600 IF(LINEAR.NE.1.AND.LINEAR.NE.5) GO TO 1030 00070700 1020 XX2=ALOG10(YMAX)-NCYY 00070800 XX4=NCYY+ALOG10(YMIN) 00070900 C CALL FIX(XX2,L2) 00071000 CX CALL SACR07(XX2,L2) 00071100 IF (XX2 .LT.0.) THEN 00071200 L2 = XX2-.2 00071300 ELSE 00071400 L2 = XX2+.2 00071500 ENDIF 00071600 C CALL FIX(XX4,L4) 00071700 CX CALL SACR07(XX4,L4) 00071800 IF (XX4 .LT.0.) THEN 00071900 L4 = XX4-.2 00072000 ELSE 00072100 L4 = XX4+.2 00072200 ENDIF 00072300 YMIN=10.**L2 00072400 YMAX=10.**L4 00072500 C 00072600 1030 DO 1180 I=1,NC 00072700 N=NUM(I) 00072800 IF (N .LE. 1) GO TO 1180 00072900 C 00073000 C GENERATE X-AXIS 00073100 C 00073200 CX DO 1040 J=1,N 00073300 CX040 XRAY(J)=XRAYA(J ) 00073400 C 00073500 GO TO ( 1050 , 1060 , 1050 , 1060 , 1050 , 1060 , 1050 , 00073600 * 1060 ),LINEAR 00073700 C1050 CALL LSCALE(XRAY,XRAYLG,N,XMIN,CXINCH) 00073800 C1050 CALL SACR08(XRAYA,XRAYLG,N,XMIN,CXINCH) 00073900 1050 AMINLG = ALOG10(XMIN) 00074000 DO 1055 J=1,N 00074100 XRAYLG(J) = (ALOG10(XRAYA(J))-AMINLG)*CXINCH 00074200 1055 CONTINUE 00074300 XRAYLG(N+1) = 0. 00074400 XRAYLG(N+2) = 1. 00074500 GO TO 1070 00074600 C1060 CALL CSCALE(N,XRAY,XRAYLG,XDIV,XMIN) 00074700 C1060 CALL SACR09(N,XRAYA,XRAYLG,XDIV,XMIN) 00074800 1060 DO 1065 J=1,N 00074900 XRAYLG(J) =(XRAYA(J)-XMIN)/XDIV 00075000 1065 CONTINUE 00075100 XRAYLG(N+1)=0. 00075200 XRAYLG(N+2)=1. 00075300 C 00075400 1070 CONTINUE 00075500 CX070 DO 1080 J=1,N 00075600 CX080 VAL(J)=YRAY(J,I) 00075700 C 00075800 GO TO ( 1090 , 1090 , 1100 , 1100 , 1090 , 1090 , 00075900 * 1100 , 1100 ),LINEAR 00076000 C1090 CALL LSCALE(VAL,YRAYLG,N,YMIN,CYINCH) 00076100 C1090 CALL SACR08(YRAY(1,I),YRAYLG,N,YMIN,CYINCH) 00076200 1090 AMINLG = ALOG10(YMIN) 00076300 DO 1095 J=1,N 00076400 YRAYLG(J) = (ALOG10(YRAY(J,I))-AMINLG)*CYINCH 00076500 1095 CONTINUE 00076600 YRAYLG(N+1) = 0. 00076700 YRAYLG(N+2) = 1. 00076800 GO TO 1110 00076900 C1100 CALL CSCALE(N,VAL,YRAYLG,YDIV,YMIN) 00077000 C1100 CALL SACR09(N,YRAY(1,I),YRAYLG,YDIV,YMIN) 00077100 1100 DO 1105 J=1,N 00077200 YRAYLG(J) =(YRAY(J,I)-YMIN)/YDIV 00077300 1105 CONTINUE 00077400 YRAYLG(N+1)=0. 00077500 YRAYLG(N+2)=1. 00077600 C 00077700 C PLOT CURVES 00077800 C 00077900 C DISPLAY XRAYLG VS YRAYLG ACCORDING TO ITYPE(J) 00078000 C 00078100 1110 CONTINUE 00078200 C 00078300 IF(ITYPE(I).NE.1) GO TO 1150 00078400 C 00078500 C ITYPE(I)=1, USE SOLID OR DASHED LINE W/O SYMBOLS 00078600 C SOLID LINE FOR ODD NUMBER I 00078700 C DASHED LINE FOR EVEN NUMBER I 00078800 C 00078900 RJ=FLOAT(I)/2. 00079000 IJ=RJ 00079100 TEST=RJ-IJ 00079200 IF(TEST.EQ.0.0)GO TO 1130 00079300 C 00079400 C IF I IS ODD,USE SOLID LINES 00079500 C 00079600 X=XRAYLG(1) 00079700 Y=YRAYLG(1) 00079800 CALL PLOT(X,Y,3) 00079900 C 00080000 LSTOP=N 00080100 C 00080200 DO 1120 L=2,LSTOP 00080300 X=XRAYLG(L) 00080400 Y=YRAYLG(L) 00080500 CALL PLOT(X,Y,2) 00080600 1120 CONTINUE 00080700 C 00080800 GO TO 1170 00080900 C 00081000 C IF I IS EVEN, USE DASHED LINES 00081100 C 00081200 1130 CONTINUE 00081300 C 00081400 X=XRAYLG(1) 00081500 Y=YRAYLG(1) 00081600 C 00081700 CALL PLOT(X,Y,3) 00081800 Z=0.025 00081900 C 00082000 LSTOP=N 00082100 C 00082200 DO 1140 L=2,LSTOP 00082300 C 00082400 X=XRAYLG(L) 00082500 Y=YRAYLG(L) 00082600 C 00082700 C CALL DASHPT(X,Y,Z) 00082800 C 00082900 C *** THE SUBROUTINE DASH DRAWS A DASHED LINE USING CALCOMP 00083000 C CALLS TO PLOT AND NOT TO DASHPT 00083100 C 00083200 C CALL DASH(XRAYLG,YRAYLG,Z,N) 00083300 CX CALL SACR06(XRAYLG,YRAYLG,Z,N) 00083400 C 00083500 ICODE=MOD(L,2)+2 00083600 CALL PLOT(X,Y,ICODE) 00083700 C 00083800 1140 CONTINUE 00083900 C 00084000 GO TO 1170 00084100 C 00084200 1150 CONTINUE 00084300 C 00084400 C ITYPE GT 1 , USE SYMBOLS W/ OR W/O LINES 00084500 C CONNECTING 00084600 C 00084700 IF(ITYPE(I).LE.2) GO TO 1160 00084800 C 00084900 C ITYPE = 3 , USE SYMBOLS W/ LINES 00085000 C 00085100 LL=NPL(I) 00085200 NN=0 00085300 K=1 00085400 NP=N 00085500 IFST = -1 00085600 ICODE = -2 00085700 IF (CRAY) ICODE = -1 00085800 C 00085900 C *** ON VERSATEC CALL LINE CAUSES AN ABORT WITH OC1 00086000 C 00086100 IF (CRAY) 00086200 * CALL LINE(XRAYLG,YRAYLG,NP,K,NN,LL) 00086300 C 00086400 C LL=4 & LL=11 ONLY 'SPECIAL SYMBOLS' ON CRAY 00086500 C ANY OTHERS MUST USE STANDARD SYMBOL CALL; USE '+' FOR THIS 00086600 C 00086700 C IF(CRAY.AND.LL.NE.4.AND.LL.NE.11) THEN 00086800 C CALL S1MVCH ( '+ ',1,LL,1,4 ) 00086900 C ICODE = 1 00087000 C IFST = 1 00087100 C ENDIF 00087200 C 00087300 CALL PLOT(XRAYLG(1),YRAYLG(1),3) 00087400 CALL SYMBOL(XRAYLG(1),YRAYLG(1),.14,LL,0.,IFST) 00087500 C 00087600 DO 1155 L=2,N 00087700 X=XRAYLG(L) 00087800 Y=YRAYLG(L) 00087900 CALL SYMBOL(X,Y,.14,LL,0.,ICODE) 00088000 CALL PLOT(X,Y,2) 00088100 1155 CONTINUE 00088200 C 00088300 GO TO 1170 00088400 C 00088500 1160 CONTINUE 00088600 C 00088700 C ITYPE EQ 2, USE SYMBOLS W/O LINES 00088800 C 00088900 LL=NPL(I) 00089000 NN=-1 00089100 K=1 00089200 NP=N 00089300 ICODE=-1 00089400 C 00089500 C IF(CRAY.AND.LL.NE.4.AND.LL.NE.11) THEN 00089600 C CALL S1MVCH ( '+ ',1,LL,1,4 ) 00089700 C ICODE = 1 00089800 C ENDIF 00089900 C 00090000 C *** ON VERSATEC CALL LINE CAUSES AN ABORT WITH OC1 00090100 C 00090200 C CALL LINE(XRAYLG,YRAYLG,NP,K,NN,LL) 00090300 C 00090400 DO 1165 L=1,N 00090500 CALL SYMBOL(XRAYLG(L),YRAYLG(L),.14,LL,0.,ICODE) 00090600 1165 CONTINUE 00090700 C 00090800 1170 CONTINUE 00090900 C 00091000 C *** CMP LABELS THE PLOT CURVES WITH FOUR CHARACTERS *** 00091100 C 00091200 IF(CMP(1).EQ.CHECK) GO TO 1180 00091300 A= XRAYLG(N) -.5 00091400 B= YRAYLG(N) +.1 00091500 CALL SYMBOL(A,B,.1,CMP(I),0.,4) 00091600 1180 CONTINUE 00091700 C 00091800 RETURN 00091900 C 00092000 C ZERO WARNING FOR LOGARITHMIC PLOTS 00092100 C 00092200 1190 WRITE(6, 9000 ) 00092300 RETURN 00092400 1200 WRITE(6, 9010 ) 00092500 RETURN 00092600 C 00092700 C OPEN PLOT WHEN NC=-1 00092800 C 00092900 1210 CONTINUE 00093000 C 00093100 XCUM=0. 00093200 YCUM=0. 00093300 YTST=0. 00093400 CALL PLOT(2.,2.,-3) 00093500 QX= 0.0 00093600 QY= 0.0 00093700 RETURN 00093800 C 00093900 C CLOSE PLOT WHEN NC=0 00094000 C 00094100 1220 CALL PLOT(0.0,0.0,999) 00094200 RETURN 00094300 C 00094400 9000 FORMAT(' YOUR "X" ARRAY HAS DATA LE ZERO*******'/ 00094500 *' YOU CANNOT USE A LOGARITHMIC SCALE FOR THIS DATA******') 00094600 9010 FORMAT(' YOUR "Y" ARRAY HAS DATA LE ZERO*******'/ 00094700 *' YOU CANNOT USE A LOGARITHMIC SCALE FOR THIS DATA******') 00094800 C 00094900 END 00095000