18 dbcsr_type_no_symmetry
129#include "./base/base_uses.f90"
135 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_scf_initialization'
164 CALL get_qs_env(qs_env, input=input, dft_control=dft_control)
167 IF (dft_control%hairy_probes .EQV. .true.)
THEN
170 atomic_kind_set=atomic_kind_set, &
171 qs_kind_set=qs_kind_set, &
172 particle_set=particle_set)
173 np =
SIZE(dft_control%probe)
175 CALL ao_boundaries(probe=dft_control%probe(ip), atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set, &
176 particle_set=particle_set, nao=mos(1)%nao)
180 IF (
PRESENT(scf_control))
THEN
181 my_scf_control => scf_control
183 CALL get_qs_env(qs_env, scf_control=my_scf_control)
187 IF (
PRESENT(scf_section))
THEN
188 my_scf_section => scf_section
193 CALL qs_scf_ensure_scf_env(qs_env, scf_env)
197 CALL qs_scf_ensure_mos(qs_env)
200 CALL qs_scf_ensure_diagonalization(scf_env, my_scf_section, qs_env, &
201 my_scf_control, qs_env%has_unit_metric)
203 CALL qs_scf_ensure_mixing(my_scf_control, my_scf_section, scf_env, dft_control)
205 CALL qs_scf_ensure_work_matrices(qs_env, scf_env)
207 CALL qs_scf_ensure_mixing_store(qs_env, scf_env)
210 IF (dft_control%qs_control%cdft)
THEN
211 CALL qs_scf_ensure_cdft_loop_vars(qs_env, scf_env, dft_control, &
212 scf_control=my_scf_control)
214 CALL qs_scf_ensure_outer_loop_vars(scf_env, my_scf_control)
217 CALL init_scf_run(scf_env, qs_env, my_scf_section, my_scf_control)
234 CALL get_qs_env(qs_env, input=input, dft_control=dft_control)
236 CALL get_qs_env(qs_env, scf_control=scf_control)
240 CALL qs_scf_ensure_scf_env(qs_env, scf_env)
243 scf_control%use_diag = .true.
246 CALL qs_scf_ensure_mos(qs_env)
249 CALL qs_scf_ensure_diagonalization(scf_env, scf_section, qs_env, &
250 scf_control, qs_env%has_unit_metric)
251 CALL qs_scf_ensure_work_matrices(qs_env, scf_env)
253 CALL init_scf_run(scf_env, qs_env, scf_section, scf_control)
263 SUBROUTINE qs_scf_ensure_scf_env(qs_env, scf_env)
272 IF (.NOT.
ASSOCIATED(scf_env))
THEN
277 SELECT CASE (scf_env%mixing_method)
279 IF (
ASSOCIATED(scf_env%mixing_store))
THEN
285 IF (
ASSOCIATED(scf_env%mixing_store%rhoin))
THEN
286 IF (
SIZE(rho_g(1)%pw_grid%gsq) /=
SIZE(scf_env%mixing_store%rhoin(1)%cc))
THEN
288 DEALLOCATE (scf_env%mixing_store)
295 END SUBROUTINE qs_scf_ensure_scf_env
303 SUBROUTINE qs_scf_ensure_outer_loop_vars(scf_env, scf_control, nvar)
306 INTEGER,
OPTIONAL :: nvar
308 INTEGER :: nhistory, nvariables
310 IF (scf_control%outer_scf%have_scf)
THEN
311 nhistory = scf_control%outer_scf%max_scf + 1
312 IF (
PRESENT(nvar))
THEN
321 ALLOCATE (scf_env%outer_scf%variables(nvariables, nhistory))
322 ALLOCATE (scf_env%outer_scf%count(nhistory))
323 scf_env%outer_scf%count = 0
324 ALLOCATE (scf_env%outer_scf%gradient(nvariables, nhistory))
325 ALLOCATE (scf_env%outer_scf%energy(nhistory))
328 END SUBROUTINE qs_scf_ensure_outer_loop_vars
337 SUBROUTINE qs_scf_ensure_cdft_loop_vars(qs_env, scf_env, dft_control, scf_control)
343 INTEGER :: nhistory, nvariables
344 LOGICAL :: do_kpoints
345 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: gradient_history, outer_scf_history, &
348 NULLIFY (outer_scf_history, gradient_history, variable_history)
349 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints)
352 cpabort(
"CDFT calculation not possible with kpoints")
356 IF (.NOT. scf_control%outer_scf%have_scf) &
357 cpabort(
"Section SCF&OUTER_SCF must be active for CDFT calculations.")
359 IF (dft_control%qs_control%cdft_control%constraint_control%have_scf)
THEN
360 nhistory = dft_control%qs_control%cdft_control%constraint_control%max_scf + 1
363 dft_control%qs_control%cdft_control)
366 nvariables =
SIZE(dft_control%qs_control%cdft_control%target)
368 ALLOCATE (dft_control%qs_control%cdft_control%constraint%variables(nvariables, nhistory))
369 ALLOCATE (dft_control%qs_control%cdft_control%constraint%count(nhistory))
370 dft_control%qs_control%cdft_control%constraint%count = 0
371 ALLOCATE (dft_control%qs_control%cdft_control%constraint%gradient(nvariables, nhistory))
372 ALLOCATE (dft_control%qs_control%cdft_control%constraint%energy(nhistory))
373 CALL qs_scf_ensure_outer_loop_vars(scf_env, scf_control, nvariables)
378 IF (scf_control%outer_scf%have_scf)
THEN
380 dft_control%qs_control%cdft_control%ot_control%have_scf = .true.
381 dft_control%qs_control%cdft_control%ot_control%max_scf = scf_control%outer_scf%max_scf
382 dft_control%qs_control%cdft_control%ot_control%eps_scf = scf_control%outer_scf%eps_scf
383 dft_control%qs_control%cdft_control%ot_control%step_size = scf_control%outer_scf%step_size
384 dft_control%qs_control%cdft_control%ot_control%type = scf_control%outer_scf%type
385 dft_control%qs_control%cdft_control%ot_control%optimizer = scf_control%outer_scf%optimizer
386 dft_control%qs_control%cdft_control%ot_control%diis_buffer_length = scf_control%outer_scf%diis_buffer_length
387 dft_control%qs_control%cdft_control%ot_control%bisect_trust_count = scf_control%outer_scf%bisect_trust_count
388 CALL cdft_opt_type_copy(dft_control%qs_control%cdft_control%ot_control%cdft_opt_control, &
389 scf_control%outer_scf%cdft_opt_control)
391 nvariables =
SIZE(dft_control%qs_control%cdft_control%target)
392 IF (scf_control%outer_scf%extrapolation_order /= &
393 dft_control%qs_control%cdft_control%constraint_control%extrapolation_order &
394 .OR. nvariables /= 1)
THEN
395 DEALLOCATE (qs_env%outer_scf_history)
396 DEALLOCATE (qs_env%gradient_history)
397 DEALLOCATE (qs_env%variable_history)
398 nhistory = dft_control%qs_control%cdft_control%constraint_control%extrapolation_order
399 ALLOCATE (outer_scf_history(nvariables, nhistory))
400 ALLOCATE (gradient_history(nvariables, 2))
401 gradient_history = 0.0_dp
402 ALLOCATE (variable_history(nvariables, 2))
403 variable_history = 0.0_dp
404 CALL set_qs_env(qs_env, outer_scf_history=outer_scf_history, &
405 gradient_history=gradient_history, variable_history=variable_history)
411 END SUBROUTINE qs_scf_ensure_cdft_loop_vars
418 SUBROUTINE qs_scf_ensure_mixing_store(qs_env, scf_env)
424 NULLIFY (dft_control)
425 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
427 IF (scf_env%mixing_method > 0)
THEN
428 CALL mixing_allocate(qs_env, scf_env%mixing_method, scf_env%p_mix_new, &
429 scf_env%p_delta, dft_control%nspins, &
430 scf_env%mixing_store)
432 NULLIFY (scf_env%p_mix_new)
435 END SUBROUTINE qs_scf_ensure_mixing_store
444 SUBROUTINE qs_scf_ensure_work_matrices(qs_env, scf_env)
449 CHARACTER(LEN=*),
PARAMETER :: routinen =
'qs_scf_ensure_work_matrices'
451 INTEGER :: handle, is, nao, nrow_block, nw
452 LOGICAL :: do_kpoints
455 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s
461 CALL timeset(routinen, handle)
463 NULLIFY (ao_mo_fm_pools, ao_mo_fmstruct, ao_ao_fmstruct, dft_control, matrix_s, mos)
466 dft_control=dft_control, &
467 matrix_s_kp=matrix_s, &
469 scf_control=scf_control, &
470 do_kpoints=do_kpoints)
471 CALL mpools_get(qs_env%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
478 nrow_block=nrow_block, &
479 ncol_block=nrow_block, &
482 template_fmstruct=ao_mo_fmstruct)
486 IF (.NOT.
ASSOCIATED(scf_env%scf_work1))
THEN
487 nw = dft_control%nspins
488 IF (do_kpoints) nw = 4
489 ALLOCATE (scf_env%scf_work1(nw))
490 DO is = 1,
SIZE(scf_env%scf_work1)
492 matrix_struct=ao_ao_fmstruct, &
493 name=
"SCF-WORK_MATRIX-1-"//trim(adjustl(
cp_to_string(is))))
496 IF ((.NOT.
ASSOCIATED(scf_env%ortho)) .AND. &
500 ALLOCATE (scf_env%ortho)
502 matrix_struct=ao_ao_fmstruct, &
503 name=
"SCF-ORTHO_MATRIX")
506 ref_matrix => matrix_s(1, 1)%matrix
508 CALL dbcsr_create(scf_env%ortho_dbcsr, template=ref_matrix, &
509 matrix_type=dbcsr_type_no_symmetry)
511 CALL dbcsr_create(scf_env%buf1_dbcsr, template=ref_matrix, &
512 matrix_type=dbcsr_type_no_symmetry)
514 CALL dbcsr_create(scf_env%buf2_dbcsr, template=ref_matrix, &
515 matrix_type=dbcsr_type_no_symmetry)
517 (scf_control%level_shift /= 0.0_dp .AND. &
519 ALLOCATE (scf_env%ortho_m1)
521 matrix_struct=ao_ao_fmstruct, &
522 name=
"SCF-ORTHO_MATRIX-1")
525 IF (.NOT.
ASSOCIATED(scf_env%scf_work2))
THEN
526 ALLOCATE (scf_env%scf_work2)
528 matrix_struct=ao_ao_fmstruct, &
529 name=
"SCF-WORK_MATRIX-2")
533 IF (dft_control%dft_plus_u)
THEN
535 IF (.NOT.
ASSOCIATED(scf_env%s_half))
THEN
536 ALLOCATE (scf_env%s_half)
538 matrix_struct=ao_ao_fmstruct, &
539 name=
"S**(1/2) MATRIX")
545 IF (.NOT.
ASSOCIATED(scf_env%scf_work1))
THEN
547 ALLOCATE (scf_env%scf_work1(nw))
548 DO is = 1,
SIZE(scf_env%scf_work1)
550 matrix_struct=ao_ao_fmstruct, &
551 name=
"SCF-WORK_MATRIX-1-"//trim(adjustl(
cp_to_string(is))))
558 CALL timestop(handle)
560 END SUBROUTINE qs_scf_ensure_work_matrices
566 SUBROUTINE qs_scf_ensure_mos(qs_env)
569 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_scf_ensure_mos'
571 INTEGER :: handle, ic, ik, ikk, ispin, nmo, nmo_mat
573 TYPE(
cp_fm_type),
POINTER :: mo_coeff, mo_coeff_last
575 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s
579 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: mos, mos_last_converged
580 TYPE(
mo_set_type),
DIMENSION(:, :),
POINTER :: mos_k
583 CALL timeset(routinen, handle)
585 NULLIFY (ao_mo_fm_pools, dft_control, mos, xas_env, matrix_s, mos_last_converged, mo_coeff_last)
588 dft_control=dft_control, &
590 matrix_s_kp=matrix_s, &
592 CALL mpools_get(qs_env%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
593 IF (dft_control%switch_surf_dip)
THEN
594 CALL get_qs_env(qs_env, mos_last_converged=mos_last_converged)
597 nmo_mat = dft_control%nspins
598 IF (dft_control%restricted) nmo_mat = 1
601 cpassert(
ASSOCIATED(mos))
602 DO ispin = 1,
SIZE(mos)
603 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff, mo_coeff_b=mo_coeff_b)
604 IF (.NOT.
ASSOCIATED(mo_coeff))
THEN
606 fm_pool=ao_mo_fm_pools(ispin)%pool, &
609 IF (.NOT.
ASSOCIATED(mo_coeff_b))
THEN
613 sym=dbcsr_type_no_symmetry)
617 IF (qs_env%requires_mo_derivs)
THEN
619 IF (.NOT.
ASSOCIATED(mo_derivs))
THEN
620 ALLOCATE (mo_derivs(nmo_mat))
621 DO ispin = 1, nmo_mat
622 CALL get_mo_set(mos(ispin), mo_coeff_b=mo_coeff_b)
623 NULLIFY (mo_derivs(ispin)%matrix)
625 CALL dbcsr_create(mo_derivs(ispin)%matrix, template=mo_coeff_b, &
626 name=
"mo_derivs", matrix_type=dbcsr_type_no_symmetry)
636 IF (dft_control%do_admm)
THEN
637 IF (dft_control%restricted) cpabort(
"ROKS with ADMM is not implemented")
641 IF (dft_control%switch_surf_dip)
THEN
642 cpassert(
ASSOCIATED(mos_last_converged))
643 DO ispin = 1,
SIZE(mos_last_converged)
644 CALL get_mo_set(mos_last_converged(ispin), mo_coeff=mo_coeff_last)
645 IF (.NOT.
ASSOCIATED(mo_coeff_last))
THEN
647 fm_ref=mos(ispin)%mo_coeff, &
648 name=
"qs_env%mos_last_converged"//trim(adjustl(
cp_to_string(ispin))))
653 CALL get_qs_env(qs_env=qs_env, kpoints=kpoints)
654 IF (kpoints%nkp /= 0)
THEN
656 IF (qs_env%requires_mo_derivs)
THEN
657 cpwarn(
"MO derivative methods flag has been switched off for kpoint calculation")
660 qs_env%requires_mo_derivs = .false.
662 IF (dft_control%do_xas_calculation) &
663 cpabort(
"No XAS implemented with kpoints")
664 IF (qs_env%do_rixs) &
665 cpabort(
"RIXS not implemented with kpoints")
666 DO ik = 1,
SIZE(kpoints%kp_env)
667 CALL mpools_get(kpoints%mpools, ao_mo_fm_pools=ao_mo_fm_pools)
668 mos_k => kpoints%kp_env(ik)%kpoint_env%mos
669 ikk = kpoints%kp_range(1) + ik - 1
670 cpassert(
ASSOCIATED(mos_k))
671 DO ispin = 1,
SIZE(mos_k, 2)
672 DO ic = 1,
SIZE(mos_k, 1)
673 CALL get_mo_set(mos_k(ic, ispin), mo_coeff=mo_coeff, mo_coeff_b=mo_coeff_b)
674 IF (.NOT.
ASSOCIATED(mo_coeff))
THEN
676 fm_pool=ao_mo_fm_pools(ispin)%pool, &
681 cpassert(.NOT.
ASSOCIATED(mo_coeff_b))
687 CALL timestop(handle)
689 END SUBROUTINE qs_scf_ensure_mos
698 SUBROUTINE qs_scf_ensure_mixing(scf_control, scf_section, scf_env, dft_control)
706 SELECT CASE (scf_control%mixing_method)
709 scf_env%p_mix_alpha = 1.0_dp
711 scf_env%mixing_method = scf_control%mixing_method
713 IF (.NOT.
ASSOCIATED(scf_env%mixing_store))
THEN
714 ALLOCATE (scf_env%mixing_store)
716 dft_control%qs_control%cutoff)
719 cpabort(
"Unknown mixing method")
726 scf_env%p_mix_alpha = 1.0_dp
727 scf_env%skip_diis = .true.
730 IF (scf_control%use_diag .AND. scf_env%mixing_method ==
no_mixing_nr)
THEN
731 cpabort(
"Diagonalization procedures without mixing are not recommendable")
735 scf_env%skip_diis = .true.
736 scf_env%p_mix_alpha = scf_env%mixing_store%alpha
737 IF (scf_env%mixing_store%beta == 0.0_dp)
THEN
738 cpabort(
"Mixing employing the Kerker damping factor needs BETA /= 0.0")
743 scf_env%p_mix_alpha = scf_env%mixing_store%alpha
744 IF (scf_control%eps_diis < scf_control%eps_scf)
THEN
745 scf_env%skip_diis = .true.
746 cpwarn(
"the DIIS scheme is disabled, since EPS_DIIS < EPS_SCF")
750 END SUBROUTINE qs_scf_ensure_mixing
761 SUBROUTINE qs_scf_ensure_diagonalization(scf_env, scf_section, qs_env, &
762 scf_control, has_unit_metric)
767 LOGICAL :: has_unit_metric
769 INTEGER :: ispin, nao, nmo
770 LOGICAL :: do_kpoints, need_coeff_b, not_se_or_tb
775 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints, dft_control=dft_control, mos=mos)
776 not_se_or_tb = .NOT. (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb .OR. &
777 dft_control%qs_control%semi_empirical)
778 need_coeff_b = .false.
779 scf_env%needs_ortho = .false.
781 IF (dft_control%smeagol_control%smeagol_enabled .AND. &
784 scf_env%skip_diis = .true.
785 scf_control%use_diag = .false.
787 IF (.NOT. do_kpoints)
THEN
788 cpabort(
"SMEAGOL requires kpoint calculations")
790 cpwarn_if(scf_control%use_ot,
"OT is irrelevant to NEGF method")
793 IF (scf_control%use_diag)
THEN
795 IF (dft_control%restricted) &
796 cpabort(
"OT only for restricted (ROKS)")
797 SELECT CASE (scf_control%diagonalization%method)
799 IF (.NOT. not_se_or_tb) &
800 cpabort(
"TB and SE not possible with OT diagonalization")
802 SELECT CASE (scf_control%diagonalization%method)
806 scf_env%needs_ortho = (.NOT. has_unit_metric) .AND. (.NOT. do_kpoints)
809 scf_control%level_shift == 0.0_dp .AND. &
811 scf_env%needs_ortho = .false.
813 IF (has_unit_metric)
THEN
818 IF (dft_control%roks) &
819 cpabort(
"ROKS with OT diagonalization not possible")
821 cpabort(
"OT diagonalization not possible with kpoint calculations")
823 need_coeff_b = .true.
827 IF (dft_control%roks) &
828 cpabort(
"ROKS with block PF diagonalization not possible")
830 cpabort(
"Block Krylov diagonalization not possible with kpoint calculations")
832 scf_env%needs_ortho = .true.
833 IF (.NOT.
ASSOCIATED(scf_env%krylov_space)) &
839 cpabort(
"Block Davidson diagonalization not possible with kpoint calculations")
841 IF (.NOT.
ASSOCIATED(scf_env%block_davidson_env)) &
844 DO ispin = 1, dft_control%nspins
845 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, nao=nao, nmo=nmo)
848 need_coeff_b = .true.
861 cpabort(
"Unknown diagonalization method")
864 IF (scf_control%do_diag_sub)
THEN
865 scf_env%needs_ortho = .true.
866 IF (.NOT.
ASSOCIATED(scf_env%subspace_env)) &
868 dft_control%qs_control%cutoff)
871 cpabort(
"No subspace diagonlization with kpoint calculation")
874 ELSEIF (scf_control%use_ot)
THEN
876 need_coeff_b = .true.
877 IF (sum(abs(scf_control%added_mos)) > 0) &
878 cpabort(
"OT with ADDED_MOS/=0 not implemented")
879 IF (dft_control%restricted .AND. dft_control%nspins /= 2) &
880 cpabort(
"nspin must be 2 for restricted (ROKS)")
882 cpabort(
"OT not possible with kpoint calculations")
884 cpabort(
"OT or DIAGONALIZATION have to be set")
886 DO ispin = 1, dft_control%nspins
887 mos(ispin)%use_mo_coeff_b = need_coeff_b
890 END SUBROUTINE qs_scf_ensure_diagonalization
903 SUBROUTINE init_scf_run(scf_env, qs_env, scf_section, scf_control)
910 CHARACTER(LEN=*),
PARAMETER :: routinen =
'init_scf_run'
912 INTEGER :: after, handle, homo, ii, ikind, ispin, &
913 iw, nao, ndep, needed_evals, nmo, &
915 LOGICAL :: dft_plus_u_atom, do_kpoints, &
916 init_u_ramping_each_scf, omit_headers, &
917 s_minus_half_available
918 REAL(kind=
dp) :: u_ramping
919 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: evals
920 REAL(kind=
dp),
DIMENSION(:),
POINTER :: eigenvalues
926 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s_kp
931 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
936 CALL timeset(routinen, handle)
938 NULLIFY (qs_kind_set, matrix_s, dft_control, mos, qs_kind, rho, xas_env, mo_coeff)
942 cpassert(
ASSOCIATED(scf_env))
943 cpassert(
ASSOCIATED(qs_env))
946 s_minus_half_available = .false.
948 dft_control=dft_control, &
949 qs_kind_set=qs_kind_set, &
952 nelectron_total=scf_env%nelectron, &
953 do_kpoints=do_kpoints, &
958 IF (dft_control%qs_control%xtb_control%do_tblite)
THEN
959 IF (dft_control%lsd)
THEN
960 cpabort(
"LSD option not compatible with tblite library.")
963 cpabort(
"OT SCF option not compatible with tblite library.")
969 IF (scf_env%needs_ortho)
THEN
985 ALLOCATE (evals(nao))
997 IF (evals(ii) > scf_control%eps_eigval)
THEN
1002 needed_evals = nao - ndep
1005 evals(1:ndep) = 0.0_dp
1007 evals(ndep + 1:nao) = 1.0_dp/sqrt(evals(ndep + 1:nao))
1012 nrow_global=nao, ncol_global=needed_evals)
1014 ALLOCATE (scf_env%ortho_red, scf_env%scf_work2_red)
1019 IF (scf_control%level_shift /= 0.0_dp)
THEN
1021 nrow_global=needed_evals, ncol_global=nao)
1023 ALLOCATE (scf_env%ortho_m1_red)
1028 ALLOCATE (scf_env%scf_work1_red(
SIZE(scf_env%scf_work1)))
1029 DO ispin = 1,
SIZE(scf_env%scf_work1)
1031 nrow_global=needed_evals, ncol_global=needed_evals)
1032 CALL cp_fm_create(scf_env%scf_work1_red(ispin), fm_struct)
1037 CALL cp_fm_to_fm(evecs, scf_env%ortho_red, needed_evals, ndep + 1, 1)
1039 IF (scf_control%level_shift /= 0.0_dp)
THEN
1047 DO ispin = 1,
SIZE(mos)
1048 CALL get_mo_set(mos(ispin), nmo=nmo, mo_coeff=mo_coeff, homo=homo, eigenvalues=eigenvalues)
1049 IF (needed_evals < nmo)
THEN
1050 IF (needed_evals < homo)
THEN
1051 CALL cp_abort(__location__, &
1052 "The numerical rank of the overlap matrix is lower than the "// &
1053 "number of orbitals to be occupied! Check the geometry or increase "// &
1054 "EPS_DEFAULT or EPS_PGF_ORB!")
1056 CALL cp_warn(__location__, &
1057 "The numerical rank of the overlap matrix is lower than the number of requested MOs! "// &
1058 "Reduce the number of MOs to the number of available MOs. If necessary, "// &
1059 "request a lower number of MOs or increase EPS_DEFAULT or EPS_PGF_ORB.")
1060 CALL set_mo_set(mos(ispin), nmo=needed_evals)
1063 CALL cp_fm_to_fm(evecs, mo_coeff, min(ndep, max(0, nmo - needed_evals)), 1, needed_evals + 1)
1066 eigenvalues(needed_evals + 1:min(nao, nmo)) = 1.0_dp/scf_control%eps_eigval
1070 CALL parallel_gemm(
"N",
"T", nao, nao, needed_evals, 1.0_dp, scf_env%ortho_red, evecs, &
1071 0.0_dp, scf_env%ortho, b_first_col=ndep + 1)
1073 IF (scf_control%level_shift /= 0.0_dp)
THEN
1075 evals(ndep + 1:nao) = 1.0_dp/evals(ndep + 1:nao)
1078 CALL parallel_gemm(
"T",
"T", nao, nao, needed_evals, 1.0_dp, scf_env%ortho_m1_red, evecs, &
1079 0.0_dp, scf_env%ortho_m1, b_first_col=ndep + 1)
1084 s_minus_half_available = .true.
1088 qs_env%input,
"DFT%PRINT%AO_MATRICES/ORTHO"),
cp_p_file))
THEN
1092 CALL section_vals_val_get(qs_env%input,
"DFT%PRINT%AO_MATRICES%OMIT_HEADERS", l_val=omit_headers)
1093 after = min(max(after, 1), 16)
1095 para_env, output_unit=iw, omit_headers=omit_headers)
1097 "DFT%PRINT%AO_MATRICES/ORTHO")
1104 IF (dft_control%dft_plus_u)
THEN
1106 IF (do_kpoints)
THEN
1107 CALL get_qs_env(qs_env, kpoints=kpoints, matrix_s_kp=matrix_s_kp)
1108 CALL diag_kp_smat(matrix_s_kp, kpoints, scf_env%scf_work1)
1111 IF (s_minus_half_available)
THEN
1113 scf_env%s_half, nao)
1117 CALL cp_fm_power(scf_env%s_half, fm_w, 0.5_dp, scf_control%eps_eigval, ndep)
1122 DO ikind = 1,
SIZE(qs_kind_set)
1123 qs_kind => qs_kind_set(ikind)
1125 dft_plus_u_atom=dft_plus_u_atom, &
1126 u_ramping=u_ramping, &
1127 init_u_ramping_each_scf=init_u_ramping_each_scf)
1128 IF (dft_plus_u_atom .AND. (u_ramping /= 0.0_dp))
THEN
1129 IF (init_u_ramping_each_scf)
THEN
1130 CALL set_qs_kind(qs_kind=qs_kind, u_minus_j=0.0_dp)
1137 IF (scf_control%outer_scf%have_scf)
THEN
1142 IF (
ASSOCIATED(qs_env%xas_env))
THEN
1149 CALL scf_env_initial_rho_setup(scf_env, qs_env=qs_env, &
1150 scf_section=scf_section, scf_control=scf_control)
1154 IF (
ASSOCIATED(qs_env%wf_history))
THEN
1156 IF (.NOT.
ASSOCIATED(qs_env%wf_history%past_states(1)%snapshot))
THEN
1157 CALL wfi_update(qs_env%wf_history, qs_env=qs_env, dt=1.0_dp)
1158 ALLOCATE (qs_env%wf_history%past_states(1)%snapshot%rho_frozen)
1159 CALL qs_rho_create(qs_env%wf_history%past_states(1)%snapshot%rho_frozen)
1161 rho_output=qs_env%wf_history%past_states(1)%snapshot%rho_frozen, &
1168 IF (qs_env%qmmm)
THEN
1169 IF (qs_env%qmmm .AND. qs_env%qmmm_env_qm%image_charge)
THEN
1171 qmmm_env=qs_env%qmmm_env_qm)
1176 extension=
".scfLog")
1179 "PRINT%PROGRAM_RUN_INFO")
1181 CALL timestop(handle)
1183 END SUBROUTINE init_scf_run
1195 SUBROUTINE scf_env_initial_rho_setup(scf_env, qs_env, scf_section, scf_control)
1201 CHARACTER(len=*),
PARAMETER :: routinen =
'scf_env_initial_rho_setup'
1203 INTEGER :: extrapolation_method_nr, handle, ispin, &
1205 LOGICAL :: do_harris, orthogonal_wf
1215 CALL timeset(routinen, handle)
1216 NULLIFY (mo_coeff, rho, dft_control, para_env, mos)
1218 cpassert(
ASSOCIATED(scf_env))
1219 cpassert(
ASSOCIATED(qs_env))
1224 dft_control=dft_control, &
1227 do_harris = qs_env%harris_method
1230 IF (
ASSOCIATED(qs_env%wf_history))
THEN
1232 qs_env=qs_env, dt=1.0_dp, &
1233 extrapolation_method_nr=extrapolation_method_nr, &
1234 orthogonal_wf=orthogonal_wf)
1236 IF ((.NOT. orthogonal_wf) .AND. &
1239 DO ispin = 1,
SIZE(mos)
1240 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff, nmo=nmo)
1242 IF (dft_control%hairy_probes .EQV. .true.)
THEN
1243 scf_control%smear%do_smear = .false.
1245 smear=scf_control%smear, probe=dft_control%probe)
1248 smear=scf_control%smear)
1254 IF (.NOT. do_harris)
THEN
1256 extension=
".scfLog")
1257 IF (output_unit > 0)
THEN
1258 WRITE (unit=output_unit, fmt=
"(/,T2,A,I0)") &
1259 "Extrapolation method: "// &
1262 WRITE (unit=output_unit, fmt=
"(T2,A,I0,A)") &
1263 "Extrapolation order: ", &
1264 max((min(qs_env%wf_history%memory_depth, qs_env%wf_history%snapshot_count) - 1), 0)
1268 "PRINT%PROGRAM_RUN_INFO")
1272 CALL get_qs_env(qs_env, harris_env=harris_env)
1283 IF (scf_env%mixing_method > 1)
THEN
1284 IF (dft_control%qs_control%gapw)
THEN
1285 CALL get_qs_env(qs_env=qs_env, rho_atom_set=rho_atom)
1286 CALL mixing_init(scf_env%mixing_method, rho, scf_env%mixing_store, &
1287 para_env, rho_atom=rho_atom)
1288 ELSEIF (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb)
THEN
1290 ELSEIF (dft_control%qs_control%semi_empirical)
THEN
1291 cpabort(
'SE Code not possible')
1293 CALL mixing_init(scf_env%mixing_method, rho, scf_env%mixing_store, &
1298 DO ispin = 1,
SIZE(mos)
1299 IF (mos(ispin)%use_mo_coeff_b)
THEN
1301 mos(ispin)%mo_coeff_b)
1305 CALL timestop(handle)
1307 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
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
logical, save, public cusolver_generalized
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.