ergo
basisinfo.h
Go to the documentation of this file.
1 /* Ergo, version 3.7, a program for linear scaling electronic structure
2  * calculations.
3  * Copyright (C) 2018 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 
61  int pairIndex;
62  int groupID;
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 */
77  int noOfContr;
78  int shellType;
79  int shell_ID;
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 
86  int noOfContr;
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 
129  BasisInfoStruct(const BasisInfoStruct & b);
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 
190  const int MAX_NO_OF_PRIMS;
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 
215 int 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);
227 struct AtomInfoStruct_{
228  int charge;
229  ergo_real coords[3];
230 };
231 typedef struct AtomInfoStruct_ AtomInfoStruct;
232 #endif
233 
234 int get_basis_funcs(BasisInfoStruct* basisInfo,
235  const IntegralInfo* integralInfo,
236  int do_normalization);
237 
239  const IntegralInfo* integralInfo);
240 
241 int output_basisinfo(const BasisInfoStruct & basisInfo);
242 
243 ergo_real getSafeMaxDistance(const BasisInfoStruct & basisInfo);
244 
245 
246 #endif
void assign_from_buffer(char const *dataBuffer, size_t const bufferSize)
Function needed for Chunks&Tasks usage.
Definition: basisinfo.cc:932
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()
Definition: basisinfo.cc:963
int noOfContr
Definition: basisinfo.h:77
static int getNoOfBasisFuncsForAtomType(const basisset_info &basisset, const IntegralInfo &integralInfo, int atomCharge, int use_6_d_funcs)
Definition: basisinfo.cc:655
Definition: basisinfo.h:100
ergo_real dmatElement
Definition: basisinfo.h:64
int output_basisinfo(const BasisInfoStruct &basisInfo)
Definition: basisinfo.cc:61
int shellType
Definition: basisinfo.h:91
double ergo_real
Definition: realtype.h:69
#define MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY
Definition: integral_info.h:53
int dummy
Definition: basisinfo.h:82
DistributionSpecStruct * productlist
Definition: basisinfo.h:192
Definition: basisset.h:75
int get_basis_funcs()
creates list of &#39;basis functions&#39;, and set startIndexInMatrix for each shell.
Definition: basisinfo.cc:792
int shell_ID
Definition: basisinfo.h:79
ergo_real exponentList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:88
Code for representing basis set information for Gaussian basis sets, and for parsing a text file spec...
A representation of Vector or point in cartesian space.
Definition: molecule.h:60
char * basisSetFileName
Definition: basisinfo.h:109
ergo_real extent
Definition: basisinfo.h:53
BasisFuncStruct * basisFuncList
Definition: basisinfo.h:121
int groupID
Definition: basisinfo.h:62
#define MAX_NO_OF_CONTR_GAUSSIANS
Definition: basisinfo.h:69
ergo_real getShellFactor(const IntegralInfo &integralInfo, ergo_real exponent, int shellType, int use_6_d_funcs)
Definition: basisinfo.cc:277
int noOfSimplePrimitives
Definition: basisinfo.h:93
int use_6_d_funcs
Whether to use 6 d-type basis functions instead of the usual 5 functions.
Definition: basisinfo.h:113
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
ergo_real sizeList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:74
int startIndexInMatrix
Definition: basisinfo.h:81
Class representing a molecule as a set of atoms with assiciated coordinates and charges of the atomic...
int startAtomIndex
Definition: basisinfo.h:107
Representation of a molecule as a set of nuclei and total charge.
Definition: molecule.h:87
int get_simple_primitives_all(BasisInfoStruct *basisInfo, const IntegralInfo *integralInfo)
int noOfSimplePrimitives
Definition: basisinfo.h:122
int basisFuncIndex_1
Definition: basisinfo.h:59
Definition: basisinfo.h:50
ergo_real coeffList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:87
basisset_info * basisset
Definition: basisinfo.h:103
const int MAX_NO_OF_PRIMS
Definition: basisinfo.h:190
Vector3D centerCoords
Definition: basisinfo.h:90
Simple atom representation by its charge and cartesian coordinates.
Definition: molecule.h:51
DistributionSpecStruct distr
Definition: basisinfo.h:65
Definition of the main floating-point datatype used; the ergo_real type.
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
ergo_real coeffList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:72
Contains coefficients needed for quick integral evaluation.
Definition: integral_info.h:93
ergo_real limitingFactor
Definition: basisinfo.h:63
int startAtomIndex
Definition: basisinfo.h:101
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 simplePrimitiveIndex
Definition: basisinfo.h:94
int noOfBasisFuncs
Definition: basisinfo.h:80
Defines IntegralInfo object, providing the coefficients needed for integral evaluation.
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
DistributionSpecStruct * list
Definition: basisinfo.h:191
Definition: integral_info.h:62
int normalizeShells(const IntegralInfo &integralInfo)
Normalizes shells so that the overlap of each basis function with itself will be 1.
Definition: basisinfo.cc:715
Definition: basisinfo.h:106
int shellType
Definition: basisinfo.h:78
Definition: basisinfo.h:71
Definition: basisinfo.h:112
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
int noOfTermsInPolynomial
Definition: basisinfo.h:95
ergo_real exponent
exponent alfa
Definition: basisinfo.h:52
ergo_real padding
Definition: basisinfo.h:75
ergo_real centerCoords[3]
Definition: basisinfo.h:76
BasisInfoStruct(int use_6_d_funcs_=0)
Initializes all the fields to sane values.
Definition: basisinfo.cc:869
int basisFuncIndex_2
Definition: basisinfo.h:60
~SquareFuncIntegrator()
Definition: basisinfo.h:198
ergo_real computeIntegralOfSquareOfBasisFunc(const IntegralInfo &integralInfo, BasisFuncStruct *basisFunc, int use_6_d_funcs)
Definition: basisinfo.cc:239
int charge
Definition: grid_test.cc:51
SquareFuncIntegrator()
Definition: basisinfo.h:193
ShellSpecStruct * shellList
Definition: basisinfo.h:119
int get_basis_funcs(BasisInfoStruct *basisInfo, const IntegralInfo *integralInfo, int do_normalization)
ergo_real exponentList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:73
basis_func_term_struct poly[MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY]
Definition: basisinfo.h:96
Definition: basisinfo.h:85
int getSimplePrimitivesAll(const IntegralInfo &integralInfo)
Definition: basisinfo.cc:831
size_t get_size() const
Function needed for Chunks&Tasks usage.
Definition: basisinfo.cc:924
int functionNumber
Definition: basisinfo.h:92
int pairIndex
Definition: basisinfo.h:61
int count
Definition: basisinfo.h:102
ergo_real extent
Definition: basisinfo.h:89
ergo_real coeff
Coefficient A.
Definition: basisinfo.h:51
int noOfShells
Definition: basisinfo.h:118
int noOfContr
Definition: basisinfo.h:86
int count
Definition: basisinfo.h:108
Provides temporary storage for compute_integral_of_square_of_basis_func.
Definition: basisinfo.h:189
Definition: basisinfo.h:58
ergo_real centerCoords[3]
x0, y0, z0
Definition: basisinfo.h:54
char monomialInts[4]
nx, ny, nz
Definition: basisinfo.h:55
DistributionSpecStruct * simplePrimitiveList
Definition: basisinfo.h:123