PROGRAM pdb2config C Program to convert .pdb file to config format of Li Ju. IMPLICIT DOUBLE PRECISION (A-H,O-Z) PARAMETER (NM=100000) DIMENSION H(3,3),X(NM),Y(NM),Z(NM),HI(3,3),SX(NM),SY(NM),SZ(NM) DIMENSION NTYPE(NM) CHARACTER BUF*100,NAME_PDB*60,NAME_CONFIG*60,ATM8*8,ATM4*4,ATM2*2 DATA LP_CONFIG,LP_PDB,H /25,26,9*0.d0/ PRINT *,'Input name of the .pdb file:' READ (*,'(A60)') NAME_PDB OPEN (UNIT=LP_PDB,STATUS='UNKNOWN',FORM='FORMATTED', A FILE=NAME_PDB) READ (LP_PDB,'(A100)') BUF REWIND (LP_PDB) IF (INDEX(BUF,'').ne.0) THEN READ (LP_PDB,'(A100,/,A100)') BUF,BUF READ (LP_PDB,'(A10,9F8.3)') A BUF(1:10), A H(1,1),H(1,2),H(1,3),H(2,1),H(2,2),H(2,3),H(3,1),H(3,2),H(3,3) ENDIF READ (LP_PDB,'(A7,3(F8.3,1X),A36)') A BUF(1:7),H(1,1),H(2,2),H(3,3),BUF(1:36) CALL MATINV(H,HI,VOLUME) N = 0 DO J = 1,NM READ(LP_PDB,'(A6,I5,1X,A2,10X,I2,4X,3F8.3)',ERR=27,END=27) A ATM4,I,ATM2,IG,XI,YI,ZI X(I) = XI Y(I) = YI Z(I) = ZI SX(I) = HI(1,1)*X(I)+HI(1,2)*Y(I)+HI(1,3)*Z(I) SY(I) = HI(2,1)*X(I)+HI(2,2)*Y(I)+HI(2,3)*Z(I) SZ(I) = HI(3,1)*X(I)+HI(3,2)*Y(I)+HI(3,3)*Z(I) IF (SX(I).LT.0.D0) SX(I)=SX(I)+1.D0 IF (SX(I).GT.1.D0) SX(I)=SX(I)-1.D0 IF (SY(I).LT.0.D0) SY(I)=SY(I)+1.D0 IF (SY(I).GT.1.D0) SY(I)=SY(I)-1.D0 IF (SZ(I).LT.0.D0) SZ(I)=SZ(I)+1.D0 IF (SZ(I).GT.1.D0) SZ(I)=SZ(I)-1.D0 N=N+1 IF (ATM2.EQ.'Si') NTYPE(I)=1 IF (ATM2.EQ.'C ') NTYPE(I)=2 ENDDO 27 CONTINUE CLOSE(LP_PDB) PRINT *,'Input name of the config file (J.L. format):' READ (*,'(A60)') NAME_CONFIG OPEN (UNIT=LP_CONFIG,STATUS='UNKNOWN',FORM='UNFORMATTED', A FILE=NAME_CONFIG) WRITE(LP_CONFIG) N WRITE(LP_CONFIG) (NTYPE(I),I=1,N) WRITE(LP_CONFIG) ((H(I,J),J=1,3), I=1,3) WRITE (LP_CONFIG) (SX(I),SY(I),SZ(I),I=1,N) WRITE(LP_CONFIG) (0.D0,0.D0,0.D0,I=1,N) CLOSE(LP_CONFIG) STOP END SUBROUTINE MATINV(A,B,C) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION A(3,3),B(3,3) D11=A(2,2)*A(3,3)-A(2,3)*A(3,2) D22=A(3,3)*A(1,1)-A(3,1)*A(1,3) D33=A(1,1)*A(2,2)-A(1,2)*A(2,1) D12=A(2,3)*A(3,1)-A(2,1)*A(3,3) D23=A(3,1)*A(1,2)-A(3,2)*A(1,1) D31=A(1,2)*A(2,3)-A(1,3)*A(2,2) D13=A(2,1)*A(3,2)-A(3,1)*A(2,2) D21=A(3,2)*A(1,3)-A(1,2)*A(3,3) D32=A(1,3)*A(2,1)-A(2,3)*A(1,1) C=A(1,1)*D11+A(1,2)*D12+A(1,3)*D13 B(1,1)=D11/C B(2,2)=D22/C B(3,3)=D33/C B(1,2)=D21/C B(2,3)=D32/C B(3,1)=D13/C B(2,1)=D12/C B(3,2)=D23/C B(1,3)=D31/C RETURN END