use bitmasks

integer, parameter :: hole_     = 1
integer, parameter :: particle_ = 2
integer, parameter :: hole2_    = 3
integer, parameter :: particle2_= 4

BEGIN_PROVIDER [ integer, N_single_exc_bitmasks ]
 implicit none
 BEGIN_DOC
 ! Number of single excitation bitmasks
 END_DOC
 N_single_exc_bitmasks = 1
 !TODO : Read from input!
END_PROVIDER

BEGIN_PROVIDER [ integer(bit_kind), single_exc_bitmask, (N_int, 2, N_single_exc_bitmasks) ]
 implicit none
 BEGIN_DOC
 ! single_exc_bitmask(:,1,i) is the bitmask for holes
 ! single_exc_bitmask(:,2,i) is the bitmask for particles
 ! for a given couple of hole/particle excitations i.
 END_DOC

 single_exc_bitmask(:,hole_,1) = HF_bitmask(:,1)
 single_exc_bitmask(:,particle_,1) = not(HF_bitmask(:,2))
 !TODO : Read from input!
END_PROVIDER


BEGIN_PROVIDER [ integer, N_double_exc_bitmasks ]
 implicit none
 BEGIN_DOC
 ! Number of double excitation bitmasks
 END_DOC
 N_double_exc_bitmasks = 1
 !TODO : Read from input!
END_PROVIDER

BEGIN_PROVIDER [ integer(bit_kind), double_exc_bitmask, (N_int, 4, N_double_exc_bitmasks) ]
 implicit none
 BEGIN_DOC
 ! double_exc_bitmask(:,1,i) is the bitmask for holes of excitation 1
 ! double_exc_bitmask(:,2,i) is the bitmask for particles of excitation 1
 ! double_exc_bitmask(:,3,i) is the bitmask for holes of excitation 2
 ! double_exc_bitmask(:,4,i) is the bitmask for particles of excitation 2
 ! for a given couple of hole/particle excitations i.
 END_DOC

 double_exc_bitmask(:,hole_,1) = HF_bitmask(:,1)
 double_exc_bitmask(:,particle_,1) = not(HF_bitmask(:,2))
 double_exc_bitmask(:,hole2_,1) = HF_bitmask(:,1)
 double_exc_bitmask(:,particle2_,1) = not(HF_bitmask(:,2))
 
 !TODO : Read from input!
END_PROVIDER

