C C $Id: rcalc.F,v 1.4 1998/07/16 16:40:25 jjv5 Exp arjan $ C C------------------------------------------------------------------------ SUBROUTINE RCALC(IERROR) C C COMPUTES AND STORES INTERATOMIC DISTANCES RPAIR FOR ALL ATOMS. C DON'T USE IF 'DIRECT' KEYWORD HAS BEEN SPECIFIED. C C RETURNS WITH AN ERROR IF ANY TWO ATOMS ARE SEPARATED BY LESS C THAN 0.5 ANGSTROMS. C IMPLICIT DOUBLE PRECISION (A-H,O-Z) #include "divcon.dim" #include "divcon.h" C C IERROR = 0 rminimr = 6.0E6 rmaximr = 0.0 IF(NATOMS.LT.2) RETURN IJ = 0 iri = 1 irie = irpnt(2)-1 DO 100 I=2,NATOMS IAI = IATNUM(I) IF(IAI.EQ.0) GO TO 100 C . find out to what residue atom i belongs if (i.gt.irie) then iri = iri + 1 irie = irpnt(iri+1)-1 endif XI = XYZ(1,I) YI = XYZ(2,I) ZI = XYZ(3,I) irj = 1 irje = irpnt(2)-1 DO 50 J=1,I-1 IAJ = IATNUM(J) IF(IAJ.EQ.0) GO TO 50 C . find out to what residue atom j belongs if (j.gt.irje) then irj = irj + 1 irje = irpnt(irj+1)-1 endif IF(PBC)THEN CALL PBCXYZ(I,J,XJ,YJ,ZJ) ELSE XJ = XYZ(1,J) YJ = XYZ(2,J) ZJ = XYZ(3,J) ENDIF RIJ = DSQRT((XI-XJ)**2 + (YI-YJ)**2 + (ZI-ZJ)**2) C . save minimum/maximum distances between atoms of different residue if (iri.ne.irj) then rminimr = min(rminimr,rij) rmaximr = max(rmaximr,rij) endif IF(RIJ.LT.rijmin)THEN IERROR = 1 C-RDC if (nmc.le.1) WRITE(IOUT, C-RDC . '(/" ATOMS ",I4," AND ",I4," ARE SEPARATED BY", C-RDC . " ONLY ",F12.5," ANGSTROMS")') I,J,RIJMIN RETURN ENDIF IJ = IJ + 1 RPAIR(IJ) = RIJ 50 CONTINUE 100 CONTINUE RETURN END