subroutine init_guga_bitrep(n_spatial_bits)
! set up a nIfGUGA variable to use a similar integer list to
! calculate excitations for a given GUGA CSF
integer, intent(in) :: n_spatial_bits
integer :: x0_pos, x1_pos, deltaB_pos, rdm_ind_pos, rdm_x0_pos, rdm_x1_pos
! Structure of a bit representation:
! the parenthesis is for the stochastic GUGA rdm implementation
! | 0-NIfD: Det | x0 | x1 | deltaB | (rdm_ind | rdm_x0 | rdm_x1)
!
! -------
! (NIfD + 1) * 64-bits Orbital rep.
! 1 * 64-bits x0 matrix element
! 1 * 64-bits x1 matrix element
! 1 * 64-bits deltaB value
! if we sample RDMs:
! 1 * 64-bits rdm_index (contains ex-level and type info!)
! 1 * 64-bits x0 coupling coeff for RDMs
! 1 * 64-bits x1-coupling coeff for RDMs
x0_pos = n_spatial_bits + 1
x1_pos = x0_pos + 1
deltaB_pos = x1_pos + 1
if (tRDMonfly) then
rdm_ind_pos = deltaB_pos + 1
rdm_x0_pos = rdm_ind_pos + 1
rdm_x1_pos = rdm_x0_pos + 1
nifguga = rdm_x1_pos
else
rdm_ind_pos = -1
rdm_x0_pos = -1
rdm_x1_pos = -1
nIfGUGA = deltaB_pos
end if
! and also use a global data structure for more overview
GugaBits = BitRep_t( &
len_tot=nIfGUGA, &
len_orb=n_spatial_bits, &
ind_x0=x0_pos, &
ind_x1=x1_pos, &
ind_b=deltaB_pos, &
ind_rdm_ind=rdm_ind_pos, &
ind_rdm_x0=rdm_x0_pos, &
ind_rdm_x1=rdm_x1_pos)
end subroutine init_guga_bitrep