! --- subroutine rh_tcscf_simple() implicit none integer :: i, j, it, dim_DIIS double precision :: t0, t1 double precision :: e_save, e_delta, rho_delta double precision :: etc_tot, etc_1e, etc_2e, etc_3e, tc_grad double precision :: er_DIIS double precision, allocatable :: rho_old(:,:), rho_new(:,:) allocate(rho_old(ao_num,ao_num), rho_new(ao_num,ao_num)) it = 0 e_save = 0.d0 dim_DIIS = 0 ! --- if(.not. bi_ortho) then print *, ' grad_hermit = ', grad_hermit call save_good_hermit_tc_eigvectors TOUCH mo_coef call save_mos endif ! --- if(bi_ortho) then PROVIDE level_shift_tcscf PROVIDE mo_l_coef mo_r_coef write(6, '(A4,1X, A16,1X, A16,1X, A16,1X, A16,1X, A16,1X, A16,1X, A16,1X, A16,1X, A4, 1X, A8)') & '====', '================', '================', '================', '================', '================' & , '================', '================', '================', '====', '========' write(6, '(A4,1X, A16,1X, A16,1X, A16,1X, A16,1X, A16,1X, A16,1X, A16,1X, A16,1X, A4, 1X, A8)') & ' it ', ' SCF TC Energy ', ' E(1e) ', ' E(2e) ', ' E(3e) ', ' energy diff ' & , ' gradient ', ' DIIS error ', ' level shift ', 'DIIS', ' WT (m)' write(6, '(A4,1X, A16,1X, A16,1X, A16,1X, A16,1X, A16,1X, A16,1X, A16,1X, A16,1X, A4, 1X, A8)') & '====', '================', '================', '================', '================', '================' & , '================', '================', '================', '====', '========' ! first iteration (HF orbitals) call wall_time(t0) etc_tot = TC_HF_energy etc_1e = TC_HF_one_e_energy etc_2e = TC_HF_two_e_energy etc_3e = 0.d0 if(three_body_h_tc) then etc_3e = diag_three_elem_hf endif tc_grad = grad_non_hermit er_DIIS = maxval(abs(FQS_SQF_mo)) e_delta = dabs(etc_tot - e_save) e_save = etc_tot call wall_time(t1) write(6, '(I4,1X, F16.10,1X, F16.10,1X, F16.10,1X, F16.10,1X, F16.10,1X, F16.10,1X, F16.10,1X, F16.10,1X, I4,1X, F8.2)') & it, etc_tot, etc_1e, etc_2e, etc_3e, e_delta, tc_grad, er_DIIS, level_shift_tcscf, dim_DIIS, (t1-t0)/60.d0 do while(tc_grad .gt. dsqrt(thresh_tcscf)) call wall_time(t0) it += 1 if(it > n_it_tcscf_max) then print *, ' max of TCSCF iterations is reached ', n_it_TCSCF_max stop endif mo_l_coef = fock_tc_leigvec_ao mo_r_coef = fock_tc_reigvec_ao call ezfio_set_bi_ortho_mos_mo_l_coef(mo_l_coef) call ezfio_set_bi_ortho_mos_mo_r_coef(mo_r_coef) TOUCH mo_l_coef mo_r_coef etc_tot = TC_HF_energy etc_1e = TC_HF_one_e_energy etc_2e = TC_HF_two_e_energy etc_3e = 0.d0 if(three_body_h_tc) then etc_3e = diag_three_elem_hf endif tc_grad = grad_non_hermit er_DIIS = maxval(abs(FQS_SQF_mo)) e_delta = dabs(etc_tot - e_save) e_save = etc_tot call ezfio_set_tc_scf_bitc_energy(etc_tot) call wall_time(t1) write(6, '(I4,1X, F16.10,1X, F16.10,1X, F16.10,1X, F16.10,1X, F16.10,1X, F16.10,1X, F16.10,1X, F16.10,1X, I4,1X, F8.2)') & it, etc_tot, etc_1e, etc_2e, etc_3e, e_delta, tc_grad, er_DIIS, level_shift_tcscf, dim_DIIS, (t1-t0)/60.d0 enddo else do while( (grad_hermit.gt.dsqrt(thresh_tcscf)) .and. (it.lt.n_it_tcscf_max) ) print*,'grad_hermit = ',grad_hermit it += 1 print *, 'iteration = ', it print *, '***' print *, 'TC HF total energy = ', TC_HF_energy print *, 'TC HF 1 e energy = ', TC_HF_one_e_energy print *, 'TC HF 2 e energy = ', TC_HF_two_e_energy print *, 'TC HF 3 body = ', diag_three_elem_hf print *, '***' print *, '' call save_good_hermit_tc_eigvectors TOUCH mo_coef call save_mos enddo endif print *, ' TCSCF Simple converged !' !call print_energy_and_mos(good_angles) deallocate(rho_old, rho_new) end ! ---