18 dbcsr_type_no_symmetry
130#include "./base/base_uses.f90"
136 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_scf_initialization'
165 CALL get_qs_env(qs_env, input=input, dft_control=dft_control)
168 IF (dft_control%hairy_probes .EQV. .true.)
THEN
171 atomic_kind_set=atomic_kind_set, &
172 qs_kind_set=qs_kind_set, &
173 particle_set=particle_set)
174 np =
SIZE(dft_control%probe)
176 CALL ao_boundaries(probe=dft_control%probe(ip), atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set, &
177 particle_set=particle_set, nao=mos(1)%nao)
181 IF (
PRESENT(scf_control))
THEN
182 my_scf_control => scf_control
184 CALL get_qs_env(qs_env, scf_control=my_scf_control)
188 IF (
PRESENT(scf_section))
THEN
189 my_scf_section => scf_section
194 CALL qs_scf_ensure_scf_env(qs_env, scf_env)
198 CALL qs_scf_ensure_mos(qs_env)
201 CALL qs_scf_ensure_diagonalization(scf_env, my_scf_section, qs_env, &
202 my_scf_control, qs_env%has_unit_metric)
204 CALL qs_scf_ensure_mixing(my_scf_control, my_scf_section, scf_env, dft_control)
206 CALL qs_scf_ensure_work_matrices(qs_env, scf_env)
208 CALL qs_scf_ensure_mixing_store(qs_env, scf_env)
211 IF (dft_control%qs_control%cdft)
THEN
212 CALL qs_scf_ensure_cdft_loop_vars(qs_env, scf_env, dft_control, &
213 scf_control=my_scf_control)
215 CALL qs_scf_ensure_outer_loop_vars(scf_env, my_scf_control)
218 CALL init_scf_run(scf_env, qs_env, my_scf_section, my_scf_control)
235 CALL get_qs_env(qs_env, input=input, dft_control=dft_control)
237 CALL get_qs_env(qs_env, scf_control=scf_control)
241 CALL qs_scf_ensure_scf_env(qs_env, scf_env)
244 scf_control%use_diag = .true.
247 CALL qs_scf_ensure_mos(qs_env)
250 CALL qs_scf_ensure_diagonalization(scf_env, scf_section, qs_env, &
251 scf_control, qs_env%has_unit_metric)
252 CALL qs_scf_ensure_work_matrices(qs_env, scf_env)
254 CALL init_scf_run(scf_env, qs_env, scf_section, scf_control)
264 SUBROUTINE qs_scf_ensure_scf_env(qs_env, scf_env)
273 IF (.NOT.
ASSOCIATED(scf_env))
THEN
278 SELECT CASE (scf_env%mixing_method)
280 IF (
ASSOCIATED(scf_env%mixing_store))
THEN
286 IF (
ASSOCIATED(scf_env%mixing_store%rhoin))
THEN
287 IF (
SIZE(rho_g(1)%pw_grid%gsq) /=
SIZE(scf_env%mixing_store%rhoin(1)%cc))
THEN
289 DEALLOCATE (scf_env%mixing_store)
296 END SUBROUTINE qs_scf_ensure_scf_env
304 SUBROUTINE qs_scf_ensure_outer_loop_vars(scf_env, scf_control, nvar)
307 INTEGER,
OPTIONAL :: nvar
309 INTEGER :: nhistory, nvariables
311 IF (scf_control%outer_scf%have_scf)
THEN
312 nhistory = scf_control%outer_scf%max_scf + 1
313 IF (
PRESENT(nvar))
THEN
322 ALLOCATE (scf_env%outer_scf%variables(nvariables, nhistory))
323 ALLOCATE (scf_env%outer_scf%count(nhistory))
324 scf_env%outer_scf%count = 0
325 ALLOCATE (scf_env%outer_scf%gradient(nvariables, nhistory))
326 ALLOCATE (scf_env%outer_scf%energy(nhistory))
329 END SUBROUTINE qs_scf_ensure_outer_loop_vars
338 SUBROUTINE qs_scf_ensure_cdft_loop_vars(qs_env, scf_env, dft_control, scf_control)
344 INTEGER :: nhistory, nvariables
345 LOGICAL :: do_kpoints
346 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: gradient_history, outer_scf_history, &
349 NULLIFY (outer_scf_history, gradient_history, variable_history)
350 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints)
353 cpabort(
"CDFT calculation not possible with kpoints")
357 IF (.NOT. scf_control%outer_scf%have_scf) &
358 cpabort(
"Section SCF&OUTER_SCF must be active for CDFT calculations.")
360 IF (dft_control%qs_control%cdft_control%constraint_control%have_scf)
THEN
361 nhistory = dft_control%qs_control%cdft_control%constraint_control%max_scf + 1
364 dft_control%qs_control%cdft_control)
367 nvariables =
SIZE(dft_control%qs_control%cdft_control%target)
369 ALLOCATE (dft_control%qs_control%cdft_control%constraint%variables(nvariables, nhistory))
370 ALLOCATE (dft_control%qs_control%cdft_control%constraint%count(nhistory))
371 dft_control%qs_control%cdft_control%constraint%count = 0
372 ALLOCATE (dft_control%qs_control%cdft_control%constraint%gradient(nvariables, nhistory))
373 ALLOCATE (dft_control%qs_control%cdft_control%constraint%energy(nhistory))
374 CALL qs_scf_ensure_outer_loop_vars(scf_env, scf_control, nvariables)
379 IF (scf_control%outer_scf%have_scf)
THEN
381 dft_control%qs_control%cdft_control%ot_control%have_scf = .true.
382 dft_control%qs_control%cdft_control%ot_control%max_scf = scf_control%outer_scf%max_scf
383 dft_control%qs_control%cdft_control%ot_control%eps_scf = scf_control%outer_scf%eps_scf
384 dft_control%qs_control%cdft_control%ot_control%step_size = scf_control%outer_scf%step_size
385 dft_control%qs_control%cdft_control%ot_control%type = scf_control%outer_scf%type
386 dft_control%qs_control%cdft_control%ot_control%optimizer = scf_control%outer_scf%optimizer
387 dft_control%qs_control%cdft_control%ot_control%diis_buffer_length = scf_control%outer_scf%diis_buffer_length
388 dft_control%qs_control%cdft_control%ot_control%bisect_trust_count = scf_control%outer_scf%bisect_trust_count
389 CALL cdft_opt_type_copy(dft_control%qs_control%cdft_control%ot_control%cdft_opt_control, &
390 scf_control%outer_scf%cdft_opt_control)
392 nvariables =
SIZE(dft_control%qs_control%cdft_control%target)
393 IF (scf_control%outer_scf%extrapolation_order /= &
394 dft_control%qs_control%cdft_control%constraint_control%extrapolation_order &
395 .OR. nvariables /= 1)
THEN
396 DEALLOCATE (qs_env%outer_scf_history)
397 DEALLOCATE (qs_env%gradient_history)
398 DEALLOCATE (qs_env%variable_history)
399 nhistory = dft_control%qs_control%cdft_control%constraint_control%extrapolation_order
400 ALLOCATE (outer_scf_history(nvariables, nhistory))
401 ALLOCATE (gradient_history(nvariables, 2))
402 gradient_history = 0.0_dp
403 ALLOCATE (variable_history(nvariables, 2))
404 variable_history = 0.0_dp
405 CALL set_qs_env(qs_env, outer_scf_history=outer_scf_history, &
406 gradient_history=gradient_history, variable_history=variable_history)
412 END SUBROUTINE qs_scf_ensure_cdft_loop_vars
419 SUBROUTINE qs_scf_ensure_mixing_store(qs_env, scf_env)
425 NULLIFY (dft_control)
426 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
428 IF (scf_env%mixing_method > 0)
THEN
429 CALL mixing_allocate(qs_env, scf_env%mixing_method, scf_env%p_mix_new, &
430 scf_env%p_delta, dft_control%nspins, &
431 scf_env%mixing_store)
433 NULLIFY (scf_env%p_mix_new)
436 END SUBROUTINE qs_scf_ensure_mixing_store
445 SUBROUTINE qs_scf_ensure_work_matrices(qs_env, scf_env)
450 CHARACTER(LEN=*),
PARAMETER :: routinen =
'qs_scf_ensure_work_matrices'
452 INTEGER :: handle, is, nao, nrow_block, nw
453 LOGICAL :: do_kpoints
456 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s
462 CALL timeset(routinen, handle)
464 NULLIFY (ao_mo_fm_pools, ao_mo_fmstruct, ao_ao_fmstruct, dft_control, matrix_s, mos)
467 dft_control=dft_control, &
468 matrix_s_kp=matrix_s, &
470 scf_control=scf_control, &
471 do_kpoints=do_kpoints)
472 CALL mpools_get(qs_env%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
479 nrow_block=nrow_block, &
480 ncol_block=nrow_block, &
483 template_fmstruct=ao_mo_fmstruct)
487 IF (.NOT.
ASSOCIATED(scf_env%scf_work1))
THEN
488 nw = dft_control%nspins
489 IF (do_kpoints) nw = 4
490 ALLOCATE (scf_env%scf_work1(nw))
491 DO is = 1,
SIZE(scf_env%scf_work1)
493 matrix_struct=ao_ao_fmstruct, &
494 name=
"SCF-WORK_MATRIX-1-"//trim(adjustl(
cp_to_string(is))))
497 IF ((.NOT.
ASSOCIATED(scf_env%ortho)) .AND. &
501 ALLOCATE (scf_env%ortho)
503 matrix_struct=ao_ao_fmstruct, &
504 name=
"SCF-ORTHO_MATRIX")
507 ref_matrix => matrix_s(1, 1)%matrix
509 CALL dbcsr_create(scf_env%ortho_dbcsr, template=ref_matrix, &
510 matrix_type=dbcsr_type_no_symmetry)
512 CALL dbcsr_create(scf_env%buf1_dbcsr, template=ref_matrix, &
513 matrix_type=dbcsr_type_no_symmetry)
515 CALL dbcsr_create(scf_env%buf2_dbcsr, template=ref_matrix, &
516 matrix_type=dbcsr_type_no_symmetry)
518 (scf_control%level_shift /= 0.0_dp .AND. &
520 ALLOCATE (scf_env%ortho_m1)
522 matrix_struct=ao_ao_fmstruct, &
523 name=
"SCF-ORTHO_MATRIX-1")
526 IF (.NOT.
ASSOCIATED(scf_env%scf_work2))
THEN
527 ALLOCATE (scf_env%scf_work2)
529 matrix_struct=ao_ao_fmstruct, &
530 name=
"SCF-WORK_MATRIX-2")
534 IF (dft_control%dft_plus_u)
THEN
536 IF (.NOT.
ASSOCIATED(scf_env%s_half))
THEN
537 ALLOCATE (scf_env%s_half)
539 matrix_struct=ao_ao_fmstruct, &
540 name=
"S**(1/2) MATRIX")
546 IF (.NOT.
ASSOCIATED(scf_env%scf_work1))
THEN
548 ALLOCATE (scf_env%scf_work1(nw))
549 DO is = 1,
SIZE(scf_env%scf_work1)
551 matrix_struct=ao_ao_fmstruct, &
552 name=
"SCF-WORK_MATRIX-1-"//trim(adjustl(
cp_to_string(is))))
559 CALL timestop(handle)
561 END SUBROUTINE qs_scf_ensure_work_matrices
567 SUBROUTINE qs_scf_ensure_mos(qs_env)
570 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_scf_ensure_mos'
572 INTEGER :: handle, ic, ik, ikk, ispin, nmo, nmo_mat
574 TYPE(
cp_fm_type),
POINTER :: mo_coeff, mo_coeff_last
576 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s
580 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: mos, mos_last_converged
581 TYPE(
mo_set_type),
DIMENSION(:, :),
POINTER :: mos_k
584 CALL timeset(routinen, handle)
586 NULLIFY (ao_mo_fm_pools, dft_control, mos, xas_env, matrix_s, mos_last_converged, mo_coeff_last)
589 dft_control=dft_control, &
591 matrix_s_kp=matrix_s, &
593 CALL mpools_get(qs_env%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
594 IF (dft_control%switch_surf_dip)
THEN
595 CALL get_qs_env(qs_env, mos_last_converged=mos_last_converged)
598 nmo_mat = dft_control%nspins
599 IF (dft_control%restricted) nmo_mat = 1
602 cpassert(
ASSOCIATED(mos))
603 DO ispin = 1,
SIZE(mos)
604 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff, mo_coeff_b=mo_coeff_b)
605 IF (.NOT.
ASSOCIATED(mo_coeff))
THEN
607 fm_pool=ao_mo_fm_pools(ispin)%pool, &
610 IF (.NOT.
ASSOCIATED(mo_coeff_b))
THEN
614 sym=dbcsr_type_no_symmetry)
618 IF (qs_env%requires_mo_derivs)
THEN
620 IF (.NOT.
ASSOCIATED(mo_derivs))
THEN
621 ALLOCATE (mo_derivs(nmo_mat))
622 DO ispin = 1, nmo_mat
623 CALL get_mo_set(mos(ispin), mo_coeff_b=mo_coeff_b)
624 NULLIFY (mo_derivs(ispin)%matrix)
626 CALL dbcsr_create(mo_derivs(ispin)%matrix, template=mo_coeff_b, &
627 name=
"mo_derivs", matrix_type=dbcsr_type_no_symmetry)
637 IF (dft_control%do_admm)
THEN
638 IF (dft_control%restricted) cpabort(
"ROKS with ADMM is not implemented")
642 IF (dft_control%switch_surf_dip)
THEN
643 cpassert(
ASSOCIATED(mos_last_converged))
644 DO ispin = 1,
SIZE(mos_last_converged)
645 CALL get_mo_set(mos_last_converged(ispin), mo_coeff=mo_coeff_last)
646 IF (.NOT.
ASSOCIATED(mo_coeff_last))
THEN
648 fm_ref=mos(ispin)%mo_coeff, &
649 name=
"qs_env%mos_last_converged"//trim(adjustl(
cp_to_string(ispin))))
654 CALL get_qs_env(qs_env=qs_env, kpoints=kpoints)
655 IF (kpoints%nkp /= 0)
THEN
657 IF (qs_env%requires_mo_derivs)
THEN
658 cpwarn(
"MO derivative methods flag has been switched off for kpoint calculation")
661 qs_env%requires_mo_derivs = .false.
663 IF (dft_control%do_xas_calculation) &
664 cpabort(
"No XAS implemented with kpoints")
665 IF (qs_env%do_rixs) &
666 cpabort(
"RIXS not implemented with kpoints")
667 DO ik = 1,
SIZE(kpoints%kp_env)
668 CALL mpools_get(kpoints%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
669 mos_k => kpoints%kp_env(ik)%kpoint_env%mos
670 ikk = kpoints%kp_range(1) + ik - 1
671 cpassert(
ASSOCIATED(mos_k))
672 DO ispin = 1,
SIZE(mos_k, 2)
673 DO ic = 1,
SIZE(mos_k, 1)
674 CALL get_mo_set(mos_k(ic, ispin), mo_coeff=mo_coeff, mo_coeff_b=mo_coeff_b)
675 IF (.NOT.
ASSOCIATED(mo_coeff))
THEN
677 fm_pool=ao_mo_fm_pools(ispin)%pool, &
682 cpassert(.NOT.
ASSOCIATED(mo_coeff_b))
688 CALL timestop(handle)
690 END SUBROUTINE qs_scf_ensure_mos
699 SUBROUTINE qs_scf_ensure_mixing(scf_control, scf_section, scf_env, dft_control)
707 SELECT CASE (scf_control%mixing_method)
710 scf_env%p_mix_alpha = 1.0_dp
712 scf_env%mixing_method = scf_control%mixing_method
714 IF (.NOT.
ASSOCIATED(scf_env%mixing_store))
THEN
715 ALLOCATE (scf_env%mixing_store)
717 dft_control%qs_control%cutoff)
720 cpabort(
"Unknown mixing method")
727 scf_env%p_mix_alpha = 1.0_dp
728 scf_env%skip_diis = .true.
731 IF (scf_control%use_diag .AND. scf_env%mixing_method ==
no_mixing_nr)
THEN
732 cpabort(
"Diagonalization procedures without mixing are not recommendable")
736 scf_env%skip_diis = .true.
737 scf_env%p_mix_alpha = scf_env%mixing_store%alpha
738 IF (scf_env%mixing_store%beta == 0.0_dp)
THEN
739 cpabort(
"Mixing employing the Kerker damping factor needs BETA /= 0.0")
744 scf_env%p_mix_alpha = scf_env%mixing_store%alpha
745 IF (scf_control%eps_diis < scf_control%eps_scf)
THEN
746 scf_env%skip_diis = .true.
747 cpwarn(
"the DIIS scheme is disabled, since EPS_DIIS < EPS_SCF")
751 END SUBROUTINE qs_scf_ensure_mixing
762 SUBROUTINE qs_scf_ensure_diagonalization(scf_env, scf_section, qs_env, &
763 scf_control, has_unit_metric)
768 LOGICAL :: has_unit_metric
770 INTEGER :: ispin, nao, nmo
771 LOGICAL :: do_kpoints, need_coeff_b, not_se_or_tb
776 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints, dft_control=dft_control, mos=mos)
777 not_se_or_tb = .NOT. (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb .OR. &
778 dft_control%qs_control%semi_empirical)
779 need_coeff_b = .false.
780 scf_env%needs_ortho = .false.
782 IF (dft_control%smeagol_control%smeagol_enabled .AND. &
785 scf_env%skip_diis = .true.
786 scf_control%use_diag = .false.
788 IF (.NOT. do_kpoints)
THEN
789 cpabort(
"SMEAGOL requires kpoint calculations")
791 cpwarn_if(scf_control%use_ot,
"OT is irrelevant to NEGF method")
794 IF (scf_control%use_diag)
THEN
796 IF (dft_control%restricted) &
797 cpabort(
"OT only for restricted (ROKS)")
798 SELECT CASE (scf_control%diagonalization%method)
800 IF (.NOT. not_se_or_tb) &
801 cpabort(
"TB and SE not possible with OT diagonalization")
803 SELECT CASE (scf_control%diagonalization%method)
807 scf_env%needs_ortho = (.NOT. has_unit_metric) .AND. (.NOT. do_kpoints)
810 scf_control%level_shift == 0.0_dp .AND. &
814 scf_env%needs_ortho = .false.
817 IF (has_unit_metric)
THEN
822 IF (dft_control%roks) &
823 cpabort(
"ROKS with OT diagonalization not possible")
825 cpabort(
"OT diagonalization not possible with kpoint calculations")
827 need_coeff_b = .true.
831 IF (dft_control%roks) &
832 cpabort(
"ROKS with block PF diagonalization not possible")
834 cpabort(
"Block Krylov diagonalization not possible with kpoint calculations")
836 scf_env%needs_ortho = .true.
837 IF (.NOT.
ASSOCIATED(scf_env%krylov_space)) &
843 cpabort(
"Block Davidson diagonalization not possible with kpoint calculations")
845 IF (.NOT.
ASSOCIATED(scf_env%block_davidson_env)) &
848 DO ispin = 1, dft_control%nspins
849 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, nao=nao, nmo=nmo)
852 need_coeff_b = .true.
865 cpabort(
"Unknown diagonalization method")
868 IF (scf_control%do_diag_sub)
THEN
869 scf_env%needs_ortho = .true.
870 IF (.NOT.
ASSOCIATED(scf_env%subspace_env)) &
872 dft_control%qs_control%cutoff)
875 cpabort(
"No subspace diagonlization with kpoint calculation")
878 ELSEIF (scf_control%use_ot)
THEN
880 need_coeff_b = .true.
881 IF (sum(abs(scf_control%added_mos)) > 0) &
882 cpabort(
"OT with ADDED_MOS/=0 not implemented")
883 IF (dft_control%restricted .AND. dft_control%nspins /= 2) &
884 cpabort(
"nspin must be 2 for restricted (ROKS)")
886 cpabort(
"OT not possible with kpoint calculations")
888 cpabort(
"OT or DIAGONALIZATION have to be set")
890 DO ispin = 1, dft_control%nspins
891 mos(ispin)%use_mo_coeff_b = need_coeff_b
894 END SUBROUTINE qs_scf_ensure_diagonalization
907 SUBROUTINE init_scf_run(scf_env, qs_env, scf_section, scf_control)
914 CHARACTER(LEN=*),
PARAMETER :: routinen =
'init_scf_run'
916 INTEGER :: after, handle, homo, ii, ikind, ispin, &
917 iw, nao, ndep, needed_evals, nmo, &
919 LOGICAL :: dft_plus_u_atom, do_kpoints, &
920 init_u_ramping_each_scf, omit_headers, &
921 s_minus_half_available
922 REAL(kind=
dp) :: u_ramping
923 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: evals
924 REAL(kind=
dp),
DIMENSION(:),
POINTER :: eigenvalues
930 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s_kp
935 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
940 CALL timeset(routinen, handle)
942 NULLIFY (qs_kind_set, matrix_s, dft_control, mos, qs_kind, rho, xas_env, mo_coeff)
946 cpassert(
ASSOCIATED(scf_env))
947 cpassert(
ASSOCIATED(qs_env))
950 s_minus_half_available = .false.
952 dft_control=dft_control, &
953 qs_kind_set=qs_kind_set, &
956 nelectron_total=scf_env%nelectron, &
957 do_kpoints=do_kpoints, &
962 IF (dft_control%qs_control%xtb_control%do_tblite)
THEN
963 IF (dft_control%lsd)
THEN
964 cpabort(
"LSD option not compatible with tblite library.")
967 cpabort(
"OT SCF option not compatible with tblite library.")
973 IF (scf_env%needs_ortho)
THEN
989 ALLOCATE (evals(nao))
1001 IF (evals(ii) > scf_control%eps_eigval)
THEN
1006 needed_evals = nao - ndep
1009 evals(1:ndep) = 0.0_dp
1011 evals(ndep + 1:nao) = 1.0_dp/sqrt(evals(ndep + 1:nao))
1016 nrow_global=nao, ncol_global=needed_evals)
1018 ALLOCATE (scf_env%ortho_red, scf_env%scf_work2_red)
1023 IF (scf_control%level_shift /= 0.0_dp)
THEN
1025 nrow_global=needed_evals, ncol_global=nao)
1027 ALLOCATE (scf_env%ortho_m1_red)
1032 ALLOCATE (scf_env%scf_work1_red(
SIZE(scf_env%scf_work1)))
1033 DO ispin = 1,
SIZE(scf_env%scf_work1)
1035 nrow_global=needed_evals, ncol_global=needed_evals)
1036 CALL cp_fm_create(scf_env%scf_work1_red(ispin), fm_struct)
1041 CALL cp_fm_to_fm(evecs, scf_env%ortho_red, needed_evals, ndep + 1, 1)
1043 IF (scf_control%level_shift /= 0.0_dp)
THEN
1051 DO ispin = 1,
SIZE(mos)
1052 CALL get_mo_set(mos(ispin), nmo=nmo, mo_coeff=mo_coeff, homo=homo, eigenvalues=eigenvalues)
1053 IF (needed_evals < nmo)
THEN
1054 IF (needed_evals < homo)
THEN
1055 CALL cp_abort(__location__, &
1056 "The numerical rank of the overlap matrix is lower than the "// &
1057 "number of orbitals to be occupied! Check the geometry or increase "// &
1058 "EPS_DEFAULT or EPS_PGF_ORB!")
1060 CALL cp_warn(__location__, &
1061 "The numerical rank of the overlap matrix is lower than the number of requested MOs! "// &
1062 "Reduce the number of MOs to the number of available MOs. If necessary, "// &
1063 "request a lower number of MOs or increase EPS_DEFAULT or EPS_PGF_ORB.")
1064 CALL set_mo_set(mos(ispin), nmo=needed_evals)
1067 CALL cp_fm_to_fm(evecs, mo_coeff, min(ndep, max(0, nmo - needed_evals)), 1, needed_evals + 1)
1070 eigenvalues(needed_evals + 1:min(nao, nmo)) = 1.0_dp/scf_control%eps_eigval
1074 CALL parallel_gemm(
"N",
"T", nao, nao, needed_evals, 1.0_dp, scf_env%ortho_red, evecs, &
1075 0.0_dp, scf_env%ortho, b_first_col=ndep + 1)
1077 IF (scf_control%level_shift /= 0.0_dp)
THEN
1079 evals(ndep + 1:nao) = 1.0_dp/evals(ndep + 1:nao)
1082 CALL parallel_gemm(
"T",
"T", nao, nao, needed_evals, 1.0_dp, scf_env%ortho_m1_red, evecs, &
1083 0.0_dp, scf_env%ortho_m1, b_first_col=ndep + 1)
1088 s_minus_half_available = .true.
1092 qs_env%input,
"DFT%PRINT%AO_MATRICES/ORTHO"),
cp_p_file))
THEN
1096 CALL section_vals_val_get(qs_env%input,
"DFT%PRINT%AO_MATRICES%OMIT_HEADERS", l_val=omit_headers)
1097 after = min(max(after, 1), 16)
1099 para_env, output_unit=iw, omit_headers=omit_headers)
1101 "DFT%PRINT%AO_MATRICES/ORTHO")
1108 IF (dft_control%dft_plus_u)
THEN
1110 IF (do_kpoints)
THEN
1111 CALL get_qs_env(qs_env, kpoints=kpoints, matrix_s_kp=matrix_s_kp)
1112 CALL diag_kp_smat(matrix_s_kp, kpoints, scf_env%scf_work1)
1115 IF (s_minus_half_available)
THEN
1117 scf_env%s_half, nao)
1121 CALL cp_fm_power(scf_env%s_half, fm_w, 0.5_dp, scf_control%eps_eigval, ndep)
1126 DO ikind = 1,
SIZE(qs_kind_set)
1127 qs_kind => qs_kind_set(ikind)
1129 dft_plus_u_atom=dft_plus_u_atom, &
1130 u_ramping=u_ramping, &
1131 init_u_ramping_each_scf=init_u_ramping_each_scf)
1132 IF (dft_plus_u_atom .AND. (u_ramping /= 0.0_dp))
THEN
1133 IF (init_u_ramping_each_scf)
THEN
1134 CALL set_qs_kind(qs_kind=qs_kind, u_minus_j=0.0_dp)
1141 IF (scf_control%outer_scf%have_scf)
THEN
1146 IF (
ASSOCIATED(qs_env%xas_env))
THEN
1153 CALL scf_env_initial_rho_setup(scf_env, qs_env=qs_env, &
1154 scf_section=scf_section, scf_control=scf_control)
1158 IF (
ASSOCIATED(qs_env%wf_history))
THEN
1160 IF (.NOT.
ASSOCIATED(qs_env%wf_history%past_states(1)%snapshot))
THEN
1161 CALL wfi_update(qs_env%wf_history, qs_env=qs_env, dt=1.0_dp)
1162 ALLOCATE (qs_env%wf_history%past_states(1)%snapshot%rho_frozen)
1163 CALL qs_rho_create(qs_env%wf_history%past_states(1)%snapshot%rho_frozen)
1165 rho_output=qs_env%wf_history%past_states(1)%snapshot%rho_frozen, &
1172 IF (qs_env%qmmm)
THEN
1173 IF (qs_env%qmmm .AND. qs_env%qmmm_env_qm%image_charge)
THEN
1175 qmmm_env=qs_env%qmmm_env_qm)
1180 extension=
".scfLog")
1183 "PRINT%PROGRAM_RUN_INFO")
1185 CALL timestop(handle)
1187 END SUBROUTINE init_scf_run
1199 SUBROUTINE scf_env_initial_rho_setup(scf_env, qs_env, scf_section, scf_control)
1205 CHARACTER(len=*),
PARAMETER :: routinen =
'scf_env_initial_rho_setup'
1207 INTEGER :: extrapolation_method_nr, handle, ispin, &
1209 LOGICAL :: do_harris, orthogonal_wf
1219 CALL timeset(routinen, handle)
1220 NULLIFY (mo_coeff, rho, dft_control, para_env, mos)
1222 cpassert(
ASSOCIATED(scf_env))
1223 cpassert(
ASSOCIATED(qs_env))
1228 dft_control=dft_control, &
1231 do_harris = qs_env%harris_method
1234 IF (
ASSOCIATED(qs_env%wf_history))
THEN
1236 qs_env=qs_env, dt=1.0_dp, &
1237 extrapolation_method_nr=extrapolation_method_nr, &
1238 orthogonal_wf=orthogonal_wf)
1240 IF ((.NOT. orthogonal_wf) .AND. &
1243 DO ispin = 1,
SIZE(mos)
1244 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff, nmo=nmo)
1246 IF (dft_control%hairy_probes .EQV. .true.)
THEN
1247 scf_control%smear%do_smear = .false.
1249 smear=scf_control%smear, probe=dft_control%probe)
1252 smear=scf_control%smear)
1258 IF (.NOT. do_harris)
THEN
1260 extension=
".scfLog")
1261 IF (output_unit > 0)
THEN
1262 WRITE (unit=output_unit, fmt=
"(/,T2,A,I0)") &
1263 "Extrapolation method: "// &
1266 WRITE (unit=output_unit, fmt=
"(T2,A,I0,A)") &
1267 "Extrapolation order: ", &
1268 max((min(qs_env%wf_history%memory_depth, qs_env%wf_history%snapshot_count) - 1), 0)
1272 "PRINT%PROGRAM_RUN_INFO")
1276 CALL get_qs_env(qs_env, harris_env=harris_env)
1287 IF (scf_env%mixing_method > 1)
THEN
1288 IF (dft_control%qs_control%gapw)
THEN
1289 CALL get_qs_env(qs_env=qs_env, rho_atom_set=rho_atom)
1290 CALL mixing_init(scf_env%mixing_method, rho, scf_env%mixing_store, &
1291 para_env, rho_atom=rho_atom)
1292 ELSEIF (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb)
THEN
1294 ELSEIF (dft_control%qs_control%semi_empirical)
THEN
1295 cpabort(
'SE Code not possible')
1297 CALL mixing_init(scf_env%mixing_method, rho, scf_env%mixing_store, &
1302 DO ispin = 1,
SIZE(mos)
1303 IF (mos(ispin)%use_mo_coeff_b)
THEN
1305 mos(ispin)%mo_coeff_b)
1309 CALL timestop(handle)
1311 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)
...
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_create(matrix, matrix_struct, name, use_sp, nrow, ncol, set_zero)
creates a new full matrix with the given structure
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
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, 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, 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, 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, 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)
...
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.