18 dbcsr_type_no_symmetry
125#include "./base/base_uses.f90"
131 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_scf_initialization'
160 CALL get_qs_env(qs_env, input=input, dft_control=dft_control)
163 IF (dft_control%hairy_probes .EQV. .true.)
THEN
165 atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set, particle_set=particle_set)
166 np =
SIZE(dft_control%probe)
168 CALL ao_boundaries(probe=dft_control%probe(ip), atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set, &
169 particle_set=particle_set, nao=mos(1)%nao)
173 IF (
PRESENT(scf_control))
THEN
174 my_scf_control => scf_control
176 CALL get_qs_env(qs_env, scf_control=my_scf_control)
180 IF (
PRESENT(scf_section))
THEN
181 my_scf_section => scf_section
186 CALL qs_scf_ensure_scf_env(qs_env, scf_env)
190 CALL qs_scf_ensure_mos(qs_env)
193 CALL qs_scf_ensure_diagonalization(scf_env, my_scf_section, qs_env, &
194 my_scf_control, qs_env%has_unit_metric)
196 CALL qs_scf_ensure_mixing(my_scf_control, my_scf_section, scf_env, dft_control)
198 CALL qs_scf_ensure_work_matrices(qs_env, scf_env)
200 CALL qs_scf_ensure_mixing_store(qs_env, scf_env)
203 IF (dft_control%qs_control%cdft)
THEN
204 CALL qs_scf_ensure_cdft_loop_vars(qs_env, scf_env, dft_control, &
205 scf_control=my_scf_control)
207 CALL qs_scf_ensure_outer_loop_vars(scf_env, my_scf_control)
210 CALL init_scf_run(scf_env, qs_env, my_scf_section, my_scf_control)
227 CALL get_qs_env(qs_env, input=input, dft_control=dft_control)
229 CALL get_qs_env(qs_env, scf_control=scf_control)
233 CALL qs_scf_ensure_scf_env(qs_env, scf_env)
236 scf_control%use_diag = .true.
239 CALL qs_scf_ensure_mos(qs_env)
242 CALL qs_scf_ensure_diagonalization(scf_env, scf_section, qs_env, &
243 scf_control, qs_env%has_unit_metric)
244 CALL qs_scf_ensure_work_matrices(qs_env, scf_env)
246 CALL init_scf_run(scf_env, qs_env, scf_section, scf_control)
256 SUBROUTINE qs_scf_ensure_scf_env(qs_env, scf_env)
265 IF (.NOT.
ASSOCIATED(scf_env))
THEN
270 SELECT CASE (scf_env%mixing_method)
272 IF (
ASSOCIATED(scf_env%mixing_store))
THEN
278 IF (
ASSOCIATED(scf_env%mixing_store%rhoin))
THEN
279 IF (
SIZE(rho_g(1)%pw_grid%gsq) /=
SIZE(scf_env%mixing_store%rhoin(1)%cc))
THEN
281 DEALLOCATE (scf_env%mixing_store)
288 END SUBROUTINE qs_scf_ensure_scf_env
296 SUBROUTINE qs_scf_ensure_outer_loop_vars(scf_env, scf_control, nvar)
299 INTEGER,
OPTIONAL :: nvar
301 INTEGER :: nhistory, nvariables
303 IF (scf_control%outer_scf%have_scf)
THEN
304 nhistory = scf_control%outer_scf%max_scf + 1
305 IF (
PRESENT(nvar))
THEN
314 ALLOCATE (scf_env%outer_scf%variables(nvariables, nhistory))
315 ALLOCATE (scf_env%outer_scf%count(nhistory))
316 scf_env%outer_scf%count = 0
317 ALLOCATE (scf_env%outer_scf%gradient(nvariables, nhistory))
318 ALLOCATE (scf_env%outer_scf%energy(nhistory))
321 END SUBROUTINE qs_scf_ensure_outer_loop_vars
330 SUBROUTINE qs_scf_ensure_cdft_loop_vars(qs_env, scf_env, dft_control, scf_control)
336 INTEGER :: nhistory, nvariables
337 LOGICAL :: do_kpoints
338 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: gradient_history, outer_scf_history, &
341 NULLIFY (outer_scf_history, gradient_history, variable_history)
342 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints)
345 cpabort(
"CDFT calculation not possible with kpoints")
349 IF (.NOT. scf_control%outer_scf%have_scf) &
350 cpabort(
"Section SCF&OUTER_SCF must be active for CDFT calculations.")
352 IF (dft_control%qs_control%cdft_control%constraint_control%have_scf)
THEN
353 nhistory = dft_control%qs_control%cdft_control%constraint_control%max_scf + 1
356 dft_control%qs_control%cdft_control)
359 nvariables =
SIZE(dft_control%qs_control%cdft_control%target)
361 ALLOCATE (dft_control%qs_control%cdft_control%constraint%variables(nvariables, nhistory))
362 ALLOCATE (dft_control%qs_control%cdft_control%constraint%count(nhistory))
363 dft_control%qs_control%cdft_control%constraint%count = 0
364 ALLOCATE (dft_control%qs_control%cdft_control%constraint%gradient(nvariables, nhistory))
365 ALLOCATE (dft_control%qs_control%cdft_control%constraint%energy(nhistory))
366 CALL qs_scf_ensure_outer_loop_vars(scf_env, scf_control, nvariables)
371 IF (scf_control%outer_scf%have_scf)
THEN
373 dft_control%qs_control%cdft_control%ot_control%have_scf = .true.
374 dft_control%qs_control%cdft_control%ot_control%max_scf = scf_control%outer_scf%max_scf
375 dft_control%qs_control%cdft_control%ot_control%eps_scf = scf_control%outer_scf%eps_scf
376 dft_control%qs_control%cdft_control%ot_control%step_size = scf_control%outer_scf%step_size
377 dft_control%qs_control%cdft_control%ot_control%type = scf_control%outer_scf%type
378 dft_control%qs_control%cdft_control%ot_control%optimizer = scf_control%outer_scf%optimizer
379 dft_control%qs_control%cdft_control%ot_control%diis_buffer_length = scf_control%outer_scf%diis_buffer_length
380 dft_control%qs_control%cdft_control%ot_control%bisect_trust_count = scf_control%outer_scf%bisect_trust_count
381 CALL cdft_opt_type_copy(dft_control%qs_control%cdft_control%ot_control%cdft_opt_control, &
382 scf_control%outer_scf%cdft_opt_control)
384 nvariables =
SIZE(dft_control%qs_control%cdft_control%target)
385 IF (scf_control%outer_scf%extrapolation_order /= &
386 dft_control%qs_control%cdft_control%constraint_control%extrapolation_order &
387 .OR. nvariables /= 1)
THEN
388 DEALLOCATE (qs_env%outer_scf_history)
389 DEALLOCATE (qs_env%gradient_history)
390 DEALLOCATE (qs_env%variable_history)
391 nhistory = dft_control%qs_control%cdft_control%constraint_control%extrapolation_order
392 ALLOCATE (outer_scf_history(nvariables, nhistory))
393 ALLOCATE (gradient_history(nvariables, 2))
394 gradient_history = 0.0_dp
395 ALLOCATE (variable_history(nvariables, 2))
396 variable_history = 0.0_dp
397 CALL set_qs_env(qs_env, outer_scf_history=outer_scf_history, &
398 gradient_history=gradient_history, variable_history=variable_history)
404 END SUBROUTINE qs_scf_ensure_cdft_loop_vars
411 SUBROUTINE qs_scf_ensure_mixing_store(qs_env, scf_env)
417 NULLIFY (dft_control)
418 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
420 IF (scf_env%mixing_method > 0)
THEN
421 CALL mixing_allocate(qs_env, scf_env%mixing_method, scf_env%p_mix_new, &
422 scf_env%p_delta, dft_control%nspins, &
423 scf_env%mixing_store)
425 NULLIFY (scf_env%p_mix_new)
428 END SUBROUTINE qs_scf_ensure_mixing_store
437 SUBROUTINE qs_scf_ensure_work_matrices(qs_env, scf_env)
442 CHARACTER(LEN=*),
PARAMETER :: routinen =
'qs_scf_ensure_work_matrices'
444 INTEGER :: handle, is, nao, nrow_block, nw
445 LOGICAL :: do_kpoints
448 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s
454 CALL timeset(routinen, handle)
456 NULLIFY (ao_mo_fm_pools, ao_mo_fmstruct, ao_ao_fmstruct, dft_control, matrix_s, mos)
459 dft_control=dft_control, &
460 matrix_s_kp=matrix_s, &
462 scf_control=scf_control, &
463 do_kpoints=do_kpoints)
464 CALL mpools_get(qs_env%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
471 nrow_block=nrow_block, &
472 ncol_block=nrow_block, &
475 template_fmstruct=ao_mo_fmstruct)
479 IF (.NOT.
ASSOCIATED(scf_env%scf_work1))
THEN
480 nw = dft_control%nspins
481 IF (do_kpoints) nw = 4
482 ALLOCATE (scf_env%scf_work1(nw))
483 DO is = 1,
SIZE(scf_env%scf_work1)
485 matrix_struct=ao_ao_fmstruct, &
486 name=
"SCF-WORK_MATRIX-1-"//trim(adjustl(
cp_to_string(is))))
489 IF ((.NOT.
ASSOCIATED(scf_env%ortho)) .AND. &
493 ALLOCATE (scf_env%ortho)
495 matrix_struct=ao_ao_fmstruct, &
496 name=
"SCF-ORTHO_MATRIX")
499 ref_matrix => matrix_s(1, 1)%matrix
501 CALL dbcsr_create(scf_env%ortho_dbcsr, template=ref_matrix, &
502 matrix_type=dbcsr_type_no_symmetry)
504 CALL dbcsr_create(scf_env%buf1_dbcsr, template=ref_matrix, &
505 matrix_type=dbcsr_type_no_symmetry)
507 CALL dbcsr_create(scf_env%buf2_dbcsr, template=ref_matrix, &
508 matrix_type=dbcsr_type_no_symmetry)
510 (scf_control%level_shift /= 0.0_dp .AND. &
512 ALLOCATE (scf_env%ortho_m1)
514 matrix_struct=ao_ao_fmstruct, &
515 name=
"SCF-ORTHO_MATRIX-1")
518 IF (.NOT.
ASSOCIATED(scf_env%scf_work2))
THEN
519 ALLOCATE (scf_env%scf_work2)
521 matrix_struct=ao_ao_fmstruct, &
522 name=
"SCF-WORK_MATRIX-2")
526 IF (dft_control%dft_plus_u)
THEN
528 IF (.NOT.
ASSOCIATED(scf_env%scf_work2))
THEN
529 ALLOCATE (scf_env%scf_work2)
531 matrix_struct=ao_ao_fmstruct, &
532 name=
"SCF-WORK_MATRIX-2")
534 IF (.NOT.
ASSOCIATED(scf_env%s_half))
THEN
535 ALLOCATE (scf_env%s_half)
537 matrix_struct=ao_ao_fmstruct, &
538 name=
"S**(1/2) MATRIX")
544 IF (.NOT.
ASSOCIATED(scf_env%scf_work1))
THEN
546 ALLOCATE (scf_env%scf_work1(nw))
547 DO is = 1,
SIZE(scf_env%scf_work1)
549 matrix_struct=ao_ao_fmstruct, &
550 name=
"SCF-WORK_MATRIX-1-"//trim(adjustl(
cp_to_string(is))))
557 CALL timestop(handle)
559 END SUBROUTINE qs_scf_ensure_work_matrices
565 SUBROUTINE qs_scf_ensure_mos(qs_env)
568 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_scf_ensure_mos'
570 INTEGER :: handle, ic, ik, ikk, ispin, nmo, nmo_mat
572 TYPE(
cp_fm_type),
POINTER :: mo_coeff, mo_coeff_last
574 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s
578 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: mos, mos_last_converged
579 TYPE(
mo_set_type),
DIMENSION(:, :),
POINTER :: mos_k
582 CALL timeset(routinen, handle)
584 NULLIFY (ao_mo_fm_pools, dft_control, mos, xas_env, matrix_s, mos_last_converged, mo_coeff_last)
587 dft_control=dft_control, &
589 matrix_s_kp=matrix_s, &
591 CALL mpools_get(qs_env%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
592 IF (dft_control%switch_surf_dip)
THEN
593 CALL get_qs_env(qs_env, mos_last_converged=mos_last_converged)
596 nmo_mat = dft_control%nspins
597 IF (dft_control%restricted) nmo_mat = 1
600 cpassert(
ASSOCIATED(mos))
601 DO ispin = 1,
SIZE(mos)
602 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff, mo_coeff_b=mo_coeff_b)
603 IF (.NOT.
ASSOCIATED(mo_coeff))
THEN
605 fm_pool=ao_mo_fm_pools(ispin)%pool, &
608 IF (.NOT.
ASSOCIATED(mo_coeff_b))
THEN
612 sym=dbcsr_type_no_symmetry)
616 IF (qs_env%requires_mo_derivs)
THEN
618 IF (.NOT.
ASSOCIATED(mo_derivs))
THEN
619 ALLOCATE (mo_derivs(nmo_mat))
620 DO ispin = 1, nmo_mat
621 CALL get_mo_set(mos(ispin), mo_coeff_b=mo_coeff_b)
622 NULLIFY (mo_derivs(ispin)%matrix)
624 CALL dbcsr_create(mo_derivs(ispin)%matrix, template=mo_coeff_b, &
625 name=
"mo_derivs", matrix_type=dbcsr_type_no_symmetry)
635 IF (dft_control%do_admm)
THEN
636 IF (dft_control%restricted) cpabort(
"ROKS with ADMM is not implemented")
640 IF (dft_control%switch_surf_dip)
THEN
641 cpassert(
ASSOCIATED(mos_last_converged))
642 DO ispin = 1,
SIZE(mos_last_converged)
643 CALL get_mo_set(mos_last_converged(ispin), mo_coeff=mo_coeff_last)
644 IF (.NOT.
ASSOCIATED(mo_coeff_last))
THEN
646 fm_ref=mos(ispin)%mo_coeff, &
647 name=
"qs_env%mos_last_converged"//trim(adjustl(
cp_to_string(ispin))))
652 CALL get_qs_env(qs_env=qs_env, kpoints=kpoints)
653 IF (kpoints%nkp /= 0)
THEN
655 IF (qs_env%requires_mo_derivs)
THEN
656 cpwarn(
"MO derivative methods flag has been switched off for kpoint calculation")
659 qs_env%requires_mo_derivs = .false.
661 IF (dft_control%do_xas_calculation) &
662 cpabort(
"No XAS implemented with kpoints")
663 DO ik = 1,
SIZE(kpoints%kp_env)
664 CALL mpools_get(kpoints%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
665 mos_k => kpoints%kp_env(ik)%kpoint_env%mos
666 ikk = kpoints%kp_range(1) + ik - 1
667 cpassert(
ASSOCIATED(mos_k))
668 DO ispin = 1,
SIZE(mos_k, 2)
669 DO ic = 1,
SIZE(mos_k, 1)
670 CALL get_mo_set(mos_k(ic, ispin), mo_coeff=mo_coeff, mo_coeff_b=mo_coeff_b)
671 IF (.NOT.
ASSOCIATED(mo_coeff))
THEN
673 fm_pool=ao_mo_fm_pools(ispin)%pool, &
678 cpassert(.NOT.
ASSOCIATED(mo_coeff_b))
684 CALL timestop(handle)
686 END SUBROUTINE qs_scf_ensure_mos
695 SUBROUTINE qs_scf_ensure_mixing(scf_control, scf_section, scf_env, dft_control)
703 SELECT CASE (scf_control%mixing_method)
706 scf_env%p_mix_alpha = 1.0_dp
708 scf_env%mixing_method = scf_control%mixing_method
710 IF (.NOT.
ASSOCIATED(scf_env%mixing_store))
THEN
711 ALLOCATE (scf_env%mixing_store)
713 dft_control%qs_control%cutoff)
716 cpabort(
"Unknown mixing method")
723 scf_env%p_mix_alpha = 1.0_dp
724 scf_env%skip_diis = .true.
727 IF (scf_control%use_diag .AND. scf_env%mixing_method ==
no_mixing_nr)
THEN
728 cpabort(
"Diagonalization procedures without mixing are not recommendable")
732 scf_env%skip_diis = .true.
733 scf_env%p_mix_alpha = scf_env%mixing_store%alpha
734 IF (scf_env%mixing_store%beta == 0.0_dp)
THEN
735 cpabort(
"Mixing employing the Kerker damping factor needs BETA /= 0.0")
740 scf_env%p_mix_alpha = scf_env%mixing_store%alpha
741 IF (scf_control%eps_diis < scf_control%eps_scf)
THEN
742 scf_env%skip_diis = .true.
743 cpwarn(
"the DIIS scheme is disabled, since EPS_DIIS < EPS_SCF")
747 END SUBROUTINE qs_scf_ensure_mixing
758 SUBROUTINE qs_scf_ensure_diagonalization(scf_env, scf_section, qs_env, &
759 scf_control, has_unit_metric)
764 LOGICAL :: has_unit_metric
766 INTEGER :: ispin, nao, nmo
767 LOGICAL :: do_kpoints, need_coeff_b, not_se_or_tb
772 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints, dft_control=dft_control, mos=mos)
773 not_se_or_tb = .NOT. (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb .OR. &
774 dft_control%qs_control%semi_empirical)
775 need_coeff_b = .false.
776 scf_env%needs_ortho = .false.
778 IF (dft_control%smeagol_control%smeagol_enabled .AND. &
781 scf_env%skip_diis = .true.
782 scf_control%use_diag = .false.
784 IF (.NOT. do_kpoints)
THEN
785 cpabort(
"SMEAGOL requires kpoint calculations")
787 cpwarn_if(scf_control%use_ot,
"OT is irrelevant to NEGF method")
790 IF (scf_control%use_diag)
THEN
792 IF (dft_control%restricted) &
793 cpabort(
"OT only for restricted (ROKS)")
794 SELECT CASE (scf_control%diagonalization%method)
796 IF (.NOT. not_se_or_tb) &
797 cpabort(
"TB and SE not possible with OT diagonalization")
799 SELECT CASE (scf_control%diagonalization%method)
803 scf_env%needs_ortho = (.NOT. has_unit_metric) .AND. (.NOT. do_kpoints)
804 IF (has_unit_metric)
THEN
809 IF (dft_control%roks) &
810 cpabort(
"ROKS with OT diagonalization not possible")
812 cpabort(
"OT diagonalization not possible with kpoint calculations")
814 need_coeff_b = .true.
818 IF (dft_control%roks) &
819 cpabort(
"ROKS with block PF diagonalization not possible")
821 cpabort(
"Block Krylov diagonalization not possible with kpoint calculations")
823 scf_env%needs_ortho = .true.
824 IF (.NOT.
ASSOCIATED(scf_env%krylov_space)) &
830 cpabort(
"Block Davidson diagonalization not possible with kpoint calculations")
832 IF (.NOT.
ASSOCIATED(scf_env%block_davidson_env)) &
835 DO ispin = 1, dft_control%nspins
836 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, nao=nao, nmo=nmo)
839 need_coeff_b = .true.
852 cpabort(
"Unknown diagonalization method")
855 IF (scf_control%do_diag_sub)
THEN
856 scf_env%needs_ortho = .true.
857 IF (.NOT.
ASSOCIATED(scf_env%subspace_env)) &
859 dft_control%qs_control%cutoff)
862 cpabort(
"No subspace diagonlization with kpoint calculation")
865 ELSEIF (scf_control%use_ot)
THEN
867 need_coeff_b = .true.
868 IF (sum(abs(scf_control%added_mos)) > 0) &
869 cpabort(
"OT with ADDED_MOS/=0 not implemented")
870 IF (dft_control%restricted .AND. dft_control%nspins .NE. 2) &
871 cpabort(
"nspin must be 2 for restricted (ROKS)")
873 cpabort(
"OT not possible with kpoint calculations")
875 cpabort(
"OT or DIAGONALIZATION have to be set")
877 DO ispin = 1, dft_control%nspins
878 mos(ispin)%use_mo_coeff_b = need_coeff_b
881 END SUBROUTINE qs_scf_ensure_diagonalization
894 SUBROUTINE init_scf_run(scf_env, qs_env, scf_section, scf_control)
901 CHARACTER(LEN=*),
PARAMETER :: routinen =
'init_scf_run'
903 INTEGER :: after, handle, homo, ii, ikind, ispin, &
904 iw, nao, ndep, needed_evals, nmo, &
906 LOGICAL :: dft_plus_u_atom, do_kpoints, &
907 init_u_ramping_each_scf, omit_headers, &
908 s_minus_half_available
909 REAL(kind=
dp) :: u_ramping
910 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: evals
911 REAL(kind=
dp),
DIMENSION(:),
POINTER :: eigenvalues
920 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
925 CALL timeset(routinen, handle)
927 NULLIFY (qs_kind_set, matrix_s, dft_control, mos, qs_kind, rho, xas_env, mo_coeff)
931 cpassert(
ASSOCIATED(scf_env))
932 cpassert(
ASSOCIATED(qs_env))
935 s_minus_half_available = .false.
937 dft_control=dft_control, &
938 qs_kind_set=qs_kind_set, &
941 nelectron_total=scf_env%nelectron, &
942 do_kpoints=do_kpoints, &
950 "PRINT%PROGRAM_RUN_INFO")
954 IF (scf_env%needs_ortho)
THEN
970 ALLOCATE (evals(nao))
982 IF (evals(ii) > scf_control%eps_eigval)
THEN
987 needed_evals = nao - ndep
990 evals(1:ndep) = 0.0_dp
992 evals(ndep + 1:nao) = 1.0_dp/sqrt(evals(ndep + 1:nao))
997 nrow_global=nao, ncol_global=needed_evals)
999 ALLOCATE (scf_env%ortho_red, scf_env%scf_work2_red)
1004 IF (scf_control%level_shift /= 0.0_dp)
THEN
1006 nrow_global=needed_evals, ncol_global=nao)
1008 ALLOCATE (scf_env%ortho_m1_red)
1013 ALLOCATE (scf_env%scf_work1_red(
SIZE(scf_env%scf_work1)))
1014 DO ispin = 1,
SIZE(scf_env%scf_work1)
1016 nrow_global=needed_evals, ncol_global=needed_evals)
1017 CALL cp_fm_create(scf_env%scf_work1_red(ispin), fm_struct)
1022 CALL cp_fm_to_fm(evecs, scf_env%ortho_red, needed_evals, ndep + 1, 1)
1024 IF (scf_control%level_shift /= 0.0_dp)
THEN
1032 DO ispin = 1,
SIZE(mos)
1033 CALL get_mo_set(mos(ispin), nmo=nmo, mo_coeff=mo_coeff, homo=homo, eigenvalues=eigenvalues)
1034 IF (needed_evals < nmo)
THEN
1035 IF (needed_evals < homo)
THEN
1036 CALL cp_abort(__location__, &
1037 "The numerical rank of the overlap matrix is lower than the "// &
1038 "number of orbitals to be occupied! Check the geometry or increase "// &
1039 "EPS_DEFAULT or EPS_PGF_ORB!")
1041 CALL cp_warn(__location__, &
1042 "The numerical rank of the overlap matrix is lower than the number of requested MOs! "// &
1043 "Reduce the number of MOs to the number of available MOs. If necessary, request a lower number of "// &
1044 "MOs or increase EPS_DEFAULT or EPS_PGF_ORB.")
1045 CALL set_mo_set(mos(ispin), nmo=needed_evals)
1048 CALL cp_fm_to_fm(evecs, mo_coeff, min(ndep, max(0, nmo - needed_evals)), 1, needed_evals + 1)
1051 eigenvalues(needed_evals + 1:min(nao, nmo)) = 1.0_dp/scf_control%eps_eigval
1055 CALL parallel_gemm(
"N",
"T", nao, nao, needed_evals, 1.0_dp, scf_env%ortho_red, evecs, &
1056 0.0_dp, scf_env%ortho, b_first_col=ndep + 1)
1058 IF (scf_control%level_shift /= 0.0_dp)
THEN
1060 evals(ndep + 1:nao) = 1.0_dp/evals(ndep + 1:nao)
1063 CALL parallel_gemm(
"T",
"T", nao, nao, needed_evals, 1.0_dp, scf_env%ortho_m1_red, evecs, &
1064 0.0_dp, scf_env%ortho_m1, b_first_col=ndep + 1)
1069 s_minus_half_available = .true.
1073 qs_env%input,
"DFT%PRINT%AO_MATRICES/ORTHO"),
cp_p_file))
THEN
1077 CALL section_vals_val_get(qs_env%input,
"DFT%PRINT%AO_MATRICES%OMIT_HEADERS", l_val=omit_headers)
1078 after = min(max(after, 1), 16)
1080 para_env, output_unit=iw, omit_headers=omit_headers)
1082 "DFT%PRINT%AO_MATRICES/ORTHO")
1089 IF (dft_control%dft_plus_u)
THEN
1092 IF (s_minus_half_available)
THEN
1097 CALL cp_fm_power(scf_env%s_half, scf_env%scf_work2, 0.5_dp, &
1098 scf_control%eps_eigval, ndep)
1101 DO ikind = 1,
SIZE(qs_kind_set)
1102 qs_kind => qs_kind_set(ikind)
1104 dft_plus_u_atom=dft_plus_u_atom, &
1105 u_ramping=u_ramping, &
1106 init_u_ramping_each_scf=init_u_ramping_each_scf)
1107 IF (dft_plus_u_atom .AND. (u_ramping /= 0.0_dp))
THEN
1108 IF (init_u_ramping_each_scf)
THEN
1109 CALL set_qs_kind(qs_kind=qs_kind, u_minus_j=0.0_dp)
1116 extension=
".scfLog")
1117 IF (output_unit > 0)
THEN
1118 WRITE (unit=output_unit, fmt=
"(T2,A,T71,I10)") &
1119 "Number of independent orbital functions:", nao - ndep
1122 "PRINT%PROGRAM_RUN_INFO")
1125 IF (scf_control%outer_scf%have_scf)
THEN
1130 IF (
ASSOCIATED(qs_env%xas_env))
THEN
1137 CALL scf_env_initial_rho_setup(scf_env, qs_env=qs_env, &
1138 scf_section=scf_section, scf_control=scf_control)
1142 IF (
ASSOCIATED(qs_env%wf_history))
THEN
1144 IF (.NOT.
ASSOCIATED(qs_env%wf_history%past_states(1)%snapshot))
THEN
1145 CALL wfi_update(qs_env%wf_history, qs_env=qs_env, dt=1.0_dp)
1146 ALLOCATE (qs_env%wf_history%past_states(1)%snapshot%rho_frozen)
1147 CALL qs_rho_create(qs_env%wf_history%past_states(1)%snapshot%rho_frozen)
1149 rho_output=qs_env%wf_history%past_states(1)%snapshot%rho_frozen, &
1156 IF (qs_env%qmmm)
THEN
1157 IF (qs_env%qmmm .AND. qs_env%qmmm_env_qm%image_charge)
THEN
1159 qmmm_env=qs_env%qmmm_env_qm)
1163 CALL timestop(handle)
1165 END SUBROUTINE init_scf_run
1177 SUBROUTINE scf_env_initial_rho_setup(scf_env, qs_env, scf_section, scf_control)
1183 CHARACTER(len=*),
PARAMETER :: routinen =
'scf_env_initial_rho_setup'
1185 INTEGER :: extrapolation_method_nr, handle, ispin, &
1187 LOGICAL :: do_harris, orthogonal_wf
1197 CALL timeset(routinen, handle)
1198 NULLIFY (mo_coeff, rho, dft_control, para_env, mos)
1200 cpassert(
ASSOCIATED(scf_env))
1201 cpassert(
ASSOCIATED(qs_env))
1206 dft_control=dft_control, &
1209 do_harris = qs_env%harris_method
1212 IF (
ASSOCIATED(qs_env%wf_history))
THEN
1214 qs_env=qs_env, dt=1.0_dp, &
1215 extrapolation_method_nr=extrapolation_method_nr, &
1216 orthogonal_wf=orthogonal_wf)
1218 IF ((.NOT. orthogonal_wf) .AND. &
1221 DO ispin = 1,
SIZE(mos)
1222 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff, nmo=nmo)
1224 IF (dft_control%hairy_probes .EQV. .true.)
THEN
1225 scf_control%smear%do_smear = .false.
1227 smear=scf_control%smear, probe=dft_control%probe)
1230 smear=scf_control%smear)
1236 IF (.NOT. do_harris)
THEN
1238 extension=
".scfLog")
1239 IF (output_unit > 0)
THEN
1240 WRITE (unit=output_unit, fmt=
"(/,T2,A,I0)") &
1241 "Extrapolation method: "// &
1244 WRITE (unit=output_unit, fmt=
"(T2,A,I0,A)") &
1245 "Extrapolation order: ", &
1246 max((min(qs_env%wf_history%memory_depth, qs_env%wf_history%snapshot_count) - 1), 0)
1250 "PRINT%PROGRAM_RUN_INFO")
1254 CALL get_qs_env(qs_env, harris_env=harris_env)
1265 IF (scf_env%mixing_method > 1)
THEN
1266 IF (dft_control%qs_control%gapw)
THEN
1267 CALL get_qs_env(qs_env=qs_env, rho_atom_set=rho_atom)
1268 CALL mixing_init(scf_env%mixing_method, rho, scf_env%mixing_store, &
1269 para_env, rho_atom=rho_atom)
1270 ELSEIF (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb)
THEN
1272 ELSEIF (dft_control%qs_control%semi_empirical)
THEN
1273 cpabort(
'SE Code not possible')
1275 CALL mixing_init(scf_env%mixing_method, rho, scf_env%mixing_store, &
1280 DO ispin = 1,
SIZE(mos)
1281 IF (mos(ispin)%use_mo_coeff_b)
THEN
1283 mos(ispin)%mo_coeff_b)
1287 CALL timestop(handle)
1289 END SUBROUTINE scf_env_initial_rho_setup
Define the atomic kind types and their sub types.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_init_p(matrix)
...
DBCSR operations in CP2K.
subroutine, public cp_dbcsr_sm_fm_multiply(matrix, fm_in, fm_out, ncol, alpha, beta)
multiply a dbcsr with a fm matrix
subroutine, public copy_dbcsr_to_fm(matrix, fm)
Copy a DBCSR matrix to a BLACS matrix.
subroutine, public cp_dbcsr_m_by_n_from_row_template(matrix, template, n, sym)
Utility function to create dbcsr matrix, m x n matrix (n arbitrary) with the same processor grid and ...
subroutine, public copy_fm_to_dbcsr(fm, matrix, keep_sparsity)
Copy a BLACS matrix to a dbcsr matrix.
subroutine, public write_fm_with_basis_info(blacs_matrix, before, after, qs_env, para_env, first_row, last_row, first_col, last_col, output_unit, omit_headers)
Print a spherical matrix of blacs type.
Basic linear algebra operations for full matrices.
subroutine, public cp_fm_row_scale(matrixa, scaling)
scales row i of matrix a with scaling(i)
subroutine, public cp_fm_column_scale(matrixa, scaling)
scales column i of matrix a with scaling(i)
subroutine, public cp_fm_transpose(matrix, matrixt)
transposes a matrix matrixt = matrix ^ T
subroutine, public cp_fm_triangular_invert(matrix_a, uplo_tr)
inverts a triangular matrix
various cholesky decomposition related routines
subroutine, public cp_fm_cholesky_decompose(matrix, n, info_out)
used to replace a symmetric positive def. matrix M with its cholesky decomposition U: M = U^T * U,...
used for collecting some of the diagonalization schemes available for cp_fm_type. cp_fm_power also mo...
subroutine, public cp_fm_power(matrix, work, exponent, threshold, n_dependent, verbose, eigvals)
...
subroutine, public choose_eigv_solver(matrix, eigenvectors, eigenvalues, info)
Choose the Eigensolver depending on which library is available ELPA seems to be unstable for small sy...
pool for for elements that are retained and released
type(cp_fm_struct_type) function, pointer, public fm_pool_get_el_struct(pool)
returns the structure of the elements in this pool
represent the structure of a full matrix
subroutine, public cp_fm_struct_create(fmstruct, para_env, context, nrow_global, ncol_global, nrow_block, ncol_block, descriptor, first_p_pos, local_leading_dimension, template_fmstruct, square_blocks, force_block)
allocates and initializes a full matrix structure
subroutine, public cp_fm_struct_get(fmstruct, para_env, context, descriptor, ncol_block, nrow_block, nrow_global, ncol_global, first_p_pos, row_indices, col_indices, nrow_local, ncol_local, nrow_locals, ncol_locals, local_leading_dimension)
returns the values of various attributes of the matrix structure
subroutine, public cp_fm_struct_release(fmstruct)
releases a full matrix structure
represent a full matrix distributed on many processors
subroutine, public cp_fm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, nrow_locals, ncol_locals, matrix_struct, para_env)
returns all kind of information about the full matrix
subroutine, public cp_fm_set_all(matrix, alpha, beta)
set all elements of a matrix to the same value, and optionally the diagonal to a different one
subroutine, public cp_fm_to_fm_triangular(msource, mtarget, uplo)
copy just a triangular matrix
subroutine, public cp_fm_create(matrix, matrix_struct, name, use_sp)
creates a new full matrix with the given structure
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
integer, parameter, public cp_p_file
integer function, public cp_print_key_should_output(iteration_info, basis_section, print_key_path, used_print_key, first_time)
returns what should be done with the given property if btest(res,cp_p_store) then the property should...
subroutine, public ao_boundaries(probe, atomic_kind_set, qs_kind_set, particle_set, nao)
...
Defines the basic variable types.
integer, parameter, public dp
Types and basic routines needed for a kpoint calculation.
Interface to the message passing library MPI.
basic linear algebra operations for full matrixes
Define the data structure for the particle information.
Routines for image charge calculation within QM/MM.
subroutine, public conditional_calc_image_matrix(qs_env, qmmm_env)
calculate image matrix T depending on constraints on image atoms in case coefficients are estimated n...
module that contains the algorithms to perform an itrative diagonalization by the block-Davidson appr...
subroutine, public block_davidson_allocate(bdav_env, mo_coeff, nao, nmo)
...
subroutine, public block_davidson_env_create(bdav_env, nspins, scf_section)
...
Control parameters for optimizers that work with CDFT constraints.
subroutine, public cdft_opt_type_copy(new, old)
copies settings between two CDFT optimizer control objects retaining both
module that contains the definitions of the scf types
subroutine, public mixing_storage_release(mixing_store)
releases a mixing_storage
integer, parameter, public no_mixing_nr
integer, parameter, public direct_mixing_nr
subroutine, public mixing_storage_create(mixing_store, mixing_section, mixing_method, ecut)
creates a mixing_storage
subroutine, public set_qs_env(qs_env, super_cell, mos, qmmm, qmmm_periodic, ewald_env, ewald_pw, mpools, rho_external, external_vxc, mask, scf_control, rel_control, qs_charges, ks_env, ks_qmmm_env, wf_history, scf_env, active_space, input, oce, rho_atom_set, rho0_atom_set, rho0_mpole, run_rtp, rtp, rhoz_set, rhoz_tot, ecoul_1c, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, efield, linres_control, xas_env, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, ls_scf_env, do_transport, transport_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, harris_env, gcp_env, mp2_env, bs_env, kg_env, force, kpoints, wanniercentres, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, tb_tblite)
Set the QUICKSTEP environment.
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_pp, 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, harris_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, eeq, rhs, tb_tblite)
Get the QUICKSTEP environment.
subroutine, public fb_distribution_build(fb_env, qs_env, scf_section)
Build local atoms associated to filter matrix algorithm for each MPI process, trying to balance the l...
subroutine, public fb_env_read_input(fb_env, scf_section)
Read input sections for filter matrix method.
subroutine, public fb_env_build_atomic_halos(fb_env, qs_env, scf_section)
Builds an fb_atomic_halo_list object using information from fb_env.
subroutine, public fb_env_write_info(fb_env, qs_env, scf_section)
Write out parameters used for the filter matrix method to output.
subroutine, public fb_env_build_rcut_auto(fb_env, qs_env)
Automatically generate the cutoff radii of atoms used for constructing the atomic halos,...
logical function, public fb_env_has_data(fb_env)
Checks if a fb_env object is associated with an actual data content or not.
subroutine, public fb_env_create(fb_env)
creates an empty fb_env object
Types needed for a for a Harris model calculation.
Harris method environment setup and handling.
subroutine, public harris_density_update(qs_env, harris_env)
...
Routines to somehow generate an initial guess.
subroutine, public calculate_first_density_matrix(scf_env, qs_env)
can use a variety of methods to come up with an initial density matrix and optionally an initial wave...
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, 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 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 qs_ks_did_change(ks_env, s_mstruct_changed, rho_changed, potential_changed, full_reset)
tells that some of the things relevant to the ks calculation did change. has to be called when change...
wrapper for the pools of matrixes
subroutine, public mpools_get(mpools, ao_mo_fm_pools, ao_ao_fm_pools, mo_mo_fm_pools, ao_mosub_fm_pools, mosub_mosub_fm_pools, maxao_maxmo_fm_pool, maxao_maxao_fm_pool, maxmo_maxmo_fm_pool)
returns various attributes of the mpools (notably the pools contained in it)
elemental subroutine, public charge_mixing_init(mixing_store)
initialiation needed when charge mixing is used
subroutine, public mixing_init(mixing_method, rho, mixing_store, para_env, rho_atom)
initialiation needed when gspace mixing is used
subroutine, public mixing_allocate(qs_env, mixing_method, p_mix_new, p_delta, nspins, mixing_store)
allocation needed when density mixing is used
Set occupation of molecular orbitals.
Definition and initialisation of the mo data type.
subroutine, public set_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, uniform_occupation, kts, mu, flexible_electron_count)
Set the components of a MO set data structure.
subroutine, public get_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, mo_coeff, mo_coeff_b, uniform_occupation, kts, mu, flexible_electron_count)
Get the components of a MO set data structure.
subroutine, public init_mo_set(mo_set, fm_pool, fm_ref, fm_struct, name)
initializes an allocated mo_set. eigenvalues, mo_coeff, occupation_numbers are valid only after this ...
Routines for performing an outer scf loop.
subroutine, public outer_loop_switch(scf_env, scf_control, cdft_control, dir)
switch between two outer_scf envs stored in cdft_control
subroutine, public outer_loop_extrapolate(qs_env)
uses the outer_scf_history to extrapolate new values for the variables and updates their value in qs_...
integer function, public outer_loop_variables_count(scf_control, cdft_control)
returns the number of variables that is employed in the outer loop. with a CDFT constraint this value...
methods of the rho structure (defined in qs_rho_types)
subroutine, public qs_rho_update_rho(rho_struct, qs_env, rho_xc_external, local_rho_set, task_list_external, task_list_external_soft, pw_env_external, para_env_external)
updates rho_r and rho_g to the rhorho_ao. if use_kinetic_energy_density also computes tau_r and tau_g...
subroutine, public duplicate_rho_type(rho_input, rho_output, qs_env)
Duplicates a pointer physically.
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_get(rho_struct, rho_ao, rho_ao_im, rho_ao_kp, rho_ao_im_kp, rho_r, drho_r, rho_g, drho_g, tau_r, tau_g, rho_r_valid, drho_r_valid, rho_g_valid, drho_g_valid, tau_r_valid, tau_g_valid, tot_rho_r, tot_rho_g, rho_r_sccs, soft_valid, complex_rho_ao)
returns info about the density described by this object. If some representation is not available an e...
subroutine, public qs_rho_create(rho)
Allocates a new instance of rho.
Different diagonalization schemes that can be used for the iterative solution of the eigenvalue probl...
subroutine, public diag_subspace_allocate(subspace_env, qs_env, mos)
...
Utility routines for qs_scf.
subroutine, public qs_scf_env_init_basic(qs_env, scf_env)
initializes input parameters if needed for non-scf calclulations using diagonalization
subroutine, public qs_scf_env_initialize(qs_env, scf_env, scf_control, scf_section)
initializes input parameters if needed or restores values from previous runs to fill scf_env with the...
module that contains the algorithms to perform an itrative diagonalization by the block-Lanczos appro...
subroutine, public krylov_space_allocate(krylov_space, scf_control, mos)
allocates matrices and vectros used in the construction of the krylov space and for the lanczos refin...
subroutine, public qs_scf_initial_info(output_unit, mos, dft_control)
writes basic information at the beginning of an scf run
module that contains the definitions of the scf types
integer, parameter, public ot_diag_method_nr
subroutine, public krylov_space_create(krylov_space, scf_section)
creates krylov space
subroutine, public diag_subspace_env_create(subspace_env, scf_section, ecut)
creates subspace-rotation environment
integer, parameter, public filter_matrix_diag_method_nr
integer, parameter, public block_davidson_diag_method_nr
integer, parameter, public smeagol_method_nr
integer, parameter, public ot_method_nr
subroutine, public scf_env_create(scf_env)
allocates and initialize an scf_env
integer, parameter, public special_diag_method_nr
integer, parameter, public block_krylov_diag_method_nr
integer, parameter, public general_diag_method_nr
Storage of past states of the qs_env. Methods to interpolate (or actually normally extrapolate) the n...
character(len=30) function, public wfi_get_method_label(method_nr)
returns a string describing the interpolation method
subroutine, public reorthogonalize_vectors(qs_env, v_matrix, n_col)
reorthogonalizes the mos
subroutine, public wfi_update(wf_history, qs_env, dt)
updates the snapshot buffer, taking a new snapshot
subroutine, public wfi_extrapolate(wf_history, qs_env, dt, extrapolation_method_nr, orthogonal_wf)
calculates the new starting state for the scf for the next wf optimization
parameters that control an scf iteration
define create destroy get and put information in xas_env to calculate the x-ray absorption spectra
Initialize the XAS orbitals for specific core excitations Either the GS orbitals are used as initial ...
subroutine, public xas_initialize_rho(qs_env, scf_env, scf_control)
Once the mos and the occupation numbers are initialized the electronic density of the excited state c...
Provides all information about an atomic kind.
to create arrays of pools
keeps the information about the structure of a full matrix
type of a logger, at the moment it contains just a print level starting at which level it should be l...
Contains information about kpoints.
stores all the informations relevant to an mpi environment
Contains information on the Harris method.
Provides all information about a quickstep kind.
keeps the density in various representations, keeping track of which ones are valid.