31#include "./base/base_uses.f90"
39 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'xtb_types'
44 CHARACTER(LEN=default_string_length) :: typ =
""
45 CHARACTER(LEN=default_string_length) :: aname =
""
46 CHARACTER(LEN=2) :: symbol =
""
47 LOGICAL :: defined = .false.
49 REAL(kind=
dp) :: zeff = -1.0_dp
50 INTEGER :: natorb = -1
53 REAL(kind=
dp) :: rcut = -1.0_dp
54 REAL(kind=
dp) :: rcov = -1.0_dp
55 REAL(kind=
dp) :: electronegativity = -1.0_dp
57 REAL(kind=
dp) :: kx = -1.0_dp
59 REAL(kind=
dp) :: eta = -1.0_dp
60 REAL(kind=
dp) :: xgamma = -1.0_dp
61 REAL(kind=
dp) :: alpha = -1.0_dp
62 REAL(kind=
dp) :: zneff = -1.0_dp
64 INTEGER :: nshell = -1
65 INTEGER,
DIMENSION(5) :: nval = -1
66 INTEGER,
DIMENSION(5) :: lval = -1
67 INTEGER,
DIMENSION(5) :: occupation = -1
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
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
79 REAL(kind=
dp) :: xi = -1.0_dp
80 REAL(kind=
dp) :: kappa0 = -1.0_dp
81 REAL(kind=
dp) :: alpg = -1.0_dp
83 INTEGER,
DIMENSION(25) :: nao = -1, lao = -1
85 REAL(kind=
dp) :: chmax = -1.0_dp
103 IF (
ASSOCIATED(xtb_parameter))
THEN
107 ALLOCATE (xtb_parameter)
109 xtb_parameter%defined = .false.
110 xtb_parameter%aname =
""
111 xtb_parameter%symbol =
""
112 xtb_parameter%typ =
"NONE"
114 xtb_parameter%zeff = -1.0_dp
115 xtb_parameter%natorb = 0
116 xtb_parameter%lmax = -1
117 xtb_parameter%rcut = 0.0_dp
118 xtb_parameter%rcov = 0.0_dp
119 xtb_parameter%electronegativity = 0.0_dp
120 xtb_parameter%kx = -100.0_dp
121 xtb_parameter%eta = 0.0_dp
122 xtb_parameter%xgamma = 0.0_dp
123 xtb_parameter%alpha = 0.0_dp
124 xtb_parameter%zneff = 0.0_dp
125 xtb_parameter%nshell = 0
126 xtb_parameter%nval = 0
127 xtb_parameter%lval = 0
128 xtb_parameter%occupation = 0
129 xtb_parameter%kpoly = 0.0_dp
130 xtb_parameter%kappa = 0.0_dp
131 xtb_parameter%wall = 0.0_dp
132 xtb_parameter%hen = 0.0_dp
133 xtb_parameter%zeta = 0.0_dp
134 xtb_parameter%en = 0.0_dp
135 xtb_parameter%kqat2 = 0.0_dp
136 xtb_parameter%kq = 0.0_dp
137 xtb_parameter%kcn = 0.0_dp
138 xtb_parameter%xi = 0.0_dp
139 xtb_parameter%kappa0 = 0.0_dp
140 xtb_parameter%alpg = 0.0_dp
141 xtb_parameter%nao = 0
142 xtb_parameter%lao = 0
143 xtb_parameter%chmax = 0.0_dp
155 cpassert(
ASSOCIATED(xtb_parameter))
156 DEALLOCATE (xtb_parameter)
199 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, &
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), &
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
225 cpassert(
ASSOCIATED(xtb_parameter))
227 IF (
PRESENT(symbol)) symbol = xtb_parameter%symbol
228 IF (
PRESENT(aname)) aname = xtb_parameter%aname
229 IF (
PRESENT(typ)) typ = xtb_parameter%typ
230 IF (
PRESENT(defined)) defined = xtb_parameter%defined
231 IF (
PRESENT(z)) z = xtb_parameter%z
232 IF (
PRESENT(zeff)) zeff = xtb_parameter%zeff
233 IF (
PRESENT(natorb)) natorb = xtb_parameter%natorb
234 IF (
PRESENT(lmax)) lmax = xtb_parameter%lmax
235 IF (
PRESENT(nao)) nao = xtb_parameter%nao
236 IF (
PRESENT(lao)) lao = xtb_parameter%lao
238 IF (
PRESENT(rcut)) rcut = xtb_parameter%rcut
239 IF (
PRESENT(rcov)) rcov = xtb_parameter%rcov
240 IF (
PRESENT(kx)) kx = xtb_parameter%kx
241 IF (
PRESENT(electronegativity)) electronegativity = xtb_parameter%electronegativity
242 IF (
PRESENT(eta)) eta = xtb_parameter%eta
243 IF (
PRESENT(xgamma)) xgamma = xtb_parameter%xgamma
244 IF (
PRESENT(alpha)) alpha = xtb_parameter%alpha
245 IF (
PRESENT(zneff)) zneff = xtb_parameter%zneff
246 IF (
PRESENT(nshell)) nshell = xtb_parameter%nshell
247 IF (
PRESENT(nval)) nval = xtb_parameter%nval
248 IF (
PRESENT(lval)) lval = xtb_parameter%lval
249 IF (
PRESENT(occupation)) occupation = xtb_parameter%occupation
250 IF (
PRESENT(kpoly)) kpoly = xtb_parameter%kpoly
251 IF (
PRESENT(kappa)) kappa = xtb_parameter%kappa
252 IF (
PRESENT(wall)) wall(1:3, 1:3) = xtb_parameter%wall(1:3, 1:3)
253 IF (
PRESENT(hen)) hen = xtb_parameter%hen
254 IF (
PRESENT(zeta)) zeta = xtb_parameter%zeta
255 IF (
PRESENT(chmax)) chmax = xtb_parameter%chmax
256 IF (
PRESENT(xi)) xi = xtb_parameter%xi
257 IF (
PRESENT(kappa0)) kappa0 = xtb_parameter%kappa0
258 IF (
PRESENT(alpg)) alpg = xtb_parameter%alpg
259 IF (
PRESENT(en)) en = xtb_parameter%en
260 IF (
PRESENT(kqat2)) kqat2 = xtb_parameter%kqat2
261 IF (
PRESENT(kcn)) kcn = xtb_parameter%kcn
262 IF (
PRESENT(kq)) kq = xtb_parameter%kq
304 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, &
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), &
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
329 cpassert(
ASSOCIATED(xtb_parameter))
331 IF (
PRESENT(aname)) xtb_parameter%aname = aname
332 IF (
PRESENT(typ)) xtb_parameter%typ = typ
333 IF (
PRESENT(defined)) xtb_parameter%defined = defined
334 IF (
PRESENT(z)) xtb_parameter%z = z
335 IF (
PRESENT(zeff)) xtb_parameter%zeff = zeff
336 IF (
PRESENT(natorb)) xtb_parameter%natorb = natorb
337 IF (
PRESENT(lmax)) xtb_parameter%lmax = lmax
338 IF (
PRESENT(nao)) xtb_parameter%nao = nao
339 IF (
PRESENT(lao)) xtb_parameter%lao = lao
341 IF (
PRESENT(rcut)) xtb_parameter%rcut = rcut
342 IF (
PRESENT(rcov)) xtb_parameter%rcov = rcov
343 IF (
PRESENT(kx)) xtb_parameter%kx = kx
344 IF (
PRESENT(electronegativity)) xtb_parameter%electronegativity = electronegativity
345 IF (
PRESENT(eta)) xtb_parameter%eta = eta
346 IF (
PRESENT(xgamma)) xtb_parameter%xgamma = xgamma
347 IF (
PRESENT(alpha)) xtb_parameter%alpha = alpha
348 IF (
PRESENT(zneff)) xtb_parameter%zneff = zneff
349 IF (
PRESENT(nshell)) xtb_parameter%nshell = nshell
350 IF (
PRESENT(nval)) xtb_parameter%nval = nval
351 IF (
PRESENT(lval)) xtb_parameter%lval = lval
352 IF (
PRESENT(occupation)) xtb_parameter%occupation = occupation
353 IF (
PRESENT(kpoly)) xtb_parameter%kpoly = kpoly
354 IF (
PRESENT(kappa)) xtb_parameter%kappa = kappa
355 IF (
PRESENT(wall)) xtb_parameter%wall(1:3, 1:3) = wall(1:3, 1:3)
356 IF (
PRESENT(hen)) xtb_parameter%hen = hen
357 IF (
PRESENT(zeta)) xtb_parameter%zeta = zeta
358 IF (
PRESENT(chmax)) xtb_parameter%chmax = chmax
360 IF (
PRESENT(xi)) xtb_parameter%xi = xi
361 IF (
PRESENT(kappa0)) xtb_parameter%kappa0 = kappa0
362 IF (
PRESENT(alpg)) xtb_parameter%alpg = alpg
363 IF (
PRESENT(en)) xtb_parameter%en = en
364 IF (
PRESENT(kqat2)) xtb_parameter%kqat2 = kqat2
365 IF (
PRESENT(kcn)) xtb_parameter%kcn = kcn
366 IF (
PRESENT(kq)) xtb_parameter%kq = kq
379 INTEGER,
INTENT(IN) :: gfn_type
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
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
394 IF (
ASSOCIATED(xtb_parameter) .AND. &
396 "PRINT%KINDS/POTENTIAL"),
cp_p_file))
THEN
401 IF (io_unit > 0)
THEN
402 SELECT CASE (gfn_type)
404 cpabort(
"gfn_type = 0 missing code")
406 CALL get_xtb_atom_param(xtb_parameter, aname=aname, defined=defined, zeff=zeff, natorb=natorb)
407 CALL get_xtb_atom_param(xtb_parameter, nshell=nshell, lval=lval, nval=nval, occupation=occupation)
409 CALL get_xtb_atom_param(xtb_parameter, electronegativity=en, xgamma=xgamma, eta=eta, alpha=alpha, zneff=zneff)
413 IF (sum(abs(wall)) /= 0.0_dp) have_sp = .true.
416 WRITE (unit=io_unit, fmt=
"(/,A,T67,A14)")
" xTB parameters: ", trim(aname)
419 WRITE (unit=io_unit, fmt=
"(T16,A,T71,F10.2)")
"Effective core charge:", zeff
420 WRITE (unit=io_unit, fmt=
"(T16,A,T71,I10)")
"Number of orbitals:", natorb
421 WRITE (unit=io_unit, fmt=
"(T16,A,T41,A,5(A4,I1,I2,A1))")
"Basis set [nl]", bb(1:8*m), &
422 (
" [", nval(i), lval(i),
"]", i=1, nshell)
423 WRITE (unit=io_unit, fmt=
"(T16,A,T41,A,5F8.3)")
"Slater Exponent", bb(1:8*m), (zeta(i), i=1, nshell)
424 WRITE (unit=io_unit, fmt=
"(T16,A,T41,A,5I8)")
"Ref. occupation", bb(1:8*m), (occupation(i), i=1, nshell)
425 WRITE (unit=io_unit, fmt=
"(T16,A,T41,A,5F8.3)")
"Energy levels [au]", bb(1:8*m), (hen(i), i=1, nshell)
426 WRITE (unit=io_unit, fmt=
"(T16,A,T41,A,5F8.3)")
"Kpoly", bb(1:8*m), (kpoly(i), i=1, nshell)
427 WRITE (unit=io_unit, fmt=
"(T16,A,T71,F10.3)")
"Electronegativity", en
428 WRITE (unit=io_unit, fmt=
"(T16,A,T71,F10.3)")
"Mataga-Nishimoto constant (eta)", eta
429 WRITE (unit=io_unit, fmt=
"(T16,A,T41,A,5F8.3)")
"Mataga-Nishimoto scaling kappa", bb(1:8*m), &
430 (kappa(i), i=1, nshell)
431 WRITE (unit=io_unit, fmt=
"(T16,A,T71,F10.3)")
"3rd Order constant", xgamma
432 WRITE (unit=io_unit, fmt=
"(T16,A,T61,2F10.3)")
"Repulsion potential [Z,alpha]", zneff, alpha
434 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 WRITE (unit=io_unit, fmt=
"(T16,A,T51,3F10.4)")
" Wsd pd dd", wall(1, 3), wall(2, 3), wall(3, 3)
438 WRITE (unit=io_unit, fmt=
"(T55,A)")
"Parameters are not defined"
441 cpabort(
"gfn_type = 2 not yet defined")
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
integer, parameter, public cp_p_file
integer function, public cp_print_key_should_output(iteration_info, basis_section, print_key_path, used_print_key, first_time)
returns what should be done with the given property if btest(res,cp_p_store) then the property should...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Definition of the xTB parameter types.
subroutine, public allocate_xtb_atom_param(xtb_parameter)
...
subroutine, public deallocate_xtb_atom_param(xtb_parameter)
...
subroutine, public write_xtb_atom_param(xtb_parameter, gfn_type, subsys_section)
...
subroutine, public set_xtb_atom_param(xtb_parameter, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, wall, hen, zeta, xi, kappa0, alpg, electronegativity, occupation, chmax, en, kqat2, kcn, kq)
...
subroutine, public get_xtb_atom_param(xtb_parameter, symbol, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, wall, hen, zeta, xi, kappa0, alpg, occupation, electronegativity, chmax, en, kqat2, kcn, kq)
...
type of a logger, at the moment it contains just a print level starting at which level it should be l...