File: initsv.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 (101 lines) | stat: -rw-r--r-- 3,782 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
      SUBROUTINE INITSV (INDEPS)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
      INCLUDE 'SIZES'
      COMMON / SOLV / FEPSI,RDS,DISEX2,NSPA,NPSX,NPS2X,NDEN,
     1                COSURF(3,LENABC), SRAD(NUMATM),ABCMAT(LENAB2),
     2                TM(3,3,NUMATM),QDEN(MAXDEN),DIRTM(3,NPPA),
     3                BH(LENABC)
     4       /SOLVI/  IATSP(LENABC+1),NAR(LENABC), NNX(2,NUMATM)
     x       /SOLVPS/ NPS, NPS2
      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
      DIMENSION RVDW(53), USEVDW(53), DIRSM(3,NPPA), DIRSMH(3,NPPA/3)
      COMMON /CHANEL/ IFILES(30)
      EQUIVALENCE(IW,IFILES(6))
      EQUIVALENCE (ABCMAT(1),DIRSM)
      EQUIVALENCE(DIRSMH, ABCMAT(3*NPPA+1))
      CHARACTER KEYWRD*241, ELEMNT(53)*2
      COMMON /KEYWRD/ KEYWRD
      DATA RVDW  /1.08D0, 1.D0, 1.80D0, 999.D0, 999.D0, 1.53D0, 1.48D0,
     1 1.36D0,  1.30D0,  999.D0,  2.30D0,  999.D0,  2.05D0,  2.10D0,
     2 1.75D0,  1.70D0,  1.65D0,  999.D0,  2.80D0,  2.75D0,  999.D0,
     3 999.D0,  999.D0,  999.D0,  999.D0,  999.D0,  999.D0,  999.D0,
     4 999.D0,  999.D0,  999.D0,  999.D0,  999.D0,  999.D0,  1.80D0,
     5 999.D0,  999.D0,  999.D0,  999.D0,  999.D0,  999.D0,  999.D0,
     6 999.D0,  999.D0,  999.D0,  999.D0,  999.D0,  999.D0,  999.D0,
     7 999.D0,  999.D0,  999.D0,  2.05D0 /
      DATA ELEMNT/'H ','HE',
     1 'LI','BE','B ','C ','N ','O ','F ','NE',
     2 'NA','MG','AL','SI','P ','S ','CL','AR',
     3 'K ','CA','SC','TI','V ','CR','MN','FE','CO','NI','CU',
     4 'ZN','GA','GE','AS','SE','BR','KR',
     5 'RB','SR','Y ','ZR','NB','MO','TC','RU','RH','PD','AG',
     6 'CD','IN','SN','SB','TE','I '/
      DO 10 I=1,53
   10 USEVDW(I)=RVDW(I)
      EPSI=READA(KEYWRD,INDEPS)
      FEPSI=(EPSI-1.D0)/(EPSI+0.5D0)
      NPS=0
      IW=6
      NDEN=3*NORBS-2*NUMAT
      MAXNPS=SQRT(2*LENAB2+0.251)-NDEN-0.5
      MAXNPS=MIN(MAXNPS,LENABC)
*     WRITE(IW,*) 'MAXIMUM NUMBER OF SEGMENTS ALLOWED:',MAXNPS
      IF ((NDEN*(NDEN+1))/2 .GT. LENAB2) THEN
         WRITE(IW,*) 'PARAMETER LENABC IS TOO SMALL FOR THIS SYSTEM'
         STOP 'PARAMETER LENABC IS TOO SMALL FOR THIS SYSTEM'
      ENDIF
      RSOLV=1.D0
      INRSOL=INDEX(KEYWRD,'RSOLV=')
      IF (INRSOL .NE. 0) THEN
         RSOLV=READA(KEYWRD,INRSOL)
      END IF
      IF (RSOLV .LT. 0.) STOP ' RSOLV MUST NOT BE NEGATIVE'
      DELSC=RSOLV
      INDELS=INDEX(KEYWRD,'DELSC=')
      IF (INDELS .NE. 0) THEN
         DELSC=READA(KEYWRD,INDELS)
      END IF
      IF (DELSC .LT. 0.1D0) WRITE(IW,*) ' DELSC TOO SMALL: SET TO 0.1'
      IF (DELSC .GT. RSOLV+0.5D0) STOP ' DELSC UNREASONABLY LARGE'
      RDS=MAX(DELSC,0.1D0)
      DISEX=2.D0
      INDISE=INDEX(KEYWRD,'DISEX=')
      IF (INDISE .NE. 0) THEN
         DISEX=READA(KEYWRD,INDISE)
      END IF
      DO 20 I=1,NUMAT
         IAT=NAT(I)
         IF (IAT .GT. 53) THEN
            STOP 'MISSING VAN DER WAALS RADIUS'
         ELSE
            AVDW=USEVDW(IAT)
            IF (AVDW .GT. 10.D0) STOP 'MISSING VAN DER WAALS RADIUS'
         END IF
         SRAD(I)=AVDW+RSOLV
   20 CONTINUE
      NSPA=60
      IF(INDEX(KEYWRD,'NSPA=').NE.0)
     1 NSPA=NINT(READA(KEYWRD,INDEX(KEYWRD,'NSPA')))
      X0=LOG(NSPA*0.1D0-0.199999D0)
      Z3=LOG(3.D0)
      Z4=LOG(4.D0)
      I4=INT(X0/Z4)
      NPS2=0
      DO 7 I=0,I4
      X=X0-I*Z4
      N=3**INT(X/Z3)*4**I
   7  IF(N.GT.NPS2)NPS2=N
      NPS=NPS2/3
      IF(MOD(NPS2,3).NE.0)NPS=NPS2/4
      NPS2=10*NPS2+2
      NPS=MAX(12,NPS*10+2)
      CALL DVFILL(NPS2,DIRSM)
      CALL DVFILL(NPS,DIRSMH)
      NPS=-NPS
      DISEX2=(4*(1.5D0+RSOLV-RDS)*DISEX)**2/NSPA
      CALL DVFILL(NPPA,DIRVEC)
      RETURN
      END