mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-22 03:23:29 +01:00
fixed a bug in two_rdm, added the possibility to Write/Read the all_states active 2 rdm
This commit is contained in:
parent
7ea6226a47
commit
25102d79a3
5
src/bitmask/EZFIO.cfg
Normal file
5
src/bitmask/EZFIO.cfg
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[n_act_orb]
|
||||||
|
type: integer
|
||||||
|
doc: Number of active |MOs|
|
||||||
|
interface: ezfio
|
||||||
|
|
@ -49,9 +49,10 @@ BEGIN_PROVIDER [ integer, n_act_orb]
|
|||||||
n_act_orb += 1
|
n_act_orb += 1
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
call write_int(6,n_act_orb, 'Number of active MOs')
|
call write_int(6,n_act_orb, 'Number of active MOs')
|
||||||
|
if (mpi_master) then
|
||||||
|
call ezfio_set_bitmask_n_act_orb(n_act_orb)
|
||||||
|
endif
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
BEGIN_PROVIDER [ integer, n_virt_orb ]
|
BEGIN_PROVIDER [ integer, n_virt_orb ]
|
||||||
|
48
src/two_body_rdm/EZFIO.cfg
Normal file
48
src/two_body_rdm/EZFIO.cfg
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
[two_rdm_ab_disk]
|
||||||
|
type: double precision
|
||||||
|
doc: active part of the two body rdm alpha/beta stored on disk
|
||||||
|
interface: ezfio
|
||||||
|
size: (bitmask.n_act_orb,bitmask.n_act_orb,bitmask.n_act_orb,bitmask.n_act_orb,determinants.n_states)
|
||||||
|
|
||||||
|
[io_two_body_rdm_ab]
|
||||||
|
type: Disk_access
|
||||||
|
doc: Read/Write the active part of the two-body rdm for alpha/beta electrons from/to disk [ Write | Read | None ]
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: None
|
||||||
|
|
||||||
|
[two_rdm_aa_disk]
|
||||||
|
type: double precision
|
||||||
|
doc: active part of the two body rdm alpha/alpha stored on disk
|
||||||
|
interface: ezfio
|
||||||
|
size: (bitmask.n_act_orb,bitmask.n_act_orb,bitmask.n_act_orb,bitmask.n_act_orb,determinants.n_states)
|
||||||
|
|
||||||
|
[io_two_body_rdm_aa]
|
||||||
|
type: Disk_access
|
||||||
|
doc: Read/Write the active part of the two-body rdm for alpha/alpha electrons from/to disk [ Write | Read | None ]
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: None
|
||||||
|
|
||||||
|
[two_rdm_bb_disk]
|
||||||
|
type: double precision
|
||||||
|
doc: active part of the two body rdm beta/beta stored on disk
|
||||||
|
interface: ezfio
|
||||||
|
size: (bitmask.n_act_orb,bitmask.n_act_orb,bitmask.n_act_orb,bitmask.n_act_orb,determinants.n_states)
|
||||||
|
|
||||||
|
[io_two_body_rdm_bb]
|
||||||
|
type: Disk_access
|
||||||
|
doc: Read/Write the active part of the two-body rdm for beta/beta electrons from/to disk [ Write | Read | None ]
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: None
|
||||||
|
|
||||||
|
[two_rdm_spin_trace_disk]
|
||||||
|
type: double precision
|
||||||
|
doc: active part of the two body rdm spin trace stored on disk
|
||||||
|
interface: ezfio
|
||||||
|
size: (bitmask.n_act_orb,bitmask.n_act_orb,bitmask.n_act_orb,bitmask.n_act_orb,determinants.n_states)
|
||||||
|
|
||||||
|
[io_two_body_rdm_spin_trace]
|
||||||
|
type: Disk_access
|
||||||
|
doc: Read/Write the active part of the two-body rdm for spin trace electrons from/to disk [ Write | Read | None ]
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: None
|
||||||
|
|
@ -3,7 +3,6 @@ two_body_rdm
|
|||||||
============
|
============
|
||||||
|
|
||||||
Contains the two rdms $\alpha\alpha$, $\beta\beta$ and $\alpha\beta$ stored as
|
Contains the two rdms $\alpha\alpha$, $\beta\beta$ and $\alpha\beta$ stored as
|
||||||
arrays, with pysicists notation, consistent with the two-electron integrals in the
|
arrays, with pysicists notation, consistent with the two-electron integrals in the MO basis.
|
||||||
MO basis.
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,8 +26,17 @@
|
|||||||
ispin = 3
|
ispin = 3
|
||||||
act_2_rdm_ab_mo = 0.d0
|
act_2_rdm_ab_mo = 0.d0
|
||||||
call wall_time(wall_1)
|
call wall_time(wall_1)
|
||||||
call orb_range_2_rdm_openmp(act_2_rdm_ab_mo,n_act_orb,n_act_orb,list_act,ispin,psi_coef,size(psi_coef,2),size(psi_coef,1))
|
if(read_two_body_rdm_ab)then
|
||||||
|
print*,'Reading act_2_rdm_ab_mo from disk ...'
|
||||||
|
call ezfio_get_two_body_rdm_two_rdm_ab_disk(act_2_rdm_ab_mo)
|
||||||
|
else
|
||||||
|
call orb_range_2_rdm_openmp(act_2_rdm_ab_mo,n_act_orb,n_act_orb,list_act,ispin,psi_coef,size(psi_coef,2),size(psi_coef,1))
|
||||||
|
endif
|
||||||
|
if(write_two_body_rdm_ab)then
|
||||||
|
print*,'Writing act_2_rdm_ab_mo on disk ...'
|
||||||
|
call ezfio_set_two_body_rdm_two_rdm_ab_disk(act_2_rdm_ab_mo)
|
||||||
|
call ezfio_set_two_body_rdm_io_two_body_rdm_ab("Read")
|
||||||
|
endif
|
||||||
call wall_time(wall_2)
|
call wall_time(wall_2)
|
||||||
print*,'Wall time to provide act_2_rdm_ab_mo',wall_2 - wall_1
|
print*,'Wall time to provide act_2_rdm_ab_mo',wall_2 - wall_1
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
@ -54,7 +63,17 @@
|
|||||||
ispin = 1
|
ispin = 1
|
||||||
act_2_rdm_aa_mo = 0.d0
|
act_2_rdm_aa_mo = 0.d0
|
||||||
call wall_time(wall_1)
|
call wall_time(wall_1)
|
||||||
call orb_range_2_rdm_openmp(act_2_rdm_aa_mo,n_act_orb,n_act_orb,list_act,ispin,psi_coef,size(psi_coef,2),size(psi_coef,1))
|
if(read_two_body_rdm_aa)then
|
||||||
|
print*,'Reading act_2_rdm_aa_mo from disk ...'
|
||||||
|
call ezfio_get_two_body_rdm_two_rdm_aa_disk(act_2_rdm_aa_mo)
|
||||||
|
else
|
||||||
|
call orb_range_2_rdm_openmp(act_2_rdm_aa_mo,n_act_orb,n_act_orb,list_act,ispin,psi_coef,size(psi_coef,2),size(psi_coef,1))
|
||||||
|
endif
|
||||||
|
if(write_two_body_rdm_aa)then
|
||||||
|
print*,'Writing act_2_rdm_aa_mo on disk ...'
|
||||||
|
call ezfio_set_two_body_rdm_two_rdm_aa_disk(act_2_rdm_aa_mo)
|
||||||
|
call ezfio_set_two_body_rdm_io_two_body_rdm_aa("Read")
|
||||||
|
endif
|
||||||
|
|
||||||
call wall_time(wall_2)
|
call wall_time(wall_2)
|
||||||
print*,'Wall time to provide act_2_rdm_aa_mo',wall_2 - wall_1
|
print*,'Wall time to provide act_2_rdm_aa_mo',wall_2 - wall_1
|
||||||
@ -82,7 +101,17 @@
|
|||||||
ispin = 2
|
ispin = 2
|
||||||
act_2_rdm_bb_mo = 0.d0
|
act_2_rdm_bb_mo = 0.d0
|
||||||
call wall_time(wall_1)
|
call wall_time(wall_1)
|
||||||
call orb_range_2_rdm_openmp(act_2_rdm_bb_mo,n_act_orb,n_act_orb,list_act,ispin,psi_coef,size(psi_coef,2),size(psi_coef,1))
|
if(read_two_body_rdm_bb)then
|
||||||
|
print*,'Reading act_2_rdm_bb_mo from disk ...'
|
||||||
|
call ezfio_get_two_body_rdm_two_rdm_bb_disk(act_2_rdm_bb_mo)
|
||||||
|
else
|
||||||
|
call orb_range_2_rdm_openmp(act_2_rdm_bb_mo,n_act_orb,n_act_orb,list_act,ispin,psi_coef,size(psi_coef,2),size(psi_coef,1))
|
||||||
|
endif
|
||||||
|
if(write_two_body_rdm_bb)then
|
||||||
|
print*,'Writing act_2_rdm_bb_mo on disk ...'
|
||||||
|
call ezfio_set_two_body_rdm_two_rdm_bb_disk(act_2_rdm_bb_mo)
|
||||||
|
call ezfio_set_two_body_rdm_io_two_body_rdm_bb("Read")
|
||||||
|
endif
|
||||||
|
|
||||||
call wall_time(wall_2)
|
call wall_time(wall_2)
|
||||||
print*,'Wall time to provide act_2_rdm_bb_mo',wall_2 - wall_1
|
print*,'Wall time to provide act_2_rdm_bb_mo',wall_2 - wall_1
|
||||||
@ -109,7 +138,17 @@
|
|||||||
ispin = 4
|
ispin = 4
|
||||||
act_2_rdm_spin_trace_mo = 0.d0
|
act_2_rdm_spin_trace_mo = 0.d0
|
||||||
call wall_time(wall_1)
|
call wall_time(wall_1)
|
||||||
call orb_range_2_rdm_openmp(act_2_rdm_spin_trace_mo,n_act_orb,n_act_orb,list_act,ispin,psi_coef,size(psi_coef,2),size(psi_coef,1))
|
if(read_two_body_rdm_spin_trace)then
|
||||||
|
print*,'Reading act_2_rdm_spin_trace_mo from disk ...'
|
||||||
|
call ezfio_get_two_body_rdm_two_rdm_spin_trace_disk(act_2_rdm_spin_trace_mo)
|
||||||
|
else
|
||||||
|
call orb_range_2_rdm_openmp(act_2_rdm_spin_trace_mo,n_act_orb,n_act_orb,list_act,ispin,psi_coef,size(psi_coef,2),size(psi_coef,1))
|
||||||
|
endif
|
||||||
|
if(write_two_body_rdm_spin_trace)then
|
||||||
|
print*,'Writing act_2_rdm_spin_trace_mo on disk ...'
|
||||||
|
call ezfio_set_two_body_rdm_two_rdm_spin_trace_disk(act_2_rdm_spin_trace_mo)
|
||||||
|
call ezfio_set_two_body_rdm_io_two_body_rdm_spin_trace("Read")
|
||||||
|
endif
|
||||||
|
|
||||||
call wall_time(wall_2)
|
call wall_time(wall_2)
|
||||||
print*,'Wall time to provide act_2_rdm_spin_trace_mo',wall_2 - wall_1
|
print*,'Wall time to provide act_2_rdm_spin_trace_mo',wall_2 - wall_1
|
||||||
|
@ -137,7 +137,7 @@ subroutine orb_range_2_rdm_openmp_work_$N_int(big_array,dim1,norb,list_orb,ispin
|
|||||||
PROVIDE N_int
|
PROVIDE N_int
|
||||||
|
|
||||||
call list_to_bitstring( orb_bitmask, list_orb, norb, N_int)
|
call list_to_bitstring( orb_bitmask, list_orb, norb, N_int)
|
||||||
sze_buff = 6 * norb
|
sze_buff = 6 * norb + elec_alpha_num * elec_alpha_num * 60
|
||||||
list_orb_reverse = -1000
|
list_orb_reverse = -1000
|
||||||
do i = 1, norb
|
do i = 1, norb
|
||||||
list_orb_reverse(list_orb(i)) = i
|
list_orb_reverse(list_orb(i)) = i
|
||||||
@ -267,7 +267,7 @@ subroutine orb_range_2_rdm_openmp_work_$N_int(big_array,dim1,norb,list_orb,ispin
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
call orb_range_off_diag_double_to_all_states_ab_dm_buffer(tmp_det,tmp_det2,c_1,N_st,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
call orb_range_off_diag_double_to_all_states_ab_dm_buffer(tmp_det,tmp_det2,c_1,N_st,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
||||||
! print*,'coucou'
|
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -347,15 +347,13 @@ subroutine orb_range_2_rdm_openmp_work_$N_int(big_array,dim1,norb,list_orb,ispin
|
|||||||
call update_keys_values_n_states(keys,values,nkeys,dim1,n_st,big_array,lock_2rdm)
|
call update_keys_values_n_states(keys,values,nkeys,dim1,n_st,big_array,lock_2rdm)
|
||||||
nkeys = 0
|
nkeys = 0
|
||||||
endif
|
endif
|
||||||
call orb_range_off_diag_single_to_all_states_ab_dm_buffer(tmp_det, tmp_det2,c_1,N_st,orb_bitmask,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
call orb_range_off_diag_single_to_all_states_ab_dm_buffer(tmp_det, tmp_det2,c_1,N_st,orb_bitmask,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
||||||
! increment the alpha/alpha part for single excitations
|
! increment the alpha/alpha part for single excitations
|
||||||
if (nkeys+4 * elec_alpha_num .ge. sze_buff ) then
|
if (nkeys+4 * elec_alpha_num .ge. sze_buff ) then
|
||||||
call update_keys_values_n_states(keys,values,nkeys,dim1,n_st,big_array,lock_2rdm)
|
call update_keys_values_n_states(keys,values,nkeys,dim1,n_st,big_array,lock_2rdm)
|
||||||
nkeys = 0
|
nkeys = 0
|
||||||
endif
|
endif
|
||||||
! call orb_range_off_diag_single_to_2_rdm_aa_dm_buffer(tmp_det,tmp_det2,c_average,orb_bitmask,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
call orb_range_off_diag_single_to_all_states_aa_dm_buffer(tmp_det,tmp_det2,c_1,N_st,orb_bitmask,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
||||||
call orb_range_off_diag_single_to_all_states_aa_dm_buffer(tmp_det,tmp_det2,c_1,N_st,orb_bitmask,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
|
||||||
! print*,'to do orb_range_off_diag_single_to_2_rdm_aa_dm_buffer'
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
@ -382,7 +380,6 @@ subroutine orb_range_2_rdm_openmp_work_$N_int(big_array,dim1,norb,list_orb,ispin
|
|||||||
nkeys = 0
|
nkeys = 0
|
||||||
endif
|
endif
|
||||||
call orb_range_off_diag_double_to_all_states_aa_dm_buffer(tmp_det(1,1),psi_det_alpha_unique(1, lrow),c_1,N_st,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
call orb_range_off_diag_double_to_all_states_aa_dm_buffer(tmp_det(1,1),psi_det_alpha_unique(1, lrow),c_1,N_st,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
||||||
! print*,'to do orb_range_off_diag_double_to_2_rdm_aa_dm_buffer'
|
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
call update_keys_values_n_states(keys,values,nkeys,dim1,n_st,big_array,lock_2rdm)
|
call update_keys_values_n_states(keys,values,nkeys,dim1,n_st,big_array,lock_2rdm)
|
||||||
@ -453,7 +450,6 @@ subroutine orb_range_2_rdm_openmp_work_$N_int(big_array,dim1,norb,list_orb,ispin
|
|||||||
nkeys = 0
|
nkeys = 0
|
||||||
endif
|
endif
|
||||||
call orb_range_off_diag_single_to_all_states_ab_dm_buffer(tmp_det, tmp_det2,c_1,N_st,orb_bitmask,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
call orb_range_off_diag_single_to_all_states_ab_dm_buffer(tmp_det, tmp_det2,c_1,N_st,orb_bitmask,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
||||||
! print*,'to do orb_range_off_diag_single_to_2_rdm_ab_dm_buffer'
|
|
||||||
! increment the beta /beta part for single excitations
|
! increment the beta /beta part for single excitations
|
||||||
if (nkeys+4 * elec_alpha_num .ge. sze_buff) then
|
if (nkeys+4 * elec_alpha_num .ge. sze_buff) then
|
||||||
call update_keys_values_n_states(keys,values,nkeys,dim1,n_st,big_array,lock_2rdm)
|
call update_keys_values_n_states(keys,values,nkeys,dim1,n_st,big_array,lock_2rdm)
|
||||||
|
@ -139,7 +139,7 @@ subroutine orb_range_2_rdm_state_av_openmp_work_$N_int(big_array,dim1,norb,list_
|
|||||||
PROVIDE N_int
|
PROVIDE N_int
|
||||||
|
|
||||||
call list_to_bitstring( orb_bitmask, list_orb, norb, N_int)
|
call list_to_bitstring( orb_bitmask, list_orb, norb, N_int)
|
||||||
sze_buff = norb ** 3 + 6 * norb
|
sze_buff = 6 * norb + elec_alpha_num * elec_alpha_num * 60
|
||||||
list_orb_reverse = -1000
|
list_orb_reverse = -1000
|
||||||
do i = 1, norb
|
do i = 1, norb
|
||||||
list_orb_reverse(list_orb(i)) = i
|
list_orb_reverse(list_orb(i)) = i
|
||||||
@ -271,11 +271,12 @@ subroutine orb_range_2_rdm_state_av_openmp_work_$N_int(big_array,dim1,norb,list_
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
call orb_range_off_diag_double_to_2_rdm_ab_dm_buffer(tmp_det,tmp_det2,c_average,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
call orb_range_off_diag_double_to_2_rdm_ab_dm_buffer(tmp_det,tmp_det2,c_average,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
||||||
! print*,'todo orb_range_off_diag_double_to_2_rdm_ab_dm_buffer'
|
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
call update_keys_values(keys,values,nkeys,dim1,big_array,lock_2rdm)
|
||||||
|
nkeys = 0
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
@ -364,6 +365,8 @@ subroutine orb_range_2_rdm_state_av_openmp_work_$N_int(big_array,dim1,norb,list_
|
|||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
call update_keys_values(keys,values,nkeys,dim1,big_array,lock_2rdm)
|
||||||
|
nkeys = 0
|
||||||
|
|
||||||
! Compute Hij for all alpha doubles
|
! Compute Hij for all alpha doubles
|
||||||
! ----------------------------------
|
! ----------------------------------
|
||||||
@ -389,6 +392,8 @@ subroutine orb_range_2_rdm_state_av_openmp_work_$N_int(big_array,dim1,norb,list_
|
|||||||
call orb_range_off_diag_double_to_2_rdm_aa_dm_buffer(tmp_det(1,1),psi_det_alpha_unique(1, lrow),c_average,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
call orb_range_off_diag_double_to_2_rdm_aa_dm_buffer(tmp_det(1,1),psi_det_alpha_unique(1, lrow),c_average,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
|
call update_keys_values(keys,values,nkeys,dim1,big_array,lock_2rdm)
|
||||||
|
nkeys = 0
|
||||||
|
|
||||||
|
|
||||||
! Single and double beta excitations
|
! Single and double beta excitations
|
||||||
@ -466,6 +471,8 @@ subroutine orb_range_2_rdm_state_av_openmp_work_$N_int(big_array,dim1,norb,list_
|
|||||||
call orb_range_off_diag_single_to_2_rdm_bb_dm_buffer(tmp_det, tmp_det2,c_average,orb_bitmask,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
call orb_range_off_diag_single_to_2_rdm_bb_dm_buffer(tmp_det, tmp_det2,c_average,orb_bitmask,list_orb_reverse,ispin,sze_buff,nkeys,keys,values)
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
call update_keys_values(keys,values,nkeys,dim1,big_array,lock_2rdm)
|
||||||
|
nkeys = 0
|
||||||
|
|
||||||
! Compute Hij for all beta doubles
|
! Compute Hij for all beta doubles
|
||||||
! ----------------------------------
|
! ----------------------------------
|
||||||
|
@ -257,11 +257,9 @@
|
|||||||
if(list_orb_reverse(p2).lt.0)return
|
if(list_orb_reverse(p2).lt.0)return
|
||||||
p2 = list_orb_reverse(p2)
|
p2 = list_orb_reverse(p2)
|
||||||
if(alpha_beta)then
|
if(alpha_beta)then
|
||||||
! print*,'coucou'
|
|
||||||
nkeys += 1
|
nkeys += 1
|
||||||
do istate = 1, N_st
|
do istate = 1, N_st
|
||||||
values(istate,nkeys) = c_1(istate) * phase
|
values(istate,nkeys) = c_1(istate) * phase
|
||||||
! print*,'values',values(istate,nkeys),nkeys
|
|
||||||
enddo
|
enddo
|
||||||
keys(1,nkeys) = h1
|
keys(1,nkeys) = h1
|
||||||
keys(2,nkeys) = h2
|
keys(2,nkeys) = h2
|
||||||
|
Loading…
Reference in New Issue
Block a user