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
#ifdef __GNUG__
00029
#pragma interface
00030
#endif
00031
00032
#ifndef _chemistry_qc_cints_eri_h
00033
#define _chemistry_qc_cints_eri_h
00034
00035
#include <limits.h>
00036
00037
#include <util/ref/ref.h>
00038
#include <chemistry/qc/basis/basis.h>
00039
#include <chemistry/qc/cints/shellpairs.h>
00040
#include <chemistry/qc/intv3/fjt.h>
00041
#include <chemistry/qc/cints/int2e.h>
00042
extern "C" {
00043
#include <libint/libint.h>
00044 }
00045
00046
namespace sc {
00047
00048
class Integral;
00049
00051 class EriCints:
public Int2eCints {
00052
private:
00053
00054
00055
double *target_ints_buffer_;
00056
00057
00058
double *cart_ints_;
00059
double *sphharm_ints_;
00060
double *perm_ints_;
00061
00062
00063
double *prim_ints_;
00064
double *contr_quartets_;
00065
double *shell_quartet_;
00066
00067
00068
Ref<ShellPairsCints> shell_pairs12_;
00069
Ref<ShellPairsCints> shell_pairs34_;
00070
00071
00072
struct {
00073
int p12, p34, p13p24;
00074
ShellPairCints *shell_pair12, *shell_pair34;
00075
00076
int *op1, *op2, *op3, *op4;
00078
double A[3], B[3], C[3], D[3];
00079
double AB2, CD2;
00080
int gc1, gc2, gc3, gc4;
00081
int p1, p2, p3, p4;
00082
int am;
00083 } quartet_info_;
00084
void eri_quartet_data_(prim_data *Data,
double scale);
00085
00086 Libint_t Libint_;
00087
Ref<FJT> Fm_Eval_;
00088
00089
public:
00090
EriCints(
Integral *,
00091
const Ref<GaussianBasisSet>&,
00092
const Ref<GaussianBasisSet>&,
00093
const Ref<GaussianBasisSet>&,
00094
const Ref<GaussianBasisSet>&,
00095 size_t storage);
00096 ~
EriCints();
00097
00098 double *
buffer(TwoBodyInt::tbint_type te_type)
const {
00099
if (te_type == TwoBodyInt::eri)
return target_ints_buffer_;
00100
else return 0;
00101 }
00102
00103
static size_t storage_required(
const Ref<GaussianBasisSet>& b1,
00104
const Ref<GaussianBasisSet>& b2 = 0,
00105
const Ref<GaussianBasisSet>& b3 = 0,
00106
const Ref<GaussianBasisSet>& b4 = 0);
00107
00108
00109
void compute_quartet(
int*,
int*,
int*,
int*);
00110 };
00111
00112
#include <chemistry/qc/cints/eri_quartet_data.h>
00113
00114
00115
00116
class LibintStaticInterface {
00117
bool ready;
00118
00119
public:
00120 LibintStaticInterface() { init_libint_base(); ready =
true; }
00121 ~LibintStaticInterface() { ready =
false; }
00122 };
00123
00124 }
00125
00126
#endif
00127
00128
00129
00130
00131