gasci_pchb_doubles_spinorb_fastweighted Module

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



Contents


Derived Types

GAS 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 supergroup index

logical, public :: create_lookup = .false.

create and manage the supergroup 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 supergroup.

type(SuperGroupIndexer_t), private, pointer :: indexer => null()
class(GASSpec_t), private, allocatable :: GAS_spec
integer, private, allocatable :: tgtOrbs(:,:)

Type-Bound Procedures

procedure , public :: init => GAS_doubles_PCHB_spinorb_init Subroutine
procedure , public :: finalize => GAS_doubles_PCHB_spinorb_finalize Subroutine
procedure , public :: gen_exc => GAS_doubles_PCHB_spinorb_gen_exc Subroutine
procedure , public :: get_pgen => GAS_doubles_PCHB_spinorb_get_pgen Function
procedure , public :: gen_all_excits => GAS_doubles_PCHB_spinorb_gen_all_excits Subroutine
procedure , private , :: compute_samplers => GAS_doubles_PCHB_spinorb_compute_samplers Subroutine

Functions

private function GAS_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(GAS_PCHB_DoublesSpinOrbFastWeightedExcGenerator_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 GAS_doubles_PCHB_spinorb_init(this, GAS_spec, use_lookup, create_lookup, PCHB_particle_selection)

initalises the spinorb-resolved PCHB doubles excitation generator

Read more…

Arguments

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

private subroutine GAS_doubles_PCHB_spinorb_finalize(this)

deallocates the sampler and mapper

Arguments

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

private subroutine GAS_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(GAS_PCHB_DoublesSpinOrbFastWeightedExcGenerator_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 GAS_doubles_PCHB_spinorb_gen_all_excits(this, nI, n_excits, det_list)

Arguments

Type IntentOptional Attributes Name
class(GAS_PCHB_DoublesSpinOrbFastWeightedExcGenerator_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 GAS_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(GAS_PCHB_DoublesSpinOrbFastWeightedExcGenerator_t), intent(inout) :: this
integer, intent(in) :: nBI
type(PCHB_ParticleSelection_t), intent(in) :: PCHB_particle_selection