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 IF (qs_env%do_rixs) &
664 cpabort(
"RIXS not implemented with kpoints")
665 DO ik = 1,
SIZE(kpoints%kp_env)
666 CALL mpools_get(kpoints%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
667 mos_k => kpoints%kp_env(ik)%kpoint_env%mos
668 ikk = kpoints%kp_range(1) + ik - 1
669 cpassert(
ASSOCIATED(mos_k))
670 DO ispin = 1,
SIZE(mos_k, 2)
671 DO ic = 1,
SIZE(mos_k, 1)
672 CALL get_mo_set(mos_k(ic, ispin), mo_coeff=mo_coeff, mo_coeff_b=mo_coeff_b)
673 IF (.NOT.
ASSOCIATED(mo_coeff))
THEN
675 fm_pool=ao_mo_fm_pools(ispin)%pool, &
680 cpassert(.NOT.
ASSOCIATED(mo_coeff_b))
686 CALL timestop(handle)
688 END SUBROUTINE qs_scf_ensure_mos
697 SUBROUTINE qs_scf_ensure_mixing(scf_control, scf_section, scf_env, dft_control)
705 SELECT CASE (scf_control%mixing_method)
708 scf_env%p_mix_alpha = 1.0_dp
710 scf_env%mixing_method = scf_control%mixing_method
712 IF (.NOT.
ASSOCIATED(scf_env%mixing_store))
THEN
713 ALLOCATE (scf_env%mixing_store)
715 dft_control%qs_control%cutoff)
718 cpabort(
"Unknown mixing method")
725 scf_env%p_mix_alpha = 1.0_dp
726 scf_env%skip_diis = .true.
729 IF (scf_control%use_diag .AND. scf_env%mixing_method ==
no_mixing_nr)
THEN
730 cpabort(
"Diagonalization procedures without mixing are not recommendable")
734 scf_env%skip_diis = .true.
735 scf_env%p_mix_alpha = scf_env%mixing_store%alpha
736 IF (scf_env%mixing_store%beta == 0.0_dp)
THEN
737 cpabort(
"Mixing employing the Kerker damping factor needs BETA /= 0.0")
742 scf_env%p_mix_alpha = scf_env%mixing_store%alpha
743 IF (scf_control%eps_diis < scf_control%eps_scf)
THEN
744 scf_env%skip_diis = .true.
745 cpwarn(
"the DIIS scheme is disabled, since EPS_DIIS < EPS_SCF")
749 END SUBROUTINE qs_scf_ensure_mixing
760 SUBROUTINE qs_scf_ensure_diagonalization(scf_env, scf_section, qs_env, &
761 scf_control, has_unit_metric)
766 LOGICAL :: has_unit_metric
768 INTEGER :: ispin, nao, nmo
769 LOGICAL :: do_kpoints, need_coeff_b, not_se_or_tb
774 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints, dft_control=dft_control, mos=mos)
775 not_se_or_tb = .NOT. (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb .OR. &
776 dft_control%qs_control%semi_empirical)
777 need_coeff_b = .false.
778 scf_env%needs_ortho = .false.
780 IF (dft_control%smeagol_control%smeagol_enabled .AND. &
783 scf_env%skip_diis = .true.
784 scf_control%use_diag = .false.
786 IF (.NOT. do_kpoints)
THEN
787 cpabort(
"SMEAGOL requires kpoint calculations")
789 cpwarn_if(scf_control%use_ot,
"OT is irrelevant to NEGF method")
792 IF (scf_control%use_diag)
THEN
794 IF (dft_control%restricted) &
795 cpabort(
"OT only for restricted (ROKS)")
796 SELECT CASE (scf_control%diagonalization%method)
798 IF (.NOT. not_se_or_tb) &
799 cpabort(
"TB and SE not possible with OT diagonalization")
801 SELECT CASE (scf_control%diagonalization%method)
805 scf_env%needs_ortho = (.NOT. has_unit_metric) .AND. (.NOT. do_kpoints)
806 IF (has_unit_metric)
THEN
811 IF (dft_control%roks) &
812 cpabort(
"ROKS with OT diagonalization not possible")
814 cpabort(
"OT diagonalization not possible with kpoint calculations")
816 need_coeff_b = .true.
820 IF (dft_control%roks) &
821 cpabort(
"ROKS with block PF diagonalization not possible")
823 cpabort(
"Block Krylov diagonalization not possible with kpoint calculations")
825 scf_env%needs_ortho = .true.
826 IF (.NOT.
ASSOCIATED(scf_env%krylov_space)) &
832 cpabort(
"Block Davidson diagonalization not possible with kpoint calculations")
834 IF (.NOT.
ASSOCIATED(scf_env%block_davidson_env)) &
837 DO ispin = 1, dft_control%nspins
838 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, nao=nao, nmo=nmo)
841 need_coeff_b = .true.
854 cpabort(
"Unknown diagonalization method")
857 IF (scf_control%do_diag_sub)
THEN
858 scf_env%needs_ortho = .true.
859 IF (.NOT.
ASSOCIATED(scf_env%subspace_env)) &
861 dft_control%qs_control%cutoff)
864 cpabort(
"No subspace diagonlization with kpoint calculation")
867 ELSEIF (scf_control%use_ot)
THEN
869 need_coeff_b = .true.
870 IF (sum(abs(scf_control%added_mos)) > 0) &
871 cpabort(
"OT with ADDED_MOS/=0 not implemented")
872 IF (dft_control%restricted .AND. dft_control%nspins .NE. 2) &
873 cpabort(
"nspin must be 2 for restricted (ROKS)")
875 cpabort(
"OT not possible with kpoint calculations")
877 cpabort(
"OT or DIAGONALIZATION have to be set")
879 DO ispin = 1, dft_control%nspins
880 mos(ispin)%use_mo_coeff_b = need_coeff_b
883 END SUBROUTINE qs_scf_ensure_diagonalization
896 SUBROUTINE init_scf_run(scf_env, qs_env, scf_section, scf_control)
903 CHARACTER(LEN=*),
PARAMETER :: routinen =
'init_scf_run'
905 INTEGER :: after, handle, homo, ii, ikind, ispin, &
906 iw, nao, ndep, needed_evals, nmo, &
908 LOGICAL :: dft_plus_u_atom, do_kpoints, &
909 init_u_ramping_each_scf, omit_headers, &
910 s_minus_half_available
911 REAL(kind=
dp) :: u_ramping
912 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: evals
913 REAL(kind=
dp),
DIMENSION(:),
POINTER :: eigenvalues
922 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
927 CALL timeset(routinen, handle)
929 NULLIFY (qs_kind_set, matrix_s, dft_control, mos, qs_kind, rho, xas_env, mo_coeff)
933 cpassert(
ASSOCIATED(scf_env))
934 cpassert(
ASSOCIATED(qs_env))
937 s_minus_half_available = .false.
939 dft_control=dft_control, &
940 qs_kind_set=qs_kind_set, &
943 nelectron_total=scf_env%nelectron, &
944 do_kpoints=do_kpoints, &
950 IF (scf_env%needs_ortho)
THEN
966 ALLOCATE (evals(nao))
978 IF (evals(ii) > scf_control%eps_eigval)
THEN
983 needed_evals = nao - ndep
986 evals(1:ndep) = 0.0_dp
988 evals(ndep + 1:nao) = 1.0_dp/sqrt(evals(ndep + 1:nao))
993 nrow_global=nao, ncol_global=needed_evals)
995 ALLOCATE (scf_env%ortho_red, scf_env%scf_work2_red)
1000 IF (scf_control%level_shift /= 0.0_dp)
THEN
1002 nrow_global=needed_evals, ncol_global=nao)
1004 ALLOCATE (scf_env%ortho_m1_red)
1009 ALLOCATE (scf_env%scf_work1_red(
SIZE(scf_env%scf_work1)))
1010 DO ispin = 1,
SIZE(scf_env%scf_work1)
1012 nrow_global=needed_evals, ncol_global=needed_evals)
1013 CALL cp_fm_create(scf_env%scf_work1_red(ispin), fm_struct)
1018 CALL cp_fm_to_fm(evecs, scf_env%ortho_red, needed_evals, ndep + 1, 1)
1020 IF (scf_control%level_shift /= 0.0_dp)
THEN
1028 DO ispin = 1,
SIZE(mos)
1029 CALL get_mo_set(mos(ispin), nmo=nmo, mo_coeff=mo_coeff, homo=homo, eigenvalues=eigenvalues)
1030 IF (needed_evals < nmo)
THEN
1031 IF (needed_evals < homo)
THEN
1032 CALL cp_abort(__location__, &
1033 "The numerical rank of the overlap matrix is lower than the "// &
1034 "number of orbitals to be occupied! Check the geometry or increase "// &
1035 "EPS_DEFAULT or EPS_PGF_ORB!")
1037 CALL cp_warn(__location__, &
1038 "The numerical rank of the overlap matrix is lower than the number of requested MOs! "// &
1039 "Reduce the number of MOs to the number of available MOs. If necessary, "// &
1040 "request a lower number of MOs or increase EPS_DEFAULT or EPS_PGF_ORB.")
1041 CALL set_mo_set(mos(ispin), nmo=needed_evals)
1044 CALL cp_fm_to_fm(evecs, mo_coeff, min(ndep, max(0, nmo - needed_evals)), 1, needed_evals + 1)
1047 eigenvalues(needed_evals + 1:min(nao, nmo)) = 1.0_dp/scf_control%eps_eigval
1051 CALL parallel_gemm(
"N",
"T", nao, nao, needed_evals, 1.0_dp, scf_env%ortho_red, evecs, &
1052 0.0_dp, scf_env%ortho, b_first_col=ndep + 1)
1054 IF (scf_control%level_shift /= 0.0_dp)
THEN
1056 evals(ndep + 1:nao) = 1.0_dp/evals(ndep + 1:nao)
1059 CALL parallel_gemm(
"T",
"T", nao, nao, needed_evals, 1.0_dp, scf_env%ortho_m1_red, evecs, &
1060 0.0_dp, scf_env%ortho_m1, b_first_col=ndep + 1)
1065 s_minus_half_available = .true.
1069 qs_env%input,
"DFT%PRINT%AO_MATRICES/ORTHO"),
cp_p_file))
THEN
1073 CALL section_vals_val_get(qs_env%input,
"DFT%PRINT%AO_MATRICES%OMIT_HEADERS", l_val=omit_headers)
1074 after = min(max(after, 1), 16)
1076 para_env, output_unit=iw, omit_headers=omit_headers)
1078 "DFT%PRINT%AO_MATRICES/ORTHO")
1085 IF (dft_control%dft_plus_u)
THEN
1088 IF (s_minus_half_available)
THEN
1093 CALL cp_fm_power(scf_env%s_half, scf_env%scf_work2, 0.5_dp, &
1094 scf_control%eps_eigval, ndep)
1097 DO ikind = 1,
SIZE(qs_kind_set)
1098 qs_kind => qs_kind_set(ikind)
1100 dft_plus_u_atom=dft_plus_u_atom, &
1101 u_ramping=u_ramping, &
1102 init_u_ramping_each_scf=init_u_ramping_each_scf)
1103 IF (dft_plus_u_atom .AND. (u_ramping /= 0.0_dp))
THEN
1104 IF (init_u_ramping_each_scf)
THEN
1105 CALL set_qs_kind(qs_kind=qs_kind, u_minus_j=0.0_dp)
1112 IF (scf_control%outer_scf%have_scf)
THEN
1117 IF (
ASSOCIATED(qs_env%xas_env))
THEN
1124 CALL scf_env_initial_rho_setup(scf_env, qs_env=qs_env, &
1125 scf_section=scf_section, scf_control=scf_control)
1129 IF (
ASSOCIATED(qs_env%wf_history))
THEN
1131 IF (.NOT.
ASSOCIATED(qs_env%wf_history%past_states(1)%snapshot))
THEN
1132 CALL wfi_update(qs_env%wf_history, qs_env=qs_env, dt=1.0_dp)
1133 ALLOCATE (qs_env%wf_history%past_states(1)%snapshot%rho_frozen)
1134 CALL qs_rho_create(qs_env%wf_history%past_states(1)%snapshot%rho_frozen)
1136 rho_output=qs_env%wf_history%past_states(1)%snapshot%rho_frozen, &
1143 IF (qs_env%qmmm)
THEN
1144 IF (qs_env%qmmm .AND. qs_env%qmmm_env_qm%image_charge)
THEN
1146 qmmm_env=qs_env%qmmm_env_qm)
1151 extension=
".scfLog")
1154 "PRINT%PROGRAM_RUN_INFO")
1156 CALL timestop(handle)
1158 END SUBROUTINE init_scf_run
1170 SUBROUTINE scf_env_initial_rho_setup(scf_env, qs_env, scf_section, scf_control)
1176 CHARACTER(len=*),
PARAMETER :: routinen =
'scf_env_initial_rho_setup'
1178 INTEGER :: extrapolation_method_nr, handle, ispin, &
1180 LOGICAL :: do_harris, orthogonal_wf
1190 CALL timeset(routinen, handle)
1191 NULLIFY (mo_coeff, rho, dft_control, para_env, mos)
1193 cpassert(
ASSOCIATED(scf_env))
1194 cpassert(
ASSOCIATED(qs_env))
1199 dft_control=dft_control, &
1202 do_harris = qs_env%harris_method
1205 IF (
ASSOCIATED(qs_env%wf_history))
THEN
1207 qs_env=qs_env, dt=1.0_dp, &
1208 extrapolation_method_nr=extrapolation_method_nr, &
1209 orthogonal_wf=orthogonal_wf)
1211 IF ((.NOT. orthogonal_wf) .AND. &
1214 DO ispin = 1,
SIZE(mos)
1215 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff, nmo=nmo)
1217 IF (dft_control%hairy_probes .EQV. .true.)
THEN
1218 scf_control%smear%do_smear = .false.
1220 smear=scf_control%smear, probe=dft_control%probe)
1223 smear=scf_control%smear)
1229 IF (.NOT. do_harris)
THEN
1231 extension=
".scfLog")
1232 IF (output_unit > 0)
THEN
1233 WRITE (unit=output_unit, fmt=
"(/,T2,A,I0)") &
1234 "Extrapolation method: "// &
1237 WRITE (unit=output_unit, fmt=
"(T2,A,I0,A)") &
1238 "Extrapolation order: ", &
1239 max((min(qs_env%wf_history%memory_depth, qs_env%wf_history%snapshot_count) - 1), 0)
1243 "PRINT%PROGRAM_RUN_INFO")
1247 CALL get_qs_env(qs_env, harris_env=harris_env)
1258 IF (scf_env%mixing_method > 1)
THEN
1259 IF (dft_control%qs_control%gapw)
THEN
1260 CALL get_qs_env(qs_env=qs_env, rho_atom_set=rho_atom)
1261 CALL mixing_init(scf_env%mixing_method, rho, scf_env%mixing_store, &
1262 para_env, rho_atom=rho_atom)
1263 ELSEIF (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb)
THEN
1265 ELSEIF (dft_control%qs_control%semi_empirical)
THEN
1266 cpabort(
'SE Code not possible')
1268 CALL mixing_init(scf_env%mixing_method, rho, scf_env%mixing_store, &
1273 DO ispin = 1,
SIZE(mos)
1274 IF (mos(ispin)%use_mo_coeff_b)
THEN
1276 mos(ispin)%mo_coeff_b)
1280 CALL timestop(handle)
1282 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 iterative diagonalization by the block-Davidson app...
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 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, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
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, do_rixs, tb_tblite)
Set 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 iterative diagonalization by the block-Lanczos appr...
subroutine, public krylov_space_allocate(krylov_space, scf_control, mos)
allocates matrices and vectors used in the construction of the krylov space and for the lanczos refin...
subroutine, public qs_scf_initial_info(output_unit, mos, dft_control, ndep)
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.