Newer
Older
#include "../function_base.h"
#include <iostream>
/** \brief Abstract class to be used as a base for all kernels.
*
* - b = basis vector
* - af = atomic energy descriptor
* - ff = force descriptor
* - all derivatives are defined wrt to the second argument
*/
class Kern_Base: public virtual Function_Base {
public:
virtual ~Kern_Base();
/**
* Calculate kernel value given two vectors
*
* - b = basis vector
* - af = atomic energy descriptor
*/
virtual double operator() (const aed_type2 &b, const aed_type2 &af)=0;
/**
* Calculate the kernel derivative wrt to the second argument
*
* - b = basis vector
* - af = atomic energy descriptor
*/
virtual aed_type2 derivative(const aed_type2 &b, const aed_type2 &af)=0;
/**
* Calculate inner product of the kernel derivative
* wrt to the second argument (b wrt af) with the force descriptor
*
* - b = basis vector
* - af = atomic energy descriptor
* - ff = force descriptor (TODO i-th dir component of it)
* TODO consider calculating all 3-directions at once
*/
virtual double prime(const aed_type2 &b, const aed_type2 &af,
const aed_type2 &ff)=0;
virtual double epredict(const t_type &kweights, const aed_type2 &aed);