basisinfo.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef BASISINFO_HEADER
00029 #define BASISINFO_HEADER
00030
00031
00032 #include <stdlib.h>
00033
00034 #include "realtype.h"
00035 #include "integral_info.h"
00036
00037 #include "molecule.h"
00038
00039 #include "basisset.h"
00040
00041 #define MAX_NO_OF_PRIMITIVES_PER_BASIS_FUNC 44
00042
00043 struct DistributionSpecStruct_{
00044 ergo_real coeff;
00045 ergo_real exponent;
00046 ergo_real extent;
00047 ergo_real centerCoords[3];
00048 char monomialInts[4];
00049 };
00050 typedef struct DistributionSpecStruct_ DistributionSpecStruct;
00051
00052 typedef struct
00053 {
00054 int basisFuncIndex_1;
00055 int basisFuncIndex_2;
00056 int pairIndex;
00057 int groupID;
00058 ergo_real limitingFactor;
00059 ergo_real dmatElement;
00060 DistributionSpecStruct distr;
00061 } DistributionSpecStructLabeled;
00062
00063
00064 #define MAX_NO_OF_CONTR_GAUSSIANS 20
00065
00066 struct ShellSpecStruct_{
00067 ergo_real coeffList[MAX_NO_OF_CONTR_GAUSSIANS];
00068 ergo_real exponentList[MAX_NO_OF_CONTR_GAUSSIANS];
00069 ergo_real sizeList[MAX_NO_OF_CONTR_GAUSSIANS];
00070 ergo_real padding;
00071 ergo_real centerCoords[3];
00072 int noOfContr;
00073 int shellType;
00074 int shell_ID;
00075 int noOfBasisFuncs;
00076 int startIndexInMatrix;
00077 int dummy;
00078 };
00079 typedef struct ShellSpecStruct_ ShellSpecStruct;
00080
00081 struct BasisFuncStruct_{
00082 int noOfContr;
00083 ergo_real coeffList[MAX_NO_OF_CONTR_GAUSSIANS];
00084 ergo_real exponentList[MAX_NO_OF_CONTR_GAUSSIANS];
00085 ergo_real extent;
00086 Vector3D centerCoords;
00087 int shellType;
00088 int functionNumber;
00089 int noOfSimplePrimitives;
00090 int simplePrimitiveIndex;
00091 int noOfTermsInPolynomial;
00092 basis_func_term_struct poly[MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY];
00093 };
00094 typedef struct BasisFuncStruct_ BasisFuncStruct;
00095
00096
00097 typedef struct
00098 {
00099 int startAtomIndex;
00100 int count;
00101 basisset_struct* basisset;
00102 } basis_set_range_struct;
00103
00104 typedef struct
00105 {
00106 int startAtomIndex;
00107 int count;
00108 char* basisSetFileName;
00109 } BasissetNameRange;
00110
00111 struct BasisInfoStruct{
00112 int use_6_d_funcs;
00117 int noOfShells;
00118 ShellSpecStruct* shellList;
00119 int noOfBasisFuncs;
00120 BasisFuncStruct* basisFuncList;
00121 int noOfSimplePrimitives;
00122 DistributionSpecStruct* simplePrimitiveList;
00123
00125 BasisInfoStruct(int use_6_d_funcs_ = 0) :
00126 use_6_d_funcs(use_6_d_funcs_),
00127 noOfShells(0),
00128 shellList(NULL),
00129 noOfBasisFuncs(0),
00130 basisFuncList(NULL),
00131 noOfSimplePrimitives(0),
00132 simplePrimitiveList(NULL)
00133 {
00134 }
00135
00136 ~BasisInfoStruct()
00137 {
00138 if(shellList) delete [] shellList;
00139 if(basisFuncList) delete [] basisFuncList;
00140 if(simplePrimitiveList) delete [] simplePrimitiveList;
00141 }
00142
00143 int addBasisfuncsForMolecule(const Molecule& molecule,
00144 const char* basisset_filename_default,
00145 int noOfRanges,
00146 const BasissetNameRange* rangeList,
00147 const IntegralInfo& integralInfo,
00148 int print_raw,
00149 int do_normalization,
00150 int skip_sort_shells);
00151
00152 BasisInfoStruct *permuteShells(const int *shellMap,
00153 const IntegralInfo& ii) const;
00154
00155 int normalizeShells(const IntegralInfo& integralInfo);
00156
00157 int get_basis_funcs();
00158
00159 int getSimplePrimitivesAll(const IntegralInfo& integralInfo);
00160 };
00161
00162
00163
00169 struct SquareFuncIntegrator {
00170 const int MAX_NO_OF_PRIMS;
00171 DistributionSpecStruct *list;
00172 DistributionSpecStruct *productlist;
00173 SquareFuncIntegrator() : MAX_NO_OF_PRIMS(44444)
00174 {
00175 list = new DistributionSpecStruct[MAX_NO_OF_PRIMS];
00176 productlist = new DistributionSpecStruct[MAX_NO_OF_PRIMS];
00177 }
00178 ~SquareFuncIntegrator()
00179 {
00180 delete []list;
00181 delete []productlist;
00182 }
00183 ergo_real computeIntegralOfSquareOfBasisFunc
00184 (const IntegralInfo& integralInfo, BasisFuncStruct* basisFunc, int use_6_d_funcs);
00185
00186 ergo_real getShellFactor(const IntegralInfo& integralInfo,
00187 ergo_real exponent, int shellType, int use_6_d_funcs);
00188 };
00189
00190
00191
00192
00193 #ifdef ERGO_ENABLE_DEPRECATED
00194
00195 int basisinfo_construct_multi_basis(BasisInfoStruct* result_basisInfo,
00196 const Molecule* molecule,
00197 const char* basisset_filename_default,
00198 const Molecule* ghostMolecule,
00199 const char* ghost_molecule_basisset_filename,
00200 int noOfRanges,
00201 const BasissetNameRange* rangeList,
00202 IntegralInfo* integralInfo,
00203 int print_raw,
00204 int do_normalization,
00205 int skip_sort_shells,
00206 int skip_standard_basis);
00207 struct AtomInfoStruct_{
00208 int charge;
00209 ergo_real coords[3];
00210 };
00211 typedef struct AtomInfoStruct_ AtomInfoStruct;
00212 #endif
00213
00214 int get_basis_funcs(BasisInfoStruct* basisInfo,
00215 const IntegralInfo* integralInfo,
00216 int do_normalization);
00217
00218 int get_simple_primitives_all(BasisInfoStruct* basisInfo,
00219 const IntegralInfo* integralInfo);
00220
00221 int output_basisinfo(const BasisInfoStruct & basisInfo);
00222
00223 ergo_real getSafeMaxDistance(const BasisInfoStruct & basisInfo);
00224
00225
00226 #endif