142 LOGICAL :: restricted = .false.
143 INTEGER :: spin_index = 0, kpoint_index = 0, local_kpoint_index = 0
144 REAL(kind=
dp) :: kpoint_weight = 1.0_dp
145 LOGICAL :: has_kpoint_context = .false.
146 LOGICAL :: state_allocated = .false.
147 LOGICAL :: has_complex_kpoint_state = .false.
158 TYPE(
dbcsr_type),
POINTER :: matrix_p => null(), matrix_p_im => null()
159 TYPE(
dbcsr_type),
POINTER :: matrix_r => null(), matrix_r_im => null()
160 TYPE(
dbcsr_type),
POINTER :: matrix_sinp => null(), matrix_sinp_im => null()
161 TYPE(
dbcsr_type),
POINTER :: matrix_cosp => null(), matrix_cosp_im => null()
164 TYPE(
dbcsr_type),
POINTER :: matrix_buf1 => null(), matrix_buf1_im => null()
165 TYPE(
dbcsr_type),
POINTER :: matrix_buf2 => null(), matrix_buf2_im => null()
166 TYPE(
dbcsr_type),
POINTER :: matrix_buf3 => null(), matrix_buf3_im => null()
167 TYPE(
dbcsr_type),
POINTER :: matrix_buf4 => null(), matrix_buf4_im => null()
168 TYPE(
dbcsr_type),
POINTER :: matrix_os => null(), matrix_os_im => null()
169 TYPE(
dbcsr_type),
POINTER :: matrix_buf1_ortho => null(), matrix_buf1_ortho_im => null()
170 TYPE(
dbcsr_type),
POINTER :: matrix_buf2_ortho => null(), matrix_buf2_ortho_im => null()
172 TYPE(
dbcsr_type),
POINTER :: matrix_buf_nk => null(), matrix_buf_nk_im => null(), &
173 matrix_tmp_nk => null()
175 REAL(kind=
dp),
DIMENSION(:),
POINTER :: evals => null()
176 REAL(kind=
dp),
DIMENSION(:),
POINTER :: dum => null()
179 LOGICAL :: os_valid = .false.
186 TYPE(
dbcsr_type),
POINTER :: matrix_c0 => null(), matrix_sc0 => null(), matrix_psc0 => null()
187 TYPE(
dbcsr_type),
POINTER :: matrix_c0_im => null(), matrix_sc0_im => null(), matrix_psc0_im => null()
190 TYPE(
dbcsr_type),
POINTER :: buf1_k_k_nosym => null(), buf2_k_k_nosym => null(), &
191 buf3_k_k_nosym => null(), buf4_k_k_nosym => null(), &
192 buf1_k_k_sym => null(), buf2_k_k_sym => null(), &
193 buf3_k_k_sym => null(), buf4_k_k_sym => null(), &
194 p_k_k_sym => null(), buf1_n_k => null(), buf1_n_k_dp => null()
198 TYPE(
dbcsr_type),
POINTER :: matrix_x => null(), matrix_sx => null(), matrix_gx => null()
199 TYPE(
dbcsr_type),
POINTER :: matrix_x_im => null(), matrix_sx_im => null(), matrix_gx_im => null()
200 TYPE(
dbcsr_type),
POINTER :: matrix_preconditioned_gx => null(), &
201 matrix_preconditioned_gx_im => null()
202 TYPE(
dbcsr_type),
POINTER :: matrix_response_gx => null(), matrix_response_gx_im => null()
203 TYPE(
dbcsr_type),
POINTER :: matrix_mermin_g0 => null(), matrix_mermin_g0_im => null()
204 TYPE(
dbcsr_type),
POINTER :: matrix_ref_inv_sqrt => null(), matrix_ref_inv_sqrt_im => null()
207 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: ener_mermin_g0
208 LOGICAL :: mermin_gradient_ref_valid = .false.
209 TYPE(
dbcsr_type),
POINTER :: matrix_dx => null(), matrix_gx_old => null()
210 TYPE(
dbcsr_type),
POINTER :: matrix_dx_im => null(), matrix_gx_old_im => null()
212 LOGICAL :: use_gx_old = .false., use_dx = .false.
214 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_h_e => null(), matrix_h_x => null()
215 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_h_e_im => null(), matrix_h_x_im => null()
216 REAL(kind=
dp),
DIMENSION(:),
POINTER :: lbfgs_rho => null(), lbfgs_yy => null()
217 REAL(kind=
dp),
DIMENSION(:),
POINTER :: lbfgs_sy_rotation => null(), &
218 lbfgs_yy_rotation => null()
220 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: ls_diis => null()
221 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: lss_diis => null()
222 REAL(kind=
dp),
DIMENSION(:),
POINTER :: c_diis => null()
223 REAL(kind=
dp),
DIMENSION(:),
POINTER :: c_broy => null()
224 REAL(kind=
dp),
DIMENSION(:),
POINTER :: energy_h => null()
225 INTEGER,
DIMENSION(:),
POINTER :: ipivot => null()
227 REAL(kind=
dp) :: ot_pos(53) = -1.0_dp, ot_energy(53) = -1.0_dp, ot_grad(53) = -1.0_dp
228 INTEGER :: line_search_left = -1, line_search_right = -1, line_search_mid = -1
229 INTEGER :: line_search_count = -1
230 LOGICAL :: line_search_might_be_done = .false.
231 REAL(kind=
dp) :: delta = -1.0_dp, gnorm = -1.0_dp, gnorm_old = -1.0_dp, etotal = -1.0_dp, gradient = -1.0_dp
232 LOGICAL :: energy_only = .false.
233 INTEGER :: diis_iter = -1
234 CHARACTER(LEN=8) :: ot_method_full =
""
235 INTEGER :: ot_count = -1
236 REAL(kind=
dp) :: ds_min = -1.0_dp
237 REAL(kind=
dp) :: broyden_adaptive_sigma = -1.0_dp
240 INTEGER :: taylor_order = -1
241 REAL(kind=
dp) :: largest_eval_upper_bound = -1.0_dp
260 TYPE(
dbcsr_type),
POINTER :: rot_mat_response_gx_im => null()
268 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rot_mat_evals => null()
271 LOGICAL :: rotation_response_valid = .false.
272 LOGICAL :: response_candidate_pending = .false.
273 LOGICAL :: response_shadow_pending = .false.
274 INTEGER :: response_candidate_directions = 0
275 INTEGER :: response_candidate_good_samples = 0
276 INTEGER :: response_candidate_cooldown = 0
277 INTEGER :: response_shadow_good_samples = 0
278 REAL(kind=
dp) :: response_model_curvature = 0.0_dp
279 REAL(kind=
dp) :: response_shadow_curvature = 0.0_dp
280 LOGICAL :: response_hxc_direction_valid = .false.
281 REAL(kind=
dp) :: response_reference_energy = 0.0_dp
282 REAL(kind=
dp) :: response_reference_residual = 0.0_dp
283 REAL(kind=
dp) :: response_predicted_slope = 0.0_dp
284 REAL(kind=
dp) :: response_predicted_curvature = 0.0_dp
287 REAL(kind=
dp),
POINTER,
DIMENSION(:) :: ener_x => null()
288 REAL(kind=
dp),
POINTER,
DIMENSION(:) :: ener_rayleigh => null()
289 REAL(kind=
dp),
POINTER,
DIMENSION(:) :: ener_dx => null()
290 REAL(kind=
dp),
POINTER,
DIMENSION(:) :: ener_gx => null()
291 REAL(kind=
dp),
POINTER,
DIMENSION(:) :: ener_preconditioned_gx => null()
292 REAL(kind=
dp),
POINTER,
DIMENSION(:) :: ener_response_gx => null()
293 REAL(kind=
dp),
POINTER,
DIMENSION(:) :: ener_gx_old => null()
294 REAL(kind=
dp),
POINTER,
DIMENSION(:, :) :: ener_h_e => null()
295 REAL(kind=
dp),
POINTER,
DIMENSION(:, :) :: ener_h_x => null()
585 qs_ot_env%OT_energy(:) = 0.0_dp
586 qs_ot_env%OT_pos(:) = 0.0_dp
587 qs_ot_env%OT_grad(:) = 0.0_dp
588 qs_ot_env%line_search_count = 0
590 qs_ot_env%energy_only = .false.
591 qs_ot_env%gnorm_old = 1.0_dp
592 qs_ot_env%diis_iter = 0
593 qs_ot_env%ds_min = qs_ot_env%settings%ds_min
594 qs_ot_env%os_valid = .false.
596 CALL dbcsr_set(qs_ot_env%matrix_gx, 0.0_dp)
597 IF (
ASSOCIATED(qs_ot_env%matrix_gx_im))
THEN
598 CALL dbcsr_set(qs_ot_env%matrix_gx_im, 0.0_dp)
600 IF (
ASSOCIATED(qs_ot_env%matrix_preconditioned_gx))
THEN
601 CALL dbcsr_set(qs_ot_env%matrix_preconditioned_gx, 0.0_dp)
603 IF (
ASSOCIATED(qs_ot_env%matrix_preconditioned_gx_im))
THEN
604 CALL dbcsr_set(qs_ot_env%matrix_preconditioned_gx_im, 0.0_dp)
606 IF (
ASSOCIATED(qs_ot_env%matrix_response_gx))
CALL dbcsr_set(qs_ot_env%matrix_response_gx, 0.0_dp)
607 IF (
ASSOCIATED(qs_ot_env%matrix_response_gx_im))
THEN
608 CALL dbcsr_set(qs_ot_env%matrix_response_gx_im, 0.0_dp)
610 IF (
ASSOCIATED(qs_ot_env%matrix_mermin_g0))
CALL dbcsr_set(qs_ot_env%matrix_mermin_g0, 0.0_dp)
611 IF (
ASSOCIATED(qs_ot_env%matrix_mermin_g0_im))
THEN
612 CALL dbcsr_set(qs_ot_env%matrix_mermin_g0_im, 0.0_dp)
614 qs_ot_env%mermin_gradient_ref_valid = .false.
616 IF (qs_ot_env%use_dx)
THEN
617 CALL dbcsr_set(qs_ot_env%matrix_dx, 0.0_dp)
619 IF (qs_ot_env%use_dx .AND.
ASSOCIATED(qs_ot_env%matrix_dx_im))
THEN
620 CALL dbcsr_set(qs_ot_env%matrix_dx_im, 0.0_dp)
623 IF (qs_ot_env%use_gx_old)
THEN
624 CALL dbcsr_set(qs_ot_env%matrix_gx_old, 0.0_dp)
626 IF (qs_ot_env%use_gx_old .AND.
ASSOCIATED(qs_ot_env%matrix_gx_old_im))
THEN
627 CALL dbcsr_set(qs_ot_env%matrix_gx_old_im, 0.0_dp)
630 IF (qs_ot_env%settings%ot_method ==
"LBFG")
THEN
631 qs_ot_env%lbfgs_rho = 0.0_dp
632 qs_ot_env%lbfgs_yy = 0.0_dp
633 qs_ot_env%lbfgs_sy_rotation = 0.0_dp
634 qs_ot_env%lbfgs_yy_rotation = 0.0_dp
637 IF (qs_ot_env%settings%do_rotation)
THEN
638 CALL dbcsr_set(qs_ot_env%rot_mat_u, 0.0_dp)
640 CALL dbcsr_set(qs_ot_env%rot_mat_x, 0.0_dp)
641 CALL dbcsr_set(qs_ot_env%rot_mat_dedu, 0.0_dp)
642 CALL dbcsr_set(qs_ot_env%rot_mat_chc, 0.0_dp)
643 CALL dbcsr_set(qs_ot_env%rot_mat_gx, 0.0_dp)
644 IF (
ASSOCIATED(qs_ot_env%rot_mat_response_gx))
THEN
645 CALL dbcsr_set(qs_ot_env%rot_mat_response_gx, 0.0_dp)
647 IF (
ASSOCIATED(qs_ot_env%rot_mat_u_im))
CALL dbcsr_set(qs_ot_env%rot_mat_u_im, 0.0_dp)
648 IF (
ASSOCIATED(qs_ot_env%rot_mat_x_im))
CALL dbcsr_set(qs_ot_env%rot_mat_x_im, 0.0_dp)
649 IF (
ASSOCIATED(qs_ot_env%rot_mat_dedu_im))
CALL dbcsr_set(qs_ot_env%rot_mat_dedu_im, 0.0_dp)
650 IF (
ASSOCIATED(qs_ot_env%rot_mat_chc_im))
CALL dbcsr_set(qs_ot_env%rot_mat_chc_im, 0.0_dp)
651 IF (
ASSOCIATED(qs_ot_env%rot_mat_gx_im))
CALL dbcsr_set(qs_ot_env%rot_mat_gx_im, 0.0_dp)
652 IF (
ASSOCIATED(qs_ot_env%rot_mat_response_gx_im))
THEN
653 CALL dbcsr_set(qs_ot_env%rot_mat_response_gx_im, 0.0_dp)
655 IF (
ASSOCIATED(qs_ot_env%rot_mat_mermin_g0))
THEN
656 CALL dbcsr_set(qs_ot_env%rot_mat_mermin_g0, 0.0_dp)
658 IF (
ASSOCIATED(qs_ot_env%rot_mat_mermin_g0_im))
THEN
659 CALL dbcsr_set(qs_ot_env%rot_mat_mermin_g0_im, 0.0_dp)
661 qs_ot_env%rotation_response_valid = .false.
662 qs_ot_env%response_candidate_pending = .false.
663 qs_ot_env%response_shadow_pending = .false.
664 qs_ot_env%response_candidate_directions = 0
665 qs_ot_env%response_candidate_good_samples = 0
666 qs_ot_env%response_candidate_cooldown = 0
667 qs_ot_env%response_shadow_good_samples = 0
668 qs_ot_env%response_model_curvature = 0.0_dp
669 qs_ot_env%response_shadow_curvature = 0.0_dp
670 qs_ot_env%response_hxc_direction_valid = .false.
671 qs_ot_env%response_reference_energy = 0.0_dp
672 qs_ot_env%response_reference_residual = 0.0_dp
673 qs_ot_env%response_predicted_slope = 0.0_dp
674 qs_ot_env%response_predicted_curvature = 0.0_dp
675 IF (qs_ot_env%use_dx)
THEN
676 CALL dbcsr_set(qs_ot_env%rot_mat_dx, 0.0_dp)
677 IF (
ASSOCIATED(qs_ot_env%rot_mat_dx_im))
CALL dbcsr_set(qs_ot_env%rot_mat_dx_im, 0.0_dp)
679 IF (qs_ot_env%use_gx_old)
THEN
680 CALL dbcsr_set(qs_ot_env%rot_mat_gx_old, 0.0_dp)
681 IF (
ASSOCIATED(qs_ot_env%rot_mat_gx_old_im))
CALL dbcsr_set(qs_ot_env%rot_mat_gx_old_im, 0.0_dp)
684 IF (qs_ot_env%settings%do_ener)
THEN
685 qs_ot_env%ener_rayleigh(:) = 0.0_dp
686 qs_ot_env%ener_gx(:) = 0.0_dp
687 IF (
ASSOCIATED(qs_ot_env%ener_preconditioned_gx))
THEN
688 qs_ot_env%ener_preconditioned_gx(:) = 0.0_dp
690 IF (
ASSOCIATED(qs_ot_env%ener_response_gx)) qs_ot_env%ener_response_gx(:) = 0.0_dp
691 IF (
ALLOCATED(qs_ot_env%ener_mermin_g0)) qs_ot_env%ener_mermin_g0(:) = 0.0_dp
692 IF (qs_ot_env%use_dx)
THEN
693 qs_ot_env%ener_dx(:) = 0.0_dp
695 IF (qs_ot_env%use_gx_old)
THEN
696 qs_ot_env%ener_gx_old(:) = 0.0_dp
712 SUBROUTINE qs_ot_allocate(qs_ot_env, matrix_s, fm_struct_ref, ortho_k, energy_dimension)
716 INTEGER,
OPTIONAL :: ortho_k, energy_dimension
718 INTEGER :: i, k, m_diis, my_energy_dimension, &
719 my_ortho_k, n, ncoef, nhistory
725 cpassert(.NOT. qs_ot_env%state_allocated)
726 qs_ot_env%has_complex_kpoint_state = .false.
727 NULLIFY (qs_ot_env%preconditioner)
728 NULLIFY (qs_ot_env%matrix_psc0)
729 NULLIFY (qs_ot_env%matrix_psc0_im)
730 NULLIFY (qs_ot_env%para_env)
731 NULLIFY (qs_ot_env%blacs_env)
734 para_env=para_env, context=context)
736 qs_ot_env%para_env => para_env
737 qs_ot_env%blacs_env => context
738 CALL para_env%retain()
739 CALL context%retain()
741 IF (
PRESENT(ortho_k))
THEN
746 my_energy_dimension = k
747 IF (
PRESENT(energy_dimension)) my_energy_dimension = energy_dimension
748 IF (qs_ot_env%settings%do_ener)
THEN
749 cpassert(my_energy_dimension > 0)
752 m_diis = qs_ot_env%settings%diis_m
754 qs_ot_env%use_gx_old = .false.
755 qs_ot_env%use_dx = .false.
757 SELECT CASE (qs_ot_env%settings%ot_method)
761 qs_ot_env%use_gx_old = .true.
762 qs_ot_env%use_dx = .true.
763 IF (qs_ot_env%settings%ot_method ==
"LBFG" .AND. m_diis < 1) cpabort(
"m_diis less than one")
764 CASE (
"DIIS",
"BROY")
765 IF (m_diis < 1) cpabort(
"m_diis less than one")
767 cpabort(
"Unknown option")
770 IF (qs_ot_env%settings%ot_method ==
"DIIS" .OR. &
771 qs_ot_env%settings%ot_method ==
"BROY")
THEN
772 ALLOCATE (qs_ot_env%ls_diis(m_diis + 1, m_diis + 1))
773 qs_ot_env%ls_diis = 0.0_dp
774 ALLOCATE (qs_ot_env%lss_diis(m_diis + 1, m_diis + 1))
775 ALLOCATE (qs_ot_env%c_diis(m_diis + 1))
776 ALLOCATE (qs_ot_env%c_broy(m_diis))
777 ALLOCATE (qs_ot_env%energy_h(m_diis))
778 ALLOCATE (qs_ot_env%ipivot(m_diis + 1))
780 IF (qs_ot_env%settings%ot_method ==
"LBFG")
THEN
781 ALLOCATE (qs_ot_env%lbfgs_rho(m_diis), qs_ot_env%lbfgs_yy(m_diis), &
782 qs_ot_env%lbfgs_sy_rotation(m_diis), qs_ot_env%lbfgs_yy_rotation(m_diis))
783 qs_ot_env%lbfgs_rho = 0.0_dp
784 qs_ot_env%lbfgs_yy = 0.0_dp
785 qs_ot_env%lbfgs_sy_rotation = 0.0_dp
786 qs_ot_env%lbfgs_yy_rotation = 0.0_dp
789 ALLOCATE (qs_ot_env%evals(k))
790 ALLOCATE (qs_ot_env%dum(k))
792 NULLIFY (qs_ot_env%matrix_os)
793 NULLIFY (qs_ot_env%matrix_os_im)
794 NULLIFY (qs_ot_env%matrix_buf1_ortho)
795 NULLIFY (qs_ot_env%matrix_buf1_ortho_im)
796 NULLIFY (qs_ot_env%matrix_buf2_ortho)
797 NULLIFY (qs_ot_env%matrix_buf2_ortho_im)
798 NULLIFY (qs_ot_env%matrix_tmp_ortho)
799 NULLIFY (qs_ot_env%matrix_buf_nk)
800 NULLIFY (qs_ot_env%matrix_buf_nk_im)
801 NULLIFY (qs_ot_env%matrix_tmp_nk)
802 NULLIFY (qs_ot_env%matrix_p)
803 NULLIFY (qs_ot_env%matrix_p_im)
804 NULLIFY (qs_ot_env%matrix_r)
805 NULLIFY (qs_ot_env%matrix_r_im)
806 NULLIFY (qs_ot_env%matrix_sinp)
807 NULLIFY (qs_ot_env%matrix_sinp_im)
808 NULLIFY (qs_ot_env%matrix_cosp)
809 NULLIFY (qs_ot_env%matrix_cosp_im)
810 NULLIFY (qs_ot_env%matrix_sinp_b)
811 NULLIFY (qs_ot_env%matrix_cosp_b)
812 NULLIFY (qs_ot_env%matrix_buf1)
813 NULLIFY (qs_ot_env%matrix_buf1_im)
814 NULLIFY (qs_ot_env%matrix_buf2)
815 NULLIFY (qs_ot_env%matrix_buf2_im)
816 NULLIFY (qs_ot_env%matrix_buf3)
817 NULLIFY (qs_ot_env%matrix_buf3_im)
818 NULLIFY (qs_ot_env%matrix_buf4)
819 NULLIFY (qs_ot_env%matrix_buf4_im)
820 NULLIFY (qs_ot_env%matrix_c0)
821 NULLIFY (qs_ot_env%matrix_sc0)
822 NULLIFY (qs_ot_env%matrix_c0_im)
823 NULLIFY (qs_ot_env%matrix_sc0_im)
824 NULLIFY (qs_ot_env%matrix_x)
825 NULLIFY (qs_ot_env%matrix_sx)
826 NULLIFY (qs_ot_env%matrix_x_im)
827 NULLIFY (qs_ot_env%matrix_sx_im)
828 NULLIFY (qs_ot_env%matrix_gx)
829 NULLIFY (qs_ot_env%matrix_gx_im)
830 NULLIFY (qs_ot_env%matrix_preconditioned_gx)
831 NULLIFY (qs_ot_env%matrix_preconditioned_gx_im)
832 NULLIFY (qs_ot_env%matrix_response_gx)
833 NULLIFY (qs_ot_env%matrix_response_gx_im)
834 NULLIFY (qs_ot_env%matrix_mermin_g0)
835 NULLIFY (qs_ot_env%matrix_mermin_g0_im)
836 NULLIFY (qs_ot_env%matrix_ref_inv_sqrt)
837 NULLIFY (qs_ot_env%matrix_ref_inv_sqrt_im)
838 DO i = 1,
SIZE(qs_ot_env%mermin_physical)
839 NULLIFY (qs_ot_env%mermin_physical(i)%c0)
840 NULLIFY (qs_ot_env%mermin_physical(i)%c0_im)
841 NULLIFY (qs_ot_env%mermin_physical(i)%h0)
842 NULLIFY (qs_ot_env%mermin_physical(i)%h0_im)
843 NULLIFY (qs_ot_env%mermin_physical(i)%c_previous)
844 NULLIFY (qs_ot_env%mermin_physical(i)%c_previous_im)
845 NULLIFY (qs_ot_env%mermin_physical(i)%y_previous)
846 NULLIFY (qs_ot_env%mermin_physical(i)%y_previous_im)
847 qs_ot_env%mermin_physical(i)%reference_valid = .false.
848 qs_ot_env%mermin_physical(i)%secant_valid = .false.
850 qs_ot_env%mermin_gradient_ref_valid = .false.
851 NULLIFY (qs_ot_env%matrix_gx_old)
852 NULLIFY (qs_ot_env%matrix_gx_old_im)
853 NULLIFY (qs_ot_env%matrix_dx)
854 NULLIFY (qs_ot_env%matrix_dx_im)
855 NULLIFY (qs_ot_env%buf1_k_k_nosym)
856 NULLIFY (qs_ot_env%buf2_k_k_nosym)
857 NULLIFY (qs_ot_env%buf3_k_k_nosym)
858 NULLIFY (qs_ot_env%buf4_k_k_nosym)
859 NULLIFY (qs_ot_env%buf1_k_k_sym)
860 NULLIFY (qs_ot_env%buf2_k_k_sym)
861 NULLIFY (qs_ot_env%buf3_k_k_sym)
862 NULLIFY (qs_ot_env%buf4_k_k_sym)
863 NULLIFY (qs_ot_env%buf1_n_k)
864 NULLIFY (qs_ot_env%buf1_n_k_dp)
865 NULLIFY (qs_ot_env%p_k_k_sym)
870 sym=dbcsr_type_no_symmetry)
874 sym=dbcsr_type_no_symmetry)
878 sym=dbcsr_type_no_symmetry)
882 sym=dbcsr_type_no_symmetry)
886 sym=dbcsr_type_no_symmetry)
888 IF (qs_ot_env%settings%occupation_preconditioner)
THEN
891 template=matrix_s, n=k, &
892 sym=dbcsr_type_no_symmetry)
895 IF (qs_ot_env%use_dx)
THEN
898 sym=dbcsr_type_no_symmetry)
901 IF (qs_ot_env%use_gx_old)
THEN
904 sym=dbcsr_type_no_symmetry)
907 SELECT CASE (qs_ot_env%settings%ot_algorithm)
911 sym=dbcsr_type_no_symmetry)
915 sym=dbcsr_type_no_symmetry)
919 sym=dbcsr_type_no_symmetry)
923 sym=dbcsr_type_no_symmetry)
927 sym=dbcsr_type_no_symmetry)
931 sym=dbcsr_type_no_symmetry)
935 sym=dbcsr_type_no_symmetry)
939 sym=dbcsr_type_no_symmetry)
943 sym=dbcsr_type_no_symmetry)
947 sym=dbcsr_type_no_symmetry)
951 sym=dbcsr_type_no_symmetry)
955 sym=dbcsr_type_no_symmetry)
959 sym=dbcsr_type_no_symmetry)
964 sym=dbcsr_type_no_symmetry)
968 sym=dbcsr_type_no_symmetry)
972 sym=dbcsr_type_no_symmetry)
976 sym=dbcsr_type_no_symmetry)
981 sym=dbcsr_type_no_symmetry)
985 sym=dbcsr_type_no_symmetry)
989 sym=dbcsr_type_no_symmetry)
993 sym=dbcsr_type_no_symmetry)
997 sym=dbcsr_type_no_symmetry)
1001 sym=dbcsr_type_no_symmetry)
1005 sym=dbcsr_type_no_symmetry)
1009 IF (qs_ot_env%settings%ot_method ==
"DIIS" .OR. &
1010 qs_ot_env%settings%ot_method ==
"BROY" .OR. &
1011 qs_ot_env%settings%ot_method ==
"LBFG")
THEN
1012 NULLIFY (qs_ot_env%matrix_h_e)
1013 NULLIFY (qs_ot_env%matrix_h_x)
1014 NULLIFY (qs_ot_env%matrix_h_e_im)
1015 NULLIFY (qs_ot_env%matrix_h_x_im)
1017 IF (qs_ot_env%settings%ot_method ==
"LBFG") ncoef = m_diis + 1
1023 sym=dbcsr_type_no_symmetry)
1027 sym=dbcsr_type_no_symmetry)
1031 NULLIFY (qs_ot_env%rot_mat_u, qs_ot_env%rot_mat_u_im, &
1032 qs_ot_env%rot_mat_x, qs_ot_env%rot_mat_x_im, &
1033 qs_ot_env%rot_mat_h_e, qs_ot_env%rot_mat_h_x, &
1034 qs_ot_env%rot_mat_h_e_im, qs_ot_env%rot_mat_h_x_im, qs_ot_env%rot_mat_gx, &
1035 qs_ot_env%rot_mat_gx_im, qs_ot_env%rot_mat_response_gx, &
1036 qs_ot_env%rot_mat_response_gx_im, qs_ot_env%rot_mat_mermin_g0, &
1037 qs_ot_env%rot_mat_mermin_g0_im, qs_ot_env%rot_mat_gx_old, &
1038 qs_ot_env%rot_mat_gx_old_im, qs_ot_env%rot_mat_dx, qs_ot_env%rot_mat_dx_im, &
1039 qs_ot_env%rot_mat_evals, qs_ot_env%rot_mat_dedu, qs_ot_env%rot_mat_dedu_im, &
1040 qs_ot_env%rot_mat_chc, qs_ot_env%rot_mat_chc_im, &
1041 qs_ot_env%rot_mat_evec_re, qs_ot_env%rot_mat_evec_im)
1043 IF (qs_ot_env%settings%do_rotation)
THEN
1046 sym=dbcsr_type_no_symmetry)
1050 sym=dbcsr_type_no_symmetry)
1054 sym=dbcsr_type_no_symmetry)
1058 sym=dbcsr_type_no_symmetry)
1060 IF (qs_ot_env%settings%ot_method ==
"DIIS" .OR. &
1061 qs_ot_env%settings%ot_method ==
"BROY" .OR. &
1062 qs_ot_env%settings%ot_method ==
"LBFG")
THEN
1064 IF (qs_ot_env%settings%ot_method ==
"LBFG") ncoef = m_diis + 1
1070 sym=dbcsr_type_no_symmetry)
1074 sym=dbcsr_type_no_symmetry)
1078 ALLOCATE (qs_ot_env%rot_mat_evals(k))
1081 sym=dbcsr_type_no_symmetry)
1084 sym=dbcsr_type_no_symmetry)
1088 sym=dbcsr_type_no_symmetry)
1090 IF (qs_ot_env%settings%occupation_preconditioner)
THEN
1093 template=matrix_s, m=k, n=k, &
1094 sym=dbcsr_type_no_symmetry)
1097 IF (qs_ot_env%use_gx_old)
THEN
1100 sym=dbcsr_type_no_symmetry)
1103 IF (qs_ot_env%use_dx)
THEN
1106 sym=dbcsr_type_no_symmetry)
1111 IF (qs_ot_env%settings%do_ener)
THEN
1112 ncoef = my_energy_dimension
1113 ALLOCATE (qs_ot_env%ener_x(ncoef))
1114 ALLOCATE (qs_ot_env%ener_rayleigh(ncoef))
1116 IF (qs_ot_env%settings%ot_method ==
"DIIS" .OR. &
1117 qs_ot_env%settings%ot_method ==
"BROY" .OR. &
1118 qs_ot_env%settings%ot_method ==
"LBFG")
THEN
1120 IF (qs_ot_env%settings%ot_method ==
"LBFG") nhistory = m_diis + 1
1121 ALLOCATE (qs_ot_env%ener_h_e(nhistory, ncoef))
1122 ALLOCATE (qs_ot_env%ener_h_x(nhistory, ncoef))
1123 qs_ot_env%ener_h_e = 0.0_dp
1124 qs_ot_env%ener_h_x = 0.0_dp
1127 ALLOCATE (qs_ot_env%ener_gx(ncoef))
1128 IF (qs_ot_env%settings%occupation_preconditioner)
THEN
1129 ALLOCATE (qs_ot_env%ener_preconditioned_gx(ncoef))
1130 ALLOCATE (qs_ot_env%ener_response_gx(ncoef))
1133 IF (qs_ot_env%use_gx_old)
THEN
1134 ALLOCATE (qs_ot_env%ener_gx_old(ncoef))
1137 IF (qs_ot_env%use_dx)
THEN
1138 ALLOCATE (qs_ot_env%ener_dx(ncoef))
1139 qs_ot_env%ener_dx = 0.0_dp
1143 qs_ot_env%state_allocated = .true.
1156 INTEGER :: i, ncoef, nmo, nmo_ortho
1158 cpassert(qs_ot_env%state_allocated)
1159 cpassert(.NOT. qs_ot_env%has_complex_kpoint_state)
1160 cpassert(
ASSOCIATED(matrix_s))
1163 CALL dbcsr_get_info(qs_ot_env%matrix_sc0, nfullcols_total=nmo_ortho)
1167 sym=dbcsr_type_no_symmetry)
1170 sym=dbcsr_type_no_symmetry)
1173 sym=dbcsr_type_no_symmetry)
1176 sym=dbcsr_type_no_symmetry)
1179 sym=dbcsr_type_no_symmetry)
1180 IF (qs_ot_env%settings%occupation_preconditioner)
THEN
1181 CALL dbcsr_init_p(qs_ot_env%matrix_preconditioned_gx_im)
1183 template=matrix_s, n=nmo, &
1184 sym=dbcsr_type_no_symmetry)
1185 IF (qs_ot_env%use_dx)
THEN
1188 template=matrix_s, n=nmo, &
1189 sym=dbcsr_type_no_symmetry)
1192 template=matrix_s, n=nmo, &
1193 sym=dbcsr_type_no_symmetry)
1196 template=matrix_s, n=nmo, &
1197 sym=dbcsr_type_no_symmetry)
1200 template=matrix_s, n=nmo, &
1201 sym=dbcsr_type_no_symmetry)
1202 IF (qs_ot_env%settings%do_ener)
THEN
1203 cpassert(
ASSOCIATED(qs_ot_env%ener_x))
1204 ALLOCATE (qs_ot_env%ener_mermin_g0(
SIZE(qs_ot_env%ener_x)))
1208 SELECT CASE (qs_ot_env%settings%ot_algorithm)
1210 cpassert(nmo_ortho == nmo)
1211 CALL allocate_complex_copy(qs_ot_env%matrix_p_im, qs_ot_env%matrix_p,
"matrix_p_im")
1212 CALL allocate_complex_copy(qs_ot_env%matrix_r_im, qs_ot_env%matrix_r,
"matrix_r_im")
1213 CALL allocate_complex_copy(qs_ot_env%matrix_sinp_im, qs_ot_env%matrix_sinp,
"matrix_sinp_im")
1214 CALL allocate_complex_copy(qs_ot_env%matrix_cosp_im, qs_ot_env%matrix_cosp,
"matrix_cosp_im")
1215 CALL allocate_complex_copy(qs_ot_env%matrix_buf1_im, qs_ot_env%matrix_buf1,
"matrix_buf1_im")
1216 CALL allocate_complex_copy(qs_ot_env%matrix_buf2_im, qs_ot_env%matrix_buf2,
"matrix_buf2_im")
1217 CALL allocate_complex_copy(qs_ot_env%matrix_buf3_im, qs_ot_env%matrix_buf3,
"matrix_buf3_im")
1218 CALL allocate_complex_copy(qs_ot_env%matrix_buf4_im, qs_ot_env%matrix_buf4,
"matrix_buf4_im")
1219 CALL allocate_complex_copy(qs_ot_env%matrix_os_im, qs_ot_env%matrix_os,
"matrix_os_im")
1220 CALL allocate_complex_copy(qs_ot_env%matrix_buf1_ortho_im, qs_ot_env%matrix_buf1_ortho, &
1221 "matrix_buf1_ortho_im")
1222 CALL allocate_complex_copy(qs_ot_env%matrix_buf2_ortho_im, qs_ot_env%matrix_buf2_ortho, &
1223 "matrix_buf2_ortho_im")
1224 CALL allocate_complex_copy(qs_ot_env%matrix_tmp_ortho, qs_ot_env%matrix_buf1_ortho, &
1226 CALL allocate_complex_copy(qs_ot_env%matrix_buf_nk, qs_ot_env%matrix_x,
"matrix_buf_nk")
1227 CALL allocate_complex_copy(qs_ot_env%matrix_buf_nk_im, qs_ot_env%matrix_x,
"matrix_buf_nk_im")
1228 CALL allocate_complex_copy(qs_ot_env%matrix_tmp_nk, qs_ot_env%matrix_x,
"matrix_tmp_nk")
1232 sym=dbcsr_type_no_symmetry)
1235 sym=dbcsr_type_no_symmetry)
1238 sym=dbcsr_type_no_symmetry)
1240 cpabort(
"Complex K-point OT state requires ALGORITHM STRICT or IRAC")
1242 IF (qs_ot_env%use_dx)
THEN
1245 sym=dbcsr_type_no_symmetry)
1247 IF (qs_ot_env%use_gx_old)
THEN
1250 sym=dbcsr_type_no_symmetry)
1252 IF (qs_ot_env%settings%ot_method ==
"DIIS" .OR. &
1253 qs_ot_env%settings%ot_method ==
"BROY" .OR. &
1254 qs_ot_env%settings%ot_method ==
"LBFG")
THEN
1255 ncoef = qs_ot_env%settings%diis_m
1256 IF (qs_ot_env%settings%ot_method ==
"LBFG") ncoef = ncoef + 1
1262 template=matrix_s, n=nmo, &
1263 sym=dbcsr_type_no_symmetry)
1266 template=matrix_s, n=nmo, &
1267 sym=dbcsr_type_no_symmetry)
1271 IF (qs_ot_env%settings%do_rotation)
THEN
1274 sym=dbcsr_type_no_symmetry)
1277 sym=dbcsr_type_no_symmetry)
1280 sym=dbcsr_type_no_symmetry)
1283 sym=dbcsr_type_no_symmetry)
1286 sym=dbcsr_type_no_symmetry)
1287 IF (qs_ot_env%settings%occupation_preconditioner)
THEN
1290 template=matrix_s, m=nmo, n=nmo, &
1291 sym=dbcsr_type_no_symmetry)
1292 IF (qs_ot_env%use_dx)
THEN
1295 template=matrix_s, m=nmo, n=nmo, &
1296 sym=dbcsr_type_no_symmetry)
1299 template=matrix_s, m=nmo, n=nmo, &
1300 sym=dbcsr_type_no_symmetry)
1303 IF (qs_ot_env%use_dx)
THEN
1306 sym=dbcsr_type_no_symmetry)
1308 IF (qs_ot_env%use_gx_old)
THEN
1311 sym=dbcsr_type_no_symmetry)
1313 IF (qs_ot_env%settings%ot_method ==
"DIIS" .OR. &
1314 qs_ot_env%settings%ot_method ==
"BROY" .OR. &
1315 qs_ot_env%settings%ot_method ==
"LBFG")
THEN
1316 ncoef = qs_ot_env%settings%diis_m
1317 IF (qs_ot_env%settings%ot_method ==
"LBFG") ncoef = ncoef + 1
1323 template=matrix_s, m=nmo, n=nmo, &
1324 sym=dbcsr_type_no_symmetry)
1327 template=matrix_s, m=nmo, n=nmo, &
1328 sym=dbcsr_type_no_symmetry)
1333 qs_ot_env%has_complex_kpoint_state = .true.
1343 SUBROUTINE allocate_complex_copy(matrix, template, name)
1344 TYPE(
dbcsr_type),
POINTER :: matrix, template
1345 CHARACTER(LEN=*),
INTENT(IN) :: name
1350 END SUBROUTINE allocate_complex_copy
1361 INTEGER :: physical_spin
1363 IF (.NOT. qs_ot_env%state_allocated)
RETURN
1368 IF (
ASSOCIATED(qs_ot_env%evals))
DEALLOCATE (qs_ot_env%evals)
1369 IF (
ASSOCIATED(qs_ot_env%dum))
DEALLOCATE (qs_ot_env%dum)
1371 IF (
ASSOCIATED(qs_ot_env%matrix_os))
CALL dbcsr_release_p(qs_ot_env%matrix_os)
1372 IF (
ASSOCIATED(qs_ot_env%matrix_os_im))
CALL dbcsr_release_p(qs_ot_env%matrix_os_im)
1373 IF (
ASSOCIATED(qs_ot_env%matrix_p))
CALL dbcsr_release_p(qs_ot_env%matrix_p)
1374 IF (
ASSOCIATED(qs_ot_env%matrix_p_im))
CALL dbcsr_release_p(qs_ot_env%matrix_p_im)
1375 IF (
ASSOCIATED(qs_ot_env%matrix_cosp))
CALL dbcsr_release_p(qs_ot_env%matrix_cosp)
1376 IF (
ASSOCIATED(qs_ot_env%matrix_cosp_im))
CALL dbcsr_release_p(qs_ot_env%matrix_cosp_im)
1377 IF (
ASSOCIATED(qs_ot_env%matrix_sinp))
CALL dbcsr_release_p(qs_ot_env%matrix_sinp)
1378 IF (
ASSOCIATED(qs_ot_env%matrix_sinp_im))
CALL dbcsr_release_p(qs_ot_env%matrix_sinp_im)
1379 IF (
ASSOCIATED(qs_ot_env%matrix_r))
CALL dbcsr_release_p(qs_ot_env%matrix_r)
1380 IF (
ASSOCIATED(qs_ot_env%matrix_r_im))
CALL dbcsr_release_p(qs_ot_env%matrix_r_im)
1381 IF (
ASSOCIATED(qs_ot_env%matrix_cosp_b))
CALL dbcsr_release_p(qs_ot_env%matrix_cosp_b)
1382 IF (
ASSOCIATED(qs_ot_env%matrix_sinp_b))
CALL dbcsr_release_p(qs_ot_env%matrix_sinp_b)
1383 IF (
ASSOCIATED(qs_ot_env%matrix_buf1))
CALL dbcsr_release_p(qs_ot_env%matrix_buf1)
1384 IF (
ASSOCIATED(qs_ot_env%matrix_buf1_im))
CALL dbcsr_release_p(qs_ot_env%matrix_buf1_im)
1385 IF (
ASSOCIATED(qs_ot_env%matrix_buf2))
CALL dbcsr_release_p(qs_ot_env%matrix_buf2)
1386 IF (
ASSOCIATED(qs_ot_env%matrix_buf2_im))
CALL dbcsr_release_p(qs_ot_env%matrix_buf2_im)
1387 IF (
ASSOCIATED(qs_ot_env%matrix_buf3))
CALL dbcsr_release_p(qs_ot_env%matrix_buf3)
1388 IF (
ASSOCIATED(qs_ot_env%matrix_buf3_im))
CALL dbcsr_release_p(qs_ot_env%matrix_buf3_im)
1389 IF (
ASSOCIATED(qs_ot_env%matrix_buf4))
CALL dbcsr_release_p(qs_ot_env%matrix_buf4)
1390 IF (
ASSOCIATED(qs_ot_env%matrix_buf4_im))
CALL dbcsr_release_p(qs_ot_env%matrix_buf4_im)
1391 IF (
ASSOCIATED(qs_ot_env%matrix_buf1_ortho))
CALL dbcsr_release_p(qs_ot_env%matrix_buf1_ortho)
1392 IF (
ASSOCIATED(qs_ot_env%matrix_buf1_ortho_im))
CALL dbcsr_release_p(qs_ot_env%matrix_buf1_ortho_im)
1393 IF (
ASSOCIATED(qs_ot_env%matrix_buf2_ortho))
CALL dbcsr_release_p(qs_ot_env%matrix_buf2_ortho)
1394 IF (
ASSOCIATED(qs_ot_env%matrix_buf2_ortho_im))
CALL dbcsr_release_p(qs_ot_env%matrix_buf2_ortho_im)
1395 IF (
ASSOCIATED(qs_ot_env%matrix_tmp_ortho))
CALL dbcsr_release_p(qs_ot_env%matrix_tmp_ortho)
1396 IF (
ASSOCIATED(qs_ot_env%matrix_buf_nk))
CALL dbcsr_release_p(qs_ot_env%matrix_buf_nk)
1397 IF (
ASSOCIATED(qs_ot_env%matrix_buf_nk_im))
CALL dbcsr_release_p(qs_ot_env%matrix_buf_nk_im)
1398 IF (
ASSOCIATED(qs_ot_env%matrix_tmp_nk))
CALL dbcsr_release_p(qs_ot_env%matrix_tmp_nk)
1399 IF (
ASSOCIATED(qs_ot_env%matrix_c0))
CALL dbcsr_release_p(qs_ot_env%matrix_c0)
1400 IF (
ASSOCIATED(qs_ot_env%matrix_sc0))
CALL dbcsr_release_p(qs_ot_env%matrix_sc0)
1401 IF (
ASSOCIATED(qs_ot_env%matrix_psc0))
CALL dbcsr_release_p(qs_ot_env%matrix_psc0)
1402 IF (
ASSOCIATED(qs_ot_env%matrix_psc0_im))
CALL dbcsr_release_p(qs_ot_env%matrix_psc0_im)
1403 IF (
ASSOCIATED(qs_ot_env%matrix_c0_im))
CALL dbcsr_release_p(qs_ot_env%matrix_c0_im)
1404 IF (
ASSOCIATED(qs_ot_env%matrix_sc0_im))
CALL dbcsr_release_p(qs_ot_env%matrix_sc0_im)
1405 IF (
ASSOCIATED(qs_ot_env%matrix_x))
CALL dbcsr_release_p(qs_ot_env%matrix_x)
1406 IF (
ASSOCIATED(qs_ot_env%matrix_sx))
CALL dbcsr_release_p(qs_ot_env%matrix_sx)
1407 IF (
ASSOCIATED(qs_ot_env%matrix_x_im))
CALL dbcsr_release_p(qs_ot_env%matrix_x_im)
1408 IF (
ASSOCIATED(qs_ot_env%matrix_sx_im))
CALL dbcsr_release_p(qs_ot_env%matrix_sx_im)
1409 IF (
ASSOCIATED(qs_ot_env%matrix_gx))
CALL dbcsr_release_p(qs_ot_env%matrix_gx)
1410 IF (
ASSOCIATED(qs_ot_env%matrix_gx_im))
CALL dbcsr_release_p(qs_ot_env%matrix_gx_im)
1411 IF (
ASSOCIATED(qs_ot_env%matrix_preconditioned_gx))
THEN
1414 IF (
ASSOCIATED(qs_ot_env%matrix_preconditioned_gx_im))
THEN
1417 IF (
ASSOCIATED(qs_ot_env%matrix_response_gx))
CALL dbcsr_release_p(qs_ot_env%matrix_response_gx)
1418 IF (
ASSOCIATED(qs_ot_env%matrix_response_gx_im))
THEN
1421 IF (
ASSOCIATED(qs_ot_env%matrix_mermin_g0))
CALL dbcsr_release_p(qs_ot_env%matrix_mermin_g0)
1422 IF (
ASSOCIATED(qs_ot_env%matrix_mermin_g0_im))
THEN
1425 IF (
ASSOCIATED(qs_ot_env%matrix_ref_inv_sqrt))
CALL dbcsr_release_p(qs_ot_env%matrix_ref_inv_sqrt)
1426 IF (
ASSOCIATED(qs_ot_env%matrix_ref_inv_sqrt_im))
CALL dbcsr_release_p(qs_ot_env%matrix_ref_inv_sqrt_im)
1427 DO physical_spin = 1,
SIZE(qs_ot_env%mermin_physical)
1428 IF (
ASSOCIATED(qs_ot_env%mermin_physical(physical_spin)%c0))
THEN
1429 CALL cp_fm_release(qs_ot_env%mermin_physical(physical_spin)%c0)
1430 DEALLOCATE (qs_ot_env%mermin_physical(physical_spin)%c0)
1432 IF (
ASSOCIATED(qs_ot_env%mermin_physical(physical_spin)%c0_im))
THEN
1433 CALL cp_fm_release(qs_ot_env%mermin_physical(physical_spin)%c0_im)
1434 DEALLOCATE (qs_ot_env%mermin_physical(physical_spin)%c0_im)
1436 IF (
ASSOCIATED(qs_ot_env%mermin_physical(physical_spin)%h0))
THEN
1437 CALL cp_fm_release(qs_ot_env%mermin_physical(physical_spin)%h0)
1438 DEALLOCATE (qs_ot_env%mermin_physical(physical_spin)%h0)
1440 IF (
ASSOCIATED(qs_ot_env%mermin_physical(physical_spin)%h0_im))
THEN
1441 CALL cp_fm_release(qs_ot_env%mermin_physical(physical_spin)%h0_im)
1442 DEALLOCATE (qs_ot_env%mermin_physical(physical_spin)%h0_im)
1444 IF (
ASSOCIATED(qs_ot_env%mermin_physical(physical_spin)%c_previous))
THEN
1445 CALL cp_fm_release(qs_ot_env%mermin_physical(physical_spin)%c_previous)
1446 DEALLOCATE (qs_ot_env%mermin_physical(physical_spin)%c_previous)
1448 IF (
ASSOCIATED(qs_ot_env%mermin_physical(physical_spin)%c_previous_im))
THEN
1449 CALL cp_fm_release(qs_ot_env%mermin_physical(physical_spin)%c_previous_im)
1450 DEALLOCATE (qs_ot_env%mermin_physical(physical_spin)%c_previous_im)
1452 IF (
ASSOCIATED(qs_ot_env%mermin_physical(physical_spin)%y_previous))
THEN
1453 CALL cp_fm_release(qs_ot_env%mermin_physical(physical_spin)%y_previous)
1454 DEALLOCATE (qs_ot_env%mermin_physical(physical_spin)%y_previous)
1456 IF (
ASSOCIATED(qs_ot_env%mermin_physical(physical_spin)%y_previous_im))
THEN
1457 CALL cp_fm_release(qs_ot_env%mermin_physical(physical_spin)%y_previous_im)
1458 DEALLOCATE (qs_ot_env%mermin_physical(physical_spin)%y_previous_im)
1460 IF (
ALLOCATED(qs_ot_env%mermin_physical(physical_spin)%occupation0))
THEN
1461 DEALLOCATE (qs_ot_env%mermin_physical(physical_spin)%occupation0)
1463 IF (
ALLOCATED(qs_ot_env%mermin_physical(physical_spin)%occupation_previous))
THEN
1464 DEALLOCATE (qs_ot_env%mermin_physical(physical_spin)%occupation_previous)
1466 qs_ot_env%mermin_physical(physical_spin)%reference_valid = .false.
1467 qs_ot_env%mermin_physical(physical_spin)%secant_valid = .false.
1469 IF (
ALLOCATED(qs_ot_env%ener_mermin_g0))
DEALLOCATE (qs_ot_env%ener_mermin_g0)
1470 qs_ot_env%mermin_gradient_ref_valid = .false.
1471 IF (
ASSOCIATED(qs_ot_env%matrix_dx))
CALL dbcsr_release_p(qs_ot_env%matrix_dx)
1472 IF (
ASSOCIATED(qs_ot_env%matrix_dx_im))
CALL dbcsr_release_p(qs_ot_env%matrix_dx_im)
1473 IF (
ASSOCIATED(qs_ot_env%matrix_gx_old))
CALL dbcsr_release_p(qs_ot_env%matrix_gx_old)
1474 IF (
ASSOCIATED(qs_ot_env%matrix_gx_old_im))
CALL dbcsr_release_p(qs_ot_env%matrix_gx_old_im)
1475 IF (
ASSOCIATED(qs_ot_env%buf1_k_k_nosym))
CALL dbcsr_release_p(qs_ot_env%buf1_k_k_nosym)
1476 IF (
ASSOCIATED(qs_ot_env%buf2_k_k_nosym))
CALL dbcsr_release_p(qs_ot_env%buf2_k_k_nosym)
1477 IF (
ASSOCIATED(qs_ot_env%buf3_k_k_nosym))
CALL dbcsr_release_p(qs_ot_env%buf3_k_k_nosym)
1478 IF (
ASSOCIATED(qs_ot_env%buf4_k_k_nosym))
CALL dbcsr_release_p(qs_ot_env%buf4_k_k_nosym)
1479 IF (
ASSOCIATED(qs_ot_env%p_k_k_sym))
CALL dbcsr_release_p(qs_ot_env%p_k_k_sym)
1480 IF (
ASSOCIATED(qs_ot_env%buf1_k_k_sym))
CALL dbcsr_release_p(qs_ot_env%buf1_k_k_sym)
1481 IF (
ASSOCIATED(qs_ot_env%buf2_k_k_sym))
CALL dbcsr_release_p(qs_ot_env%buf2_k_k_sym)
1482 IF (
ASSOCIATED(qs_ot_env%buf3_k_k_sym))
CALL dbcsr_release_p(qs_ot_env%buf3_k_k_sym)
1483 IF (
ASSOCIATED(qs_ot_env%buf4_k_k_sym))
CALL dbcsr_release_p(qs_ot_env%buf4_k_k_sym)
1484 IF (
ASSOCIATED(qs_ot_env%buf1_n_k))
CALL dbcsr_release_p(qs_ot_env%buf1_n_k)
1485 IF (
ASSOCIATED(qs_ot_env%buf1_n_k_dp))
CALL dbcsr_release_p(qs_ot_env%buf1_n_k_dp)
1487 IF (qs_ot_env%settings%ot_method ==
"DIIS" .OR. &
1488 qs_ot_env%settings%ot_method ==
"BROY" .OR. &
1489 qs_ot_env%settings%ot_method ==
"LBFG")
THEN
1492 IF (
ASSOCIATED(qs_ot_env%matrix_h_x_im))
THEN
1495 IF (
ASSOCIATED(qs_ot_env%matrix_h_e_im))
THEN
1499 IF (qs_ot_env%settings%ot_method ==
"DIIS" .OR. &
1500 qs_ot_env%settings%ot_method ==
"BROY")
THEN
1501 DEALLOCATE (qs_ot_env%ls_diis)
1502 DEALLOCATE (qs_ot_env%lss_diis)
1503 DEALLOCATE (qs_ot_env%c_diis)
1504 DEALLOCATE (qs_ot_env%c_broy)
1505 DEALLOCATE (qs_ot_env%energy_h)
1506 DEALLOCATE (qs_ot_env%ipivot)
1508 IF (qs_ot_env%settings%ot_method ==
"LBFG")
THEN
1509 DEALLOCATE (qs_ot_env%lbfgs_rho, qs_ot_env%lbfgs_yy, &
1510 qs_ot_env%lbfgs_sy_rotation, qs_ot_env%lbfgs_yy_rotation)
1513 IF (qs_ot_env%settings%do_rotation)
THEN
1515 IF (
ASSOCIATED(qs_ot_env%rot_mat_u))
CALL dbcsr_release_p(qs_ot_env%rot_mat_u)
1516 IF (
ASSOCIATED(qs_ot_env%rot_mat_u_im))
CALL dbcsr_release_p(qs_ot_env%rot_mat_u_im)
1517 IF (
ASSOCIATED(qs_ot_env%rot_mat_x))
CALL dbcsr_release_p(qs_ot_env%rot_mat_x)
1518 IF (
ASSOCIATED(qs_ot_env%rot_mat_x_im))
CALL dbcsr_release_p(qs_ot_env%rot_mat_x_im)
1519 IF (
ASSOCIATED(qs_ot_env%rot_mat_dedu))
CALL dbcsr_release_p(qs_ot_env%rot_mat_dedu)
1520 IF (
ASSOCIATED(qs_ot_env%rot_mat_dedu_im))
CALL dbcsr_release_p(qs_ot_env%rot_mat_dedu_im)
1521 IF (
ASSOCIATED(qs_ot_env%rot_mat_chc))
CALL dbcsr_release_p(qs_ot_env%rot_mat_chc)
1522 IF (
ASSOCIATED(qs_ot_env%rot_mat_chc_im))
CALL dbcsr_release_p(qs_ot_env%rot_mat_chc_im)
1524 IF (qs_ot_env%settings%ot_method ==
"DIIS" .OR. &
1525 qs_ot_env%settings%ot_method ==
"BROY" .OR. &
1526 qs_ot_env%settings%ot_method ==
"LBFG")
THEN
1529 IF (
ASSOCIATED(qs_ot_env%rot_mat_h_x_im))
THEN
1532 IF (
ASSOCIATED(qs_ot_env%rot_mat_h_e_im))
THEN
1537 IF (
ASSOCIATED(qs_ot_env%rot_mat_evals))
DEALLOCATE (qs_ot_env%rot_mat_evals)
1538 IF (
ASSOCIATED(qs_ot_env%rot_mat_evec_re))
CALL dbcsr_release_p(qs_ot_env%rot_mat_evec_re)
1539 IF (
ASSOCIATED(qs_ot_env%rot_mat_evec_im))
CALL dbcsr_release_p(qs_ot_env%rot_mat_evec_im)
1540 IF (
ASSOCIATED(qs_ot_env%rot_mat_gx))
CALL dbcsr_release_p(qs_ot_env%rot_mat_gx)
1541 IF (
ASSOCIATED(qs_ot_env%rot_mat_gx_im))
CALL dbcsr_release_p(qs_ot_env%rot_mat_gx_im)
1542 IF (
ASSOCIATED(qs_ot_env%rot_mat_response_gx))
THEN
1545 IF (
ASSOCIATED(qs_ot_env%rot_mat_response_gx_im))
THEN
1548 IF (
ASSOCIATED(qs_ot_env%rot_mat_mermin_g0))
THEN
1551 IF (
ASSOCIATED(qs_ot_env%rot_mat_mermin_g0_im))
THEN
1554 IF (
ASSOCIATED(qs_ot_env%rot_mat_gx_old))
CALL dbcsr_release_p(qs_ot_env%rot_mat_gx_old)
1555 IF (
ASSOCIATED(qs_ot_env%rot_mat_gx_old_im))
CALL dbcsr_release_p(qs_ot_env%rot_mat_gx_old_im)
1556 IF (
ASSOCIATED(qs_ot_env%rot_mat_dx))
CALL dbcsr_release_p(qs_ot_env%rot_mat_dx)
1557 IF (
ASSOCIATED(qs_ot_env%rot_mat_dx_im))
CALL dbcsr_release_p(qs_ot_env%rot_mat_dx_im)
1560 IF (qs_ot_env%settings%do_ener)
THEN
1561 IF (
ASSOCIATED(qs_ot_env%ener_x))
DEALLOCATE (qs_ot_env%ener_x)
1562 IF (
ASSOCIATED(qs_ot_env%ener_rayleigh))
DEALLOCATE (qs_ot_env%ener_rayleigh)
1563 IF (
ASSOCIATED(qs_ot_env%ener_gx))
DEALLOCATE (qs_ot_env%ener_gx)
1564 IF (
ASSOCIATED(qs_ot_env%ener_preconditioned_gx))
THEN
1565 DEALLOCATE (qs_ot_env%ener_preconditioned_gx)
1567 IF (
ASSOCIATED(qs_ot_env%ener_response_gx))
DEALLOCATE (qs_ot_env%ener_response_gx)
1568 IF (qs_ot_env%settings%ot_method ==
"DIIS" .OR. &
1569 qs_ot_env%settings%ot_method ==
"BROY" .OR. &
1570 qs_ot_env%settings%ot_method ==
"LBFG")
THEN
1571 IF (
ASSOCIATED(qs_ot_env%ener_h_x))
DEALLOCATE (qs_ot_env%ener_h_x)
1572 IF (
ASSOCIATED(qs_ot_env%ener_h_e))
DEALLOCATE (qs_ot_env%ener_h_e)
1574 IF (qs_ot_env%use_dx)
THEN
1575 IF (
ASSOCIATED(qs_ot_env%ener_dx))
DEALLOCATE (qs_ot_env%ener_dx)
1577 IF (qs_ot_env%use_gx_old)
THEN
1578 IF (
ASSOCIATED(qs_ot_env%ener_gx_old))
DEALLOCATE (qs_ot_env%ener_gx_old)
1582 qs_ot_env%state_allocated = .false.
1583 qs_ot_env%has_complex_kpoint_state = .false.
1598 INTEGER,
INTENT(IN) :: output_unit
1599 LOGICAL,
INTENT(IN),
OPTIONAL :: complex_kpoints, eigensolver
1601 CHARACTER(len=*),
PARAMETER :: routinen =
'ot_readwrite_input'
1603 INTEGER :: handle, ls_method, ot_algorithm, &
1604 ot_method, ot_ortho_irac
1605 LOGICAL :: energy_gap_explicit, &
1606 lattice_fft_explicit, &
1607 low_rank_base_explicit, &
1608 use_complex_kpoints, use_eigensolver
1610 CALL timeset(routinen, handle)
1612 use_complex_kpoints = .false.
1613 IF (
PRESENT(complex_kpoints)) use_complex_kpoints = complex_kpoints
1614 use_eigensolver = .false.
1615 IF (
PRESENT(eigensolver)) use_eigensolver = eigensolver
1619 SELECT CASE (ot_algorithm)
1621 settings%ot_algorithm =
"TOD"
1624 settings%ot_algorithm =
"REF"
1626 cpabort(
"Value unknown")
1631 IF (settings%irac_degree < 2 .OR. settings%irac_degree > 4)
THEN
1632 cpabort(
"READ OT IRAC_DEGREE: Value unknown")
1635 IF (settings%max_irac < 1)
THEN
1636 cpabort(
"READ OT MAX_IRAC: VALUE MUST BE GREATER THAN ZERO")
1638 CALL section_vals_val_get(ot_section,
"EPS_IRAC_FILTER_MATRIX", r_val=settings%eps_irac_filter_matrix)
1640 IF (settings%eps_irac < 0.0_dp)
THEN
1641 cpabort(
"READ OT EPS_IRAC: VALUE MUST BE GREATER THAN ZERO")
1643 CALL section_vals_val_get(ot_section,
"EPS_IRAC_QUICK_EXIT", r_val=settings%eps_irac_quick_exit)
1644 IF (settings%eps_irac_quick_exit < 0.0_dp)
THEN
1645 cpabort(
"READ OT EPS_IRAC_QUICK_EXIT: VALUE MUST BE GREATER THAN ZERO")
1649 IF (settings%eps_irac_switch < 0.0_dp)
THEN
1650 cpabort(
"READ OT EPS_IRAC_SWITCH: VALUE MUST BE GREATER THAN ZERO")
1654 SELECT CASE (ot_ortho_irac)
1656 settings%ortho_irac =
"CHOL"
1658 settings%ortho_irac =
"POLY"
1660 settings%ortho_irac =
"LWDN"
1662 cpabort(
"READ OT ORTHO_IRAC: Value unknown")
1669 IF (settings%ot_state == 1)
THEN
1673 SELECT CASE (ot_method)
1675 settings%ot_method =
"SD"
1677 settings%ot_method =
"CG"
1679 settings%ot_method =
"DIIS"
1688 CALL section_vals_val_get(ot_section,
"BROYDEN_SIGMA_DECREASE", r_val=settings%broyden_sigma_decrease)
1690 CALL section_vals_val_get(ot_section,
"BROYDEN_FORGET_HISTORY", l_val=settings%broyden_forget_history)
1691 CALL section_vals_val_get(ot_section,
"BROYDEN_ADAPTIVE_SIGMA", l_val=settings%broyden_adaptive_sigma)
1692 CALL section_vals_val_get(ot_section,
"BROYDEN_ENABLE_FLIP", l_val=settings%broyden_enable_flip)
1693 settings%ot_method =
"BROY"
1697 r_val=settings%lbfgs_curvature_tol)
1699 l_val=settings%lbfgs_damping)
1700 IF (settings%lbfgs_curvature_tol < 0.0_dp .OR. &
1701 settings%lbfgs_curvature_tol >= 1.0_dp)
THEN
1702 cpabort(
"READ OT LBFGS_CURVATURE_TOL: Value must be in [0, 1)")
1704 settings%ot_method =
"LBFG"
1706 cpabort(
"READ OTSCF MINIMIZER: Value unknown")
1710 SELECT CASE (ls_method)
1712 settings%line_search_method =
"NONE"
1714 settings%line_search_method =
"2PNT"
1716 settings%line_search_method =
"3PNT"
1718 settings%line_search_method =
"ADPT"
1720 settings%line_search_method =
"GOLD"
1723 cpabort(
"READ OTSCF LS: Value unknown")
1727 SELECT CASE (settings%precond_solver_type)
1729 settings%precond_solver_name =
"DEFAULT"
1731 settings%precond_solver_name =
"INVERSE_CHOLESKY"
1733 settings%precond_solver_name =
"DIRECT"
1735 settings%precond_solver_name =
"INVERSE_UPDATE"
1737 settings%precond_solver_name =
"CHEBYSHEV"
1739 cpabort(
"READ OTSCF SOLVER: Value unknown")
1742 IF (settings%chebyshev_degree < 1 .OR. settings%chebyshev_degree > 100)
THEN
1743 cpabort(
"READ OT CHEBYSHEV_DEGREE: Value must be between 1 and 100")
1746 i_val=settings%fermi_low_rank_max_rank)
1747 IF (settings%fermi_low_rank_max_rank == 0 .OR. &
1748 settings%fermi_low_rank_max_rank < -1)
THEN
1749 cpabort(
"READ OT FERMI_LOW_RANK_MAX_RANK: Value must be -1 or a positive integer")
1757 explicit=energy_gap_explicit)
1760 SELECT CASE (settings%preconditioner_type)
1762 settings%preconditioner_name =
"NONE"
1763 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.15_dp
1764 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.2_dp
1766 settings%preconditioner_name =
"FULL_SINGLE"
1767 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.15_dp
1768 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.2_dp
1770 settings%preconditioner_name =
"FULL_SINGLE_INVERSE"
1771 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.08_dp
1772 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.08_dp
1774 settings%preconditioner_name =
"FULL_ALL"
1775 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.15_dp
1776 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.08_dp
1778 settings%preconditioner_name =
"FERMI_LOW_RANK"
1779 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.12_dp
1780 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.08_dp
1782 settings%preconditioner_name =
"FULL_ALL_COVARIANT"
1783 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.15_dp
1784 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.08_dp
1786 settings%preconditioner_name =
"FULL_KINETIC"
1787 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.15_dp
1788 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.2_dp
1790 settings%preconditioner_name =
"FULL_S_INVERSE"
1791 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.15_dp
1792 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.2_dp
1794 cpabort(
"READ OTSCF PRECONDITIONER: Value unknown")
1796 IF (use_complex_kpoints .AND. &
1798 .NOT. energy_gap_explicit) settings%energy_gap = 0.20_dp
1800 i_val=settings%low_rank_base, explicit=low_rank_base_explicit)
1801 SELECT CASE (settings%low_rank_base)
1803 settings%low_rank_base_name =
"OVERLAP_INVERSE"
1805 settings%low_rank_base_name =
"LATTICE_FFT"
1807 cpabort(
"READ OT FERMI_LOW_RANK_BASE: Value unknown")
1810 i_val=settings%lattice_fft, explicit=lattice_fft_explicit)
1811 SELECT CASE (settings%lattice_fft)
1813 settings%lattice_fft_name =
"OFF"
1815 settings%lattice_fft_name =
"ON"
1817 settings%lattice_fft_name =
"AUTO"
1819 cpabort(
"READ OT LATTICE_FFT: Value unknown")
1822 i_val=settings%lattice_fft_local_cells)
1823 IF (settings%lattice_fft_local_cells < 0)
THEN
1824 cpabort(
"READ OT LATTICE_FFT_LOCAL_CELLS: Value must not be negative")
1828 cpabort(
"FERMI_LOW_RANK_BASE LATTICE_FFT requires PRECONDITIONER FERMI_LOW_RANK")
1831 cpabort(
"FERMI_LOW_RANK_BASE LATTICE_FFT conflicts with LATTICE_FFT OFF or AUTO")
1834 settings%lattice_fft_name =
"ON"
1835 ELSE IF (low_rank_base_explicit)
THEN
1837 cpwarn(
"FERMI_LOW_RANK_BASE is ignored unless PRECONDITIONER FERMI_LOW_RANK is selected")
1839 cpabort(
"FERMI_LOW_RANK_BASE OVERLAP_INVERSE conflicts with LATTICE_FFT ON or AUTO")
1842 IF (settings%lattice_fft_local_cells > 0 .AND. &
1844 cpabort(
"LATTICE_FFT_LOCAL_CELLS requires LATTICE_FFT ON")
1846 IF (use_complex_kpoints .AND. settings%lattice_fft_local_cells > 0)
THEN
1847 CALL cp_abort(__location__, &
1848 "LATTICE_FFT_LOCAL_CELLS is a Gamma-point supercell approximation; "// &
1849 "explicit K points already use native Bloch blocks")
1857 l_val=settings%occupation_preconditioner)
1860 r_val=settings%nondiag_energy_strength)
1861 IF (settings%ot_method ==
"LBFG")
THEN
1862 IF (settings%ot_algorithm /=
"TOD" .AND. settings%ot_algorithm /=
"REF")
THEN
1863 cpabort(
"MINIMIZER LBFGS requires ALGORITHM STRICT or IRAC")
1866 IF (settings%do_ener .AND. .NOT. use_complex_kpoints .AND. .NOT. use_eigensolver)
THEN
1867 cpabort(
"OT%ENERGIES is currently supported only by the complex K-point Mermin path.")
1869 IF (use_eigensolver .AND. &
1870 (settings%do_rotation .OR. settings%do_ener .OR. &
1871 settings%occupation_preconditioner .OR. settings%add_nondiag_energy))
THEN
1872 CALL cp_warn(__location__, &
1873 "DIAGONALIZATION%OT ignores ROTATION, ENERGIES, "// &
1874 "OCCUPATION_PRECONDITIONER, and NONDIAG_ENERGY because occupations "// &
1875 "are assigned after eigenspace minimization.")
1876 settings%do_rotation = .false.
1877 settings%do_ener = .false.
1878 settings%occupation_preconditioner = .false.
1879 settings%add_nondiag_energy = .false.
1884 IF (output_unit > 0)
THEN
1885 WRITE (output_unit,
'(/,A)')
" ----------------------------------- OT ---------------------------------------"
1886 IF (settings%do_rotation)
THEN
1887 WRITE (output_unit,
'(A)')
" Allowing for rotations "
1889 IF (settings%do_ener)
THEN
1890 WRITE (output_unit,
'(A,L2)')
" Optimizing orbital energies "
1892 SELECT CASE (settings%OT_METHOD)
1894 WRITE (output_unit,
'(A)')
" Minimizer : SD : steepest descent"
1896 WRITE (output_unit,
'(A)')
" Minimizer : CG : conjugate gradient"
1898 WRITE (output_unit,
'(A)')
" Minimizer : DIIS : direct inversion"
1899 WRITE (output_unit,
'(A)')
" in the iterative subspace"
1900 WRITE (output_unit,
'(A,I3,A)')
" using ", settings%diis_m,
" DIIS vectors"
1901 IF (settings%safer_diis)
THEN
1902 WRITE (output_unit,
'(A,I3,A)')
" safer DIIS on"
1904 WRITE (output_unit,
'(A,I3,A)')
" safer DIIS off"
1907 WRITE (output_unit,
'(A)')
" Minimizer : BROYDEN : Broyden "
1908 WRITE (output_unit,
'(A,F16.8)')
" BETA : ", settings%broyden_beta
1909 WRITE (output_unit,
'(A,F16.8)')
" GAMMA : ", settings%broyden_gamma
1910 WRITE (output_unit,
'(A,F16.8)')
" SIGMA : ", settings%broyden_sigma
1911 WRITE (output_unit,
'(A,I3,A)')
" using : - ", &
1912 settings%diis_m,
" BROYDEN vectors"
1914 WRITE (output_unit,
'(A)')
" Minimizer : LBFGS : limited-memory BFGS"
1915 WRITE (output_unit,
'(A,I3,A)')
" using : ", &
1916 settings%diis_m,
" secant pairs"
1917 WRITE (output_unit,
'(A,ES12.4)')
" curvature tolerance : ", &
1918 settings%lbfgs_curvature_tol
1919 WRITE (output_unit,
'(A,L7)')
" damp weak curvature : ", &
1920 settings%lbfgs_damping
1922 WRITE (output_unit,
'(3A)')
" Minimizer : ", settings%OT_METHOD,
" : UNKNOWN"
1924 SELECT CASE (settings%preconditioner_name)
1925 CASE (
"FULL_SINGLE")
1926 WRITE (output_unit,
'(A)')
" Preconditioner : FULL_SINGLE : diagonalization based"
1927 CASE (
"FULL_SINGLE_INVERSE")
1928 WRITE (output_unit,
'(A,/,A)')
" Preconditioner : FULL_SINGLE_INVERSE : inversion of ", &
1929 " H + eS - 2*(Sc)(c^T*H*c+const)(Sc)^T"
1931 WRITE (output_unit,
'(A)')
" Preconditioner : FULL_ALL : diagonalization, state selective"
1932 CASE (
"FERMI_LOW_RANK")
1933 WRITE (output_unit,
'(A)') &
1934 " Preconditioner : FERMI_LOW_RANK : rotationally covariant low-rank correction"
1935 CASE (
"FULL_ALL_COVARIANT")
1936 WRITE (output_unit,
'(A)') &
1937 " Preconditioner : FULL_ALL_COVARIANT : rotation-covariant Sylvester inverse"
1938 CASE (
"FULL_KINETIC")
1939 WRITE (output_unit,
'(A)')
" Preconditioner : FULL_KINETIC : inversion of T + eS"
1940 CASE (
"FULL_S_INVERSE")
1941 WRITE (output_unit,
'(A)')
" Preconditioner : FULL_S_INVERSE : cholesky inversion of S"
1942 CASE (
"SPARSE_DIAG")
1943 WRITE (output_unit,
'(A)') &
1944 " Preconditioner : SPARSE_DIAG : diagonal atomic block diagonalization"
1945 CASE (
"SPARSE_KINETIC")
1946 WRITE (output_unit,
'(A)')
" Preconditioner : SPARSE_KINETIC : sparse linear solver for T + eS"
1948 WRITE (output_unit,
'(A)')
" Preconditioner : NONE"
1950 WRITE (output_unit,
'(3A)')
" Preconditioner : ", settings%preconditioner_name,
" : UNKNOWN"
1955 WRITE (output_unit,
'(A)')
" Low-rank base : native K-point inverse of S(k)"
1957 WRITE (output_unit,
'(A)')
" Low-rank base : LATTICE_FFT (AUTO)"
1959 WRITE (output_unit,
'(A)')
" Low-rank base : LATTICE_FFT"
1961 WRITE (output_unit,
'(A,A)')
" Low-rank base : ", trim(settings%low_rank_base_name)
1965 WRITE (output_unit,
'(A)')
" Lattice FFT : native Bloch blocks (no additional FFT)"
1967 WRITE (output_unit,
'(A,A)')
" Lattice FFT : ", trim(settings%lattice_fft_name)
1969 IF (settings%lattice_fft_local_cells > 0)
THEN
1970 WRITE (output_unit,
'(A,I0)')
" Local FFT cells: ", settings%lattice_fft_local_cells
1973 WRITE (output_unit,
'(A)')
" Precond_solver : "//trim(settings%precond_solver_name)
1975 WRITE (output_unit,
'(A,I14)')
" Chebyshev degree:", settings%chebyshev_degree
1978 WRITE (output_unit,
'(A,I14)')
" Low-rank cap :", settings%fermi_low_rank_max_rank
1981 IF (settings%OT_METHOD ==
"SD" .OR. settings%OT_METHOD ==
"CG" .OR. &
1982 settings%OT_METHOD ==
"LBFG")
THEN
1983 SELECT CASE (settings%line_search_method)
1985 WRITE (output_unit,
'(A)')
" Line search : 2PNT : 2 energies, one gradient"
1987 WRITE (output_unit,
'(A)')
" Line search : 3PNT : 3 energies"
1989 WRITE (output_unit,
'(A)')
" Line search : GOLD : bracketing and golden section search"
1990 WRITE (output_unit,
'(A,F14.8)')
" target rel accuracy : ", settings%gold_target
1992 WRITE (output_unit,
'(A)')
" Line search : NONE"
1994 WRITE (output_unit,
'(3A)')
" Line search : ", settings%line_search_method,
" : UNKNOWN"
1997 WRITE (output_unit,
'(A,F14.8,T49,A,F14.8)')
" stepsize :", settings%ds_min, &
1998 " energy_gap :", settings%energy_gap
1999 IF (settings%ot_algorithm ==
'TOD')
THEN
2000 WRITE (output_unit,
'(A,E14.5,T49,A,I14)')
" eps_taylor :", settings%eps_taylor, &
2001 " max_taylor :", settings%max_taylor
2003 IF (settings%ot_algorithm ==
'REF')
THEN
2004 WRITE (output_unit,
'(A,1X,A,T49,A,I14)')
" ortho_irac :", settings%ortho_irac, &
2005 " irac_degree :", settings%irac_degree
2006 WRITE (output_unit,
'(A,I14,T49,A,E14.5)')
" max_irac :", settings%max_irac, &
2007 " eps_irac :", settings%eps_irac
2008 WRITE (output_unit,
'(A,E14.5,T49,A,E10.3)')
" eps_irac_switch:", settings%eps_irac_switch, &
2009 " eps_irac_quick_exit:", settings%eps_irac_quick_exit
2010 WRITE (output_unit,
'(A,L2)')
" on_the_fly_loc :", settings%on_the_fly_loc
2012 WRITE (output_unit,
'(A)')
" ----------------------------------- OT ---------------------------------------"
2013 WRITE (unit=output_unit, &
2014 fmt=
"(/,T3,A,T12,A,T31,A,T39,A,T59,A,T75,A,/,T3,A)") &
2015 "Step",
"Update method",
"Time",
"Convergence",
"Total energy",
"Change", &
2019 CALL timestop(handle)