ergo
hermite_conversion_prep.h
Go to the documentation of this file.
1 /* Ergo, version 3.4, a program for linear scaling electronic structure
2  * calculations.
3  * Copyright (C) 2014 Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek.
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * Primary academic reference:
19  * Kohn−Sham Density Functional Theory Electronic Structure Calculations
20  * with Linearly Scaling Computational Time and Memory Usage,
21  * Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek,
22  * J. Chem. Theory Comput. 7, 340 (2011),
23  * <http://dx.doi.org/10.1021/ct100611z>
24  *
25  * For further information about Ergo, see <http://www.ergoscf.org>.
26  */
27 
28 #ifndef HERMITE_CONVERSION_PREP_HEADER
29 #define HERMITE_CONVERSION_PREP_HEADER
30 
31 #include <cstring>
32 #include "realtype.h"
33 #include "polydegree.h"
34 #include "monomial_info.h"
35 #include "simple_sparse_mat.h"
36 
38 {
39  int destIndex;
41  int a_power;
42  int dummy;
44 };
45 
47 
49  int idx_j;
50  int idx_k;
51  int a_power;
52  int dummy;
54 };
55 
57 
59 
61  private:
66  // Simple lists used to represent conversion matrices
69  int counters_right_simple[HERMITE_CONVERSION_MAX_N+1];
70  int counters_left_simple [HERMITE_CONVERSION_MAX_N+1];
71  public:
72  void init(const monomial_info_struct & monomial_info);
75  int multiply_by_hermite_conversion_matrix_from_right(const monomial_info_struct & monomial_info,
76  int n1max,
77  int n2max,
78  ergo_real a,
79  ergo_real* A,
80  ergo_real* result) const;
81  int multiply_by_hermite_conversion_matrix_from_left(const monomial_info_struct & monomial_info,
82  int n1max,
83  int n2max,
84  ergo_real a,
85  ergo_real* A,
86  ergo_real* result) const;
87  int get_hermite_conversion_matrix_right(const monomial_info_struct & monomial_info,
88  int nmax,
89  ergo_real a,
90  ergo_real* result) const;
91  int get_hermite_conversion_matrix_left(const monomial_info_struct & monomial_info,
92  int nmax,
93  ergo_real a,
94  ergo_real* result) const;
95 
96  int get_hermite_conversion_matrix_right_sparse(const monomial_info_struct & monomial_info,
97  int nmax,
98  ergo_real a,
99  i_j_val_struct* result) const;
100 
101  // Stuff needed for Chunks&Tasks usage
103  void write_to_buffer ( char * dataBuffer, size_t const bufferSize ) const;
104  size_t get_size() const;
105  void assign_from_buffer ( char const * dataBuffer, size_t const bufferSize);
106 };
107 
108 
109 #endif
#define A
Definition: monomial_info.h:46
int idx_j
Definition: hermite_conversion_prep.h:49
double ergo_real
Definition: realtype.h:53
hermite_conversion_element_struct * hermite_conversion_element_struct_ptr
Definition: hermite_conversion_prep.h:56
Definition: hermite_conversion_prep.h:48
const int HERMITE_CONVERSION_MAX_N
Definition: hermite_conversion_prep.h:58
ergo_real coeff
Definition: hermite_conversion_prep.h:53
Definition: simple_sparse_mat.h:32
#define BASIS_FUNC_POLY_MAX_DEGREE
Definition: polydegree.h:41
int a_power
Definition: hermite_conversion_prep.h:41
int sourceIndex
Definition: hermite_conversion_prep.h:40
int dummy
Definition: hermite_conversion_prep.h:52
ergo_real coeff
Definition: hermite_conversion_prep.h:43
Definition: hermite_conversion_prep.h:60
Definition: hermite_conversion_prep.h:37
int destIndex
Definition: hermite_conversion_prep.h:39
int dummy
Definition: hermite_conversion_prep.h:42
int a_power
Definition: hermite_conversion_prep.h:51
hermite_conversion_contrib_struct * hermite_conversion_contrib_struct_ptr
Definition: hermite_conversion_prep.h:46
int idx_k
Definition: hermite_conversion_prep.h:50