1! This file is part of xtb.
2!
3! Copyright (C) 2019-2020 Sebastian Ehlert
4!
5! xtb is free software: you can redistribute it and/or modify it under
6! the terms of the GNU Lesser General Public License as published by
7! the Free Software Foundation, either version 3 of the License, or
8! (at your option) any later version.
9!
10! xtb is distributed in the hope that it will be useful,
11! but WITHOUT ANY WARRANTY; without even the implied warranty of
12! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13! GNU Lesser General Public License for more details.
14!
15! You should have received a copy of the GNU Lesser General Public License
16! along with xtb.  If not, see <https://www.gnu.org/licenses/>.
17
18!> Data for the generation of a force field topology
19module xtb_gfnff_generator
20   use xtb_mctc_accuracy, only : wp, sp
21   implicit none
22   private
23
24   public :: TGFFGenerator
25
26
27   !> Generator for the force field topology
28   type TGFFGenerator
29
30      !> when is an angle close to linear ? (GEODEP)
31      !  for metals values closer to 170 (than to 160) are better
32      real(wp) linthr
33
34      !> skip torsion and bending if potential is small
35      real(wp) fcthr
36
37      !> R threshold in Angstroem for cov distance estimated used in apprx EEQ
38      real(sp) tdist_thr
39
40      !> important bond determination threshold, large values yield more 1.23
41      real(wp) rthr
42
43      !> decrease if a metal is present, larger values yield smaller CN
44      real(wp) rthr2
45
46      !> change of R0 for topo with charge qa
47      !  larger values yield smaller CN for metals in particular
48      real(wp) rqshrink
49
50      !> H charge (qa) threshold for H in HB list 18
51      real(wp) hqabthr
52
53      !> AB charge (qa) threshold for AB in HB list
54      !  - avoids HBs with positive atoms,
55      !  - larger val. better for S30L but worse in PubChem RMSD checks
56      real(wp) qabthr
57
58      !> Parameter
59      real(wp) srb1
60      real(wp) srb2
61      real(wp) srb3
62
63      !> change of non-bonded rep. with q(topo)
64      real(wp) qrepscal
65
66      !> change of non-bonded rep. with CN
67      real(wp) nrepscal
68
69      !> HH repulsion
70      real(wp) hhfac
71      real(wp) hh13rep
72      real(wp) hh14rep
73      real(wp) bstren(9)
74
75      !> bend FC change with polarity
76      real(wp) qfacBEN
77
78      !> torsion FC change with polarity
79      real(wp) qfacTOR
80
81      !> tors FC 3-ring
82      real(wp) fr3
83
84      !> tors FC 4-ring
85      real(wp) fr4
86
87      !> tors FC 5-ring
88      real(wp) fr5
89
90      !> tors FC 6-ring
91      real(wp) fr6
92
93      !> bonds
94      real(wp) torsf(8)
95
96      !> small bend corr.
97      real(wp) fbs1
98
99      !> bonded ATM scal
100      real(wp) batmscal
101
102      !> Shifts
103      real(wp) mchishift
104
105      !> gen shift
106      real(wp) rabshift
107
108      !> XH
109      real(wp) rabshifth
110
111      !> hypervalent
112      real(wp) hyper_shift
113
114      !> heavy
115      real(wp) hshift3
116      real(wp) hshift4
117      real(wp) hshift5
118
119      !> group 1+2 metals
120      real(wp) metal1_shift
121
122      !> TM
123      real(wp) metal2_shift
124
125      !> main group metals
126      real(wp) metal3_shift
127
128      !> eta bonded
129      real(wp) eta_shift
130
131      !> Charge Param
132      real(wp) qfacbm(0:4)
133
134      !> bond charge dependent
135      real(wp) qfacbm0
136
137      !> topo dist scaling
138      real(wp) rfgoed1
139
140      !> Hückel Param
141      !  decrease Hueckel off-diag for triple bonds because they are less well conjugated 1.4
142      real(wp) htriple
143
144      !> increase pot depth depending on P
145      real(wp) hueckelp2
146
147      !> diagonal element change with qa
148      real(wp) hueckelp3
149
150      !> diagonal element relative to C
151      real(wp) hdiag(17)
152
153      !> Huckel off-diag constants
154      real(wp) hoffdiag(17)
155
156      !> iteration mixing
157      real(wp) hiter
158
159      !> diagonal qa dep.
160      real(wp) hueckelp
161
162      !> ref P value R shift
163      real(wp) bzref
164
165      !> ref P value k stretch
166      real(wp) bzref2
167
168      !> 2el diag shift
169      real(wp) pilpf
170
171      !> the Hückel iterations can diverge so take only a few steps
172      real(wp) maxhiter
173
174      !> D3 Param
175      real(wp) d3a1
176
177      !> D3
178      real(wp) d3a2
179
180      !> mixing of sp^n with sp^n-1
181      real(wp) split0
182
183      !> mixing of sp^n with sp^n-1
184      real(wp) split1
185
186      !> str ring size dep.
187      real(wp) fringbo
188
189      !> three coord. heavy eq. angle
190      real(wp) aheavy3
191
192      !> four coord. heavy eq. angle
193      real(wp) aheavy4
194      real(wp) bsmat(0:3,0:3)
195
196      !> max CN cut-off
197      real(wp) :: cnmax
198
199   end type TGFFGenerator
200
201
202contains
203
204
205end module xtb_gfnff_generator
206