Performs some simple tests of density matrix purification in orthogonal basis using artificialy generated input matrices. More...
#include <stdio.h>
#include <unistd.h>
#include <memory>
#include <limits>
#include "matrix_typedefs.h"
#include "matrix_utilities.h"
#include "utilities.h"
Classes | |
struct | DensMatInfo |
Functions | |
static void | report_timing (Util::TimeMeter &tm, const char *s) |
static void | get_Huckel_matrix_periodic (symmMatrix &F, int n, const std::vector< int > &perm) |
static void | assign_from_full_matrix (symmMatrix &A, const ergo_real *A_full, int n, const std::vector< int > &perm) |
static void | print_matrix (const symmMatrix &A, const char *A_name, int n, ergo_real scaleFactor=1.0) |
static void | get_all_matrix_elements_nosymm (const normalMatrix &A, int n, std::vector< ergo_real > &result) |
static void | get_all_matrix_elements_symm (const symmMatrix &A, int n, std::vector< ergo_real > &result) |
static void | get_density_mat_by_diagonalization (const symmMatrix &F, symmMatrix &D, DensMatInfo &info, int n, int n_occ, const std::vector< int > &perm) |
static void | print_DensMatInfo (const DensMatInfo &info) |
static ergo_real | get_nnz_percentage (int n, const symmMatrix &X) |
static void | update_nnz_percentages (int n, const symmMatrix &X, ergo_real &nnz_percentage_min, ergo_real &nnz_percentage_max) |
static void | do_truncation (int n, symmMatrix &X, ergo_real truncation_threshold, const symmMatrix &D_in, bool use_alt_trunc, const std::vector< int > &perm) |
static void | report_subspace_error (int currIterCount, int n, const symmMatrix &X, const symmMatrix &D) |
static void | report_subspace_error_via_diagonalization (int currIterCount, int n, int n_occ, const symmMatrix &X, const symmMatrix &D_ref, const std::vector< int > &perm) |
static void | get_density_mat_by_purification (const symmMatrix &F, symmMatrix &result_D, int n, int n_occ, const std::vector< int > &perm, const DensMatInfo &info, ergo_real truncation_threshold, const symmMatrix &D_ref, bool use_alt_trunc, bool verify_each_step) |
static void | verify_idempotency (const symmMatrix &X) |
static void | verify_gap (const DensMatInfo &info) |
int | main (int argc, char *argv[]) |
Performs some simple tests of density matrix purification in orthogonal basis using artificialy generated input matrices.
Written by Elias in Nov 2016.
static void assign_from_full_matrix | ( | symmMatrix & | A, | |
const ergo_real * | A_full, | |||
int | n, | |||
const std::vector< int > & | perm | |||
) | [static] |
References cols, rows, template_blas_fabs(), and template_blas_sqrt().
Referenced by get_density_mat_by_diagonalization().
static void do_truncation | ( | int | n, | |
symmMatrix & | X, | |||
ergo_real | truncation_threshold, | |||
const symmMatrix & | D_in, | |||
bool | use_alt_trunc, | |||
const std::vector< int > & | perm | |||
) | [static] |
References mat::transpose().
Referenced by get_density_mat_by_purification().
static void get_all_matrix_elements_nosymm | ( | const normalMatrix & | A, | |
int | n, | |||
std::vector< ergo_real > & | result | |||
) | [static] |
Referenced by get_all_matrix_elements_symm().
static void get_all_matrix_elements_symm | ( | const symmMatrix & | A, | |
int | n, | |||
std::vector< ergo_real > & | result | |||
) | [static] |
References get_all_matrix_elements_nosymm().
Referenced by get_density_mat_by_diagonalization().
static void get_density_mat_by_diagonalization | ( | const symmMatrix & | F, | |
symmMatrix & | D, | |||
DensMatInfo & | info, | |||
int | n, | |||
int | n_occ, | |||
const std::vector< int > & | perm | |||
) | [static] |
static void get_density_mat_by_purification | ( | const symmMatrix & | F, | |
symmMatrix & | result_D, | |||
int | n, | |||
int | n_occ, | |||
const std::vector< int > & | perm, | |||
const DensMatInfo & | info, | |||
ergo_real | truncation_threshold, | |||
const symmMatrix & | D_ref, | |||
bool | use_alt_trunc, | |||
bool | verify_each_step | |||
) | [static] |
References do_truncation(), get_nnz_percentage(), Util::TimeMeter::get_start_time_wall_seconds(), Util::TimeMeter::get_wall_seconds(), DensMatInfo::lambda_max, DensMatInfo::lambda_min, report_subspace_error(), report_subspace_error_via_diagonalization(), mat::trace(), and update_nnz_percentages().
Referenced by main().
static void get_Huckel_matrix_periodic | ( | symmMatrix & | F, | |
int | n, | |||
const std::vector< int > & | perm | |||
) | [static] |
static ergo_real get_nnz_percentage | ( | int | n, | |
const symmMatrix & | X | |||
) | [static] |
Referenced by get_density_mat_by_purification(), and update_nnz_percentages().
int main | ( | int | argc, | |
char * | argv[] | |||
) |
References get_density_mat_by_diagonalization(), get_density_mat_by_purification(), get_Huckel_matrix_periodic(), mat::Params::getMatrixParallelLevel(), mat::Params::getNProcs(), prepareMatrixSizesAndBlocks(), print_DensMatInfo(), print_matrix(), report_timing(), mat::Params::setMatrixParallelLevel(), mat::Params::setNProcs(), verify_gap(), and verify_idempotency().
static void print_DensMatInfo | ( | const DensMatInfo & | info | ) | [static] |
References DensMatInfo::lambda_homo, DensMatInfo::lambda_lumo, DensMatInfo::lambda_max, and DensMatInfo::lambda_min.
Referenced by main().
static void print_matrix | ( | const symmMatrix & | A, | |
const char * | A_name, | |||
int | n, | |||
ergo_real | scaleFactor = 1.0 | |||
) | [static] |
static void report_subspace_error | ( | int | currIterCount, | |
int | n, | |||
const symmMatrix & | X, | |||
const symmMatrix & | D | |||
) | [static] |
References mat::transpose().
Referenced by get_density_mat_by_purification().
static void report_subspace_error_via_diagonalization | ( | int | currIterCount, | |
int | n, | |||
int | n_occ, | |||
const symmMatrix & | X, | |||
const symmMatrix & | D_ref, | |||
const std::vector< int > & | perm | |||
) | [static] |
References get_density_mat_by_diagonalization().
Referenced by get_density_mat_by_purification().
static void report_timing | ( | Util::TimeMeter & | tm, | |
const char * | s | |||
) | [static] |
References Util::TimeMeter::get_start_time_wall_seconds(), and Util::TimeMeter::get_wall_seconds().
Referenced by main().
static void update_nnz_percentages | ( | int | n, | |
const symmMatrix & | X, | |||
ergo_real & | nnz_percentage_min, | |||
ergo_real & | nnz_percentage_max | |||
) | [static] |
References get_nnz_percentage().
Referenced by get_density_mat_by_purification().
static void verify_gap | ( | const DensMatInfo & | info | ) | [static] |
References DensMatInfo::lambda_homo, DensMatInfo::lambda_lumo, DensMatInfo::lambda_max, and DensMatInfo::lambda_min.
Referenced by main().
static void verify_idempotency | ( | const symmMatrix & | X | ) | [static] |
References template_blas_sqrt().
Referenced by main().