src
|
chk2psi.f,
chk2psi92.f,
chk2psi92.f.txt,
ctplot.f,
gksplot.f,
hpplot.f,
makefile,
preplot.f,
psi1.f,
psi2.f,
psicon.f,
psplot.f
|
|
|
C
C
PROGRAM PREPLOT
PARAMETER (MAXAT=160)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
C
C PROGRAM TO CONVERT THE FILE PRODUCED BY THE MOPAC 'GRAPH' KEYWORD
C TO A SET OF INPUT FILES FOR THE PSI/88 PROGRAM
C
C DERIVED FROM ROUTINES IN MOPAC - DAN SEVERANCE, PURDUE - 9/88
C
C Version 1.0 Any questions to the author should specify
C the version being used.
C
C Redistribution and use in source and binary forms are permitted
C provided that the above paragraphs and this one are duplicated in
C all such forms and that any documentation, advertising materials,
C and other materials related to suchDanieldistribution and use acknowledge
C that the software was developed by Daniel Severance at Purdue University
C The name of the University or Daniel Severance may not be used to endorse
C or promote products derived from this software without specific prior
C written permission. The author is now at Yale University.
C THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
C IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
C WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
C
C FILES USED:
C
C FILE 13 - INPUT MOPAC GRAPH (.GPT) FILE
C FILE 8 - OUTPUT PSI1 INPUT FILE
C FILE 9 - OUTPUT PSICON INPUT FILE
C FILE 10 - OUTPUT PSI2 INPUT FILE
C
DIMENSION C(40000),H(40000),VECS(40000)
DIMENSION ZS(MAXAT),ZP(MAXAT),ZD(MAXAT),XYZ(3,MAXAT)
INTEGER TOTAL,NLAST(MAXAT),NFIRST(MAXAT),NAT(MAXAT),IAT(26)
CHARACTER*10 SUBTIT
C
C INITIALIZE THE NUMBER OF VALENCE ELECTRONS PER ATOM
C
DATA IAT / 1,2,1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8 /
C
C READ FROM DISK THE FOLLOWING DATA FOR GRAPHICS CALCULATION, IN ORDER:
C
C NUMBER OF ATOMS, ORBITAL, ELECTRONS
C ALL ATOMIC COORDINATES
C ORBITAL COUNTERS
C ORBITAL EXPONENTS, S, P, AND D, AND ATOMIC NUMBERS
C EIGENVECTORS (M.O.S NOT RE-NORMALISED)
C INVERSE-SQUARE ROOT OF THE OVERLAP MATRIX.
C
READ (13) NUMAT,NORBS,NELECS,((XYZ(I,J),J=1,NUMAT),I=1,3)
READ (13) (NLAST(I),NFIRST(I),I=1,NUMAT)
READ (13) (ZS(I),I=1,NUMAT),(ZP(I),I=1,NUMAT),(ZD(I),I=1,NUMAT),
* (NAT(I),I=1,NUMAT)
C
LINEAR = NORBS*NORBS
C
READ (13) (C(I),I=1,LINEAR)
READ (13) (H(I),I=1,LINEAR)
CALL MULT (C,H,VECS,NORBS)
C
TOTAL = 0
DO 10 I = 1, NUMAT
ITMP = NAT(I)
TOTAL = TOTAL+IAT(ITMP)
C
C ZERO THE D ORBITAL ZETA VALUE. MOPAC WRITES OUT A ZETA (D) VALUE OF
C ONE FOR CHLORINE (AT LEAST) EVEN THOUGH IT HAS NO D ORBITALS.
C
ZD(I) = 0.0D+0
10 CONTINUE
C
ICHRG = TOTAL-NELECS
IHOMO = (NELECS+1)/2
ILUMO = IHOMO+1
C
20 WRITE(*,*)
WRITE (*,'(A,I4,A,I4)')' The HOMO is MO number ',IHOMO,
* ' The LUMO is MO number ',ILUMO
WRITE(*,*)
WRITE (*,'(A,$)') ' WHICH MO DO YOU WISH TO PLOT? '
READ (*,*) IMO
IF (IMO.LT.0.OR.IMO.GT.TOTAL) GO TO 20
C
C WRITE PSI1/88 INPUT FILE
C
SCALE = 1.4
IONE = 1
IBEG = (IMO-1)*NORBS+1
IEND = IBEG+NORBS-1
C
WRITE (8,'(A)') 'SEMI'
WRITE (8,'(A5)') 'AUTO0'
WRITE (8,'(I2,I2,1X,F4.2)') IMO,IMO,SCALE
WRITE (8,50) ICHRG
WRITE (8,60) (NAT(I),(XYZ(J,I),J=1,3),I=1,NUMAT)
WRITE (8,'(A)') '99'
WRITE (8,30) (VECS(I),I=1,LINEAR)
C
C WRITE OUT ZETA VALUES FOR EACH ATOM
C
30 FORMAT (8F10.6)
DO 40 I = 1, NUMAT
WRITE (8,30) ZS(I),ZP(I),ZD(I)
40 CONTINUE
C
C WRITE PSICON/88 INPUT FILE
C
WRITE (9,'(A)') 'SEMI'
WRITE (9,'(A)') '01010001'
WRITE (9,'(A)') '0.075'
C
C DETERMINE LABEL TO USE FOR PLOT
C
WRITE (SUBTIT,'(A,I4)') 'MO #',IMO
IF ((IHOMO-2).EQ.IMO) SUBTIT = 'HOMO-2'
IF ((IHOMO-1).EQ.IMO) SUBTIT = 'HOMO-1'
IF (IHOMO.EQ.IMO) SUBTIT = 'HOMO'
IF (ILUMO.EQ.IMO) SUBTIT = 'LUMO'
IF ((ILUMO+1).EQ.IMO) SUBTIT = 'LUMO+1'
IF ((ILUMO+2).EQ.IMO) SUBTIT = 'LUMO+2'
C
C WRITE PSI2/88 INPUT FILE
C
WRITE (10,'(A)') ' '
WRITE (10,'(A)') SUBTIT
WRITE (10,'(A/A)') '01','00'
WRITE (10,50) ICHRG
WRITE (10,60) (NAT(I),(XYZ(J,I),J=1,3),I=1,NUMAT)
WRITE (10,'(A)') '99'
X = 10.0
SCALE = 0.7
WRITE (10,'(4F10.6)') X,X,X,SCALE
WRITE (10,'(A)') '02'
50 FORMAT (I2)
60 FORMAT (I2,8X,3F10.6)
C
STOP
END
C
C
SUBROUTINE MULT (C,S,VECS,N)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
DIMENSION C(N,*),S(N,*),VECS(N,*)
C
C**********************************************************************
C
C THIS ROUTINE TAKEN FROM MOPAC BY J.S. STEWART
C
C MULT IS USED IN THE MULLIKEN ANALYSIS ONLY. IT PERFORMS THE
C OPERATION:-
C VECS=BACK-TRANSFORMED EIGENVECTORS
C VECS = C*S C =UN-BACK-TRANSFORMED VECTORS
C S =1/SQRT(OVERLAP MATRIX)
C
C**********************************************************************
C
DO 30 I = 1, N
DO 20 J = 1, N
C
C COMPUTE FIRST ELEMENT HERE (K=1) TO INITIALIZE SUM
C
VECS(J,I) = C(1,I)*S(J,1)
DO 10 K = 2, N
VECS(J,I) = VECS(J,I)+C(K,I)*S(J,K)
10 CONTINUE
SUM = VECS(J,I)
20 CONTINUE
30 CONTINUE
RETURN
END
|