The GAS PCHB excitation generator for doubles
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
logical, | public | :: | use_lookup | = | .false. |
Use a lookup for the supergroup index in global_det_data |
|
logical, | public | :: | create_lookup | = | .false. |
Create and manage! the supergroup index lookup in global_det_data. |
|
type(AliasSampler_3D_t), | private | :: | pchb_samplers |
The shape is (fused_number_of_double_excitations, 3, n_supergroup) |
|||
type(SuperGroupIndexer_t), | private, | pointer | :: | indexer | => | null() | |
class(ParticleSelector_t), | private, | allocatable | :: | particle_selector | |||
class(GASSpec_t), | private, | allocatable | :: | GAS_spec | |||
real(kind=dp), | private, | allocatable | :: | pExch(:,:) | |||
integer, | private, | allocatable | :: | tgtOrbs(:,:) |
@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 | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(GAS_PCHB_DoublesSpatOrbFastWeightedExcGenerator_t), | intent(inout) | :: | this | |||
class(GASSpec_t), | intent(in) | :: | GAS_spec | |||
logical, | intent(in) | :: | use_lookup | |||
logical, | intent(in) | :: | create_lookup | |||
type(PCHB_ParticleSelection_t), | intent(in) | :: | PCHB_particle_selection |
@brief Deallocate the sampler and the mapping ab -> (a,b)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(GAS_PCHB_DoublesSpatOrbFastWeightedExcGenerator_t), | intent(inout) | :: | this |
@brief Given the initial determinant (both as nI and ilut), create a random double excitation using the hamiltonian matrix elements as weights
@param[in] nI determinant to excite from @param[in] elec_map map to translate electron picks to orbitals @param[in] ilut determinant to excite from in ilut format @param[out] nJ on return, excited determinant @param[out] excitMat on return, excitation matrix nI -> nJ @param[out] tParity on return, the parity of the excitation nI -> nJ @param[out] pGen on return, the probability of generating the excitation nI -> nJ @param[in] idet Optional index of determinant in the CurrentDets array.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(GAS_PCHB_DoublesSpatOrbFastWeightedExcGenerator_t), | intent(inout) | :: | this | |||
integer, | intent(in) | :: | nI(nel) | |||
integer(kind=n_int), | intent(in) | :: | ilutI(0:NIfTot) | |||
integer, | intent(out) | :: | nJ(nel) | |||
integer(kind=n_int), | intent(out) | :: | ilutJ(0:NifTot) | |||
integer, | intent(in) | :: | exFlag | |||
integer, | intent(out) | :: | ic | |||
integer, | intent(out) | :: | ex(2,maxExcit) | |||
logical, | intent(out) | :: | tParity | |||
real(kind=dp), | intent(out) | :: | pGen | |||
real(kind=dp), | intent(out) | :: | hel | |||
type(excit_gen_store_type), | intent(inout), | target | :: | store | ||
integer, | intent(in), | optional | :: | part_type |
@brief Calculate the probability of drawing a given double excitation ex
@param[in] ex 2x2 excitation matrix
@return pgen probability of generating this double with the pchb double excitgen
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(GAS_PCHB_DoublesSpatOrbFastWeightedExcGenerator_t), | intent(inout) | :: | this | |||
integer, | intent(in) | :: | nI(nel) | |||
integer(kind=n_int), | intent(in) | :: | ilutI(0:NIfTot) | |||
integer, | intent(in) | :: | ex(2,maxExcit) | |||
integer, | intent(in) | :: | ic | |||
integer, | intent(in) | :: | ClassCount2(ScratchSize) | |||
integer, | intent(in) | :: | ClassCountUnocc2(ScratchSize) |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(GAS_PCHB_DoublesSpatOrbFastWeightedExcGenerator_t), | intent(in) | :: | this | |||
integer, | intent(in) | :: | nI(nEl) | |||
integer, | intent(out) | :: | n_excits | |||
integer(kind=n_int), | intent(out), | allocatable | :: | det_list(:,:) |
computes and stores values for the alias sampling table n_supergroup * number_of_fused_indices * 3 * (bytes_per_sampler)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(GAS_PCHB_DoublesSpatOrbFastWeightedExcGenerator_t), | intent(inout) | :: | this | |||
integer, | intent(in) | :: | nBI | |||
type(PCHB_ParticleSelection_t), | intent(in) | :: | PCHB_particle_selection |
type, extends(DoubleExcitationGenerator_t) :: GAS_PCHB_DoublesSpatOrbFastWeightedExcGenerator_t
private
!> Use a lookup for the supergroup index in global_det_data
logical, public :: use_lookup = .false.
!> Create **and** manage! the supergroup index lookup in global_det_data.
logical, public :: create_lookup = .false.
!> The shape is (fused_number_of_double_excitations, 3, n_supergroup)
type(AliasSampler_3D_t) :: pchb_samplers
type(SuperGroupIndexer_t), pointer :: indexer => null()
class(ParticleSelector_t), allocatable :: particle_selector
class(GASSpec_t), allocatable :: GAS_spec
real(dp), allocatable :: pExch(:, :)
integer, allocatable :: tgtOrbs(:, :)
contains
private
procedure, public :: init => GAS_doubles_PCHB_init
procedure, public :: finalize => GAS_doubles_PCHB_finalize
procedure, public :: gen_exc => GAS_doubles_PCHB_gen_exc
procedure, public :: get_pgen => GAS_doubles_PCHB_get_pgen
procedure, public :: gen_all_excits => GAS_doubles_PCHB_gen_all_excits
procedure :: compute_samplers => GAS_doubles_PCHB_compute_samplers
end type GAS_PCHB_DoublesSpatOrbFastWeightedExcGenerator_t