|
MPI-SCATCI 2.0
An MPI version of SCATCI
|
This class handles the storage symbolic elements. More...


Public Member Functions | |
| procedure, public | compare (this, i, j, data) |
| Compare two integral index sets. | |
| procedure, public | construct (this, threshold, initial_size) |
| Constructs the class. | |
| procedure, public | insert_ijklm_symbol (this, i, j, k, l, m, coeff, check_same_) |
| Insert unpacked integral labels. | |
| procedure, public | insert_symbol (this, integral_label, coeff, check_same_) |
| Insert a packed integral symbol into the class. | |
| procedure, public | remove_symbol_at (this, idx) |
| Removes an integral and coefficient. | |
| procedure, public | is_empty (this) |
| Emptiness check. | |
| procedure, public | clear (this) |
| Clear array. | |
| procedure, public | check_same_integral (this, integral, idx) |
| A function to check whether the same integral label exists. | |
| procedure, public | get_integral_label (this, idx) |
| Get integral label at specific index. | |
| procedure, public | synchronize_symbols (this) |
| procedure, public | modify_coeff (this, idx, coeff) |
| Update coeff with contribution. | |
| procedure, public | get_coefficient (this, idx) |
| Get coefficient at specific index. | |
| procedure, public | get_coeff_and_integral (this, idx, coeff, label) |
| Get both label and coeffcient at specific index. | |
| procedure, public | get_size (this) |
| Returns the number of symbolic elements stored. | |
| procedure, public | add_symbols (this, rhs, alpha_) |
| This inserts one symbolic vector into another scaled by a coefficient. | |
| procedure, public | print (this) |
| Print currently stored symbols. | |
| procedure, public | destroy (this) |
| Cleans up the class by deallocating arrays. | |
Public Attributes | |
| real(wp), dimension(:), allocatable | coeffs |
| The coefficients of the integral. | |
| integer | n = 0 |
| Number of elements in the array of both the integral and coefficients. | |
| logical | constructed = .false. |
| Whether this class has been constructed. | |
| real(wp) | threshold = 0.0 |
| The integral threshold. | |
| integer | max_capacity = 0 |
| The number of free slots in the array. | |
| integer | expand_size = 10 |
| How much we have to expand each. | |
Private Member Functions | |
| procedure, private | expand_array (this) |
| Array expansion subroutine. | |
| procedure, private | check_bounds (this, i) |
| Range check. | |
| procedure, private | check_constructed (this) |
| A simple class to check if this has been properly constructed. | |
Private Attributes | |
| integer(longint), dimension(:,:), allocatable | electron_integral |
| The packed integral storage. | |
This class handles the storage symbolic elements.
This class handles the storage symbolic elements and also expands the vector size if we have reached max capacity Additionaly, uses a binary search tree to perform a binary search on integrals labels during insertion to ensure no repeating elements this is automatic and removes the compression stage in the original SCATCI code.
Definition at line 57 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::add_symbols | ( | class(symbolicelementvector) | this, |
| class(symbolicelementvector), intent(in) | rhs, | ||
| real(wp), intent(in), optional | alpha_ ) |
This inserts one symbolic vector into another scaled by a coefficient.
| [in,out] | this | The symbolic vector to modify. |
| [in] | rhs | The symbolic vector to add into this class. |
| [in] | alpha_ | The scaling value to be applied to each coefficient. |
Definition at line 84 of file Symbolic_Module.f90.
|
private |
Range check.
Simply checks the index and wheter it exists within the array.
| [in,out] | this | Vector object to query. |
| [in] | i | The index we wish to access |
Definition at line 87 of file Symbolic_Module.f90.
|
private |
A simple class to check if this has been properly constructed.
Definition at line 89 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::check_same_integral | ( | class(symbolicelementvector), intent(in) | this, |
| integer(longint), dimension(nidx), intent(in), target | integral, | ||
| integer, intent(out) | idx ) |
A function to check whether the same integral label exists.
| [in,out] | this | Vector object to query. |
| [in] | integral | Packed integral label |
| [out] | idx | The index to the electron integral array, -1 if not found, positive otherwise |
Definition at line 77 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::clear | ( | class(symbolicelementvector) | this | ) |
Clear array.
Clears our array (not really but it essential resets the symbol counter to zero, which is way quicker).
Definition at line 76 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::compare | ( | class(symbolicelementvector), intent(in) | this, |
| integer, intent(in) | i, | ||
| integer, intent(in) | j, | ||
| type(c_ptr), intent(in), optional | data ) |
Compare two integral index sets.
This is the predicate (order-defining function) used by the binary search tree. Given two pointers into the electron integral array, it returns 0 when the corresponding integral index sets are equal, -1 when the first one is (lexicographically) less, and +1 when the first one is (lexicographically) greater.
When either of the indices is non-positive, the dummy value pointed to by the optional argument is used instead.
| [in] | this | Symbolic vector containing the electron_integral storage. |
| [in] | i | Position of the first integral index set. |
| [in] | j | Position of the first integral index set. |
| [in] | data | Integral index set used for comparing with sets being processed. |
Definition at line 68 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::construct | ( | class(symbolicelementvector) | this, |
| real(wp), intent(in), optional | threshold, | ||
| integer, intent(in), optional | initial_size ) |
Constructs the class.
Constructs the class by allocating space for the electron integrals.
| [in,out] | this | Vector object to initialize. |
| [in] | threshold | The mininum integral coefficient threshold we should store |
| [in] | initial_size | Deprecated, doesnt do anything |
Definition at line 71 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::destroy | ( | class(symbolicelementvector) | this | ) |
Cleans up the class by deallocating arrays.
Definition at line 88 of file Symbolic_Module.f90.
|
private |
Array expansion subroutine.
It simply copies the coeffcieint and integral array into a temporary one, reallocates a new array increased by expand_size and then recopies the elements and updates max capacity.
Definition at line 86 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::get_coeff_and_integral | ( | class(symbolicelementvector), intent(in) | this, |
| integer, intent(in) | idx, | ||
| real(wp), intent(out) | coeff, | ||
| integer(longint), dimension(nidx), intent(out) | label ) |
Get both label and coeffcient at specific index.
Definition at line 82 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::get_coefficient | ( | class(symbolicelementvector) | this, |
| integer, intent(in) | idx ) |
| procedure, public Symbolic_module::SymbolicElementVector::get_integral_label | ( | class(symbolicelementvector) | this, |
| integer, intent(in) | idx ) |
| procedure, public Symbolic_module::SymbolicElementVector::get_size | ( | class(symbolicelementvector) | this | ) |
Returns the number of symbolic elements stored.
Definition at line 83 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::insert_ijklm_symbol | ( | class(symbolicelementvector) | this, |
| integer, intent(in) | i, | ||
| integer, intent(in) | j, | ||
| integer, intent(in) | k, | ||
| integer, intent(in) | l, | ||
| integer, intent(in) | m, | ||
| real(wp), intent(in) | coeff, | ||
| logical, intent(in), optional | check_same_ ) |
Insert unpacked integral labels.
This subroutine is used to insert unpacked integral labels. Wraps insert_symbol by automatically packing.
| [in,out] | this | Vector object to update. |
| [in] | i,j,k,l | The integral labels |
| [in] | m | Positron label |
| [in] | coeff | The integral coefficient |
| [in] | check_same_ | Deprecated, orginally used to debug but now does nothing |
Definition at line 72 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::insert_symbol | ( | class(symbolicelementvector) | this, |
| integer(longint), dimension(nidx), intent(in) | integral_label, | ||
| real(wp), intent(in) | coeff, | ||
| logical, intent(in), optional | check_same_ ) |
Insert a packed integral symbol into the class.
This subroutine is used to insert the integral into the class, it performs a check to see if it exists, if not then it will insert (and expand if needed) into the integral array. Otherwise it will simply add the coefficients to found integral index.
| [in,out] | this | Vector object to update. |
| [in] | integral_label | Packed integral label |
| [in] | coeff | The integral coefficient |
| [in] | check_same_ | Deprecated, orginally used to debug but now does nothing |
Definition at line 73 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::is_empty | ( | class(symbolicelementvector) | this | ) |
Emptiness check.
Simply returns whether we are storing integrals and coeffs or not.
Definition at line 75 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::modify_coeff | ( | class(symbolicelementvector) | this, |
| integer, intent(in) | idx, | ||
| real(wp) | coeff ) |
Update coeff with contribution.
Add contribution to coeff at given index.
Definition at line 80 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::print | ( | class(symbolicelementvector) | this | ) |
| procedure, public Symbolic_module::SymbolicElementVector::remove_symbol_at | ( | class(symbolicelementvector) | this, |
| integer, intent(in) | idx ) |
Removes an integral and coefficient.
Never been used and pretty much useless.
Definition at line 74 of file Symbolic_Module.f90.
| procedure, public Symbolic_module::SymbolicElementVector::synchronize_symbols | ( | class(symbolicelementvector) | this | ) |
Definition at line 79 of file Symbolic_Module.f90.
| real(wp), dimension(:), allocatable Symbolic_module::SymbolicElementVector::coeffs |
The coefficients of the integral.
Definition at line 60 of file Symbolic_Module.f90.
| logical Symbolic_module::SymbolicElementVector::constructed = .false. |
Whether this class has been constructed.
Definition at line 62 of file Symbolic_Module.f90.
|
private |
The packed integral storage.
Definition at line 59 of file Symbolic_Module.f90.
| integer Symbolic_module::SymbolicElementVector::expand_size = 10 |
How much we have to expand each.
Definition at line 65 of file Symbolic_Module.f90.
| integer Symbolic_module::SymbolicElementVector::max_capacity = 0 |
The number of free slots in the array.
Definition at line 64 of file Symbolic_Module.f90.
| integer Symbolic_module::SymbolicElementVector::n = 0 |
Number of elements in the array of both the integral and coefficients.
Definition at line 61 of file Symbolic_Module.f90.
| real(wp) Symbolic_module::SymbolicElementVector::threshold = 0.0 |
The integral threshold.
Definition at line 63 of file Symbolic_Module.f90.