DistinctDoubleType_t Derived Type

type, public, extends(EnumBase_t) :: DistinctDoubleType_t

This represents a distinct double excitation (compare Table 4.3 of [@DobrautzThesis2019]) A distinct double excitation consists of the two double excitations which are connected by exchange .

Because of we can order such that . The matrix element requires and . For the notation of distinct double excitation we will order such that . In the following we assume .

Example: The distinct type iijk consists of and . The first is a non-overlap double excitation with a single Weight on i and a single raising excitation from k to j; the latter is a fullstart_L_to_R i.e.


Components

Type Visibility Attributes Name Initial
integer, public :: val
type(ExcitationType_t), public :: repr

The two subtypes usually do not differ. If the two subtypes differ, then it is always a pairing with non_overlap. For this reason we can choose one representative.

For example:

  • kikj and kjki are both fullstop_lowering.
  • ijkl is non_overlap, the corresponding exchanged excitation ilkj is double_R_to_L_to_R, hence we choose double_R_to_L_to_R as representation.

Note

Older code does not clearly distinguish between DistinctDoubleExcitation_t and ExcitationType_t, so the repr is particularly useful here.

type(ExcitationType_t), public :: other

The other Excitation that is not the representative

character(len=2), public :: label

The label in Table 4.3 of [@DobrautzThesis2019]

integer, public :: idx_for_repr(4) = [1, 2, 3, 4]

Store the permutation for outputting the representation index

If we have for example the DistinctDoubleType_t jilk, then the index of the representation shall refer to the double_L_to_R_to_L excitation and be jkli instead of the non_overlap part which would be jilk. The swap is only relevant for distinct doubles with a non-overlap excitation. Hence we default-initialize to the identity permutation.


Constructor

public interface DistinctDoubleType_t


Type-Bound Procedures

generic, public :: operator(==) => eq_EnumBase_t

  • private elemental function eq_EnumBase_t(this, other)

    Arguments

    Type IntentOptional Attributes Name
    class(EnumBase_t), intent(in) :: this
    class(EnumBase_t), intent(in) :: other

    Return Value logical

generic, public :: operator(/=) => neq_EnumBase_t

  • private elemental function neq_EnumBase_t(this, other)

    Arguments

    Type IntentOptional Attributes Name
    class(EnumBase_t), intent(in) :: this
    class(EnumBase_t), intent(in) :: other

    Return Value logical