property_vector_pchb_doubles_spinorb_fastweighted Module

spin-orbital-resolved PropVecCI-PCHB using the “fast weighted” scheme



Derived Types

PropVec PCHB excitation generator for doubles using spin orbitals, with “fast weighting” This means we choose holes via

Components

Type Visibility Attributes Name Initial
logical, public :: use_lookup = .false.

use a lookup for the prop_vec index

logical, public :: create_lookup = .false.

create and manage the prop_vec index

class(ParticleSelector_t), private, allocatable :: particle_selector

particle selector for getting I, J

type(AliasSampler_2D_t), private :: AB_sampler

sampler for holes, dubbed (fused index) It yields where IJ is a fused index I < J and i_sg is the prop_vec.

class(PropertyIndexer_t), private, allocatable :: indexer
integer, private, allocatable :: tgtOrbs(:,:)

Type-Bound Procedures

procedure, public :: init => PropVec_doubles_PCHB_spinorb_init
procedure, public :: finalize => PropVec_doubles_PCHB_spinorb_finalize
procedure, public :: gen_exc => PropVec_doubles_PCHB_spinorb_gen_exc
procedure, public :: get_pgen => PropVec_doubles_PCHB_spinorb_get_pgen
procedure, public :: gen_all_excits => PropVec_doubles_PCHB_spinorb_gen_all_excits
procedure, private :: compute_samplers => PropVec_doubles_PCHB_spinorb_compute_samplers

Functions

private function PropVec_doubles_PCHB_spinorb_get_pgen(this, nI, ilutI, ex, ic, ClassCount2, ClassCountUnocc2) result(pgen)

calculates the probability of drawing a given double excitation parametrised by the excitation matrix ex

Arguments

Type IntentOptional Attributes Name
class(PropVec_PCHB_DoublesSpinOrbFastWeightExcGen_t), intent(inout) :: this
integer, intent(in) :: nI(nel)
integer(kind=n_int), intent(in) :: ilutI(0:NIfTot)
integer, intent(in) :: ex(2,maxExcit)

excitation matrix

integer, intent(in) :: ic

excitation matrix

integer, intent(in) :: ClassCount2(ScratchSize)
integer, intent(in) :: ClassCountUnocc2(ScratchSize)

Return Value real(kind=dp)


Subroutines

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

initalises the spinorb-resolved PCHB doubles excitation generator

Read more…

Arguments

Type IntentOptional Attributes Name
class(PropVec_PCHB_DoublesSpinOrbFastWeightExcGen_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

private subroutine PropVec_doubles_PCHB_spinorb_finalize(this)

deallocates the sampler and mapper

Arguments

Type IntentOptional Attributes Name
class(PropVec_PCHB_DoublesSpinOrbFastWeightExcGen_t), intent(inout) :: this

private subroutine PropVec_doubles_PCHB_spinorb_gen_exc(this, nI, ilutI, nJ, ilutJ, exFlag, ic, ex, tParity, pGen, hel, store, part_type)

given the initial determinant (both as nI and ilut), create a random doubles excitation using the Hamiltonian matrix elements as weights

Arguments

Type IntentOptional Attributes Name
class(PropVec_PCHB_DoublesSpinOrbFastWeightExcGen_t), intent(inout) :: this

the exctitation generator

integer, intent(in) :: nI(nel)

determinant to excite from unused in this generator

integer(kind=n_int), intent(in) :: ilutI(0:NIfTot)

determint from which to excite, ilut format

integer, intent(out) :: nJ(nel)

the excited determinant upon return excitation order (for doubles generator, always == 2) excitation matrix nI -> nJ

integer(kind=n_int), intent(out) :: ilutJ(0:NifTot)

excited determinant, ilut format

integer, intent(in) :: exFlag

determinant to excite from unused in this generator

integer, intent(out) :: ic

the excited determinant upon return excitation order (for doubles generator, always == 2) excitation matrix nI -> nJ

integer, intent(out) :: ex(2,maxExcit)

the excited determinant upon return excitation order (for doubles generator, always == 2) excitation matrix nI -> nJ

logical, intent(out) :: tParity

the parity of the excitation nI -> nJ

real(kind=dp), intent(out) :: pGen

probability of generating the excitation

real(kind=dp), intent(out) :: hel

matrix element Hijab

type(excit_gen_store_type), intent(inout), target :: store
integer, intent(in), optional :: part_type

unused in this generator

private subroutine PropVec_doubles_PCHB_spinorb_gen_all_excits(this, nI, n_excits, det_list)

Arguments

Type IntentOptional Attributes Name
class(PropVec_PCHB_DoublesSpinOrbFastWeightExcGen_t), intent(in) :: this
integer, intent(in) :: nI(nEl)
integer, intent(out) :: n_excits
integer(kind=n_int), intent(out), allocatable :: det_list(:,:)

private subroutine PropVec_doubles_PCHB_spinorb_compute_samplers(this, nBI, PCHB_particle_selection)

computes and stores values for the alias (spin-independent) sampling table

Arguments

Type IntentOptional Attributes Name
class(PropVec_PCHB_DoublesSpinOrbFastWeightExcGen_t), intent(inout) :: this
integer, intent(in) :: nBI
type(PCHB_ParticleSelection_t), intent(in) :: PCHB_particle_selection