@brief Initialize the pchb excitation generator
@details
This does two things:
1. setup the lookup table for the mapping ab -> (a,b)
2. setup the alias table for picking ab given ij with probability ~
PropVec_PCHB_DoublesSpinorbFullyWeightExcGen_t
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(PropVec_PCHB_DoublesSpinorbFullyWeightExcGen_t), | intent(inout) | :: | this | |||
| class(PropertyIndexer_t), | intent(in) | :: | indexer | |||
| logical, | intent(in) | :: | use_lookup | |||
| logical, | intent(in) | :: | create_lookup | |||
| type(PCHB_ParticleSelection_t), | intent(in) | :: | PCHB_particle_selection |
subroutine PropVec_doubles_PCHB_init(this, indexer, & use_lookup, create_lookup, PCHB_particle_selection) class(PropVec_PCHB_DoublesSpinorbFullyWeightExcGen_t), intent(inout) :: this class(PropertyIndexer_t), intent(in) :: indexer logical, intent(in) :: use_lookup, create_lookup type(PCHB_ParticleSelection_t), intent(in) :: PCHB_particle_selection character(*), parameter :: this_routine = 'PropVec_doubles_PCHB_init' allocate(this%indexer, source=indexer) this%create_lookup = create_lookup this%use_lookup = use_lookup if (this%create_lookup) then if (allocated(lookup_property_indexer)) then call stop_all(this_routine, 'Someone else is already managing the property vector lookup.') else write(stdout, *) 'PropVec PCHB (RHF) doubles is creating and managing the property vector lookup' allocate(lookup_property_indexer, source=this%indexer) end if end if if (this%use_lookup) write(stdout, *) 'PropVec PCHB doubles is using the property vector lookup' this%last_possible_occupied = 0_n_int block integer :: i do i = 0, ilut_off(nBasis) this%last_possible_occupied = ibset(this%last_possible_occupied, i) end do end block call this%compute_samplers(PCHB_particle_selection) write(stdout, *) "Finished excitation generator initialization" end subroutine PropVec_doubles_PCHB_init