Go to the documentation of this file.
38 #ifndef MATRIX_UTILITIES_HEADER
39 #define MATRIX_UTILITIES_HEADER
48 int sparse_block_size,
49 int factor1,
int factor2,
int factor3);
53 int sparse_block_size,
59 int sparse_block_size,
63 std::vector<int> & permutation);
65 int sparse_block_size,
69 std::vector<int> & permutation,
70 std::vector<int> & inversePermutation);
72 const std::vector<ergo_real> & ycoords,
73 const std::vector<ergo_real> & zcoords,
74 int sparse_block_size_lowest,
76 std::vector<int> & permutation,
77 std::vector<int> & inversePermutation);
79 int sparse_block_size_lowest,
81 std::vector<int> & permutation,
82 std::vector<int> & inversePermutation);
92 std::vector<int>
const & inversePermutationHML);
96 template<
class Tmatrix>
99 return M.maxAbsValue();
103 template<
typename RandomAccessIterator>
111 template<
typename Tmatrix>
113 std::vector<int>
const & inversePermutation,
114 std::vector<int> & rowind,
115 std::vector<int> & colind,
116 std::vector<ergo_real> & values) {
121 size_t nvalues_tmp =
A.nvalues();
122 std::vector<int> rowind_tmp; rowind_tmp.reserve(nvalues_tmp);
123 std::vector<int> colind_tmp; colind_tmp.reserve(nvalues_tmp);
124 std::vector<ergo_real> values_tmp; values_tmp.reserve(nvalues_tmp);
125 A.get_all_values(rowind_tmp,
131 for(
size_t i = 0; i < nvalues_tmp; i++) {
132 nvalues += ( values_tmp[i] != 0 );
134 rowind.reserve(nvalues);
135 colind.reserve(nvalues);
136 values.reserve(nvalues);
138 for(
size_t i = 0; i < nvalues_tmp; i++) {
139 if ( values_tmp[i] != 0 ) {
140 rowind.push_back( rowind_tmp[i] );
141 colind.push_back( colind_tmp[i] );
142 values.push_back( values_tmp[i] );
148 template<
typename Tmatrix>
150 std::vector<int>
const & inversePermutation,
151 std::string filename,
152 std::string identifier,
153 std::string method_and_basis)
158 std::vector<int> rowind;
159 std::vector<int> colind;
160 std::vector<ergo_real> values;
162 nvalues = values.size();
165 std::string mtx_filename = filename +
".mtx";
166 std::ofstream os(mtx_filename.c_str());
169 struct tm * timeinfo;
171 timeinfo = localtime ( &rawtime );
173 std::string matrix_market_matrix_type =
"general";
174 bool matrixIsSymmetric = (
A.obj_type_id() ==
"MatrixSymmetric");
175 if (matrixIsSymmetric)
176 matrix_market_matrix_type =
"symmetric";
177 os <<
"%%MatrixMarket matrix coordinate real " << matrix_market_matrix_type << std::endl
178 <<
"%===============================================================================" << std::endl
179 <<
"% Generated by the Ergo quantum chemistry program version " <<
VERSION <<
" (www.ergoscf.org)" << std::endl
180 <<
"% Date : " << asctime (timeinfo)
181 <<
"% ID-string : " << identifier << std::endl
182 <<
"% Method : " << method_and_basis << std::endl
184 <<
"% MatrixMarket file format:" << std::endl
185 <<
"% +-----------------" << std::endl
186 <<
"% | % comments" << std::endl
187 <<
"% | nrows ncols nentries" << std::endl
188 <<
"% | i_1 j_1 A(i_1,j_1)" << std::endl
189 <<
"% | i_2 j_2 A(i_2,j_2)" << std::endl
190 <<
"% | ..." << std::endl
191 <<
"% | i_nentries j_nentries A(i_nentries,j_nentries) " << std::endl
192 <<
"% +----------------" << std::endl
193 <<
"% Note that indices are 1-based, i.e. A(1,1) is the first element." << std::endl
195 <<
"%===============================================================================" << std::endl;
196 os <<
A.get_nrows() <<
" " <<
A.get_ncols() <<
" " << nvalues << std::endl;
197 if (matrixIsSymmetric)
198 for(
size_t i = 0; i < nvalues; i++) {
200 if ( rowind[i] < colind[i] )
201 os << colind[i]+1 <<
" " << rowind[i]+1 <<
" " << std::setprecision(10) << (double)values[i] << std::endl;
203 os << rowind[i]+1 <<
" " << colind[i]+1 <<
" " << std::setprecision(10) << (double)values[i] << std::endl;
206 for(
size_t i = 0; i < nvalues; i++) {
207 os << rowind[i]+1 <<
" " << colind[i]+1 <<
" " << std::setprecision(10) << (double)values[i] << std::endl;
int noOfBasisFuncs
Definition: basisinfo.h:120
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)
Definition: matrix_utilities.cc:169
void get_all_nonzeros(Tmatrix const &A, std::vector< int > const &inversePermutation, std::vector< int > &rowind, std::vector< int > &colind, std::vector< ergo_real > &values)
Definition: matrix_utilities.h:112
Definition: matrix_utilities.h:104
double ergo_real
Definition: realtype.h:69
void fill_matrix_with_random_numbers(int n, symmMatrix &M)
Definition: matrix_utilities.cc:310
MatrixSymmetric< real, matri > symmMatrix
Definition: test_LanczosSeveralLargestEig.cc:69
Definition: basisinfo.h:112
bool operator()(int i, int j)
Definition: matrix_utilities.cc:76
Definition: matrix_utilities.cc:72
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, std::vector< int > &permutation, std::vector< int > &inversePermutation)
Definition: matrix_utilities.cc:240
void fill_matrix_with_random_numbers(int n, symmMatrix &M)
Definition: matrix_utilities.cc:310
void write_matrix_in_matrix_market_format(Tmatrix const &A, std::vector< int > const &inversePermutation, std::string filename, std::string identifier, std::string method_and_basis)
Definition: matrix_utilities.h:149
mat::SizesAndBlocks prepareMatrixSizesAndBlocks(int n_basis_functions, int sparse_block_size, int factor1, int factor2, int factor3)
Definition: matrix_utilities.cc:47
void getMatrixPermutation(const BasisInfoStruct &basisInfo, int sparse_block_size, int factor1, int factor2, int factor3, std::vector< int > &permutation, std::vector< int > &inversePermutation)
Definition: matrix_utilities.cc:187
void add_random_diag_perturbation(int n, symmMatrix &M, ergo_real eps)
Definition: matrix_utilities.cc:341
RandomAccessIterator first
Definition: matrix_utilities.cc:73
void output_matrix(int n, const ergo_real *matrix, const char *matrixName)
Definition: matrix_utilities.cc:390
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)
Definition: matrix_utilities.cc:147
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)
Definition: matrix_utilities.cc:240
Utilities related to the hierarchical matrix library (HML), including functions for setting up permut...
#define LOG_AREA_UNDEFINED
Definition: output.h:56
ergo_real compute_maxabs_sparse(const Tmatrix &M)
Definition: matrix_utilities.h:97
void getMatrixPermutation(const BasisInfoStruct &basisInfo, int sparse_block_size, int factor1, int factor2, int factor3, std::vector< int > &permutation)
Definition: matrix_utilities.cc:223
#define LOG_CAT_INFO
Definition: output.h:49
mat::SizesAndBlocks prepareMatrixSizesAndBlocks(int n_basis_functions, int sparse_block_size, int factor1, int factor2, int factor3)
Definition: matrix_utilities.cc:47
matrix_utilities_CompareClass(RandomAccessIterator firstel)
Definition: matrix_utilities.h:106
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".
Definition: matrix_utilities.cc:362
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)
Definition: matrix_utilities.cc:111
Header file with typedefs for matrix and vector types. The levels of hierarchic matrices are defined ...
Code for setting up basis functions starting from shells.
BasisFuncStruct * basisFuncList
Definition: basisinfo.h:121
CompareClass(RandomAccessIterator firstel)
Definition: matrix_utilities.cc:74
Vector3D centerCoords
Definition: basisinfo.h:90
bool operator()(int i, int j)
Definition: matrix_utilities.h:108
Describes dimensions of matrix and its blocks on all levels.
Definition: SizesAndBlocks.h:45
static ergo_real rand_minus1_to_1()
Definition: matrix_utilities.cc:329
#define VERSION
Definition: config.h:268
RandomAccessIterator first
Definition: matrix_utilities.h:105
void do_output(int logCategory, int logArea, const char *format,...)
Definition: output.cc:53
void add_random_diag_perturbation(int n, symmMatrix &M, ergo_real eps)
Definition: matrix_utilities.cc:341
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".
Definition: matrix_utilities.cc:362
void output_matrix(int n, const ergo_real *matrix, const char *matrixName)
Definition: matrix_utilities.cc:390
Functionality for writing output messages to a text file.
void sortCoord(std::vector< Treal > const &xpos, std::vector< Treal > const &ypos, std::vector< Treal > const &zpos, TIndexIterator first, TIndexIterator last)
Definition: matrix_utilities.cc:81