Line data Source code
1 : !--------------------------------------------------------------------------------------------------!
2 : ! CP2K: A general program to perform molecular dynamics simulations !
3 : ! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4 : ! !
5 : ! SPDX-License-Identifier: GPL-2.0-or-later !
6 : !--------------------------------------------------------------------------------------------------!
7 :
8 : ! **************************************************************************************************
9 : !> \brief Definition of the xTB parameter types.
10 : !> \author JGH (10.2018)
11 : ! **************************************************************************************************
12 : ! To be done:
13 : ! 1) Ewald defaults options for GMAX, ALPHA, RCUT
14 : ! 2) QM/MM debugging of forces -- done
15 : ! 3) Periodic displacement field (debugging)
16 : ! 4) Check for RTP and EMD
17 : ! 5) Wannier localization
18 : ! 6) Charge Mixing methods: Broyden/Pulay (more debugging needed, also add to DFTB)
19 : ! **************************************************************************************************
20 : MODULE xtb_types
21 :
22 : USE cp_log_handling, ONLY: cp_get_default_logger,&
23 : cp_logger_type
24 : USE cp_output_handling, ONLY: cp_p_file,&
25 : cp_print_key_finished_output,&
26 : cp_print_key_should_output,&
27 : cp_print_key_unit_nr
28 : USE input_section_types, ONLY: section_vals_type
29 : USE kinds, ONLY: default_string_length,&
30 : dp
31 : #include "./base/base_uses.f90"
32 :
33 : IMPLICIT NONE
34 :
35 : PRIVATE
36 :
37 : ! *** Global parameters ***
38 :
39 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'xtb_types'
40 :
41 : ! **************************************************************************************************
42 : TYPE xtb_atom_type
43 : ! PRIVATE
44 : CHARACTER(LEN=default_string_length) :: typ = ""
45 : CHARACTER(LEN=default_string_length) :: aname = ""
46 : CHARACTER(LEN=2) :: symbol = ""
47 : LOGICAL :: defined = .FALSE.
48 : INTEGER :: z = -1 !atomic number
49 : REAL(KIND=dp) :: zeff = -1.0_dp !effective core charge
50 : INTEGER :: natorb = -1 !number of orbitals
51 : INTEGER :: lmax = -1 !max angular momentum
52 : !
53 : REAL(KIND=dp) :: rcut = -1.0_dp !cutoff radius for sr-Coulomb
54 : REAL(KIND=dp) :: rcov = -1.0_dp !covalent radius
55 : REAL(KIND=dp) :: electronegativity = -1.0_dp !electronegativity
56 : !
57 : REAL(KIND=dp) :: kx = -1.0_dp !scaling for halogen term
58 : !
59 : REAL(KIND=dp) :: eta = -1.0_dp !Atomic Hubbard parameter
60 : REAL(KIND=dp) :: xgamma = -1.0_dp !charge derivative of eta
61 : REAL(KIND=dp) :: alpha = -1.0_dp !exponential scaling parameter for repulsion potential
62 : REAL(KIND=dp) :: zneff = -1.0_dp !effective core charge for repulsion potential
63 : ! shell specific parameters
64 : INTEGER :: nshell = -1 !number of orbital shells
65 : INTEGER, DIMENSION(5) :: nval = -1 ! n-quantum number of shell i
66 : INTEGER, DIMENSION(5) :: lval = -1 ! l-quantum number of shell i
67 : INTEGER, DIMENSION(5) :: occupation = -1 ! occupation of shell i
68 : INTEGER, DIMENSION(5) :: ngauss = -1 ! number of gaussians of shell i
69 : REAL(KIND=dp), DIMENSION(5) :: kpoly = -1.0_dp
70 : REAL(KIND=dp), DIMENSION(5) :: kappa = -1.0_dp
71 : REAL(KIND=dp), DIMENSION(5) :: hen = -1.0_dp
72 : REAL(KIND=dp), DIMENSION(5) :: zeta = -1.0_dp
73 : REAL(KIND=dp), DIMENSION(3, 3) :: wall = -1.0_dp ! spin polarisation
74 : ! gfn0 params
75 : REAL(KIND=dp) :: en = -1.0_dp
76 : REAL(KIND=dp) :: kqat2 = -1.0_dp
77 : REAL(KIND=dp), DIMENSION(5) :: kq = -1.0_dp
78 : REAL(KIND=dp), DIMENSION(5) :: kcn = -1.0_dp
79 : ! charge equilibration parameter gfn0
80 : REAL(KIND=dp) :: xi = -1.0_dp
81 : REAL(KIND=dp) :: kappa0 = -1.0_dp
82 : REAL(KIND=dp) :: alpg = -1.0_dp
83 : ! AO to shell pointer
84 : INTEGER, DIMENSION(25) :: nao = -1, lao = -1
85 : ! Upper limit of Mulliken charge
86 : REAL(KIND=dp) :: chmax = -1.0_dp
87 : END TYPE xtb_atom_type
88 :
89 : ! *** Public data types ***
90 :
91 : PUBLIC :: xtb_atom_type, get_xtb_atom_param, set_xtb_atom_param, write_xtb_atom_param
92 : PUBLIC :: allocate_xtb_atom_param, deallocate_xtb_atom_param
93 :
94 : CONTAINS
95 :
96 : ! **************************************************************************************************
97 : !> \brief ...
98 : !> \param xtb_parameter ...
99 : ! **************************************************************************************************
100 2620 : SUBROUTINE allocate_xtb_atom_param(xtb_parameter)
101 :
102 : TYPE(xtb_atom_type), POINTER :: xtb_parameter
103 :
104 2620 : IF (ASSOCIATED(xtb_parameter)) THEN
105 0 : CALL deallocate_xtb_atom_param(xtb_parameter)
106 : END IF
107 :
108 327500 : ALLOCATE (xtb_parameter)
109 :
110 2620 : xtb_parameter%defined = .FALSE.
111 2620 : xtb_parameter%aname = ""
112 2620 : xtb_parameter%symbol = ""
113 2620 : xtb_parameter%typ = "NONE"
114 2620 : xtb_parameter%z = -1
115 2620 : xtb_parameter%zeff = -1.0_dp
116 2620 : xtb_parameter%natorb = 0
117 2620 : xtb_parameter%lmax = -1
118 2620 : xtb_parameter%rcut = 0.0_dp
119 2620 : xtb_parameter%rcov = 0.0_dp
120 2620 : xtb_parameter%electronegativity = 0.0_dp
121 2620 : xtb_parameter%kx = -100.0_dp
122 2620 : xtb_parameter%eta = 0.0_dp
123 2620 : xtb_parameter%xgamma = 0.0_dp
124 2620 : xtb_parameter%alpha = 0.0_dp
125 2620 : xtb_parameter%zneff = 0.0_dp
126 2620 : xtb_parameter%nshell = 0
127 15720 : xtb_parameter%nval = 0
128 15720 : xtb_parameter%lval = 0
129 15720 : xtb_parameter%occupation = 0
130 15720 : xtb_parameter%ngauss = 0
131 15720 : xtb_parameter%kpoly = 0.0_dp
132 15720 : xtb_parameter%kappa = 0.0_dp
133 34060 : xtb_parameter%wall = 0.0_dp
134 15720 : xtb_parameter%hen = 0.0_dp
135 15720 : xtb_parameter%zeta = 0.0_dp
136 2620 : xtb_parameter%en = 0.0_dp
137 2620 : xtb_parameter%kqat2 = 0.0_dp
138 15720 : xtb_parameter%kq = 0.0_dp
139 15720 : xtb_parameter%kcn = 0.0_dp
140 2620 : xtb_parameter%xi = 0.0_dp
141 2620 : xtb_parameter%kappa0 = 0.0_dp
142 2620 : xtb_parameter%alpg = 0.0_dp
143 68120 : xtb_parameter%nao = 0
144 68120 : xtb_parameter%lao = 0
145 2620 : xtb_parameter%chmax = 0.0_dp
146 :
147 2620 : END SUBROUTINE allocate_xtb_atom_param
148 :
149 : ! **************************************************************************************************
150 : !> \brief ...
151 : !> \param xtb_parameter ...
152 : ! **************************************************************************************************
153 2620 : SUBROUTINE deallocate_xtb_atom_param(xtb_parameter)
154 :
155 : TYPE(xtb_atom_type), POINTER :: xtb_parameter
156 :
157 2620 : CPASSERT(ASSOCIATED(xtb_parameter))
158 2620 : DEALLOCATE (xtb_parameter)
159 :
160 2620 : END SUBROUTINE deallocate_xtb_atom_param
161 :
162 : ! **************************************************************************************************
163 : !> \brief ...
164 : !> \param xtb_parameter ...
165 : !> \param symbol ...
166 : !> \param aname ...
167 : !> \param typ ...
168 : !> \param defined ...
169 : !> \param z ...
170 : !> \param zeff ...
171 : !> \param natorb ...
172 : !> \param lmax ...
173 : !> \param nao ...
174 : !> \param lao ...
175 : !> \param rcut ...
176 : !> \param rcov ...
177 : !> \param kx ...
178 : !> \param eta ...
179 : !> \param xgamma ...
180 : !> \param alpha ...
181 : !> \param zneff ...
182 : !> \param nshell ...
183 : !> \param nval ...
184 : !> \param lval ...
185 : !> \param kpoly ...
186 : !> \param kappa ...
187 : !> \param wall ...
188 : !> \param hen ...
189 : !> \param zeta ...
190 : !> \param xi ...
191 : !> \param kappa0 ...
192 : !> \param alpg ...
193 : !> \param occupation ...
194 : !> \param ngauss ...
195 : !> \param electronegativity ...
196 : !> \param chmax ...
197 : !> \param en ...
198 : !> \param kqat2 ...
199 : !> \param kcn ...
200 : !> \param kq ...
201 : ! **************************************************************************************************
202 58968720 : SUBROUTINE get_xtb_atom_param(xtb_parameter, symbol, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, &
203 : rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, &
204 : wall, hen, zeta, xi, kappa0, alpg, occupation, ngauss, electronegativity, chmax, &
205 : en, kqat2, kcn, kq)
206 :
207 : TYPE(xtb_atom_type), POINTER :: xtb_parameter
208 : CHARACTER(LEN=2), INTENT(OUT), OPTIONAL :: symbol
209 : CHARACTER(LEN=default_string_length), &
210 : INTENT(OUT), OPTIONAL :: aname, typ
211 : LOGICAL, INTENT(OUT), OPTIONAL :: defined
212 : INTEGER, INTENT(OUT), OPTIONAL :: z
213 : REAL(KIND=dp), INTENT(OUT), OPTIONAL :: zeff
214 : INTEGER, INTENT(OUT), OPTIONAL :: natorb, lmax
215 : INTEGER, DIMENSION(25), INTENT(OUT), OPTIONAL :: nao, lao
216 : REAL(KIND=dp), INTENT(OUT), OPTIONAL :: rcut, rcov, kx, eta, xgamma, alpha, zneff
217 : INTEGER, INTENT(OUT), OPTIONAL :: nshell
218 : INTEGER, DIMENSION(5), INTENT(OUT), OPTIONAL :: nval, lval
219 : REAL(KIND=dp), DIMENSION(5), INTENT(OUT), OPTIONAL :: kpoly, kappa
220 : REAL(KIND=dp), DIMENSION(3, 3), INTENT(OUT), &
221 : OPTIONAL :: wall
222 : REAL(KIND=dp), DIMENSION(5), INTENT(OUT), OPTIONAL :: hen, zeta
223 : REAL(KIND=dp), INTENT(OUT), OPTIONAL :: xi, kappa0, alpg
224 : INTEGER, DIMENSION(5), INTENT(OUT), OPTIONAL :: occupation, ngauss
225 : REAL(KIND=dp), INTENT(OUT), OPTIONAL :: electronegativity, chmax, en, kqat2
226 : REAL(KIND=dp), DIMENSION(5), INTENT(OUT), OPTIONAL :: kcn, kq
227 :
228 58968720 : CPASSERT(ASSOCIATED(xtb_parameter))
229 :
230 58968720 : IF (PRESENT(symbol)) symbol = xtb_parameter%symbol
231 58968720 : IF (PRESENT(aname)) aname = xtb_parameter%aname
232 58968720 : IF (PRESENT(typ)) typ = xtb_parameter%typ
233 58968720 : IF (PRESENT(defined)) defined = xtb_parameter%defined
234 58968720 : IF (PRESENT(z)) z = xtb_parameter%z
235 58968720 : IF (PRESENT(zeff)) zeff = xtb_parameter%zeff
236 58968720 : IF (PRESENT(natorb)) natorb = xtb_parameter%natorb
237 58968720 : IF (PRESENT(lmax)) lmax = xtb_parameter%lmax
238 282590820 : IF (PRESENT(nao)) nao = xtb_parameter%nao
239 332002870 : IF (PRESENT(lao)) lao = xtb_parameter%lao
240 : !
241 58968720 : IF (PRESENT(rcut)) rcut = xtb_parameter%rcut
242 58968720 : IF (PRESENT(rcov)) rcov = xtb_parameter%rcov
243 58968720 : IF (PRESENT(kx)) kx = xtb_parameter%kx
244 58968720 : IF (PRESENT(electronegativity)) electronegativity = xtb_parameter%electronegativity
245 58968720 : IF (PRESENT(eta)) eta = xtb_parameter%eta
246 58968720 : IF (PRESENT(xgamma)) xgamma = xtb_parameter%xgamma
247 58968720 : IF (PRESENT(alpha)) alpha = xtb_parameter%alpha
248 58968720 : IF (PRESENT(zneff)) zneff = xtb_parameter%zneff
249 58968720 : IF (PRESENT(nshell)) nshell = xtb_parameter%nshell
250 58968720 : IF (PRESENT(nval)) nval = xtb_parameter%nval
251 59184710 : IF (PRESENT(lval)) lval = xtb_parameter%lval
252 59806400 : IF (PRESENT(occupation)) occupation = xtb_parameter%occupation
253 58968760 : IF (PRESENT(ngauss)) ngauss = xtb_parameter%ngauss
254 75603530 : IF (PRESENT(kpoly)) kpoly = xtb_parameter%kpoly
255 152981050 : IF (PRESENT(kappa)) kappa = xtb_parameter%kappa
256 59029440 : IF (PRESENT(wall)) wall(1:3, 1:3) = xtb_parameter%wall(1:3, 1:3)
257 64100370 : IF (PRESENT(hen)) hen = xtb_parameter%hen
258 59054800 : IF (PRESENT(zeta)) zeta = xtb_parameter%zeta
259 58968720 : IF (PRESENT(chmax)) chmax = xtb_parameter%chmax
260 58968720 : IF (PRESENT(xi)) xi = xtb_parameter%xi
261 58968720 : IF (PRESENT(kappa0)) kappa0 = xtb_parameter%kappa0
262 58968720 : IF (PRESENT(alpg)) alpg = xtb_parameter%alpg
263 58968720 : IF (PRESENT(en)) en = xtb_parameter%en
264 58968720 : IF (PRESENT(kqat2)) kqat2 = xtb_parameter%kqat2
265 59018440 : IF (PRESENT(kcn)) kcn = xtb_parameter%kcn
266 59018440 : IF (PRESENT(kq)) kq = xtb_parameter%kq
267 :
268 58968720 : END SUBROUTINE get_xtb_atom_param
269 :
270 : ! **************************************************************************************************
271 : !> \brief ...
272 : !> \param xtb_parameter ...
273 : !> \param aname ...
274 : !> \param typ ...
275 : !> \param defined ...
276 : !> \param z ...
277 : !> \param zeff ...
278 : !> \param natorb ...
279 : !> \param lmax ...
280 : !> \param nao ...
281 : !> \param lao ...
282 : !> \param rcut ...
283 : !> \param rcov ...
284 : !> \param kx ...
285 : !> \param eta ...
286 : !> \param xgamma ...
287 : !> \param alpha ...
288 : !> \param zneff ...
289 : !> \param nshell ...
290 : !> \param nval ...
291 : !> \param lval ...
292 : !> \param kpoly ...
293 : !> \param kappa ...
294 : !> \param wall ...
295 : !> \param hen ...
296 : !> \param zeta ...
297 : !> \param xi ...
298 : !> \param kappa0 ...
299 : !> \param alpg ...
300 : !> \param electronegativity ...
301 : !> \param occupation ...
302 : !> \param ngauss ...
303 : !> \param chmax ...
304 : !> \param en ...
305 : !> \param kqat2 ...
306 : !> \param kcn ...
307 : !> \param kq ...
308 : ! **************************************************************************************************
309 324 : SUBROUTINE set_xtb_atom_param(xtb_parameter, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, &
310 : rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, &
311 : wall, hen, zeta, xi, kappa0, alpg, electronegativity, occupation, ngauss, chmax, &
312 : en, kqat2, kcn, kq)
313 :
314 : TYPE(xtb_atom_type), POINTER :: xtb_parameter
315 : CHARACTER(LEN=default_string_length), INTENT(IN), &
316 : OPTIONAL :: aname, typ
317 : LOGICAL, INTENT(IN), OPTIONAL :: defined
318 : INTEGER, INTENT(IN), OPTIONAL :: z
319 : REAL(KIND=dp), INTENT(IN), OPTIONAL :: zeff
320 : INTEGER, INTENT(IN), OPTIONAL :: natorb, lmax
321 : INTEGER, DIMENSION(25), INTENT(IN), OPTIONAL :: nao, lao
322 : REAL(KIND=dp), INTENT(IN), OPTIONAL :: rcut, rcov, kx, eta, xgamma, alpha, zneff
323 : INTEGER, INTENT(IN), OPTIONAL :: nshell
324 : INTEGER, DIMENSION(5), INTENT(IN), OPTIONAL :: nval, lval
325 : REAL(KIND=dp), DIMENSION(5), INTENT(IN), OPTIONAL :: kpoly, kappa
326 : REAL(KIND=dp), DIMENSION(3, 3), INTENT(IN), &
327 : OPTIONAL :: wall
328 : REAL(KIND=dp), DIMENSION(5), INTENT(IN), OPTIONAL :: hen, zeta
329 : REAL(KIND=dp), INTENT(IN), OPTIONAL :: xi, kappa0, alpg, electronegativity
330 : INTEGER, DIMENSION(5), INTENT(IN), OPTIONAL :: occupation, ngauss
331 : REAL(KIND=dp), INTENT(IN), OPTIONAL :: chmax, en, kqat2
332 : REAL(KIND=dp), DIMENSION(5), INTENT(IN), OPTIONAL :: kcn, kq
333 :
334 324 : CPASSERT(ASSOCIATED(xtb_parameter))
335 :
336 324 : IF (PRESENT(aname)) xtb_parameter%aname = aname
337 324 : IF (PRESENT(typ)) xtb_parameter%typ = typ
338 324 : IF (PRESENT(defined)) xtb_parameter%defined = defined
339 324 : IF (PRESENT(z)) xtb_parameter%z = z
340 324 : IF (PRESENT(zeff)) xtb_parameter%zeff = zeff
341 324 : IF (PRESENT(natorb)) xtb_parameter%natorb = natorb
342 324 : IF (PRESENT(lmax)) xtb_parameter%lmax = lmax
343 324 : IF (PRESENT(nao)) xtb_parameter%nao = nao
344 324 : IF (PRESENT(lao)) xtb_parameter%lao = lao
345 : !
346 324 : IF (PRESENT(rcut)) xtb_parameter%rcut = rcut
347 324 : IF (PRESENT(rcov)) xtb_parameter%rcov = rcov
348 324 : IF (PRESENT(kx)) xtb_parameter%kx = kx
349 324 : IF (PRESENT(electronegativity)) xtb_parameter%electronegativity = electronegativity
350 324 : IF (PRESENT(eta)) xtb_parameter%eta = eta
351 324 : IF (PRESENT(xgamma)) xtb_parameter%xgamma = xgamma
352 324 : IF (PRESENT(alpha)) xtb_parameter%alpha = alpha
353 324 : IF (PRESENT(zneff)) xtb_parameter%zneff = zneff
354 324 : IF (PRESENT(nshell)) xtb_parameter%nshell = nshell
355 324 : IF (PRESENT(nval)) xtb_parameter%nval = nval
356 324 : IF (PRESENT(lval)) xtb_parameter%lval = lval
357 1944 : IF (PRESENT(occupation)) xtb_parameter%occupation = occupation
358 324 : IF (PRESENT(ngauss)) xtb_parameter%ngauss = ngauss
359 324 : IF (PRESENT(kpoly)) xtb_parameter%kpoly = kpoly
360 324 : IF (PRESENT(kappa)) xtb_parameter%kappa = kappa
361 324 : IF (PRESENT(wall)) xtb_parameter%wall(1:3, 1:3) = wall(1:3, 1:3)
362 324 : IF (PRESENT(hen)) xtb_parameter%hen = hen
363 324 : IF (PRESENT(zeta)) xtb_parameter%zeta = zeta
364 324 : IF (PRESENT(chmax)) xtb_parameter%chmax = chmax
365 : !
366 324 : IF (PRESENT(xi)) xtb_parameter%xi = xi
367 324 : IF (PRESENT(kappa0)) xtb_parameter%kappa0 = kappa0
368 324 : IF (PRESENT(alpg)) xtb_parameter%alpg = alpg
369 324 : IF (PRESENT(en)) xtb_parameter%en = en
370 324 : IF (PRESENT(kqat2)) xtb_parameter%kqat2 = kqat2
371 324 : IF (PRESENT(kcn)) xtb_parameter%kcn = kcn
372 324 : IF (PRESENT(kq)) xtb_parameter%kq = kq
373 :
374 324 : END SUBROUTINE set_xtb_atom_param
375 :
376 : ! **************************************************************************************************
377 : !> \brief ...
378 : !> \param xtb_parameter ...
379 : !> \param gfn_type ...
380 : !> \param subsys_section ...
381 : ! **************************************************************************************************
382 4592 : SUBROUTINE write_xtb_atom_param(xtb_parameter, gfn_type, subsys_section)
383 :
384 : TYPE(xtb_atom_type), POINTER :: xtb_parameter
385 : INTEGER, INTENT(IN) :: gfn_type
386 : TYPE(section_vals_type), POINTER :: subsys_section
387 :
388 : CHARACTER(LEN=default_string_length) :: aname, bb
389 : INTEGER :: i, io_unit, m, natorb, nshell
390 : INTEGER, DIMENSION(5) :: lval, ngauss, nval, occupation
391 : LOGICAL :: defined, have_sp
392 : REAL(dp) :: zeff
393 : REAL(KIND=dp) :: alpha, en, eta, xgamma, zneff
394 : REAL(KIND=dp), DIMENSION(3, 3) :: wall
395 : REAL(KIND=dp), DIMENSION(5) :: hen, kappa, kpoly, zeta
396 : TYPE(cp_logger_type), POINTER :: logger
397 :
398 4592 : NULLIFY (logger)
399 4592 : logger => cp_get_default_logger()
400 4592 : IF (ASSOCIATED(xtb_parameter) .AND. &
401 : BTEST(cp_print_key_should_output(logger%iter_info, subsys_section, &
402 : "PRINT%KINDS/POTENTIAL"), cp_p_file)) THEN
403 :
404 : io_unit = cp_print_key_unit_nr(logger, subsys_section, "PRINT%KINDS", &
405 0 : extension=".Log")
406 :
407 0 : IF (io_unit > 0) THEN
408 0 : SELECT CASE (gfn_type)
409 : CASE (0)
410 0 : CPABORT("gfn_type = 0 missing code")
411 : CASE (1)
412 0 : CALL get_xtb_atom_param(xtb_parameter, aname=aname, defined=defined, zeff=zeff, natorb=natorb)
413 0 : CALL get_xtb_atom_param(xtb_parameter, nshell=nshell, lval=lval, nval=nval, occupation=occupation)
414 0 : CALL get_xtb_atom_param(xtb_parameter, ngauss=ngauss)
415 0 : CALL get_xtb_atom_param(xtb_parameter, kpoly=kpoly, kappa=kappa, hen=hen, zeta=zeta)
416 0 : CALL get_xtb_atom_param(xtb_parameter, electronegativity=en, xgamma=xgamma, eta=eta, alpha=alpha, zneff=zneff)
417 0 : wall = 0.0_dp
418 0 : CALL get_xtb_atom_param(xtb_parameter, wall=wall)
419 0 : have_sp = .FALSE.
420 0 : IF (SUM(ABS(wall)) /= 0.0_dp) have_sp = .TRUE.
421 :
422 0 : bb = " "
423 0 : WRITE (UNIT=io_unit, FMT="(/,A,T67,A14)") " xTB parameters: ", TRIM(aname)
424 0 : IF (defined) THEN
425 0 : m = 5 - nshell
426 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.2)") "Effective core charge:", zeff
427 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T71,I10)") "Number of orbitals:", natorb
428 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5(A4,I1,I2,A1))") "Basis set [nl]", bb(1:8*m), &
429 0 : (" [", nval(i), lval(i), "]", i=1, nshell)
430 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Slater Exponent", bb(1:8*m), (zeta(i), i=1, nshell)
431 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5I8)") "Ref. occupation", bb(1:8*m), (occupation(i), i=1, nshell)
432 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5I8)") "# of Gaussians", bb(1:8*m), (ngauss(i), i=1, nshell)
433 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Energy levels [au]", bb(1:8*m), (hen(i), i=1, nshell)
434 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Kpoly", bb(1:8*m), (kpoly(i), i=1, nshell)
435 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.3)") "Electronegativity", en
436 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.3)") "Mataga-Nishimoto constant (eta)", eta
437 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Mataga-Nishimoto scaling kappa", bb(1:8*m), &
438 0 : (kappa(i), i=1, nshell)
439 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.3)") "3rd Order constant", xgamma
440 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T61,2F10.3)") "Repulsion potential [Z,alpha]", zneff, alpha
441 0 : IF (have_sp) THEN
442 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T51,3F10.4)") "Spin Polarisation Wss sp pp", wall(1, 1), wall(1, 2), wall(2, 2)
443 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T51,3F10.4)") " Wsd pd dd", wall(1, 3), wall(2, 3), wall(3, 3)
444 : END IF
445 : ELSE
446 0 : WRITE (UNIT=io_unit, FMT="(T55,A)") "Parameters are not defined"
447 : END IF
448 : CASE (2)
449 0 : CPABORT("gfn_type = 2 not yet defined")
450 : END SELECT
451 : END IF
452 0 : CALL cp_print_key_finished_output(io_unit, logger, subsys_section, "PRINT%KINDS")
453 : END IF
454 :
455 4592 : END SUBROUTINE write_xtb_atom_param
456 :
457 0 : END MODULE xtb_types
|