File: ders.f

package info (click to toggle)
mopac7 1.15-6
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster, jessie, jessie-kfreebsd, stretch
  • size: 3,748 kB
  • ctags: 5,768
  • sloc: fortran: 35,321; sh: 9,039; ansic: 417; makefile: 80
file content (58 lines) | stat: -rw-r--r-- 2,607 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
      SUBROUTINE DERS(M,N,RR,DEL1,DEL2,DEL3,IS,IOL)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
************************************************************************
*                                                                      *
*    ON INPUT M    = INDEX OF FIRST ATOMIC ORBITAL                     *
*             N    = INDEX OF SECOND ATOMIC ORBITAL                    *
*             RR   = SQUARE IF INTERATOMIC DIATANCE (IN BOHR)          *
*             DEL1 = CATERSIAN DISTANCE IN DERIVATIVE DIRECTION        *
*             DEL2 = CARTESIAN DISTANCE IN M A.O.'S DIRECTION          *
*             DEL3 = CARTESIAN DISTANCE IN N A.O.'S DIRECTION          *
*             IS   = INDICATES TYPE OF A.O.-A.O. INTERACTION           *
*                  = 1 S/S, 2 S/P', 3 S/P, 4 P'/S, 5 P/S, 6 P/P',      *
*                    7 P'/P", 8 P'P', 9 P/P                            *
*             IOL  = INDEX FOR STORING DERIVATIVES IN DS               *
*                                                                      *
************************************************************************
      COMMON /DERIVS/ DS(16),DG(22),DR(100),TDX(3),TDY(3),TDZ(3)
      COMMON /TEMP/  CG(60,6),ZG(60,6)
      DIMENSION SS(6,6)
      A0=0.529167D0
      DO 110 I=1,6
         DO 110 J=1,6
            SS(I,J)=0.0D0
            APB=ZG(M,I)*ZG(N,J)
            AMB=ZG(M,I)+ZG(N,J)
            ADB=APB/AMB
            ADR=MIN(ADB*RR,35.D0)
            GO TO (10,20,30,40,50,60,70,80,90),IS
   10       ABN=-2.0D0*ADB*DEL1/(A0**2)
            GO TO 100
   20       ABN=-4.0D0*(ADB**2)*DEL1*DEL2/(SQRT(ZG(N,J))*(A0**3))
            GO TO 100
   30       ABN=(2.0D0*ADB/(SQRT(ZG(N,J))*A0))*
     1 (1.0D0-2.0D0*ADB*(DEL1**2)/(A0**2))
            GO TO 100
   40       ABN=4.0D0*(ADB**2)*DEL1*DEL2/(SQRT(ZG(M,I))*(A0**3))
            GO TO 100
   50       ABN=-(2.0D0*ADB/(SQRT(ZG(M,I))*A0))*
     1 (1.0D0-2.0D0*ADB*(DEL1**2)/(A0**2))
            GO TO 100
   60       ABN=-(4.0D0*(ADB**2)*DEL2/(SQRT(APB)*(A0**2)))*
     1 (1.0D0-2.0D0*ADB*(DEL1**2)/(A0**2))
            GO TO 100
   70       ABN=8.0D0*(ADB**3)*DEL1*DEL2*DEL3/(SQRT(APB)*(A0**4))
            GO TO 100
   80       ABN=-(8.0D0*(ADB**2)*DEL1/(SQRT(APB)*(A0**2)))*
     1 (0.5D0-ADB*(DEL2**2)/(A0**2))
            GO TO 100
   90       ABN=-(8.0D0*(ADB**2)*DEL1/(SQRT(APB)*(A0**2)))*
     1 (1.5D0-ADB*(DEL1**2)/(A0**2))
  100       SS(I,J)=SQRT((2.0D0*SQRT(APB)/AMB)**3)*EXP(-ADR)*ABN
  110 CONTINUE
      DO 120 I=1,6
         DO 120 J=1,6
            DS(IOL)=DS(IOL)+SS(I,J)*CG(M,I)*CG(N,J)
  120 CONTINUE
      RETURN
      END