CHARACTER*20 FNAME character*1 BLINE(400) INTEGER*2 HMAX,HR,HZ,H,ILINE(200) real*4 D(100,100,200) EQUIVALENCE (BLINE,ILINE) DIMENSION V(3,3) WRITE(6,*)'PROGRAM TO PLOT C-SECTIONS 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) 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,2F8.2) 100 D(H+1,K+1,L+1)=F GOTO 40 120 CLOSE (UNIT=2) 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=50 YOFFP=50 ZOFFP=YOFFP SCALEP=3.00e+3 do 142 i=1,3 do 140 j=1,3 140 v(i,j)=scalep*v(i,j) 142 write (5,*)(v(i,j),j=1,3) 800 TYPE *,'NEXT L-LAYERS TO PLOT (FIRST,LAST; 999, 0 to quit)?' READ(5,*) L1,L2 if (l1.eq.999) stop 'normal end' C CLS C TYPE *,'PLOTTING PLANE OF a*-b* and c* axes.' GOTO 7000 C :'initialize postscript 850 CONTINUE DO 990 L=L1, L2 WRITE(6,*)'L=',L X=XOFFP Y=YOFFP C CALL PSYMBOL(XX,YY,IPLOT) WRITE(3,881)X,Y 881 FORMAT (2F7.2,' 1 crcl') c TYPE *, 'HR=',HR DO 901 H=0,50 C TYPE *,'H DO 900 K=0,50 DX=D(H+1,K+1,L+1) 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)))) R=2.5*log10(DX) X=H*V(1,1)+K*V(2,1) Y=H*V(1,2)+K*V(2,2) Z=L*V(3,3) C PSET (XOFF+SCALE*X,YOFF-SCALE*Y) 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' C PLOT LINES BETWEEN FRIEDEL PAIRS AT +/- 30,0; 30,-0; 0,-30 H=30 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=30 endif IF (I.EQ.2) then H=30 k=30 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) if (plt.eq.1) then x=0 y=0 endif X=XOFFP+X Y=YOFFP+Y Z=ZOFFP+Z 982 CALL MLTO (X,Y,PLT) 985 X=300 Y=50 PLT=0 CALL MLTO (X,Y,PLT) WRITE(3,987) L 987 FORMAT ('(L=',I3,' plane)') WRITE(3,'(A)')'dup stringwidth' WRITE(3,'(A)')'2 div neg exch 2 div neg exch rmoveto show' 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' 990 WRITE(3,'(A)')'0 setlinewidth stroke showpage' CLOSE(UNIT=3) TYPE *,'UNIT 3 CLOSED' GOTO 800 999 STOP 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