#include "macros.h" module ras_data use constants implicit none ! The five parameters defining a RAS space. type ras_parameters ! The number of (spatial) orbitals in each of the RAS spaces. integer :: size_1, size_2, size_3 ! The minimum number of electrons (both alpha and beta) in RAS1, ! and the maximum number in RAS3. integer :: min_1, max_3 ! The lower and upper bounds on the number of electrons that occupy ! be in ras1 orbitals for each string. integer :: lower_ras1, upper_ras1 ! The total number of ras classes. integer :: num_classes ! cum_clasees(i) holds the cumulative number of strings in classes ! up to (and *not* including) class i. integer, allocatable, dimension(:) :: cum_classes ! The total number of strings (there are the same number of alpha ! and beta strings for now). integer :: num_strings ! If you input the number of electrons in RAS1 as the first index ! and the number of electrons in RAS3 as the second index then ! this array will give you the label of corresponding class. integer, allocatable, dimension(:, :) :: class_label end type ! A RAS class refers to a collection of strings with an fixed number ! of electrons in RAS1, RAS2 and RAS3. Thus, the collection of all ! RAS strings will, in general, be formed from many RAS classes. type ras_class_data ! The number of electrons in each of RAS1, RAS2 and RAS3. integer :: nelec_1, nelec_2, nelec_3 ! The total number of strings in this class. integer :: class_size ! The vertex weights used in the addressing scheme. integer, allocatable, dimension(:, :) :: vertex_weights ! The number of classes which can be combined with this one in ! a full determinant to give the correct overall RAS parameters. integer :: num_comb ! The labels of the classes which can be combined with this one. integer, allocatable, dimension(:) :: allowed_combns ! A one-to-one map from the address of a string, as obtained by the ! function get_address, to one where states are sorted by their symmetry. integer, allocatable, dimension(:) :: address_map ! (class_size) ! The number of strings in this class with each of the symmetry labels. integer :: num_sym(0:7) ! cum_sym(i) holds the cumulative number of strings in this class with ! symmetry labels up to (and *not* including) i. integer :: cum_sym(0:7) end type type ras_vector ! The elements of a single block of a vector. real(dp), allocatable, dimension(:, :) :: elements end type type ras_factors ! The elements of a single block of a vector. real(dp), allocatable, dimension(:) :: elements end type type direct_ci_excit ! The addresses of the excitations. integer, allocatable, dimension(:) :: excit_ind ! The corresponding parities for the excitations. integer, allocatable, dimension(:) :: par ! orb(1:2,i) holds the orbitals involved in excitation i. integer, allocatable, dimension(:, :) :: orbs ! The total number of excitations. integer :: nexcit end type direct_ci_excit ! The number of electrons occupying one alpha or beta string. As only ! Ms=0 is implemented, this is just nOccAlpha=nOccBeta=nEl/2 integer :: tot_nelec ! The number of spatial orbitals. integer :: tot_norbs ! The total symmetry of the Hartree-Fock state (always 0 for the only case ! that can be treated so far...) integer :: HFSym_ras ! For a semi-stochastic ras space. type(ras_parameters) :: core_ras ! For a trial-wavefunction ras space. type(ras_parameters) :: trial_ras end module ras_data