PropVec_doubles_PCHB_init Subroutine

private subroutine PropVec_doubles_PCHB_init(this, indexer, use_lookup, create_lookup, PCHB_particle_selection)

@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 ~

Type Bound

PropVec_PCHB_DoublesSpinorbFullyWeightExcGen_t

Arguments

Type IntentOptional 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

Source Code

    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