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 : REAL(KIND=dp), DIMENSION(5) :: kpoly = -1.0_dp
69 : REAL(KIND=dp), DIMENSION(5) :: kappa = -1.0_dp
70 : REAL(KIND=dp), DIMENSION(5) :: hen = -1.0_dp
71 : REAL(KIND=dp), DIMENSION(5) :: zeta = -1.0_dp
72 : REAL(KIND=dp), DIMENSION(3, 3) :: wall = -1.0_dp ! spin polarisation
73 : ! gfn0 params
74 : REAL(KIND=dp) :: en = -1.0_dp
75 : REAL(KIND=dp) :: kqat2 = -1.0_dp
76 : REAL(KIND=dp), DIMENSION(5) :: kq = -1.0_dp
77 : REAL(KIND=dp), DIMENSION(5) :: kcn = -1.0_dp
78 : ! charge equilibration parameter gfn0
79 : REAL(KIND=dp) :: xi = -1.0_dp
80 : REAL(KIND=dp) :: kappa0 = -1.0_dp
81 : REAL(KIND=dp) :: alpg = -1.0_dp
82 : ! AO to shell pointer
83 : INTEGER, DIMENSION(25) :: nao = -1, lao = -1
84 : ! Upper limit of Mulliken charge
85 : REAL(KIND=dp) :: chmax = -1.0_dp
86 : END TYPE xtb_atom_type
87 :
88 : ! *** Public data types ***
89 :
90 : PUBLIC :: xtb_atom_type, get_xtb_atom_param, set_xtb_atom_param, write_xtb_atom_param
91 : PUBLIC :: allocate_xtb_atom_param, deallocate_xtb_atom_param
92 :
93 : CONTAINS
94 :
95 : ! **************************************************************************************************
96 : !> \brief ...
97 : !> \param xtb_parameter ...
98 : ! **************************************************************************************************
99 2562 : SUBROUTINE allocate_xtb_atom_param(xtb_parameter)
100 :
101 : TYPE(xtb_atom_type), POINTER :: xtb_parameter
102 :
103 2562 : IF (ASSOCIATED(xtb_parameter)) THEN
104 0 : CALL deallocate_xtb_atom_param(xtb_parameter)
105 : END IF
106 :
107 304878 : ALLOCATE (xtb_parameter)
108 :
109 2562 : xtb_parameter%defined = .FALSE.
110 2562 : xtb_parameter%aname = ""
111 2562 : xtb_parameter%symbol = ""
112 2562 : xtb_parameter%typ = "NONE"
113 2562 : xtb_parameter%z = -1
114 2562 : xtb_parameter%zeff = -1.0_dp
115 2562 : xtb_parameter%natorb = 0
116 2562 : xtb_parameter%lmax = -1
117 2562 : xtb_parameter%rcut = 0.0_dp
118 2562 : xtb_parameter%rcov = 0.0_dp
119 2562 : xtb_parameter%electronegativity = 0.0_dp
120 2562 : xtb_parameter%kx = -100.0_dp
121 2562 : xtb_parameter%eta = 0.0_dp
122 2562 : xtb_parameter%xgamma = 0.0_dp
123 2562 : xtb_parameter%alpha = 0.0_dp
124 2562 : xtb_parameter%zneff = 0.0_dp
125 2562 : xtb_parameter%nshell = 0
126 15372 : xtb_parameter%nval = 0
127 15372 : xtb_parameter%lval = 0
128 15372 : xtb_parameter%occupation = 0
129 15372 : xtb_parameter%kpoly = 0.0_dp
130 15372 : xtb_parameter%kappa = 0.0_dp
131 33306 : xtb_parameter%wall = 0.0_dp
132 15372 : xtb_parameter%hen = 0.0_dp
133 15372 : xtb_parameter%zeta = 0.0_dp
134 2562 : xtb_parameter%en = 0.0_dp
135 2562 : xtb_parameter%kqat2 = 0.0_dp
136 15372 : xtb_parameter%kq = 0.0_dp
137 15372 : xtb_parameter%kcn = 0.0_dp
138 2562 : xtb_parameter%xi = 0.0_dp
139 2562 : xtb_parameter%kappa0 = 0.0_dp
140 2562 : xtb_parameter%alpg = 0.0_dp
141 66612 : xtb_parameter%nao = 0
142 66612 : xtb_parameter%lao = 0
143 2562 : xtb_parameter%chmax = 0.0_dp
144 :
145 2562 : END SUBROUTINE allocate_xtb_atom_param
146 :
147 : ! **************************************************************************************************
148 : !> \brief ...
149 : !> \param xtb_parameter ...
150 : ! **************************************************************************************************
151 2562 : SUBROUTINE deallocate_xtb_atom_param(xtb_parameter)
152 :
153 : TYPE(xtb_atom_type), POINTER :: xtb_parameter
154 :
155 2562 : CPASSERT(ASSOCIATED(xtb_parameter))
156 2562 : DEALLOCATE (xtb_parameter)
157 :
158 2562 : END SUBROUTINE deallocate_xtb_atom_param
159 :
160 : ! **************************************************************************************************
161 : !> \brief ...
162 : !> \param xtb_parameter ...
163 : !> \param symbol ...
164 : !> \param aname ...
165 : !> \param typ ...
166 : !> \param defined ...
167 : !> \param z ...
168 : !> \param zeff ...
169 : !> \param natorb ...
170 : !> \param lmax ...
171 : !> \param nao ...
172 : !> \param lao ...
173 : !> \param rcut ...
174 : !> \param rcov ...
175 : !> \param kx ...
176 : !> \param eta ...
177 : !> \param xgamma ...
178 : !> \param alpha ...
179 : !> \param zneff ...
180 : !> \param nshell ...
181 : !> \param nval ...
182 : !> \param lval ...
183 : !> \param kpoly ...
184 : !> \param kappa ...
185 : !> \param wall ...
186 : !> \param hen ...
187 : !> \param zeta ...
188 : !> \param xi ...
189 : !> \param kappa0 ...
190 : !> \param alpg ...
191 : !> \param occupation ...
192 : !> \param electronegativity ...
193 : !> \param chmax ...
194 : !> \param en ...
195 : !> \param kqat2 ...
196 : !> \param kcn ...
197 : !> \param kq ...
198 : ! **************************************************************************************************
199 58151244 : SUBROUTINE get_xtb_atom_param(xtb_parameter, symbol, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, &
200 : rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, &
201 : wall, hen, zeta, xi, kappa0, alpg, occupation, electronegativity, chmax, &
202 : en, kqat2, kcn, kq)
203 :
204 : TYPE(xtb_atom_type), POINTER :: xtb_parameter
205 : CHARACTER(LEN=2), INTENT(OUT), OPTIONAL :: symbol
206 : CHARACTER(LEN=default_string_length), &
207 : INTENT(OUT), OPTIONAL :: aname, typ
208 : LOGICAL, INTENT(OUT), OPTIONAL :: defined
209 : INTEGER, INTENT(OUT), OPTIONAL :: z
210 : REAL(KIND=dp), INTENT(OUT), OPTIONAL :: zeff
211 : INTEGER, INTENT(OUT), OPTIONAL :: natorb, lmax
212 : INTEGER, DIMENSION(25), INTENT(OUT), OPTIONAL :: nao, lao
213 : REAL(KIND=dp), INTENT(OUT), OPTIONAL :: rcut, rcov, kx, eta, xgamma, alpha, zneff
214 : INTEGER, INTENT(OUT), OPTIONAL :: nshell
215 : INTEGER, DIMENSION(5), INTENT(OUT), OPTIONAL :: nval, lval
216 : REAL(KIND=dp), DIMENSION(5), INTENT(OUT), OPTIONAL :: kpoly, kappa
217 : REAL(KIND=dp), DIMENSION(3, 3), INTENT(OUT), &
218 : OPTIONAL :: wall
219 : REAL(KIND=dp), DIMENSION(5), INTENT(OUT), OPTIONAL :: hen, zeta
220 : REAL(KIND=dp), INTENT(OUT), OPTIONAL :: xi, kappa0, alpg
221 : INTEGER, DIMENSION(5), INTENT(OUT), OPTIONAL :: occupation
222 : REAL(KIND=dp), INTENT(OUT), OPTIONAL :: electronegativity, chmax, en, kqat2
223 : REAL(KIND=dp), DIMENSION(5), INTENT(OUT), OPTIONAL :: kcn, kq
224 :
225 58151244 : CPASSERT(ASSOCIATED(xtb_parameter))
226 :
227 58151244 : IF (PRESENT(symbol)) symbol = xtb_parameter%symbol
228 58151244 : IF (PRESENT(aname)) aname = xtb_parameter%aname
229 58151244 : IF (PRESENT(typ)) typ = xtb_parameter%typ
230 58151244 : IF (PRESENT(defined)) defined = xtb_parameter%defined
231 58151244 : IF (PRESENT(z)) z = xtb_parameter%z
232 58151244 : IF (PRESENT(zeff)) zeff = xtb_parameter%zeff
233 58151244 : IF (PRESENT(natorb)) natorb = xtb_parameter%natorb
234 58151244 : IF (PRESENT(lmax)) lmax = xtb_parameter%lmax
235 263201344 : IF (PRESENT(nao)) nao = xtb_parameter%nao
236 330922344 : IF (PRESENT(lao)) lao = xtb_parameter%lao
237 : !
238 58151244 : IF (PRESENT(rcut)) rcut = xtb_parameter%rcut
239 58151244 : IF (PRESENT(rcov)) rcov = xtb_parameter%rcov
240 58151244 : IF (PRESENT(kx)) kx = xtb_parameter%kx
241 58151244 : IF (PRESENT(electronegativity)) electronegativity = xtb_parameter%electronegativity
242 58151244 : IF (PRESENT(eta)) eta = xtb_parameter%eta
243 58151244 : IF (PRESENT(xgamma)) xgamma = xtb_parameter%xgamma
244 58151244 : IF (PRESENT(alpha)) alpha = xtb_parameter%alpha
245 58151244 : IF (PRESENT(zneff)) zneff = xtb_parameter%zneff
246 58151244 : IF (PRESENT(nshell)) nshell = xtb_parameter%nshell
247 58151244 : IF (PRESENT(nval)) nval = xtb_parameter%nval
248 58366394 : IF (PRESENT(lval)) lval = xtb_parameter%lval
249 58985794 : IF (PRESENT(occupation)) occupation = xtb_parameter%occupation
250 74758674 : IF (PRESENT(kpoly)) kpoly = xtb_parameter%kpoly
251 152026494 : IF (PRESENT(kappa)) kappa = xtb_parameter%kappa
252 58211964 : IF (PRESENT(wall)) wall(1:3, 1:3) = xtb_parameter%wall(1:3, 1:3)
253 63282054 : IF (PRESENT(hen)) hen = xtb_parameter%hen
254 58237324 : IF (PRESENT(zeta)) zeta = xtb_parameter%zeta
255 58151244 : IF (PRESENT(chmax)) chmax = xtb_parameter%chmax
256 58151244 : IF (PRESENT(xi)) xi = xtb_parameter%xi
257 58151244 : IF (PRESENT(kappa0)) kappa0 = xtb_parameter%kappa0
258 58151244 : IF (PRESENT(alpg)) alpg = xtb_parameter%alpg
259 58151244 : IF (PRESENT(en)) en = xtb_parameter%en
260 58151244 : IF (PRESENT(kqat2)) kqat2 = xtb_parameter%kqat2
261 58200964 : IF (PRESENT(kcn)) kcn = xtb_parameter%kcn
262 58200964 : IF (PRESENT(kq)) kq = xtb_parameter%kq
263 :
264 58151244 : END SUBROUTINE get_xtb_atom_param
265 :
266 : ! **************************************************************************************************
267 : !> \brief ...
268 : !> \param xtb_parameter ...
269 : !> \param aname ...
270 : !> \param typ ...
271 : !> \param defined ...
272 : !> \param z ...
273 : !> \param zeff ...
274 : !> \param natorb ...
275 : !> \param lmax ...
276 : !> \param nao ...
277 : !> \param lao ...
278 : !> \param rcut ...
279 : !> \param rcov ...
280 : !> \param kx ...
281 : !> \param eta ...
282 : !> \param xgamma ...
283 : !> \param alpha ...
284 : !> \param zneff ...
285 : !> \param nshell ...
286 : !> \param nval ...
287 : !> \param lval ...
288 : !> \param kpoly ...
289 : !> \param kappa ...
290 : !> \param wall ...
291 : !> \param hen ...
292 : !> \param zeta ...
293 : !> \param xi ...
294 : !> \param kappa0 ...
295 : !> \param alpg ...
296 : !> \param electronegativity ...
297 : !> \param occupation ...
298 : !> \param chmax ...
299 : !> \param en ...
300 : !> \param kqat2 ...
301 : !> \param kcn ...
302 : !> \param kq ...
303 : ! **************************************************************************************************
304 306 : SUBROUTINE set_xtb_atom_param(xtb_parameter, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, &
305 : rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, &
306 : wall, hen, zeta, xi, kappa0, alpg, electronegativity, occupation, chmax, &
307 : en, kqat2, kcn, kq)
308 :
309 : TYPE(xtb_atom_type), POINTER :: xtb_parameter
310 : CHARACTER(LEN=default_string_length), INTENT(IN), &
311 : OPTIONAL :: aname, typ
312 : LOGICAL, INTENT(IN), OPTIONAL :: defined
313 : INTEGER, INTENT(IN), OPTIONAL :: z
314 : REAL(KIND=dp), INTENT(IN), OPTIONAL :: zeff
315 : INTEGER, INTENT(IN), OPTIONAL :: natorb, lmax
316 : INTEGER, DIMENSION(25), INTENT(IN), OPTIONAL :: nao, lao
317 : REAL(KIND=dp), INTENT(IN), OPTIONAL :: rcut, rcov, kx, eta, xgamma, alpha, zneff
318 : INTEGER, INTENT(IN), OPTIONAL :: nshell
319 : INTEGER, DIMENSION(5), INTENT(IN), OPTIONAL :: nval, lval
320 : REAL(KIND=dp), DIMENSION(5), INTENT(IN), OPTIONAL :: kpoly, kappa
321 : REAL(KIND=dp), DIMENSION(3, 3), INTENT(IN), &
322 : OPTIONAL :: wall
323 : REAL(KIND=dp), DIMENSION(5), INTENT(IN), OPTIONAL :: hen, zeta
324 : REAL(KIND=dp), INTENT(IN), OPTIONAL :: xi, kappa0, alpg, electronegativity
325 : INTEGER, DIMENSION(5), INTENT(IN), OPTIONAL :: occupation
326 : REAL(KIND=dp), INTENT(IN), OPTIONAL :: chmax, en, kqat2
327 : REAL(KIND=dp), DIMENSION(5), INTENT(IN), OPTIONAL :: kcn, kq
328 :
329 306 : CPASSERT(ASSOCIATED(xtb_parameter))
330 :
331 306 : IF (PRESENT(aname)) xtb_parameter%aname = aname
332 306 : IF (PRESENT(typ)) xtb_parameter%typ = typ
333 306 : IF (PRESENT(defined)) xtb_parameter%defined = defined
334 306 : IF (PRESENT(z)) xtb_parameter%z = z
335 306 : IF (PRESENT(zeff)) xtb_parameter%zeff = zeff
336 306 : IF (PRESENT(natorb)) xtb_parameter%natorb = natorb
337 306 : IF (PRESENT(lmax)) xtb_parameter%lmax = lmax
338 306 : IF (PRESENT(nao)) xtb_parameter%nao = nao
339 306 : IF (PRESENT(lao)) xtb_parameter%lao = lao
340 : !
341 306 : IF (PRESENT(rcut)) xtb_parameter%rcut = rcut
342 306 : IF (PRESENT(rcov)) xtb_parameter%rcov = rcov
343 306 : IF (PRESENT(kx)) xtb_parameter%kx = kx
344 306 : IF (PRESENT(electronegativity)) xtb_parameter%electronegativity = electronegativity
345 306 : IF (PRESENT(eta)) xtb_parameter%eta = eta
346 306 : IF (PRESENT(xgamma)) xtb_parameter%xgamma = xgamma
347 306 : IF (PRESENT(alpha)) xtb_parameter%alpha = alpha
348 306 : IF (PRESENT(zneff)) xtb_parameter%zneff = zneff
349 306 : IF (PRESENT(nshell)) xtb_parameter%nshell = nshell
350 306 : IF (PRESENT(nval)) xtb_parameter%nval = nval
351 306 : IF (PRESENT(lval)) xtb_parameter%lval = lval
352 1836 : IF (PRESENT(occupation)) xtb_parameter%occupation = occupation
353 306 : IF (PRESENT(kpoly)) xtb_parameter%kpoly = kpoly
354 306 : IF (PRESENT(kappa)) xtb_parameter%kappa = kappa
355 306 : IF (PRESENT(wall)) xtb_parameter%wall(1:3, 1:3) = wall(1:3, 1:3)
356 306 : IF (PRESENT(hen)) xtb_parameter%hen = hen
357 306 : IF (PRESENT(zeta)) xtb_parameter%zeta = zeta
358 306 : IF (PRESENT(chmax)) xtb_parameter%chmax = chmax
359 : !
360 306 : IF (PRESENT(xi)) xtb_parameter%xi = xi
361 306 : IF (PRESENT(kappa0)) xtb_parameter%kappa0 = kappa0
362 306 : IF (PRESENT(alpg)) xtb_parameter%alpg = alpg
363 306 : IF (PRESENT(en)) xtb_parameter%en = en
364 306 : IF (PRESENT(kqat2)) xtb_parameter%kqat2 = kqat2
365 306 : IF (PRESENT(kcn)) xtb_parameter%kcn = kcn
366 306 : IF (PRESENT(kq)) xtb_parameter%kq = kq
367 :
368 306 : END SUBROUTINE set_xtb_atom_param
369 :
370 : ! **************************************************************************************************
371 : !> \brief ...
372 : !> \param xtb_parameter ...
373 : !> \param gfn_type ...
374 : !> \param subsys_section ...
375 : ! **************************************************************************************************
376 2256 : SUBROUTINE write_xtb_atom_param(xtb_parameter, gfn_type, subsys_section)
377 :
378 : TYPE(xtb_atom_type), POINTER :: xtb_parameter
379 : INTEGER, INTENT(IN) :: gfn_type
380 : TYPE(section_vals_type), POINTER :: subsys_section
381 :
382 : CHARACTER(LEN=default_string_length) :: aname, bb
383 : INTEGER :: i, io_unit, m, natorb, nshell
384 : INTEGER, DIMENSION(5) :: lval, nval, occupation
385 : LOGICAL :: defined, have_sp
386 : REAL(dp) :: zeff
387 : REAL(KIND=dp) :: alpha, en, eta, xgamma, zneff
388 : REAL(KIND=dp), DIMENSION(3, 3) :: wall
389 : REAL(KIND=dp), DIMENSION(5) :: hen, kappa, kpoly, zeta
390 : TYPE(cp_logger_type), POINTER :: logger
391 :
392 2256 : NULLIFY (logger)
393 2256 : logger => cp_get_default_logger()
394 2256 : IF (ASSOCIATED(xtb_parameter) .AND. &
395 : BTEST(cp_print_key_should_output(logger%iter_info, subsys_section, &
396 : "PRINT%KINDS/POTENTIAL"), cp_p_file)) THEN
397 :
398 : io_unit = cp_print_key_unit_nr(logger, subsys_section, "PRINT%KINDS", &
399 0 : extension=".Log")
400 :
401 0 : IF (io_unit > 0) THEN
402 0 : SELECT CASE (gfn_type)
403 : CASE (0)
404 0 : CPABORT("gfn_type = 0 missing code")
405 : CASE (1)
406 0 : CALL get_xtb_atom_param(xtb_parameter, aname=aname, defined=defined, zeff=zeff, natorb=natorb)
407 0 : CALL get_xtb_atom_param(xtb_parameter, nshell=nshell, lval=lval, nval=nval, occupation=occupation)
408 0 : CALL get_xtb_atom_param(xtb_parameter, kpoly=kpoly, kappa=kappa, hen=hen, zeta=zeta)
409 0 : CALL get_xtb_atom_param(xtb_parameter, electronegativity=en, xgamma=xgamma, eta=eta, alpha=alpha, zneff=zneff)
410 0 : wall = 0.0_dp
411 0 : CALL get_xtb_atom_param(xtb_parameter, wall=wall)
412 0 : have_sp = .FALSE.
413 0 : IF (SUM(ABS(wall)) /= 0.0_dp) have_sp = .TRUE.
414 :
415 0 : bb = " "
416 0 : WRITE (UNIT=io_unit, FMT="(/,A,T67,A14)") " xTB parameters: ", TRIM(aname)
417 0 : IF (defined) THEN
418 0 : m = 5 - nshell
419 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.2)") "Effective core charge:", zeff
420 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T71,I10)") "Number of orbitals:", natorb
421 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5(A4,I1,I2,A1))") "Basis set [nl]", bb(1:8*m), &
422 0 : (" [", nval(i), lval(i), "]", i=1, nshell)
423 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Slater Exponent", bb(1:8*m), (zeta(i), i=1, nshell)
424 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5I8)") "Ref. occupation", bb(1:8*m), (occupation(i), i=1, nshell)
425 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Energy levels [au]", bb(1:8*m), (hen(i), i=1, nshell)
426 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Kpoly", bb(1:8*m), (kpoly(i), i=1, nshell)
427 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.3)") "Electronegativity", en
428 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.3)") "Mataga-Nishimoto constant (eta)", eta
429 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Mataga-Nishimoto scaling kappa", bb(1:8*m), &
430 0 : (kappa(i), i=1, nshell)
431 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.3)") "3rd Order constant", xgamma
432 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T61,2F10.3)") "Repulsion potential [Z,alpha]", zneff, alpha
433 0 : IF (have_sp) THEN
434 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)
435 0 : WRITE (UNIT=io_unit, FMT="(T16,A,T51,3F10.4)") " Wsd pd dd", wall(1, 3), wall(2, 3), wall(3, 3)
436 : END IF
437 : ELSE
438 0 : WRITE (UNIT=io_unit, FMT="(T55,A)") "Parameters are not defined"
439 : END IF
440 : CASE (2)
441 0 : CPABORT("gfn_type = 2 not yet defined")
442 : END SELECT
443 : END IF
444 0 : CALL cp_print_key_finished_output(io_unit, logger, subsys_section, "PRINT%KINDS")
445 : END IF
446 :
447 2256 : END SUBROUTINE write_xtb_atom_param
448 :
449 0 : END MODULE xtb_types
450 :
|