MPI-SCATCI 2.0
An MPI version of SCATCI
Loading...
Searching...
No Matches
Symbolic_module::SymbolicElementVector Type Reference

This class handles the storage symbolic elements. More...

Inheritance diagram for Symbolic_module::SymbolicElementVector:
Collaboration diagram for Symbolic_module::SymbolicElementVector:

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.

Detailed Description

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.

Member Function/Subroutine Documentation

◆ add_symbols()

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.

Authors
A Al-Refaie
Date
2017
Parameters
[in,out]thisThe symbolic vector to modify.
[in]rhsThe 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.

◆ check_bounds()

procedure, private Symbolic_module::SymbolicElementVector::check_bounds ( class(symbolicelementvector) this,
integer, intent(in) i )
private

Range check.

Authors
A Al-Refaie
Date
2017

Simply checks the index and wheter it exists within the array.

Parameters
[in,out]thisVector object to query.
[in]iThe index we wish to access

Definition at line 87 of file Symbolic_Module.f90.

◆ check_constructed()

procedure, private Symbolic_module::SymbolicElementVector::check_constructed ( class(symbolicelementvector) this)
private

A simple class to check if this has been properly constructed.

Authors
A Al-Refaie
Date
2017

Definition at line 89 of file Symbolic_Module.f90.

◆ check_same_integral()

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.

Authors
A Al-Refaie
Date
2017
Parameters
[in,out]thisVector object to query.
[in]integralPacked integral label
[out]idxThe index to the electron integral array, -1 if not found, positive otherwise
Returns
check_same_integral True: we found one the same one. False: there isn't one

Definition at line 77 of file Symbolic_Module.f90.

◆ clear()

procedure, public Symbolic_module::SymbolicElementVector::clear ( class(symbolicelementvector) this)

Clear array.

Authors
A Al-Refaie
Date
2017

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.

◆ compare()

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.

Authors
J Benda
Date
2019

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.

Parameters
[in]thisSymbolic vector containing the electron_integral storage.
[in]iPosition of the first integral index set.
[in]jPosition of the first integral index set.
[in]dataIntegral index set used for comparing with sets being processed.
Returns
-1/0/+1 as a lexicographical spaceship operator applied on the index sets.

Definition at line 68 of file Symbolic_Module.f90.

◆ construct()

procedure, public Symbolic_module::SymbolicElementVector::construct ( class(symbolicelementvector) this,
real(wp), intent(in), optional threshold,
integer, intent(in), optional initial_size )

Constructs the class.

Authors
A Al-Refaie
Date
2017

Constructs the class by allocating space for the electron integrals.

Parameters
[in,out]thisVector object to initialize.
[in]thresholdThe mininum integral coefficient threshold we should store
[in]initial_sizeDeprecated, doesnt do anything

Definition at line 71 of file Symbolic_Module.f90.

◆ destroy()

procedure, public Symbolic_module::SymbolicElementVector::destroy ( class(symbolicelementvector) this)

Cleans up the class by deallocating arrays.

Authors
A Al-Refaie
Date
2017

Definition at line 88 of file Symbolic_Module.f90.

◆ expand_array()

procedure, private Symbolic_module::SymbolicElementVector::expand_array ( class(symbolicelementvector) this)
private

Array expansion subroutine.

Authors
A Al-Refaie
Date
2017

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.

◆ get_coeff_and_integral()

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.

Authors
A Al-Refaie
Date
2017

Definition at line 82 of file Symbolic_Module.f90.

◆ get_coefficient()

procedure, public Symbolic_module::SymbolicElementVector::get_coefficient ( class(symbolicelementvector) this,
integer, intent(in) idx )

Get coefficient at specific index.

Authors
A Al-Refaie
Date
2017

Definition at line 81 of file Symbolic_Module.f90.

◆ get_integral_label()

procedure, public Symbolic_module::SymbolicElementVector::get_integral_label ( class(symbolicelementvector) this,
integer, intent(in) idx )

Get integral label at specific index.

Authors
A Al-Refaie
Date
2017

Definition at line 78 of file Symbolic_Module.f90.

◆ get_size()

procedure, public Symbolic_module::SymbolicElementVector::get_size ( class(symbolicelementvector) this)

Returns the number of symbolic elements stored.

Authors
A Al-Refaie
Date
2017

Definition at line 83 of file Symbolic_Module.f90.

◆ insert_ijklm_symbol()

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.

Authors
A Al-Refaie
Date
2017

This subroutine is used to insert unpacked integral labels. Wraps insert_symbol by automatically packing.

Parameters
[in,out]thisVector object to update.
[in]i,j,k,lThe integral labels
[in]mPositron label
[in]coeffThe integral coefficient
[in]check_same_Deprecated, orginally used to debug but now does nothing

Definition at line 72 of file Symbolic_Module.f90.

◆ insert_symbol()

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.

Authors
A Al-Refaie
Date
2017

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.

Parameters
[in,out]thisVector object to update.
[in]integral_labelPacked integral label
[in]coeffThe integral coefficient
[in]check_same_Deprecated, orginally used to debug but now does nothing

Definition at line 73 of file Symbolic_Module.f90.

◆ is_empty()

procedure, public Symbolic_module::SymbolicElementVector::is_empty ( class(symbolicelementvector) this)

Emptiness check.

Authors
A Al-Refaie
Date
2017

Simply returns whether we are storing integrals and coeffs or not.

Returns
True if empty or False if we have any symbols.

Definition at line 75 of file Symbolic_Module.f90.

◆ modify_coeff()

procedure, public Symbolic_module::SymbolicElementVector::modify_coeff ( class(symbolicelementvector) this,
integer, intent(in) idx,
real(wp) coeff )

Update coeff with contribution.

Authors
A Al-Refaie
Date
2017

Add contribution to coeff at given index.

Definition at line 80 of file Symbolic_Module.f90.

◆ print()

procedure, public Symbolic_module::SymbolicElementVector::print ( class(symbolicelementvector) this)

Print currently stored symbols.

Authors
A Al-Refaie
Date
2017

Definition at line 85 of file Symbolic_Module.f90.

◆ remove_symbol_at()

procedure, public Symbolic_module::SymbolicElementVector::remove_symbol_at ( class(symbolicelementvector) this,
integer, intent(in) idx )

Removes an integral and coefficient.

Author
A Al-Refaie
Date
2017

Never been used and pretty much useless.

Definition at line 74 of file Symbolic_Module.f90.

◆ synchronize_symbols()

procedure, public Symbolic_module::SymbolicElementVector::synchronize_symbols ( class(symbolicelementvector) this)

Definition at line 79 of file Symbolic_Module.f90.

Member Data Documentation

◆ coeffs

real(wp), dimension(:), allocatable Symbolic_module::SymbolicElementVector::coeffs

The coefficients of the integral.

Definition at line 60 of file Symbolic_Module.f90.

◆ constructed

logical Symbolic_module::SymbolicElementVector::constructed = .false.

Whether this class has been constructed.

Definition at line 62 of file Symbolic_Module.f90.

◆ electron_integral

integer(longint), dimension(:,:), allocatable Symbolic_module::SymbolicElementVector::electron_integral
private

The packed integral storage.

Definition at line 59 of file Symbolic_Module.f90.

◆ expand_size

integer Symbolic_module::SymbolicElementVector::expand_size = 10

How much we have to expand each.

Definition at line 65 of file Symbolic_Module.f90.

◆ max_capacity

integer Symbolic_module::SymbolicElementVector::max_capacity = 0

The number of free slots in the array.

Definition at line 64 of file Symbolic_Module.f90.

◆ n

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.

◆ threshold

real(wp) Symbolic_module::SymbolicElementVector::threshold = 0.0

The integral threshold.

Definition at line 63 of file Symbolic_Module.f90.


The documentation for this type was generated from the following file: