ergo
basisinfo.h
Go to the documentation of this file.
1/* Ergo, version 3.8, a program for linear scaling electronic structure
2 * calculations.
3 * Copyright (C) 2019 Elias Rudberg, Emanuel H. Rubensson, Pawel Salek,
4 * and Anastasia Kruchinina.
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * Primary academic reference:
20 * Ergo: An open-source program for linear-scaling electronic structure
21 * calculations,
22 * Elias Rudberg, Emanuel H. Rubensson, Pawel Salek, and Anastasia
23 * Kruchinina,
24 * SoftwareX 7, 107 (2018),
25 * <http://dx.doi.org/10.1016/j.softx.2018.03.005>
26 *
27 * For further information about Ergo, see <http://www.ergoscf.org>.
28 */
29
37#ifndef BASISINFO_HEADER
38#define BASISINFO_HEADER
39
40/* for NULL */
41#include <stdlib.h>
42
43#include "realtype.h"
44#include "integral_info.h"
45/* for Molecule */
46#include "molecule.h"
47
48#include "basisset.h"
49
53 ergo_real extent; /* FIXME ELIAS: remove this here since the "extent" you want to use depends on what you are doing? */
55 char monomialInts[4];
56};
57
63 ergo_real limitingFactor; // squareroot of repulsion integral of this distr with itself.
66};
67
68
69#define MAX_NO_OF_CONTR_GAUSSIANS 20
70
75 ergo_real padding; /* We keep this for compatibility with old density files... */
76 ergo_real centerCoords[3]; /* x0, y0, z0 */
81 int startIndexInMatrix; /* start index in density matrix */
82 int dummy; /* padding to make sure the size of this structure is a multiple of 8 bytes */
83};
84
90 Vector3D centerCoords; /* x0, y0, z0 */
91 int shellType; /* 0 <-> 's', 1 <-> 'p', 2 <-> 'd' etc */
92 int functionNumber; /* -1,0,1 for 'p', -2,-1,0,1,2 for 'd', etc */
97};
98
99
102 int count;
104};
105
108 int count;
110};
111
124
126 BasisInfoStruct(int use_6_d_funcs_ = 0);
127
130
132
134 ergo_real y,
135 ergo_real z,
136 int shellType,
137 ergo_real exponent,
138 const IntegralInfo & integralInfo,
139 int print_raw,
140 int do_normalization,
141 int skip_sort_shells);
142
143 void addBasisfuncsForAtomList(const Atom* atomList,
144 int noOfAtoms,
145 const basisset_info & basissetDefault,
146 int noOfRanges,
147 const basis_set_range_struct* rangeList,
148 const IntegralInfo & integralInfo,
149 int print_raw,
150 int do_normalization,
151 int skip_sort_shells);
152
153 int addBasisfuncsForMolecule(const Molecule& molecule,
154 const char* basisset_filename_default,
155 int noOfRanges,
156 const BasissetNameRange* rangeList,
157 const IntegralInfo& integralInfo,
158 int print_raw,
159 int do_normalization,
160 int skip_sort_shells);
161
162 static int getNoOfBasisFuncsForAtomType(const basisset_info & basisset,
163 const IntegralInfo & integralInfo,
164 int atomCharge,
165 int use_6_d_funcs);
166
167 BasisInfoStruct *permuteShells(const int *shellMap,
168 const IntegralInfo& ii) const;
169
170 int normalizeShells(const IntegralInfo& integralInfo);
171
172 int get_basis_funcs();
173
174 int getSimplePrimitivesAll(const IntegralInfo& integralInfo);
175
176 // Stuff needed for Chunks&Tasks usage
177 void write_to_buffer ( char * dataBuffer, size_t const bufferSize ) const;
178 size_t get_size() const;
179 void assign_from_buffer ( char const * dataBuffer, size_t const bufferSize);
180};
181
182
183
194 {
197 }
199 {
200 delete []list;
201 delete []productlist;
202 }
204 (const IntegralInfo& integralInfo, BasisFuncStruct* basisFunc, int use_6_d_funcs);
205
206 ergo_real getShellFactor(const IntegralInfo& integralInfo,
207 ergo_real exponent, int shellType, int use_6_d_funcs);
208};
209
210
211
212
213#ifdef ERGO_ENABLE_DEPRECATED
214
215int basisinfo_construct_multi_basis(BasisInfoStruct* result_basisInfo,
216 const Molecule* molecule,
217 const char* basisset_filename_default,
218 const Molecule* ghostMolecule,
219 const char* ghost_molecule_basisset_filename,
220 int noOfRanges,
221 const BasissetNameRange* rangeList,
222 IntegralInfo* integralInfo,
223 int print_raw,
224 int do_normalization,
225 int skip_sort_shells,
226 int skip_standard_basis);
227struct AtomInfoStruct_{
228 int charge;
229 ergo_real coords[3];
230};
231typedef struct AtomInfoStruct_ AtomInfoStruct;
232#endif
233
235 const IntegralInfo* integralInfo,
236 int do_normalization);
237
239 const IntegralInfo* integralInfo);
240
241int output_basisinfo(const BasisInfoStruct & basisInfo);
242
244
245
246#endif
int get_basis_funcs(BasisInfoStruct *basisInfo, const IntegralInfo *integralInfo, int do_normalization)
#define MAX_NO_OF_CONTR_GAUSSIANS
Definition: basisinfo.h:69
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:974
int output_basisinfo(const BasisInfoStruct &basisInfo)
Definition: basisinfo.cc:61
int get_simple_primitives_all(BasisInfoStruct *basisInfo, const IntegralInfo *integralInfo)
Code for representing basis set information for Gaussian basis sets, and for parsing a text file spec...
Contains coefficients needed for quick integral evaluation.
Definition: integral_info.h:94
Representation of a molecule as a set of nuclei and total charge.
Definition: molecule.h:87
int charge
Definition: grid_test.cc:51
Defines IntegralInfo object, providing the coefficients needed for integral evaluation.
#define MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY
Definition: integral_info.h:53
Class representing a molecule as a set of atoms with assiciated coordinates and charges of the atomic...
Definition of the main floating-point datatype used; the ergo_real type.
double ergo_real
Definition: realtype.h:69
Simple atom representation by its charge and cartesian coordinates.
Definition: molecule.h:51
Definition: basisinfo.h:85
basis_func_term_struct poly[MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY]
Definition: basisinfo.h:96
int noOfContr
Definition: basisinfo.h:86
int functionNumber
Definition: basisinfo.h:92
ergo_real coeffList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:87
int simplePrimitiveIndex
Definition: basisinfo.h:94
int noOfTermsInPolynomial
Definition: basisinfo.h:95
int shellType
Definition: basisinfo.h:91
int noOfSimplePrimitives
Definition: basisinfo.h:93
ergo_real exponentList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:88
ergo_real extent
Definition: basisinfo.h:89
Vector3D centerCoords
Definition: basisinfo.h:90
Definition: basisinfo.h:112
int noOfBasisFuncs
Definition: basisinfo.h:120
void write_to_buffer(char *dataBuffer, size_t const bufferSize) const
Function needed for Chunks&Tasks usage.
Definition: basisinfo.cc:897
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:579
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:683
static int getNoOfBasisFuncsForAtomType(const basisset_info &basisset, const IntegralInfo &integralInfo, int atomCharge, int use_6_d_funcs)
Definition: basisinfo.cc:655
DistributionSpecStruct * simplePrimitiveList
Definition: basisinfo.h:123
int normalizeShells(const IntegralInfo &integralInfo)
Normalizes shells so that the overlap of each basis function with itself will be 1.
Definition: basisinfo.cc:715
int noOfSimplePrimitives
Definition: basisinfo.h:122
int get_basis_funcs()
creates list of 'basis functions', and set startIndexInMatrix for each shell.
Definition: basisinfo.cc:792
void addBasisfuncsForPoint(ergo_real x, ergo_real y, ergo_real z, int shellType, ergo_real exponent, const IntegralInfo &integralInfo, int print_raw, int do_normalization, int skip_sort_shells)
Definition: basisinfo.cc:429
void assign_from_buffer(char const *dataBuffer, size_t const bufferSize)
Function needed for Chunks&Tasks usage.
Definition: basisinfo.cc:932
int use_6_d_funcs
Whether to use 6 d-type basis functions instead of the usual 5 functions.
Definition: basisinfo.h:113
~BasisInfoStruct()
Definition: basisinfo.cc:963
int getSimplePrimitivesAll(const IntegralInfo &integralInfo)
Definition: basisinfo.cc:831
size_t get_size() const
Function needed for Chunks&Tasks usage.
Definition: basisinfo.cc:924
void addBasisfuncsForAtomList(const Atom *atomList, int noOfAtoms, const basisset_info &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:474
int noOfShells
Definition: basisinfo.h:118
BasisFuncStruct * basisFuncList
Definition: basisinfo.h:121
ShellSpecStruct * shellList
Definition: basisinfo.h:119
Definition: basisinfo.h:106
char * basisSetFileName
Definition: basisinfo.h:109
int count
Definition: basisinfo.h:108
int startAtomIndex
Definition: basisinfo.h:107
Definition: basisinfo.h:58
ergo_real limitingFactor
Definition: basisinfo.h:63
ergo_real dmatElement
Definition: basisinfo.h:64
DistributionSpecStruct distr
Definition: basisinfo.h:65
int groupID
Definition: basisinfo.h:62
int basisFuncIndex_1
Definition: basisinfo.h:59
int pairIndex
Definition: basisinfo.h:61
int basisFuncIndex_2
Definition: basisinfo.h:60
Definition: basisinfo.h:50
ergo_real extent
Definition: basisinfo.h:53
ergo_real centerCoords[3]
x0, y0, z0
Definition: basisinfo.h:54
char monomialInts[4]
nx, ny, nz
Definition: basisinfo.h:55
ergo_real exponent
exponent alfa
Definition: basisinfo.h:52
ergo_real coeff
Coefficient A.
Definition: basisinfo.h:51
Definition: basisinfo.h:71
int dummy
Definition: basisinfo.h:82
ergo_real centerCoords[3]
Definition: basisinfo.h:76
int shell_ID
Definition: basisinfo.h:79
int shellType
Definition: basisinfo.h:78
int startIndexInMatrix
Definition: basisinfo.h:81
ergo_real sizeList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:74
ergo_real coeffList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:72
ergo_real exponentList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:73
int noOfContr
Definition: basisinfo.h:77
ergo_real padding
Definition: basisinfo.h:75
int noOfBasisFuncs
Definition: basisinfo.h:80
Provides temporary storage for compute_integral_of_square_of_basis_func.
Definition: basisinfo.h:189
SquareFuncIntegrator()
Definition: basisinfo.h:193
~SquareFuncIntegrator()
Definition: basisinfo.h:198
ergo_real getShellFactor(const IntegralInfo &integralInfo, ergo_real exponent, int shellType, int use_6_d_funcs)
Definition: basisinfo.cc:277
DistributionSpecStruct * productlist
Definition: basisinfo.h:192
ergo_real computeIntegralOfSquareOfBasisFunc(const IntegralInfo &integralInfo, BasisFuncStruct *basisFunc, int use_6_d_funcs)
Definition: basisinfo.cc:239
DistributionSpecStruct * list
Definition: basisinfo.h:191
const int MAX_NO_OF_PRIMS
Definition: basisinfo.h:190
A representation of Vector or point in cartesian space.
Definition: molecule.h:60
Definition: integral_info.h:63
Definition: basisinfo.h:100
int count
Definition: basisinfo.h:102
int startAtomIndex
Definition: basisinfo.h:101
basisset_info * basisset
Definition: basisinfo.h:103
Definition: basisset.h:75