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
00029
00037 #ifndef BASISINFO_HEADER
00038 #define BASISINFO_HEADER
00039
00040
00041 #include <stdlib.h>
00042
00043 #include "realtype.h"
00044 #include "integral_info.h"
00045
00046 #include "molecule.h"
00047
00048 #include "basisset.h"
00049
00050 struct DistributionSpecStruct {
00051 ergo_real coeff;
00052 ergo_real exponent;
00053 ergo_real extent;
00054 ergo_real centerCoords[3];
00055 char monomialInts[4];
00056 };
00057
00058 struct DistributionSpecStructLabeled {
00059 int basisFuncIndex_1;
00060 int basisFuncIndex_2;
00061 int pairIndex;
00062 int groupID;
00063 ergo_real limitingFactor;
00064 ergo_real dmatElement;
00065 DistributionSpecStruct distr;
00066 };
00067
00068
00069 #define MAX_NO_OF_CONTR_GAUSSIANS 20
00070
00071 struct ShellSpecStruct {
00072 ergo_real coeffList[MAX_NO_OF_CONTR_GAUSSIANS];
00073 ergo_real exponentList[MAX_NO_OF_CONTR_GAUSSIANS];
00074 ergo_real sizeList[MAX_NO_OF_CONTR_GAUSSIANS];
00075 ergo_real padding;
00076 ergo_real centerCoords[3];
00077 int noOfContr;
00078 int shellType;
00079 int shell_ID;
00080 int noOfBasisFuncs;
00081 int startIndexInMatrix;
00082 int dummy;
00083 };
00084
00085 struct BasisFuncStruct {
00086 int noOfContr;
00087 ergo_real coeffList[MAX_NO_OF_CONTR_GAUSSIANS];
00088 ergo_real exponentList[MAX_NO_OF_CONTR_GAUSSIANS];
00089 ergo_real extent;
00090 Vector3D centerCoords;
00091 int shellType;
00092 int functionNumber;
00093 int noOfSimplePrimitives;
00094 int simplePrimitiveIndex;
00095 int noOfTermsInPolynomial;
00096 basis_func_term_struct poly[MAX_NO_OF_TERMS_IN_BASIS_FUNC_POLY];
00097 };
00098
00099
00100 struct basis_set_range_struct {
00101 int startAtomIndex;
00102 int count;
00103 basisset_info* basisset;
00104 };
00105
00106 struct BasissetNameRange {
00107 int startAtomIndex;
00108 int count;
00109 char* basisSetFileName;
00110 };
00111
00112 struct BasisInfoStruct {
00113 int use_6_d_funcs;
00118 int noOfShells;
00119 ShellSpecStruct* shellList;
00120 int noOfBasisFuncs;
00121 BasisFuncStruct* basisFuncList;
00122 int noOfSimplePrimitives;
00123 DistributionSpecStruct* simplePrimitiveList;
00124
00126 BasisInfoStruct(int use_6_d_funcs_ = 0);
00127
00129 BasisInfoStruct(const BasisInfoStruct & b);
00130
00131 ~BasisInfoStruct();
00132
00133 void addBasisfuncsForPoint(ergo_real x,
00134 ergo_real y,
00135 ergo_real z,
00136 int shellType,
00137 ergo_real exponent,
00138 const IntegralInfo & integralInfo,
00139 int print_raw,
00140 int do_normalization,
00141 int skip_sort_shells);
00142
00143 void addBasisfuncsForAtomList(const Atom* atomList,
00144 int noOfAtoms,
00145 const basisset_info & basissetDefault,
00146 int noOfRanges,
00147 const basis_set_range_struct* rangeList,
00148 const IntegralInfo & integralInfo,
00149 int print_raw,
00150 int do_normalization,
00151 int skip_sort_shells);
00152
00153 int addBasisfuncsForMolecule(const Molecule& molecule,
00154 const char* basisset_filename_default,
00155 int noOfRanges,
00156 const BasissetNameRange* rangeList,
00157 const IntegralInfo& integralInfo,
00158 int print_raw,
00159 int do_normalization,
00160 int skip_sort_shells);
00161
00162 static int getNoOfBasisFuncsForAtomType(const basisset_info & basisset,
00163 const IntegralInfo & integralInfo,
00164 int atomCharge,
00165 int use_6_d_funcs);
00166
00167 BasisInfoStruct *permuteShells(const int *shellMap,
00168 const IntegralInfo& ii) const;
00169
00170 int normalizeShells(const IntegralInfo& integralInfo);
00171
00172 int get_basis_funcs();
00173
00174 int getSimplePrimitivesAll(const IntegralInfo& integralInfo);
00175
00176
00177 void write_to_buffer ( char * dataBuffer, size_t const bufferSize ) const;
00178 size_t get_size() const;
00179 void assign_from_buffer ( char const * dataBuffer, size_t const bufferSize);
00180 };
00181
00182
00183
00189 struct SquareFuncIntegrator {
00190 const int MAX_NO_OF_PRIMS;
00191 DistributionSpecStruct *list;
00192 DistributionSpecStruct *productlist;
00193 SquareFuncIntegrator() : MAX_NO_OF_PRIMS(44444)
00194 {
00195 list = new DistributionSpecStruct[MAX_NO_OF_PRIMS];
00196 productlist = new DistributionSpecStruct[MAX_NO_OF_PRIMS];
00197 }
00198 ~SquareFuncIntegrator()
00199 {
00200 delete []list;
00201 delete []productlist;
00202 }
00203 ergo_real computeIntegralOfSquareOfBasisFunc
00204 (const IntegralInfo& integralInfo, BasisFuncStruct* basisFunc, int use_6_d_funcs);
00205
00206 ergo_real getShellFactor(const IntegralInfo& integralInfo,
00207 ergo_real exponent, int shellType, int use_6_d_funcs);
00208 };
00209
00210
00211
00212
00213 #ifdef ERGO_ENABLE_DEPRECATED
00214
00215 int basisinfo_construct_multi_basis(BasisInfoStruct* result_basisInfo,
00216 const Molecule* molecule,
00217 const char* basisset_filename_default,
00218 const Molecule* ghostMolecule,
00219 const char* ghost_molecule_basisset_filename,
00220 int noOfRanges,
00221 const BasissetNameRange* rangeList,
00222 IntegralInfo* integralInfo,
00223 int print_raw,
00224 int do_normalization,
00225 int skip_sort_shells,
00226 int skip_standard_basis);
00227 struct AtomInfoStruct_{
00228 int charge;
00229 ergo_real coords[3];
00230 };
00231 typedef struct AtomInfoStruct_ AtomInfoStruct;
00232 #endif
00233
00234 int get_basis_funcs(BasisInfoStruct* basisInfo,
00235 const IntegralInfo* integralInfo,
00236 int do_normalization);
00237
00238 int get_simple_primitives_all(BasisInfoStruct* basisInfo,
00239 const IntegralInfo* integralInfo);
00240
00241 int output_basisinfo(const BasisInfoStruct & basisInfo);
00242
00243 ergo_real getSafeMaxDistance(const BasisInfoStruct & basisInfo);
00244
00245
00246 #endif