28#ifndef _mpqc_src_lib_chemistry_qc_basis_inttraits_h
29#define _mpqc_src_lib_chemistry_qc_basis_inttraits_h
32#include <chemistry/qc/basis/integral.h>
33#include <chemistry/qc/basis/intparams.h>
43 return factory->overlap();
58 static const int size = TypeMap::size;
63 return OneBodyEvalCreator::eval(factory,params);
67 MPQC_ASSERT(t <
size);
68 return TypeMap::value[t];
72 for(
unsigned int i=0; i<
size; ++i)
73 if (TypeMap::value[i] == t)
83 template <
int NumCenters>
struct ERIEvalCreator {
84 static Ref< typename TwoBodyIntEvalType<NumCenters>::value >
85 eval(
const Ref<Integral>& factory,
const Ref<IntParamsVoid>& params) {
86 return factory->coulomb<NumCenters>();
90 template <
int NumCenters>
struct R12EvalCreator {
91 static Ref< typename TwoBodyIntEvalType<NumCenters>::value >
92 eval(
const Ref<Integral>& factory,
const Ref<IntParamsVoid>& params) {
93 return factory->grt<NumCenters>();
97 template <
int NumCenters>
struct G12EvalCreator {
98 static Ref< typename TwoBodyIntEvalType<NumCenters>::value >
99 eval(
const Ref<Integral>& factory,
const Ref<IntParamsG12>& params) {
100 return factory->g12<NumCenters>(params);
104 template <
int NumCenters>
struct G12NCEvalCreator {
105 static Ref< typename TwoBodyIntEvalType<NumCenters>::value >
106 eval(
const Ref<Integral>& factory,
const Ref<IntParamsG12>& params) {
107 return factory->g12nc<NumCenters>(params);
111 template <
int NumCenters>
struct G12DKHEvalCreator {
112 static Ref< typename TwoBodyIntEvalType<NumCenters>::value >
113 eval(
const Ref<Integral>& factory,
const Ref<IntParamsG12>& params) {
114 return factory->g12dkh<NumCenters>(params);
118 template <
int NumCenters, TwoBodyOperSet::type Type>
struct TwoBodyEvalCreator;
119 template <
int NumCenters>
struct TwoBodyEvalCreator<NumCenters,TwoBodyOperSet::ERI> {
120 typedef ERIEvalCreator<NumCenters> value;
122 template <
int NumCenters>
struct TwoBodyEvalCreator<NumCenters,TwoBodyOperSet::R12> {
123 typedef R12EvalCreator<NumCenters> value;
125 template <
int NumCenters>
struct TwoBodyEvalCreator<NumCenters,TwoBodyOperSet::G12> {
126 typedef G12EvalCreator<NumCenters> value;
128 template <
int NumCenters>
struct TwoBodyEvalCreator<NumCenters,TwoBodyOperSet::G12NC> {
129 typedef G12NCEvalCreator<NumCenters> value;
131 template <
int NumCenters>
struct TwoBodyEvalCreator<NumCenters,TwoBodyOperSet::G12DKH> {
132 typedef G12DKHEvalCreator<NumCenters> value;
146 static const int size = TypeMap::size;
151 return TwoBodyEvalCreator::eval(factory,params);
155 MPQC_ASSERT(t <
size);
156 return TypeMap::value[t];
160 for(
unsigned int i=0; i<
size; ++i)
161 if (TypeMap::value[i] == t)
A template class that maintains references counts.
Definition ref.h:361
Contains all MPQC code up to version 3.
Definition mpqcin.h:14
returns the type of the evaluator for evaluating this set of two-body integrals
Definition integral.h:60
which parameter set needed to specify the operator set?
Definition operator.h:272
Traits of a set of one-body integrals.
Definition inttraits.h:49
OneBodyOperSetProperties< Type > TypeMap
the type of the NBodyInt object that evaluates this set
Definition inttraits.h:56
static Ref< EvalType > eval(const Ref< Integral > &factory, const Ref< ParamsType > ¶ms)
creates an Eval object
Definition inttraits.h:60
OneBodyIntParamsType< Type >::value ParamsType
the type of IntParams object needed to initialize the evaluator for computing this set of integrals
Definition inttraits.h:54
OneBodyIntEvalType< NumCenters >::value EvalType
the type of the NBodyInt object that evaluates this set
Definition inttraits.h:51
static OneBodyOper::type intset(unsigned int t)
maps index of the integral type within this set to TwoBodyOper::type
Definition inttraits.h:66
static unsigned int intset(OneBodyOper::type t)
inverse of the above intset
Definition inttraits.h:71
static const int size
number of integral types
Definition inttraits.h:58
Describes sets of two-body operators (.
Definition operator.h:195
type
Types of one-body operators, includes various context-dependent "projectors", such as 1-RDM,...
Definition operator.h:103
returns the type of the evaluator for evaluating this set of two-body integrals
Definition tbint_batch.h:226
which parameter set needed to specify the operator set?
Definition operator.h:438
Traits of a set of two-body integrals.
Definition inttraits.h:137
TwoBodyOperSetProperties< Type > TypeMap
the type of the NBodyInt object that evaluates this set
Definition inttraits.h:144
static Ref< EvalType > eval(const Ref< Integral > &factory, const Ref< ParamsType > ¶ms)
creates an Eval object
Definition inttraits.h:148
TwoBodyIntEvalType< NumCenters >::value EvalType
the type of the NBodyInt object that evaluates this set
Definition inttraits.h:139
TwoBodyIntParamsType< Type >::value ParamsType
the type of IntParams object needed to initialize the evaluator for computing this set of integrals
Definition inttraits.h:142
static TwoBodyOper::type intset(unsigned int t)
maps index of the integral type within this set to TwoBodyOper::type
Definition inttraits.h:154
static const int size
number of integral types
Definition inttraits.h:146
static unsigned int intset(TwoBodyOper::type t)
inverse of the above intset
Definition inttraits.h:159
Describes sets of two-body operators (.
Definition operator.h:368
type
types of known two-body operators
Definition operator.h:318
Definition integral.h:104