19 dbcsr_type_no_symmetry
131#include "./base/base_uses.f90"
137 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_scf_initialization'
166 CALL get_qs_env(qs_env, input=input, dft_control=dft_control)
169 IF (dft_control%hairy_probes .EQV. .true.)
THEN
172 atomic_kind_set=atomic_kind_set, &
173 qs_kind_set=qs_kind_set, &
174 particle_set=particle_set)
175 np =
SIZE(dft_control%probe)
177 CALL ao_boundaries(probe=dft_control%probe(ip), atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set, &
178 particle_set=particle_set, nao=mos(1)%nao)
182 IF (
PRESENT(scf_control))
THEN
183 my_scf_control => scf_control
185 CALL get_qs_env(qs_env, scf_control=my_scf_control)
189 IF (
PRESENT(scf_section))
THEN
190 my_scf_section => scf_section
195 CALL qs_scf_ensure_scf_env(qs_env, scf_env)
199 CALL qs_scf_ensure_mos(qs_env)
202 CALL qs_scf_ensure_diagonalization(scf_env, my_scf_section, qs_env, &
203 my_scf_control, qs_env%has_unit_metric)
205 CALL qs_scf_ensure_mixing(my_scf_control, my_scf_section, scf_env, dft_control)
207 CALL qs_scf_ensure_work_matrices(qs_env, scf_env)
209 CALL qs_scf_ensure_mixing_store(qs_env, scf_env)
212 IF (dft_control%qs_control%cdft)
THEN
213 CALL qs_scf_ensure_cdft_loop_vars(qs_env, scf_env, dft_control, &
214 scf_control=my_scf_control)
216 CALL qs_scf_ensure_outer_loop_vars(scf_env, my_scf_control)
219 CALL init_scf_run(scf_env, qs_env, my_scf_section, my_scf_control)
236 CALL get_qs_env(qs_env, input=input, dft_control=dft_control)
238 CALL get_qs_env(qs_env, scf_control=scf_control)
242 CALL qs_scf_ensure_scf_env(qs_env, scf_env)
245 scf_control%use_diag = .true.
248 CALL qs_scf_ensure_mos(qs_env)
251 CALL qs_scf_ensure_diagonalization(scf_env, scf_section, qs_env, &
252 scf_control, qs_env%has_unit_metric)
253 CALL qs_scf_ensure_work_matrices(qs_env, scf_env)
255 CALL init_scf_run(scf_env, qs_env, scf_section, scf_control)
265 SUBROUTINE qs_scf_ensure_scf_env(qs_env, scf_env)
274 IF (.NOT.
ASSOCIATED(scf_env))
THEN
279 SELECT CASE (scf_env%mixing_method)
281 IF (
ASSOCIATED(scf_env%mixing_store))
THEN
287 IF (
ASSOCIATED(scf_env%mixing_store%rhoin))
THEN
288 IF (
SIZE(rho_g(1)%pw_grid%gsq) /=
SIZE(scf_env%mixing_store%rhoin(1)%cc))
THEN
290 DEALLOCATE (scf_env%mixing_store)
297 END SUBROUTINE qs_scf_ensure_scf_env
305 SUBROUTINE qs_scf_ensure_outer_loop_vars(scf_env, scf_control, nvar)
308 INTEGER,
OPTIONAL :: nvar
310 INTEGER :: nhistory, nvariables
312 IF (scf_control%outer_scf%have_scf)
THEN
313 nhistory = scf_control%outer_scf%max_scf + 1
314 IF (
PRESENT(nvar))
THEN
323 ALLOCATE (scf_env%outer_scf%variables(nvariables, nhistory))
324 ALLOCATE (scf_env%outer_scf%count(nhistory))
325 scf_env%outer_scf%count = 0
326 ALLOCATE (scf_env%outer_scf%gradient(nvariables, nhistory))
327 ALLOCATE (scf_env%outer_scf%energy(nhistory))
330 END SUBROUTINE qs_scf_ensure_outer_loop_vars
339 SUBROUTINE qs_scf_ensure_cdft_loop_vars(qs_env, scf_env, dft_control, scf_control)
345 INTEGER :: nhistory, nvariables
346 LOGICAL :: do_kpoints
347 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: gradient_history, outer_scf_history, &
350 NULLIFY (outer_scf_history, gradient_history, variable_history)
351 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints)
354 cpabort(
"CDFT calculation not possible with kpoints")
359 IF (.NOT. scf_control%outer_scf%have_scf)
THEN
360 cpabort(
"Section SCF&OUTER_SCF must be active for CDFT calculations.")
363 IF (dft_control%qs_control%cdft_control%constraint_control%have_scf)
THEN
364 nhistory = dft_control%qs_control%cdft_control%constraint_control%max_scf + 1
367 dft_control%qs_control%cdft_control)
370 nvariables =
SIZE(dft_control%qs_control%cdft_control%target)
372 ALLOCATE (dft_control%qs_control%cdft_control%constraint%variables(nvariables, nhistory))
373 ALLOCATE (dft_control%qs_control%cdft_control%constraint%count(nhistory))
374 dft_control%qs_control%cdft_control%constraint%count = 0
375 ALLOCATE (dft_control%qs_control%cdft_control%constraint%gradient(nvariables, nhistory))
376 ALLOCATE (dft_control%qs_control%cdft_control%constraint%energy(nhistory))
377 CALL qs_scf_ensure_outer_loop_vars(scf_env, scf_control, nvariables)
382 IF (scf_control%outer_scf%have_scf)
THEN
384 dft_control%qs_control%cdft_control%ot_control%have_scf = .true.
385 dft_control%qs_control%cdft_control%ot_control%max_scf = scf_control%outer_scf%max_scf
386 dft_control%qs_control%cdft_control%ot_control%eps_scf = scf_control%outer_scf%eps_scf
387 dft_control%qs_control%cdft_control%ot_control%step_size = scf_control%outer_scf%step_size
388 dft_control%qs_control%cdft_control%ot_control%type = scf_control%outer_scf%type
389 dft_control%qs_control%cdft_control%ot_control%optimizer = scf_control%outer_scf%optimizer
390 dft_control%qs_control%cdft_control%ot_control%diis_buffer_length = scf_control%outer_scf%diis_buffer_length
391 dft_control%qs_control%cdft_control%ot_control%bisect_trust_count = scf_control%outer_scf%bisect_trust_count
392 CALL cdft_opt_type_copy(dft_control%qs_control%cdft_control%ot_control%cdft_opt_control, &
393 scf_control%outer_scf%cdft_opt_control)
395 nvariables =
SIZE(dft_control%qs_control%cdft_control%target)
396 IF (scf_control%outer_scf%extrapolation_order /= &
397 dft_control%qs_control%cdft_control%constraint_control%extrapolation_order &
398 .OR. nvariables /= 1)
THEN
399 DEALLOCATE (qs_env%outer_scf_history)
400 DEALLOCATE (qs_env%gradient_history)
401 DEALLOCATE (qs_env%variable_history)
402 nhistory = dft_control%qs_control%cdft_control%constraint_control%extrapolation_order
403 ALLOCATE (outer_scf_history(nvariables, nhistory))
404 ALLOCATE (gradient_history(nvariables, 2))
405 gradient_history = 0.0_dp
406 ALLOCATE (variable_history(nvariables, 2))
407 variable_history = 0.0_dp
408 CALL set_qs_env(qs_env, outer_scf_history=outer_scf_history, &
409 gradient_history=gradient_history, variable_history=variable_history)
415 END SUBROUTINE qs_scf_ensure_cdft_loop_vars
422 SUBROUTINE qs_scf_ensure_mixing_store(qs_env, scf_env)
428 NULLIFY (dft_control)
429 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
431 IF (scf_env%mixing_method > 0)
THEN
432 CALL mixing_allocate(qs_env, scf_env%mixing_method, scf_env%p_mix_new, &
433 scf_env%p_delta, dft_control%nspins, &
434 scf_env%mixing_store)
436 NULLIFY (scf_env%p_mix_new)
439 END SUBROUTINE qs_scf_ensure_mixing_store
448 SUBROUTINE qs_scf_ensure_work_matrices(qs_env, scf_env)
453 CHARACTER(LEN=*),
PARAMETER :: routinen =
'qs_scf_ensure_work_matrices'
455 INTEGER :: handle, is, nao, nrow_block, nw
456 LOGICAL :: do_kpoints
459 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s
465 CALL timeset(routinen, handle)
467 NULLIFY (ao_mo_fm_pools, ao_mo_fmstruct, ao_ao_fmstruct, dft_control, matrix_s, mos)
470 dft_control=dft_control, &
471 matrix_s_kp=matrix_s, &
473 scf_control=scf_control, &
474 do_kpoints=do_kpoints)
475 CALL mpools_get(qs_env%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
482 nrow_block=nrow_block, &
483 ncol_block=nrow_block, &
486 template_fmstruct=ao_mo_fmstruct)
490 IF (.NOT.
ASSOCIATED(scf_env%scf_work1))
THEN
491 nw = dft_control%nspins
492 IF (do_kpoints) nw = 4
493 ALLOCATE (scf_env%scf_work1(nw))
494 DO is = 1,
SIZE(scf_env%scf_work1)
496 matrix_struct=ao_ao_fmstruct, &
497 name=
"SCF-WORK_MATRIX-1-"//trim(adjustl(
cp_to_string(is))))
500 IF ((.NOT.
ASSOCIATED(scf_env%ortho)) .AND. &
504 ALLOCATE (scf_env%ortho)
506 matrix_struct=ao_ao_fmstruct, &
507 name=
"SCF-ORTHO_MATRIX")
510 ref_matrix => matrix_s(1, 1)%matrix
512 CALL dbcsr_create(scf_env%ortho_dbcsr, template=ref_matrix, &
513 matrix_type=dbcsr_type_no_symmetry)
515 CALL dbcsr_create(scf_env%buf1_dbcsr, template=ref_matrix, &
516 matrix_type=dbcsr_type_no_symmetry)
518 CALL dbcsr_create(scf_env%buf2_dbcsr, template=ref_matrix, &
519 matrix_type=dbcsr_type_no_symmetry)
521 (scf_control%level_shift /= 0.0_dp .AND. &
523 ALLOCATE (scf_env%ortho_m1)
525 matrix_struct=ao_ao_fmstruct, &
526 name=
"SCF-ORTHO_MATRIX-1")
529 IF (.NOT.
ASSOCIATED(scf_env%scf_work2))
THEN
530 ALLOCATE (scf_env%scf_work2)
532 matrix_struct=ao_ao_fmstruct, &
533 name=
"SCF-WORK_MATRIX-2")
537 IF (dft_control%dft_plus_u)
THEN
539 IF (.NOT.
ASSOCIATED(scf_env%s_half))
THEN
540 ALLOCATE (scf_env%s_half)
542 matrix_struct=ao_ao_fmstruct, &
543 name=
"S**(1/2) MATRIX")
549 IF (.NOT.
ASSOCIATED(scf_env%scf_work1))
THEN
551 ALLOCATE (scf_env%scf_work1(nw))
552 DO is = 1,
SIZE(scf_env%scf_work1)
554 matrix_struct=ao_ao_fmstruct, &
555 name=
"SCF-WORK_MATRIX-1-"//trim(adjustl(
cp_to_string(is))))
562 CALL timestop(handle)
564 END SUBROUTINE qs_scf_ensure_work_matrices
570 SUBROUTINE qs_scf_ensure_mos(qs_env)
573 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_scf_ensure_mos'
575 INTEGER :: handle, ic, ik, ikk, ispin, nmo, nmo_mat
577 TYPE(
cp_fm_type),
POINTER :: mo_coeff, mo_coeff_last
579 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s
583 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: mos, mos_last_converged
584 TYPE(
mo_set_type),
DIMENSION(:, :),
POINTER :: mos_k
587 CALL timeset(routinen, handle)
589 NULLIFY (ao_mo_fm_pools, dft_control, mos, xas_env, matrix_s, mos_last_converged, mo_coeff_last)
592 dft_control=dft_control, &
594 matrix_s_kp=matrix_s, &
596 CALL mpools_get(qs_env%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
597 IF (dft_control%switch_surf_dip)
THEN
598 CALL get_qs_env(qs_env, mos_last_converged=mos_last_converged)
601 nmo_mat = dft_control%nspins
602 IF (dft_control%restricted) nmo_mat = 1
605 cpassert(
ASSOCIATED(mos))
606 DO ispin = 1,
SIZE(mos)
607 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff, mo_coeff_b=mo_coeff_b)
608 IF (.NOT.
ASSOCIATED(mo_coeff))
THEN
610 fm_pool=ao_mo_fm_pools(ispin)%pool, &
613 IF (.NOT.
ASSOCIATED(mo_coeff_b))
THEN
617 sym=dbcsr_type_no_symmetry)
621 IF (qs_env%requires_mo_derivs)
THEN
623 IF (.NOT.
ASSOCIATED(mo_derivs))
THEN
624 ALLOCATE (mo_derivs(nmo_mat))
625 DO ispin = 1, nmo_mat
626 CALL get_mo_set(mos(ispin), mo_coeff_b=mo_coeff_b)
627 NULLIFY (mo_derivs(ispin)%matrix)
629 CALL dbcsr_create(mo_derivs(ispin)%matrix, template=mo_coeff_b, &
630 name=
"mo_derivs", matrix_type=dbcsr_type_no_symmetry)
640 IF (dft_control%do_admm)
THEN
641 IF (dft_control%restricted) cpabort(
"ROKS with ADMM is not implemented")
645 IF (dft_control%switch_surf_dip)
THEN
646 cpassert(
ASSOCIATED(mos_last_converged))
647 DO ispin = 1,
SIZE(mos_last_converged)
648 CALL get_mo_set(mos_last_converged(ispin), mo_coeff=mo_coeff_last)
649 IF (.NOT.
ASSOCIATED(mo_coeff_last))
THEN
651 fm_ref=mos(ispin)%mo_coeff, &
652 name=
"qs_env%mos_last_converged"//trim(adjustl(
cp_to_string(ispin))))
657 CALL get_qs_env(qs_env=qs_env, kpoints=kpoints)
658 IF (kpoints%nkp /= 0)
THEN
660 IF (qs_env%requires_mo_derivs)
THEN
661 cpwarn(
"MO derivative methods flag has been switched off for kpoint calculation")
664 qs_env%requires_mo_derivs = .false.
666 IF (dft_control%do_xas_calculation)
THEN
667 cpabort(
"No XAS implemented with kpoints")
669 IF (qs_env%do_rixs)
THEN
670 cpabort(
"RIXS not implemented with kpoints")
672 DO ik = 1,
SIZE(kpoints%kp_env)
673 CALL mpools_get(kpoints%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
674 mos_k => kpoints%kp_env(ik)%kpoint_env%mos
675 ikk = kpoints%kp_range(1) + ik - 1
676 cpassert(
ASSOCIATED(mos_k))
677 DO ispin = 1,
SIZE(mos_k, 2)
678 DO ic = 1,
SIZE(mos_k, 1)
679 CALL get_mo_set(mos_k(ic, ispin), mo_coeff=mo_coeff, mo_coeff_b=mo_coeff_b)
680 IF (.NOT.
ASSOCIATED(mo_coeff))
THEN
682 fm_pool=ao_mo_fm_pools(ispin)%pool, &
687 cpassert(.NOT.
ASSOCIATED(mo_coeff_b))
693 CALL timestop(handle)
695 END SUBROUTINE qs_scf_ensure_mos
704 SUBROUTINE qs_scf_ensure_mixing(scf_control, scf_section, scf_env, dft_control)
712 SELECT CASE (scf_control%mixing_method)
715 scf_env%p_mix_alpha = 1.0_dp
718 scf_env%mixing_method = scf_control%mixing_method
720 IF (.NOT.
ASSOCIATED(scf_env%mixing_store))
THEN
721 ALLOCATE (scf_env%mixing_store)
723 dft_control%qs_control%cutoff)
726 cpabort(
"Unknown mixing method")
733 scf_env%p_mix_alpha = 1.0_dp
734 scf_env%skip_diis = .true.
737 IF (scf_control%use_diag .AND. scf_env%mixing_method ==
no_mixing_nr)
THEN
738 cpabort(
"Diagonalization procedures without mixing are not recommendable")
742 scf_env%skip_diis = .true.
743 scf_env%p_mix_alpha = scf_env%mixing_store%alpha
744 IF (scf_env%mixing_store%beta == 0.0_dp)
THEN
745 cpabort(
"Mixing employing the Kerker damping factor needs BETA /= 0.0")
750 scf_env%p_mix_alpha = scf_env%mixing_store%alpha
751 IF (scf_control%eps_diis < scf_control%eps_scf)
THEN
752 scf_env%skip_diis = .true.
753 cpwarn(
"the DIIS scheme is disabled, since EPS_DIIS < EPS_SCF")
757 END SUBROUTINE qs_scf_ensure_mixing
768 SUBROUTINE qs_scf_ensure_diagonalization(scf_env, scf_section, qs_env, &
769 scf_control, has_unit_metric)
774 LOGICAL :: has_unit_metric
776 INTEGER :: ispin, nao, nmo
777 LOGICAL :: do_kpoints, need_coeff_b, not_se_or_tb
782 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints, dft_control=dft_control, mos=mos)
783 not_se_or_tb = .NOT. (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb .OR. &
784 dft_control%qs_control%semi_empirical)
785 need_coeff_b = .false.
786 scf_env%needs_ortho = .false.
788 IF (dft_control%smeagol_control%smeagol_enabled .AND. &
791 scf_env%skip_diis = .true.
792 scf_control%use_diag = .false.
794 IF (.NOT. do_kpoints)
THEN
795 cpabort(
"SMEAGOL requires kpoint calculations")
797 cpwarn_if(scf_control%use_ot,
"OT is irrelevant to NEGF method")
800 IF (scf_control%use_diag)
THEN
802 IF (dft_control%restricted)
THEN
803 cpabort(
"OT only for restricted (ROKS)")
805 SELECT CASE (scf_control%diagonalization%method)
807 IF (.NOT. not_se_or_tb)
THEN
808 cpabort(
"TB and SE not possible with OT diagonalization")
811 SELECT CASE (scf_control%diagonalization%method)
815 scf_env%needs_ortho = (.NOT. has_unit_metric) .AND. (.NOT. do_kpoints)
818 scf_control%level_shift == 0.0_dp .AND. &
822 scf_env%needs_ortho = .false.
825 IF (has_unit_metric)
THEN
830 IF (dft_control%roks)
THEN
831 cpabort(
"ROKS with OT diagonalization not possible")
834 cpabort(
"OT diagonalization not possible with kpoint calculations")
837 need_coeff_b = .true.
841 IF (dft_control%roks)
THEN
842 cpabort(
"ROKS with block PF diagonalization not possible")
845 cpabort(
"Block Krylov diagonalization not possible with kpoint calculations")
848 scf_env%needs_ortho = .true.
849 IF (.NOT.
ASSOCIATED(scf_env%krylov_space))
THEN
856 cpabort(
"Block Davidson diagonalization not possible with kpoint calculations")
859 IF (.NOT.
ASSOCIATED(scf_env%block_davidson_env))
THEN
863 DO ispin = 1, dft_control%nspins
864 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, nao=nao, nmo=nmo)
867 need_coeff_b = .true.
880 cpabort(
"Unknown diagonalization method")
883 IF (scf_control%do_diag_sub)
THEN
884 scf_env%needs_ortho = .true.
885 IF (.NOT.
ASSOCIATED(scf_env%subspace_env))
THEN
887 dft_control%qs_control%cutoff)
891 cpabort(
"No subspace diagonlization with kpoint calculation")
895 ELSE IF (scf_control%use_ot)
THEN
897 need_coeff_b = .true.
898 IF (sum(abs(scf_control%added_mos)) > 0)
THEN
899 cpabort(
"OT with ADDED_MOS/=0 not implemented")
901 IF (dft_control%restricted .AND. dft_control%nspins /= 2)
THEN
902 cpabort(
"nspin must be 2 for restricted (ROKS)")
905 cpabort(
"OT not possible with kpoint calculations")
908 cpabort(
"OT or DIAGONALIZATION have to be set")
910 DO ispin = 1, dft_control%nspins
911 mos(ispin)%use_mo_coeff_b = need_coeff_b
914 END SUBROUTINE qs_scf_ensure_diagonalization
927 SUBROUTINE init_scf_run(scf_env, qs_env, scf_section, scf_control)
934 CHARACTER(LEN=*),
PARAMETER :: routinen =
'init_scf_run'
936 INTEGER :: after, handle, homo, ii, ikind, ispin, &
937 iw, nao, ndep, needed_evals, nmo, &
939 LOGICAL :: dft_plus_u_atom, do_kpoints, &
940 init_u_ramping_each_scf, omit_headers, &
941 s_minus_half_available
942 REAL(kind=
dp) :: u_ramping
943 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: evals
944 REAL(kind=
dp),
DIMENSION(:),
POINTER :: eigenvalues
951 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s_kp
956 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
961 CALL timeset(routinen, handle)
963 NULLIFY (qs_kind_set, matrix_s, dft_control, mos, qs_kind, rho, xas_env, mo_coeff)
967 cpassert(
ASSOCIATED(scf_env))
968 cpassert(
ASSOCIATED(qs_env))
971 s_minus_half_available = .false.
973 dft_control=dft_control, &
974 qs_kind_set=qs_kind_set, &
977 nelectron_total=scf_env%nelectron, &
978 do_kpoints=do_kpoints, &
983 IF (dft_control%qs_control%xtb_control%do_tblite)
THEN
985 CALL cp_warn(__location__, &
986 "CP2K/tblite with OT is restricted to Gamma-point calculations without smearing. "// &
987 "The tblite SCC variables are updated directly from the OT density; XTB/SCC_MIXER is ignored.")
993 IF (scf_env%needs_ortho)
THEN
1009 ALLOCATE (evals(nao))
1021 IF (evals(ii) > scf_control%eps_eigval)
THEN
1026 needed_evals = nao - ndep
1029 evals(1:ndep) = 0.0_dp
1031 evals(ndep + 1:nao) = 1.0_dp/sqrt(evals(ndep + 1:nao))
1036 nrow_global=nao, ncol_global=needed_evals)
1038 ALLOCATE (scf_env%ortho_red, scf_env%scf_work2_red)
1043 IF (scf_control%level_shift /= 0.0_dp)
THEN
1045 nrow_global=needed_evals, ncol_global=nao)
1047 ALLOCATE (scf_env%ortho_m1_red)
1052 ALLOCATE (scf_env%scf_work1_red(
SIZE(scf_env%scf_work1)))
1053 DO ispin = 1,
SIZE(scf_env%scf_work1)
1055 nrow_global=needed_evals, ncol_global=needed_evals)
1056 CALL cp_fm_create(scf_env%scf_work1_red(ispin), fm_struct)
1061 CALL cp_fm_to_fm(evecs, scf_env%ortho_red, needed_evals, ndep + 1, 1)
1063 IF (scf_control%level_shift /= 0.0_dp)
THEN
1071 DO ispin = 1,
SIZE(mos)
1072 CALL get_mo_set(mos(ispin), nmo=nmo, mo_coeff=mo_coeff, homo=homo, eigenvalues=eigenvalues)
1073 IF (needed_evals < nmo)
THEN
1074 IF (needed_evals < homo)
THEN
1075 CALL cp_abort(__location__, &
1076 "The numerical rank of the overlap matrix is lower than the "// &
1077 "number of orbitals to be occupied! Check the geometry or increase "// &
1078 "EPS_DEFAULT or EPS_PGF_ORB!")
1080 CALL cp_warn(__location__, &
1081 "The numerical rank of the overlap matrix is lower than the number of requested MOs! "// &
1082 "Reduce the number of MOs to the number of available MOs. If necessary, "// &
1083 "request a lower number of MOs or increase EPS_DEFAULT or EPS_PGF_ORB.")
1084 CALL set_mo_set(mos(ispin), nmo=needed_evals)
1087 CALL cp_fm_to_fm(evecs, mo_coeff, min(ndep, max(0, nmo - needed_evals)), 1, needed_evals + 1)
1090 eigenvalues(needed_evals + 1:min(nao, nmo)) = 1.0_dp/scf_control%eps_eigval
1094 CALL parallel_gemm(
"N",
"T", nao, nao, needed_evals, 1.0_dp, scf_env%ortho_red, evecs, &
1095 0.0_dp, scf_env%ortho, b_first_col=ndep + 1)
1097 IF (scf_control%level_shift /= 0.0_dp)
THEN
1099 evals(ndep + 1:nao) = 1.0_dp/evals(ndep + 1:nao)
1102 CALL parallel_gemm(
"T",
"T", nao, nao, needed_evals, 1.0_dp, scf_env%ortho_m1_red, evecs, &
1103 0.0_dp, scf_env%ortho_m1, b_first_col=ndep + 1)
1108 s_minus_half_available = .true.
1112 qs_env%input,
"DFT%PRINT%AO_MATRICES/ORTHO"),
cp_p_file))
THEN
1116 CALL section_vals_val_get(qs_env%input,
"DFT%PRINT%AO_MATRICES%OMIT_HEADERS", l_val=omit_headers)
1117 after = min(max(after, 1), 16)
1119 para_env, output_unit=iw, omit_headers=omit_headers)
1121 "DFT%PRINT%AO_MATRICES/ORTHO")
1128 IF (dft_control%dft_plus_u)
THEN
1130 IF (do_kpoints)
THEN
1131 CALL get_qs_env(qs_env, kpoints=kpoints, matrix_s_kp=matrix_s_kp)
1132 CALL diag_kp_smat(matrix_s_kp, kpoints, scf_env%scf_work1)
1135 IF (s_minus_half_available)
THEN
1137 scf_env%s_half, nao)
1141 CALL cp_fm_power(scf_env%s_half, fm_w, 0.5_dp, scf_control%eps_eigval, ndep)
1146 DO ikind = 1,
SIZE(qs_kind_set)
1147 qs_kind => qs_kind_set(ikind)
1149 dft_plus_u_atom=dft_plus_u_atom, &
1150 u_ramping=u_ramping, &
1151 init_u_ramping_each_scf=init_u_ramping_each_scf)
1152 IF (dft_plus_u_atom .AND. (u_ramping /= 0.0_dp))
THEN
1153 IF (init_u_ramping_each_scf)
THEN
1154 CALL set_qs_kind(qs_kind=qs_kind, u_minus_j=0.0_dp)
1160 IF (dft_control%dft_plus_u)
THEN
1162 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
1163 DO ikind = 1,
SIZE(atomic_kind_set)
1164 qs_kind => qs_kind_set(ikind)
1165 CALL get_qs_kind(qs_kind=qs_kind, dft_plus_u_atom=dft_plus_u_atom)
1166 IF (.NOT. dft_plus_u_atom) cycle
1168 qs_kind=qs_kind_set(ikind), &
1169 which_l=qs_kind%dft_plus_u%l, &
1170 which_n=qs_kind%dft_plus_u%n, &
1171 proj_shell_charge=qs_kind%dft_plus_u%proj_shell_charge, &
1172 ao_coef=qs_kind%dft_plus_u%ao_coef)
1178 IF (scf_control%outer_scf%have_scf)
THEN
1183 IF (
ASSOCIATED(qs_env%xas_env))
THEN
1190 CALL scf_env_initial_rho_setup(scf_env, qs_env=qs_env, &
1191 scf_section=scf_section, scf_control=scf_control)
1195 IF (
ASSOCIATED(qs_env%wf_history))
THEN
1197 IF (.NOT.
ASSOCIATED(qs_env%wf_history%past_states(1)%snapshot))
THEN
1198 CALL wfi_update(qs_env%wf_history, qs_env=qs_env, dt=1.0_dp)
1199 ALLOCATE (qs_env%wf_history%past_states(1)%snapshot%rho_frozen)
1200 CALL qs_rho_create(qs_env%wf_history%past_states(1)%snapshot%rho_frozen)
1202 rho_output=qs_env%wf_history%past_states(1)%snapshot%rho_frozen, &
1209 IF (qs_env%qmmm)
THEN
1210 IF (qs_env%qmmm .AND. qs_env%qmmm_env_qm%image_charge)
THEN
1212 qmmm_env=qs_env%qmmm_env_qm)
1217 extension=
".scfLog")
1220 "PRINT%PROGRAM_RUN_INFO")
1222 CALL timestop(handle)
1224 END SUBROUTINE init_scf_run
1236 SUBROUTINE scf_env_initial_rho_setup(scf_env, qs_env, scf_section, scf_control)
1242 CHARACTER(len=*),
PARAMETER :: routinen =
'scf_env_initial_rho_setup'
1244 INTEGER :: extrapolation_method_nr, handle, ispin, &
1246 LOGICAL :: do_harris, orthogonal_wf
1256 CALL timeset(routinen, handle)
1257 NULLIFY (mo_coeff, rho, dft_control, para_env, mos)
1259 cpassert(
ASSOCIATED(scf_env))
1260 cpassert(
ASSOCIATED(qs_env))
1265 dft_control=dft_control, &
1268 do_harris = qs_env%harris_method
1271 IF (
ASSOCIATED(qs_env%wf_history))
THEN
1273 qs_env=qs_env, dt=1.0_dp, &
1274 extrapolation_method_nr=extrapolation_method_nr, &
1275 orthogonal_wf=orthogonal_wf)
1277 IF ((.NOT. orthogonal_wf) .AND. &
1280 DO ispin = 1,
SIZE(mos)
1281 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff, nmo=nmo)
1283 IF (dft_control%hairy_probes .EQV. .true.)
THEN
1284 scf_control%smear%do_smear = .false.
1286 smear=scf_control%smear, probe=dft_control%probe)
1289 smear=scf_control%smear)
1295 IF (.NOT. do_harris)
THEN
1297 extension=
".scfLog")
1298 IF (output_unit > 0)
THEN
1299 WRITE (unit=output_unit, fmt=
"(/,T2,A,I0)") &
1300 "Extrapolation method: "// &
1303 WRITE (unit=output_unit, fmt=
"(T2,A,I0,A)") &
1304 "Extrapolation order: ", &
1305 max((min(qs_env%wf_history%memory_depth, qs_env%wf_history%snapshot_count) - 1), 0)
1309 "PRINT%PROGRAM_RUN_INFO")
1313 CALL get_qs_env(qs_env, harris_env=harris_env)
1324 IF (scf_env%mixing_method > 1)
THEN
1325 IF (dft_control%qs_control%gapw)
THEN
1326 CALL get_qs_env(qs_env=qs_env, rho_atom_set=rho_atom)
1327 CALL mixing_init(scf_env%mixing_method, rho, scf_env%mixing_store, &
1328 para_env, rho_atom=rho_atom)
1329 ELSE IF (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb)
THEN
1331 ELSE IF (dft_control%qs_control%semi_empirical)
THEN
1332 cpabort(
'SE Code not possible')
1334 CALL mixing_init(scf_env%mixing_method, rho, scf_env%mixing_store, &
1339 DO ispin = 1,
SIZE(mos)
1340 IF (mos(ispin)%use_mo_coeff_b)
THEN
1342 mos(ispin)%mo_coeff_b)
1346 CALL timestop(handle)
1348 END SUBROUTINE scf_env_initial_rho_setup
calculate the orbitals for a given atomic kind type
subroutine, public calculate_atomic_orbitals(atomic_kind, qs_kind, agrid, iunit, pmat, fmat, density, wavefunction, wfninfo, confine, xc_section, nocc, which_l, which_n, proj_shell_charge, ao_coef)
...
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)
...
integer, parameter, public fm_diag_type_cusolver
logical, save, public direct_generalized_diagonalization
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...
integer, save, public diag_type
integer, parameter, public cusolver_n_min
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_create(matrix, matrix_struct, name, nrow, ncol, set_zero)
creates a new full matrix with the given structure
subroutine, public cp_fm_to_fm_triangular(msource, mtarget, uplo)
copy just a triangular matrix
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, mimic, 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, sab_cneo, 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, matrix_vhxc, 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, xcint_weights, 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, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_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, mimic, 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, rhoz_cneo_set, 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, cneo_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, hund_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, proj_shell_charge, lr_atom, do_mtlr, u_j_loop, ao_coef, init_u_ramping_each_scf, reltmat, ghost, monovalent, 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, hund_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 init_mo_set(mo_set, fm_pool, fm_ref, fm_struct, name, counter)
initializes an allocated mo_set. eigenvalues, mo_coeff, occupation_numbers are valid only after this ...
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.
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)
...
subroutine, public diag_kp_smat(matrix_s, kpoints, fmwork)
Kpoint diagonalization routine Transforms matrices to kpoint, distributes kpoint groups,...
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.