103 lines
1.6 KiB
C++
103 lines
1.6 KiB
C++
#ifndef HF_KERNEL_H
|
|
#define HF_KERNEL_H
|
|
|
|
/**
|
|
* @file hf_kernel.h
|
|
*
|
|
* Kernels for the Hartree-Fock molecular orbital calculation
|
|
*
|
|
*/
|
|
|
|
|
|
/**
|
|
* Evaluates the kernel given four centers.
|
|
*
|
|
* Note: currently assuming a global fixed bandwidth
|
|
*/
|
|
class HFFourBodyKernel {
|
|
|
|
private:
|
|
|
|
HFKernel hf_kernel_;
|
|
|
|
//I believe this is the 4x4 distances matrix;
|
|
Matrix distmat_;
|
|
|
|
public:
|
|
|
|
/**
|
|
* Initializes to a specific bandwidth
|
|
*
|
|
* @param bandwidth_in the given bandwidth
|
|
*/
|
|
void Init(double bandwidth_in) {
|
|
|
|
hf_kernel_.Init(bandwidth_in);
|
|
distmat_.Init(3,3);
|
|
|
|
}
|
|
|
|
//Need to figure out what this is, exactly . . .
|
|
int order() {
|
|
return 4;
|
|
}
|
|
|
|
/**
|
|
* Evaluates the potential on a given set of distances
|
|
*
|
|
* Note: why does this need to be a matrix, it only depends on 3 distances
|
|
*
|
|
* @param sqdists the 4x4 matrix of distances i, j, k, l
|
|
*/
|
|
double EvalUnnormOnSq(const Matrix &sqdists) const {
|
|
|
|
double result = 1;
|
|
// compute the two Gaussian kernel distances
|
|
// then, compute the weird function on the average distance
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
class HFKernel {
|
|
|
|
//Does Dong's code create one of these for every bounds computation?
|
|
// Seems inefficient to do so, can just reuse the same one with different distances
|
|
|
|
private:
|
|
|
|
GaussianKernel gauss_kernel_;
|
|
|
|
double bandwidth;
|
|
|
|
|
|
public:
|
|
|
|
void Init(double bandwidth_in) {
|
|
bandwidth = bandwidth_in;
|
|
gauss_kernel_.Init(bandwidth_in);
|
|
}
|
|
|
|
double EvalUnnormOnSq(double sqdist) const {
|
|
|
|
//Need to return the full computation here
|
|
double total;
|
|
|
|
return(total);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif |