! --- program print_tc_bi_ortho BEGIN_DOC ! TODO : Put the documentation of the program here END_DOC implicit none print *, 'Hello world' my_grid_becke = .True. PROVIDE tc_grid1_a tc_grid1_r my_n_pt_r_grid = tc_grid1_r my_n_pt_a_grid = tc_grid1_a touch my_grid_becke my_n_pt_r_grid my_n_pt_a_grid read_wf = .True. touch read_wf ! if(three_body_h_tc)then ! call provide_all_three_ints_bi_ortho ! endif ! call routine call write_l_r_wf end subroutine write_l_r_wf implicit none character*(128) :: output integer :: i_unit_output,getUnitAndOpen output=trim(ezfio_filename)//'.tc_wf' i_unit_output = getUnitAndOpen(output,'w') integer :: i print*,'Writing the left-right wf' do i = 1, N_det write(i_unit_output,*)i, psi_l_coef_sorted_bi_ortho_left(i)/psi_l_coef_sorted_bi_ortho_left(1) & , psi_r_coef_sorted_bi_ortho_right(i)/psi_r_coef_sorted_bi_ortho_right(1) enddo end subroutine routine implicit none integer :: i,degree integer :: exc(0:2,2,2),h1,p1,s1,h2,p2,s2 double precision :: hmono,htwoe,hthree,htilde_ij,coef_pt1,e_i0,delta_e,e_pt2 double precision :: contrib_pt,e_corr,coef,contrib,phase double precision :: accu_positive,accu_positive_pt, accu_positive_core,accu_positive_core_pt e_pt2 = 0.d0 accu_positive = 0.D0 accu_positive_pt = 0.D0 accu_positive_core = 0.d0 accu_positive_core_pt = 0.d0 do i = 1, N_det call get_excitation_degree(HF_bitmask,psi_det(1,1,i),degree,N_int) if(degree == 1 .or. degree == 2)then call htilde_mu_mat_bi_ortho_slow(psi_det(1,1,i),HF_bitmask,N_int,hmono,htwoe,hthree,htilde_ij) call htilde_mu_mat_bi_ortho_slow(psi_det(1,1,i),psi_det(1,1,i),N_int,hmono,htwoe,hthree,e_i0) delta_e = e_tilde_00 - e_i0 coef_pt1 = htilde_ij / delta_e call htilde_mu_mat_bi_ortho_slow(HF_bitmask,psi_det(1,1,i),N_int,hmono,htwoe,hthree,htilde_ij) contrib_pt = coef_pt1 * htilde_ij e_pt2 += contrib_pt coef = psi_r_coef_bi_ortho(i,1)/psi_r_coef_bi_ortho(1,1) contrib = coef * htilde_ij e_corr += contrib call get_excitation(HF_bitmask,psi_det(1,1,i),exc,degree,phase,N_int) call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2) print*,'*********' if(degree==1)then print*,'s1',s1 print*,'h1,p1 = ',h1,p1 else if(degree ==2)then print*,'s1',s1 print*,'h1,p1 = ',h1,p1 print*,'s2',s2 print*,'h2,p2 = ',h2,p2 endif print*,'coef_pt1 = ',coef_pt1 print*,'coef = ',coef print*,'contrib_pt ',contrib_pt print*,'contrib = ',contrib if(contrib.gt.0.d0)then accu_positive += contrib if(h1==1.or.h2==1)then accu_positive_core += contrib endif if(dabs(contrib).gt.1.d-5)then print*,'Found a positive contribution to correlation energy !!' endif endif if(contrib_pt.gt.0.d0)then accu_positive_pt += contrib_pt if(h2==1.or.h1==1)then accu_positive_core_pt += contrib_pt endif endif endif enddo print*,'' print*,'' print*,'Total correlation energy = ',e_corr print*,'Total correlation energy PT = ',e_pt2 print*,'Positive contribution to ecorr = ',accu_positive print*,'Positive contribution to ecorr PT = ',accu_positive_pt print*,'Pure core contribution = ',accu_positive_core print*,'Pure core contribution PT = ',accu_positive_core_pt end