MPI-SCATCI  2.0
An MPI version of SCATCI
symbolic_module Module Reference

Symbolic module. More...

Data Types

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

Functions/Subroutines

integer function bstree_compare (this, i, j, data)
 Compare two integral index sets. More...
 
subroutine check_constructed (this)
 A simple class to check if this has been properly constructed. More...
 
subroutine construct (this, threshold, initial_size)
 Constructs the class. More...
 
logical function check_same_integral (this, integral, idx)
 A function to check whether the same integral label exists. More...
 
subroutine insert_ijklm_symbol (this, i, j, k, l, m, coeff, check_same_)
 Insert unpacked integral labels. More...
 
subroutine insert_symbol (this, integral_label, coeff, check_same_)
 Insert a packed integral symbol into the class. More...
 
subroutine expand_array (this)
 Array expansion subroutine. More...
 
subroutine add_symbols (this, rhs, alpha_)
 This inserts one symbolic vector into another scaled by a coefficient. More...
 
subroutine synchronize_symbols (this)
 
logical function check_bounds (this, i)
 Range check. More...
 
subroutine remove_symbol_at (this, idx)
 Removes an integral and coefficient. More...
 
logical function is_empty (this)
 Emptiness check. More...
 
subroutine clear (this)
 Clear array. More...
 
subroutine modify_coeff (this, idx, coeff)
 Update coeff with contribution. More...
 
integer(longint) function, dimension(2) get_integral_label (this, idx)
 Get integral label at specific index. More...
 
real(wp) function get_coefficient (this, idx)
 Get coefficient at specific index. More...
 
subroutine get_coeff_and_integral (this, idx, coeff, label)
 Get both label and coeffcient at specific index. More...
 
integer function get_size (this)
 Returns the number of symbolic elements stored. More...
 
subroutine destroy (this)
 Cleans up the class by deallocating arrays. More...
 
subroutine print_symbols (this)
 Print currently stored symbols. More...
 

Detailed Description

Symbolic module.

Authors
A Al-Refaie
Date
2017

This module handles the storage of symbolic elements produced from slater rules when integrating configuration state functions

Note
30/01/2017 - Ahmed Al-Refaie: Initial documentation Version.
16/01/2019 - Jakub Benda: Unifom coding style and expanded documentation.
22/02/2019 - Jakub Benda: Removed dependency on C++ std::map.

Function/Subroutine Documentation

◆ add_symbols()

subroutine symbolic_module::add_symbols ( class(symbolicelementvector this,
class(symbolicelementvector), intent(in)  rhs,
real(wp), intent(in), optional  alpha_ 
)
private

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 385 of file Symbolic_Module.f90.

◆ bstree_compare()

integer function symbolic_module::bstree_compare ( class(symbolicelementvector), intent(in)  this,
integer, intent(in)  i,
integer, intent(in)  j,
type(c_ptr), intent(in), optional  data 
)
private

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 111 of file Symbolic_Module.f90.

◆ check_bounds()

logical function symbolic_module::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 462 of file Symbolic_Module.f90.

◆ check_constructed()

subroutine symbolic_module::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 147 of file Symbolic_Module.f90.

◆ check_same_integral()

logical function symbolic_module::check_same_integral ( class(symbolicelementvector), intent(in)  this,
integer(longint), dimension(2), intent(in), target  integral,
integer, intent(out)  idx 
)
private

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 209 of file Symbolic_Module.f90.

◆ clear()

subroutine symbolic_module::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 526 of file Symbolic_Module.f90.

◆ construct()

subroutine symbolic_module::construct ( class(symbolicelementvector this,
real(wp), intent(in), optional  threshold,
integer, intent(in), optional  initial_size 
)
private

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 166 of file Symbolic_Module.f90.

◆ destroy()

subroutine symbolic_module::destroy ( class(symbolicelementvector this)

Cleans up the class by deallocating arrays.

Authors
A Al-Refaie
Date
2017

Definition at line 614 of file Symbolic_Module.f90.

◆ expand_array()

subroutine symbolic_module::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 326 of file Symbolic_Module.f90.

◆ get_coeff_and_integral()

subroutine symbolic_module::get_coeff_and_integral ( class(symbolicelementvector), intent(in)  this,
integer, intent(in)  idx,
real(wp), intent(out)  coeff,
integer(longint), dimension(2), intent(out)  label 
)

Get both label and coeffcient at specific index.

Authors
A Al-Refaie
Date
2017

Definition at line 585 of file Symbolic_Module.f90.

◆ get_coefficient()

real(wp) function symbolic_module::get_coefficient ( class(symbolicelementvector this,
integer, intent(in)  idx 
)

Get coefficient at specific index.

Authors
A Al-Refaie
Date
2017

Definition at line 571 of file Symbolic_Module.f90.

◆ get_integral_label()

integer(longint) function, dimension(2) symbolic_module::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 556 of file Symbolic_Module.f90.

◆ get_size()

integer function symbolic_module::get_size ( class(symbolicelementvector this)

Returns the number of symbolic elements stored.

Authors
A Al-Refaie
Date
2017

Definition at line 603 of file Symbolic_Module.f90.

◆ insert_ijklm_symbol()

subroutine symbolic_module::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_ 
)
private

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 235 of file Symbolic_Module.f90.

◆ insert_symbol()

subroutine symbolic_module::insert_symbol ( class(symbolicelementvector this,
integer(longint), dimension(2), intent(in)  integral_label,
real(wp), intent(in)  coeff,
logical, intent(in), optional  check_same_ 
)
private

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 267 of file Symbolic_Module.f90.

◆ is_empty()

logical function symbolic_module::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 511 of file Symbolic_Module.f90.

◆ modify_coeff()

subroutine symbolic_module::modify_coeff ( class(symbolicelementvector this,
integer, intent(in)  idx,
real(wp)  coeff 
)
private

Update coeff with contribution.

Authors
A Al-Refaie
Date
2017

Add contribution to coeff at given index.

Definition at line 541 of file Symbolic_Module.f90.

◆ print_symbols()

subroutine symbolic_module::print_symbols ( class(symbolicelementvector this)

Print currently stored symbols.

Authors
A Al-Refaie
Date
2017

Definition at line 637 of file Symbolic_Module.f90.

◆ remove_symbol_at()

subroutine symbolic_module::remove_symbol_at ( class(symbolicelementvector this,
integer, intent(in)  idx 
)
private

Removes an integral and coefficient.

Author
A Al-Refaie
Date
2017

Never been used and pretty much useless.

Definition at line 483 of file Symbolic_Module.f90.

◆ synchronize_symbols()

subroutine symbolic_module::synchronize_symbols ( class(symbolicelementvector this)
private

Definition at line 405 of file Symbolic_Module.f90.