ergo
matrix_utilities.cc File Reference

Utilities related to the hierarchical matrix library (HML), including functions for setting up permutations of basis functions to increase data locality in the hierarchical matrix data structure. More...

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
#include "matrix_utilities.h"
#include "output.h"

Classes

struct  CompareClass< RandomAccessIterator >
 

Functions

mat::SizesAndBlocks prepareMatrixSizesAndBlocks (int n_basis_functions, int sparse_block_size, int factor1, int factor2, int factor3)
 
template<typename Treal , typename TIndexIterator >
void sortCoord (std::vector< Treal > const &xpos, std::vector< Treal > const &ypos, std::vector< Treal > const &zpos, TIndexIterator first, TIndexIterator last)
 
template<typename Treal >
void permuteAndRecurse (std::vector< Treal > const &xpos, std::vector< Treal > const &ypos, std::vector< Treal > const &zpos, std::vector< int > &index, int const first, int const last, std::vector< int > const &blockSizes, int bSizeIndex)
 
template<typename Treal >
void permuteAndRecurseStart (std::vector< Treal > const &xpos, std::vector< Treal > const &ypos, std::vector< Treal > const &zpos, std::vector< int > &index, int const first, int const last, std::vector< int > const &blockSizes, int bSizeIndex)
 
template<typename Treal >
void getPermutation (std::vector< Treal > const &xpos, std::vector< Treal > const &ypos, std::vector< Treal > const &zpos, std::vector< int > &permutation, std::vector< int > const &blockSizes)
 
void getMatrixPermutation (const BasisInfoStruct &basisInfo, int sparse_block_size, int factor1, int factor2, int factor3, std::vector< int > &permutation, std::vector< int > &inversePermutation)
 
void getMatrixPermutation (const BasisInfoStruct &basisInfo, int sparse_block_size, int factor1, int factor2, int factor3, std::vector< int > &permutation)
 
void getMatrixPermutationOnlyFactor2 (const std::vector< ergo_real > &xcoords, const std::vector< ergo_real > &ycoords, const std::vector< ergo_real > &zcoords, int sparse_block_size_lowest, int first_factor_in, std::vector< int > &permutation, std::vector< int > &inversePermutation)
 
void getMatrixPermutationOnlyFactor2 (const BasisInfoStruct &basisInfo, int sparse_block_size_lowest, int first_factor, std::vector< int > &permutation, std::vector< int > &inversePermutation)
 
void fill_matrix_with_random_numbers (int n, symmMatrix &M)
 
static ergo_real rand_minus1_to_1 ()
 
void add_random_diag_perturbation (int n, symmMatrix &M, ergo_real eps)
 
bool check_if_matrix_contains_strange_elements (const symmMatrix &M, std::vector< int > const &inversePermutationHML)
 This function is supposed to check if a matrix contains any strange numbers such as "inf" or "nan". More...
 
void output_matrix (int n, const ergo_real *matrix, const char *matrixName)
 

Detailed Description

Utilities related to the hierarchical matrix library (HML), including functions for setting up permutations of basis functions to increase data locality in the hierarchical matrix data structure.

Function Documentation

◆ add_random_diag_perturbation()

void add_random_diag_perturbation ( int  n,
symmMatrix M,
ergo_real  eps 
)

References rand_minus1_to_1().

◆ check_if_matrix_contains_strange_elements()

bool check_if_matrix_contains_strange_elements ( const symmMatrix M,
std::vector< int > const &  inversePermutationHML 
)

This function is supposed to check if a matrix contains any strange numbers such as "inf" or "nan".

The function returns true is any strange numbers are found, and false if the matrix seems ok.

Referenced by SCF_restricted::get_2e_part_and_energy().

◆ fill_matrix_with_random_numbers()

void fill_matrix_with_random_numbers ( int  n,
symmMatrix M 
)

◆ getMatrixPermutation() [1/2]

void getMatrixPermutation ( const BasisInfoStruct basisInfo,
int  sparse_block_size,
int  factor1,
int  factor2,
int  factor3,
std::vector< int > &  permutation,
std::vector< int > &  inversePermutation 
)

◆ getMatrixPermutation() [2/2]

void getMatrixPermutation ( const BasisInfoStruct basisInfo,
int  sparse_block_size,
int  factor1,
int  factor2,
int  factor3,
std::vector< int > &  permutation 
)

◆ getMatrixPermutationOnlyFactor2() [1/2]

void getMatrixPermutationOnlyFactor2 ( const std::vector< ergo_real > &  xcoords,
const std::vector< ergo_real > &  ycoords,
const std::vector< ergo_real > &  zcoords,
int  sparse_block_size_lowest,
int  first_factor_in,
std::vector< int > &  permutation,
std::vector< int > &  inversePermutation 
)

◆ getMatrixPermutationOnlyFactor2() [2/2]

void getMatrixPermutationOnlyFactor2 ( const BasisInfoStruct basisInfo,
int  sparse_block_size_lowest,
int  first_factor,
std::vector< int > &  permutation,
std::vector< int > &  inversePermutation 
)

◆ getPermutation()

template<typename Treal >
void getPermutation ( std::vector< Treal > const &  xpos,
std::vector< Treal > const &  ypos,
std::vector< Treal > const &  zpos,
std::vector< int > &  permutation,
std::vector< int > const &  blockSizes 
)

◆ output_matrix()

void output_matrix ( int  n,
const ergo_real matrix,
const char *  matrixName 
)

Referenced by dft_get_uxc(), and dft_get_xc().

◆ permuteAndRecurse()

template<typename Treal >
void permuteAndRecurse ( std::vector< Treal > const &  xpos,
std::vector< Treal > const &  ypos,
std::vector< Treal > const &  zpos,
std::vector< int > &  index,
int const  first,
int const  last,
std::vector< int > const &  blockSizes,
int  bSizeIndex 
)

References sortCoord().

Referenced by getPermutation(), and permuteAndRecurseStart().

◆ permuteAndRecurseStart()

template<typename Treal >
void permuteAndRecurseStart ( std::vector< Treal > const &  xpos,
std::vector< Treal > const &  ypos,
std::vector< Treal > const &  zpos,
std::vector< int > &  index,
int const  first,
int const  last,
std::vector< int > const &  blockSizes,
int  bSizeIndex 
)

References permuteAndRecurse(), and sortCoord().

◆ prepareMatrixSizesAndBlocks()

mat::SizesAndBlocks prepareMatrixSizesAndBlocks ( int  n_basis_functions,
int  sparse_block_size,
int  factor1,
int  factor2,
int  factor3 
)

◆ rand_minus1_to_1()

static ergo_real rand_minus1_to_1 ( )
static

◆ sortCoord()

template<typename Treal , typename TIndexIterator >
void sortCoord ( std::vector< Treal > const &  xpos,
std::vector< Treal > const &  ypos,
std::vector< Treal > const &  zpos,
TIndexIterator  first,
TIndexIterator  last 
)