ergo
basisinfo.h
Go to the documentation of this file.
1 /* Ergo, version 3.3, a program for linear scaling electronic structure
2  * calculations.
3  * Copyright (C) 2013 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_HEADER
29 #define BASISINFO_HEADER
30 
31 /* for NULL */
32 #include <stdlib.h>
33 
34 #include "realtype.h"
35 #include "integral_info.h"
36 /* for Molecule */
37 #include "molecule.h"
38 
39 #include "basisset.h"
40 
41 #define MAX_NO_OF_PRIMITIVES_PER_BASIS_FUNC 44
42 
48  char monomialInts[4];
49 };
51 
52 typedef struct
53 {
56  int pairIndex;
57  int groupID;
58  ergo_real limitingFactor; // squareroot of repulsion integral of this distr with itself.
62 
63 
64 #define MAX_NO_OF_CONTR_GAUSSIANS 20
65 
70  ergo_real padding; /* We keep this for compatibility with old density files... */
71  ergo_real centerCoords[3]; /* x0, y0, z0 */
72  int noOfContr;
73  int shellType;
74  int shell_ID;
76  int startIndexInMatrix; /* start index in density matrix */
77  int dummy; /* padding to make sure the size of this structure is a multiple of 8 bytes */
78 };
80 
82  int noOfContr;
86  Vector3D centerCoords; /* x0, y0, z0 */
87  int shellType; /* 0 <-> 's', 1 <-> 'p', 2 <-> 'd' etc */
88  int functionNumber; /* -1,0,1 for 'p', -2,-1,0,1,2 for 'd', etc */
93 };
95 
96 
97 typedef struct
98 {
100  int count;
103 
104 typedef struct
105 {
107  int count;
110 
123 
125  BasisInfoStruct(int use_6_d_funcs_ = 0);
126 
128  BasisInfoStruct(const BasisInfoStruct & b);
129 
131 
132  void addBasisfuncsForAtomList(const Atom* atomList,
133  int noOfAtoms,
134  const basisset_struct* basissetDefault,
135  int noOfRanges,
136  const basis_set_range_struct* rangeList,
137  const IntegralInfo & integralInfo,
138  int print_raw,
139  int do_normalization,
140  int skip_sort_shells);
141 
142  int addBasisfuncsForMolecule(const Molecule& molecule,
143  const char* basisset_filename_default,
144  int noOfRanges,
145  const BasissetNameRange* rangeList,
146  const IntegralInfo& integralInfo,
147  int print_raw,
148  int do_normalization,
149  int skip_sort_shells);
150 
151  BasisInfoStruct *permuteShells(const int *shellMap,
152  const IntegralInfo& ii) const;
153 
154  int normalizeShells(const IntegralInfo& integralInfo);
155 
156  int get_basis_funcs();
157 
158  int getSimplePrimitivesAll(const IntegralInfo& integralInfo);
159 
160  // Stuff needed for Chunks&Tasks usage
161  void write_to_buffer ( char * dataBuffer, size_t const bufferSize ) const;
162  size_t get_size() const;
163  void assign_from_buffer ( char const * dataBuffer, size_t const bufferSize);
164 };
165 
166 
167 
174  const int MAX_NO_OF_PRIMS;
178  {
181  }
183  {
184  delete []list;
185  delete []productlist;
186  }
188  (const IntegralInfo& integralInfo, BasisFuncStruct* basisFunc, int use_6_d_funcs);
189 
190  ergo_real getShellFactor(const IntegralInfo& integralInfo,
191  ergo_real exponent, int shellType, int use_6_d_funcs);
192 };
193 
194 
195 
196 
197 #ifdef ERGO_ENABLE_DEPRECATED
198 
199 int basisinfo_construct_multi_basis(BasisInfoStruct* result_basisInfo,
200  const Molecule* molecule,
201  const char* basisset_filename_default,
202  const Molecule* ghostMolecule,
203  const char* ghost_molecule_basisset_filename,
204  int noOfRanges,
205  const BasissetNameRange* rangeList,
206  IntegralInfo* integralInfo,
207  int print_raw,
208  int do_normalization,
209  int skip_sort_shells,
210  int skip_standard_basis);
211 struct AtomInfoStruct_{
212  int charge;
213  ergo_real coords[3];
214 };
215 typedef struct AtomInfoStruct_ AtomInfoStruct;
216 #endif
217 
218 int get_basis_funcs(BasisInfoStruct* basisInfo,
219  const IntegralInfo* integralInfo,
220  int do_normalization);
221 
223  const IntegralInfo* integralInfo);
224 
225 int output_basisinfo(const BasisInfoStruct & basisInfo);
226 
227 ergo_real getSafeMaxDistance(const BasisInfoStruct & basisInfo);
228 
229 
230 #endif
void assign_from_buffer(char const *dataBuffer, size_t const bufferSize)
Function needed for Chunks&Tasks usage.
Definition: basisinfo.cc:873
int addBasisfuncsForMolecule(const Molecule &molecule, const char *basisset_filename_default, int noOfRanges, const BasissetNameRange *rangeList, const IntegralInfo &integralInfo, int print_raw, int do_normalization, int skip_sort_shells)
Fills in BasisInfoStruct for given molecule and basisset_filename.
Definition: basisinfo.cc:545
~BasisInfoStruct()
Definition: basisinfo.cc:904
int noOfBasisFuncs
Definition: basisinfo.h:75
int noOfTermsInPolynomial
Definition: basisinfo.h:91
ergo_real padding
Definition: basisinfo.h:70
Definition: basisinfo.h:97
ergo_real dmatElement
Definition: basisinfo.h:59
basisset_struct * basisset
Definition: basisinfo.h:101
int output_basisinfo(const BasisInfoStruct &basisInfo)
Definition: basisinfo.cc:58
double ergo_real
Definition: realtype.h:53
#define MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY
Definition: integral_info.h:41
ergo_real coeffList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:83
Definition: basisset.h:63
DistributionSpecStruct * productlist
Definition: basisinfo.h:176
int shellType
Definition: basisinfo.h:73
int get_basis_funcs()
creates list of 'basis functions', and set startIndexInMatrix for each shell.
Definition: basisinfo.cc:734
ergo_real centerCoords[3]
x0, y0, z0
Definition: basisinfo.h:47
A representation of Vector or point in cartesian space.
Definition: molecule.h:49
char * basisSetFileName
Definition: basisinfo.h:108
BasisFuncStruct * basisFuncList
Definition: basisinfo.h:120
int groupID
Definition: basisinfo.h:57
#define MAX_NO_OF_CONTR_GAUSSIANS
Definition: basisinfo.h:64
ergo_real coeff
Coefficient A.
Definition: basisinfo.h:44
ergo_real centerCoords[3]
Definition: basisinfo.h:71
ergo_real getShellFactor(const IntegralInfo &integralInfo, ergo_real exponent, int shellType, int use_6_d_funcs)
Definition: basisinfo.cc:288
Definition: basisinfo.h:81
int use_6_d_funcs
Whether to use 6 d-type basis functions instead of the usual 5 functions.
Definition: basisinfo.h:112
ergo_real getSafeMaxDistance(const BasisInfoStruct &basisInfo)
Compute safe upper limit for largest possible distance between any two basis functions in given basis...
Definition: basisinfo.cc:915
int startAtomIndex
Definition: basisinfo.h:106
ergo_real coeffList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:67
Vector3D centerCoords
Definition: basisinfo.h:86
Representation of a molecule as a set of nuclei and total charge.
Definition: molecule.h:76
int startIndexInMatrix
Definition: basisinfo.h:76
BasisInfoStruct * permuteShells(const int *shellMap, const IntegralInfo &ii) const
a factory method generating new BasisInfo struct with permuted shells and basis functions.
Definition: basisinfo.cc:625
int get_simple_primitives_all(BasisInfoStruct *basisInfo, const IntegralInfo *integralInfo)
int noOfSimplePrimitives
Definition: basisinfo.h:121
int noOfContr
Definition: basisinfo.h:82
int noOfContr
Definition: basisinfo.h:72
int basisFuncIndex_1
Definition: basisinfo.h:54
ergo_real sizeList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:69
ergo_real extent
Definition: basisinfo.h:85
ergo_real exponentList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:68
const int MAX_NO_OF_PRIMS
Definition: basisinfo.h:174
Simple atom representation by its charge and cartesian coordinates.
Definition: molecule.h:40
DistributionSpecStruct distr
Definition: basisinfo.h:60
Contains coefficients needed for quick integral evaluation.
Definition: integral_info.h:81
ergo_real limitingFactor
Definition: basisinfo.h:58
int startAtomIndex
Definition: basisinfo.h:99
int noOfBasisFuncs
Definition: basisinfo.h:119
ergo_real extent
Definition: basisinfo.h:46
int functionNumber
Definition: basisinfo.h:88
int noOfSimplePrimitives
Definition: basisinfo.h:89
basis_func_term_struct poly[MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY]
Definition: basisinfo.h:92
DistributionSpecStruct * list
Definition: basisinfo.h:175
Definition: integral_info.h:50
int normalizeShells(const IntegralInfo &integralInfo)
Normalizes shells so that the overlap of each basis function with itself will be 1.
Definition: basisinfo.cc:657
Definition: basisinfo.h:104
int dummy
Definition: basisinfo.h:77
Definition: basisinfo.h:111
int shellType
Definition: basisinfo.h:87
void addBasisfuncsForAtomList(const Atom *atomList, int noOfAtoms, const basisset_struct *basissetDefault, int noOfRanges, const basis_set_range_struct *rangeList, const IntegralInfo &integralInfo, int print_raw, int do_normalization, int skip_sort_shells)
Definition: basisinfo.cc:440
size_t get_size() const
Function needed for Chunks&Tasks usage.
Definition: basisinfo.cc:865
BasisInfoStruct(int use_6_d_funcs_=0)
Initializes all the fields to sane values.
Definition: basisinfo.cc:810
int basisFuncIndex_2
Definition: basisinfo.h:55
~SquareFuncIntegrator()
Definition: basisinfo.h:182
int simplePrimitiveIndex
Definition: basisinfo.h:90
ergo_real computeIntegralOfSquareOfBasisFunc(const IntegralInfo &integralInfo, BasisFuncStruct *basisFunc, int use_6_d_funcs)
Definition: basisinfo.cc:250
int charge
Definition: grid_test.cc:49
SquareFuncIntegrator()
Definition: basisinfo.h:177
ShellSpecStruct * shellList
Definition: basisinfo.h:118
ergo_real exponent
exponent alfa
Definition: basisinfo.h:45
int get_basis_funcs(BasisInfoStruct *basisInfo, const IntegralInfo *integralInfo, int do_normalization)
Definition: basisinfo.h:43
int shell_ID
Definition: basisinfo.h:74
Definition: basisinfo.h:66
int getSimplePrimitivesAll(const IntegralInfo &integralInfo)
Definition: basisinfo.cc:773
char monomialInts[4]
nx, ny, nz
Definition: basisinfo.h:48
void write_to_buffer(char *dataBuffer, size_t const bufferSize) const
Function needed for Chunks&Tasks usage.
Definition: basisinfo.cc:838
int pairIndex
Definition: basisinfo.h:56
int count
Definition: basisinfo.h:100
int noOfShells
Definition: basisinfo.h:117
int count
Definition: basisinfo.h:107
Provides temporary storage for compute_integral_of_square_of_basis_func.
Definition: basisinfo.h:173
Definition: basisinfo.h:52
DistributionSpecStruct * simplePrimitiveList
Definition: basisinfo.h:122
ergo_real exponentList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:84