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 
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 
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
template_blas_pow
Treal template_blas_pow(Treal x, Treal y)
SquareFuncIntegrator::~SquareFuncIntegrator
~SquareFuncIntegrator()
Definition: basisinfo.h:198
BasisFuncStruct::noOfSimplePrimitives
int noOfSimplePrimitives
Definition: basisinfo.h:93
basis_func_poly_struct
Definition: integral_info.h:70
template_blas_sqrt
Treal template_blas_sqrt(Treal x)
SquareFuncIntegrator
Provides temporary storage for compute_integral_of_square_of_basis_func.
Definition: basisinfo.h:189
ShellSpecStruct::coeffList
ergo_real coeffList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:72
BasisFuncStruct::functionNumber
int functionNumber
Definition: basisinfo.h:92
basisset.h
Code for representing basis set information for Gaussian basis sets, and for parsing a text file spec...
Vector3D
A representation of Vector or point in cartesian space.
Definition: molecule.h:60
find_range_index
static int find_range_index(int atomIndex, int noOfRanges, const basis_set_range_struct *rangeList)
Definition: basisinfo.cc:299
BasisInfoStruct::addBasisfuncsForPoint
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
output_basisinfo
int output_basisinfo(const BasisInfoStruct &basisInfo)
Definition: basisinfo.cc:61
realtype.h
Definition of the main floating-point datatype used; the ergo_real type.
BasisInfoStruct::noOfBasisFuncs
int noOfBasisFuncs
Definition: basisinfo.h:120
pi.h
Constants for the number pi and some related numbers like sqrt(pi).
BasisInfoStruct::write_to_buffer
void write_to_buffer(char *dataBuffer, size_t const bufferSize) const
Function needed for Chunks&Tasks usage.
Definition: basisinfo.cc:897
DistributionSpecStruct
Definition: basisinfo.h:50
basis_func_term_struct::monomialID
int monomialID
Definition: integral_info.h:66
BasisFuncStruct::shellType
int shellType
Definition: basisinfo.h:91
ShellSpecStruct::noOfBasisFuncs
int noOfBasisFuncs
Definition: basisinfo.h:80
basisset_shell_struct::coeffList
ergo_real coeffList[MAX_NO_OF_CONTR]
Definition: basisset.h:66
DistributionSpecStructLabeled::basisFuncIndex_1
int basisFuncIndex_1
Definition: basisinfo.h:59
basis_func_poly_struct::noOfTerms
int noOfTerms
Definition: integral_info.h:71
memorymanag.h
Memory allocation/deallocation routines.
ShellSpecStruct::padding
ergo_real padding
Definition: basisinfo.h:75
DistributionSpecStructLabeled::pairIndex
int pairIndex
Definition: basisinfo.h:61
LOG_CAT_ERROR
#define LOG_CAT_ERROR
Definition: output.h:47
DistributionSpecStruct::centerCoords
ergo_real centerCoords[3]
x0, y0, z0
Definition: basisinfo.h:54
ergo_real
double ergo_real
Definition: realtype.h:69
BasissetNameRange::startAtomIndex
int startAtomIndex
Definition: basisinfo.h:107
boysfunction.h
Code for Boys function evaluation.
BasisInfoStruct::normalizeShells
int normalizeShells(const IntegralInfo &integralInfo)
Normalizes shells so that the overlap of each basis function with itself will be 1.
Definition: basisinfo.cc:715
ShellSpecStruct::shellType
int shellType
Definition: basisinfo.h:78
BasisInfoStruct::permuteShells
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
ShellSpecStruct
Definition: basisinfo.h:71
SquareFuncIntegrator::list
DistributionSpecStruct * list
Definition: basisinfo.h:191
BasisInfoStruct::shellList
ShellSpecStruct * shellList
Definition: basisinfo.h:119
ShellSpecStruct::centerCoords
ergo_real centerCoords[3]
Definition: basisinfo.h:76
MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY
#define MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY
Definition: integral_info.h:53
BasisInfoStruct::BasisInfoStruct
BasisInfoStruct(int use_6_d_funcs_=0)
Initializes all the fields to sane values.
Definition: basisinfo.cc:869
integrals_general.h
General functionality related to computation of integrals involving Gaussian basis functions.
BasisInfoStruct
Definition: basisinfo.h:112
Molecule::getNoOfAtoms
int getNoOfAtoms() const
Definition: molecule.h:114
BasisFuncStruct::exponentList
ergo_real exponentList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:88
Atom
Simple atom representation by its charge and cartesian coordinates.
Definition: molecule.h:51
ShellSpecStruct::exponentList
ergo_real exponentList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:73
basisset_info
Definition: basisset.h:75
basis_func_term_struct::monomialInts
char monomialInts[4]
Definition: integral_info.h:65
BasisInfoStruct::getSimplePrimitivesAll
int getSimplePrimitivesAll(const IntegralInfo &integralInfo)
Definition: basisinfo.cc:831
SquareFuncIntegrator::computeIntegralOfSquareOfBasisFunc
ergo_real computeIntegralOfSquareOfBasisFunc(const IntegralInfo &integralInfo, BasisFuncStruct *basisFunc, int use_6_d_funcs)
Definition: basisinfo.cc:239
template_blas_fabs
Treal template_blas_fabs(Treal x)
BasisInfoStruct::get_size
size_t get_size() const
Function needed for Chunks&Tasks usage.
Definition: basisinfo.cc:924
charge
int charge
Definition: grid_test.cc:51
DistributionSpecStructLabeled::basisFuncIndex_2
int basisFuncIndex_2
Definition: basisinfo.h:60
basis_set_range_struct::startAtomIndex
int startAtomIndex
Definition: basisinfo.h:101
MAX_NO_OF_SHELLS_PER_ATOM
#define MAX_NO_OF_SHELLS_PER_ATOM
Definition: basisset.h:53
basisset_shell_struct
Definition: basisset.h:61
IntegralInfo::monomial_info
monomial_info_struct monomial_info
Definition: integral_info.h:105
basis_func_term_struct
Definition: integral_info.h:63
get_simple_primitives_all
int get_simple_primitives_all(BasisInfoStruct *basisInfo, const IntegralInfo *integralInfo)
basisset_shell_struct::contrCount
int contrCount
Definition: basisset.h:63
BasissetNameRange::basisSetFileName
char * basisSetFileName
Definition: basisinfo.h:109
pi
#define pi
Definition: pi.h:57
setup_shells_multi_basis
static int setup_shells_multi_basis(const IntegralInfo &integralInfo, const Atom *atomList, int noOfAtoms, const basisset_info *basissetDefault, ShellSpecStruct *shell_list, int noOfShells, int noOfRanges, const basis_set_range_struct *rangeList, int use_6_d_funcs)
Definition: basisinfo.cc:364
BasisFuncStruct::noOfTermsInPolynomial
int noOfTermsInPolynomial
Definition: basisinfo.h:95
basisset_shell_struct::exponentList
ergo_real exponentList[MAX_NO_OF_CONTR]
Definition: basisset.h:65
get_simple_primitives
static int get_simple_primitives(BasisFuncStruct *currBasisFunc, DistributionSpecStruct *list, int nInput, int nListMax, const IntegralInfo &b, int use_6_d_funcs)
Definition: basisinfo.cc:141
BasisInfoStruct::assign_from_buffer
void assign_from_buffer(char const *dataBuffer, size_t const bufferSize)
Function needed for Chunks&Tasks usage.
Definition: basisinfo.cc:932
MAX_NO_OF_CONTR_GAUSSIANS
#define MAX_NO_OF_CONTR_GAUSSIANS
Definition: basisinfo.h:69
monomial_info_struct::monomial_index_list
int monomial_index_list[MONOMIAL_N_MAX+1][MONOMIAL_N_MAX+1][MONOMIAL_N_MAX+1]
Definition: monomial_info.h:62
sort_shells
static int sort_shells(ShellSpecStruct *list, ShellSpecStruct *listTemp, int n)
Definition: basisinfo.cc:183
basisset_shell_struct::shell_ID
int shell_ID
Definition: basisset.h:64
BasisInfoStruct::getNoOfBasisFuncsForAtomType
static int getNoOfBasisFuncsForAtomType(const basisset_info &basisset, const IntegralInfo &integralInfo, int atomCharge, int use_6_d_funcs)
Definition: basisinfo.cc:655
IntegralInfo
Contains coefficients needed for quick integral evaluation.
Definition: integral_info.h:94
read_basisset_file
int read_basisset_file(basisset_info &result, const char *fileName, int dirc, const char *dirv[], int print_raw)
Definition: basisset.cc:115
BasisInfoStruct::noOfShells
int noOfShells
Definition: basisinfo.h:118
DistributionSpecStructLabeled::groupID
int groupID
Definition: basisinfo.h:62
BasisFuncStruct::coeffList
ergo_real coeffList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:87
DistributionSpecStructLabeled
Definition: basisinfo.h:58
BasisInfoStruct::simplePrimitiveList
DistributionSpecStruct * simplePrimitiveList
Definition: basisinfo.h:123
BasisFuncStruct::simplePrimitiveIndex
int simplePrimitiveIndex
Definition: basisinfo.h:94
ShellSpecStruct::dummy
int dummy
Definition: basisinfo.h:82
BasisInfoStruct::~BasisInfoStruct
~BasisInfoStruct()
Definition: basisinfo.cc:963
BasisInfoStruct::addBasisfuncsForMolecule
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
ShellSpecStruct::noOfContr
int noOfContr
Definition: basisinfo.h:77
basis_set_range_struct::basisset
basisset_info * basisset
Definition: basisinfo.h:103
ERGO_SPREFIX
#define ERGO_SPREFIX
Definition: config.h:8
get_product_simple_prims
int get_product_simple_prims(const DistributionSpecStruct &primA_in, const DistributionSpecStruct &primB_in, DistributionSpecStruct resultList[], int maxCount, ergo_real threshold)
Definition: integrals_general.cc:91
setup_shells_multi_basis_getcount
static int setup_shells_multi_basis_getcount(const Atom *atomList, int noOfAtoms, const basisset_info *basissetDefault, int noOfRanges, const basis_set_range_struct *rangeList)
Returns number of shells needed to describe the electronic density for given molecule and basis set.
Definition: basisinfo.cc:340
basis_func_term_struct::coeff
ergo_real coeff
Definition: integral_info.h:64
BasisFuncStruct::noOfContr
int noOfContr
Definition: basisinfo.h:86
BasisInfoStruct::get_basis_funcs
int get_basis_funcs()
creates list of 'basis functions', and set startIndexInMatrix for each shell.
Definition: basisinfo.cc:792
integral_info.h
Defines IntegralInfo object, providing the coefficients needed for integral evaluation.
utilities.h
Basic OS access utilities.
get_basis_funcs
int get_basis_funcs(BasisInfoStruct *basisInfo, const IntegralInfo *integralInfo, int do_normalization)
LOG_CAT_INFO
#define LOG_CAT_INFO
Definition: output.h:49
BasisFuncStruct
Definition: basisinfo.h:85
SquareFuncIntegrator::SquareFuncIntegrator
SquareFuncIntegrator()
Definition: basisinfo.h:193
ERGO_DATA_PREFIX
#define ERGO_DATA_PREFIX
Definition: config.h:5
basisinfo.h
Code for setting up basis functions starting from shells.
BasisInfoStruct::basisFuncList
BasisFuncStruct * basisFuncList
Definition: basisinfo.h:121
getSafeMaxDistance
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
BasisFuncStruct::centerCoords
Vector3D centerCoords
Definition: basisinfo.h:90
ShellSpecStruct::shell_ID
int shell_ID
Definition: basisinfo.h:79
IntegralInfo::no_of_basis_func_polys
int no_of_basis_func_polys
Definition: integral_info.h:104
select_basis_set
static const basisset_info * select_basis_set(int atomIndex, int noOfRanges, const basis_set_range_struct *rangeList, const basisset_info *basissetDefault)
Definition: basisinfo.cc:310
LOG_AREA_INTEGRALS
#define LOG_AREA_INTEGRALS
Definition: output.h:60
BasissetNameRange
Definition: basisinfo.h:106
BasisInfoStruct::use_6_d_funcs
int use_6_d_funcs
Whether to use 6 d-type basis functions instead of the usual 5 functions.
Definition: basisinfo.h:113
DistributionSpecStruct::monomialInts
char monomialInts[4]
nx, ny, nz
Definition: basisinfo.h:55
ShellSpecStruct::sizeList
ergo_real sizeList[MAX_NO_OF_CONTR_GAUSSIANS]
Definition: basisinfo.h:74
Atom::charge
ergo_real charge
Definition: molecule.h:52
ShellSpecStruct::startIndexInMatrix
int startIndexInMatrix
Definition: basisinfo.h:81
compute_integral_of_simple_prim
ergo_real compute_integral_of_simple_prim(const DistributionSpecStruct &distr)
Definition: integrals_general.cc:318
molecule.h
Class representing a molecule as a set of atoms with assiciated coordinates and charges of the atomic...
DistributionSpecStruct::coeff
ergo_real coeff
Coefficient A.
Definition: basisinfo.h:51
Molecule
Representation of a molecule as a set of nuclei and total charge.
Definition: molecule.h:87
BasisInfoStruct::noOfSimplePrimitives
int noOfSimplePrimitives
Definition: basisinfo.h:122
getSafeMaxDistance
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
BasisFuncStruct::extent
ergo_real extent
Definition: basisinfo.h:89
Molecule::getAtomListPtr
const Atom * getAtomListPtr() const
Definition: molecule.h:112
basisset_shell_struct::type
int type
Definition: basisset.h:62
machine_epsilon.h
Functionality for determining an approximate value of the "machine epsilon" – the smallest number tha...
BasissetNameRange::count
int count
Definition: basisinfo.h:108
SquareFuncIntegrator::MAX_NO_OF_PRIMS
const int MAX_NO_OF_PRIMS
Definition: basisinfo.h:190
output_basisinfo
int output_basisinfo(const BasisInfoStruct &basisInfo)
Definition: basisinfo.cc:61
SquareFuncIntegrator::getShellFactor
ergo_real getShellFactor(const IntegralInfo &integralInfo, ergo_real exponent, int shellType, int use_6_d_funcs)
Definition: basisinfo.cc:277
IntegralInfo::basis_func_poly_list
basis_func_poly_struct basis_func_poly_list[MAX_NO_OF_BASIS_FUNC_POLYS]
Definition: integral_info.h:103
DistributionSpecStructLabeled::distr
DistributionSpecStruct distr
Definition: basisinfo.h:65
get_machine_epsilon
ergo_real get_machine_epsilon()
return machine epsilon.
Definition: machine_epsilon.cc:50
Atom::coords
ergo_real coords[3]
Definition: molecule.h:53
define_basis_func_poly
static void define_basis_func_poly(BasisFuncStruct *basisFunc, int polyIndex, const IntegralInfo &b)
Definition: basisinfo.cc:102
BasisFuncStruct::poly
basis_func_term_struct poly[MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY]
Definition: basisinfo.h:96
basisset_info::atoms
std::vector< basisset_atom_struct > atoms
Definition: basisset.h:76
do_output
void do_output(int logCategory, int logArea, const char *format,...)
Definition: output.cc:53
basis_func_poly_struct::termList
basis_func_term_struct termList[MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY]
Definition: integral_info.h:72
define_basis_func_poly_special_6dfuncs
static void define_basis_func_poly_special_6dfuncs(BasisFuncStruct *basisFunc, const IntegralInfo &b)
Definition: basisinfo.cc:114
basis_set_range_struct::count
int count
Definition: basisinfo.h:102
DistributionSpecStruct::exponent
ergo_real exponent
exponent alfa
Definition: basisinfo.h:52
DistributionSpecStruct::extent
ergo_real extent
Definition: basisinfo.h:53
basis_set_range_struct
Definition: basisinfo.h:100
DistributionSpecStructLabeled::limitingFactor
ergo_real limitingFactor
Definition: basisinfo.h:63
DistributionSpecStructLabeled::dmatElement
ergo_real dmatElement
Definition: basisinfo.h:64
output.h
Functionality for writing output messages to a text file.
SquareFuncIntegrator::productlist
DistributionSpecStruct * productlist
Definition: basisinfo.h:192
BasisInfoStruct::addBasisfuncsForAtomList
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