File: mecip.f

package info (click to toggle)
mopac7 1.15-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,752 kB
  • sloc: fortran: 35,321; sh: 9,039; ansic: 428; makefile: 82
file content (98 lines) | stat: -rw-r--r-- 3,653 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
      SUBROUTINE MECIP(COEFFS,NORBS,DELTAP, DELTA)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
      INCLUDE 'SIZES'
      DIMENSION COEFFS(NORBS,NORBS), DELTAP(NMOS,NMOS),
     1 DELTA(NORBS,NMOS)
************************************************************************
*
*   MECIP WILL CORRECT THE TOTAL DENSITY MATRIX FOR THE EFFECT OF THE
*   C.I.
*              ON INPUT
*
*  COEFFS       : ALL M.O.'S (NORBS M.O.S)
*  NORBS        : NUMBER OF MOLECULAR ORBITALS = NUMBER OF A.O.'S
*  P            : TOTAL DENSITY MATRIX
*  NMOS         : NUMBER OF M.O.'S IN ACTIVE SPACE
*  VECTCI       : STATE VECTOR OF LENGTH LAB
*  MICROA(I,J)  : ALPHA OCCUPANCY OF M.O. 'I' IN MICROSTATE 'J'
*  MICROB(I,J)  : BETA  OCCUPANCY OF M.O. 'I' IN MICROSTATE 'J'
*
*  NOTE: THIS IS A MODIFICATION OF CODE ORIGINALLY WRITTEN BY
*        PROF. DANIEL LIOTARD
************************************************************************
      COMMON /CIBITS/ NMOS,LAB,NELEC, NBO(3)
      COMMON /DENSTY/ P(MPACK), PA(MPACK), PB(MPACK)
      COMMON /NALMAT/ NALPHA(NMECI**2)
      COMMON /BASEOC/ OCCA(NMECI)
      COMMON /CIVECT/ VECTCI(NMECI**2),CONF(NMECI**4+1)
      COMMON /MICROS/ MICROA(NMECI,4*NMECI**2), MICROB(NMECI,4*NMECI**2)
C     INITIALIZE WITH THE OPPOSITE OF THE 'SCF' DENSITY.
      DO 10 I=1,NMOS
         DELTAP(I,I)=-OCCA(I)*2.D0
         DO 10 J=1,I-1
   10 DELTAP(I,J)=0.D0
C
C     ADD THE C.I. CORRECTION
      DO 120 ID=1,LAB
         DO 120 JD=1,ID
C     CHECK SPIN AGREEMENT
            IF(NALPHA(ID).NE.NALPHA(JD)) GO TO 120
            IX=0
            IY=0
            DO 20 J=1,NMOS
               IX=IX+ABS(MICROA(J,ID)-MICROA(J,JD))
   20       IY=IY+ABS(MICROB(J,ID)-MICROB(J,JD))
C     CHECK NUMBER OF DIFFERING M.O.
            IF(IX+IY.GT.2) GO TO 120
            IF(IX.EQ.2) THEN
C        DETERMINANTS ID AND JD DIFFER BY M.O I IN ID AND M.O J IN JD:
               DO 30 I=1,NMOS
   30          IF(MICROA(I,ID).NE.MICROA(I,JD)) GO TO 40
   40          IJ=MICROB(I,ID)
               DO 50 J=I+1,NMOS
                  IF(MICROA(J,ID).NE.MICROA(J,JD)) GO TO 60
   50          IJ=IJ+MICROA(J,ID)+MICROB(J,ID)
C        IJ GIVES THE SIGN OF THE PERMUTATION
   60          DELTAP(J,I)=DELTAP(J,I)+VECTCI(ID)*VECTCI(JD)*FLOAT(1-2*M
     1OD(IJ,2))
            ELSE IF(IY.EQ.2) THEN
C        DETERMINANTS ID AND JD DIFFER BY M.O J IN ID AND M.O I IN JD:
               DO 70 I=1,NMOS
   70          IF(MICROB(I,ID).NE.MICROB(I,JD)) GO TO 80
   80          IJ=0
               DO 90 J=I+1,NMOS
                  IF(MICROB(J,ID).NE.MICROB(J,JD)) GO TO 100
   90          IJ=IJ+MICROA(J,ID)+MICROB(J,ID)
  100          IJ=IJ+MICROA(J,ID)
               DELTAP(J,I)=DELTAP(J,I)+VECTCI(ID)*VECTCI(JD)*FLOAT(1-2*M
     1OD(IJ,2))
            ELSE
C        DETERMINANTS ID AND JD ARE IDENTICAL:
               DO 110 I=1,NMOS
  110          DELTAP(I,I)=DELTAP(I,I)+(MICROA(I,ID)+MICROB(I,ID))*VECTC
     1I(ID)**2
            ENDIF
  120 CONTINUE
C
C     BACK TRANSFORM INTO A.O. BASIS.
C     -------------------------------
C     P(C.I.) = P(SCF) + C * DELTAP * C'
      DO 130 I=1,NMOS
CDIR$ IVDEP
         DO 130 J=1,I-1
  130 DELTAP(J,I)=DELTAP(I,J)
C     STEP 1: DELTAP = C * DELTAP
      CALL MXM (COEFFS(1,NELEC+1),NORBS,DELTAP,NMOS,DELTA,NMOS)
C     STEP 2: P = P + DELTAP * C'
      IJ=0
      DO 150 I=1,NORBS
         DO 150 J=1,I
            IJ=IJ+1
            SUM=0.D0
            DO 140 K=1,NMOS
  140       SUM=SUM+DELTA(I,K)*COEFFS(J,NELEC+K)
  150 P(IJ)=P(IJ)+SUM
C     NOTE FROM D.L.: AT THIS POINT THE 'NATURAL ORBITALS' OF THIS STATE
C     CAN BE OBTAINED STRAIGHTWAY AS EIGENVECTORS OF THE DENSITY MATRIX.
      RETURN
      END