excitation_types Module

A module for representing different excitations.

There is one abstract base class excitation_t that represents an arbitrary excitation. Possible excitations are the non trivial excitations Excite_{1,2,3}_t and the trivial excitations Excite_0_t and Excite_Further_t.

The non trivial excitations can “know” only some indices and leave the rest UNKNOWN, which is an arbitrary integer constant.

The procedures create_excitation, get_excitation, and get_bit_excitation can be used, to create excitations from nIs, or iluts at runtime.



Contents


Variables

Type Visibility Attributes Name Initial
integer, public, parameter :: UNKNOWN = huge(UNKNOWN)

Arbitrary non occuring (?!) orbital index.


Interfaces

public interface Excite_1_t

Additional constructors for the excitation types from integers instead of an integer array.

The non trivial excitations are initialized by passing the respective integer arrays into the type. Alternatively one can use integer arguments to initialize. Omitted indices are set to UNKNOWN.

\code{.unparsed} Excite_t([1, 2]) == Excite_t(src=1, tgt=2) ! If the target should be UNKNOWN, just omit it Excite_t(src=1) \endcode

The signature is (src_1, tgt_1, src_2, tgt_2, ...). depending on the actual type.

  • private pure function from_integer_Excite_1_t(src, tgt) result(res)

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in), optional :: src
    integer, intent(in), optional :: tgt

    Return Value type(Excite_1_t)

public interface Excite_2_t

Additional constructors for the excitation types from integers instead of an integer array.

The non trivial excitations are initialized by passing the respective integer arrays into the type. Alternatively one can use integer arguments to initialize. Omitted indices are set to UNKNOWN.

\code{.unparsed} Excite_t([1, 2]) == Excite_t(src=1, tgt=2) ! If the target should be UNKNOWN, just omit it Excite_t(src=1) \endcode

The signature is (src_1, tgt_1, src_2, tgt_2, ...). depending on the actual type.

  • private pure function from_integer_Excite_2_t(src1, tgt1, src2, tgt2) result(res)

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in), optional :: src1
    integer, intent(in), optional :: tgt1
    integer, intent(in), optional :: src2
    integer, intent(in), optional :: tgt2

    Return Value type(Excite_2_t)

public interface Excite_3_t

Additional constructors for the excitation types from integers instead of an integer array.

The non trivial excitations are initialized by passing the respective integer arrays into the type. Alternatively one can use integer arguments to initialize. Omitted indices are set to UNKNOWN.

\code{.unparsed} Excite_t([1, 2]) == Excite_t(src=1, tgt=2) ! If the target should be UNKNOWN, just omit it Excite_t(src=1) \endcode

The signature is (src_1, tgt_1, src_2, tgt_2, ...). depending on the actual type.

  • private pure function from_integer_Excite_3_t(src1, tgt1, src2, tgt2, src3, tgt3) result(res)

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in), optional :: src1
    integer, intent(in), optional :: tgt1
    integer, intent(in), optional :: src2
    integer, intent(in), optional :: tgt2
    integer, intent(in), optional :: src3
    integer, intent(in), optional :: tgt3

    Return Value type(Excite_3_t)

public interface defined

Return true if all sources and targets are not UNKNOWN.

  • private elemental function defined_Excite_0_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_0_t), intent(in) :: exc

    Return Value logical

  • private elemental function defined_Excite_1_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_1_t), intent(in) :: exc

    Return Value logical

  • private elemental function defined_Excite_2_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_2_t), intent(in) :: exc

    Return Value logical

  • private elemental function defined_Excite_3_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_3_t), intent(in) :: exc

    Return Value logical

public interface is_sorted

Return true if all sources and targets are not UNKNOWN.

  • private elemental function is_sorted_Excite_0_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_0_t), intent(in) :: exc

    Return Value logical

  • private elemental function is_sorted_Excite_1_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_1_t), intent(in) :: exc

    Return Value logical

  • private elemental function is_sorted_Excite_2_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_2_t), intent(in) :: exc

    Return Value logical

  • private elemental function is_sorted_Excite_3_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_3_t), intent(in) :: exc

    Return Value logical

public interface is_canonical

Return true if the excitation is canonical

Canonical means: 1. that the excitation is defined, i.e. it has no UNKNOWN, 2. the sources and the targets are sets, i.e. they are unique and ordered, 3. the sources and the targets are disjoint,

  • private elemental function is_canonical_Excite_0_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_0_t), intent(in) :: exc

    Return Value logical

  • private elemental function is_canonical_Excite_1_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_1_t), intent(in) :: exc

    Return Value logical

  • private elemental function is_canonical_Excite_2_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_2_t), intent(in) :: exc

    Return Value logical

  • private elemental function is_canonical_Excite_3_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_3_t), intent(in) :: exc

    Return Value logical

public interface spin_allowed

Return true if the excitation preserves the overall spin-projection

  • private elemental function spin_allowed_Excite_0_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_0_t), intent(in) :: exc

    Return Value logical

  • private elemental function spin_allowed_Excite_1_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_1_t), intent(in) :: exc

    Return Value logical

  • private elemental function spin_allowed_Excite_2_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_2_t), intent(in) :: exc

    Return Value logical

  • private elemental function spin_allowed_Excite_3_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_3_t), intent(in) :: exc

    Return Value logical

public interface occupation_allowed

Return true if the excitation is allowed by occupation of the starting determinant

The input excitation has to be canonical.

  • private pure function occupation_allowed_Excite_0_t(nI, exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: nI(:)
    type(Excite_0_t), intent(in) :: exc

    Return Value logical

  • private pure function occupation_allowed_Excite_1_t(nI, exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: nI(:)
    type(Excite_1_t), intent(in) :: exc

    Return Value logical

  • private pure function occupation_allowed_Excite_2_t(nI, exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: nI(:)
    type(Excite_2_t), intent(in) :: exc

    Return Value logical

  • private pure function occupation_allowed_Excite_3_t(nI, exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: nI(:)
    type(Excite_3_t), intent(in) :: exc

    Return Value logical

public interface canonicalize

Canonicalize an excitation

Canonical means that the excitation is defined, i.e. it has no UNKNOWN, the sources and the targets are sets, i.e. they are unique and ordered, and the sources and the targets are disjoint.

public interface make_canonical

Canonicalize an excitation and count the necessary swaps

Canonical means that the excitation is defined, i.e. it has no UNKNOWN, the sources and the targets are sets, i.e. they are unique and ordered, and the sources and the targets are disjoint.

  • private elemental subroutine make_canonical_Excite_0_t(exc, even_swaps)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_0_t), intent(inout) :: exc
    logical, intent(out) :: even_swaps
  • private elemental subroutine make_canonical_Excite_1_t(exc, even_swaps)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_1_t), intent(inout) :: exc
    logical, intent(out) :: even_swaps
  • private elemental subroutine make_canonical_Excite_2_t(exc, even_swaps)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_2_t), intent(inout) :: exc
    logical, intent(out) :: even_swaps
  • private elemental subroutine make_canonical_Excite_3_t(exc, even_swaps)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_3_t), intent(inout) :: exc
    logical, intent(out) :: even_swaps

public interface get_last_tgt

Get the last target of a non trivial excitation.

  • private pure function get_last_tgt_Excite_1_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_1_t), intent(in) :: exc

    Return Value integer

  • private pure function get_last_tgt_Excite_2_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_2_t), intent(in) :: exc

    Return Value integer

  • private pure function get_last_tgt_Excite_3_t(exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_3_t), intent(in) :: exc

    Return Value integer

public interface set_last_tgt

Set the last target of a non trivial excitation.

  • private pure subroutine set_last_tgt_Excite_1_t(exc, tgt)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_1_t), intent(inout) :: exc
    integer, intent(in) :: tgt
  • private pure subroutine set_last_tgt_Excite_2_t(exc, tgt)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_2_t), intent(inout) :: exc
    integer, intent(in) :: tgt
  • private pure subroutine set_last_tgt_Excite_3_t(exc, tgt)

    Arguments

    Type IntentOptional Attributes Name
    type(Excite_3_t), intent(inout) :: exc
    integer, intent(in) :: tgt

public interface excite

Perform the excitation on a given determinant.

It is assumed that the excitations are non trivial. I.e. for single excitations source /= target and for double excitations the set of sources and targets has to be disjoint.

public interface ilut_excite

  • private pure function excite_Ilut_t_Excite_0_t(ilut_I, exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=n_int), intent(in) :: ilut_I(:)
    type(Excite_0_t), intent(in) :: exc

    Return Value integer(kind=n_int), (0:size(ilut_I)-1)

  • private pure function excite_Ilut_t_Excite_1_t(ilut_I, exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=n_int), intent(in) :: ilut_I(:)
    type(Excite_1_t), intent(in) :: exc

    Return Value integer(kind=n_int), (0:size(ilut_I)-1)

  • private pure function excite_Ilut_t_Excite_2_t(ilut_I, exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=n_int), intent(in) :: ilut_I(:)
    type(Excite_2_t), intent(in) :: exc

    Return Value integer(kind=n_int), (0:size(ilut_I)-1)

  • private pure function excite_Ilut_t_Excite_3_t(ilut_I, exc) result(res)

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=n_int), intent(in) :: ilut_I(:)
    type(Excite_3_t), intent(in) :: exc

    Return Value integer(kind=n_int), (0:size(ilut_I)-1)

public interface get_excitation

  • private subroutine get_excitation_old(nI, nJ, IC, exc, tParity)

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: nI(nEl)
    integer, intent(in) :: nJ(nEl)
    integer, intent(in) :: IC
    integer, intent(out) :: exc(2,maxExcit)
    logical, intent(out) :: tParity
  • private subroutine get_excitation_new(nI, nJ, IC, exc, tParity)

    Create an excitation from nI to nJ where the excitation level is already known.

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: nI(nEl)

    Two Slater determinants in nI format.

    integer, intent(in) :: nJ(nEl)

    Two Slater determinants in nI format.

    integer, intent(in) :: IC

    The excitation level. (1=Excite_1_t, 2=Excite_2_t, …)

    class(Excitation_t), intent(out), allocatable :: exc

    An excitation of type excitation_t. By using select type(exc) one can select the actual type at runtime and statically dispatch as much as possible at compile time.

    logical, intent(out) :: tParity

    The parity of the excitation.


Derived Types

type, public ::  Excitation_t

Abstract base class for excitations.

type, public, extends(Excitation_t) ::  Excite_0_t

Represents the orbital indices of a 0-order excitation The array is sorted like: [srcs, tgts]

Components

Type Visibility Attributes Name Initial
integer, public :: val(2,0) = UNKNOWN

type, public, extends(Excitation_t) ::  Excite_1_t

Represents the orbital indices of a 1-order excitation The array is sorted like: [srcs, tgts]

Components

Type Visibility Attributes Name Initial
integer, public :: val(2,1) = UNKNOWN

Constructor

Additional constructors for the excitation types from integers instead of an integer array.

Read more…
private pure function from_integer_Excite_1_t (src, tgt)

type, public, extends(Excitation_t) ::  Excite_2_t

Represents the orbital indices of a 2-order excitation The array is sorted like: [srcs, tgts]

Components

Type Visibility Attributes Name Initial
integer, public :: val(2,2) = UNKNOWN

Constructor

Additional constructors for the excitation types from integers instead of an integer array.

Read more…
private pure function from_integer_Excite_2_t (src1, tgt1, src2, tgt2)

type, public, extends(Excitation_t) ::  Excite_3_t

Represents the orbital indices of a 3-order excitation The array is sorted like: [srcs, tgts]

Components

Type Visibility Attributes Name Initial
integer, public :: val(2,3) = UNKNOWN

Constructor

Additional constructors for the excitation types from integers instead of an integer array.

Read more…
private pure function from_integer_Excite_3_t (src1, tgt1, src2, tgt2, src3, tgt3)

type, public, extends(Excitation_t) ::  Excite_Further_t

Represents an excitation with so many different indices, it has to be zero

Components

Type Visibility Attributes Name Initial
integer, public :: val(2,0) = UNKNOWN

Functions

private elemental function defined_Excite_0_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_0_t), intent(in) :: exc

Return Value logical

private elemental function is_sorted_Excite_0_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_0_t), intent(in) :: exc

Return Value logical

private elemental function is_canonical_Excite_0_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_0_t), intent(in) :: exc

Return Value logical

private elemental function spin_allowed_Excite_0_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_0_t), intent(in) :: exc

Return Value logical

private pure function occupation_allowed_Excite_0_t(nI, exc) result(res)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nI(:)
type(Excite_0_t), intent(in) :: exc

Return Value logical

private elemental function canonicalize_Excite_0_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_0_t), intent(in) :: exc

Return Value type(Excite_0_t)

private elemental function defined_Excite_1_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_1_t), intent(in) :: exc

Return Value logical

private elemental function is_sorted_Excite_1_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_1_t), intent(in) :: exc

Return Value logical

private elemental function is_canonical_Excite_1_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_1_t), intent(in) :: exc

Return Value logical

private elemental function spin_allowed_Excite_1_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_1_t), intent(in) :: exc

Return Value logical

private pure function occupation_allowed_Excite_1_t(nI, exc) result(res)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nI(:)
type(Excite_1_t), intent(in) :: exc

Return Value logical

private elemental function canonicalize_Excite_1_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_1_t), intent(in) :: exc

Return Value type(Excite_1_t)

private elemental function defined_Excite_2_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_2_t), intent(in) :: exc

Return Value logical

private elemental function is_sorted_Excite_2_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_2_t), intent(in) :: exc

Return Value logical

private elemental function is_canonical_Excite_2_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_2_t), intent(in) :: exc

Return Value logical

private elemental function spin_allowed_Excite_2_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_2_t), intent(in) :: exc

Return Value logical

private pure function occupation_allowed_Excite_2_t(nI, exc) result(res)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nI(:)
type(Excite_2_t), intent(in) :: exc

Return Value logical

private elemental function canonicalize_Excite_2_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_2_t), intent(in) :: exc

Return Value type(Excite_2_t)

private elemental function defined_Excite_3_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_3_t), intent(in) :: exc

Return Value logical

private elemental function is_sorted_Excite_3_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_3_t), intent(in) :: exc

Return Value logical

private elemental function is_canonical_Excite_3_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_3_t), intent(in) :: exc

Return Value logical

private elemental function spin_allowed_Excite_3_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_3_t), intent(in) :: exc

Return Value logical

private pure function occupation_allowed_Excite_3_t(nI, exc) result(res)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nI(:)
type(Excite_3_t), intent(in) :: exc

Return Value logical

private elemental function canonicalize_Excite_3_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_3_t), intent(in) :: exc

Return Value type(Excite_3_t)

public elemental function dyn_defined(exc) result(res)

Arguments

Type IntentOptional Attributes Name
class(Excitation_t), intent(in) :: exc

Return Value logical

private pure function from_integer_Excite_1_t(src, tgt) result(res)

Arguments

Type IntentOptional Attributes Name
integer, intent(in), optional :: src
integer, intent(in), optional :: tgt

Return Value type(Excite_1_t)

private pure function from_integer_Excite_2_t(src1, tgt1, src2, tgt2) result(res)

Arguments

Type IntentOptional Attributes Name
integer, intent(in), optional :: src1
integer, intent(in), optional :: tgt1
integer, intent(in), optional :: src2
integer, intent(in), optional :: tgt2

Return Value type(Excite_2_t)

private pure function from_integer_Excite_3_t(src1, tgt1, src2, tgt2, src3, tgt3) result(res)

Arguments

Type IntentOptional Attributes Name
integer, intent(in), optional :: src1
integer, intent(in), optional :: tgt1
integer, intent(in), optional :: src2
integer, intent(in), optional :: tgt2
integer, intent(in), optional :: src3
integer, intent(in), optional :: tgt3

Return Value type(Excite_3_t)

public pure function create_excitation(IC, ex) result(exc)

Create an excitation from an excitation matrix and excitation level IC

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: IC

The excitation level. (1=Excite_1_t, 2=Excite_2_t, …)

integer, intent(in), optional :: ex(2,ic)

An excitation matrix as in the %val component of the excitation types.

Return Value class(Excitation_t), allocatable

An excitation of type excitation_t. By using select type(exc) one can select the actual type at runtime and statically dispatch as much as possible at runtime.

private pure function get_last_tgt_Excite_1_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_1_t), intent(in) :: exc

Return Value integer

private pure function get_last_tgt_Excite_2_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_2_t), intent(in) :: exc

Return Value integer

private pure function get_last_tgt_Excite_3_t(exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(Excite_3_t), intent(in) :: exc

Return Value integer

private pure function excite_nI_Excite_0_t(det_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: det_I(:)
type(Excite_0_t), intent(in) :: exc

Return Value integer, (size(det_I))

private pure function excite_nI_Excite_1_t(det_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: det_I(:)
type(Excite_1_t), intent(in) :: exc

Return Value integer, (size(det_I))

private pure function excite_nI_Excite_2_t(det_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: det_I(:)
type(Excite_2_t), intent(in) :: exc

Return Value integer, (size(det_I))

private pure function excite_nI_Excite_3_t(det_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: det_I(:)
type(Excite_3_t), intent(in) :: exc

Return Value integer, (size(det_I))

private pure function excite_SpinOrbIdx_t_Excite_0_t(det_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(SpinOrbIdx_t), intent(in) :: det_I
type(Excite_0_t), intent(in) :: exc

Return Value type(SpinOrbIdx_t)

private pure function excite_SpinOrbIdx_t_Excite_1_t(det_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(SpinOrbIdx_t), intent(in) :: det_I
type(Excite_1_t), intent(in) :: exc

Return Value type(SpinOrbIdx_t)

private pure function excite_SpinOrbIdx_t_Excite_2_t(det_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(SpinOrbIdx_t), intent(in) :: det_I
type(Excite_2_t), intent(in) :: exc

Return Value type(SpinOrbIdx_t)

private pure function excite_SpinOrbIdx_t_Excite_3_t(det_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(SpinOrbIdx_t), intent(in) :: det_I
type(Excite_3_t), intent(in) :: exc

Return Value type(SpinOrbIdx_t)

private pure function excite_Ilut_t_Excite_0_t(ilut_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
integer(kind=n_int), intent(in) :: ilut_I(:)
type(Excite_0_t), intent(in) :: exc

Return Value integer(kind=n_int), (0:size(ilut_I)-1)

private pure function excite_Ilut_t_Excite_1_t(ilut_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
integer(kind=n_int), intent(in) :: ilut_I(:)
type(Excite_1_t), intent(in) :: exc

Return Value integer(kind=n_int), (0:size(ilut_I)-1)

private pure function excite_Ilut_t_Excite_2_t(ilut_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
integer(kind=n_int), intent(in) :: ilut_I(:)
type(Excite_2_t), intent(in) :: exc

Return Value integer(kind=n_int), (0:size(ilut_I)-1)

private pure function excite_Ilut_t_Excite_3_t(ilut_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
integer(kind=n_int), intent(in) :: ilut_I(:)
type(Excite_3_t), intent(in) :: exc

Return Value integer(kind=n_int), (0:size(ilut_I)-1)

public pure function dyn_excite(det_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
type(SpinOrbIdx_t), intent(in) :: det_I
class(Excitation_t), intent(in) :: exc

Return Value type(SpinOrbIdx_t)

public pure function dyn_nI_excite(det_I, exc) result(res)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: det_I(:)
class(Excitation_t), intent(in) :: exc

Return Value integer, (size(det_I))


Subroutines

private elemental subroutine make_canonical_Excite_0_t(exc, even_swaps)

Arguments

Type IntentOptional Attributes Name
type(Excite_0_t), intent(inout) :: exc
logical, intent(out) :: even_swaps

private elemental subroutine make_canonical_Excite_1_t(exc, even_swaps)

Arguments

Type IntentOptional Attributes Name
type(Excite_1_t), intent(inout) :: exc
logical, intent(out) :: even_swaps

private elemental subroutine make_canonical_Excite_2_t(exc, even_swaps)

Arguments

Type IntentOptional Attributes Name
type(Excite_2_t), intent(inout) :: exc
logical, intent(out) :: even_swaps

private elemental subroutine make_canonical_Excite_3_t(exc, even_swaps)

Arguments

Type IntentOptional Attributes Name
type(Excite_3_t), intent(inout) :: exc
logical, intent(out) :: even_swaps

private subroutine get_excitation_new(nI, nJ, IC, exc, tParity)

Create an excitation from nI to nJ where the excitation level is already known.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nI(nEl)

Two Slater determinants in nI format.

integer, intent(in) :: nJ(nEl)

Two Slater determinants in nI format.

integer, intent(in) :: IC

The excitation level. (1=Excite_1_t, 2=Excite_2_t, …)

class(Excitation_t), intent(out), allocatable :: exc

An excitation of type excitation_t. By using select type(exc) one can select the actual type at runtime and statically dispatch as much as possible at compile time.

logical, intent(out) :: tParity

The parity of the excitation.

private subroutine get_excitation_old(nI, nJ, IC, exc, tParity)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nI(nEl)
integer, intent(in) :: nJ(nEl)
integer, intent(in) :: IC
integer, intent(out) :: exc(2,maxExcit)
logical, intent(out) :: tParity

public subroutine get_bit_excitation(iLutI, iLutJ, IC, exc, tParity)

Create canonical excitation from ilutI to ilutJ where the excitation level is already known.

Arguments

Type IntentOptional Attributes Name
integer(kind=n_int), intent(in) :: iLutI(0:NIfTot)

Two Slater determinants in bitmask format.

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

Two Slater determinants in bitmask format.

integer, intent(in) :: IC

The excitation level. (1=Excite_1_t, 2=Excite_2_t, …)

class(Excitation_t), intent(out), allocatable :: exc

The parity of the excitation.

logical, intent(out) :: tParity

private pure subroutine set_last_tgt_Excite_1_t(exc, tgt)

Arguments

Type IntentOptional Attributes Name
type(Excite_1_t), intent(inout) :: exc
integer, intent(in) :: tgt

private pure subroutine set_last_tgt_Excite_2_t(exc, tgt)

Arguments

Type IntentOptional Attributes Name
type(Excite_2_t), intent(inout) :: exc
integer, intent(in) :: tgt

private pure subroutine set_last_tgt_Excite_3_t(exc, tgt)

Arguments

Type IntentOptional Attributes Name
type(Excite_3_t), intent(inout) :: exc
integer, intent(in) :: tgt