mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-21 11:03:29 +01:00
check TC energy after rotations
This commit is contained in:
parent
8cefe6eb44
commit
19f2ede59c
@ -93,14 +93,22 @@ subroutine routine_save_rotated_mos(thr_deg, good_angles)
|
|||||||
|
|
||||||
integer :: i, j, k, n_degen_list, m, n, n_degen, ilast, ifirst
|
integer :: i, j, k, n_degen_list, m, n, n_degen, ilast, ifirst
|
||||||
double precision :: max_angle, norm
|
double precision :: max_angle, norm
|
||||||
|
double precision :: E_old, E_new, E_thr
|
||||||
integer, allocatable :: list_degen(:,:)
|
integer, allocatable :: list_degen(:,:)
|
||||||
double precision, allocatable :: new_angles(:)
|
double precision, allocatable :: new_angles(:)
|
||||||
|
double precision, allocatable :: mo_r_coef_old(:,:), mo_l_coef_old(:,:)
|
||||||
double precision, allocatable :: mo_r_coef_good(:,:), mo_l_coef_good(:,:)
|
double precision, allocatable :: mo_r_coef_good(:,:), mo_l_coef_good(:,:)
|
||||||
double precision, allocatable :: mo_r_coef_new(:,:)
|
double precision, allocatable :: mo_r_coef_new(:,:)
|
||||||
double precision, allocatable :: fock_diag(:),s_mat(:,:)
|
double precision, allocatable :: fock_diag(:), s_mat(:,:)
|
||||||
double precision, allocatable :: stmp(:,:), T(:,:), Snew(:,:), smat2(:,:)
|
double precision, allocatable :: stmp(:,:), T(:,:), Snew(:,:), smat2(:,:)
|
||||||
double precision, allocatable :: mo_l_coef_tmp(:,:), mo_r_coef_tmp(:,:), mo_l_coef_new(:,:)
|
double precision, allocatable :: mo_l_coef_tmp(:,:), mo_r_coef_tmp(:,:), mo_l_coef_new(:,:)
|
||||||
|
|
||||||
|
E_thr = 1d-8
|
||||||
|
E_old = TC_HF_energy
|
||||||
|
allocate(mo_l_coef_old(ao_num,mo_num), mo_r_coef_old(ao_num,mo_num))
|
||||||
|
mo_r_coef_old = mo_r_coef
|
||||||
|
mo_l_coef_old = mo_l_coef
|
||||||
|
|
||||||
good_angles = .False.
|
good_angles = .False.
|
||||||
|
|
||||||
allocate(mo_l_coef_good(ao_num, mo_num), mo_r_coef_good(ao_num,mo_num))
|
allocate(mo_l_coef_good(ao_num, mo_num), mo_r_coef_good(ao_num,mo_num))
|
||||||
@ -253,11 +261,32 @@ subroutine routine_save_rotated_mos(thr_deg, good_angles)
|
|||||||
call ezfio_set_bi_ortho_mos_mo_r_coef(mo_r_coef)
|
call ezfio_set_bi_ortho_mos_mo_r_coef(mo_r_coef)
|
||||||
TOUCH mo_l_coef mo_r_coef
|
TOUCH mo_l_coef mo_r_coef
|
||||||
|
|
||||||
|
! check if TC energy has changed
|
||||||
|
E_new = TC_HF_energy
|
||||||
|
if(dabs(E_new - E_old) .gt. E_thr) then
|
||||||
|
mo_r_coef = mo_r_coef_old
|
||||||
|
mo_l_coef = mo_l_coef_old
|
||||||
|
deallocate(mo_l_coef_old, mo_r_coef_old)
|
||||||
|
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
|
||||||
|
print*, ' TC energy bef rotation = ', E_old
|
||||||
|
print*, ' TC energy aft rotation = ', E_new
|
||||||
|
print*, ' the rotation is refused'
|
||||||
|
stop
|
||||||
|
endif
|
||||||
|
|
||||||
allocate(new_angles(mo_num))
|
allocate(new_angles(mo_num))
|
||||||
new_angles(1:mo_num) = dabs(angle_left_right(1:mo_num))
|
new_angles(1:mo_num) = dabs(angle_left_right(1:mo_num))
|
||||||
max_angle = maxval(new_angles)
|
max_angle = maxval(new_angles)
|
||||||
good_angles = max_angle.lt.45.d0
|
good_angles = max_angle.lt.45.d0
|
||||||
print *, ' max_angle = ', max_angle
|
print *, ' max_angle = ', max_angle
|
||||||
|
deallocate(new_angles)
|
||||||
|
|
||||||
|
|
||||||
|
deallocate(mo_l_coef_old, mo_r_coef_old)
|
||||||
|
deallocate(mo_l_coef_good, mo_r_coef_good)
|
||||||
|
deallocate(mo_r_coef_new)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ program tc_scf
|
|||||||
stop
|
stop
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!call minimize_tc_orb_angles()
|
call minimize_tc_orb_angles()
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user