1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
/***********************************************/
/**
* @file kernelRadialGradient.cpp
*
* @brief 2nd radial derivative (gravity gradients).
* @see Kernel
*
* @author Torsten Mayer-Guerr
* @date 2010-04-27
*
*/
/***********************************************/
#include "base/import.h"
#include "classes/kernel/kernel.h"
#include "classes/kernel/kernelRadialGradient.h"
/***********************************************/
Vector KernelRadialGradient::coefficients(Vector3d const &q, UInt degree) const
{
if(degree==INFINITYDEGREE)
throw(Exception("In KernelRadialGradient::coefficients: INFINITYDEGREE requested"));
Double R2 = pow(q.r(),2);
Vector k(degree+1);
Double *kn = k.field();
for(UInt n=0; n<=degree; n++)
*kn++ = R2/((n+1)*(n+2));
return k;
}
/***********************************************/
Vector KernelRadialGradient::inverseCoefficients(Vector3d const &p, UInt degree, Bool interior) const
{
if(degree==INFINITYDEGREE)
throw(Exception("In KernelRadialGradient::inverseCoefficients: INFINITYDEGREE requested"));
Double r2 = pow(p.r(),2);
Vector k(degree+1);
Double *kn = k.field();
if(interior)
for(UInt n=2; n<=degree; n++)
*kn++ = n*(n-1.)/r2;
else
for(UInt n=0; n<=degree; n++)
*kn++ = (n+1)*(n+2)/r2;
return k;
}
/***********************************************/
|