ergo
integral_info.h
Go to the documentation of this file.
1 /* Ergo, version 3.2, a program for linear scaling electronic structure
2  * calculations.
3  * Copyright (C) 2012 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 BASISINFO_BASIC_HEADER
29 #define BASISINFO_BASIC_HEADER
30 
31 
32 #include "realtype.h"
33 #include "monomial_info.h"
35 
36 #ifndef BASIS_FUNC_POLY_MAX_DEGREE
37 #error The constant BASIS_FUNC_POLY_MAX_DEGREE must be defined.
38 #endif
39 #if BASIS_FUNC_POLY_MAX_DEGREE<6
40 #define MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY 12
41 #define MAX_NO_OF_POLY_12_TERMS 180
42 #define MAX_NO_OF_BASIS_FUNC_POLYS 50
43 #else
44 #define MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY 16
45 #define MAX_NO_OF_POLY_12_TERMS 360
46 #define MAX_NO_OF_BASIS_FUNC_POLYS 100
47 #endif
48 
49 typedef struct
50 {
52  char monomialInts[4]; /* nx, ny, nz */
55 
56 typedef struct
57 {
58  int noOfTerms;
62 
63 typedef struct
64 {
65  int id_1;
66  int id_2;
69 
70 typedef struct
71 {
72  int noOfTerms;
75 
81 {
86 
87  IntegralInfo();
88  ~IntegralInfo();
89 };
90 
91 namespace JK {
92 /* Struct ExchWeights holds parameters for CAM-style range-separated HF
93  exchange. We use the following short-long range split
94  (alpha+beta*erf(mu*r))*HF_exchange.
95  */
97 {
104  alpha(0),
105  beta(0),
106  mu(0),
108  {}
109 
110 };
111 
112 };
113 
114 
115 int get_poly_info_from_shell_type(int* polyid_start, int* poly_count, int shellType);
116 
118 
119 int get_shell_type_from_basis_func_poly_id(int basfuncpolyid);
120 
121 
122 #endif