MPI-SCATCI
2.0
An MPI version of SCATCI
|
Base Hamiltonian module. More...
Data Types | |
type | basehamiltonian |
This is an abstract class that contains the majority of functionality required to construct hamiltonians. More... | |
interface | generic_build |
Main build routine of the hamiltonian. More... | |
Functions/Subroutines | |
subroutine | construct_base_hamiltonian (this, option, csfs, orbitals, integral) |
Constructs the hamiltonain object and provides all the various componenets required for building. More... | |
subroutine | slater_rules (this, csf_a, csf_b, sym_elements, flag, job_) |
Performs Slater rules and returns symbolic elements. More... | |
subroutine | handle_two_pair (this, dtrs, coeff, sym_element, flag) |
Handles if there are two pairs of spin orbitals that differ. More... | |
subroutine | handle_one_pair (this, dtrs, coeff, sym_element, csf, flag) |
Handles if there are one pair of spin orbitals that differ. More... | |
subroutine | handle_same (this, dtrs, coeff, sym_element, csf, flag) |
Handles if there are no differences between spin orbitals. More... | |
real(wp) function | evaluate_integrals_singular (this, label, coeff, dummy_orb) |
Evaluates a single integral from labels and also checks for dummy orbitals. More... | |
real(wp) function | evaluate_integrals (this, symbolic_elements, dummy_orb) |
Evaluates all integrals from a list of symbolic elements. More... | |
logical function | my_job (this) |
Used by the easy MPI parallelization of slater loops. More... | |
integer function | fast_slat (rep1, rep2, fin1, fin2, num_rep1, num_rep2, spin_orbs, tot_num_spin_orbs) |
? More... | |
Base Hamiltonian module.
Provides an abstract hamiltonian class that has built in functionalities for all inherited hamiltonians.
subroutine hamiltonian_module::construct_base_hamiltonian | ( | class(basehamiltonian), intent(inout) | this, |
class(options), intent(in), target | option, | ||
class(csfobject), dimension(:), intent(in), target | csfs, | ||
class(orbitaltable), intent(in), target | orbitals, | ||
class(baseintegral), intent(in), target | integral | ||
) |
Constructs the hamiltonain object and provides all the various componenets required for building.
[in,out] | this | Hamiltonian object to update. |
[in] | option | An Options class containing run constants |
[in] | csfs | An array of configuration state functions |
[in] | orbitals | An initialized Orbitals class |
[in] | integral | A BaseIntegral class for evaluating symbols |
Definition at line 121 of file Hamiltonian_module.f90.
real(wp) function hamiltonian_module::evaluate_integrals | ( | class(basehamiltonian), intent(inout) | this, |
class(symbolicelementvector), intent(in) | symbolic_elements, | ||
integer, intent(in) | dummy_orb | ||
) |
Evaluates all integrals from a list of symbolic elements.
[in,out] | this | Hamiltonian object to update. |
[in] | symbolic_elements | Symbolic elements to be evaluated. |
[in] | dummy_orb | Check wheter to ignore the integral if it contains a dummy orbital of this value. |
Definition at line 457 of file Hamiltonian_module.f90.
real(wp) function hamiltonian_module::evaluate_integrals_singular | ( | class(basehamiltonian), intent(inout) | this, |
integer(longint), dimension(2), intent(in) | label, | ||
real(wp), intent(in) | coeff, | ||
integer, intent(in) | dummy_orb | ||
) |
Evaluates a single integral from labels and also checks for dummy orbitals.
[in,out] | this | Hamiltonian object to update. |
[in] | label | A packed integral label |
[in] | coeff | The computed coefficients from the Slater rules |
[in] | dummy_orb | Check wheter to ignore the integral if it contains a dummy orbital of this value |
Definition at line 413 of file Hamiltonian_module.f90.
integer function hamiltonian_module::fast_slat | ( | integer, dimension(num_rep1), intent(in) | rep1, |
integer, dimension(num_rep2), intent(in) | rep2, | ||
integer, dimension(num_rep1), intent(in) | fin1, | ||
integer, dimension(num_rep2), intent(in) | fin2, | ||
integer, intent(in) | num_rep1, | ||
integer, intent(in) | num_rep2, | ||
integer, dimension(tot_num_spin_orbs), intent(inout) | spin_orbs, | ||
integer, intent(in) | tot_num_spin_orbs | ||
) |
subroutine hamiltonian_module::handle_one_pair | ( | class(basehamiltonian) | this, |
integer, dimension(4), intent(inout) | dtrs, | ||
real(wp), intent(in) | coeff, | ||
class(symbolicelementvector) | sym_element, | ||
class(csforbital), intent(in) | csf, | ||
integer, intent(in) | flag | ||
) |
Handles if there are one pair of spin orbitals that differ.
[in,out] | this | Hamiltonian object to query. |
[in] | dtrs | A 4 element array of slater determinants |
[in] | coeff | The computed coefficients from the Slater rules |
[in] | csf | The first CSFs determinant |
[out] | sym_element | Resulting symbolic elements |
[in] | flag | Whether we are doing the diagonal or not |
Definition at line 258 of file Hamiltonian_module.f90.
subroutine hamiltonian_module::handle_same | ( | class(basehamiltonian) | this, |
integer, dimension(4), intent(inout) | dtrs, | ||
real(wp), intent(in) | coeff, | ||
class(symbolicelementvector) | sym_element, | ||
class(csforbital), intent(in) | csf, | ||
integer, intent(in) | flag | ||
) |
Handles if there are no differences between spin orbitals.
[in,out] | this | Hamiltonian object to query. |
[in] | dtrs | A 4 element array of slater determinants |
[in] | coeff | The computed coefficients from the Slater rules |
[in] | csf | The first CSFs determinant |
[out] | sym_element | Resulting symbolic elements |
[in] | flag | Whether we are doing the diagonal or not |
Definition at line 345 of file Hamiltonian_module.f90.
subroutine hamiltonian_module::handle_two_pair | ( | class(basehamiltonian) | this, |
integer, dimension(4), intent(in) | dtrs, | ||
real(wp), intent(in) | coeff, | ||
class(symbolicelementvector) | sym_element, | ||
integer, intent(in) | flag | ||
) |
Handles if there are two pairs of spin orbitals that differ.
[in,out] | this | Hamiltonian object to query. |
[in] | dtrs | A 4 element array of slater determinants that differ. |
[in] | coeff | The computed coefficients from the Slater rules. |
[out] | sym_element | Resulting symbolic elements. |
[in] | flag | Whether we are doing the diagonal or not. |
Definition at line 232 of file Hamiltonian_module.f90.
logical function hamiltonian_module::my_job | ( | class(basehamiltonian) | this | ) |
Used by the easy MPI parallelization of slater loops.
Definition at line 479 of file Hamiltonian_module.f90.
subroutine hamiltonian_module::slater_rules | ( | class(basehamiltonian), intent(in) | this, |
class(csfobject), intent(in) | csf_a, | ||
class(csfobject), intent(in) | csf_b, | ||
class(symbolicelementvector), intent(inout) | sym_elements, | ||
integer, intent(in) | flag, | ||
logical, intent(in), optional | job_ | ||
) |
Performs Slater rules and returns symbolic elements.
Computes the Slater rules and adds them to the symbolic elements class that is provided. Additionaly has an automatic MPI mode by usage of the job_ = .true. keyword. Whilst not faster than manually unrolling a loop, it provides a quick and easy way to fairly effectively parallelize the loop. However this is not OpenMP compatible
[in,out] | this | Hamiltonian object to query. |
[in] | csf_a | First configuration state function to slater |
[in] | csf_b | Second configuration state function to slater |
[out] | sym_elements | Resulting smbolic elements |
[in] | flag | Whether we are doing the diagonal or not |
[in] | job_ | Whether to use the 'easy' MPI split method |
Definition at line 159 of file Hamiltonian_module.f90.