SUBROUTINE OBSKPNO(IFKPNO) C PRELIMINARY KPNO SOLAR ATLAS BY BRAULT AND TESTERMAN C IFKPNO=1 NORMAL PLOT WEIGHT 1 C IFKPNO=2 NORMAL PLOT WEIGHT 12 C IFKPNO=3 NORMAL PLOT WEIGHT 12 PLUS 10X WEIGHT 1 C IFKPNO=10+ABOVE PLOT LIMB C COMMON /PARAMS/IFLABL,IFABSO,IFCONT,IFGRID,IFDLIN,IFLOG,XSCALE, 1 RMIN,WEAK,TOP,PANEL,CYCLES,WBEGIN,WEND,W1,W2,YTOP, 2 HMAX,HMIN,IFMU,NOCALC,YSCALE,OFFSET,IFVAC,RMAX, 3 WNEW1,WNEW2,SMOOTH,DOPOBS,DOPCALC,DOPTERR,NOPRNT, 4 SCALOBS,ZEROOBS,RMIN2,RMAX2,XOFFSET,SCALOB2,AXISWT REAL*8 WBEGIN,WEND,W1,W2,RESOLU,RATIO,WNEW1,WNEW2,WAVEL DATA IREAD/0/ INTEGER*2 ISPECT(500),LAMBDA,NORD,NSET,NREC IF(IREAD.EQ.1)GO TO 1 OPEN(UNIT=60,SHARED,READONLY,TYPE='OLD',FORM='UNFORMATTED') IREAD=1 1 CONTINUE IF(IFKPNO.GT.10)GO TO 30 IF(IFMU.GE.2)GO TO 30 C CENTER IF(W1.GT.1080.)RETURN IF(W2.LT.294.2)RETURN REWIND 60 ISTART=0 CALL WEIGHT(MINWT) NSKIP=W1*10.-2942. IF(NSKIP.GT.0)THEN DO 2 ISKIP=1,NSKIP 2 READ(60) ENDIF IREAD=NSKIP XSAVE=100000. XSAVE1=100000. LAST=0 3 READ(60)LAMBDA,NORD,NSET,NREC,ISPECT IREAD=IREAD+1 IF(LAMBDA.LE.LAST)GO TO 3 LAST=LAMBDA WAVE=FLOAT(LAMBDA)*.1 ISTART=0 IF(IFKPNO.GT.1)CALL WEIGHT(12) DO 14 I=1,500 W=WAVE+FLOAT(I-1)*.0002 W=W*(1.D0+DOPOBS/299792.458D0) IF(W.LT.W1)GO TO 14 IF(W.GT.W2)GO TO 315 X=(W-W1)*XSCALE*10. IF(ISPECT(I).GT.11000)ISPECT(I)=0 S=FLOAT(ISPECT(I))/10000. S=(S-ZEROOBS)*SCALOBS Y=(S-RMIN)/(RMAX-RMIN)*3.125*YSCALE Y=AMAX1(Y,0.) IF(ISTART.EQ.0)THEN CALL JUMP TO (X,Y) IF(XSAVE.LT.X)CALL JUMP TO (XSAVE,YSAVE) ENDIF ISTART=1 CALL LINE TO (X,Y) 14 CONTINUE XSAVE=X YSAVE=Y 315 ISTART=0 IF(IFKPNO.LT.3.)GO TO 333 CALL WEIGHT(MINWT) DO 324 I=1,500 W=WAVE+FLOAT(I-1)*.0002 W=W*(1.D0+DOPOBS/299792.458D0) IF(W.LT.W1)GO TO 324 IF(W.GT.W2)GO TO 15 X=(W-W1)*XSCALE*10. XNEW=X S=FLOAT(ISPECT(I))/10000. S=(S-ZEROOBS)*SCALOBS Y=(S-.9)/(1.0-.9)*3.125*YSCALE YNEW=Y IF(ISTART.EQ.0)THEN IF(Y.LT.0.)Y=0. GO TO 240 ENDIF IF(YNEW.GE.0..AND.YOLD.GE.0.)GO TO 240 Y=0. IF(YNEW.LT.0..AND.YOLD.LT.0.)GO TO 240 IF(YOLD.LE.0.)GO TO 239 X=XOLD+(XNEW-XOLD)/(YNEW-YOLD)*(0.-YOLD) GO TO 240 239 X=XOLD+(XNEW-XOLD)/(YNEW-YOLD)*YNEW 240 IF(ISTART.EQ.0)THEN CALL JUMP TO (X,Y) IF(XSAVE1.LT.X)CALL JUMP TO (XSAVE1,YSAVE1) ENDIF ISTART=1 XOLD=XNEW YOLD=YNEW CALL LINE TO (X,Y) 324 CONTINUE XSAVE1=X YSAVE1=Y 333 IF(IREAD.LT.7950)GO TO 3 15 CALL WEIGHT(MINWT) RETURN C LIMB 30 IF(W1.GT.973.9)RETURN IF(W2.LT.367.6)RETURN REWIND 60 ISTART=0 CALL WEIGHT(MINWT) NSKIP=7950 DO 21 ISKIP=1,NSKIP 21 READ(60) IREAD=NSKIP NSKIP=W1*10.-3676.-10. IF(NSKIP.GT.0)THEN DO 22 ISKIP=1,NSKIP 22 READ(60) IREAD=IREAD+NSKIP ENDIF LAST=0 23 READ(60)LAMBDA,NORD,NSET,NREC,ISPECT IREAD=IREAD+1 IF(LAMBDA.LE.LAST)GO TO 23 IF(LAMBDA.GT.LAST+1)ISTART=0 LAST=LAMBDA WAVE=FLOAT(LAMBDA)*.1 DO 24 I=1,500 W=WAVE+FLOAT(I-1)*.0002 W=W*(1.D0+DOPOBS/299792.458D0) IF(W.LT.W1)GO TO 24 IF(W.GT.W2)GO TO 25 X=(W-W1)*XSCALE*10. S=FLOAT(ISPECT(I))/10000. IF(S.GT.2.)S=0. S=(S-ZEROOBS)*SCALOBS Y=(S-RMIN)/(RMAX-RMIN)*3.125*YSCALE Y=AMAX1(Y,0.) IF(ISTART.EQ.0)CALL JUMP TO (X,Y) ISTART=1 CALL LINE TO (X,Y) 24 CONTINUE IF(IREAD.LT.13997)GO TO 23 25 CALL WEIGHT(MINWT) RETURN END