File: diegrd.f

package info (click to toggle)
mopac7 1.15-5
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 3,748 kB
  • sloc: fortran: 35,321; sh: 9,039; ansic: 417; makefile: 95
file content (126 lines) | stat: -rw-r--r-- 4,173 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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
      SUBROUTINE DIEGRD (COORD,DXYZ)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
      INCLUDE 'SIZES'
      COMMON / SOLV / FEPSI,RDS,DISEX2,NSPA,NPS,NPS2,NDEN,
     1                COSURF(3,LENABC), SRAD(NUMATM),ABCMAT(LENAB2),
     2                TM(3,3,NUMATM),QDEN(MAXDEN),DIRTM(3,NPPA),
     3                QS(LENABC)
     4       /SOLVI/  IATSP(LENABC+1),NAR(LENABC), NNX(2,NUMATM)
      COMMON /DIRVEC/ DIRVEC(3,NPPA), NN(3,NUMATM)
      COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM),
     1                NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA,
     2                NCLOSE,NOPEN,NDUMY,FRACT
     3       /MULTIP/ DD(107),QQ(107),AM(107),AD(107),AQ(107)
      DIMENSION DXYZ(3,*),DB(0:3,10),XK(3),XL(3),XX(3),COORD(3,NUMATM)
      DO 10 I=1,NPS
         J=IATSP(I)
         RI=SRAD(J)-RDS
         DO 10 IX=1,3
   10 COSURF(IX,I)=COSURF(IX,I)*RI+COORD(IX,J)
      DO 20 I=1,10
         DO 20 IX=1,3
   20 DB(IX,I)=0.D0
      DB(0,1)=1.D0
      CALL CQDEN()
      FACT=-2*13.6058D0*.5292D0*FEPSI*23.061D0
      DO 30 I=1,NPS
   30 QS(I)=0.D0
      I0=NPS2-NDEN
      DO 70 I=1,NPS
         I2=(I*(I-1))/2
         I1=I0+I*NDEN
         POSI=0.D0
         DO 40 J=1,NDEN
   40    POSI=POSI+QDEN(J)*ABCMAT(J+I1)
         DO 50 K=1,I
   50    QS(K)=QS(K)+POSI*ABCMAT(K+I2)
         DO 60 K=I+1,NPS
   60    QS(K)=QS(K)+POSI*ABCMAT(I+(K*(K-1))/2)
   70 CONTINUE
      DO 120 K=1,NPS
         IAK=IATSP(K)
         DO 80 IX=1,3
   80    XK(IX)=COSURF(IX,K)
         QSK=QS(K)
         DO 110 L=1,K-1
            IAL=IATSP(L)
            IF(IAL .EQ. IAK) GO TO 110
            DIST2=0.D0
            DO 90 IX=1,3
               XXX=COSURF(IX,L)-XK(IX)
               XL(IX)=XXX
               DIST2=DIST2+XXX*XXX
   90       CONTINUE
C ***** Modified by Jiro Toyoda at 1994-05-25 *****
C           FF=QSK*QS(L)*FACT*DIST2**-1.5D0
            FF=QSK*QS(L)*FACT*DIST2**(-1.5D0)
C ***************************** at 1994-05-25 *****
            DO 100 IX=1,3
               DXYZ(IX,IAK)=DXYZ(IX,IAK)-XL(IX)*FF
               DXYZ(IX,IAL)=DXYZ(IX,IAL)+XL(IX)*FF
  100       CONTINUE
  110    CONTINUE
  120 CONTINUE
      DO 190 K=1,NPS
         IAK=IATSP(K)
         DO 130 IX=1,3
  130    XK(IX)=COSURF(IX,K)
         QSK=QS(K)
         IDEN=0
         DO 180 I=1,NUMAT
            IDEL=NLAST(I)-NFIRST(I)
            IF(I .EQ. IAK) GO TO 180
            NATI=NAT(I)
            DIST2=0.D0
            DO 140 IX=1,3
               XXX=XK(IX)-COORD(IX,I)
               XX(IX)=XXX
               DIST2=DIST2+XXX*XXX
  140       CONTINUE
            DDI=DD(NATI)*2*.529177D0
            QQI2=(.529177D0*QQ(NATI))**2
C ***** Modified by Jiro Toyoda at 1994-05-25 *****
C           FF0=-QSK*FACT*DIST2**-1.5D0
            FF0=-QSK*FACT*DIST2**(-1.5D0)
C ***************************** at 1994-05-25 *****
            IF(IDEL .EQ. 0) GO TO 150
            RM2=1.D0/DIST2
            RM4=RM2**2
            DB(0,2)=DDI*3*XX(1)*RM2
            DB(0,4)=DDI*3*XX(2)*RM2
            DB(0,7)=DDI*3*XX(3)*RM2
            DB(0,3)=1.D0+QQI2*(15*XX(1)**2*RM2-3.D0)*RM2
            DB(0,6)=1.D0+QQI2*(15*XX(2)**2*RM2-3.D0)*RM2
            DB(0,10)=1.D0+QQI2*(15*XX(3)**2*RM2-3.D0)*RM2
            DB(0,5)=QQI2*30*XX(1)*XX(2)*RM4
            DB(0,8)=QQI2*30*XX(1)*XX(3)*RM4
            DB(0,9)=QQI2*30*XX(3)*XX(2)*RM4
            DB(1,2)=DDI
            DB(2,4)=DB(1,2)
            DB(3,7)=DB(1,2)
            DB(1,3)=6*QQI2*XX(1)*RM2
            DB(2,6)=6*QQI2*XX(2)*RM2
            DB(3,10)=6*QQI2*XX(3)*RM2
            DB(1,5)=DB(2,6)
            DB(2,5)=DB(1,3)
            DB(1,8)=DB(3,10)
            DB(3,8)=DB(1,3)
            DB(2,9)=DB(3,10)
            DB(3,9)=DB(2,6)
  150       DO 170 J=1,1+IDEL*IDEL
               FF=FF0*QDEN(IDEN+J)
               DO 160 IX=1,3
                  DX=(XX(IX)*DB(0,J)-DB(IX,J))*FF
                  DXYZ(IX,IAK)=DXYZ(IX,IAK)+DX
                  DXYZ(IX,I)=DXYZ(IX,I)-DX
  160          CONTINUE
  170       CONTINUE
  180    IDEN=IDEN+1+IDEL**2
  190 CONTINUE
      DO 200 I=1,NPS
         J=IATSP(I)
         RM=SRAD(J)-RDS
         DO 200 IX=1,3
  200 COSURF(IX,I)=(COSURF(IX,I)-COORD(IX,J))/RM
      RETURN
      END