00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef KERNEL_H
00019 #define KERNEL_H
00020
00021
00022 #include "particle.h"
00023
00024
00031 class Kernel {
00032
00033 protected:
00034
00035 int d;
00036 double h;
00037 double c_d;
00038
00039 public:
00040
00046 Kernel(const int d, const double h, const double alpha_d);
00047
00050 virtual ~Kernel();
00051
00054 double get_h() const;
00055
00058 int get_d() const;
00059
00062 double operator()(const double r) const {
00063 return c_d * w(r/h);
00064 }
00065
00068 double dW(const double r) const;
00069
00072 const Particle::vector_t grad_r(const Particle::vector_t& r1,
00073 const Particle::vector_t& r2) const;
00074
00079 const Particle::vector_t grad_r(const Particle::vector_t& r1,
00080 const Particle::vector_t& r2,
00081 const double& r12) const;
00082
00088 const Particle::vector_t& grad_r(const Particle::vector_t& r1,
00089 const Particle::vector_t& r2,
00090 const double& r12,
00091 Particle::vector_t& g) const;
00092
00097 virtual double w(const double x) const=0;
00098
00101 virtual double dw(const double x) const=0;
00102
00103 };
00104
00105
00108 double select(const int i, double x1, double x2, double x3);
00109
00110
00111 #endif // KERNEL_H