(git:d18deda)
Loading...
Searching...
No Matches
qs_kind_types.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2025 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief Define the quickstep kind type and their sub types
10!> \author Ole Schuett
11!>
12!> <b>Modification history:</b>
13!> - 01.2002 creation [MK]
14!> - 04.2002 added pao [fawzi]
15!> - 09.2002 adapted for POL/KG use [GT]
16!> - 02.2004 flexible normalization of basis sets [jgh]
17!> - 03.2004 attach/detach routines [jgh]
18!> - 10.2004 removed pao [fawzi]
19!> - 08.2014 separated qs-related stuff from atomic_kind_types.F [Ole Schuett]
20!> - 07.2015 new container for basis sets [jgh]
21!> - 04.2021 init dft_plus_u_type [MK]
22! **************************************************************************************************
27 USE atom_types, ONLY: atom_ecppot_type,&
28 lmat,&
30 USE atom_upf, ONLY: atom_read_upf,&
40 USE basis_set_types, ONLY: &
51 USE cp_output_handling, ONLY: cp_p_file,&
55 USE external_potential_types, ONLY: &
60 USE input_constants, ONLY: &
69 USE kinds, ONLY: default_path_length,&
71 dp
72 USE mathconstants, ONLY: pi
75 nco,&
76 ncoset
83 ptable
84 USE physcon, ONLY: angstrom,&
85 bohr,&
86 evolt
106 USE string_utilities, ONLY: uppercase
107 USE xtb_parameters, ONLY: xtb_set_kab
112#include "./base/base_uses.f90"
113
114 IMPLICIT NONE
115
116 PRIVATE
117
118 ! Global parameters (only in this module)
119
120 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_kind_types'
121
122! **************************************************************************************************
123!> \brief Input parameters for the DFT+U method
124! **************************************************************************************************
125 TYPE dft_plus_u_type
126 INTEGER :: l = -1
127 INTEGER :: n = -1
128 INTEGER :: max_scf = -1
129 REAL(KIND=dp) :: eps_u_ramping = 0.0_dp
130 REAL(KIND=dp) :: eps_scf = huge(0.0_dp)
131 REAL(KIND=dp) :: u_minus_j_target = 0.0_dp
132 REAL(KIND=dp) :: u_minus_j = 0.0_dp
133 REAL(KIND=dp) :: u_ramping = 0.0_dp
134 REAL(KIND=dp) :: u = 0.0_dp
135 REAL(KIND=dp) :: j = 0.0_dp
136 REAL(KIND=dp) :: alpha = 0.0_dp
137 REAL(KIND=dp) :: beta = 0.0_dp
138 REAL(KIND=dp) :: j0 = 0.0_dp
139 REAL(KIND=dp) :: occupation = -1.0_dp
140 INTEGER, DIMENSION(:), POINTER :: orbitals => null()
141 LOGICAL :: init_u_ramping_each_scf = .false.
142 LOGICAL :: smear = .false.
143 REAL(KIND=dp), DIMENSION(:), POINTER :: nelec => null()
144 END TYPE dft_plus_u_type
145
146! **************************************************************************************************
147!> \brief Holds information about a PAO potential
148! **************************************************************************************************
150 INTEGER :: maxl = -1
151 REAL(kind=dp) :: beta = 0.0_dp
152 REAL(kind=dp) :: weight = 0.0_dp
153 INTEGER :: max_projector = -1
154 REAL(kind=dp) :: beta_radius = huge(dp)
155 END TYPE pao_potential_type
156
157! **************************************************************************************************
158!> \brief Holds information about a PAO descriptor
159! **************************************************************************************************
161 REAL(kind=dp) :: beta = 0.0_dp
162 REAL(kind=dp) :: beta_radius = huge(dp)
163 REAL(kind=dp) :: weight = 0.0_dp
164 REAL(kind=dp) :: screening = 0.0_dp
165 REAL(kind=dp) :: screening_radius = huge(dp)
166 END TYPE pao_descriptor_type
167
168! **************************************************************************************************
169!> \brief Provides all information about a quickstep kind
170! **************************************************************************************************
172 CHARACTER(LEN=default_string_length) :: name = ""
173 CHARACTER(LEN=2) :: element_symbol = ""
174 INTEGER :: natom = -1
175 TYPE(all_potential_type), POINTER :: all_potential => null()
176 TYPE(local_potential_type), POINTER :: tnadd_potential => null()
177 TYPE(gth_potential_type), POINTER :: gth_potential => null()
178 TYPE(sgp_potential_type), POINTER :: sgp_potential => null()
179 TYPE(semi_empirical_type), POINTER :: se_parameter => null()
180 TYPE(qs_dftb_atom_type), POINTER :: dftb_parameter => null()
181 TYPE(xtb_atom_type), POINTER :: xtb_parameter => null()
182 !
183 TYPE(atom_upfpot_type), POINTER :: upf_potential => null()
184 !
186 DIMENSION(20) :: basis_sets = basis_set_container_type()
187 ! Atomic radii
188 REAL(kind=dp) :: covalent_radius = 0.0_dp
189 REAL(kind=dp) :: vdw_radius = 0.0_dp
190 ! GAPW specific data
191 TYPE(paw_proj_set_type), POINTER :: paw_proj_set => null()
192 REAL(kind=dp) :: hard_radius = 0.8_dp*bohr ! for hard and soft exp
193 REAL(kind=dp) :: hard0_radius = 0.8_dp*bohr ! for hard exp of rho0
194 REAL(kind=dp) :: max_rad_local = 13.2_dp*bohr ! max GTO radius used in GAPW
195 LOGICAL :: paw_atom = .false. ! needs atomic rho1
196 LOGICAL :: gpw_type_forced = .false. ! gpw atom even if with hard exponents
197 !
198 LOGICAL :: ghost = .false.
199 LOGICAL :: floating = .false.
200 INTEGER :: lmax_dftb = -1
201 REAL(kind=dp) :: dudq_dftb3 = 0.0_dp
202 REAL(kind=dp) :: magnetization = 0.0_dp
203 INTEGER, DIMENSION(:, :), POINTER :: addel => null()
204 INTEGER, DIMENSION(:, :), POINTER :: laddel => null()
205 INTEGER, DIMENSION(:, :), POINTER :: naddel => null()
206 TYPE(harmonics_atom_type), POINTER :: harmonics => null()
207 TYPE(grid_atom_type), POINTER :: grid_atom => null()
208 INTEGER :: ngrid_rad = 50
209 INTEGER :: ngrid_ang = 50
210 INTEGER :: lmax_rho0 = 0
211 INTEGER :: mao = -1
212 INTEGER, DIMENSION(:), POINTER :: elec_conf => null() ! used to set up the initial atomic guess
213 LOGICAL :: bs_occupation = .false.
214 TYPE(dft_plus_u_type), POINTER :: dft_plus_u => null()
215 LOGICAL :: no_optimize = .true.
216 !
217 REAL(kind=dp), DIMENSION(:, :), POINTER :: nlcc_pot => null()
218 !
219 TYPE(qs_atom_dispersion_type), POINTER :: dispersion => null()
220 REAL(kind=dp), DIMENSION(:, :), POINTER :: reltmat => null()
221 INTEGER :: pao_basis_size = -1
222 CHARACTER(LEN=default_path_length) :: pao_model_file = ""
223 TYPE(pao_potential_type), DIMENSION(:), POINTER :: pao_potentials => null()
224 TYPE(pao_descriptor_type), DIMENSION(:), POINTER :: pao_descriptors => null()
225 END TYPE qs_kind_type
226
227! **************************************************************************************************
228!> \brief Provides a vector of pointers of type qs_kind_type
229! **************************************************************************************************
230 TYPE qs_kind_p_type
231 TYPE(qs_kind_type), DIMENSION(:), &
232 POINTER :: qs_kind_set => null()
233 END TYPE qs_kind_p_type
234
235 ! Public subroutines
236
237 PUBLIC :: check_qs_kind_set, &
239 get_qs_kind, &
241 has_nlcc, &
246 set_qs_kind, &
250
251 ! Public data types
253
254CONTAINS
255
256! **************************************************************************************************
257!> \brief Destructor routine for a set of qs kinds
258!> \param qs_kind_set ...
259!> \date 02.01.2002
260!> \author Matthias Krack (MK)
261!> \version 2.0
262! **************************************************************************************************
263 SUBROUTINE deallocate_qs_kind_set(qs_kind_set)
264
265 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
266
267 INTEGER :: ikind, nkind
268
269 IF (ASSOCIATED(qs_kind_set)) THEN
270
271 nkind = SIZE(qs_kind_set)
272
273 DO ikind = 1, nkind
274 IF (ASSOCIATED(qs_kind_set(ikind)%all_potential)) THEN
275 CALL deallocate_potential(qs_kind_set(ikind)%all_potential)
276 END IF
277 IF (ASSOCIATED(qs_kind_set(ikind)%tnadd_potential)) THEN
278 CALL deallocate_potential(qs_kind_set(ikind)%tnadd_potential)
279 END IF
280 IF (ASSOCIATED(qs_kind_set(ikind)%gth_potential)) THEN
281 CALL deallocate_potential(qs_kind_set(ikind)%gth_potential)
282 END IF
283 IF (ASSOCIATED(qs_kind_set(ikind)%sgp_potential)) THEN
284 CALL deallocate_potential(qs_kind_set(ikind)%sgp_potential)
285 END IF
286 IF (ASSOCIATED(qs_kind_set(ikind)%upf_potential)) THEN
287 CALL atom_release_upf(qs_kind_set(ikind)%upf_potential)
288 DEALLOCATE (qs_kind_set(ikind)%upf_potential)
289 END IF
290 IF (ASSOCIATED(qs_kind_set(ikind)%se_parameter)) THEN
291 CALL semi_empirical_release(qs_kind_set(ikind)%se_parameter)
292 END IF
293 IF (ASSOCIATED(qs_kind_set(ikind)%dftb_parameter)) THEN
294 CALL deallocate_dftb_atom_param(qs_kind_set(ikind)%dftb_parameter)
295 END IF
296 IF (ASSOCIATED(qs_kind_set(ikind)%xtb_parameter)) THEN
297 CALL deallocate_xtb_atom_param(qs_kind_set(ikind)%xtb_parameter)
298 END IF
299 IF (ASSOCIATED(qs_kind_set(ikind)%paw_proj_set)) THEN
300 CALL deallocate_paw_proj_set(qs_kind_set(ikind)%paw_proj_set)
301 END IF
302 IF (ASSOCIATED(qs_kind_set(ikind)%harmonics)) THEN
303 CALL deallocate_harmonics_atom(qs_kind_set(ikind)%harmonics)
304 END IF
305 IF (ASSOCIATED(qs_kind_set(ikind)%grid_atom)) THEN
306 CALL deallocate_grid_atom(qs_kind_set(ikind)%grid_atom)
307 END IF
308 IF (ASSOCIATED(qs_kind_set(ikind)%elec_conf)) THEN
309 DEALLOCATE (qs_kind_set(ikind)%elec_conf)
310 END IF
311
312 IF (ASSOCIATED(qs_kind_set(ikind)%dft_plus_u)) THEN
313 IF (ASSOCIATED(qs_kind_set(ikind)%dft_plus_u%orbitals)) THEN
314 DEALLOCATE (qs_kind_set(ikind)%dft_plus_u%orbitals)
315 END IF
316 IF (ASSOCIATED(qs_kind_set(ikind)%dft_plus_u%nelec)) THEN
317 DEALLOCATE (qs_kind_set(ikind)%dft_plus_u%nelec)
318 END IF
319 DEALLOCATE (qs_kind_set(ikind)%dft_plus_u)
320 END IF
321
322 IF (ASSOCIATED(qs_kind_set(ikind)%nlcc_pot)) THEN
323 DEALLOCATE (qs_kind_set(ikind)%nlcc_pot)
324 END IF
325
326 IF (ASSOCIATED(qs_kind_set(ikind)%dispersion)) THEN
327 DEALLOCATE (qs_kind_set(ikind)%dispersion)
328 END IF
329 IF (ASSOCIATED(qs_kind_set(ikind)%addel)) THEN
330 DEALLOCATE (qs_kind_set(ikind)%addel)
331 END IF
332 IF (ASSOCIATED(qs_kind_set(ikind)%naddel)) THEN
333 DEALLOCATE (qs_kind_set(ikind)%naddel)
334 END IF
335 IF (ASSOCIATED(qs_kind_set(ikind)%laddel)) THEN
336 DEALLOCATE (qs_kind_set(ikind)%laddel)
337 END IF
338 IF (ASSOCIATED(qs_kind_set(ikind)%reltmat)) THEN
339 DEALLOCATE (qs_kind_set(ikind)%reltmat)
340 END IF
341
342 IF (ASSOCIATED(qs_kind_set(ikind)%pao_potentials)) THEN
343 DEALLOCATE (qs_kind_set(ikind)%pao_potentials)
344 END IF
345 IF (ASSOCIATED(qs_kind_set(ikind)%pao_descriptors)) THEN
346 DEALLOCATE (qs_kind_set(ikind)%pao_descriptors)
347 END IF
348
349 CALL remove_basis_set_container(qs_kind_set(ikind)%basis_sets)
350
351 END DO
352 DEALLOCATE (qs_kind_set)
353 ELSE
354 CALL cp_abort(__location__, &
355 "The pointer qs_kind_set is not associated and "// &
356 "cannot be deallocated")
357 END IF
358
359 END SUBROUTINE deallocate_qs_kind_set
360
361! **************************************************************************************************
362!> \brief Get attributes of an atomic kind.
363!> \param qs_kind ...
364!> \param basis_set ...
365!> \param basis_type ...
366!> \param ncgf ...
367!> \param nsgf ...
368!> \param all_potential ...
369!> \param tnadd_potential ...
370!> \param gth_potential ...
371!> \param sgp_potential ...
372!> \param upf_potential ...
373!> \param se_parameter ...
374!> \param dftb_parameter ...
375!> \param xtb_parameter ...
376!> \param dftb3_param ...
377!> \param zatom ...
378!> \param zeff ...
379!> \param elec_conf ...
380!> \param mao ...
381!> \param lmax_dftb ...
382!> \param alpha_core_charge ...
383!> \param ccore_charge ...
384!> \param core_charge ...
385!> \param core_charge_radius ...
386!> \param paw_proj_set ...
387!> \param paw_atom ...
388!> \param hard_radius ...
389!> \param hard0_radius ...
390!> \param max_rad_local ...
391!> \param covalent_radius ...
392!> \param vdw_radius ...
393!> \param gpw_type_forced ...
394!> \param harmonics ...
395!> \param max_iso_not0 ...
396!> \param max_s_harm ...
397!> \param grid_atom ...
398!> \param ngrid_ang ...
399!> \param ngrid_rad ...
400!> \param lmax_rho0 ...
401!> \param dft_plus_u_atom ...
402!> \param l_of_dft_plus_u ...
403!> \param n_of_dft_plus_u ...
404!> \param u_minus_j ...
405!> \param U_of_dft_plus_u ...
406!> \param J_of_dft_plus_u ...
407!> \param alpha_of_dft_plus_u ...
408!> \param beta_of_dft_plus_u ...
409!> \param J0_of_dft_plus_u ...
410!> \param occupation_of_dft_plus_u ...
411!> \param dispersion ...
412!> \param bs_occupation ...
413!> \param magnetization ...
414!> \param no_optimize ...
415!> \param addel ...
416!> \param laddel ...
417!> \param naddel ...
418!> \param orbitals ...
419!> \param max_scf ...
420!> \param eps_scf ...
421!> \param smear ...
422!> \param u_ramping ...
423!> \param u_minus_j_target ...
424!> \param eps_u_ramping ...
425!> \param init_u_ramping_each_scf ...
426!> \param reltmat ...
427!> \param ghost ...
428!> \param floating ...
429!> \param name ...
430!> \param element_symbol ...
431!> \param pao_basis_size ...
432!> \param pao_model_file ...
433!> \param pao_potentials ...
434!> \param pao_descriptors ...
435!> \param nelec ...
436! **************************************************************************************************
437 SUBROUTINE get_qs_kind(qs_kind, &
438 basis_set, basis_type, ncgf, nsgf, &
439 all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, &
440 se_parameter, dftb_parameter, xtb_parameter, &
441 dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, &
442 alpha_core_charge, ccore_charge, core_charge, core_charge_radius, &
443 paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, &
444 covalent_radius, vdw_radius, &
445 gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, &
446 ngrid_ang, ngrid_rad, lmax_rho0, &
447 dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, &
448 u_minus_j, U_of_dft_plus_u, J_of_dft_plus_u, &
449 alpha_of_dft_plus_u, beta_of_dft_plus_u, J0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, &
450 bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, &
451 max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, &
452 init_u_ramping_each_scf, reltmat, ghost, floating, name, element_symbol, &
453 pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
454
455 TYPE(qs_kind_type) :: qs_kind
456 TYPE(gto_basis_set_type), OPTIONAL, POINTER :: basis_set
457 CHARACTER(len=*), OPTIONAL :: basis_type
458 INTEGER, INTENT(OUT), OPTIONAL :: ncgf, nsgf
459 TYPE(all_potential_type), OPTIONAL, POINTER :: all_potential
460 TYPE(local_potential_type), OPTIONAL, POINTER :: tnadd_potential
461 TYPE(gth_potential_type), OPTIONAL, POINTER :: gth_potential
462 TYPE(sgp_potential_type), OPTIONAL, POINTER :: sgp_potential
463 TYPE(atom_upfpot_type), OPTIONAL, POINTER :: upf_potential
464 TYPE(semi_empirical_type), OPTIONAL, POINTER :: se_parameter
465 TYPE(qs_dftb_atom_type), OPTIONAL, POINTER :: dftb_parameter
466 TYPE(xtb_atom_type), OPTIONAL, POINTER :: xtb_parameter
467 REAL(kind=dp), INTENT(OUT), OPTIONAL :: dftb3_param
468 INTEGER, INTENT(OUT), OPTIONAL :: zatom
469 REAL(kind=dp), INTENT(OUT), OPTIONAL :: zeff
470 INTEGER, DIMENSION(:), OPTIONAL, POINTER :: elec_conf
471 INTEGER, INTENT(OUT), OPTIONAL :: mao, lmax_dftb
472 REAL(kind=dp), INTENT(OUT), OPTIONAL :: alpha_core_charge, ccore_charge, &
473 core_charge, core_charge_radius
474 TYPE(paw_proj_set_type), OPTIONAL, POINTER :: paw_proj_set
475 LOGICAL, INTENT(OUT), OPTIONAL :: paw_atom
476 REAL(kind=dp), INTENT(OUT), OPTIONAL :: hard_radius, hard0_radius, &
477 max_rad_local, covalent_radius, &
478 vdw_radius
479 LOGICAL, INTENT(OUT), OPTIONAL :: gpw_type_forced
480 TYPE(harmonics_atom_type), OPTIONAL, POINTER :: harmonics
481 INTEGER, INTENT(OUT), OPTIONAL :: max_iso_not0, max_s_harm
482 TYPE(grid_atom_type), OPTIONAL, POINTER :: grid_atom
483 INTEGER, INTENT(OUT), OPTIONAL :: ngrid_ang, ngrid_rad, lmax_rho0
484 LOGICAL, INTENT(OUT), OPTIONAL :: dft_plus_u_atom
485 INTEGER, INTENT(OUT), OPTIONAL :: l_of_dft_plus_u, n_of_dft_plus_u
486 REAL(kind=dp), INTENT(OUT), OPTIONAL :: u_minus_j, u_of_dft_plus_u, j_of_dft_plus_u, &
487 alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u
488 TYPE(qs_atom_dispersion_type), OPTIONAL, POINTER :: dispersion
489 LOGICAL, INTENT(OUT), OPTIONAL :: bs_occupation
490 REAL(kind=dp), INTENT(OUT), OPTIONAL :: magnetization
491 LOGICAL, INTENT(OUT), OPTIONAL :: no_optimize
492 INTEGER, DIMENSION(:, :), OPTIONAL, POINTER :: addel, laddel, naddel
493 INTEGER, DIMENSION(:), OPTIONAL, POINTER :: orbitals
494 INTEGER, OPTIONAL :: max_scf
495 REAL(kind=dp), OPTIONAL :: eps_scf
496 LOGICAL, OPTIONAL :: smear
497 REAL(kind=dp), INTENT(OUT), OPTIONAL :: u_ramping, u_minus_j_target, &
498 eps_u_ramping
499 LOGICAL, OPTIONAL :: init_u_ramping_each_scf
500 REAL(kind=dp), DIMENSION(:, :), OPTIONAL, POINTER :: reltmat
501 LOGICAL, OPTIONAL :: ghost, floating
502 CHARACTER(LEN=default_string_length), &
503 INTENT(OUT), OPTIONAL :: name
504 CHARACTER(LEN=2), INTENT(OUT), OPTIONAL :: element_symbol
505 INTEGER, INTENT(OUT), OPTIONAL :: pao_basis_size
506 CHARACTER(LEN=default_path_length), INTENT(OUT), &
507 OPTIONAL :: pao_model_file
508 TYPE(pao_potential_type), DIMENSION(:), OPTIONAL, &
509 POINTER :: pao_potentials
510 TYPE(pao_descriptor_type), DIMENSION(:), &
511 OPTIONAL, POINTER :: pao_descriptors
512 REAL(kind=dp), DIMENSION(:), OPTIONAL, POINTER :: nelec
513
514 CHARACTER(LEN=default_string_length) :: my_basis_type
515 INTEGER :: l
516 LOGICAL :: found
517 TYPE(gto_basis_set_type), POINTER :: tmp_basis_set
518
519 ! Retrieve basis set from the kind container
520 IF (PRESENT(basis_type)) THEN
521 my_basis_type = basis_type
522 ELSE
523 my_basis_type = "ORB"
524 END IF
525
526 IF (PRESENT(basis_set)) THEN
527 CALL get_basis_from_container(qs_kind%basis_sets, basis_set=basis_set, &
528 basis_type=my_basis_type)
529 END IF
530
531 IF (PRESENT(ncgf)) THEN
532 CALL get_basis_from_container(qs_kind%basis_sets, basis_set=tmp_basis_set, &
533 basis_type=my_basis_type)
534 IF (ASSOCIATED(tmp_basis_set)) THEN
535 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, ncgf=ncgf)
536 ELSE IF (ASSOCIATED(qs_kind%dftb_parameter)) THEN
537 l = qs_kind%dftb_parameter%lmax
538 ncgf = ((l + 1)*(l + 2)*(l + 3))/6
539 ELSE
540 ncgf = 0
541 END IF
542 END IF
543
544 IF (PRESENT(nsgf)) THEN
545 CALL get_basis_from_container(qs_kind%basis_sets, basis_set=tmp_basis_set, &
546 basis_type=my_basis_type)
547 IF (ASSOCIATED(tmp_basis_set)) THEN
548 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, nsgf=nsgf)
549 ELSE IF (ASSOCIATED(qs_kind%dftb_parameter)) THEN
550 nsgf = qs_kind%dftb_parameter%natorb
551 ELSE
552 nsgf = 0
553 END IF
554 END IF
555
556 IF (PRESENT(all_potential)) all_potential => qs_kind%all_potential
557 IF (PRESENT(tnadd_potential)) tnadd_potential => qs_kind%tnadd_potential
558 IF (PRESENT(gth_potential)) gth_potential => qs_kind%gth_potential
559 IF (PRESENT(sgp_potential)) sgp_potential => qs_kind%sgp_potential
560 IF (PRESENT(upf_potential)) upf_potential => qs_kind%upf_potential
561 IF (PRESENT(se_parameter)) se_parameter => qs_kind%se_parameter
562 IF (PRESENT(dftb_parameter)) dftb_parameter => qs_kind%dftb_parameter
563 IF (PRESENT(xtb_parameter)) xtb_parameter => qs_kind%xtb_parameter
564
565 IF (PRESENT(element_symbol)) element_symbol = qs_kind%element_symbol
566 IF (PRESENT(name)) name = qs_kind%name
567 IF (PRESENT(dftb3_param)) dftb3_param = qs_kind%dudq_dftb3
568 IF (PRESENT(elec_conf)) elec_conf => qs_kind%elec_conf
569 IF (PRESENT(alpha_core_charge)) THEN
570 IF (ASSOCIATED(qs_kind%all_potential)) THEN
571 CALL get_potential(potential=qs_kind%all_potential, &
572 alpha_core_charge=alpha_core_charge)
573 ELSE IF (ASSOCIATED(qs_kind%gth_potential)) THEN
574 CALL get_potential(potential=qs_kind%gth_potential, &
575 alpha_core_charge=alpha_core_charge)
576 ELSE IF (ASSOCIATED(qs_kind%sgp_potential)) THEN
577 CALL get_potential(potential=qs_kind%sgp_potential, &
578 alpha_core_charge=alpha_core_charge)
579 ELSE
580 alpha_core_charge = 1.0_dp
581 END IF
582 END IF
583 IF (PRESENT(ccore_charge)) THEN
584 IF (ASSOCIATED(qs_kind%all_potential)) THEN
585 CALL get_potential(potential=qs_kind%all_potential, &
586 ccore_charge=ccore_charge)
587 ELSE IF (ASSOCIATED(qs_kind%gth_potential)) THEN
588 CALL get_potential(potential=qs_kind%gth_potential, &
589 ccore_charge=ccore_charge)
590 ELSE IF (ASSOCIATED(qs_kind%sgp_potential)) THEN
591 CALL get_potential(potential=qs_kind%sgp_potential, &
592 ccore_charge=ccore_charge)
593 ELSE IF (ASSOCIATED(qs_kind%upf_potential)) THEN
594 cpabort("UPF CCORE CHARGE RADIUS NOT AVAILABLE")
595 ELSE
596 ccore_charge = 0.0_dp
597 END IF
598 END IF
599 IF (PRESENT(core_charge_radius)) THEN
600 IF (ASSOCIATED(qs_kind%all_potential)) THEN
601 CALL get_potential(potential=qs_kind%all_potential, &
602 core_charge_radius=core_charge_radius)
603 ELSE IF (ASSOCIATED(qs_kind%gth_potential)) THEN
604 CALL get_potential(potential=qs_kind%gth_potential, &
605 core_charge_radius=core_charge_radius)
606 ELSE IF (ASSOCIATED(qs_kind%sgp_potential)) THEN
607 CALL get_potential(potential=qs_kind%sgp_potential, &
608 core_charge_radius=core_charge_radius)
609 ELSE IF (ASSOCIATED(qs_kind%upf_potential)) THEN
610 cpabort("UPF CORE CHARGE RADIUS NOT AVAILABLE")
611 ELSE
612 core_charge_radius = 0.0_dp
613 END IF
614 END IF
615 IF (PRESENT(core_charge)) THEN
616 IF (ASSOCIATED(qs_kind%all_potential)) THEN
617 CALL get_potential(potential=qs_kind%all_potential, &
618 zeff=core_charge)
619 ELSE IF (ASSOCIATED(qs_kind%gth_potential)) THEN
620 CALL get_potential(potential=qs_kind%gth_potential, &
621 zeff=core_charge)
622 ELSE IF (ASSOCIATED(qs_kind%sgp_potential)) THEN
623 CALL get_potential(potential=qs_kind%sgp_potential, &
624 zeff=core_charge)
625 ELSE IF (ASSOCIATED(qs_kind%upf_potential)) THEN
626 cpabort("UPF CORE CHARGE NOT AVAILABLE")
627 ELSE
628 core_charge = 0.0_dp
629 END IF
630 END IF
631
632 IF (PRESENT(zatom)) THEN
633 ! Retrieve information on element
634 CALL get_ptable_info(qs_kind%element_symbol, ielement=zatom, found=found)
635 cpassert(found)
636 END IF
637
638 IF (PRESENT(zeff)) THEN
639 IF (ASSOCIATED(qs_kind%all_potential)) THEN
640 CALL get_potential(potential=qs_kind%all_potential, zeff=zeff)
641 ELSE IF (ASSOCIATED(qs_kind%gth_potential)) THEN
642 CALL get_potential(potential=qs_kind%gth_potential, zeff=zeff)
643 ELSE IF (ASSOCIATED(qs_kind%sgp_potential)) THEN
644 CALL get_potential(potential=qs_kind%sgp_potential, zeff=zeff)
645 ELSE IF (ASSOCIATED(qs_kind%upf_potential)) THEN
646 zeff = qs_kind%upf_potential%zion
647 ELSE
648 zeff = 0.0_dp
649 END IF
650 END IF
651
652 IF (PRESENT(covalent_radius)) covalent_radius = qs_kind%covalent_radius
653 IF (PRESENT(vdw_radius)) vdw_radius = qs_kind%vdw_radius
654
655 IF (PRESENT(paw_proj_set)) paw_proj_set => qs_kind%paw_proj_set
656 IF (PRESENT(paw_atom)) paw_atom = qs_kind%paw_atom
657 IF (PRESENT(gpw_type_forced)) gpw_type_forced = qs_kind%gpw_type_forced
658 IF (PRESENT(hard_radius)) hard_radius = qs_kind%hard_radius
659 IF (PRESENT(hard0_radius)) hard0_radius = qs_kind%hard0_radius
660 IF (PRESENT(max_rad_local)) max_rad_local = qs_kind%max_rad_local
661 IF (PRESENT(harmonics)) harmonics => qs_kind%harmonics
662 IF (PRESENT(max_s_harm)) THEN
663 IF (ASSOCIATED(qs_kind%harmonics)) THEN
664 max_s_harm = qs_kind%harmonics%max_s_harm
665 ELSE
666 max_s_harm = 0
667 END IF
668 END IF
669 IF (PRESENT(max_iso_not0)) THEN
670 IF (ASSOCIATED(qs_kind%harmonics)) THEN
671 max_iso_not0 = qs_kind%harmonics%max_iso_not0
672 ELSE
673 max_iso_not0 = 0
674 END IF
675 END IF
676 IF (PRESENT(grid_atom)) grid_atom => qs_kind%grid_atom
677 IF (PRESENT(ngrid_ang)) ngrid_ang = qs_kind%ngrid_ang
678 IF (PRESENT(ngrid_rad)) ngrid_rad = qs_kind%ngrid_rad
679 IF (PRESENT(lmax_rho0)) lmax_rho0 = qs_kind%lmax_rho0
680 IF (PRESENT(ghost)) ghost = qs_kind%ghost
681 IF (PRESENT(floating)) floating = qs_kind%floating
682 IF (PRESENT(dft_plus_u_atom)) dft_plus_u_atom = ASSOCIATED(qs_kind%dft_plus_u)
683 IF (PRESENT(l_of_dft_plus_u)) THEN
684 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
685 l_of_dft_plus_u = qs_kind%dft_plus_u%l
686 ELSE
687 l_of_dft_plus_u = -1
688 END IF
689 END IF
690 IF (PRESENT(n_of_dft_plus_u)) THEN
691 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
692 n_of_dft_plus_u = qs_kind%dft_plus_u%n
693 ELSE
694 n_of_dft_plus_u = -1
695 END IF
696 END IF
697 IF (PRESENT(u_minus_j)) THEN
698 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
699 u_minus_j = qs_kind%dft_plus_u%u_minus_j
700 ELSE
701 u_minus_j = 0.0_dp
702 END IF
703 END IF
704 IF (PRESENT(u_minus_j_target)) THEN
705 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
706 u_minus_j_target = qs_kind%dft_plus_u%u_minus_j_target
707 ELSE
708 u_minus_j_target = 0.0_dp
709 END IF
710 END IF
711 IF (PRESENT(u_of_dft_plus_u)) THEN
712 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
713 u_of_dft_plus_u = qs_kind%dft_plus_u%U
714 ELSE
715 u_of_dft_plus_u = 0.0_dp
716 END IF
717 END IF
718 IF (PRESENT(j_of_dft_plus_u)) THEN
719 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
720 j_of_dft_plus_u = qs_kind%dft_plus_u%J
721 ELSE
722 j_of_dft_plus_u = 0.0_dp
723 END IF
724 END IF
725 IF (PRESENT(alpha_of_dft_plus_u)) THEN
726 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
727 alpha_of_dft_plus_u = qs_kind%dft_plus_u%alpha
728 ELSE
729 alpha_of_dft_plus_u = 0.0_dp
730 END IF
731 END IF
732 IF (PRESENT(beta_of_dft_plus_u)) THEN
733 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
734 beta_of_dft_plus_u = qs_kind%dft_plus_u%beta
735 ELSE
736 beta_of_dft_plus_u = 0.0_dp
737 END IF
738 END IF
739 IF (PRESENT(j0_of_dft_plus_u)) THEN
740 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
741 j0_of_dft_plus_u = qs_kind%dft_plus_u%J0
742 ELSE
743 j0_of_dft_plus_u = 0.0_dp
744 END IF
745 END IF
746 IF (PRESENT(occupation_of_dft_plus_u)) THEN
747 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
748 occupation_of_dft_plus_u = qs_kind%dft_plus_u%occupation
749 ELSE
750 occupation_of_dft_plus_u = -1.0_dp
751 END IF
752 END IF
753
754 IF (PRESENT(init_u_ramping_each_scf)) THEN
755 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
756 init_u_ramping_each_scf = qs_kind%dft_plus_u%init_u_ramping_each_scf
757 ELSE
758 init_u_ramping_each_scf = .false.
759 END IF
760 END IF
761 IF (PRESENT(u_ramping)) THEN
762 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
763 u_ramping = qs_kind%dft_plus_u%u_ramping
764 ELSE
765 u_ramping = 0.0_dp
766 END IF
767 END IF
768 IF (PRESENT(eps_u_ramping)) THEN
769 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
770 eps_u_ramping = qs_kind%dft_plus_u%eps_u_ramping
771 ELSE
772 eps_u_ramping = 1.0e-5_dp
773 END IF
774 END IF
775 IF (PRESENT(nelec)) THEN
776 NULLIFY (nelec)
777 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
778 IF (ASSOCIATED(qs_kind%dft_plus_u%nelec)) THEN
779 nelec => qs_kind%dft_plus_u%nelec
780 END IF
781 END IF
782 END IF
783 IF (PRESENT(orbitals)) THEN
784 NULLIFY (orbitals)
785 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
786 IF (ASSOCIATED(qs_kind%dft_plus_u%orbitals)) THEN
787 orbitals => qs_kind%dft_plus_u%orbitals
788 END IF
789 END IF
790 END IF
791 IF (PRESENT(eps_scf)) THEN
792 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
793 eps_scf = qs_kind%dft_plus_u%eps_scf
794 ELSE
795 eps_scf = 1.0e30_dp
796 END IF
797 END IF
798 IF (PRESENT(max_scf)) THEN
799 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
800 max_scf = qs_kind%dft_plus_u%max_scf
801 ELSE
802 max_scf = -1
803 END IF
804 END IF
805 IF (PRESENT(smear)) THEN
806 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
807 smear = qs_kind%dft_plus_u%smear
808 ELSE
809 smear = .false.
810 END IF
811 END IF
812 IF (PRESENT(dispersion)) dispersion => qs_kind%dispersion
813 IF (PRESENT(bs_occupation)) bs_occupation = qs_kind%bs_occupation
814 IF (PRESENT(addel)) addel => qs_kind%addel
815 IF (PRESENT(laddel)) laddel => qs_kind%laddel
816 IF (PRESENT(naddel)) naddel => qs_kind%naddel
817
818 IF (PRESENT(magnetization)) magnetization = qs_kind%magnetization
819
820 IF (PRESENT(no_optimize)) no_optimize = qs_kind%no_optimize
821
822 IF (PRESENT(reltmat)) reltmat => qs_kind%reltmat
823
824 IF (PRESENT(mao)) mao = qs_kind%mao
825
826 IF (PRESENT(lmax_dftb)) lmax_dftb = qs_kind%lmax_dftb
827
828 IF (PRESENT(pao_basis_size)) pao_basis_size = qs_kind%pao_basis_size
829 IF (PRESENT(pao_model_file)) pao_model_file = qs_kind%pao_model_file
830 IF (PRESENT(pao_potentials)) pao_potentials => qs_kind%pao_potentials
831 IF (PRESENT(pao_descriptors)) pao_descriptors => qs_kind%pao_descriptors
832 END SUBROUTINE get_qs_kind
833
834! **************************************************************************************************
835!> \brief Get attributes of an atomic kind set.
836!> \param qs_kind_set ...
837!> \param all_potential_present ...
838!> \param tnadd_potential_present ...
839!> \param gth_potential_present ...
840!> \param sgp_potential_present ...
841!> \param paw_atom_present ...
842!> \param dft_plus_u_atom_present ...
843!> \param maxcgf ...
844!> \param maxsgf ...
845!> \param maxco ...
846!> \param maxco_proj ...
847!> \param maxgtops ...
848!> \param maxlgto ...
849!> \param maxlprj ...
850!> \param maxnset ...
851!> \param maxsgf_set ...
852!> \param ncgf ...
853!> \param npgf ...
854!> \param nset ...
855!> \param nsgf ...
856!> \param nshell ...
857!> \param maxpol ...
858!> \param maxlppl ...
859!> \param maxlppnl ...
860!> \param maxppnl ...
861!> \param nelectron ...
862!> \param maxder ...
863!> \param max_ngrid_rad ...
864!> \param max_sph_harm ...
865!> \param maxg_iso_not0 ...
866!> \param lmax_rho0 ...
867!> \param basis_rcut ...
868!> \param basis_type ...
869!> \param total_zeff_corr ... [SGh]
870!> \param npgf_seg total number of primitive GTOs in "segmented contraction format"
871! **************************************************************************************************
872 SUBROUTINE get_qs_kind_set(qs_kind_set, &
873 all_potential_present, tnadd_potential_present, gth_potential_present, &
874 sgp_potential_present, paw_atom_present, dft_plus_u_atom_present, &
875 maxcgf, maxsgf, maxco, maxco_proj, maxgtops, maxlgto, maxlprj, maxnset, maxsgf_set, &
876 ncgf, npgf, nset, nsgf, nshell, maxpol, maxlppl, maxlppnl, maxppnl, &
877 nelectron, maxder, max_ngrid_rad, max_sph_harm, maxg_iso_not0, lmax_rho0, &
878 basis_rcut, &
879 basis_type, total_zeff_corr, npgf_seg)
880
881 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
882 LOGICAL, INTENT(OUT), OPTIONAL :: all_potential_present, tnadd_potential_present, &
883 gth_potential_present, sgp_potential_present, paw_atom_present, dft_plus_u_atom_present
884 INTEGER, INTENT(OUT), OPTIONAL :: maxcgf, maxsgf, maxco, maxco_proj, maxgtops, maxlgto, &
885 maxlprj, maxnset, maxsgf_set, ncgf, npgf, nset, nsgf, nshell, maxpol, maxlppl, maxlppnl, &
886 maxppnl, nelectron
887 INTEGER, INTENT(IN), OPTIONAL :: maxder
888 INTEGER, INTENT(OUT), OPTIONAL :: max_ngrid_rad, max_sph_harm, &
889 maxg_iso_not0, lmax_rho0
890 REAL(kind=dp), INTENT(OUT), OPTIONAL :: basis_rcut
891 CHARACTER(len=*), OPTIONAL :: basis_type
892 REAL(kind=dp), INTENT(OUT), OPTIONAL :: total_zeff_corr
893 INTEGER, INTENT(OUT), OPTIONAL :: npgf_seg
894
895 CHARACTER(len=default_string_length) :: my_basis_type
896 INTEGER :: ikind, imax, lmax_rho0_kind, &
897 max_iso_not0, max_s_harm, n, &
898 ngrid_rad, nkind, nrloc(10), &
899 nrpot(1:15, 0:10)
900 LOGICAL :: dft_plus_u_atom, ecp_semi_local, paw_atom
901 REAL(kind=dp) :: brcut, zeff, zeff_correction
902 TYPE(all_potential_type), POINTER :: all_potential
903 TYPE(gth_potential_type), POINTER :: gth_potential
904 TYPE(gto_basis_set_type), POINTER :: tmp_basis_set
905 TYPE(local_potential_type), POINTER :: tnadd_potential
906 TYPE(paw_proj_set_type), POINTER :: paw_proj_set
907 TYPE(qs_dftb_atom_type), POINTER :: dftb_parameter
908 TYPE(qs_kind_type), POINTER :: qs_kind
909 TYPE(sgp_potential_type), POINTER :: sgp_potential
910
911 IF (PRESENT(basis_type)) THEN
912 my_basis_type = basis_type
913 ELSE
914 my_basis_type = "ORB"
915 END IF
916
917 IF (ASSOCIATED(qs_kind_set)) THEN
918
919 IF (PRESENT(maxcgf)) maxcgf = 0
920 IF (PRESENT(maxco)) maxco = 0
921 IF (PRESENT(maxco_proj)) maxco_proj = 0
922 IF (PRESENT(maxg_iso_not0)) maxg_iso_not0 = 0
923 IF (PRESENT(maxgtops)) maxgtops = 0
924 IF (PRESENT(maxlgto)) maxlgto = -1
925 IF (PRESENT(maxlppl)) maxlppl = -1
926 IF (PRESENT(maxlppnl)) maxlppnl = -1
927 IF (PRESENT(maxpol)) maxpol = -1
928 IF (PRESENT(maxlprj)) maxlprj = -1
929 IF (PRESENT(maxnset)) maxnset = 0
930 IF (PRESENT(maxppnl)) maxppnl = 0
931 IF (PRESENT(maxsgf)) maxsgf = 0
932 IF (PRESENT(maxsgf_set)) maxsgf_set = 0
933 IF (PRESENT(ncgf)) ncgf = 0
934 IF (PRESENT(nelectron)) nelectron = 0
935 IF (PRESENT(npgf)) npgf = 0
936 IF (PRESENT(nset)) nset = 0
937 IF (PRESENT(nsgf)) nsgf = 0
938 IF (PRESENT(nshell)) nshell = 0
939 IF (PRESENT(all_potential_present)) all_potential_present = .false.
940 IF (PRESENT(tnadd_potential_present)) tnadd_potential_present = .false.
941 IF (PRESENT(gth_potential_present)) gth_potential_present = .false.
942 IF (PRESENT(sgp_potential_present)) sgp_potential_present = .false.
943 IF (PRESENT(paw_atom_present)) paw_atom_present = .false.
944 IF (PRESENT(max_ngrid_rad)) max_ngrid_rad = 0
945 IF (PRESENT(max_sph_harm)) max_sph_harm = 0
946 IF (PRESENT(lmax_rho0)) lmax_rho0 = 0
947 IF (PRESENT(basis_rcut)) basis_rcut = 0.0_dp
948 IF (PRESENT(total_zeff_corr)) total_zeff_corr = 0.0_dp
949 IF (PRESENT(npgf_seg)) npgf_seg = 0
950
951 nkind = SIZE(qs_kind_set)
952 DO ikind = 1, nkind
953 qs_kind => qs_kind_set(ikind)
954 CALL get_qs_kind(qs_kind=qs_kind, &
955 all_potential=all_potential, &
956 tnadd_potential=tnadd_potential, &
957 gth_potential=gth_potential, &
958 sgp_potential=sgp_potential, &
959 paw_proj_set=paw_proj_set, &
960 dftb_parameter=dftb_parameter, &
961 ngrid_rad=ngrid_rad, &
962 max_s_harm=max_s_harm, &
963 max_iso_not0=max_iso_not0, &
964 paw_atom=paw_atom, &
965 dft_plus_u_atom=dft_plus_u_atom, &
966 lmax_rho0=lmax_rho0_kind)
967
968 IF (PRESENT(maxlppl) .AND. ASSOCIATED(gth_potential)) THEN
969 CALL get_potential(potential=gth_potential, nexp_ppl=n)
970 maxlppl = max(maxlppl, 2*(n - 1))
971 ELSEIF (PRESENT(maxlppl) .AND. ASSOCIATED(sgp_potential)) THEN
972 CALL get_potential(potential=sgp_potential, nrloc=nrloc, ecp_semi_local=ecp_semi_local)
973 n = maxval(nrloc) - 2
974 maxlppl = max(maxlppl, 2*(n - 1))
975 IF (ecp_semi_local) THEN
976 CALL get_potential(potential=sgp_potential, sl_lmax=imax, nrpot=nrpot)
977 n = maxval(nrpot) - 2
978 n = 2*(n - 1) + imax
979 maxlppl = max(maxlppl, n)
980 END IF
981 END IF
982
983 IF (PRESENT(maxlppnl) .AND. ASSOCIATED(gth_potential)) THEN
984 CALL get_potential(potential=gth_potential, lprj_ppnl_max=imax)
985 maxlppnl = max(maxlppnl, imax)
986 ELSEIF (PRESENT(maxlppnl) .AND. ASSOCIATED(sgp_potential)) THEN
987 CALL get_potential(potential=sgp_potential, lmax=imax)
988 maxlppnl = max(maxlppnl, imax)
989 END IF
990
991 IF (PRESENT(maxpol) .AND. ASSOCIATED(tnadd_potential)) THEN
992 CALL get_potential(potential=tnadd_potential, npol=n)
993 maxpol = max(maxpol, 2*(n - 1))
994 END IF
995
996 IF (PRESENT(maxco_proj) .AND. ASSOCIATED(paw_proj_set)) THEN
997 CALL get_paw_proj_set(paw_proj_set=paw_proj_set, ncgauprj=imax)
998 maxco_proj = max(maxco_proj, imax)
999 END IF
1000
1001 IF (PRESENT(maxlprj) .AND. ASSOCIATED(paw_proj_set)) THEN
1002 CALL get_paw_proj_set(paw_proj_set=paw_proj_set, maxl=imax)
1003 maxlprj = max(maxlprj, imax)
1004 END IF
1005
1006 IF (PRESENT(maxppnl) .AND. ASSOCIATED(gth_potential)) THEN
1007 CALL get_potential(potential=gth_potential, nppnl=imax)
1008 maxppnl = max(maxppnl, imax)
1009 ELSEIF (PRESENT(maxppnl) .AND. ASSOCIATED(sgp_potential)) THEN
1010 CALL get_potential(potential=sgp_potential, nppnl=imax)
1011 maxppnl = max(maxppnl, imax)
1012 END IF
1013
1014 CALL get_basis_from_container(qs_kind%basis_sets, basis_set=tmp_basis_set, &
1015 basis_type=my_basis_type)
1016
1017 IF (PRESENT(maxcgf)) THEN
1018 IF (ASSOCIATED(tmp_basis_set)) THEN
1019 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, ncgf=imax)
1020 maxcgf = max(maxcgf, imax)
1021 ELSE IF (ASSOCIATED(qs_kind%dftb_parameter)) THEN
1022 CALL get_dftb_atom_param(dftb_parameter=dftb_parameter, lmax=imax)
1023 imax = ((imax + 1)*(imax + 2)*(imax + 3))/6
1024 maxcgf = max(maxcgf, imax)
1025 END IF
1026 END IF
1027
1028 IF (PRESENT(maxco)) THEN
1029 IF (ASSOCIATED(tmp_basis_set)) THEN
1030 IF (PRESENT(maxder)) THEN
1031 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, &
1032 maxco=imax, maxder=maxder)
1033 ELSE
1034 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, maxco=imax)
1035 END IF
1036 maxco = max(maxco, imax)
1037 END IF
1038 IF (ASSOCIATED(gth_potential)) THEN
1039 CALL get_potential(potential=gth_potential, lprj_ppnl_max=imax)
1040 maxco = max(maxco, ncoset(imax))
1041 END IF
1042 IF (ASSOCIATED(sgp_potential)) THEN
1043 CALL get_potential(potential=sgp_potential, lmax=imax)
1044 maxco = max(maxco, ncoset(imax))
1045 CALL get_potential(potential=sgp_potential, sl_lmax=imax)
1046 maxco = max(maxco, ncoset(imax))
1047 END IF
1048 END IF
1049
1050 IF (PRESENT(maxgtops)) THEN
1051 IF (ASSOCIATED(tmp_basis_set)) THEN
1052 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, maxso=imax, nset=n)
1053 maxgtops = max(maxgtops, n*imax)
1054 END IF
1055 END IF
1056
1057 IF (PRESENT(maxlgto)) THEN
1058 IF (ASSOCIATED(tmp_basis_set)) THEN
1059 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, maxl=imax)
1060 maxlgto = max(maxlgto, imax)
1061 ELSE IF (ASSOCIATED(qs_kind%dftb_parameter)) THEN
1062 CALL get_dftb_atom_param(dftb_parameter=dftb_parameter, lmax=imax)
1063 maxlgto = max(maxlgto, imax)
1064 END IF
1065 END IF
1066
1067 IF (PRESENT(maxnset)) THEN
1068 IF (ASSOCIATED(tmp_basis_set)) THEN
1069 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, nset=n)
1070 maxnset = max(maxnset, n)
1071 END IF
1072 END IF
1073
1074 IF (PRESENT(maxsgf)) THEN
1075 IF (ASSOCIATED(tmp_basis_set)) THEN
1076 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, nsgf=imax)
1077 maxsgf = max(maxsgf, imax)
1078 END IF
1079 END IF
1080
1081 IF (PRESENT(maxsgf_set)) THEN
1082 IF (ASSOCIATED(tmp_basis_set)) THEN
1083 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, maxsgf_set=imax)
1084 maxsgf_set = max(maxsgf_set, imax)
1085 END IF
1086 END IF
1087
1088 IF (PRESENT(ncgf)) THEN
1089 IF (ASSOCIATED(tmp_basis_set)) THEN
1090 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, ncgf=n)
1091 ncgf = ncgf + n*qs_kind_set(ikind)%natom
1092 ELSE IF (ASSOCIATED(qs_kind%dftb_parameter)) THEN
1093 CALL get_dftb_atom_param(dftb_parameter=dftb_parameter, lmax=imax)
1094 n = ((imax + 1)*(imax + 2)*(imax + 3))/6
1095 ncgf = ncgf + n*qs_kind_set(ikind)%natom
1096 END IF
1097 END IF
1098
1099 IF (PRESENT(npgf)) THEN
1100 IF (ASSOCIATED(tmp_basis_set)) THEN
1101 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, npgf_sum=n)
1102 npgf = npgf + n*qs_kind_set(ikind)%natom
1103 END IF
1104 END IF
1105
1106 IF (PRESENT(nset)) THEN
1107 IF (ASSOCIATED(tmp_basis_set)) THEN
1108 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, nset=n)
1109 nset = nset + n*qs_kind_set(ikind)%natom
1110 END IF
1111 END IF
1112
1113 IF (PRESENT(nsgf)) THEN
1114 IF (ASSOCIATED(tmp_basis_set)) THEN
1115 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, nsgf=n)
1116 nsgf = nsgf + n*qs_kind_set(ikind)%natom
1117 ELSE IF (ASSOCIATED(qs_kind%dftb_parameter)) THEN
1118 CALL get_dftb_atom_param(dftb_parameter=dftb_parameter, natorb=n)
1119 nsgf = nsgf + n*qs_kind_set(ikind)%natom
1120 END IF
1121 END IF
1122
1123 IF (PRESENT(nshell)) THEN
1124 IF (ASSOCIATED(tmp_basis_set)) THEN
1125 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, nshell_sum=n)
1126 nshell = nshell + n*qs_kind_set(ikind)%natom
1127 ELSE IF (ASSOCIATED(qs_kind%dftb_parameter)) THEN
1128 CALL get_dftb_atom_param(dftb_parameter=dftb_parameter, lmax=n)
1129 nshell = nshell + (n + 1)*qs_kind_set(ikind)%natom
1130 END IF
1131 END IF
1132
1133 IF (PRESENT(nelectron)) THEN
1134 IF (ASSOCIATED(qs_kind%all_potential)) THEN
1135 CALL get_potential(potential=qs_kind%all_potential, &
1136 zeff=zeff, zeff_correction=zeff_correction)
1137 ELSE IF (ASSOCIATED(qs_kind%gth_potential)) THEN
1138 CALL get_potential(potential=qs_kind%gth_potential, &
1139 zeff=zeff, zeff_correction=zeff_correction)
1140 ELSE IF (ASSOCIATED(qs_kind%sgp_potential)) THEN
1141 CALL get_potential(potential=qs_kind%sgp_potential, &
1142 zeff=zeff, zeff_correction=zeff_correction)
1143 ELSE
1144 zeff = 0.0_dp
1145 zeff_correction = 0.0_dp
1146 END IF
1147 nelectron = nelectron + qs_kind_set(ikind)%natom*nint(zeff - zeff_correction)
1148 END IF
1149
1150 IF (PRESENT(basis_rcut)) THEN
1151 IF (ASSOCIATED(tmp_basis_set)) THEN
1152 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, kind_radius=brcut)
1153 basis_rcut = max(basis_rcut, brcut)
1154 ELSE IF (ASSOCIATED(qs_kind%dftb_parameter)) THEN
1155 CALL get_dftb_atom_param(dftb_parameter=dftb_parameter, cutoff=brcut)
1156 basis_rcut = max(basis_rcut, brcut)
1157 END IF
1158 END IF
1159
1160 IF (PRESENT(total_zeff_corr)) THEN
1161 IF (ASSOCIATED(qs_kind%all_potential)) THEN
1162 CALL get_potential(potential=qs_kind%all_potential, &
1163 zeff=zeff, zeff_correction=zeff_correction)
1164 ELSE IF (ASSOCIATED(qs_kind%gth_potential)) THEN
1165 CALL get_potential(potential=qs_kind%gth_potential, &
1166 zeff=zeff, zeff_correction=zeff_correction)
1167 ELSE IF (ASSOCIATED(qs_kind%sgp_potential)) THEN
1168 CALL get_potential(potential=qs_kind%sgp_potential, &
1169 zeff=zeff, zeff_correction=zeff_correction)
1170 ELSE
1171 zeff = 0.0_dp
1172 zeff_correction = 0.0_dp
1173 END IF
1174 total_zeff_corr = total_zeff_corr + qs_kind_set(ikind)%natom*zeff_correction
1175 END IF
1176
1177 IF (PRESENT(all_potential_present)) THEN
1178 IF (ASSOCIATED(all_potential)) THEN
1179 all_potential_present = .true.
1180 END IF
1181 END IF
1182
1183 IF (PRESENT(tnadd_potential_present)) THEN
1184 IF (ASSOCIATED(tnadd_potential)) THEN
1185 tnadd_potential_present = .true.
1186 END IF
1187 END IF
1188
1189 IF (PRESENT(gth_potential_present)) THEN
1190 IF (ASSOCIATED(gth_potential)) THEN
1191 gth_potential_present = .true.
1192 END IF
1193 END IF
1194
1195 IF (PRESENT(sgp_potential_present)) THEN
1196 IF (ASSOCIATED(sgp_potential)) THEN
1197 sgp_potential_present = .true.
1198 END IF
1199 END IF
1200
1201 IF (PRESENT(paw_atom_present)) THEN
1202 IF (paw_atom) THEN
1203 paw_atom_present = .true.
1204 END IF
1205 END IF
1206
1207 IF (PRESENT(dft_plus_u_atom_present)) THEN
1208 IF (dft_plus_u_atom) THEN
1209 dft_plus_u_atom_present = .true.
1210 END IF
1211 END IF
1212
1213 IF (PRESENT(max_ngrid_rad)) THEN
1214 max_ngrid_rad = max(max_ngrid_rad, ngrid_rad)
1215 END IF
1216
1217 IF (PRESENT(max_sph_harm)) THEN
1218 max_sph_harm = max(max_sph_harm, max_s_harm)
1219 END IF
1220
1221 IF (PRESENT(maxg_iso_not0)) THEN
1222 maxg_iso_not0 = max(maxg_iso_not0, max_iso_not0)
1223 END IF
1224
1225 IF (PRESENT(lmax_rho0)) THEN
1226 lmax_rho0 = max(lmax_rho0, lmax_rho0_kind)
1227 END IF
1228
1229 IF (PRESENT(npgf_seg)) THEN
1230 IF (ASSOCIATED(tmp_basis_set)) THEN
1231 CALL get_gto_basis_set(gto_basis_set=tmp_basis_set, npgf_seg_sum=n)
1232 npgf_seg = npgf_seg + n*qs_kind_set(ikind)%natom
1233 END IF
1234 END IF
1235
1236 END DO
1237 ELSE
1238 cpabort("The pointer qs_kind_set is not associated")
1239 END IF
1240
1241 END SUBROUTINE get_qs_kind_set
1242
1243! **************************************************************************************************
1244!> \brief Initialise an atomic kind data set.
1245!> \param qs_kind ...
1246!> \author Creation (11.01.2002,MK)
1247!> 20.09.2002 adapted for pol/kg use, gtb
1248! **************************************************************************************************
1249 SUBROUTINE init_qs_kind(qs_kind)
1250 TYPE(qs_kind_type), POINTER :: qs_kind
1251
1252 CHARACTER(len=*), PARAMETER :: routinen = 'init_qs_kind'
1253
1254 CHARACTER(LEN=default_string_length) :: basis_type
1255 INTEGER :: handle, i
1256 TYPE(gto_basis_set_type), POINTER :: tmp_basis_set
1257
1258 CALL timeset(routinen, handle)
1259
1260 cpassert(ASSOCIATED(qs_kind))
1261
1262 IF (ASSOCIATED(qs_kind%gth_potential)) THEN
1263 CALL init_potential(qs_kind%gth_potential)
1264 ELSEIF (ASSOCIATED(qs_kind%sgp_potential)) THEN
1265 CALL init_potential(qs_kind%sgp_potential)
1266 END IF
1267
1268 DO i = 1, SIZE(qs_kind%basis_sets, 1)
1269 NULLIFY (tmp_basis_set)
1270 CALL get_basis_from_container(qs_kind%basis_sets, basis_set=tmp_basis_set, &
1271 inumbas=i, basis_type=basis_type)
1272 IF (basis_type == "") cycle
1273 IF (basis_type == "AUX") THEN
1274 IF (tmp_basis_set%norm_type < 0) tmp_basis_set%norm_type = 1
1275 CALL init_aux_basis_set(tmp_basis_set)
1276 ELSE
1277 IF (tmp_basis_set%norm_type < 0) tmp_basis_set%norm_type = 2
1278 CALL init_orb_basis_set(tmp_basis_set)
1279 END IF
1280 END DO
1281
1282 CALL timestop(handle)
1283
1284 END SUBROUTINE init_qs_kind
1285
1286! **************************************************************************************************
1287!> \brief Initialise an atomic kind set data set.
1288!> \param qs_kind_set ...
1289!> \author - Creation (17.01.2002,MK)
1290!> - 20.09.2002 para_env passed (gt)
1291! **************************************************************************************************
1292 SUBROUTINE init_qs_kind_set(qs_kind_set)
1293
1294 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
1295
1296 CHARACTER(len=*), PARAMETER :: routinen = 'init_qs_kind_set'
1297
1298 INTEGER :: handle, ikind
1299 TYPE(qs_kind_type), POINTER :: qs_kind
1300
1301 CALL timeset(routinen, handle)
1302
1303 IF (.NOT. ASSOCIATED(qs_kind_set)) THEN
1304 cpabort("init_qs_kind_set: The pointer qs_kind_set is not associated")
1305 END IF
1306
1307 DO ikind = 1, SIZE(qs_kind_set)
1308 qs_kind => qs_kind_set(ikind)
1309 CALL init_qs_kind(qs_kind)
1310 END DO
1311
1312 CALL timestop(handle)
1313
1314 END SUBROUTINE init_qs_kind_set
1315
1316! **************************************************************************************************
1317!> \brief ...
1318!> \param qs_kind_set ...
1319!> \param qs_control ...
1320!> \param force_env_section ...
1321!> \param modify_qs_control whether the qs_control should be modified
1322! **************************************************************************************************
1323 SUBROUTINE init_gapw_basis_set(qs_kind_set, qs_control, force_env_section, modify_qs_control)
1324
1325 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
1326 TYPE(qs_control_type), POINTER :: qs_control
1327 TYPE(section_vals_type), POINTER :: force_env_section
1328 LOGICAL, OPTIONAL :: modify_qs_control
1329
1330 CHARACTER(LEN=default_string_length) :: bsname
1331 INTEGER :: bas1c, ikind, ilevel, nkind
1332 LOGICAL :: gpw, my_mod_control, paw_atom
1333 REAL(dp) :: max_rad_local_type, rc
1334 TYPE(gto_basis_set_type), POINTER :: basis_1c, orb_basis, soft_basis
1335 TYPE(paw_proj_set_type), POINTER :: paw_proj
1336 TYPE(qs_kind_type), POINTER :: qs_kind
1337
1338 my_mod_control = .true.
1339 IF (PRESENT(modify_qs_control)) THEN
1340 my_mod_control = modify_qs_control
1341 END IF
1342
1343 IF (ASSOCIATED(qs_kind_set)) THEN
1344
1345 IF (my_mod_control) qs_control%gapw_control%non_paw_atoms = .false.
1346 nkind = SIZE(qs_kind_set)
1347
1348 DO ikind = 1, nkind
1349
1350 qs_kind => qs_kind_set(ikind)
1351
1352 CALL get_qs_kind(qs_kind=qs_kind, basis_set=orb_basis)
1353 CALL get_qs_kind(qs_kind=qs_kind, hard_radius=rc, &
1354 max_rad_local=max_rad_local_type, gpw_type_forced=gpw)
1355
1356 NULLIFY (soft_basis)
1357 CALL allocate_gto_basis_set(soft_basis)
1358 CALL create_soft_basis(orb_basis, soft_basis, &
1359 qs_control%gapw_control%eps_fit, rc, paw_atom, &
1360 qs_control%gapw_control%force_paw, gpw)
1361 CALL add_basis_set_to_container(qs_kind%basis_sets, soft_basis, "ORB_SOFT")
1362 CALL set_qs_kind(qs_kind=qs_kind, paw_atom=paw_atom)
1363
1364 bas1c = qs_control%gapw_control%basis_1c
1365 NULLIFY (basis_1c)
1366 SELECT CASE (bas1c)
1367 CASE (gapw_1c_orb)
1368 ilevel = 0
1369 CASE (gapw_1c_small)
1370 ilevel = 1
1371 CASE (gapw_1c_medium)
1372 ilevel = 2
1373 CASE (gapw_1c_large)
1374 ilevel = 3
1375 CASE (gapw_1c_very_large)
1376 ilevel = 4
1377 CASE DEFAULT
1378 cpabort("basis_1c type")
1379 END SELECT
1380 CALL remove_basis_from_container(qs_kind%basis_sets, basis_type="GAPW_1C")
1381 CALL create_1c_basis(orb_basis, soft_basis, basis_1c, ilevel)
1382 CALL get_gto_basis_set(gto_basis_set=orb_basis, name=bsname)
1383 basis_1c%name = trim(bsname)//"_1c"
1384 CALL add_basis_set_to_container(qs_kind%basis_sets, basis_1c, "GAPW_1C")
1385 IF (paw_atom) THEN
1386 CALL allocate_paw_proj_set(qs_kind%paw_proj_set)
1387 CALL get_qs_kind(qs_kind=qs_kind, paw_proj_set=paw_proj)
1388 CALL projectors(paw_proj, basis_1c, orb_basis, rc, qs_control, &
1389 max_rad_local_type, force_env_section)
1390 ELSE
1391 IF (my_mod_control) qs_control%gapw_control%non_paw_atoms = .true.
1392 END IF
1393
1394 ! grid_atom and harmonics are allocated even if NOT PAW_ATOM
1395 NULLIFY (qs_kind%grid_atom, qs_kind%harmonics)
1396 CALL allocate_grid_atom(qs_kind%grid_atom)
1397 CALL allocate_harmonics_atom(qs_kind%harmonics)
1398
1399 END DO
1400
1401 IF (my_mod_control) THEN
1402 IF (qs_control%gapw_control%non_paw_atoms) THEN
1403 qs_control%gapw_control%nopaw_as_gpw = .true.
1404 ELSE
1405 qs_control%gapw_control%nopaw_as_gpw = .false.
1406 END IF
1407 END IF
1408 ELSE
1409 cpabort("The pointer qs_kind_set is not associated")
1410 END IF
1411
1412 END SUBROUTINE init_gapw_basis_set
1413! **************************************************************************************************
1414!> \brief ...
1415!> \param qs_kind_set ...
1416! **************************************************************************************************
1417 SUBROUTINE init_gapw_nlcc(qs_kind_set)
1418
1419 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
1420
1421 INTEGER :: i, ic, ikind, n_nlcc, nc, nexp_nlcc, &
1422 nkind, nr
1423 INTEGER, DIMENSION(:), POINTER :: nct_nlcc
1424 LOGICAL :: nlcc, nlcc_type, paw_atom
1425 REAL(dp) :: alpha, coa, cval
1426 REAL(kind=dp), DIMENSION(:), POINTER :: a_nlcc, alpha_nlcc, c_nlcc, fe, rc, rr
1427 REAL(kind=dp), DIMENSION(:, :), POINTER :: cval_nlcc, den
1428 TYPE(gth_potential_type), POINTER :: gth_potential
1429 TYPE(qs_kind_type), POINTER :: qs_kind
1430 TYPE(sgp_potential_type), POINTER :: sgp_potential
1431
1432 IF (ASSOCIATED(qs_kind_set)) THEN
1433 nlcc = has_nlcc(qs_kind_set)
1434 IF (nlcc) THEN
1435 nkind = SIZE(qs_kind_set)
1436 DO ikind = 1, nkind
1437 qs_kind => qs_kind_set(ikind)
1438 CALL get_qs_kind(qs_kind, paw_atom=paw_atom)
1439 IF (paw_atom) THEN
1440 CALL get_qs_kind(qs_kind, gth_potential=gth_potential)
1441 CALL get_qs_kind(qs_kind, sgp_potential=sgp_potential)
1442 IF (ASSOCIATED(gth_potential)) THEN
1443 CALL get_potential(potential=gth_potential, nlcc_present=nlcc_type, &
1444 nexp_nlcc=nexp_nlcc, alpha_nlcc=alpha_nlcc, nct_nlcc=nct_nlcc, cval_nlcc=cval_nlcc)
1445 IF (nlcc_type) THEN
1446 nr = qs_kind%grid_atom%nr
1447 rr => qs_kind%grid_atom%rad
1448 ALLOCATE (qs_kind%nlcc_pot(nr, 2), rc(nr), fe(nr))
1449 den => qs_kind%nlcc_pot
1450 den = 0.0_dp
1451 DO i = 1, nexp_nlcc
1452 alpha = alpha_nlcc(i)
1453 rc(:) = rr(:)/alpha
1454 fe(:) = exp(-0.5_dp*rc(:)*rc(:))
1455 nc = nct_nlcc(i)
1456 DO ic = 1, nc
1457 cval = cval_nlcc(ic, i)
1458 coa = cval/alpha
1459 den(:, 1) = den(:, 1) + fe(:)*rc**(2*ic - 2)*cval
1460 den(:, 2) = den(:, 2) - fe(:)*rc**(2*ic - 1)*coa
1461 IF (ic > 1) THEN
1462 den(:, 2) = den(:, 2) + real(2*ic - 2, dp)*fe(:)*rc**(2*ic - 3)*coa
1463 END IF
1464 END DO
1465 END DO
1466 DEALLOCATE (rc, fe)
1467 END IF
1468 ELSE IF (ASSOCIATED(sgp_potential)) THEN
1469 CALL get_potential(potential=sgp_potential, has_nlcc=nlcc_type, &
1470 n_nlcc=n_nlcc, a_nlcc=a_nlcc, c_nlcc=c_nlcc)
1471 IF (nlcc_type) THEN
1472 nr = qs_kind%grid_atom%nr
1473 rr => qs_kind%grid_atom%rad
1474 ALLOCATE (qs_kind%nlcc_pot(nr, 2), rc(nr), fe(nr))
1475 den => qs_kind%nlcc_pot
1476 den = 0.0_dp
1477 DO i = 1, n_nlcc
1478 alpha = a_nlcc(i)
1479 fe(:) = exp(-alpha*rr(:)*rr(:))
1480 cval = c_nlcc(i)
1481 den(:, 1) = den(:, 1) + cval*fe(:)
1482 den(:, 2) = den(:, 2) - 2.0_dp*alpha*cval*rr(:)*fe(:)
1483 END DO
1484 DEALLOCATE (rc, fe)
1485 END IF
1486 ELSE
1487 ! skip
1488 END IF
1489 END IF
1490 END DO
1491 END IF
1492 ELSE
1493 cpabort("The pointer qs_kind_set is not associated")
1494 END IF
1495
1496 END SUBROUTINE init_gapw_nlcc
1497
1498! **************************************************************************************************
1499!> \brief Read an atomic kind data set from the input file.
1500!> \param qs_kind ...
1501!> \param kind_section ...
1502!> \param para_env ...
1503!> \param force_env_section ...
1504!> \param no_fail ...
1505!> \param method_id ...
1506!> \param silent ...
1507!> \par History
1508!> - Creation (09.02.2002,MK)
1509!> - 20.09.2002,gt: adapted for POL/KG use (elp_potential)
1510!> - 05.03.2010: split elp_potential into fist_potential and kg_potential
1511! **************************************************************************************************
1512 SUBROUTINE read_qs_kind(qs_kind, kind_section, para_env, force_env_section, &
1513 no_fail, method_id, silent)
1514
1515 TYPE(qs_kind_type), INTENT(INOUT) :: qs_kind
1516 TYPE(section_vals_type), POINTER :: kind_section
1517 TYPE(mp_para_env_type), POINTER :: para_env
1518 TYPE(section_vals_type), POINTER :: force_env_section
1519 LOGICAL, INTENT(IN) :: no_fail
1520 INTEGER, INTENT(IN) :: method_id
1521 LOGICAL, INTENT(IN) :: silent
1522
1523 CHARACTER(LEN=*), PARAMETER :: routinen = 'read_qs_kind'
1524 INTEGER, PARAMETER :: maxbas = 20
1525
1526 CHARACTER(LEN=2) :: element_symbol
1527 CHARACTER(len=default_path_length) :: kg_potential_fn_kind, &
1528 potential_file_name, potential_fn_kind
1529 CHARACTER(LEN=default_string_length) :: akind_name, basis_type, keyword, &
1530 kgpot_name, kgpot_type, &
1531 potential_name, potential_type, tmp
1532 CHARACTER(LEN=default_string_length), DIMENSION(4) :: description
1533 CHARACTER(LEN=default_string_length), &
1534 DIMENSION(:), POINTER :: tmpstringlist
1535 CHARACTER(LEN=default_string_length), &
1536 DIMENSION(maxbas) :: basis_set_form, basis_set_name, &
1537 basis_set_type
1538 INTEGER :: handle, i, i_rep, iounit, ipaodesc, ipaopot, ipos, j, jj, k_rep, l, m, n_rep, &
1539 nb_rep, nexp, ngauss, nlcc, nloc, nnl, norbitals, npaodesc, npaopot, nppnl, nspin, nu, z
1540 INTEGER, DIMENSION(:), POINTER :: add_el, elec_conf, orbitals
1541 LOGICAL :: check, ecp_semi_local, explicit, explicit_basis, explicit_j, explicit_kgpot, &
1542 explicit_potential, explicit_u, explicit_u_m_j, nobasis, section_enabled, &
1543 subsection_enabled, update_input
1544 REAL(kind=dp) :: alpha, ccore, r, rc, zeff_correction
1545 REAL(kind=dp), DIMENSION(6) :: error
1546 REAL(kind=dp), DIMENSION(:), POINTER :: a_nl, aloc, anlcc, cloc, cnlcc, nelec
1547 REAL(kind=dp), DIMENSION(:, :), POINTER :: h_nl
1548 REAL(kind=dp), DIMENSION(:, :, :), POINTER :: c_nl
1549 TYPE(atom_ecppot_type) :: ecppot
1550 TYPE(atom_sgp_potential_type) :: sgppot
1551 TYPE(atom_upfpot_type) :: upfpot
1552 TYPE(cp_logger_type), POINTER :: logger
1553 TYPE(gto_basis_set_type), POINTER :: orb_basis_set, sup_basis_set, &
1554 tmp_basis_set
1555 TYPE(section_vals_type), POINTER :: basis_section, bs_section, dft_plus_u_section, &
1556 dft_section, enforce_occupation_section, kgpot_section, pao_desc_section, &
1557 pao_pot_section, potential_section, spin_section
1558 TYPE(sto_basis_set_type), POINTER :: sto_basis_set
1559
1560 CALL timeset(routinen, handle)
1561
1562 NULLIFY (logger)
1563 logger => cp_get_default_logger()
1564 iounit = cp_logger_get_default_io_unit(logger)
1565
1566 NULLIFY (elec_conf)
1567
1568 update_input = .true.
1569 basis_set_name(:) = ""
1570 basis_set_type(:) = ""
1571 basis_set_form(:) = ""
1572 potential_name = ""
1573 potential_type = ""
1574 kgpot_name = ""
1575 kgpot_type = ""
1576 z = -1
1577 zeff_correction = 0.0_dp
1578 explicit = .false.
1579 explicit_basis = .false.
1580 explicit_j = .false.
1581 explicit_kgpot = .false.
1582 explicit_potential = .false.
1583 explicit_u = .false.
1584 explicit_u_m_j = .false.
1585
1586 dft_section => section_vals_get_subs_vals(force_env_section, "DFT")
1587 CALL section_vals_get(kind_section, n_repetition=n_rep)
1588 k_rep = -1
1589 akind_name = qs_kind%name
1590 CALL uppercase(akind_name)
1591 ! First we use the atom_name to find out the proper KIND section
1592 DO i_rep = 1, n_rep
1593 CALL section_vals_val_get(kind_section, "_SECTION_PARAMETERS_", &
1594 c_val=keyword, i_rep_section=i_rep)
1595 CALL uppercase(keyword)
1596 IF (keyword == akind_name) THEN
1597 k_rep = i_rep
1598 EXIT
1599 END IF
1600 END DO
1601 ! The search for the KIND section failed.. check for a QM/MM link atom
1602 IF (k_rep < 1) THEN
1603 ipos = index(qs_kind%name, "_")
1604 IF (((ipos == 2) .OR. (ipos == 3)) .AND. (index(qs_kind%name, "_ghost") == 0)) THEN
1605 ! If the atm_name could not match any KIND section it maybe be a QM/MM link atom.
1606 ! ghost atoms will be treated differently.
1607 akind_name = qs_kind%name(1:ipos - 1)
1608 CALL uppercase(akind_name)
1609 DO i_rep = 1, n_rep
1610 CALL section_vals_val_get(kind_section, "_SECTION_PARAMETERS_", &
1611 c_val=keyword, i_rep_section=i_rep)
1612 CALL uppercase(keyword)
1613 IF (keyword == akind_name) THEN
1614 k_rep = i_rep
1615 EXIT
1616 END IF
1617 END DO
1618 END IF
1619 END IF
1620 ! The search for the KIND section failed.. check element_symbol
1621 IF (k_rep < 1) THEN
1622 ! If it's not a link atom let's check for the element and map
1623 ! the KIND section to the element.
1624 element_symbol = qs_kind%element_symbol(1:2)
1625 CALL uppercase(element_symbol)
1626 DO i_rep = 1, n_rep
1627 CALL section_vals_val_get(kind_section, "_SECTION_PARAMETERS_", &
1628 c_val=keyword, i_rep_section=i_rep)
1629 CALL uppercase(keyword)
1630 IF (keyword == element_symbol) THEN
1631 k_rep = i_rep
1632 EXIT
1633 END IF
1634 END DO
1635 END IF
1636 ! In case it should not really match any possible KIND section
1637 ! let's look if a default one is defined..
1638 IF (k_rep < 1) THEN
1639 DO i_rep = 1, n_rep
1640 CALL section_vals_val_get(kind_section, "_SECTION_PARAMETERS_", &
1641 c_val=keyword, i_rep_section=i_rep)
1642 CALL uppercase(keyword)
1643 IF (keyword == "DEFAULT") THEN
1644 update_input = .false.
1645 k_rep = i_rep
1646 EXIT
1647 END IF
1648 END DO
1649 END IF
1650 IF (k_rep < 0 .AND. (.NOT. no_fail)) THEN
1651 CALL cp_abort(__location__, &
1652 "No &KIND section was possible to associate to the atomic kind <"// &
1653 trim(akind_name)//">. The KIND section were also scanned for the"// &
1654 " corresponding element <"//trim(qs_kind%element_symbol)//">"// &
1655 " and for the DEFAULT section but no match was found. Check your input file!")
1656 END IF
1657 ! Retrieve information on element
1658 CALL get_ptable_info(qs_kind%element_symbol, ielement=z)
1659
1660 ! Normal parsing of the KIND section
1661 IF (k_rep > 0) THEN
1662 ! new style basis set input
1663 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1664 keyword_name="BASIS_SET", &
1665 explicit=explicit, &
1666 n_rep_val=nb_rep)
1667 IF (.NOT. explicit) nb_rep = 0
1668 cpassert(nb_rep <= maxbas)
1669 DO i = 1, nb_rep
1670 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1671 keyword_name="BASIS_SET", i_rep_val=i, c_vals=tmpstringlist)
1672 IF (SIZE(tmpstringlist) == 1) THEN
1673 ! default is orbital type and GTO
1674 basis_set_type(i) = "ORB"
1675 basis_set_form(i) = "GTO"
1676 basis_set_name(i) = tmpstringlist(1)
1677 ELSEIF (SIZE(tmpstringlist) == 2) THEN
1678 ! default is GTO
1679 basis_set_type(i) = tmpstringlist(1)
1680 basis_set_form(i) = "GTO"
1681 basis_set_name(i) = tmpstringlist(2)
1682 ELSEIF (SIZE(tmpstringlist) == 3) THEN
1683 basis_set_type(i) = tmpstringlist(1)
1684 basis_set_form(i) = tmpstringlist(2)
1685 basis_set_name(i) = tmpstringlist(3)
1686 ELSE
1687 CALL cp_abort(__location__, &
1688 "invalid number of BASIS_SET keyword parameters: BASIS_SET [<TYPE>] [<FORM>] <NAME>")
1689 END IF
1690 ! check that we have a valid basis set form
1691 IF (basis_set_form(i) /= "GTO" .AND. basis_set_form(i) /= "STO") THEN
1692 cpabort("invalid BASIS_SET FORM parameter")
1693 END IF
1694 END DO
1695
1696 ! parse PAO keywords
1697 CALL section_vals_val_get(kind_section, keyword_name="PAO_BASIS_SIZE", i_rep_section=k_rep, &
1698 i_val=qs_kind%pao_basis_size)
1699 CALL section_vals_val_get(kind_section, keyword_name="PAO_MODEL_FILE", i_rep_section=k_rep, &
1700 explicit=explicit)
1701 IF (explicit) THEN
1702 CALL section_vals_val_get(kind_section, keyword_name="PAO_MODEL_FILE", i_rep_section=k_rep, &
1703 c_val=qs_kind%pao_model_file)
1704 END IF
1705
1706 ! parse PAO_POTENTIAL sections
1707 pao_pot_section => section_vals_get_subs_vals(kind_section, "PAO_POTENTIAL", i_rep_section=k_rep)
1708 CALL section_vals_get(pao_pot_section, n_repetition=npaopot)
1709 ALLOCATE (qs_kind%pao_potentials(npaopot))
1710 DO ipaopot = 1, npaopot
1711 CALL section_vals_val_get(pao_pot_section, keyword_name="MAXL", i_rep_section=ipaopot, &
1712 i_val=qs_kind%pao_potentials(ipaopot)%maxl)
1713 CALL section_vals_val_get(pao_pot_section, keyword_name="MAX_PROJECTOR", i_rep_section=ipaopot, &
1714 i_val=qs_kind%pao_potentials(ipaopot)%max_projector)
1715 CALL section_vals_val_get(pao_pot_section, keyword_name="BETA", i_rep_section=ipaopot, &
1716 r_val=qs_kind%pao_potentials(ipaopot)%beta)
1717 CALL section_vals_val_get(pao_pot_section, keyword_name="WEIGHT", i_rep_section=ipaopot, &
1718 r_val=qs_kind%pao_potentials(ipaopot)%weight)
1719 END DO
1720
1721 ! parse PAO_DESCRIPTOR sections
1722 pao_desc_section => section_vals_get_subs_vals(kind_section, "PAO_DESCRIPTOR", i_rep_section=k_rep)
1723 CALL section_vals_get(pao_desc_section, n_repetition=npaodesc)
1724 ALLOCATE (qs_kind%pao_descriptors(npaodesc))
1725 DO ipaodesc = 1, npaodesc
1726 CALL section_vals_val_get(pao_desc_section, keyword_name="BETA", i_rep_section=ipaodesc, &
1727 r_val=qs_kind%pao_descriptors(ipaodesc)%beta)
1728 CALL section_vals_val_get(pao_desc_section, keyword_name="SCREENING", i_rep_section=ipaodesc, &
1729 r_val=qs_kind%pao_descriptors(ipaodesc)%screening)
1730 CALL section_vals_val_get(pao_desc_section, keyword_name="WEIGHT", i_rep_section=ipaodesc, &
1731 r_val=qs_kind%pao_descriptors(ipaodesc)%weight)
1732 END DO
1733
1734 ! parse ELEC_CONF
1735 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1736 keyword_name="ELEC_CONF", n_rep_val=i)
1737 IF (i > 0) THEN
1738 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1739 keyword_name="ELEC_CONF", i_vals=elec_conf)
1740 CALL set_qs_kind(qs_kind, elec_conf=elec_conf)
1741 END IF
1742 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1743 keyword_name="CORE_CORRECTION", r_val=zeff_correction)
1744 ! parse POTENTIAL
1745 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1746 keyword_name="POTENTIAL_FILE_NAME", c_val=potential_fn_kind)
1747 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1748 keyword_name="POTENTIAL_TYPE", c_val=potential_type)
1749 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1750 explicit=explicit, keyword_name="POTENTIAL", c_vals=tmpstringlist)
1751 IF (explicit) THEN
1752 IF (SIZE(tmpstringlist) == 1) THEN
1753 ! old type of input: start of name defines type
1754 potential_name = tmpstringlist(1)
1755 IF (potential_type == "") THEN
1756 ipos = index(potential_name, "-")
1757 IF (ipos > 1) THEN
1758 potential_type = potential_name(:ipos - 1)
1759 ELSE
1760 potential_type = potential_name
1761 END IF
1762 END IF
1763 ELSEIF (SIZE(tmpstringlist) == 2) THEN
1764 potential_type = tmpstringlist(1)
1765 potential_name = tmpstringlist(2)
1766 ELSE
1767 cpabort("POTENTIAL input list is not correct")
1768 END IF
1769 END IF
1770 CALL uppercase(potential_type)
1771
1772 ! Parse KG POTENTIAL
1773 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1774 keyword_name="KG_POTENTIAL_FILE_NAME", c_val=kg_potential_fn_kind)
1775 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1776 keyword_name="KG_POTENTIAL", c_val=kgpot_name)
1777
1778 ! Semi-local vs. full nonlocal form of ECPs
1779 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1780 keyword_name="ECP_SEMI_LOCAL", l_val=ecp_semi_local)
1781
1782 ! Assign atomic covalent radius
1783 qs_kind%covalent_radius = ptable(z)%covalent_radius*bohr
1784 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1785 keyword_name="COVALENT_RADIUS", r_val=r)
1786 IF (r > 0.0_dp) qs_kind%covalent_radius = r
1787
1788 ! Assign atomic van der Waals radius
1789 qs_kind%vdw_radius = ptable(z)%vdw_radius*bohr
1790 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1791 keyword_name="VDW_RADIUS", r_val=r)
1792 IF (r > 0.0_dp) qs_kind%vdw_radius = r
1793
1794 ! Assign atom dependent defaults, only H special case
1795 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, n_rep_val=i, &
1796 keyword_name="HARD_EXP_RADIUS")
1797 IF (i == 0) THEN
1798 IF (z == 1) THEN
1799 qs_kind%hard_radius = 1.2_dp
1800 ELSE
1801 qs_kind%hard_radius = 0.8_dp*bohr
1802 END IF
1803 ELSE
1804 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1805 keyword_name="HARD_EXP_RADIUS", r_val=qs_kind%hard_radius)
1806 END IF
1807
1808 ! assign atom dependent defaults, only H special case
1809 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, n_rep_val=i, &
1810 keyword_name="RHO0_EXP_RADIUS")
1811 IF (i == 0) THEN
1812 qs_kind%hard0_radius = qs_kind%hard_radius
1813 ELSE
1814 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1815 keyword_name="RHO0_EXP_RADIUS", r_val=qs_kind%hard0_radius)
1816 END IF
1817 IF (qs_kind%hard_radius < qs_kind%hard0_radius) &
1818 cpabort("rc0 should be <= rc")
1819
1820 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1821 keyword_name="MAX_RAD_LOCAL", r_val=qs_kind%max_rad_local)
1822 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1823 keyword_name="LEBEDEV_GRID", i_val=qs_kind%ngrid_ang)
1824 IF (qs_kind%ngrid_ang <= 0) &
1825 cpabort("# point lebedev grid < 0")
1826 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1827 keyword_name="RADIAL_GRID", i_val=qs_kind%ngrid_rad)
1828 IF (qs_kind%ngrid_rad <= 0) &
1829 cpabort("# point radial grid < 0")
1830 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1831 keyword_name="GPW_TYPE", l_val=qs_kind%gpw_type_forced)
1832 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1833 keyword_name="GHOST", l_val=qs_kind%ghost)
1834 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1835 keyword_name="FLOATING_BASIS_CENTER", l_val=qs_kind%floating)
1836 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1837 keyword_name="NO_OPTIMIZE", l_val=qs_kind%no_optimize)
1838
1839 ! Magnetization
1840 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1841 keyword_name="MAGNETIZATION", r_val=qs_kind%magnetization)
1842 ! DFTB3 param
1843 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1844 keyword_name="DFTB3_PARAM", r_val=qs_kind%dudq_dftb3)
1845 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1846 keyword_name="LMAX_DFTB", i_val=qs_kind%lmax_dftb)
1847
1848 ! MAOS
1849 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
1850 keyword_name="MAO", i_val=qs_kind%mao)
1851
1852 ! Read the BS subsection of the current atomic kind, if enabled
1853 NULLIFY (bs_section)
1854 bs_section => section_vals_get_subs_vals(kind_section, "BS", &
1855 i_rep_section=k_rep)
1856 section_enabled = .false.
1857 CALL section_vals_val_get(bs_section, "_SECTION_PARAMETERS_", &
1858 l_val=section_enabled)
1859 IF (section_enabled) THEN
1860 ! test for conflict with magnetization
1861 IF (qs_kind%magnetization /= 0.0_dp) THEN
1862 CALL cp_abort(__location__, "BS Section is in conflict with non-zero magnetization "// &
1863 "for this atom kind.")
1864 END IF
1865 qs_kind%bs_occupation = .true.
1866 !Alpha spin
1867 NULLIFY (spin_section)
1868 spin_section => section_vals_get_subs_vals(bs_section, "ALPHA")
1869 CALL section_vals_get(spin_section, explicit=explicit)
1870 IF (explicit) THEN
1871 NULLIFY (add_el)
1872 CALL section_vals_val_get(spin_section, &
1873 keyword_name="NEL", i_vals=add_el)
1874 cpassert(ASSOCIATED(add_el))
1875 ALLOCATE (qs_kind%addel(SIZE(add_el), 2))
1876 qs_kind%addel = 0
1877 qs_kind%addel(1:SIZE(add_el), 1) = add_el(1:SIZE(add_el))
1878 NULLIFY (add_el)
1879 CALL section_vals_val_get(spin_section, &
1880 keyword_name="L", i_vals=add_el)
1881 cpassert(ASSOCIATED(add_el))
1882 cpassert(SIZE(add_el) == SIZE(qs_kind%addel, 1))
1883 ALLOCATE (qs_kind%laddel(SIZE(add_el), 2))
1884 qs_kind%laddel = 0
1885 qs_kind%laddel(1:SIZE(add_el), 1) = add_el(1:SIZE(add_el))
1886 ALLOCATE (qs_kind%naddel(SIZE(add_el), 2))
1887 qs_kind%naddel = 0
1888 NULLIFY (add_el)
1889 CALL section_vals_val_get(spin_section, &
1890 keyword_name="N", n_rep_val=i)
1891 IF (i > 0) THEN
1892 CALL section_vals_val_get(spin_section, &
1893 keyword_name="N", i_vals=add_el)
1894 IF (SIZE(add_el) == SIZE(qs_kind%addel, 1)) THEN
1895 qs_kind%naddel(1:SIZE(add_el), 1) = add_el(1:SIZE(add_el))
1896 END IF
1897 END IF
1898 END IF
1899 ! Beta spin
1900 NULLIFY (spin_section)
1901 spin_section => section_vals_get_subs_vals(bs_section, "BETA")
1902 CALL section_vals_get(spin_section, explicit=explicit)
1903 IF (explicit) THEN
1904 NULLIFY (add_el)
1905 CALL section_vals_val_get(spin_section, &
1906 keyword_name="NEL", i_vals=add_el)
1907 cpassert(SIZE(add_el) == SIZE(qs_kind%addel, 1))
1908 qs_kind%addel(1:SIZE(add_el), 2) = add_el(1:SIZE(add_el))
1909 qs_kind%addel(:, :) = qs_kind%addel(:, :)
1910 NULLIFY (add_el)
1911 CALL section_vals_val_get(spin_section, &
1912 keyword_name="L", i_vals=add_el)
1913 cpassert(SIZE(add_el) == SIZE(qs_kind%addel, 1))
1914 qs_kind%laddel(1:SIZE(add_el), 2) = add_el(1:SIZE(add_el))
1915
1916 CALL section_vals_val_get(spin_section, &
1917 keyword_name="N", n_rep_val=i)
1918 IF (i > 0) THEN
1919 NULLIFY (add_el)
1920 CALL section_vals_val_get(spin_section, &
1921 keyword_name="N", i_vals=add_el)
1922 IF (SIZE(add_el) == SIZE(qs_kind%addel, 1)) THEN
1923 qs_kind%naddel(1:SIZE(add_el), 2) = add_el(1:SIZE(add_el))
1924 END IF
1925 END IF
1926 END IF
1927 END IF
1928
1929 ! Read the DFT+U subsection of the current atomic kind, if enabled
1930
1931 NULLIFY (dft_plus_u_section)
1932 dft_plus_u_section => section_vals_get_subs_vals(kind_section, &
1933 subsection_name="DFT_PLUS_U", &
1934 i_rep_section=k_rep)
1935 section_enabled = .false.
1936 CALL section_vals_val_get(dft_plus_u_section, &
1937 keyword_name="_SECTION_PARAMETERS_", &
1938 l_val=section_enabled)
1939 IF (section_enabled) THEN
1940 ALLOCATE (qs_kind%dft_plus_u)
1941 NULLIFY (qs_kind%dft_plus_u%nelec)
1942 NULLIFY (qs_kind%dft_plus_u%orbitals)
1943 CALL section_vals_val_get(dft_plus_u_section, &
1944 keyword_name="L", &
1945 i_val=l)
1946 qs_kind%dft_plus_u%l = l
1947#if defined(__SIRIUS)
1948 CALL section_vals_val_get(dft_plus_u_section, &
1949 keyword_name="N", &
1950 i_val=nu)
1951 qs_kind%dft_plus_u%n = nu
1952
1953 CALL section_vals_val_get(dft_plus_u_section, &
1954 keyword_name="U", &
1955 r_val=qs_kind%dft_plus_u%U, &
1956 explicit=explicit_u)
1957
1958 CALL section_vals_val_get(dft_plus_u_section, &
1959 keyword_name="J", &
1960 r_val=qs_kind%dft_plus_u%J, &
1961 explicit=explicit_j)
1962
1963 CALL section_vals_val_get(dft_plus_u_section, &
1964 keyword_name="alpha", &
1965 r_val=qs_kind%dft_plus_u%alpha)
1966
1967 CALL section_vals_val_get(dft_plus_u_section, &
1968 keyword_name="beta", &
1969 r_val=qs_kind%dft_plus_u%beta)
1970
1971 CALL section_vals_val_get(dft_plus_u_section, &
1972 keyword_name="J0", &
1973 r_val=qs_kind%dft_plus_u%J0)
1974
1975 CALL section_vals_val_get(dft_plus_u_section, &
1976 keyword_name="occupation", &
1977 r_val=qs_kind%dft_plus_u%occupation)
1978#else
1979 nu = 0
1980#endif
1981
1982 CALL section_vals_val_get(dft_plus_u_section, &
1983 keyword_name="U_MINUS_J", &
1984 r_val=qs_kind%dft_plus_u%u_minus_j_target, &
1985 explicit=explicit_u_m_j)
1986
1987 IF ((explicit_u .OR. explicit_j) .AND. explicit_u_m_j) THEN
1988 cpabort("DFT+U| specifying U or J and U_MINUS_J parameters are mutually exclusive.")
1989 END IF
1990
1991 CALL section_vals_val_get(dft_plus_u_section, &
1992 keyword_name="U_RAMPING", &
1993 r_val=qs_kind%dft_plus_u%u_ramping)
1994 CALL section_vals_val_get(dft_plus_u_section, &
1995 keyword_name="INIT_U_RAMPING_EACH_SCF", &
1996 l_val=qs_kind%dft_plus_u%init_u_ramping_each_scf)
1997 IF (qs_kind%dft_plus_u%u_ramping > 0.0_dp) THEN
1998 qs_kind%dft_plus_u%u_minus_j = 0.0_dp
1999 ELSE
2000 qs_kind%dft_plus_u%u_minus_j = qs_kind%dft_plus_u%u_minus_j_target
2001 END IF
2002 CALL section_vals_val_get(dft_plus_u_section, &
2003 keyword_name="EPS_U_RAMPING", &
2004 r_val=qs_kind%dft_plus_u%eps_u_ramping)
2005
2006 NULLIFY (enforce_occupation_section)
2007 enforce_occupation_section => section_vals_get_subs_vals(dft_plus_u_section, &
2008 subsection_name="ENFORCE_OCCUPATION")
2009 subsection_enabled = .false.
2010 CALL section_vals_val_get(enforce_occupation_section, &
2011 keyword_name="_SECTION_PARAMETERS_", &
2012 l_val=subsection_enabled)
2013 IF (subsection_enabled) THEN
2014 NULLIFY (nelec)
2015 CALL section_vals_val_get(enforce_occupation_section, &
2016 keyword_name="NELEC", &
2017 r_vals=nelec)
2018 nspin = SIZE(nelec)
2019 ALLOCATE (qs_kind%dft_plus_u%nelec(nspin))
2020 qs_kind%dft_plus_u%nelec(:) = nelec(:)
2021 NULLIFY (orbitals)
2022 CALL section_vals_val_get(enforce_occupation_section, &
2023 keyword_name="ORBITALS", &
2024 i_vals=orbitals)
2025 norbitals = SIZE(orbitals)
2026 IF (norbitals <= 0 .OR. norbitals > 2*l + 1) &
2027 CALL cp_abort(__location__, "DFT+U| Invalid number of ORBITALS specified: "// &
2028 "1 to 2*L+1 integer numbers are expected")
2029 ALLOCATE (qs_kind%dft_plus_u%orbitals(norbitals))
2030 qs_kind%dft_plus_u%orbitals(:) = orbitals(:)
2031 NULLIFY (orbitals)
2032 DO m = 1, norbitals
2033 IF (qs_kind%dft_plus_u%orbitals(m) > l) &
2034 cpabort("DFT+U| Invalid orbital magnetic quantum number specified: m > l")
2035 IF (qs_kind%dft_plus_u%orbitals(m) < -l) &
2036 cpabort("DFT+U| Invalid orbital magnetic quantum number specified: m < -l")
2037 DO j = 1, norbitals
2038 IF (j /= m) THEN
2039 IF (qs_kind%dft_plus_u%orbitals(j) == qs_kind%dft_plus_u%orbitals(m)) &
2040 cpabort("DFT+U| An orbital magnetic quantum number was specified twice")
2041 END IF
2042 END DO
2043 END DO
2044 CALL section_vals_val_get(enforce_occupation_section, &
2045 keyword_name="EPS_SCF", &
2046 r_val=qs_kind%dft_plus_u%eps_scf)
2047 CALL section_vals_val_get(enforce_occupation_section, &
2048 keyword_name="MAX_SCF", &
2049 i_val=i)
2050 qs_kind%dft_plus_u%max_scf = max(-1, i)
2051 CALL section_vals_val_get(enforce_occupation_section, &
2052 keyword_name="SMEAR", &
2053 l_val=qs_kind%dft_plus_u%smear)
2054 END IF ! subsection enabled
2055 END IF ! section enabled
2056
2057 END IF
2058
2059 ! Allocate and initialise the orbital basis set data set structure
2060 CALL init_orbital_pointers(5) ! debug the SUN optimizer
2061
2062 ! BASIS and POTENTIAL read only when strictly necessary otherwise, even if not used
2063 ! we just print misleading informations
2064 explicit_basis = .false.
2065 IF (k_rep > 0) THEN
2066 basis_section => section_vals_get_subs_vals(kind_section, "BASIS", i_rep_section=k_rep, &
2067 can_return_null=.true.)
2068 CALL section_vals_get(basis_section, explicit=explicit_basis)
2069 END IF
2070
2071 explicit_potential = .false.
2072 IF (k_rep > 0) THEN
2073 potential_section => section_vals_get_subs_vals(kind_section, "POTENTIAL", &
2074 i_rep_section=k_rep, can_return_null=.true.)
2075 CALL section_vals_get(potential_section, explicit=explicit_potential)
2076 END IF
2077
2078 explicit_kgpot = .false.
2079 IF (k_rep > 0) THEN
2080 kgpot_section => section_vals_get_subs_vals(kind_section, "KG_POTENTIAL", &
2081 i_rep_section=k_rep, can_return_null=.true.)
2082 CALL section_vals_get(kgpot_section, explicit=explicit_kgpot)
2083 END IF
2084
2085 SELECT CASE (method_id)
2088 ! Allocate all_potential
2089 CALL allocate_potential(qs_kind%all_potential)
2090 CALL set_default_all_potential(qs_kind%all_potential, z, zeff_correction)
2091 CALL get_qs_kind(qs_kind, elec_conf=elec_conf)
2092 IF (.NOT. ASSOCIATED(elec_conf)) THEN
2093 CALL get_potential(potential=qs_kind%all_potential, elec_conf=elec_conf)
2094 CALL set_qs_kind(qs_kind, elec_conf=elec_conf)
2095 END IF
2096 cpassert(.NOT. qs_kind%floating)
2097 IF (qs_kind%ghost) THEN
2098 CALL get_qs_kind(qs_kind=qs_kind, elec_conf=elec_conf)
2099 elec_conf(:) = 0
2100 CALL get_potential(potential=qs_kind%all_potential, &
2101 elec_conf=elec_conf)
2102 elec_conf(:) = 0
2103 CALL set_potential(potential=qs_kind%all_potential, &
2104 zeff=0.0_dp, &
2105 zeff_correction=0.0_dp)
2106 END IF
2107
2108 ! Basis set (Parameters)
2109 ! Setup proper semiempirical parameters
2110 check = .NOT. ASSOCIATED(qs_kind%se_parameter)
2111 cpassert(check)
2112 CALL semi_empirical_create(qs_kind%se_parameter)
2113 ! Check if we allow p-orbitals on H
2114 SELECT CASE (z)
2115 CASE (1)
2116 IF (k_rep > 0) THEN
2117 CALL section_vals_val_get(kind_section, i_rep_section=k_rep, &
2118 keyword_name="SE_P_ORBITALS_ON_H", l_val=qs_kind%se_parameter%p_orbitals_on_h)
2119 END IF
2120 CASE DEFAULT
2121 ! No special cases for other elements..
2122 END SELECT
2123 ! Set default parameters
2124 CALL section_vals_val_get(dft_section, "QS%SE%STO_NG", i_val=ngauss)
2125 CALL se_param_set_default(qs_kind%se_parameter, z, method_id)
2126 NULLIFY (tmp_basis_set)
2127 CALL init_se_param(qs_kind%se_parameter, tmp_basis_set, ngauss)
2128 CALL add_basis_set_to_container(qs_kind%basis_sets, tmp_basis_set, "ORB")
2129 CALL init_potential(qs_kind%all_potential, itype="BARE", &
2130 zeff=qs_kind%se_parameter%zeff, zeff_correction=zeff_correction)
2131 qs_kind%se_parameter%zeff = qs_kind%se_parameter%zeff - zeff_correction
2132
2133 check = ((potential_name /= '') .OR. explicit_potential) .AND. .NOT. silent
2134 IF (check) &
2135 CALL cp_warn(__location__, &
2136 "Information provided in the input file regarding POTENTIAL for KIND <"// &
2137 trim(qs_kind%name)//"> will be ignored!")
2138
2139 check = ((k_rep > 0) .OR. explicit_basis) .AND. .NOT. silent
2140 IF (check) &
2141 CALL cp_warn(__location__, &
2142 "Information provided in the input file regarding BASIS for KIND <"// &
2143 trim(qs_kind%name)//"> will be ignored!")
2144
2145 CASE (do_method_dftb)
2146 ! Allocate all_potential
2147 CALL allocate_potential(qs_kind%all_potential)
2148 CALL set_default_all_potential(qs_kind%all_potential, z, zeff_correction)
2149 CALL get_qs_kind(qs_kind, elec_conf=elec_conf)
2150 IF (.NOT. ASSOCIATED(elec_conf)) THEN
2151 CALL get_potential(potential=qs_kind%all_potential, elec_conf=elec_conf)
2152 CALL set_qs_kind(qs_kind, elec_conf=elec_conf)
2153 END IF
2154 cpassert(.NOT. qs_kind%floating)
2155 IF (qs_kind%ghost) THEN
2156 CALL get_qs_kind(qs_kind=qs_kind, elec_conf=elec_conf)
2157 elec_conf(:) = 0
2158 CALL get_potential(potential=qs_kind%all_potential, &
2159 elec_conf=elec_conf)
2160 elec_conf(:) = 0
2161 CALL set_potential(potential=qs_kind%all_potential, &
2162 zeff=0.0_dp, &
2163 zeff_correction=0.0_dp)
2164 END IF
2165
2166 check = ((potential_name /= '') .OR. explicit_potential) .AND. .NOT. silent
2167 IF (check) &
2168 CALL cp_warn(__location__, &
2169 "Information provided in the input file regarding POTENTIAL for KIND <"// &
2170 trim(qs_kind%name)//"> will be ignored!")
2171
2172 check = ((k_rep > 0) .OR. explicit_basis) .AND. .NOT. silent
2173 IF (check) &
2174 CALL cp_warn(__location__, &
2175 "Information provided in the input file regarding BASIS for KIND <"// &
2176 trim(qs_kind%name)//"> will be ignored!")
2177
2178 CASE (do_method_xtb)
2179 ! Allocate all_potential
2180 CALL allocate_potential(qs_kind%all_potential)
2181 CALL set_default_all_potential(qs_kind%all_potential, z, zeff_correction)
2182 CALL get_qs_kind(qs_kind, elec_conf=elec_conf)
2183 IF (.NOT. ASSOCIATED(elec_conf)) THEN
2184 CALL get_potential(potential=qs_kind%all_potential, elec_conf=elec_conf)
2185 CALL set_qs_kind(qs_kind, elec_conf=elec_conf)
2186 END IF
2187 cpassert(.NOT. qs_kind%floating)
2188 IF (qs_kind%ghost) THEN
2189 CALL get_qs_kind(qs_kind=qs_kind, elec_conf=elec_conf)
2190 elec_conf(:) = 0
2191 CALL get_potential(potential=qs_kind%all_potential, &
2192 elec_conf=elec_conf)
2193 elec_conf(:) = 0
2194 CALL set_potential(potential=qs_kind%all_potential, &
2195 zeff=0.0_dp, &
2196 zeff_correction=0.0_dp)
2197 END IF
2198
2199 check = ((potential_name /= '') .OR. explicit_potential) .AND. .NOT. silent
2200 IF (check) &
2201 CALL cp_warn(__location__, &
2202 "Information provided in the input file regarding POTENTIAL for KIND <"// &
2203 trim(qs_kind%name)//"> will be ignored!")
2204
2205 check = ((k_rep > 0) .OR. explicit_basis) .AND. .NOT. silent
2206 IF (check) &
2207 CALL cp_warn(__location__, &
2208 "Information provided in the input file regarding BASIS for KIND <"// &
2209 trim(qs_kind%name)//"> will be ignored!")
2210
2211 CASE (do_method_pw)
2212 ! PW DFT
2213 ! Allocate and initialise the potential data set structure
2214 IF (potential_name /= '') THEN
2215 SELECT CASE (trim(potential_type))
2216 CASE ("ALL", "ECP")
2217 CALL cp_abort(__location__, &
2218 "PW DFT calculations only with potential type UPF or GTH possible."// &
2219 " <"//trim(potential_type)//"> was specified "// &
2220 "for the atomic kind <"//trim(qs_kind%name))
2221 CASE ("GTH")
2222 IF (potential_fn_kind == "-") THEN
2223 CALL section_vals_val_get(dft_section, "POTENTIAL_FILE_NAME", c_val=potential_file_name)
2224 ELSE
2225 potential_file_name = potential_fn_kind
2226 END IF
2227 CALL allocate_potential(qs_kind%gth_potential)
2228 CALL read_potential(qs_kind%element_symbol, potential_name, &
2229 qs_kind%gth_potential, zeff_correction, para_env, &
2230 potential_file_name, potential_section, update_input)
2231 CALL set_potential(qs_kind%gth_potential, z=z)
2232 CALL get_qs_kind(qs_kind, elec_conf=elec_conf)
2233 IF (.NOT. ASSOCIATED(elec_conf)) THEN
2234 CALL get_potential(potential=qs_kind%gth_potential, elec_conf=elec_conf)
2235 CALL set_qs_kind(qs_kind, elec_conf=elec_conf)
2236 ELSE
2237 CALL set_potential(potential=qs_kind%gth_potential, elec_conf=elec_conf)
2238 END IF
2239 CASE ("UPF")
2240 ALLOCATE (qs_kind%upf_potential)
2241 qs_kind%upf_potential%zion = 0
2242 qs_kind%upf_potential%filename = adjustl(trim(potential_name))
2243 CALL get_qs_kind(qs_kind, elec_conf=elec_conf)
2244 IF (.NOT. ASSOCIATED(elec_conf)) THEN
2245 CALL set_qs_kind(qs_kind, elec_conf=qs_kind%upf_potential%econf)
2246 END IF
2247 CASE DEFAULT
2248 CALL cp_abort(__location__, &
2249 "An invalid potential type <"// &
2250 trim(potential_type)//"> was specified "// &
2251 "for the atomic kind <"// &
2252 trim(qs_kind%name))
2253 END SELECT
2254 ELSE
2255 CALL cp_abort(__location__, &
2256 "No potential type was defined for the "// &
2257 "atomic kind <"//trim(qs_kind%name)//">")
2258 END IF
2259
2260 CASE DEFAULT
2261
2262 ! set ngauss for STO expansion
2263 CALL section_vals_val_get(dft_section, "QS%STO_NG", i_val=ngauss)
2264 ! Allocate and initialise the basis set data set structure
2265 ! first external basis sets
2266 DO i = 1, nb_rep
2267 SELECT CASE (basis_set_form(i))
2268 CASE ("GTO")
2269 NULLIFY (tmp_basis_set)
2270 CALL allocate_gto_basis_set(tmp_basis_set)
2271 CALL read_gto_basis_set(qs_kind%element_symbol, basis_set_name(i), &
2272 tmp_basis_set, para_env, dft_section)
2273 CASE ("STO")
2274 NULLIFY (sto_basis_set)
2275 CALL allocate_sto_basis_set(sto_basis_set)
2276 CALL read_sto_basis_set(qs_kind%element_symbol, basis_set_name(i), &
2277 sto_basis_set, para_env, dft_section)
2278 NULLIFY (tmp_basis_set)
2279 CALL create_gto_from_sto_basis(sto_basis_set, tmp_basis_set, ngauss)
2280 CALL deallocate_sto_basis_set(sto_basis_set)
2281 CASE DEFAULT
2282 CALL cp_abort(__location__, &
2283 "Invalid basis set form "//trim(basis_set_form(i))// &
2284 "for atomic kind <"//trim(qs_kind%name)//">")
2285 END SELECT
2286 tmp = basis_set_type(i)
2287 CALL uppercase(tmp)
2288 CALL add_basis_set_to_container(qs_kind%basis_sets, tmp_basis_set, tmp)
2289 END DO
2290 ! now explicit basis sets
2291 IF (explicit_basis) THEN
2292 CALL section_vals_get(basis_section, n_repetition=nexp)
2293 DO i = 1, nexp
2294 NULLIFY (tmp_basis_set)
2295 CALL allocate_gto_basis_set(tmp_basis_set)
2296 CALL read_gto_basis_set(qs_kind%element_symbol, basis_type, &
2297 tmp_basis_set, basis_section, i, dft_section)
2298 tmp = basis_type
2299 CALL uppercase(tmp)
2300 CALL add_basis_set_to_container(qs_kind%basis_sets, tmp_basis_set, tmp)
2301 END DO
2302 END IF
2303 ! combine multiple basis sets
2304 DO i = 1, SIZE(qs_kind%basis_sets)
2305 NULLIFY (tmp_basis_set)
2306 CALL get_basis_from_container(qs_kind%basis_sets, basis_set=tmp_basis_set, &
2307 inumbas=i, basis_type=basis_type)
2308 IF (basis_type == "") cycle
2309 jj = i
2310 DO j = i + 1, SIZE(qs_kind%basis_sets)
2311 jj = jj + 1
2312 NULLIFY (sup_basis_set)
2313 CALL get_basis_from_container(qs_kind%basis_sets, basis_set=sup_basis_set, &
2314 inumbas=jj, basis_type=tmp)
2315 IF (basis_type == tmp) THEN
2316 ! we found a match, combine the basis sets and delete the second
2317 CALL combine_basis_sets(tmp_basis_set, sup_basis_set)
2318 CALL remove_basis_from_container(qs_kind%basis_sets, jj)
2319 jj = jj - 1
2320 END IF
2321 END DO
2322 NULLIFY (sup_basis_set)
2323 END DO
2324
2325 ! check that we have an orbital basis set
2326 nobasis = .true.
2327 DO i = 1, SIZE(qs_kind%basis_sets)
2328 NULLIFY (tmp_basis_set)
2329 CALL get_basis_from_container(qs_kind%basis_sets, basis_set=tmp_basis_set, &
2330 inumbas=i, basis_type=basis_type)
2331 IF (basis_type == "ORB") nobasis = .false.
2332 END DO
2333 IF (nobasis) THEN
2334 CALL cp_abort(__location__, &
2335 "No basis set type was defined for the "// &
2336 "atomic kind <"//trim(qs_kind%name)//">")
2337 END IF
2338
2339 ! If Ghost atom we don't need to allocate/initialize anything connected to POTENTIAL
2340 IF (qs_kind%ghost .OR. qs_kind%floating) THEN
2341 IF (ASSOCIATED(qs_kind%elec_conf)) qs_kind%elec_conf = 0
2342 ELSE
2343 ! Allocate and initialise the potential data set structure
2344 IF ((potential_name /= '') .OR. explicit_potential) THEN
2345 ! determine the pseudopotential file to search
2346 IF (potential_fn_kind == "-") THEN
2347 CALL section_vals_val_get(dft_section, "POTENTIAL_FILE_NAME", c_val=potential_file_name)
2348 ELSE
2349 potential_file_name = potential_fn_kind
2350 END IF
2351 !
2352 SELECT CASE (trim(potential_type))
2353 CASE ("ALL")
2354 CALL allocate_potential(qs_kind%all_potential)
2355 CALL read_potential(qs_kind%element_symbol, potential_name, &
2356 qs_kind%all_potential, zeff_correction, para_env, &
2357 potential_file_name, potential_section, update_input)
2358 CALL set_potential(qs_kind%all_potential, z=z)
2359 CALL get_qs_kind(qs_kind, elec_conf=elec_conf)
2360 IF (.NOT. ASSOCIATED(elec_conf)) THEN
2361 CALL get_potential(potential=qs_kind%all_potential, elec_conf=elec_conf)
2362 CALL set_qs_kind(qs_kind, elec_conf=elec_conf)
2363 ELSE
2364 CALL set_potential(potential=qs_kind%all_potential, elec_conf=elec_conf)
2365 END IF
2366 CASE ("GTH")
2367 CALL allocate_potential(qs_kind%gth_potential)
2368 CALL read_potential(qs_kind%element_symbol, potential_name, &
2369 qs_kind%gth_potential, zeff_correction, para_env, &
2370 potential_file_name, potential_section, update_input)
2371 CALL set_potential(qs_kind%gth_potential, z=z)
2372 CALL get_qs_kind(qs_kind, elec_conf=elec_conf)
2373 IF (.NOT. ASSOCIATED(elec_conf)) THEN
2374 CALL get_potential(potential=qs_kind%gth_potential, elec_conf=elec_conf)
2375 CALL set_qs_kind(qs_kind, elec_conf=elec_conf)
2376 ELSE
2377 CALL set_potential(potential=qs_kind%gth_potential, elec_conf=elec_conf)
2378 END IF
2379 CASE ("ECP")
2380 CALL allocate_potential(qs_kind%sgp_potential)
2381 CALL get_potential(qs_kind%sgp_potential, description=description)
2382 CALL read_ecp_potential(ptable(z)%symbol, ecppot, &
2383 potential_name, potential_file_name, potential_section)
2384 IF (ecp_semi_local) THEN
2385 description(1) = "Semi-local Gaussian pseudopotential "
2386 description(2) = "ECP "//trim(potential_name)
2387 description(3) = "LIBGRPP: A. V. Oleynichenko et al., Symmetry 15 197 2023"
2388 description(4) = " "
2389 ELSE
2390 description(4) = "ECP "//trim(potential_name)
2391 END IF
2392 CALL set_potential(qs_kind%sgp_potential, name=ecppot%pname, description=description, &
2393 zeff=ecppot%zion, z=z, ecp_local=.true., ecp_semi_local=ecp_semi_local, &
2394 nloc=ecppot%nloc, nrloc=ecppot%nrloc, aloc=ecppot%aloc, bloc=ecppot%bloc, &
2395 has_nlcc=.false.)
2396 CALL set_potential(qs_kind%sgp_potential, sl_lmax=ecppot%lmax, &
2397 npot=ecppot%npot, nrpot=ecppot%nrpot, apot=ecppot%apot, bpot=ecppot%bpot)
2398 ! convert PP
2399 IF (.NOT. ecp_semi_local) THEN
2400 cpabort("ECPs are only well tested in their semi-local form")
2401 CALL get_qs_kind(qs_kind, basis_set=orb_basis_set)
2402 CALL sgp_construction(sgp_pot=sgppot, ecp_pot=ecppot, orb_basis=orb_basis_set, error=error)
2403 IF (iounit > 0 .AND. .NOT. silent) THEN
2404 WRITE (iounit, "(/,T2,'PP Transformation for ',A)") trim(ecppot%pname)
2405 IF (sgppot%has_local) THEN
2406 WRITE (iounit, "(T8,'Accuracy for local part:',T41,F10.3,'%',T61,F20.12)") error(4), error(1)
2407 END IF
2408 IF (sgppot%has_nonlocal) THEN
2409 WRITE (iounit, "(T8,'Accuracy for nonlocal part:',T41,F10.3,'%',T61,F20.12)") error(5), error(2)
2410 END IF
2411 IF (sgppot%has_nlcc) THEN
2412 WRITE (iounit, "(T8,'Accuracy for NLCC density:',T61,F20.12)") error(3)
2413 END IF
2414 END IF
2415 END IF
2416 IF (sgppot%has_nonlocal) THEN
2417 CALL set_potential(qs_kind%sgp_potential, n_nonlocal=sgppot%n_nonlocal, lmax=sgppot%lmax, &
2418 is_nonlocal=sgppot%is_nonlocal)
2419 nnl = sgppot%n_nonlocal
2420 nppnl = 0
2421 DO l = 0, sgppot%lmax
2422 nppnl = nppnl + nnl*nco(l)
2423 END DO
2424 l = sgppot%lmax
2425 ALLOCATE (a_nl(nnl), h_nl(nnl, 0:l), c_nl(nnl, nnl, 0:l))
2426 a_nl(:) = sgppot%a_nonlocal(:)
2427 h_nl(:, :) = sgppot%h_nonlocal(:, :)
2428 DO l = 0, sgppot%lmax
2429 c_nl(:, :, l) = sgppot%c_nonlocal(:, :, l)*sqrt(2._dp*l + 1.0_dp)
2430 END DO
2431 CALL set_potential(qs_kind%sgp_potential, nppnl=nppnl, a_nonlocal=a_nl, h_nonlocal=h_nl, c_nonlocal=c_nl)
2432 ELSE
2433 CALL set_potential(qs_kind%sgp_potential, n_nonlocal=0, lmax=-1, is_nonlocal=sgppot%is_nonlocal)
2434 CALL set_potential(qs_kind%sgp_potential, nppnl=0)
2435 END IF
2436 !
2437 cpassert(.NOT. sgppot%has_local)
2438 cpassert(.NOT. sgppot%has_nlcc)
2439 ! core
2440 rc = 0.5_dp*qs_kind%covalent_radius*angstrom
2441 rc = max(rc, 0.2_dp)
2442 rc = min(rc, 1.0_dp)
2443 alpha = 1.0_dp/(2.0_dp*rc**2)
2444 ccore = ecppot%zion*sqrt((alpha/pi)**3)
2445 CALL set_potential(qs_kind%sgp_potential, alpha_core_charge=alpha, ccore_charge=ccore, &
2446 core_charge_radius=rc)
2447 CALL atom_sgp_release(sgppot)
2448 CALL get_qs_kind(qs_kind, elec_conf=elec_conf)
2449 IF (.NOT. ASSOCIATED(elec_conf)) THEN
2450 CALL set_qs_kind(qs_kind, elec_conf=ecppot%econf)
2451 END IF
2452 CALL get_qs_kind(qs_kind, elec_conf=elec_conf)
2453 CALL set_potential(qs_kind%sgp_potential, elec_conf=elec_conf)
2454 CASE ("UPF")
2455 CALL allocate_potential(qs_kind%sgp_potential)
2456 CALL get_potential(qs_kind%sgp_potential, description=description)
2457 description(4) = "UPF "//trim(potential_name)
2458 CALL atom_read_upf(upfpot, potential_name)
2459 CALL set_potential(qs_kind%sgp_potential, name=upfpot%pname, description=description, &
2460 zeff=upfpot%zion, z=z, has_nlcc=upfpot%core_correction)
2461 ! convert pp
2462 CALL sgp_construction(sgp_pot=sgppot, upf_pot=upfpot, error=error)
2463 IF (iounit > 0 .AND. .NOT. silent) THEN
2464 WRITE (iounit, "(/,T2,'PP Transformation for ',A)") trim(upfpot%pname)
2465 IF (sgppot%has_local) THEN
2466 WRITE (iounit, "(T8,'Accuracy for local part:',T61,F20.12)") error(1)
2467 END IF
2468 IF (sgppot%has_nonlocal) THEN
2469 WRITE (iounit, "(T8,'Accuracy for nonlocal part:',T61,F20.12)") error(2)
2470 END IF
2471 IF (sgppot%has_nlcc) THEN
2472 WRITE (iounit, "(T8,'Accuracy for NLCC density:',T61,F20.12)") error(3)
2473 END IF
2474 END IF
2475 IF (sgppot%has_nonlocal) THEN
2476 CALL set_potential(qs_kind%sgp_potential, n_nonlocal=sgppot%n_nonlocal, lmax=sgppot%lmax, &
2477 is_nonlocal=sgppot%is_nonlocal)
2478 nnl = sgppot%n_nonlocal
2479 nppnl = 0
2480 DO l = 0, sgppot%lmax
2481 nppnl = nppnl + nnl*nco(l)
2482 END DO
2483 l = sgppot%lmax
2484 ALLOCATE (a_nl(nnl), h_nl(nnl, 0:l), c_nl(nnl, nnl, 0:l))
2485 a_nl(:) = sgppot%a_nonlocal(:)
2486 h_nl(:, :) = sgppot%h_nonlocal(:, :)
2487 c_nl(:, :, :) = sgppot%c_nonlocal(:, :, :)
2488 CALL set_potential(qs_kind%sgp_potential, nppnl=nppnl, a_nonlocal=a_nl, h_nonlocal=h_nl, c_nonlocal=c_nl)
2489 ELSE
2490 CALL set_potential(qs_kind%sgp_potential, n_nonlocal=0, lmax=-1, is_nonlocal=sgppot%is_nonlocal)
2491 CALL set_potential(qs_kind%sgp_potential, nppnl=0)
2492 END IF
2493 cpassert(sgppot%has_local)
2494 ! core
2495 rc = sgppot%ac_local
2496 alpha = 1.0_dp/(2.0_dp*rc**2)
2497 ccore = upfpot%zion*sqrt((alpha/pi)**3)
2498 CALL set_potential(qs_kind%sgp_potential, alpha_core_charge=alpha, ccore_charge=ccore, &
2499 core_charge_radius=rc)
2500 ! local potential
2501 nloc = sgppot%n_local
2502 ALLOCATE (aloc(nloc), cloc(nloc))
2503 aloc(1:nloc) = sgppot%a_local(1:nloc)
2504 cloc(1:nloc) = sgppot%c_local(1:nloc)
2505 CALL set_potential(qs_kind%sgp_potential, n_local=nloc, a_local=aloc, c_local=cloc)
2506 IF (sgppot%has_nlcc) THEN
2507 nlcc = sgppot%n_nlcc
2508 ALLOCATE (anlcc(nlcc), cnlcc(nlcc))
2509 anlcc(1:nlcc) = sgppot%a_nlcc(1:nlcc)
2510 cnlcc(1:nlcc) = sgppot%c_nlcc(1:nlcc)
2511 CALL set_potential(qs_kind%sgp_potential, has_nlcc=.true., n_nlcc=nlcc, a_nlcc=anlcc, c_nlcc=cnlcc)
2512 END IF
2513 CALL set_potential(qs_kind%sgp_potential, z=z)
2514 CALL get_qs_kind(qs_kind, elec_conf=elec_conf)
2515 IF (.NOT. ASSOCIATED(elec_conf)) THEN
2516 CALL set_qs_kind(qs_kind, elec_conf=upfpot%econf)
2517 END IF
2518 CALL get_qs_kind(qs_kind, elec_conf=elec_conf)
2519 CALL set_potential(qs_kind%sgp_potential, elec_conf=elec_conf)
2520 CALL atom_release_upf(upfpot)
2521 CALL atom_sgp_release(sgppot)
2522 CASE DEFAULT
2523 CALL cp_abort(__location__, &
2524 "An invalid potential type <"// &
2525 trim(potential_name)//"> was specified "// &
2526 "for the atomic kind <"// &
2527 trim(qs_kind%name))
2528 END SELECT
2529 ELSE
2530 CALL cp_abort(__location__, &
2531 "No potential type was defined for the "// &
2532 "atomic kind <"//trim(qs_kind%name)//">")
2533 END IF
2534
2535 CALL check_potential_basis_compatibility(qs_kind)
2536
2537 ! Allocate and initialise the potential data set structure
2538 IF ((kgpot_name /= '') .OR. explicit_kgpot) THEN
2539 ipos = index(kgpot_name, "-")
2540 IF (ipos > 1) THEN
2541 kgpot_type = kgpot_name(:ipos - 1)
2542 ELSE
2543 kgpot_type = kgpot_name
2544 END IF
2545 CALL uppercase(kgpot_type)
2546
2547 SELECT CASE (trim(kgpot_type))
2548 CASE ("TNADD")
2549 ! determine the pseudopotential file to search
2550 IF (kg_potential_fn_kind == "-") THEN
2551 CALL section_vals_val_get(dft_section, "POTENTIAL_FILE_NAME", c_val=potential_file_name)
2552 ELSE
2553 potential_file_name = kg_potential_fn_kind
2554 END IF
2555 CALL allocate_potential(qs_kind%tnadd_potential)
2556 CALL read_potential(qs_kind%element_symbol, kgpot_name, &
2557 qs_kind%tnadd_potential, para_env, &
2558 potential_file_name, kgpot_section, update_input)
2559 CASE ("NONE")
2560 NULLIFY (qs_kind%tnadd_potential)
2561 CASE DEFAULT
2562 CALL cp_abort(__location__, &
2563 "An invalid kg_potential type <"// &
2564 trim(potential_name)//"> was specified "// &
2565 "for the atomic kind <"// &
2566 trim(qs_kind%name))
2567 END SELECT
2568 END IF
2569 END IF
2570 END SELECT
2571
2572 CALL timestop(handle)
2573
2574 END SUBROUTINE read_qs_kind
2575
2576! **************************************************************************************************
2577!> \brief Ensure pseudo-potential and basis set were optimized for same number of valence electrons
2578!> \param qs_kind ...
2579!> \author Ole Schuett
2580! **************************************************************************************************
2581 SUBROUTINE check_potential_basis_compatibility(qs_kind)
2582 TYPE(qs_kind_type), INTENT(INOUT) :: qs_kind
2583
2584 CHARACTER(LEN=default_string_length) :: name
2585 INTEGER :: nbs, npp
2586 TYPE(gth_potential_type), POINTER :: gth_potential
2587 TYPE(gto_basis_set_type), POINTER :: basis_set
2588
2589 CALL get_qs_kind(qs_kind, name=name, gth_potential=gth_potential, basis_set=basis_set)
2590
2591 npp = -1; nbs = -1
2592 IF (ASSOCIATED(gth_potential)) &
2593 npp = parse_valence_electrons(gth_potential%aliases)
2594 IF (ASSOCIATED(basis_set)) &
2595 nbs = parse_valence_electrons(basis_set%aliases)
2596
2597 IF (npp >= 0 .AND. nbs >= 0 .AND. npp /= nbs) &
2598 CALL cp_abort(__location__, "Basis-set and pseudo-potential of atomic kind '"//trim(name)//"'"// &
2599 " were optimized for different valence electron numbers.")
2600
2601 END SUBROUTINE check_potential_basis_compatibility
2602
2603! **************************************************************************************************
2604!> \brief Tries to parse valence eletron number using "-QXXX" notation, returns -1 if not found.
2605!> \param string ...
2606!> \return ...
2607!> \author Ole Schuett
2608! **************************************************************************************************
2609 FUNCTION parse_valence_electrons(string) RESULT(n)
2610 CHARACTER(*) :: string
2611 INTEGER :: n
2612
2613 INTEGER :: i, istat, j
2614
2615 i = index(string, "-Q", .true.)
2616 IF (i == 0) THEN
2617 n = -1
2618 ELSE
2619 j = scan(string(i + 2:), "- ")
2620 READ (string(i + 2:i + j), '(I3)', iostat=istat) n
2621 IF (istat /= 0) n = -1
2622 END IF
2623
2624 END FUNCTION
2625
2626! **************************************************************************************************
2627!> \brief Read an atomic kind set data set from the input file.
2628!> \param qs_kind_set ...
2629!> \param atomic_kind_set ...
2630!> \param kind_section ...
2631!> \param para_env ...
2632!> \param force_env_section ...
2633!> \param silent ...
2634! **************************************************************************************************
2635 SUBROUTINE create_qs_kind_set(qs_kind_set, atomic_kind_set, kind_section, para_env, &
2636 force_env_section, silent)
2637
2638 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
2639 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
2640 TYPE(section_vals_type), POINTER :: kind_section
2641 TYPE(mp_para_env_type), POINTER :: para_env
2642 TYPE(section_vals_type), POINTER :: force_env_section
2643 LOGICAL, INTENT(IN) :: silent
2644
2645 CHARACTER(len=*), PARAMETER :: routinen = 'create_qs_kind_set'
2646
2647 INTEGER :: handle, ikind, method, nkind, qs_method
2648 LOGICAL :: no_fail
2649
2650 CALL timeset(routinen, handle)
2651
2652 IF (ASSOCIATED(qs_kind_set)) cpabort("create_qs_kind_set: qs_kind_set already associated")
2653 IF (.NOT. ASSOCIATED(atomic_kind_set)) cpabort("create_qs_kind_set: atomic_kind_set not associated")
2654
2655 no_fail = .false.
2656
2657 ! Between all methods only SE and DFTB/xTB may not need a KIND section.
2658 CALL section_vals_val_get(force_env_section, "METHOD", i_val=method)
2659 IF (method == do_qs) THEN
2660 CALL section_vals_val_get(force_env_section, "DFT%QS%METHOD", i_val=qs_method)
2661 SELECT CASE (qs_method)
2664 no_fail = .true.
2665 CASE (do_method_dftb)
2666 no_fail = .true.
2667 CASE (do_method_xtb)
2668 no_fail = .true.
2669 END SELECT
2670 ELSE IF (method == do_sirius) THEN
2671 qs_method = do_method_pw
2672 ELSE
2673 qs_method = method
2674 END IF
2675
2676 nkind = SIZE(atomic_kind_set)
2677 ALLOCATE (qs_kind_set(nkind))
2678
2679 DO ikind = 1, nkind
2680 qs_kind_set(ikind)%name = atomic_kind_set(ikind)%name
2681 qs_kind_set(ikind)%element_symbol = atomic_kind_set(ikind)%element_symbol
2682 qs_kind_set(ikind)%natom = atomic_kind_set(ikind)%natom
2683 CALL read_qs_kind(qs_kind_set(ikind), kind_section, para_env, force_env_section, &
2684 no_fail, qs_method, silent)
2685 END DO
2686
2687 CALL timestop(handle)
2688
2689 END SUBROUTINE create_qs_kind_set
2690
2691! **************************************************************************************************
2692!> \brief This routines should perform only checks. no settings are allowed at
2693!> this level anymore..
2694!> \param qs_kind ...
2695!> \param dft_control ...
2696!> \param subsys_section ...
2697! **************************************************************************************************
2698 SUBROUTINE check_qs_kind(qs_kind, dft_control, subsys_section)
2699
2700 TYPE(qs_kind_type), POINTER :: qs_kind
2701 TYPE(dft_control_type), INTENT(IN) :: dft_control
2702 TYPE(section_vals_type), POINTER :: subsys_section
2703
2704 INTEGER :: gfn_type
2705 LOGICAL :: defined
2706 TYPE(qs_dftb_atom_type), POINTER :: dftb_parameter
2707 TYPE(semi_empirical_type), POINTER :: se_parameter
2708 TYPE(xtb_atom_type), POINTER :: xtb_parameter
2709
2710 IF (dft_control%qs_control%semi_empirical) THEN
2711 CALL get_qs_kind(qs_kind, se_parameter=se_parameter)
2712 cpassert(ASSOCIATED(se_parameter))
2713 CALL get_se_param(se_parameter, defined=defined)
2714 cpassert(defined)
2715 CALL write_se_param(se_parameter, subsys_section)
2716 ELSE IF (dft_control%qs_control%dftb) THEN
2717 CALL get_qs_kind(qs_kind, dftb_parameter=dftb_parameter)
2718 cpassert(ASSOCIATED(dftb_parameter))
2719 CALL get_dftb_atom_param(dftb_parameter, defined=defined)
2720 cpassert(defined)
2721 CALL write_dftb_atom_param(dftb_parameter, subsys_section)
2722 ELSE IF (dft_control%qs_control%xtb) THEN
2723 CALL get_qs_kind(qs_kind, xtb_parameter=xtb_parameter)
2724 cpassert(ASSOCIATED(xtb_parameter))
2725 gfn_type = dft_control%qs_control%xtb_control%gfn_type
2726 CALL write_xtb_atom_param(xtb_parameter, gfn_type, subsys_section)
2727 END IF
2728
2729 END SUBROUTINE check_qs_kind
2730
2731! **************************************************************************************************
2732!> \brief ...
2733!> \param qs_kind_set ...
2734!> \param dft_control ...
2735!> \param subsys_section ...
2736! **************************************************************************************************
2737 SUBROUTINE check_qs_kind_set(qs_kind_set, dft_control, subsys_section)
2738
2739 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
2740 TYPE(dft_control_type), INTENT(IN) :: dft_control
2741 TYPE(section_vals_type), POINTER :: subsys_section
2742
2743 CHARACTER(len=*), PARAMETER :: routinen = 'check_qs_kind_set'
2744
2745 INTEGER :: handle, ikind, nkind
2746 TYPE(qs_kind_type), POINTER :: qs_kind
2747
2748 CALL timeset(routinen, handle)
2749 IF (ASSOCIATED(qs_kind_set)) THEN
2750 nkind = SIZE(qs_kind_set)
2751 DO ikind = 1, nkind
2752 qs_kind => qs_kind_set(ikind)
2753 CALL check_qs_kind(qs_kind, dft_control, subsys_section)
2754 END DO
2755 IF (dft_control%qs_control%xtb) THEN
2756 CALL write_xtb_kab_param(qs_kind_set, subsys_section, &
2757 dft_control%qs_control%xtb_control)
2758 END IF
2759 ELSE
2760 cpabort("The pointer qs_kind_set is not associated")
2761 END IF
2762 CALL timestop(handle)
2763 END SUBROUTINE check_qs_kind_set
2764
2765! **************************************************************************************************
2766!> \brief ...
2767!> \param qs_kind_set ...
2768!> \param subsys_section ...
2769!> \param xtb_control ...
2770! **************************************************************************************************
2771 SUBROUTINE write_xtb_kab_param(qs_kind_set, subsys_section, xtb_control)
2772
2773 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
2774 TYPE(section_vals_type), POINTER :: subsys_section
2775 TYPE(xtb_control_type), POINTER :: xtb_control
2776
2777 CHARACTER(LEN=default_string_length) :: aname, bname
2778 INTEGER :: ikind, io_unit, jkind, nkind, za, zb
2779 TYPE(cp_logger_type), POINTER :: logger
2780 TYPE(qs_kind_type), POINTER :: qs_kinda, qs_kindb
2781 TYPE(xtb_atom_type), POINTER :: xtb_parameter_a, xtb_parameter_b
2782
2783 NULLIFY (logger)
2784 logger => cp_get_default_logger()
2785 IF (btest(cp_print_key_should_output(logger%iter_info, subsys_section, &
2786 "PRINT%KINDS/POTENTIAL"), cp_p_file)) THEN
2787
2788 io_unit = cp_print_key_unit_nr(logger, subsys_section, "PRINT%KINDS", extension=".Log")
2789 IF (io_unit > 0) THEN
2790
2791 WRITE (io_unit, "(/,T2,A)") "xTB| Kab parameters"
2792 nkind = SIZE(qs_kind_set)
2793 DO ikind = 1, nkind
2794 qs_kinda => qs_kind_set(ikind)
2795 CALL get_qs_kind(qs_kinda, xtb_parameter=xtb_parameter_a)
2796 CALL get_xtb_atom_param(xtb_parameter_a, aname=aname, z=za)
2797 DO jkind = ikind, nkind
2798 qs_kindb => qs_kind_set(jkind)
2799 CALL get_qs_kind(qs_kindb, xtb_parameter=xtb_parameter_b)
2800 CALL get_xtb_atom_param(xtb_parameter_b, aname=bname, z=zb)
2801 WRITE (io_unit, "(A,T10,A15,T25,A15,T71,F10.3)") &
2802 " Kab:", trim(aname), trim(bname), xtb_set_kab(za, zb, xtb_control)
2803 END DO
2804 END DO
2805 WRITE (io_unit, *)
2806
2807 END IF
2808
2809 CALL cp_print_key_finished_output(io_unit, logger, subsys_section, "PRINT%KINDS")
2810 END IF
2811
2812 END SUBROUTINE write_xtb_kab_param
2813
2814! **************************************************************************************************
2815!> \brief Set the components of an atomic kind data set.
2816!> \param qs_kind ...
2817!> \param paw_atom ...
2818!> \param ghost ...
2819!> \param floating ...
2820!> \param hard_radius ...
2821!> \param hard0_radius ...
2822!> \param covalent_radius ...
2823!> \param vdw_radius ...
2824!> \param lmax_rho0 ...
2825!> \param zeff ...
2826!> \param no_optimize ...
2827!> \param dispersion ...
2828!> \param u_minus_j ...
2829!> \param reltmat ...
2830!> \param dftb_parameter ...
2831!> \param xtb_parameter ...
2832!> \param elec_conf ...
2833!> \param pao_basis_size ...
2834! **************************************************************************************************
2835 SUBROUTINE set_qs_kind(qs_kind, paw_atom, ghost, floating, hard_radius, hard0_radius, &
2836 covalent_radius, vdw_radius, lmax_rho0, zeff, &
2837 no_optimize, dispersion, u_minus_j, reltmat, &
2838 dftb_parameter, xtb_parameter, &
2839 elec_conf, pao_basis_size)
2840
2841 TYPE(qs_kind_type), INTENT(INOUT) :: qs_kind
2842 LOGICAL, INTENT(IN), OPTIONAL :: paw_atom, ghost, floating
2843 REAL(kind=dp), INTENT(IN), OPTIONAL :: hard_radius, hard0_radius, &
2844 covalent_radius, vdw_radius
2845 INTEGER, INTENT(IN), OPTIONAL :: lmax_rho0
2846 REAL(kind=dp), INTENT(IN), OPTIONAL :: zeff
2847 LOGICAL, INTENT(IN), OPTIONAL :: no_optimize
2848 TYPE(qs_atom_dispersion_type), OPTIONAL, POINTER :: dispersion
2849 REAL(kind=dp), INTENT(IN), OPTIONAL :: u_minus_j
2850 REAL(kind=dp), DIMENSION(:, :), OPTIONAL, POINTER :: reltmat
2851 TYPE(qs_dftb_atom_type), OPTIONAL, POINTER :: dftb_parameter
2852 TYPE(xtb_atom_type), OPTIONAL, POINTER :: xtb_parameter
2853 INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: elec_conf
2854 INTEGER, INTENT(IN), OPTIONAL :: pao_basis_size
2855
2856 IF (PRESENT(dftb_parameter)) qs_kind%dftb_parameter => dftb_parameter
2857 IF (PRESENT(xtb_parameter)) qs_kind%xtb_parameter => xtb_parameter
2858 IF (PRESENT(elec_conf)) THEN
2859 IF (ASSOCIATED(qs_kind%elec_conf)) THEN
2860 DEALLOCATE (qs_kind%elec_conf)
2861 END IF
2862 ALLOCATE (qs_kind%elec_conf(0:SIZE(elec_conf) - 1))
2863 qs_kind%elec_conf(:) = elec_conf(:)
2864 END IF
2865 IF (PRESENT(paw_atom)) qs_kind%paw_atom = paw_atom
2866 IF (PRESENT(hard_radius)) qs_kind%hard_radius = hard_radius
2867 IF (PRESENT(hard0_radius)) qs_kind%hard0_radius = hard0_radius
2868 IF (PRESENT(covalent_radius)) qs_kind%covalent_radius = covalent_radius
2869 IF (PRESENT(vdw_radius)) qs_kind%vdw_radius = vdw_radius
2870 IF (PRESENT(lmax_rho0)) qs_kind%lmax_rho0 = lmax_rho0
2871 IF (PRESENT(zeff)) THEN
2872 IF (ASSOCIATED(qs_kind%all_potential)) THEN
2873 CALL set_potential(potential=qs_kind%all_potential, zeff=zeff)
2874 ELSE IF (ASSOCIATED(qs_kind%gth_potential)) THEN
2875 CALL set_potential(potential=qs_kind%gth_potential, zeff=zeff)
2876 ELSE IF (ASSOCIATED(qs_kind%sgp_potential)) THEN
2877 CALL set_potential(potential=qs_kind%sgp_potential, zeff=zeff)
2878 END IF
2879 END IF
2880 IF (PRESENT(ghost)) qs_kind%ghost = ghost
2881
2882 IF (PRESENT(floating)) qs_kind%floating = floating
2883
2884 IF (PRESENT(no_optimize)) qs_kind%no_optimize = no_optimize
2885
2886 IF (PRESENT(dispersion)) qs_kind%dispersion => dispersion
2887
2888 IF (PRESENT(u_minus_j)) THEN
2889 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
2890 qs_kind%dft_plus_u%u_minus_j = u_minus_j
2891 END IF
2892 END IF
2893
2894 IF (PRESENT(reltmat)) qs_kind%reltmat => reltmat
2895
2896 IF (PRESENT(pao_basis_size)) qs_kind%pao_basis_size = pao_basis_size
2897
2898 END SUBROUTINE set_qs_kind
2899
2900! **************************************************************************************************
2901!> \brief Write an atomic kind data set to the output unit.
2902!> \param qs_kind ...
2903!> \param kind_number ...
2904!> \param output_unit ...
2905!> \par History
2906!> Creation (09.02.2002,MK)
2907! **************************************************************************************************
2908 SUBROUTINE write_qs_kind(qs_kind, kind_number, output_unit)
2909
2910 TYPE(qs_kind_type), POINTER :: qs_kind
2911 INTEGER, INTENT(in) :: kind_number, output_unit
2912
2913 CHARACTER(LEN=3) :: yon
2914 CHARACTER(LEN=default_string_length) :: basis_type, bstring
2915 INTEGER :: ibas
2916 LOGICAL :: do_print
2917 TYPE(gto_basis_set_type), POINTER :: tmp_basis
2918
2919 IF (output_unit > 0) THEN
2920
2921 IF (ASSOCIATED(qs_kind)) THEN
2922 WRITE (unit=output_unit, fmt="(/,T2,I2,A,T57,A,T75,I6)") &
2923 kind_number, ". Atomic kind: "//trim(qs_kind%name), &
2924 "Number of atoms: ", qs_kind%natom
2925
2926 DO ibas = 1, SIZE(qs_kind%basis_sets, 1)
2927 NULLIFY (tmp_basis)
2928 CALL get_basis_from_container(qs_kind%basis_sets, basis_set=tmp_basis, &
2929 inumbas=ibas, basis_type=basis_type)
2930 do_print = .true.
2931 SELECT CASE (basis_type)
2932 CASE DEFAULT
2933 bstring = "Basis Set"
2934 do_print = .false.
2935 CASE ("ORB")
2936 bstring = "Orbital Basis Set"
2937 CASE ("ORB_SOFT")
2938 bstring = "GAPW Soft Basis Set"
2939 do_print = .false.
2940 CASE ("AUX")
2941 bstring = "Auxiliary Basis Set"
2942 CASE ("MIN")
2943 bstring = "Minimal Basis Set"
2944 CASE ("RI_AUX")
2945 bstring = "RI Auxiliary Basis Set"
2946 CASE ("AUX_FIT")
2947 bstring = "Auxiliary Fit Basis Set"
2948 CASE ("LRI_AUX")
2949 bstring = "LRI Basis Set"
2950 CASE ("P_LRI_AUX")
2951 bstring = "LRI Basis Set for TDDFPT"
2952 CASE ("RI_XAS")
2953 bstring = "RI XAS Basis Set"
2954 CASE ("RI_HFX")
2955 bstring = "RI HFX Basis Set"
2956 END SELECT
2957
2958 IF (do_print) THEN
2959 CALL write_orb_basis_set(tmp_basis, output_unit, bstring)
2960 END IF
2961
2962 END DO
2963
2964 IF (qs_kind%ghost) THEN
2965 WRITE (unit=output_unit, fmt="(/,T6,A)") &
2966 "The atoms of this atomic kind are GHOST atoms!"
2967 END IF
2968 IF (qs_kind%floating) THEN
2969 WRITE (unit=output_unit, fmt="(/,T6,A)") &
2970 "The atoms of this atomic kind are FLOATING BASIS FUNCTIONS."
2971 END IF
2972 IF (qs_kind%covalent_radius > 0.0_dp) THEN
2973 WRITE (unit=output_unit, fmt="(/,T8,A,T71,F10.3)") &
2974 "Atomic covalent radius [Angstrom]:", &
2975 qs_kind%covalent_radius*angstrom
2976 END IF
2977 IF (qs_kind%vdw_radius > 0.0_dp) THEN
2978 WRITE (unit=output_unit, fmt="(/,T8,A,T71,F10.3)") &
2979 "Atomic van der Waals radius [Angstrom]:", &
2980 qs_kind%vdw_radius*angstrom
2981 END IF
2982 IF (qs_kind%paw_atom) THEN
2983 WRITE (unit=output_unit, fmt="(/,T6,A)") &
2984 "The atoms of this atomic kind are PAW atoms (GAPW):"
2985 WRITE (unit=output_unit, fmt="(T8,A,T71,F10.3)") &
2986 "Hard Gaussian function radius:", qs_kind%hard_radius, &
2987 "Rho0 radius:", qs_kind%hard0_radius, &
2988 "Maximum GTO radius used for PAW projector construction:", &
2989 qs_kind%max_rad_local
2990 NULLIFY (tmp_basis)
2991 CALL get_basis_from_container(qs_kind%basis_sets, basis_set=tmp_basis, &
2992 basis_type="ORB_SOFT")
2993 CALL write_orb_basis_set(tmp_basis, output_unit, "GAPW Soft Basis Set")
2994 END IF
2995 ! Potentials
2996 IF (ASSOCIATED(qs_kind%all_potential)) CALL write_potential(qs_kind%all_potential, output_unit)
2997 IF (ASSOCIATED(qs_kind%gth_potential)) CALL write_potential(qs_kind%gth_potential, output_unit)
2998 IF (ASSOCIATED(qs_kind%sgp_potential)) CALL write_potential(qs_kind%sgp_potential, output_unit)
2999 IF (ASSOCIATED(qs_kind%tnadd_potential)) CALL write_potential(qs_kind%tnadd_potential, output_unit)
3000 IF (ASSOCIATED(qs_kind%dft_plus_u)) THEN
3001 WRITE (unit=output_unit, fmt="(/,T6,A,/,T8,A,T76,I5,/,T8,A,T73,F8.3)") &
3002 "A DFT+U correction is applied to atoms of this atomic kind:", &
3003 "Angular quantum momentum number L:", qs_kind%dft_plus_u%l, &
3004 "U(eff) = (U - J) value in [eV]:", qs_kind%dft_plus_u%u_minus_j_target*evolt
3005 IF (qs_kind%dft_plus_u%u_ramping > 0.0_dp) THEN
3006 IF (qs_kind%dft_plus_u%init_u_ramping_each_scf) THEN
3007 yon = "YES"
3008 ELSE
3009 yon = " NO"
3010 END IF
3011 WRITE (unit=output_unit, fmt="(T8,A,T73,F8.3,/,T8,A,T73,ES8.1,/,T8,A,T78,A3)") &
3012 "Increment for U ramping in [eV]:", qs_kind%dft_plus_u%u_ramping*evolt, &
3013 "SCF threshold value for U ramping:", qs_kind%dft_plus_u%eps_u_ramping, &
3014 "Set U ramping value to zero before each wavefunction optimisation:", yon
3015 END IF
3016 IF (ASSOCIATED(qs_kind%dft_plus_u%orbitals)) THEN
3017 WRITE (unit=output_unit, fmt="(T8,A)") &
3018 "An initial orbital occupation is requested:"
3019 IF (ASSOCIATED(qs_kind%dft_plus_u%nelec)) THEN
3020 IF (any(qs_kind%dft_plus_u%nelec(:) >= 0.5_dp)) THEN
3021 IF (SIZE(qs_kind%dft_plus_u%nelec) > 1) THEN
3022 WRITE (unit=output_unit, fmt="(T9,A,T75,F6.2)") &
3023 "Number of alpha electrons:", &
3024 qs_kind%dft_plus_u%nelec(1), &
3025 "Number of beta electrons:", &
3026 qs_kind%dft_plus_u%nelec(2)
3027 ELSE
3028 WRITE (unit=output_unit, fmt="(T9,A,T75,F6.2)") &
3029 "Number of electrons:", &
3030 qs_kind%dft_plus_u%nelec(1)
3031 END IF
3032 END IF
3033 END IF
3034 WRITE (unit=output_unit, fmt="(T9,A,(T78,I3))") &
3035 "Preferred (initial) orbital occupation order (orbital M values):", &
3036 qs_kind%dft_plus_u%orbitals(:)
3037 WRITE (unit=output_unit, fmt="(T9,A,T71,ES10.3,/,T9,A,T76,I5)") &
3038 "Threshold value for the SCF convergence criterion:", &
3039 qs_kind%dft_plus_u%eps_scf, &
3040 "Number of initial SCF iterations:", &
3041 qs_kind%dft_plus_u%max_scf
3042 IF (qs_kind%dft_plus_u%smear) THEN
3043 WRITE (unit=output_unit, fmt="(T9,A)") &
3044 "A smearing of the orbital occupations will be performed"
3045 END IF
3046 END IF
3047 END IF
3048 ELSE
3049 cpabort("")
3050 END IF
3051
3052 END IF
3053
3054 END SUBROUTINE write_qs_kind
3055
3056! **************************************************************************************************
3057!> \brief Write an atomic kind set data set to the output unit.
3058!> \param qs_kind_set ...
3059!> \param subsys_section ...
3060!> \par History
3061!> Creation (09.02.2002,MK)
3062! **************************************************************************************************
3063 SUBROUTINE write_qs_kind_set(qs_kind_set, subsys_section)
3064 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
3065 TYPE(section_vals_type), POINTER :: subsys_section
3066
3067 CHARACTER(len=*), PARAMETER :: routinen = 'write_qs_kind_set'
3068
3069 INTEGER :: handle, ikind, nkind, output_unit
3070 TYPE(cp_logger_type), POINTER :: logger
3071 TYPE(qs_kind_type), POINTER :: qs_kind
3072
3073 CALL timeset(routinen, handle)
3074
3075 NULLIFY (logger)
3076 logger => cp_get_default_logger()
3077 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
3078 "PRINT%KINDS", extension=".Log")
3079 IF (output_unit > 0) THEN
3080 IF (ASSOCIATED(qs_kind_set)) THEN
3081 WRITE (unit=output_unit, fmt="(/,/,T2,A)") "ATOMIC KIND INFORMATION"
3082 nkind = SIZE(qs_kind_set)
3083 DO ikind = 1, nkind
3084 qs_kind => qs_kind_set(ikind)
3085 CALL write_qs_kind(qs_kind, ikind, output_unit)
3086 END DO
3087 ELSE
3088 cpabort("")
3089 END IF
3090 END IF
3091
3092 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
3093 "PRINT%KINDS")
3094
3095 CALL timestop(handle)
3096
3097 END SUBROUTINE write_qs_kind_set
3098
3099! **************************************************************************************************
3100!> \brief Write all the GTO basis sets of an atomic kind set to the output
3101!> unit (for the printing of the unnormalized basis sets as read from
3102!> database).
3103!> \param qs_kind_set ...
3104!> \param subsys_section ...
3105!> \par History
3106!> Creation (17.01.2002,MK)
3107! **************************************************************************************************
3108 SUBROUTINE write_gto_basis_sets(qs_kind_set, subsys_section)
3109
3110 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
3111 TYPE(section_vals_type), POINTER :: subsys_section
3112
3113 CHARACTER(LEN=*), PARAMETER :: routinen = 'write_gto_basis_sets'
3114
3115 CHARACTER(LEN=default_string_length) :: basis_type, bstring
3116 INTEGER :: handle, ibas, ikind, nkind, output_unit
3117 TYPE(cp_logger_type), POINTER :: logger
3118 TYPE(gto_basis_set_type), POINTER :: tmp_basis
3119 TYPE(qs_kind_type), POINTER :: qs_kind
3120
3121 CALL timeset(routinen, handle)
3122
3123 NULLIFY (logger)
3124 logger => cp_get_default_logger()
3125 output_unit = cp_print_key_unit_nr(logger, subsys_section, &
3126 "PRINT%KINDS/BASIS_SET", &
3127 extension=".Log")
3128 IF (output_unit > 0) THEN
3129 IF (ASSOCIATED(qs_kind_set)) THEN
3130 WRITE (unit=output_unit, fmt="(/,/,T2,A)") &
3131 "BASIS SET INFORMATION (Unnormalised Gaussian-type functions)"
3132 nkind = SIZE(qs_kind_set)
3133 DO ikind = 1, nkind
3134 qs_kind => qs_kind_set(ikind)
3135 WRITE (unit=output_unit, fmt="(/,T2,I2,A)") &
3136 ikind, ". Atomic kind: "//trim(qs_kind%name)
3137
3138 DO ibas = 1, SIZE(qs_kind%basis_sets, 1)
3139 NULLIFY (tmp_basis)
3140 CALL get_basis_from_container(qs_kind%basis_sets, basis_set=tmp_basis, &
3141 inumbas=ibas, basis_type=basis_type)
3142 IF (basis_type == "") cycle
3143 SELECT CASE (basis_type)
3144 CASE DEFAULT
3145 bstring = "Basis Set"
3146 CASE ("ORB")
3147 bstring = "Orbital Basis Set"
3148 CASE ("ORB_SOFT")
3149 bstring = "GAPW Soft Basis Set"
3150 CASE ("AUX")
3151 bstring = "Auxiliary Basis Set"
3152 CASE ("MIN")
3153 bstring = "Minimal Basis Set"
3154 CASE ("RI_AUX")
3155 bstring = "RI Auxiliary Basis Set"
3156 CASE ("AUX_FIT")
3157 bstring = "Auxiliary Fit Basis Set"
3158 CASE ("LRI_AUX")
3159 bstring = "LRI Basis Set"
3160 CASE ("P_LRI_AUX")
3161 bstring = "LRI Basis Set for TDDFPT"
3162 CASE ("RI_HFX")
3163 bstring = "RI HFX Basis Set"
3164 END SELECT
3165
3166 IF (ASSOCIATED(tmp_basis)) CALL write_gto_basis_set(tmp_basis, output_unit, bstring)
3167
3168 END DO
3169
3170 END DO
3171 ELSE
3172 cpabort("")
3173 END IF
3174 END IF
3175
3176 CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
3177 "PRINT%KINDS/BASIS_SET")
3178
3179 CALL timestop(handle)
3180
3181 END SUBROUTINE write_gto_basis_sets
3182
3183! **************************************************************************************************
3184!> \brief ...
3185!> \param atomic_kind ...
3186!> \param qs_kind ...
3187!> \param ncalc ...
3188!> \param ncore ...
3189!> \param nelem ...
3190!> \param edelta ...
3191! **************************************************************************************************
3192 SUBROUTINE init_atom_electronic_state(atomic_kind, qs_kind, ncalc, ncore, nelem, edelta)
3193
3194 TYPE(atomic_kind_type), INTENT(IN) :: atomic_kind
3195 TYPE(qs_kind_type), INTENT(IN) :: qs_kind
3196 INTEGER, DIMENSION(0:lmat, 10), INTENT(OUT) :: ncalc, ncore, nelem
3197 REAL(kind=dp), DIMENSION(0:lmat, 10, 2), &
3198 INTENT(OUT) :: edelta
3199
3200 INTEGER :: i, ii, is, l, ll, ne, nn, z
3201 INTEGER, DIMENSION(:), POINTER :: econf
3202 INTEGER, DIMENSION(:, :), POINTER :: addel, laddel, naddel
3203 LOGICAL :: bs_occupation
3204 REAL(kind=dp) :: dmag, magnetization
3205 TYPE(gth_potential_type), POINTER :: gth_potential
3206 TYPE(sgp_potential_type), POINTER :: sgp_potential
3207
3208 CALL get_atomic_kind(atomic_kind, z=z)
3209 NULLIFY (gth_potential)
3210 CALL get_qs_kind(qs_kind, &
3211 gth_potential=gth_potential, &
3212 sgp_potential=sgp_potential, &
3213 magnetization=magnetization, &
3214 bs_occupation=bs_occupation, &
3215 addel=addel, laddel=laddel, naddel=naddel)
3216
3217 ! electronic state
3218 nelem = 0
3219 ncore = 0
3220 ncalc = 0
3221 edelta = 0.0_dp
3222 IF (ASSOCIATED(gth_potential)) THEN
3223 CALL get_potential(gth_potential, elec_conf=econf)
3224 CALL set_pseudo_state(econf, z, ncalc, ncore, nelem)
3225 ELSE IF (ASSOCIATED(sgp_potential)) THEN
3226 CALL get_potential(sgp_potential, elec_conf=econf)
3227 CALL set_pseudo_state(econf, z, ncalc, ncore, nelem)
3228 ELSE
3229 DO l = 0, min(lmat, ubound(ptable(z)%e_conv, 1))
3230 ll = 2*(2*l + 1)
3231 nn = ptable(z)%e_conv(l)
3232 ii = 0
3233 DO
3234 ii = ii + 1
3235 IF (nn <= ll) THEN
3236 nelem(l, ii) = nn
3237 EXIT
3238 ELSE
3239 nelem(l, ii) = ll
3240 nn = nn - ll
3241 END IF
3242 END DO
3243 END DO
3244 ncalc = nelem - ncore
3245 END IF
3246
3247 ! readjust the occupation number of the orbitals as requested by user
3248 ! this is done to break symmetry (bs) and bias the initial guess
3249 ! to the pre-defined multiplicity/charge state of the atom
3250 IF (bs_occupation) THEN
3251 DO is = 1, 2
3252 DO i = 1, SIZE(addel, 1)
3253 ne = addel(i, is)
3254 l = laddel(i, is)
3255 nn = naddel(i, is) - l
3256 IF (ne /= 0) THEN
3257 IF (nn == 0) THEN
3258 DO ii = SIZE(nelem, 2), 1, -1
3259 IF (ncalc(l, ii) > 0) THEN
3260 IF ((ncalc(l, ii) + ne) < 2*(2*l + 1) + 1) THEN
3261 edelta(l, ii, is) = edelta(l, ii, is) + ne
3262 nn = ii
3263 ELSE
3264 edelta(l, ii + 1, is) = edelta(l, ii + 1, is) + ne
3265 nn = ii + 1
3266 END IF
3267 EXIT
3268 ELSE IF (ii == 1) THEN
3269 edelta(l, ii, is) = edelta(l, ii, is) + ne
3270 nn = ii
3271 END IF
3272 END DO
3273 ELSE
3274 edelta(l, nn, is) = edelta(l, nn, is) + ne
3275 END IF
3276 IF (ncalc(l, nn) + edelta(l, nn, is) < 0) THEN
3277 edelta(l, nn, is) = -ncalc(l, nn)
3278 END IF
3279 END IF
3280 END DO
3281 END DO
3282 edelta = 0.5_dp*edelta
3283 ELSE IF (magnetization /= 0.0_dp) THEN
3284 dmag = 0.5_dp*abs(magnetization)
3285 DO l = 0, min(lmat, ubound(ptable(z)%e_conv, 1))
3286 ll = 2*(2*l + 1)
3287 ii = 0
3288 DO i = 1, SIZE(ncalc, 2)
3289 IF (ncalc(l, i) == 0) cycle
3290 IF (ncalc(l, i) == ll) cycle
3291 IF (ncalc(l, i) > dmag .AND. (ll - ncalc(l, i)) > dmag) THEN
3292 ii = i
3293 EXIT
3294 END IF
3295 END DO
3296 IF (ii /= 0) THEN
3297 edelta(l, ii, 1) = magnetization*0.5_dp
3298 edelta(l, ii, 2) = -magnetization*0.5_dp
3299 EXIT
3300 END IF
3301 END DO
3302 IF (ii == 0) THEN
3303 CALL cp_abort(__location__, &
3304 "Magnetization value cannot be imposed for this atom type")
3305 END IF
3306 END IF
3307
3308 IF (qs_kind%ghost .OR. qs_kind%floating) THEN
3309 nelem = 0
3310 ncore = 0
3311 ncalc = 0
3312 edelta = 0.0_dp
3313 END IF
3314
3315 END SUBROUTINE init_atom_electronic_state
3316
3317! **************************************************************************************************
3318!> \brief ...
3319!> \param econf ...
3320!> \param z ...
3321!> \param ncalc ...
3322!> \param ncore ...
3323!> \param nelem ...
3324! **************************************************************************************************
3325 SUBROUTINE set_pseudo_state(econf, z, ncalc, ncore, nelem)
3326 INTEGER, DIMENSION(:), POINTER :: econf
3327 INTEGER, INTENT(IN) :: z
3328 INTEGER, DIMENSION(0:lmat, 10), INTENT(OUT) :: ncalc, ncore, nelem
3329
3330 CHARACTER(LEN=default_string_length) :: message
3331 INTEGER :: ii, iounit, l, ll, lmin, nc, nn
3332 INTEGER, DIMENSION(0:lmat) :: econfx
3333 TYPE(cp_logger_type), POINTER :: logger
3334
3335 NULLIFY (logger)
3336 logger => cp_get_default_logger()
3337 iounit = cp_logger_get_default_io_unit(logger)
3338
3339 econfx = 0
3340 econfx(0:SIZE(econf) - 1) = econf
3341 IF (sum(econf) >= 0) THEN
3342 lmin = min(lmat, ubound(ptable(z)%e_conv, 1))
3343 ! number of core electrons
3344 nc = z - sum(econf)
3345 ! setup ncore
3346 ncore = 0
3347 SELECT CASE (nc)
3348 CASE (0)
3349 CASE (2)
3350 ncore(0, 1) = 2
3351 CASE (10)
3352 ncore(0, 1) = 2
3353 ncore(0, 2) = 2
3354 ncore(1, 1) = 6
3355 CASE (18)
3356 ncore(0, 1) = 2
3357 ncore(0, 2) = 2
3358 ncore(0, 3) = 2
3359 ncore(1, 1) = 6
3360 ncore(1, 2) = 6
3361 CASE (28)
3362 ncore(0, 1) = 2
3363 ncore(0, 2) = 2
3364 ncore(0, 3) = 2
3365 ncore(1, 1) = 6
3366 ncore(1, 2) = 6
3367 ncore(2, 1) = 10
3368 CASE (36)
3369 ncore(0, 1) = 2
3370 ncore(0, 2) = 2
3371 ncore(0, 3) = 2
3372 ncore(0, 4) = 2
3373 ncore(1, 1) = 6
3374 ncore(1, 2) = 6
3375 ncore(1, 3) = 6
3376 ncore(2, 1) = 10
3377 CASE (46)
3378 ncore(0, 1) = 2
3379 ncore(0, 2) = 2
3380 ncore(0, 3) = 2
3381 ncore(0, 4) = 2
3382 ncore(1, 1) = 6
3383 ncore(1, 2) = 6
3384 ncore(1, 3) = 6
3385 ncore(2, 1) = 10
3386 ncore(2, 2) = 10
3387 CASE (54)
3388 ncore(0, 1) = 2
3389 ncore(0, 2) = 2
3390 ncore(0, 3) = 2
3391 ncore(0, 4) = 2
3392 ncore(0, 5) = 2
3393 ncore(1, 1) = 6
3394 ncore(1, 2) = 6
3395 ncore(1, 3) = 6
3396 ncore(1, 4) = 6
3397 ncore(2, 1) = 10
3398 ncore(2, 2) = 10
3399 CASE (60)
3400 ncore(0, 1) = 2
3401 ncore(0, 2) = 2
3402 ncore(0, 3) = 2
3403 ncore(0, 4) = 2
3404 ncore(1, 1) = 6
3405 ncore(1, 2) = 6
3406 ncore(1, 3) = 6
3407 ncore(2, 1) = 10
3408 ncore(2, 2) = 10
3409 ncore(3, 1) = 14
3410 CASE (68)
3411 ncore(0, 1) = 2
3412 ncore(0, 2) = 2
3413 ncore(0, 3) = 2
3414 ncore(0, 4) = 2
3415 ncore(0, 5) = 2
3416 ncore(1, 1) = 6
3417 ncore(1, 2) = 6
3418 ncore(1, 3) = 6
3419 ncore(1, 4) = 6
3420 ncore(2, 1) = 10
3421 ncore(2, 2) = 10
3422 ncore(3, 1) = 14
3423 CASE (78)
3424 ncore(0, 1) = 2
3425 ncore(0, 2) = 2
3426 ncore(0, 3) = 2
3427 ncore(0, 4) = 2
3428 ncore(0, 5) = 2
3429 ncore(1, 1) = 6
3430 ncore(1, 2) = 6
3431 ncore(1, 3) = 6
3432 ncore(1, 4) = 6
3433 ncore(2, 1) = 10
3434 ncore(2, 2) = 10
3435 ncore(2, 3) = 10
3436 ncore(3, 1) = 14
3437 ! 79 - 92 5f incore PP
3438 CASE (79)
3439 ncore(0, 1) = 2
3440 ncore(0, 2) = 2
3441 ncore(0, 3) = 2
3442 ncore(0, 4) = 2
3443 ncore(0, 5) = 2
3444 ncore(1, 1) = 6
3445 ncore(1, 2) = 6
3446 ncore(1, 3) = 6
3447 ncore(1, 4) = 6
3448 ncore(2, 1) = 10
3449 ncore(2, 2) = 10
3450 ncore(2, 3) = 10
3451 ncore(3, 1) = 14
3452 ncore(3, 2) = 1
3453 CASE (80)
3454 ncore(0, 1) = 2
3455 ncore(0, 2) = 2
3456 ncore(0, 3) = 2
3457 ncore(0, 4) = 2
3458 ncore(0, 5) = 2
3459 ncore(1, 1) = 6
3460 ncore(1, 2) = 6
3461 ncore(1, 3) = 6
3462 ncore(1, 4) = 6
3463 ncore(2, 1) = 10
3464 ncore(2, 2) = 10
3465 ncore(2, 3) = 10
3466 ncore(3, 1) = 14
3467 ncore(3, 2) = 2
3468 CASE (81)
3469 ncore(0, 1) = 2
3470 ncore(0, 2) = 2
3471 ncore(0, 3) = 2
3472 ncore(0, 4) = 2
3473 ncore(0, 5) = 2
3474 ncore(1, 1) = 6
3475 ncore(1, 2) = 6
3476 ncore(1, 3) = 6
3477 ncore(1, 4) = 6
3478 ncore(2, 1) = 10
3479 ncore(2, 2) = 10
3480 ncore(2, 3) = 10
3481 ncore(3, 1) = 14
3482 ncore(3, 2) = 3
3483 CASE (82)
3484 ncore(0, 1) = 2
3485 ncore(0, 2) = 2
3486 ncore(0, 3) = 2
3487 ncore(0, 4) = 2
3488 ncore(0, 5) = 2
3489 ncore(1, 1) = 6
3490 ncore(1, 2) = 6
3491 ncore(1, 3) = 6
3492 ncore(1, 4) = 6
3493 ncore(2, 1) = 10
3494 ncore(2, 2) = 10
3495 ncore(2, 3) = 10
3496 ncore(3, 1) = 14
3497 ncore(3, 2) = 4
3498 CASE (83)
3499 ncore(0, 1) = 2
3500 ncore(0, 2) = 2
3501 ncore(0, 3) = 2
3502 ncore(0, 4) = 2
3503 ncore(0, 5) = 2
3504 ncore(1, 1) = 6
3505 ncore(1, 2) = 6
3506 ncore(1, 3) = 6
3507 ncore(1, 4) = 6
3508 ncore(2, 1) = 10
3509 ncore(2, 2) = 10
3510 ncore(2, 3) = 10
3511 ncore(3, 1) = 14
3512 ncore(3, 2) = 5
3513 CASE (84)
3514 ncore(0, 1) = 2
3515 ncore(0, 2) = 2
3516 ncore(0, 3) = 2
3517 ncore(0, 4) = 2
3518 ncore(0, 5) = 2
3519 ncore(1, 1) = 6
3520 ncore(1, 2) = 6
3521 ncore(1, 3) = 6
3522 ncore(1, 4) = 6
3523 ncore(2, 1) = 10
3524 ncore(2, 2) = 10
3525 ncore(2, 3) = 10
3526 ncore(3, 1) = 14
3527 ncore(3, 2) = 6
3528 CASE (85)
3529 ncore(0, 1) = 2
3530 ncore(0, 2) = 2
3531 ncore(0, 3) = 2
3532 ncore(0, 4) = 2
3533 ncore(0, 5) = 2
3534 ncore(1, 1) = 6
3535 ncore(1, 2) = 6
3536 ncore(1, 3) = 6
3537 ncore(1, 4) = 6
3538 ncore(2, 1) = 10
3539 ncore(2, 2) = 10
3540 ncore(2, 3) = 10
3541 ncore(3, 1) = 14
3542 ncore(3, 2) = 7
3543 CASE (86)
3544 ! this is not Rn core, add double assignment below
3545 ncore(0, 1) = 2
3546 ncore(0, 2) = 2
3547 ncore(0, 3) = 2
3548 ncore(0, 4) = 2
3549 ncore(0, 5) = 2
3550 ncore(1, 1) = 6
3551 ncore(1, 2) = 6
3552 ncore(1, 3) = 6
3553 ncore(1, 4) = 6
3554 ncore(2, 1) = 10
3555 ncore(2, 2) = 10
3556 ncore(2, 3) = 10
3557 ncore(3, 1) = 14
3558 ncore(3, 2) = 8
3559 CASE (87)
3560 ncore(0, 1) = 2
3561 ncore(0, 2) = 2
3562 ncore(0, 3) = 2
3563 ncore(0, 4) = 2
3564 ncore(0, 5) = 2
3565 ncore(1, 1) = 6
3566 ncore(1, 2) = 6
3567 ncore(1, 3) = 6
3568 ncore(1, 4) = 6
3569 ncore(2, 1) = 10
3570 ncore(2, 2) = 10
3571 ncore(2, 3) = 10
3572 ncore(3, 1) = 14
3573 ncore(3, 2) = 9
3574 CASE (88)
3575 ncore(0, 1) = 2
3576 ncore(0, 2) = 2
3577 ncore(0, 3) = 2
3578 ncore(0, 4) = 2
3579 ncore(0, 5) = 2
3580 ncore(1, 1) = 6
3581 ncore(1, 2) = 6
3582 ncore(1, 3) = 6
3583 ncore(1, 4) = 6
3584 ncore(2, 1) = 10
3585 ncore(2, 2) = 10
3586 ncore(2, 3) = 10
3587 ncore(3, 1) = 14
3588 ncore(3, 2) = 10
3589 CASE (89)
3590 ncore(0, 1) = 2
3591 ncore(0, 2) = 2
3592 ncore(0, 3) = 2
3593 ncore(0, 4) = 2
3594 ncore(0, 5) = 2
3595 ncore(1, 1) = 6
3596 ncore(1, 2) = 6
3597 ncore(1, 3) = 6
3598 ncore(1, 4) = 6
3599 ncore(2, 1) = 10
3600 ncore(2, 2) = 10
3601 ncore(2, 3) = 10
3602 ncore(3, 1) = 14
3603 ncore(3, 2) = 11
3604 CASE (90)
3605 ncore(0, 1) = 2
3606 ncore(0, 2) = 2
3607 ncore(0, 3) = 2
3608 ncore(0, 4) = 2
3609 ncore(0, 5) = 2
3610 ncore(1, 1) = 6
3611 ncore(1, 2) = 6
3612 ncore(1, 3) = 6
3613 ncore(1, 4) = 6
3614 ncore(2, 1) = 10
3615 ncore(2, 2) = 10
3616 ncore(2, 3) = 10
3617 ncore(3, 1) = 14
3618 ncore(3, 2) = 12
3619 CASE (91)
3620 ncore(0, 1) = 2
3621 ncore(0, 2) = 2
3622 ncore(0, 3) = 2
3623 ncore(0, 4) = 2
3624 ncore(0, 5) = 2
3625 ncore(1, 1) = 6
3626 ncore(1, 2) = 6
3627 ncore(1, 3) = 6
3628 ncore(1, 4) = 6
3629 ncore(2, 1) = 10
3630 ncore(2, 2) = 10
3631 ncore(2, 3) = 10
3632 ncore(3, 1) = 14
3633 ncore(3, 2) = 13
3634 CASE (92)
3635 ncore(0, 1) = 2
3636 ncore(0, 2) = 2
3637 ncore(0, 3) = 2
3638 ncore(0, 4) = 2
3639 ncore(0, 5) = 2
3640 ncore(1, 1) = 6
3641 ncore(1, 2) = 6
3642 ncore(1, 3) = 6
3643 ncore(1, 4) = 6
3644 ncore(2, 1) = 10
3645 ncore(2, 2) = 10
3646 ncore(2, 3) = 10
3647 ncore(3, 1) = 14
3648 ncore(3, 2) = 14
3649 CASE DEFAULT
3650 ncore(0, 1) = -1
3651 END SELECT
3652 ! special cases of double assignments
3653 IF (z == 65 .AND. econfx(3) == 0) THEN
3654 ! 4f in core for Tb
3655 ncore = 0
3656 ncore(0, 1) = -1
3657 END IF
3658 ! if there is still no core, check for special cases
3659 IF (ncore(0, 1) <= 0) THEN
3660 IF (z >= 58 .AND. z <= 71) THEN
3661 ! 4f-in-core PPs for lanthanides
3662 nc = z - sum(econf)
3663 ! setup ncore
3664 ncore = 0
3665 SELECT CASE (nc)
3666 CASE (29:42)
3667 ncore(0, 1) = 2
3668 ncore(0, 2) = 2
3669 ncore(0, 3) = 2
3670 ncore(1, 1) = 6
3671 ncore(1, 2) = 6
3672 ncore(2, 1) = 10
3673 ncore(3, 1) = nc - 28
3674 message = "A small-core pseudopotential with 4f-in-core is used for the lanthanide "// &
3675 trim(ptable(z)%symbol)
3676 cphint(trim(message))
3677 CASE (47:60)
3678 ncore(0, 1) = 2
3679 ncore(0, 2) = 2
3680 ncore(0, 3) = 2
3681 ncore(0, 4) = 2
3682 ncore(1, 1) = 6
3683 ncore(1, 2) = 6
3684 ncore(1, 3) = 6
3685 ncore(2, 1) = 10
3686 ncore(2, 2) = 10
3687 ncore(3, 1) = nc - 46
3688 message = "A medium-core pseudopotential with 4f-in-core is used for the lanthanide "// &
3689 trim(ptable(z)%symbol)
3690 cphint(trim(message))
3691 CASE DEFAULT
3692 ncore(0, 1) = -1
3693 END SELECT
3694 END IF
3695 END IF
3696 ! if the core is established, finish the setup
3697 IF (ncore(0, 1) >= 0) THEN
3698 DO l = 0, lmin
3699 ll = 2*(2*l + 1)
3700 nn = sum(ncore(l, :)) + econfx(l)
3701 ii = 0
3702 DO
3703 ii = ii + 1
3704 IF (nn <= ll) THEN
3705 nelem(l, ii) = nn
3706 EXIT
3707 ELSE
3708 nelem(l, ii) = ll
3709 nn = nn - ll
3710 END IF
3711 END DO
3712 END DO
3713 ncalc = nelem - ncore
3714 ELSE
3715 ! test for compatibility of valence occupation and full atomic occupation
3716 IF (iounit > 0) THEN
3717 WRITE (iounit, "(/,A,A2)") "WARNING: Core states irregular for atom type ", ptable(z)%symbol
3718 WRITE (iounit, "(A,10I3)") "WARNING: Redefine ELEC_CONF in the KIND section"
3719 cpabort("Incompatible Atomic Occupations Detected")
3720 END IF
3721 END IF
3722 ELSE
3723 lmin = min(lmat, ubound(ptable(z)%e_conv, 1))
3724 ncore = 0
3725 ncalc = 0
3726 DO l = 0, lmin
3727 ll = 2*(2*l + 1)
3728 nn = abs(econfx(l))
3729 ii = 0
3730 DO
3731 ii = ii + 1
3732 IF (nn <= ll) THEN
3733 ncalc(l, ii) = -nn
3734 EXIT
3735 ELSE
3736 ncalc(l, ii) = -ll
3737 nn = nn - ll
3738 END IF
3739 END DO
3740 END DO
3741 nelem = ncalc
3742 END IF
3743
3744 END SUBROUTINE set_pseudo_state
3745
3746! **************************************************************************************************
3747!> \brief finds if a given qs run needs to use nlcc
3748!> \param qs_kind_set ...
3749!> \return ...
3750! **************************************************************************************************
3751 FUNCTION has_nlcc(qs_kind_set) RESULT(nlcc)
3752
3753 TYPE(qs_kind_type), DIMENSION(:) :: qs_kind_set
3754 LOGICAL :: nlcc
3755
3756 INTEGER :: ikind
3757 LOGICAL :: nlcc_present
3758 TYPE(gth_potential_type), POINTER :: gth_potential
3759 TYPE(sgp_potential_type), POINTER :: sgp_potential
3760
3761 nlcc = .false.
3762
3763 DO ikind = 1, SIZE(qs_kind_set)
3764 CALL get_qs_kind(qs_kind_set(ikind), gth_potential=gth_potential, sgp_potential=sgp_potential)
3765 IF (ASSOCIATED(gth_potential)) THEN
3766 CALL get_potential(potential=gth_potential, nlcc_present=nlcc_present)
3767 nlcc = nlcc .OR. nlcc_present
3768 ELSEIF (ASSOCIATED(sgp_potential)) THEN
3769 CALL get_potential(potential=sgp_potential, has_nlcc=nlcc_present)
3770 nlcc = nlcc .OR. nlcc_present
3771 END IF
3772 END DO
3773
3774 END FUNCTION has_nlcc
3775
3776! **************************************************************************************************
3777
3778END MODULE qs_kind_types
static int imax(int x, int y)
Returns the larger of two given integers (missing from the C standard)
subroutine, public atom_sgp_release(sgp_pot)
...
Definition atom_sgp.F:767
subroutine, public sgp_construction(sgp_pot, ecp_pot, upf_pot, orb_basis, error)
...
Definition atom_sgp.F:79
Define the atom type and its sub types.
Definition atom_types.F:15
integer, parameter, public lmat
Definition atom_types.F:67
subroutine, public read_ecp_potential(element_symbol, potential, pseudo_name, pseudo_file, potential_section)
...
Routines that process Quantum Espresso UPF files.
Definition atom_upf.F:14
subroutine, public atom_read_upf(pot, upf_filename, read_header)
...
Definition atom_upf.F:102
pure subroutine, public atom_release_upf(upfpot)
...
Definition atom_upf.F:875
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind(atomic_kind, fist_potential, element_symbol, name, mass, kind_number, natom, atom_list, rcov, rvdw, z, qeff, apol, cpol, mm_radius, shell, shell_active, damping)
Get attributes of an atomic kind.
subroutine, public remove_basis_set_container(basis)
...
subroutine, public remove_basis_from_container(container, inum, basis_type)
...
subroutine, public get_basis_from_container(container, basis_set, inumbas, basis_type)
Retrieve a basis set from the container.
subroutine, public add_basis_set_to_container(container, basis_set, basis_set_type)
...
subroutine, public get_gto_basis_set(gto_basis_set, name, aliases, norm_type, kind_radius, ncgf, nset, nsgf, cgf_symbol, sgf_symbol, norm_cgf, set_radius, lmax, lmin, lx, ly, lz, m, ncgf_set, npgf, nsgf_set, nshell, cphi, pgf_radius, sphi, scon, zet, first_cgf, first_sgf, l, last_cgf, last_sgf, n, gcc, maxco, maxl, maxpgf, maxsgf_set, maxshell, maxso, nco_sum, npgf_sum, nshell_sum, maxder, short_kind_radius, npgf_seg_sum)
...
subroutine, public write_orb_basis_set(orb_basis_set, output_unit, header)
Write a Gaussian-type orbital (GTO) basis set data set to the output unit.
subroutine, public deallocate_sto_basis_set(sto_basis_set)
...
subroutine, public init_aux_basis_set(gto_basis_set)
...
subroutine, public allocate_gto_basis_set(gto_basis_set)
...
subroutine, public combine_basis_sets(basis_set, basis_set_add)
...
subroutine, public write_gto_basis_set(gto_basis_set, output_unit, header)
Write a Gaussian-type orbital (GTO) basis set data set to the output unit.
subroutine, public allocate_sto_basis_set(sto_basis_set)
...
subroutine, public create_gto_from_sto_basis(sto_basis_set, gto_basis_set, ngauss, ortho)
...
subroutine, public read_sto_basis_set(element_symbol, basis_set_name, sto_basis_set, para_env, dft_section)
...
subroutine, public init_orb_basis_set(gto_basis_set)
Initialise a Gaussian-type orbital (GTO) basis set data set.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
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...
Add the DFT+U contribution to the Hamiltonian matrix.
Definition dft_plus_u.F:18
Definition of the atomic potential types.
subroutine, public set_default_all_potential(potential, z, zeff_correction)
...
subroutine, public create_1c_basis(orb_basis, soft_basis, gapw_1c_basis, basis_1c_level)
create the one center basis from the orbital basis
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public gapw_1c_large
integer, parameter, public do_method_pdg
integer, parameter, public do_method_pnnl
integer, parameter, public gapw_1c_medium
integer, parameter, public do_method_pw
integer, parameter, public do_method_rm1
integer, parameter, public gapw_1c_small
integer, parameter, public do_method_pm3
integer, parameter, public do_sirius
integer, parameter, public do_method_mndo
integer, parameter, public gapw_1c_orb
integer, parameter, public gapw_1c_very_large
integer, parameter, public do_method_mndod
integer, parameter, public do_method_am1
integer, parameter, public do_method_dftb
integer, parameter, public do_qs
integer, parameter, public do_method_xtb
integer, parameter, public do_method_pm6fm
integer, parameter, public do_method_pm6
objects that represent the structure of input sections and the data contained in an input section
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
subroutine, public section_vals_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
integer, parameter, public default_path_length
Definition kinds.F:58
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
Interface to the message passing library MPI.
Provides Cartesian and spherical orbital pointers and indices.
subroutine, public init_orbital_pointers(maxl)
Initialize or update the orbital pointers.
integer, dimension(:), allocatable, public nco
integer, dimension(:), allocatable, public ncoset
Factory routines for potentials used e.g. by pao_param_exp and pao_ml.
subroutine, public get_paw_proj_set(paw_proj_set, csprj, chprj, first_prj, first_prjs, last_prj, local_oce_sphi_h, local_oce_sphi_s, maxl, ncgauprj, nsgauprj, nsatbas, nsotot, nprj, o2nindex, n2oindex, rcprj, rzetprj, zisomin, zetprj)
Get informations about a paw projectors set.
subroutine, public allocate_paw_proj_set(paw_proj_set)
Allocate projector type for GAPW.
subroutine, public projectors(paw_proj, basis_1c, orb_basis, rc, qs_control, max_rad_local_type, force_env_section)
Initialize the projector-type set data set.
subroutine, public deallocate_paw_proj_set(paw_proj_set)
Deallocate a projector-type set data set.
Periodic Table related data definitions.
type(atom), dimension(0:nelem), public ptable
integer, parameter, public nelem
subroutine, public get_ptable_info(symbol, number, amass, ielement, covalent_radius, metallic_radius, vdw_radius, found)
Pass information about the kind given the element symbol.
Definition of physical constants:
Definition physcon.F:68
real(kind=dp), parameter, public evolt
Definition physcon.F:183
real(kind=dp), parameter, public angstrom
Definition physcon.F:144
real(kind=dp), parameter, public bohr
Definition physcon.F:147
Definition of the DFTB parameter types.
Working with the DFTB parameter types.
subroutine, public deallocate_dftb_atom_param(dftb_parameter)
...
subroutine, public write_dftb_atom_param(dftb_parameter, subsys_section)
...
subroutine, public get_dftb_atom_param(dftb_parameter, name, typ, defined, z, zeff, natorb, lmax, skself, occupation, eta, energy, cutoff, xi, di, rcdisp, dudq)
...
Definition of disperson types for DFT calculations.
subroutine, public deallocate_grid_atom(grid_atom)
Deallocate a Gaussian-type orbital (GTO) basis set data set.
subroutine, public allocate_grid_atom(grid_atom)
Initialize components of the grid_atom_type structure.
subroutine, public allocate_harmonics_atom(harmonics)
Allocate a spherical harmonics set for the atom grid.
subroutine, public deallocate_harmonics_atom(harmonics)
Deallocate the spherical harmonics set for the atom grid.
Define the quickstep kind type and their sub types.
subroutine, public set_pseudo_state(econf, z, ncalc, ncore, nelem)
...
logical function, public has_nlcc(qs_kind_set)
finds if a given qs run needs to use nlcc
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
subroutine, public deallocate_qs_kind_set(qs_kind_set)
Destructor routine for a set of qs kinds.
subroutine, public init_atom_electronic_state(atomic_kind, qs_kind, ncalc, ncore, nelem, edelta)
...
subroutine, public init_gapw_nlcc(qs_kind_set)
...
subroutine, public get_qs_kind_set(qs_kind_set, all_potential_present, tnadd_potential_present, gth_potential_present, sgp_potential_present, paw_atom_present, dft_plus_u_atom_present, maxcgf, maxsgf, maxco, maxco_proj, maxgtops, maxlgto, maxlprj, maxnset, maxsgf_set, ncgf, npgf, nset, nsgf, nshell, maxpol, maxlppl, maxlppnl, maxppnl, nelectron, maxder, max_ngrid_rad, max_sph_harm, maxg_iso_not0, lmax_rho0, basis_rcut, basis_type, total_zeff_corr, npgf_seg)
Get attributes of an atomic kind set.
subroutine, public set_qs_kind(qs_kind, paw_atom, ghost, floating, hard_radius, hard0_radius, covalent_radius, vdw_radius, lmax_rho0, zeff, no_optimize, dispersion, u_minus_j, reltmat, dftb_parameter, xtb_parameter, elec_conf, pao_basis_size)
Set the components of an atomic kind data set.
subroutine, public write_qs_kind_set(qs_kind_set, subsys_section)
Write an atomic kind set data set to the output unit.
subroutine, public init_gapw_basis_set(qs_kind_set, qs_control, force_env_section, modify_qs_control)
...
subroutine, public init_qs_kind_set(qs_kind_set)
Initialise an atomic kind set data set.
subroutine, public check_qs_kind_set(qs_kind_set, dft_control, subsys_section)
...
subroutine, public write_gto_basis_sets(qs_kind_set, subsys_section)
Write all the GTO basis sets of an atomic kind set to the output unit (for the printing of the unnorm...
subroutine, public create_qs_kind_set(qs_kind_set, atomic_kind_set, kind_section, para_env, force_env_section, silent)
Read an atomic kind set data set from the input file.
Definition of the semi empirical parameter types.
subroutine, public write_se_param(sep, subsys_section)
Writes the semi-empirical type.
subroutine, public semi_empirical_create(sep)
Allocate semi-empirical type.
subroutine, public get_se_param(sep, name, typ, defined, z, zeff, natorb, eheat, beta, sto_exponents, uss, upp, udd, uff, alp, eisol, gss, gsp, gpp, gp2, acoul, nr, de, ass, asp, app, hsp, gsd, gpd, gdd, ppddg, dpddg, ngauss)
Get info from the semi-empirical type.
subroutine, public semi_empirical_release(sep)
Deallocate the semi-empirical type.
Working with the semi empirical parameter types.
subroutine, public se_param_set_default(sep, z, method)
Initialize parameter for a semi_empirival type.
subroutine, public init_se_param(sep, orb_basis_set, ngauss)
Initialize semi_empirical type.
subroutine, public create_soft_basis(orb_basis, soft_basis, eps_fit, rc, paw_atom, paw_type_forced, gpw_r3d_rs_type_forced)
create the soft basis from a GTO basis
Utilities for string manipulations.
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.
Read xTB parameters.
real(kind=dp) function, public xtb_set_kab(za, zb, xtb_control)
...
Definition of the xTB parameter types.
Definition xtb_types.F:20
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, hen, zeta, xi, kappa0, alpg, occupation, electronegativity, chmax, en, kqat2, kcn, kq)
...
Definition xtb_types.F:199
subroutine, public deallocate_xtb_atom_param(xtb_parameter)
...
Definition xtb_types.F:149
subroutine, public write_xtb_atom_param(xtb_parameter, gfn_type, subsys_section)
...
Definition xtb_types.F:364
Provides all information about an atomic kind.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
stores all the informations relevant to an mpi environment
Holds information about a PAO descriptor.
Holds information about a PAO potential.
Provides all information about a quickstep kind.