integrals_general.h

Go to the documentation of this file.
00001 /* Ergo, version 3.2, a program for linear scaling electronic structure
00002  * calculations.
00003  * Copyright (C) 2012 Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek.
00004  * 
00005  * This program is free software: you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License as published by
00007  * the Free Software Foundation, either version 3 of the License, or
00008  * (at your option) any later version.
00009  * 
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  * 
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00017  * 
00018  * Primary academic reference:
00019  * Kohn−Sham Density Functional Theory Electronic Structure Calculations 
00020  * with Linearly Scaling Computational Time and Memory Usage,
00021  * Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek,
00022  * J. Chem. Theory Comput. 7, 340 (2011),
00023  * <http://dx.doi.org/10.1021/ct100611z>
00024  * 
00025  * For further information about Ergo, see <http://www.ergoscf.org>.
00026  */
00027 
00028 #ifndef INTEGRALS_GENERAL_HEADER
00029 #define INTEGRALS_GENERAL_HEADER
00030 
00031 #include "integral_info.h"
00032 #include "basisinfo.h"
00033 
00034 #ifndef BASIS_FUNC_POLY_MAX_DEGREE
00035 #error The constant BASIS_FUNC_POLY_MAX_DEGREE must be defined.
00036 #endif
00037 #if BASIS_FUNC_POLY_MAX_DEGREE<6
00038 const int POLY_PRODUCT_MAX_DISTRS = 10000;
00039 #else
00040 const int POLY_PRODUCT_MAX_DISTRS = 20000;
00041 #endif
00042 
00043 typedef struct{
00044   ergo_real a0;
00045   ergo_real a1;
00046 } polydeg1struct;
00047 
00048 int get_product_simple_prims(const DistributionSpecStruct& primA,
00049                              const DistributionSpecStruct& primB,
00050                              DistributionSpecStruct resultList[],
00051                              int maxCount,
00052                              ergo_real threshold);
00053 
00054 int get_product_simple_primitives(const BasisInfoStruct & basisInfoA, int iA,
00055                                   const BasisInfoStruct & basisInfoB, int iB,
00056                                   DistributionSpecStruct resultList[],
00057                                   int maxCount,
00058                                   ergo_real threshold);
00059 
00060 ergo_real compute_integral_of_simple_prim(DistributionSpecStruct* distr);
00061 
00062 int multiply_polynomials(ergo_real result[], 
00063                          polydeg1struct* polydeg1, 
00064                          int dim, 
00065                          ergo_real a[]);
00066 
00067 ergo_real get_largest_simple_integral(const BasisInfoStruct & basisInfo);
00068 
00069 ergo_real get_max_basis_func_abs_value(const BasisInfoStruct & basisInfo);
00070 
00071 int get_basis_func_extent_list(const BasisInfoStruct & basisInfo, 
00072                                ergo_real* basisFuncExtentList, 
00073                                ergo_real maxAbsValue);
00074 
00075 #endif

Generated on Wed Nov 21 09:32:33 2012 for ergo by  doxygen 1.4.7