CHARACTER*20 FNAME character*1 BLINE(400) INTEGER*2 HMAX,HR,HZ,H,ILINE(200) real*4 D(202,102,202) EQUIVALENCE (BLINE,ILINE) DIMENSION V(3,3) WRITE(6,*)'PROGRAM TO PLOT A-C projECTIONS OF RECIPROCAL SPACE' WRITE(6,*)' FROM REFLECTION FILE IN FORMAT FOR SCALE-MERGE-AH' TYPE *,'NAME OF FILE TO READ?' READ (5,21) FNAME 21 FORMAT (A20) FMAX=0 OPEN (UNIT=2,FILE=FNAME,STATUS='OLD') 40 READ(2,41,END=120) H,K,L,F C WRITE(6,41) H,K,L,F 41 FORMAT(3I4,F12.2,F10.2) C ABOVE FOR MTZDUMP OUTPUT C41 FORMAT(3I4,2F8.2) C ABOVE FOR SCALE-MERGE-AH INPUT FILE 100 D(H+101,K+51,L+101)=F IF (F.GT.FMAX) FMAX=F GOTO 40 120 CLOSE (UNIT=2) IF (FMAX.LE.0) STOP C IF (FMAX.LE.0) STOP 'NO POSITIVE F's WERE READ!' PI=4*ATAN(1.) RLN10=LOG(10.0) write(6,*)' enter cell param a, b, c, alpha, beta, gamma:' read (5,*) cella,cellb,cellc,alpha,beta,gamma if(alpha.ne.90) stop 'alpha and beta must be 90 degrees!' if(beta.ne.90) stop 'alpha and beta must be 90 degrees!' alpha=alpha*pi/180. beta =beta *pi/180. gamma=gamma*pi/180. c assume a axis along x, c axis along z, b axis in x,y plane: v(1,1)=1/cella v(2,1)=cos(gamma)/cellb v(2,2)=sin(gamma)/cellb v(3,3)=1/cellc C XOFF=250 C YOFF=125 C SCALE=1 XOFFP=300 YOFFP=350 ZOFFP=YOFFP SCALEP=1.00e+3 do 142 i=1,3 do 140 j=1,3 140 v(i,j)=scalep*v(i,j) 142 write (6,*)(v(i,j),j=1,3) 800 CONTINUE C TYPE *,'RADIUS IN PNTS FOR A SPOT OF F=1 (0.10)?' C READ(5,*) SPOTRAD SPOTRAD=4.0/FMAX GOTO 7000 C :'initialize postscript 850 CONTINUE DO 901 L=-100,100 WRITE(6,*)'L=',L DO 901 H=-100,100 C TYPE *,'H DO 900 K=-50,50 DX=D(H+101,K+51,L+101) IF (DX.EQ.0) GOTO 900 C type *,h,k,l,DX C R=0.5*Aint(log10(REAL(D(H+HZ,K+KZ,L+LZ)))) c R=2.5*log10(DX) R=SPOTRAD*DX C CHOOSE FRIEDEL PAIR WITH Z>0: IF (L.GE.0) THEN HH=H KK=K LL=L ELSE C WRITE(6,*) 'H,K,L=',H,K,L HH=-H KK=-K LL=-L ENDIF X=HH*V(1,1)+KK*V(2,1) Y=HH*V(1,2)+KK*V(2,2) Z=LL*V(3,3) X=XOFFP+X Y=YOFFP+Y Z=ZOFFP+Z WRITE(3,891)X,Y,R 891 FORMAT (2F7.2,f4.1,' crcl') 900 CONTINUE 901 CONTINUE C901 WRITE(3,'(A)')' stroke newpath' WRITE(3,891)XOFFP,YOFFP,1.0 C PLOT LINES BETWEEN FRIEDEL PAIRS AT +/- 30,0; 30,-0; 30,-30 H=-50 K=0 lim=1 if (gamma.eq.60*pi/180)lim=2 DO 982 I=0,lim IF (I.EQ.1)then h=0 k=-50 endif IF (I.EQ.2) then H=50 k=-50 endif 950 DO 982 PLT=0,1 980 X=H*V(1,1)+K*V(2,1) Y=H*V(1,2)+K*V(2,2) Z=L*V(3,3) X=XOFFP+X Y=YOFFP+Y Z=ZOFFP+Z CALL MLTO (X,Y,PLT) IF (H.EQ.50) WRITE(3,*) '( H) show' IF (K.EQ.50) WRITE(3,*) '( K) show' C CALL MLTO (X,Y,PLT) RETURN TO POSITION BEF LETTER- DON'T NEED B C BECAUSE NEXT MLTO WITH PLT=0 h=-h 982 k=-k 985 X=300 Y=35 PLT=0 CALL MLTO (X,Y,PLT) TYPE *,'LEN OF FNAME=',LEN(FNAME) WRITE(3,*) '(',FNAME,')' WRITE(3,'(A)')'dup stringwidth' WRITE(3,'(A)')'2 div neg exch 2 div neg exch rmoveto show' WRITE(3,'(A)')'0 setlinewidth stroke ' c draw circle corresp to 5.0 A in H-K plane r=(1./5.) * scalep write(6,*)' scalep=',scalep,' r=',r write(3,*) xoffp,yoffp,r,' 0 360 arc stroke newpath ' c draw circle corresp to 5.0 A 26 degrees from z axis: r=r*sin(26.*pi/180.) write(3,*) xoffp,yoffp,r,' 0 360 arc stroke newpath ' 990 WRITE(3,'(A)')' showpage' CLOSE(UNIT=3) TYPE *,'UNIT 3 CLOSED' 999 STOP 'NORMAL END' 7000 CONTINUE C REM PLOT INITIALIZATION: OPEN (UNIT=3,FILE='FIGURE.PSC',STATUS='NEW', & CARRIAGECONTROL='LIST') WRITE(6,*)'PLOT SAVED IN "FIGURE.PSC"' WRITE(3,'(A)')'%!PS-Adobe-' WRITE(3,'(A)')'newpath' WRITE(3,'(A)')'/hfont /Helvetica findfont 18 scalefont def' WRITE(3,'(A)')'/xfont /Helvetica findfont 14 scalefont def' WRITE(3,'(A)')'/sfont /Symbol findfont 18 scalefont def' WRITE(3,'(A)')'/shfont {hfont setfont} def' WRITE(3,'(A)')'/sxfont {xfont setfont} def' WRITE(3,'(A)')'/ssfont {sfont setfont} def' WRITE(3,'(A)')'/fhlf {0 -7 rmoveto} def' WRITE(3,'(A)')'/mt {moveto} def' WRITE(3,'(A)')'/lt {lineto} def' WRITE(3,'(A)')'/crcl {0 360 arc fill newpath} def' WRITE(3,'(A)')'shfont' GOTO 850 END SUBROUTINE MLTO(X,Y,PLT) C MOVE TO X,Y WITH PEN UP OR DOWN CHARACTER*2 PN(2) DATA PN/'mt','lt'/ WRITE(3,7117)X,Y,PN(PLT+1) C WRITE(6,7117)X,Y,PN(PLT+1) 7117 FORMAT (2F7.2,A3) RETURN END