gasci_pchb_doubles_spinorb_fullyweighted Module

precomputed heat bath implementation for GASCI using spin orbitals and full weighting



Contents


Derived Types

The GAS PCHB excitation generator for doubles using spin orbitals and doing full weighting. This means that first a hole is chosen via ( p( A | I J) |{A \notin D_i} ) !! then a second hole is chosen via ( p( B | I J A) | ).

Read more…

Components

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.

class(ParticleSelector_t), private, allocatable :: particle_selector

The particle selector for I, J

type(AliasSampler_2D_t), private :: A_sampler

The sampler for the first hole A. It yields where IJ is a fused index I < J and i_sg is the supergroup.

type(AliasSampler_3D_t), private :: B_sampler

The sampler for the second hole B. It yields where IJ is a fused index I < J, A is the first hole and i_sg is the supergroup.

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

The last element of the ilut array has some elements which are not used, if the number of spinorbitals is not a multiple of bitsize_n_int. To correctly zero them this bitmask is 1 wherever a determinant could be occupied in the last element, and 0 otherwise.

Type-Bound Procedures

procedure , public :: init => GAS_doubles_PCHB_init Subroutine
procedure , public :: finalize => GAS_doubles_PCHB_finalize Subroutine
procedure , public :: gen_exc => GAS_doubles_PCHB_gen_exc Subroutine
procedure , public :: get_pgen => GAS_doubles_PCHB_get_pgen Function
procedure , public :: gen_all_excits => GAS_doubles_PCHB_gen_all_excits Subroutine
procedure , private , :: compute_samplers => GAS_doubles_PCHB_compute_samplers Subroutine
procedure , private , :: get_unoccupied Subroutine

Functions

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

@brief Calculate the probability of drawing a given double excitation ex

Read more…

Arguments

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

Return Value real(kind=dp)


Subroutines

private subroutine GAS_doubles_PCHB_init(this, GAS_spec, use_lookup, create_lookup, PCHB_particle_selection)

@brief Initialize the pchb excitation generator

Read more…

Arguments

Type IntentOptional Attributes Name
class(GAS_PCHB_DoublesSpinorbFullyWeightedExcGenerator_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_finalize(this)

Finalize everything

Arguments

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

private subroutine GAS_doubles_PCHB_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 double excitation using the hamiltonian matrix elements as weights

Arguments

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

private subroutine GAS_doubles_PCHB_compute_samplers(this, PCHB_particle_selection)

computes and stores values for the alias sampling table n_supergroup * number_of_fused_indices * 3 * (bytes_per_sampler)

Arguments

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

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

Arguments

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

private pure subroutine get_unoccupied(this, ilutI, ilut_unoccupied, unoccupied)

Return a bitmask and enumeration of the unoccupied spin orbitals.

Arguments

Type IntentOptional Attributes Name
class(GAS_PCHB_DoublesSpinorbFullyWeightedExcGenerator_t), intent(in) :: this
integer(kind=n_int), intent(in) :: ilutI(0:nIfD)
integer(kind=n_int), intent(out) :: ilut_unoccupied(0:nIfD)
integer, intent(out) :: unoccupied(nBasis-nEl)