PROGRAM packing c Applies translational components to PCD holoenzyme and looks for contacts c in adjacent molecules PARAMETER NDIM=44000 CHARACTER*60 file CHARACTER*15 label(NDIM) REAL x(3,NDIM), trans(3,14), dx(3) WRITE (6, 1000) 'Enter input filename:' 1000 FORMAT (a) READ (5, 1000) file OPEN (unit=1, status='OLD', file=file, readonly, form='FORMATTED') c Read and store data DO i = 1,3 READ (1, 1000) endDO num = 1 DO WHILE (.TRUE.) READ (1, 1001, end=99) (x(i,num), i=1,3), label(num) 1001 FORMAT (3f10.4, 34x, a) num = num+1 endDO 99 CLOSE (unit=1) num = num-1 TYPE *, num c Loop through list looking for distances < 4 Ang. Only need to look at c molecules aligned along the crystal axes (6 cases) or by body-centering c (8 cases). First set up array of translations. aa = 197.17 bb = 127.03 cc = 134.18 beta = 97.64 trans(1,1) = aa trans(2,1) = 0. trans(3,1) = 0. trans(1,2) = -aa trans(2,2) = 0. trans(3,2) = 0. trans(1,3) = 0. trans(2,3) = bb trans(3,3) = 0. trans(1,4) = 0. trans(2,4) = -bb trans(3,4) = 0. trans(1,5) = 0. trans(2,5) = 0. trans(3,5) = cc trans(1,6) = 0. trans(2,6) = 0. trans(3,6) = -cc trans(1,7) = aa/2. trans(2,7) = bb/2. trans(3,7) = cc/2. trans(1,8) = -aa/2. trans(2,8) = bb/2. trans(3,8) = cc/2. trans(1,9) = aa/2. trans(2,9) = -bb/2. trans(3,9) = cc/2. trans(1,10) = -aa/2. trans(2,10) = -bb/2. trans(3,10) = cc/2. trans(1,11) = aa/2. trans(2,11) = bb/2. trans(3,11) = -cc/2. trans(1,12) = -aa/2. trans(2,12) = bb/2. trans(3,12) = -cc/2. trans(1,13) = aa/2. trans(2,13) = -bb/2. trans(3,13) = -cc/2. trans(1,14) = -aa/2. trans(2,14) = -bb/2. trans(3,14) = -cc/2. c Loop through checking orthogonal distance cb2 = 2.*COSD(beta) DO n = 1,num DO m = 1,num DO j = 1,14 DO i = 1,3 dx(i) = x(i,n)-(x(i,m)+trans(i,j)) endDO dd = dx(1)**2+dx(2)**2+dx(3)**2+cb2*dx(1)*dx(3) IF (dd .LE. 16.) THEN WRITE (6, 1002) j, label(n), SQRT(dd), label(m) 1002 FORMAT (i3, 2x, a, f8.4, 2x, a) endIF endDO endDO endDO stop end