67#include "./base/base_uses.f90"
73 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_scf_loop_utils'
91 energy_only, just_energy, exit_inner_loop)
94 LOGICAL :: diis_step, energy_only, just_energy, &
100 energy_only = .false.
101 just_energy = .false.
106 scf_env%iter_count = 0
107 exit_inner_loop = .false.
122 SUBROUTINE qs_scf_new_mos(qs_env, scf_env, scf_control, scf_section, diis_step, &
128 LOGICAL :: diis_step, energy_only
132 CHARACTER(LEN=*),
PARAMETER :: routinen =
'qs_scf_new_mos'
134 INTEGER :: handle, ispin
135 LOGICAL :: disable_diis, has_unit_metric, &
137 REAL(kind=
dp) :: saved_eps_diis
138 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, matrix_s
145 CALL timeset(routinen, handle)
147 NULLIFY (energy, ks_env, matrix_ks, matrix_s, rho, mos, dft_control)
150 matrix_s=matrix_s, energy=energy, &
152 matrix_ks=matrix_ks, rho=rho, mos=mos, &
153 dft_control=dft_control, &
154 has_unit_metric=has_unit_metric)
155 scf_env%iter_param = 0.0_dp
156 disable_diis = dft_control%qs_control%xtb_control%do_tblite .AND. &
158 IF (disable_diis)
THEN
159 saved_eps_diis = scf_control%eps_diis
160 scf_control%eps_diis = 0.0_dp
165 IF (dft_control%correct_el_density_dip)
THEN
166 scf_env%sum_zeff_corr = qs_env%total_zeff_corr
167 IF (abs(qs_env%total_zeff_corr) > 0.0_dp)
THEN
169 CALL cp_abort(__location__, &
170 "Please use ALGORITHM STANDARD in "// &
171 "SCF%DIAGONALIZATION if "// &
172 "CORE_CORRECTION /= 0.0 and "// &
173 "SURFACE_DIPOLE_CORRECTION TRUE ")
174 ELSEIF (dft_control%roks)
THEN
175 CALL cp_abort(__location__, &
176 "Combination of "// &
177 "CORE_CORRECTION /= 0.0 and "// &
178 "SURFACE_DIPOLE_CORRECTION TRUE "// &
179 "is not implemented with ROKS")
180 ELSEIF (scf_control%diagonalization%mom)
THEN
181 CALL cp_abort(__location__, &
182 "Combination of "// &
183 "CORE_CORRECTION /= 0.0 and "// &
184 "SURFACE_DIPOLE_CORRECTION TRUE "// &
185 "is not implemented with SCF%MOM")
190 SELECT CASE (scf_env%method)
192 CALL cp_abort(__location__, &
193 "unknown scf method: "// &
201 IF (abs(qs_env%total_zeff_corr) > 0.0_dp)
THEN
202 CALL cp_abort(__location__, &
203 "CORE_CORRECTION /= 0.0 plus SURFACE_DIPOLE_CORRECTION TRUE "// &
204 "requires SCF%DIAGONALIZATION: ALGORITHM STANDARD")
207 matrix_ks, matrix_s, scf_section, diis_step)
211 IF (dft_control%roks)
THEN
213 scf_control, scf_section, diis_step, &
216 IF (scf_control%diagonalization%mom)
THEN
218 matrix_s, scf_control, scf_section, &
221 IF (dft_control%hairy_probes .EQV. .true.)
THEN
223 matrix_s, scf_control, scf_section, &
228 matrix_s, scf_control, scf_section, &
232 IF (scf_control%do_diag_sub)
THEN
233 skip_diag_sub = (scf_env%subspace_env%eps_diag_sub > 0.0_dp) .AND. &
234 (scf_env%iter_count == 1 .OR. scf_env%iter_delta > scf_env%subspace_env%eps_diag_sub)
235 IF (.NOT. skip_diag_sub)
THEN
237 ks_env, scf_section, scf_control)
243 IF (dft_control%roks)
THEN
245 scf_control, scf_section, diis_step, &
249 scf_control, scf_section, &
254 CALL do_ot_diag(scf_env, mos, matrix_ks, matrix_s, &
255 scf_control, scf_section, diis_step)
258 IF ((scf_env%krylov_space%eps_std_diag > 0.0_dp) .AND. &
259 (scf_env%iter_count == 1 .OR. scf_env%iter_delta > scf_env%krylov_space%eps_std_diag))
THEN
260 IF (scf_env%krylov_space%always_check_conv)
THEN
262 scf_control, scf_section, check_moconv_only=.true.)
265 matrix_s, scf_control, scf_section, diis_step)
268 scf_control, scf_section)
270 IF (scf_control%do_diag_sub)
THEN
271 skip_diag_sub = (scf_env%subspace_env%eps_diag_sub > 0.0_dp) .AND. &
272 (scf_env%iter_count == 1 .OR. scf_env%iter_delta > scf_env%subspace_env%eps_diag_sub)
273 IF (.NOT. skip_diag_sub)
THEN
275 ks_env, scf_section, scf_control)
281 scf_section, .false.)
284 CALL qs_scf_loop_do_ot(qs_env, scf_env, scf_control%smear, mos, rho, &
285 qs_env%mo_derivs, energy%total, &
286 matrix_s, energy_only=energy_only, has_unit_metric=has_unit_metric)
288 IF (disable_diis) scf_control%eps_diis = saved_eps_diis
291 energy%efermi = 0.0_dp
293 DO ispin = 1,
SIZE(mos)
294 energy%kTS = energy%kTS + mos(ispin)%kTS
295 energy%efermi = energy%efermi + mos(ispin)%mu
297 energy%efermi = energy%efermi/real(
SIZE(mos), kind=
dp)
299 CALL timestop(handle)
320 CHARACTER(LEN=*),
PARAMETER :: routinen =
'qs_scf_new_mos_kp'
322 INTEGER :: handle, ispin
323 LOGICAL :: disable_diis, has_unit_metric
324 REAL(
dp) :: diis_error, saved_eps_diis
325 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_ks, matrix_s
331 CALL timeset(routinen, handle)
333 NULLIFY (dft_control, kpoints, matrix_ks, matrix_s)
335 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control, kpoints=kpoints)
336 scf_env%iter_param = 0.0_dp
337 disable_diis = dft_control%qs_control%xtb_control%do_tblite .AND. &
339 IF (disable_diis)
THEN
340 saved_eps_diis = scf_control%eps_diis
341 scf_control%eps_diis = 0.0_dp
344 IF (dft_control%roks) &
345 cpabort(
"KP code: ROKS method not available: ")
347 SELECT CASE (scf_env%method)
349 CALL cp_abort(__location__, &
350 "KP code: Unknown scf method: "// &
354 CALL get_qs_env(qs_env, matrix_ks_kp=matrix_ks, matrix_s_kp=matrix_s)
355 IF (dft_control%hairy_probes .EQV. .true.)
THEN
356 scf_control%smear%do_smear = .false.
358 diis_step, diis_error, qs_env, probe)
361 diis_step, diis_error, qs_env)
364 scf_env%iter_param = diis_error
365 scf_env%iter_method =
"DIIS/Diag."
367 IF (scf_env%mixing_method == 0)
THEN
368 scf_env%iter_method =
"NoMix/Diag."
369 ELSE IF (scf_env%mixing_method == 1)
THEN
370 scf_env%iter_param = scf_env%p_mix_alpha
371 scf_env%iter_method =
"P_Mix/Diag."
372 ELSEIF (scf_env%mixing_method > 1)
THEN
373 scf_env%iter_param = scf_env%mixing_store%alpha
374 scf_env%iter_method = trim(scf_env%mixing_store%iter_method)//
"/Diag."
378 CALL get_qs_env(qs_env=qs_env, has_unit_metric=has_unit_metric)
379 cpassert(has_unit_metric)
381 CALL cp_abort(__location__, &
382 "KP code: Scf method not available: "// &
388 CALL cp_abort(__location__, &
389 "KP code: Scf method not available: "// &
394 IF (scf_env%mixing_method == 0)
THEN
395 scf_env%iter_method =
"NoMix/SMGL"
396 ELSE IF (scf_env%mixing_method == 1)
THEN
397 scf_env%iter_param = scf_env%p_mix_alpha
398 scf_env%iter_method =
"P_Mix/SMGL"
399 ELSE IF (scf_env%mixing_method > 1)
THEN
400 scf_env%iter_param = scf_env%mixing_store%alpha
401 scf_env%iter_method = trim(scf_env%mixing_store%iter_method)//
"/SMGL"
403 CALL run_smeagol_emtrans(qs_env, last=.false., iter=scf_env%iter_count, rho_ao_kp=scf_env%p_mix_new)
405 IF (disable_diis) scf_control%eps_diis = saved_eps_diis
409 energy%efermi = 0.0_dp
410 mos => kpoints%kp_env(1)%kpoint_env%mos
411 DO ispin = 1,
SIZE(mos, 2)
412 energy%kTS = energy%kTS + mos(1, ispin)%kTS
413 energy%efermi = energy%efermi + mos(1, ispin)%mu
415 energy%efermi = energy%efermi/real(
SIZE(mos, 2), kind=
dp)
417 CALL timestop(handle)
438 SUBROUTINE qs_scf_loop_do_ot(qs_env, scf_env, smear, mos, rho, mo_derivs, total_energy, &
439 matrix_s, energy_only, has_unit_metric)
444 TYPE(
mo_set_type),
DIMENSION(:),
INTENT(INOUT) :: mos
447 REAL(kind=
dp),
INTENT(IN) :: total_energy
449 LOGICAL,
INTENT(INOUT) :: energy_only
450 LOGICAL,
INTENT(IN) :: has_unit_metric
452 CHARACTER(LEN=*),
PARAMETER :: routinen =
'qs_scf_loop_do_ot'
454 INTEGER :: handle, ispin
456 TYPE(
dbcsr_type),
POINTER :: orthogonality_metric
458 CALL timeset(routinen, handle)
463 IF (has_unit_metric)
THEN
464 NULLIFY (orthogonality_metric)
466 orthogonality_metric => matrix_s(1)%matrix
472 CALL ot_scf_mini(mos, mo_derivs, smear, orthogonality_metric, &
473 total_energy, energy_only, scf_env%iter_delta, &
476 DO ispin = 1,
SIZE(mos)
480 DO ispin = 1,
SIZE(mos)
482 rho_ao(ispin)%matrix, &
486 scf_env%iter_method = scf_env%qs_ot_env(1)%OT_METHOD_FULL
487 scf_env%iter_param = scf_env%qs_ot_env(1)%ds_min
488 qs_env%broyden_adaptive_sigma = scf_env%qs_ot_env(1)%broyden_adaptive_sigma
490 CALL timestop(handle)
492 END SUBROUTINE qs_scf_loop_do_ot
507 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: rho_ao_kp
513 SELECT CASE (scf_env%mixing_method)
516 scf_env%mixing_store, rho_ao_kp, para_env, scf_env%iter_delta, scf_env%iter_count, &
522 delta=scf_env%iter_delta)
525 CALL cp_abort(__location__, &
526 "unknown scf mixing method: "// &
542 outer_loop_converged, exit_outer_loop)
546 LOGICAL :: should_stop, outer_loop_converged, &
549 REAL(kind=
dp) :: outer_loop_eps
551 outer_loop_converged = .true.
552 IF (scf_control%outer_scf%have_scf)
THEN
554 scf_env%outer_scf%iter_count = scf_env%outer_scf%iter_count + 1
555 outer_loop_converged = .false.
559 outer_loop_eps = sqrt(maxval(scf_env%outer_scf%gradient(:, scf_env%outer_scf%iter_count)**2))
561 IF (outer_loop_eps < scf_control%outer_scf%eps_scf) outer_loop_converged = .true.
564 exit_outer_loop = should_stop .OR. outer_loop_converged .OR. &
565 scf_env%outer_scf%iter_count > scf_control%outer_scf%max_scf
581 exit_inner_loop, inner_loop_converged, output_unit)
585 LOGICAL :: should_stop, just_energy, &
586 exit_inner_loop, inner_loop_converged
587 INTEGER :: output_unit
589 inner_loop_converged = .false.
590 exit_inner_loop = .false.
593 start_time=qs_env%start_time)
594 IF (scf_env%iter_delta < scf_control%eps_scf)
THEN
595 IF (output_unit > 0)
THEN
596 WRITE (unit=output_unit, fmt=
"(/,T3,A,I5,A/)") &
597 "*** SCF run converged in ", scf_env%iter_count,
" steps ***"
599 inner_loop_converged = .true.
600 exit_inner_loop = .true.
601 ELSE IF (should_stop .OR. scf_env%iter_count >= scf_control%max_scf)
THEN
602 inner_loop_converged = .false.
603 IF (just_energy)
THEN
604 exit_inner_loop = .false.
606 exit_inner_loop = .true.
607 IF (output_unit > 0)
THEN
608 WRITE (unit=output_unit, fmt=
"(/,T3,A,I5,A/)") &
609 "Leaving inner SCF loop after reaching ", scf_env%iter_count,
" steps."
624 SUBROUTINE qs_scf_undo_mixing(scf_env, rho, dft_control, para_env, diis_step)
631 CHARACTER(len=default_string_length) :: name
632 INTEGER :: ic, ispin, nc
633 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: rho_ao_kp
637 IF (scf_env%mixing_method > 0)
THEN
639 nc =
SIZE(scf_env%p_mix_new, 2)
640 SELECT CASE (scf_env%mixing_method)
643 rho_ao_kp, para_env, scf_env%iter_delta, &
644 scf_env%iter_count, diis=diis_step, &
647 DO ispin = 1, dft_control%nspins
649 CALL dbcsr_copy(rho_ao_kp(ispin, ic)%matrix, scf_env%p_mix_new(ispin, ic)%matrix, name=name)
655 DO ispin = 1, dft_control%nspins
657 CALL dbcsr_copy(rho_ao_kp(ispin, ic)%matrix, scf_env%p_mix_new(ispin, ic)%matrix, name=name)
662 END SUBROUTINE qs_scf_undo_mixing
677 LOGICAL,
INTENT(IN) :: mix_rho
687 CALL gspace_mixing(qs_env, scf_env%mixing_method, scf_env%mixing_store, rho, &
688 para_env, scf_env%iter_count)
706 INTEGER,
INTENT(IN) :: output_unit
708 LOGICAL :: do_kpoints
715 NULLIFY (energy, rho, dft_control, ks_env)
717 CALL get_qs_env(qs_env=qs_env, energy=energy, ks_env=ks_env, &
718 rho=rho, dft_control=dft_control, para_env=para_env, &
719 do_kpoints=do_kpoints)
721 CALL cleanup_scf_loop(scf_env)
727 CALL qs_scf_undo_mixing(scf_env, rho, dft_control, para_env, diis_step)
742 SUBROUTINE cleanup_scf_loop(scf_env)
745 CHARACTER(len=*),
PARAMETER :: routinen =
'cleanup_scf_loop'
747 INTEGER :: handle, ispin
749 CALL timeset(routinen, handle)
751 SELECT CASE (scf_env%method)
753 DO ispin = 1,
SIZE(scf_env%qs_ot_env)
756 DEALLOCATE (scf_env%qs_ot_env)
770 CALL cp_abort(__location__, &
771 "unknown scf method method:"// &
775 CALL timestop(handle)
777 END SUBROUTINE cleanup_scf_loop
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, nfullrows_total, nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, my_prow, my_pcol, local_rows, local_cols, proc_row_dist, proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, matrix_type, group)
...
Routines to handle the external control of CP2K.
subroutine, public external_control(should_stop, flag, globenv, target_time, start_time, force_check)
External manipulations during a run : when the <PROJECT_NAME>.EXIT_$runtype command is sent the progr...
various routines to log and control the output. The idea is that decisions about where to log should ...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Types and basic routines needed for a kpoint calculation.
Interface to the message passing library MPI.
collects routines that calculate density matrices
module that contains the definitions of the scf types
integer, parameter, public broyden_mixing_nr
integer, parameter, public modified_broyden_mixing_nr
integer, parameter, public no_mixing_nr
integer, parameter, public direct_mixing_nr
integer, parameter, public multisecant_mixing_nr
integer, parameter, public pulay_mixing_nr
integer, parameter, public gspace_mixing_nr
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 fb_env_do_diag(fb_env, qs_env, matrix_ks, matrix_s, scf_section, diis_step)
Do filtered matrix method diagonalisation.
subroutine, public gspace_mixing(qs_env, mixing_method, mixing_store, rho, para_env, iter_count)
Driver for the g-space mixing, calls the proper routine given the requested method.
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...
subroutine, public self_consistency_check(rho_ao, p_delta, para_env, p_out, delta)
...
Set occupation of molecular orbitals.
Definition and initialisation of the mo data type.
methods for deltaSCF calculations
subroutine, public do_mom_diag(scf_env, mos, matrix_ks, matrix_s, scf_control, scf_section, diis_step)
do an SCF iteration, then compute occupation numbers of the new molecular orbitals according to their...
basic functionality for using ot in the scf routines.
subroutine, public ot_scf_mini(mo_array, matrix_dedc, smear, matrix_s, energy, energy_only, delta, qs_ot_env)
performs the actual minimisation, needs only limited info updated for restricted calculations matrix_...
subroutine, public ot_scf_destroy(qs_ot_env)
...
Routines for performing an outer scf loop.
subroutine, public outer_loop_gradient(qs_env, scf_env)
computes the gradient wrt to the outer loop variables
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...
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...
Different diagonalization schemes that can be used for the iterative solution of the eigenvalue probl...
subroutine, public do_ot_diag(scf_env, mos, matrix_ks, matrix_s, scf_control, scf_section, diis_step)
the inner loop of scf, specific to iterative diagonalization using OT with S matrix; basically,...
subroutine, public do_block_davidson_diag(qs_env, scf_env, mos, matrix_ks, matrix_s, scf_control, scf_section, check_moconv_only)
iterative diagonalization using the block davidson space approach
subroutine, public do_roks_diag(scf_env, mos, matrix_ks, matrix_s, scf_control, scf_section, diis_step, orthogonal_basis)
Solve a set restricted open Kohn-Sham (ROKS) equations based on the alpha and beta Kohn-Sham matrices...
subroutine, public do_scf_diag_subspace(qs_env, scf_env, subspace_env, mos, rho, ks_env, scf_section, scf_control)
inner loop within MOS subspace, to refine occupation and density, before next diagonalization of the ...
subroutine, public do_block_krylov_diag(scf_env, mos, matrix_ks, scf_control, scf_section, check_moconv_only)
iterative diagonalization using the block Krylov-space approach
subroutine, public do_special_diag(scf_env, mos, matrix_ks, scf_control, scf_section, diis_step)
the inner loop of scf, specific to diagonalization without S matrix basically, in goes the ks matrix ...
subroutine, public do_general_diag(scf_env, mos, matrix_ks, matrix_s, scf_control, scf_section, diis_step, probe)
...
subroutine, public do_general_diag_kp(matrix_ks, matrix_s, kpoints, scf_env, scf_control, update_p, diis_step, diis_error, qs_env, probe)
Kpoint diagonalization routine Transforms matrices to kpoint, distributes kpoint groups,...
Utility routines for qs_scf.
subroutine, public qs_scf_check_inner_exit(qs_env, scf_env, scf_control, should_stop, just_energy, exit_inner_loop, inner_loop_converged, output_unit)
checks whether exit conditions for inner loop are satisfied
subroutine, public qs_scf_inner_finalize(scf_env, qs_env, diis_step, output_unit)
Performs the necessary steps before leaving innner scf loop.
subroutine, public qs_scf_set_loop_flags(scf_env, diis_step, energy_only, just_energy, exit_inner_loop)
computes properties for a given hamiltonian using the current wfn
subroutine, public qs_scf_rho_update(rho, qs_env, scf_env, ks_env, mix_rho)
Performs the updates rho (takes care of mixing as well)
subroutine, public qs_scf_new_mos_kp(qs_env, scf_env, scf_control, diis_step, probe)
Updates MOs and density matrix using diagonalization Kpoint code.
subroutine, public qs_scf_check_outer_exit(qs_env, scf_env, scf_control, should_stop, outer_loop_converged, exit_outer_loop)
checks whether exit conditions for outer loop are satisfied
subroutine, public qs_scf_density_mixing(scf_env, rho, para_env, diis_step)
Performs the requested density mixing if any needed.
subroutine, public qs_scf_new_mos(qs_env, scf_env, scf_control, scf_section, diis_step, energy_only, probe)
takes known energy and derivatives and produces new wfns and or density matrix
groups fairly general SCF methods, so that modules other than qs_scf can use them too split off from ...
subroutine, public scf_env_density_mixing(p_mix_new, mixing_store, rho_ao, para_env, iter_delta, iter_count, diis, invert)
perform (if requested) a density mixing
subroutine, public qs_scf_print_summary(output_unit, qs_env)
writes a summary of information after scf
module that contains the definitions of the scf types
integer, parameter, public ot_diag_method_nr
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
integer, parameter, public special_diag_method_nr
integer, parameter, public block_krylov_diag_method_nr
integer, parameter, public general_diag_method_nr
parameters that control an scf iteration
subroutine, public run_smeagol_emtrans(qs_env, last, iter, rho_ao_kp)
Run NEGF/SMEAGOL transport calculation.
logical function, public tb_native_scc_mixer_active(dft_control)
Return whether the tblite native SCC mixer is active for this run.
Contains information about kpoints.
stores all the informations relevant to an mpi environment
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
keeps the density in various representations, keeping track of which ones are valid.
contains the parameters needed by a scf run