YMShi
January 23, 2019, 5:03pm
1
Hi,
Thank the developers for their amazing work.
I am building up my “plugin”. Now I am going to write a integral for 4 ao basis functions product integral:
$\int \phi_u*(r1) \phi_v*(r1) \phi_i(r1) \phi_j(r1)dr1$
Just wondering if there is a part (I guess in libmints) that I can call and use directly?
Thank you!
I don’t think we wrote up the 4-center version, we do have up to the three center version however:
/// MO F12 squared Integrals
SharedMatrix ao_f12_squared(std::shared_ptr<CorrelationFactor> corr);
SharedMatrix ao_f12_squared(std::shared_ptr<CorrelationFactor> corr, std::shared_ptr<BasisSet> bs1,
std::shared_ptr<BasisSet> bs2, std::shared_ptr<BasisSet> bs3,
std::shared_ptr<BasisSet> bs4);
/// MO F12G12 Integrals
SharedMatrix ao_f12g12(std::shared_ptr<CorrelationFactor> corr);
/// MO F12 double commutator Integrals
SharedMatrix ao_f12_double_commutator(std::shared_ptr<CorrelationFactor> corr);
/// 3Center overlap integrals
SharedMatrix ao_3coverlap();
SharedMatrix ao_3coverlap(std::shared_ptr<BasisSet> bs1, std::shared_ptr<BasisSet> bs2,
std::shared_ptr<BasisSet> bs3);
/// Symmetric MO ERI Integrals, (ov|ov) type (Full matrix, N^5, not recommended for large systems)
/// Pass C_ C_ for (aa|aa) type, Cocc_, Cocc_ for (oo|oo) type, or Cvir_, Cvir_ for (vv|vv) type
SharedMatrix mo_eri(SharedMatrix Cocc, SharedMatrix Cvir);
/// Non Symmetric MO ERI Omega Integrals, (12|34) type (Full matrix, N^5, not recommended for large systems)
SharedMatrix mo_eri(SharedMatrix C1, SharedMatrix C2, SharedMatrix C3, SharedMatrix C4);
/// MO ERI Omega Integrals (Full matrix, not recommended for large systems)
SharedMatrix mo_erf_eri(double omega, SharedMatrix C1, SharedMatrix C2, SharedMatrix C3, SharedMatrix C4);
std::shared_ptr<BasisSet> ThreeCenterOverlapInt::basis1() { return bs1_; }
std::shared_ptr<BasisSet> ThreeCenterOverlapInt::basis2() { return bs2_; }
std::shared_ptr<BasisSet> ThreeCenterOverlapInt::basis3() { return bs3_; }
void ThreeCenterOverlapInt::compute_shell(int sh1, int sh2, int sh3) {
compute_pair(bs1_->shell(sh1), bs2_->shell(sh2), bs3_->shell(sh3));
}
void ThreeCenterOverlapInt::compute_pair(const GaussianShell& sA, const GaussianShell& sB, const GaussianShell& sC) {
size_t ao123;
int amA = sA.am();
int amB = sB.am();
int amC = sC.am();
int nprimA = sA.nprimitive();
int nprimB = sB.nprimitive();
int nprimC = sC.nprimitive();
double A[3], B[3], C[3], P[3], G[3], GA[3], GB[3], GC[3];
A[0] = sA.center()[0];
A[1] = sA.center()[1];
On our GitHub page you can hop onto the developer Slack to get additional help on this. We can either help you code this up if you feeling adventurous or someone likely has a way to compute the 4C version from a 3C/2C version depending on your performance requirements.
YMShi
January 25, 2019, 4:19pm
3
Thank you! I will ask on Slack.