1
#ifndef _psi_src_bin_psimrcc_ccblas_h
2
#define _psi_src_bin_psimrcc_ccblas_h
6
\brief A class to perform contractions
11
#include "matrixtmp.h"
12
#include "operation.h"
20
namespace psi{ namespace psimrcc{
22
typedef std::map<CCMatrix*,int> MatCnt;
23
typedef std::map<std::string,CCMatrix*> MatrixMap;
24
typedef std::map<std::string,CCMatrix*>::iterator MatMapIt;
25
typedef std::map<std::string,CCIndex*> IndexMap;
26
typedef std::vector<double*> ArrayVec;
27
typedef std::map<std::string,double***> SortMap;
29
enum DiisType {DiisEachCycle,DiisCC};
32
@author Francesco A. Evangelista and Andrew C. Simmonett <frank@ccc.uga.edu>
36
typedef std::vector<std::string> strvec;
37
typedef std::vector<int> intvec;
38
typedef std::vector<std::pair<int,int> > intpairvec;
39
typedef std::deque<CCOperation> OpDeque;
44
void add_Matrix(const char* cstr);
45
void add_Matrix(std::string str);
46
void add_index(const char* cstr);
48
void solve(const char* cstr);
49
void solve(std::string str);
50
void solve_zero_two_diagonal(const char* cstr);
51
void zero_right_four_diagonal(const char* cstr);
52
void zero_left_four_diagonal(const char* cstr);
53
void zero_non_doubly_occupied(const char* cstr);
54
void zero_non_external(const char* cstr);
55
void zero(const char* cstr);
56
void reduce_spaces(const char* out,const char* in);
57
void expand_spaces(const char* out,const char* in);
58
void append(const char* cstr);
59
void append(std::string str);
60
void append_zero_two_diagonal(const char* cstr);
62
int compute_storage_strategy();
65
void diis_add(std::string amps, std::string delta_amps);
66
void diis_save_t_amps(int cycle);
67
void diis(int cycle, double delta, DiisType diis_type);
69
void print(const char* cstr);
70
void print_ref(string& str);
73
CCIndex* get_index(const char* cstr);
74
CCIndex* get_index(std::string& str);
75
CCMatTmp get_MatTmp(std::string str, int reference, DiskOpt disk_option);
76
CCMatTmp get_MatTmp(std::string str, DiskOpt disk_option);
77
CCMatTmp get_MatTmp(CCMatrix* Matrix, DiskOpt disk_option);
78
CCMatIrTmp get_MatIrTmp(std::string str, int reference, int irrep, DiskOpt disk_option);
79
CCMatIrTmp get_MatIrTmp(std::string str, int irrep, DiskOpt disk_option);
80
CCMatIrTmp get_MatIrTmp(CCMatrix* Matrix, int irrep, DiskOpt disk_option);
82
double get_scalar(std::string str);
83
double get_scalar(const char* cstr,int reference);
84
double get_scalar(std::string& str,int reference);
85
void set_scalar(const char* cstr,int reference,double value);
86
void set_scalar(std::string& str,int reference,double value);
88
// These have to be improved
89
MatrixMap& get_MatrixMap() {return(matrices);}
99
MatCnt matrices_in_deque;
100
MatCnt matrices_in_deque_target;
101
MatCnt matrices_in_deque_source;
105
IndexMap& get_IndexMap() {return(indices);}
106
CCMatrix* get_Matrix(std::string& str);
107
CCMatrix* get_Matrix(const char* cstr);
108
CCMatrix* get_Matrix(const char* cstr, int reference);
109
CCMatrix* get_Matrix(std::string& str,std::string& expression); // Prints a clear error message
110
double* get_work(int n) {return(work[n]);}
111
// double*** get_sortmap(CCIndex* T_left,CCIndex* T_right,int thread);
113
void allocate_matrices_in_core();
114
void load(CCMatrix* Matrix);
115
void load_irrep(CCMatrix* Matrix,int h);
116
///////////////////////////////////////////////////////////////////////////////
117
// Class private functions
118
///////////////////////////////////////////////////////////////////////////////
119
void add_Matrix_ref(std::string& str);
121
void add_matrix_ref(std::string& str);
122
void solve_ref(string& str);
123
int parse(std::string& str);
124
void process_operations();
125
void process_reduce_spaces(CCMatrix* out_Matrix,CCMatrix* in_Matrix);
126
void process_expand_spaces(CCMatrix* out_Matrix,CCMatrix* in_Matrix);
127
bool get_factor(const std::string& str,double& factor);
130
void make_space(double memory_required);
131
// Low level memory routines
134
void allocate_work();
135
void allocate_buffer();
139
void free_matrices();
145
}} /* End Namespaces */
147
#endif // _psi_src_bin_psimrcc_ccblas_h