16 USE dbcsr_api,
ONLY: &
17 dbcsr_create, dbcsr_get_block_p, dbcsr_get_info, dbcsr_iterator_blocks_left, &
18 dbcsr_iterator_next_block, dbcsr_iterator_start, dbcsr_iterator_stop, dbcsr_iterator_type, &
19 dbcsr_p_type, dbcsr_release, dbcsr_reserve_diag_blocks, dbcsr_type
43 #include "./base/base_uses.f90"
60 TYPE(pao_env_type),
POINTER :: pao
61 TYPE(qs_environment_type),
POINTER :: qs_env
63 CHARACTER(len=*),
PARAMETER :: routinen =
'pao_param_init_linpot'
65 INTEGER :: acol, arow, handle, iatom, ikind, n, &
67 INTEGER,
DIMENSION(:),
POINTER :: blk_sizes_pri, col_blk_size, row_blk_size
68 REAL(
dp),
DIMENSION(:, :),
POINTER :: block_v_terms
69 REAL(
dp),
DIMENSION(:, :, :),
POINTER :: v_blocks
70 TYPE(dbcsr_iterator_type) :: iter
71 TYPE(dft_control_type),
POINTER :: dft_control
72 TYPE(mp_para_env_type),
POINTER :: para_env
73 TYPE(particle_type),
DIMENSION(:),
POINTER :: particle_set
75 CALL timeset(routinen, handle)
79 dft_control=dft_control, &
80 particle_set=particle_set, &
83 IF (dft_control%nspins /= 1) cpabort(
"open shell not yet implemented")
86 ALLOCATE (row_blk_size(natoms), col_blk_size(natoms))
88 CALL get_atomic_kind(particle_set(iatom)%atomic_kind, kind_number=ikind)
90 col_blk_size(iatom) = nterms
94 CALL dbcsr_get_info(pao%matrix_Y, row_blk_size=blk_sizes_pri)
95 row_blk_size = blk_sizes_pri**2
96 CALL dbcsr_create(pao%matrix_V_terms, &
97 name=
"PAO matrix_V_terms", &
98 dist=pao%diag_distribution, &
100 row_blk_size=row_blk_size, &
101 col_blk_size=col_blk_size)
102 CALL dbcsr_reserve_diag_blocks(pao%matrix_V_terms)
103 DEALLOCATE (row_blk_size, col_blk_size)
108 CALL dbcsr_iterator_start(iter, pao%matrix_V_terms)
109 DO WHILE (dbcsr_iterator_blocks_left(iter))
110 CALL dbcsr_iterator_next_block(iter, arow, acol, block_v_terms)
111 iatom = arow; cpassert(arow == acol)
112 nterms =
SIZE(block_v_terms, 2)
113 IF (nterms == 0) cycle
114 n = blk_sizes_pri(iatom)
115 cpassert(n*n ==
SIZE(block_v_terms, 1))
116 ALLOCATE (v_blocks(n, n, nterms))
117 CALL linpot_calc_terms(pao, qs_env, iatom, v_blocks)
118 block_v_terms = reshape(v_blocks, (/n*n, nterms/))
119 DEALLOCATE (v_blocks)
121 CALL dbcsr_iterator_stop(iter)
124 CALL pao_param_linpot_regularizer(pao)
126 IF (pao%precondition) &
127 CALL pao_param_linpot_preconditioner(pao)
131 CALL timestop(handle)
138 SUBROUTINE pao_param_linpot_regularizer(pao)
139 TYPE(pao_env_type),
POINTER :: pao
141 CHARACTER(len=*),
PARAMETER :: routinen =
'pao_param_linpot_regularizer'
143 INTEGER :: acol, arow, handle, i, iatom, j, k, &
145 INTEGER,
DIMENSION(:),
POINTER :: blk_sizes_nterms
148 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: s_evals
149 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: s, s_evecs
150 REAL(
dp),
DIMENSION(:, :),
POINTER :: block_r, v_terms
151 TYPE(dbcsr_iterator_type) :: iter
153 CALL timeset(routinen, handle)
155 IF (pao%iw > 0)
WRITE (pao%iw, *)
"PAO| Building linpot regularizer"
157 CALL dbcsr_get_info(pao%matrix_V_terms, col_blk_size=blk_sizes_nterms)
160 CALL dbcsr_create(pao%matrix_R, &
161 template=pao%matrix_V_terms, &
163 row_blk_size=blk_sizes_nterms, &
164 col_blk_size=blk_sizes_nterms, &
166 CALL dbcsr_reserve_diag_blocks(pao%matrix_R)
171 CALL dbcsr_iterator_start(iter, pao%matrix_R)
172 DO WHILE (dbcsr_iterator_blocks_left(iter))
173 CALL dbcsr_iterator_next_block(iter, arow, acol, block_r)
174 iatom = arow; cpassert(arow == acol)
175 CALL dbcsr_get_block_p(matrix=pao%matrix_V_terms, row=iatom, col=iatom, block=v_terms, found=found)
176 cpassert(
ASSOCIATED(v_terms))
177 nterms =
SIZE(v_terms, 2)
178 IF (nterms == 0) cycle
181 ALLOCATE (s(nterms, nterms))
182 s(:, :) = matmul(transpose(v_terms), v_terms)
185 ALLOCATE (s_evals(nterms), s_evecs(nterms, nterms))
191 v = pao%linpot_regu_delta/s_evals(k)
192 w = pao%linpot_regu_strength*min(1.0_dp, abs(v))
195 block_r(i, j) = block_r(i, j) + w*s_evecs(i, k)*s_evecs(j, k)
201 DEALLOCATE (s, s_evals, s_evecs)
203 CALL dbcsr_iterator_stop(iter)
206 CALL timestop(handle)
207 END SUBROUTINE pao_param_linpot_regularizer
213 SUBROUTINE pao_param_linpot_preconditioner(pao)
214 TYPE(pao_env_type),
POINTER :: pao
216 CHARACTER(len=*),
PARAMETER :: routinen =
'pao_param_linpot_preconditioner'
218 INTEGER :: acol, arow, handle, i, iatom, j, k, &
220 INTEGER,
DIMENSION(:),
POINTER :: blk_sizes_nterms
222 REAL(
dp) :: eval_capped
223 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: s_evals
224 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: s, s_evecs
225 REAL(
dp),
DIMENSION(:, :),
POINTER :: block_precon, block_precon_inv, &
227 TYPE(dbcsr_iterator_type) :: iter
229 CALL timeset(routinen, handle)
231 IF (pao%iw > 0)
WRITE (pao%iw, *)
"PAO| Building linpot preconditioner"
233 CALL dbcsr_get_info(pao%matrix_V_terms, col_blk_size=blk_sizes_nterms)
235 CALL dbcsr_create(pao%matrix_precon, &
236 template=pao%matrix_V_terms, &
238 row_blk_size=blk_sizes_nterms, &
239 col_blk_size=blk_sizes_nterms, &
240 name=
"PAO matrix_precon")
241 CALL dbcsr_reserve_diag_blocks(pao%matrix_precon)
243 CALL dbcsr_create(pao%matrix_precon_inv, template=pao%matrix_precon, name=
"PAO matrix_precon_inv")
244 CALL dbcsr_reserve_diag_blocks(pao%matrix_precon_inv)
248 CALL dbcsr_iterator_start(iter, pao%matrix_V_terms)
249 DO WHILE (dbcsr_iterator_blocks_left(iter))
250 CALL dbcsr_iterator_next_block(iter, arow, acol, block_v_terms)
251 iatom = arow; cpassert(arow == acol)
252 nterms =
SIZE(block_v_terms, 2)
253 IF (nterms == 0) cycle
255 CALL dbcsr_get_block_p(matrix=pao%matrix_precon, row=iatom, col=iatom, block=block_precon, found=found)
256 CALL dbcsr_get_block_p(matrix=pao%matrix_precon_inv, row=iatom, col=iatom, block=block_precon_inv, found=found)
257 cpassert(
ASSOCIATED(block_precon))
258 cpassert(
ASSOCIATED(block_precon_inv))
260 ALLOCATE (s(nterms, nterms))
261 s(:, :) = matmul(transpose(block_v_terms), block_v_terms)
264 ALLOCATE (s_evals(nterms), s_evecs(nterms, nterms))
269 block_precon = 0.0_dp
270 block_precon_inv = 0.0_dp
272 eval_capped = max(pao%linpot_precon_delta, s_evals(k))
275 block_precon(i, j) = block_precon(i, j) + s_evecs(i, k)*s_evecs(j, k)/sqrt(eval_capped)
276 block_precon_inv(i, j) = block_precon_inv(i, j) + s_evecs(i, k)*s_evecs(j, k)*sqrt(eval_capped)
281 DEALLOCATE (s, s_evecs, s_evals)
283 CALL dbcsr_iterator_stop(iter)
286 CALL timestop(handle)
287 END SUBROUTINE pao_param_linpot_preconditioner
294 TYPE(pao_env_type),
POINTER :: pao
296 CALL dbcsr_release(pao%matrix_V_terms)
297 CALL dbcsr_release(pao%matrix_R)
299 IF (pao%precondition)
THEN
300 CALL dbcsr_release(pao%matrix_precon)
301 CALL dbcsr_release(pao%matrix_precon_inv)
314 TYPE(pao_env_type),
POINTER :: pao
315 TYPE(qs_environment_type),
POINTER :: qs_env
316 INTEGER,
INTENT(IN) :: ikind
317 INTEGER,
INTENT(OUT) :: nparams
319 INTEGER :: pao_basis_size
320 TYPE(gto_basis_set_type),
POINTER :: basis_set
321 TYPE(qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
323 CALL get_qs_env(qs_env, qs_kind_set=qs_kind_set)
326 basis_set=basis_set, &
327 pao_basis_size=pao_basis_size)
329 IF (pao_basis_size == basis_set%nsgf)
THEN
333 SELECT CASE (pao%parameterization)
339 cpabort(
"unknown parameterization")
355 TYPE(pao_env_type),
POINTER :: pao
356 TYPE(qs_environment_type),
POINTER :: qs_env
357 TYPE(ls_scf_env_type),
TARGET :: ls_scf_env
358 LOGICAL,
INTENT(IN) :: gradient
359 REAL(
dp),
INTENT(INOUT),
OPTIONAL :: penalty
360 REAL(
dp),
DIMENSION(:, :),
INTENT(INOUT),
OPTIONAL :: forces
362 CHARACTER(len=*),
PARAMETER :: routinen =
'pao_calc_AB_linpot'
365 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s
366 TYPE(dbcsr_type) :: matrix_m, matrix_u
368 CALL timeset(routinen, handle)
370 CALL dbcsr_create(matrix_u, matrix_type=
"N", dist=pao%diag_distribution, template=matrix_s(1)%matrix)
371 CALL dbcsr_reserve_diag_blocks(matrix_u)
376 CALL pao_calc_u_linpot(pao, qs_env, matrix_u, matrix_m, pao%matrix_G, penalty, forces)
377 CALL dbcsr_release(matrix_m)
379 CALL pao_calc_u_linpot(pao, qs_env, matrix_u, penalty=penalty)
383 CALL dbcsr_release(matrix_u)
384 CALL timestop(handle)
397 SUBROUTINE pao_calc_u_linpot(pao, qs_env, matrix_U, matrix_M, matrix_G, penalty, forces)
398 TYPE(pao_env_type),
POINTER :: pao
399 TYPE(qs_environment_type),
POINTER :: qs_env
400 TYPE(dbcsr_type) :: matrix_u
401 TYPE(dbcsr_type),
OPTIONAL :: matrix_m, matrix_g
402 REAL(
dp),
INTENT(INOUT),
OPTIONAL :: penalty
403 REAL(
dp),
DIMENSION(:, :),
INTENT(INOUT),
OPTIONAL :: forces
405 CHARACTER(len=*),
PARAMETER :: routinen =
'pao_calc_U_linpot'
407 INTEGER :: acol, arow, group_handle, handle, iatom, &
408 kterm, n, natoms, nterms
410 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: gaps
411 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: evals
412 REAL(
dp),
DIMENSION(:),
POINTER :: vec_m2, vec_v
413 REAL(
dp),
DIMENSION(:, :),
POINTER :: block_g, block_m1, block_m2, block_r, &
414 block_u, block_v, block_v_terms, &
416 REAL(
dp),
DIMENSION(:, :, :),
POINTER :: m_blocks
417 REAL(kind=
dp) :: regu_energy
418 TYPE(dbcsr_iterator_type) :: iter
419 TYPE(mp_comm_type) :: group
421 CALL timeset(routinen, handle)
423 cpassert(
PRESENT(matrix_g) .EQV.
PRESENT(matrix_m))
426 ALLOCATE (gaps(natoms), evals(10, natoms))
428 gaps(:) = huge(1.0_dp)
430 CALL dbcsr_get_info(matrix_u, group=group_handle)
431 CALL group%set_handle(group_handle)
433 CALL dbcsr_iterator_start(iter, pao%matrix_X)
434 DO WHILE (dbcsr_iterator_blocks_left(iter))
435 CALL dbcsr_iterator_next_block(iter, arow, acol, block_x)
436 iatom = arow; cpassert(arow == acol)
437 CALL dbcsr_get_block_p(matrix=pao%matrix_R, row=iatom, col=iatom, block=block_r, found=found)
438 CALL dbcsr_get_block_p(matrix=matrix_u, row=iatom, col=iatom, block=block_u, found=found)
439 cpassert(
ASSOCIATED(block_r) .AND.
ASSOCIATED(block_u))
443 ALLOCATE (vec_v(n*n))
445 CALL dbcsr_get_block_p(matrix=pao%matrix_V_terms, row=iatom, col=iatom, block=block_v_terms, found=found)
446 cpassert(
ASSOCIATED(block_v_terms))
447 nterms =
SIZE(block_v_terms, 2)
449 vec_v = matmul(block_v_terms, block_x(:, 1))
450 block_v(1:n, 1:n) => vec_v(:)
453 IF (maxval(abs(block_v - transpose(block_v))/max(1.0_dp, maxval(abs(block_v)))) > 1e-12) &
454 cpabort(
"block_V not symmetric")
455 block_v = 0.5_dp*(block_v + transpose(block_v))
459 IF (
PRESENT(penalty) .AND. nterms > 0) &
460 regu_energy = regu_energy + dot_product(block_x(:, 1), matmul(block_r, block_x(:, 1)))
463 gap=gaps(iatom), evals=evals(:, iatom))
465 IF (
PRESENT(matrix_g))
THEN
466 cpassert(
PRESENT(matrix_m))
467 CALL dbcsr_get_block_p(matrix=matrix_m, row=iatom, col=iatom, block=block_m1, found=found)
470 IF (
ASSOCIATED(block_m1) .AND.
SIZE(block_v_terms) > 0)
THEN
471 ALLOCATE (vec_m2(n*n))
472 block_m2(1:n, 1:n) => vec_m2(:)
475 m1=block_m1, g=block_m2, gap=gaps(iatom), evals=evals(:, iatom))
476 IF (maxval(abs(block_m2 - transpose(block_m2))) > 1e-14_dp) &
477 cpabort(
"matrix not symmetric")
480 IF (
PRESENT(matrix_g))
THEN
481 CALL dbcsr_get_block_p(matrix=matrix_g, row=iatom, col=iatom, block=block_g, found=found)
482 cpassert(
ASSOCIATED(block_g))
483 block_g(:, 1) = matmul(vec_m2, block_v_terms)
484 IF (
PRESENT(penalty)) &
485 block_g = block_g + 2.0_dp*matmul(block_r, block_x)
489 IF (
PRESENT(forces))
THEN
490 ALLOCATE (m_blocks(n, n, nterms))
492 m_blocks(:, :, kterm) = block_m2*block_x(kterm, 1)
494 CALL linpot_calc_forces(pao, qs_env, iatom=iatom, m_blocks=m_blocks, forces=forces)
495 DEALLOCATE (m_blocks)
503 CALL dbcsr_iterator_stop(iter)
505 IF (
PRESENT(penalty))
THEN
507 CALL group%sum(penalty)
508 CALL group%sum(regu_energy)
509 penalty = penalty + regu_energy
513 IF (.NOT.
PRESENT(forces))
THEN
515 CALL group%sum(evals)
516 IF (pao%iw_fockev > 0)
THEN
518 WRITE (pao%iw_fockev, *)
"PAO| atom:", iatom,
" fock evals around gap:", evals(:, iatom)
524 IF (pao%iw_gap > 0)
THEN
526 WRITE (pao%iw_gap, *)
"PAO| atom:", iatom,
" fock gap:", gaps(iatom)
530 IF (pao%iw > 0)
WRITE (pao%iw, *)
"PAO| linpot regularization energy:", regu_energy
531 IF (pao%iw > 0)
WRITE (pao%iw,
"(A,E20.10,A,T71,I10)")
" PAO| min_gap:", minval(gaps),
" for atom:", minloc(gaps)
534 DEALLOCATE (gaps, evals)
535 CALL timestop(handle)
537 END SUBROUTINE pao_calc_u_linpot
546 SUBROUTINE linpot_calc_terms(pao, qs_env, iatom, V_blocks)
547 TYPE(pao_env_type),
POINTER :: pao
548 TYPE(qs_environment_type),
POINTER :: qs_env
549 INTEGER,
INTENT(IN) :: iatom
550 REAL(
dp),
DIMENSION(:, :, :),
INTENT(OUT) :: v_blocks
552 SELECT CASE (pao%parameterization)
558 cpabort(
"unknown parameterization")
561 END SUBROUTINE linpot_calc_terms
571 SUBROUTINE linpot_calc_forces(pao, qs_env, iatom, M_blocks, forces)
572 TYPE(pao_env_type),
POINTER :: pao
573 TYPE(qs_environment_type),
POINTER :: qs_env
574 INTEGER,
INTENT(IN) :: iatom
575 REAL(
dp),
DIMENSION(:, :, :),
INTENT(IN) :: m_blocks
576 REAL(
dp),
DIMENSION(:, :),
INTENT(INOUT) :: forces
578 SELECT CASE (pao%parameterization)
584 cpabort(
"unknown parameterization")
587 END SUBROUTINE linpot_calc_forces
595 TYPE(pao_env_type),
POINTER :: pao
596 TYPE(qs_environment_type),
POINTER :: qs_env
598 CHARACTER(len=*),
PARAMETER :: routinen =
'pao_param_initguess_linpot'
600 INTEGER :: acol, arow, handle, i, iatom, j, k, n, &
602 INTEGER,
DIMENSION(:),
POINTER :: pri_basis_size
605 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: s_evals
606 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: s, s_evecs, s_inv
607 REAL(
dp),
DIMENSION(:),
POINTER :: v_guess_vec
608 REAL(
dp),
DIMENSION(:, :),
POINTER :: block_x, v_guess, v_terms
609 TYPE(dbcsr_iterator_type) :: iter
611 CALL timeset(routinen, handle)
613 CALL dbcsr_get_info(pao%matrix_Y, row_blk_size=pri_basis_size)
617 CALL dbcsr_iterator_start(iter, pao%matrix_X)
618 DO WHILE (dbcsr_iterator_blocks_left(iter))
619 CALL dbcsr_iterator_next_block(iter, arow, acol, block_x)
620 iatom = arow; cpassert(arow == acol)
621 CALL dbcsr_get_block_p(matrix=pao%matrix_V_terms, row=iatom, col=iatom, block=v_terms, found=found)
622 cpassert(
ASSOCIATED(v_terms))
623 nterms =
SIZE(v_terms, 2)
624 IF (nterms == 0) cycle
627 n = pri_basis_size(iatom)
628 ALLOCATE (v_guess_vec(n*n))
629 v_guess(1:n, 1:n) => v_guess_vec
633 ALLOCATE (s(nterms, nterms))
634 s(:, :) = matmul(transpose(v_terms), v_terms)
637 ALLOCATE (s_evals(nterms), s_evecs(nterms, nterms))
642 ALLOCATE (s_inv(nterms, nterms))
645 w = s_evals(k)/(s_evals(k)**2 + pao%linpot_init_delta)
648 s_inv(i, j) = s_inv(i, j) + w*s_evecs(i, k)*s_evecs(j, k)
654 block_x(:, 1) = matmul(matmul(s_inv, transpose(v_terms)), v_guess_vec)
657 DEALLOCATE (v_guess_vec, s, s_evecs, s_evals, s_inv)
659 CALL dbcsr_iterator_stop(iter)
662 CALL timestop(handle)
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.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
Types needed for a linear scaling quickstep SCF run based on the density matrix.
Defines the basic variable types.
integer, parameter, public dp
Machine interface based on Fortran 2003 and POSIX.
subroutine, public m_flush(lunit)
flushes units if the &GLOBAL flag is set accordingly
Collection of simple mathematical functions and subroutines.
subroutine, public diamat_all(a, eigval, dac)
Diagonalize the symmetric n by n matrix a using the LAPACK library. Only the upper triangle of matrix...
Interface to the message passing library MPI.
Full parametrization of Fock matrix, ie. the identity parametrization.
subroutine, public linpot_full_calc_terms(V_blocks)
Builds potential terms.
subroutine, public linpot_full_count_terms(qs_env, ikind, nterms)
Count number of terms for given atomic kind.
Rotationally invariant parametrization of Fock matrix.
subroutine, public linpot_rotinv_calc_forces(qs_env, iatom, M_blocks, forces)
Calculate force contribution from rotinv parametrization.
subroutine, public linpot_rotinv_calc_terms(qs_env, iatom, V_blocks)
Calculate all potential terms of the rotinv parametrization.
subroutine, public linpot_rotinv_count_terms(qs_env, ikind, nterms)
Count number of terms for given atomic kind.
Common framework for using eigenvectors of a Fock matrix as PAO basis.
subroutine, public pao_calc_u_block_fock(pao, iatom, V, U, penalty, gap, evals, M1, G)
Calculate new matrix U and optinally its gradient G.
Common framework for a linear parametrization of the potential.
subroutine, public pao_param_finalize_linpot(pao)
Finalize the linear potential parametrization.
subroutine, public pao_param_init_linpot(pao, qs_env)
Initialize the linear potential parametrization.
subroutine, public pao_calc_ab_linpot(pao, qs_env, ls_scf_env, gradient, penalty, forces)
Takes current matrix_X and calculates the matrices A and B.
subroutine, public pao_param_count_linpot(pao, qs_env, ikind, nparams)
Returns the number of potential terms for given atomic kind.
subroutine, public pao_param_initguess_linpot(pao, qs_env)
Calculate initial guess for matrix_X.
Common routines for PAO parametrizations.
subroutine, public pao_calc_grad_lnv_wrt_u(qs_env, ls_scf_env, matrix_M_diag)
Helper routine, calculates partial derivative dE/dU.
subroutine, public pao_calc_ab_from_u(pao, qs_env, ls_scf_env, matrix_U_diag)
Takes current matrix_X and calculates the matrices A and B.
Factory routines for potentials used e.g. by pao_param_exp and pao_ml.
subroutine, public pao_guess_initial_potential(qs_env, iatom, block_V)
Makes an educated guess for the initial potential based on positions of neighboring atoms.
Types used by the PAO machinery.
Define the data structure for the particle information.
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_RI_aux_kp, matrix_s, matrix_s_RI_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, WannierCentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, rhs)
Get the QUICKSTEP environment.
Define the quickstep kind type and their sub types.
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, 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_r3d_rs_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_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.