PROGRAM makesolv c Makes solvent list PARAMETER alpha = 90., beta = 97.64, gamma = 90. CHARACTER*80 filnam, line CHARACTER*15 label REAL xx(400), yy(400), zz(400) INTEGER res(400) sinb = SIND(beta-90.) cosb = COSD(beta-90.) WRITE (6, 1000) 'Enter starting solvent number: ' 1000 FORMAT (a) READ (5, 1001) nstart IF (nstart .EQ. 0) nstart=900 1001 FORMAT (i5) WRITE (6, 1001) nstart c Read and store list of native waters OPEN (unit=1, form='FORMATTED', status='OLD', readonly, 1 file='/home/ohlen/pcd/native.waters') n = 0 DO WHILE (.TRUE.) READ (1, 1000, end=19) line n = n + 1 READ (line(31:54), 2001) xx(n), yy(n), zz(n) 2001 FORMAT (3f8.3) READ (line(24:26), 2002) res(n) 2002 FORMAT (i3) endDO 19 CLOSE (unit=1) num = n c Open files WRITE (6, 1000) 'Enter file name for nearby peaks:' READ (5, 1000) filnam len = length(filnam) WRITE (6, 1000) filnam(1:len) OPEN (unit=1, file=filnam, status='OLD', readonly, form='FORMATTED') WRITE (6, 1000) 'Enter file name for solvents:' READ (5, 1000) filnam len = length(filnam) WRITE (6, 1000) filnam(1:len) OPEN (unit=2, status='UNKNOWN', form='FORMATTED', file=filnam) WRITE (2, 1002) 'REMARK New solvents' 1002 FORMAT (5a) natom = 1 DO WHILE (.TRUE.) READ (1, 1004, end=5) pk, label, x, y, z, dh xo = x - sinb*z yo = y zo = cosb*z 1004 FORMAT (f15.4, a15, 4f10.3) IF ((label(12:12) .EQ. 'N' .OR. label(12:12) .EQ. 'O') .AND. 1 dh .GT. 2.2 .AND. dh .LT. 3.8) THEN mres = nstart DO n = 1, num dd = (xo-xx(n))**2 + (yo-yy(n))**2 + (zo-zz(n))**2 IF (dd .LE. 1.44) mres = res(n) endDO WRITE (2, 1005) natom, 'OH2 ', 'WAT', mres, 1 xo, yo, zo, 1., 20. 1005 FORMAT ('ATOM', i7, 2x, 2a, i6, 4x, 3f8.3, 2f6.2) natom = natom + 1 IF (mres .EQ. nstart) nstart = nstart + 1 endIF endDO 5 CLOSE (unit=2) end INTEGER FUNCTION length(line) CHARACTER*80 line DO i = 80,1,-1 IF (line(i:i) .NE. ' ') goto 9 endDO 9 length = i return end