Class documentation of Concepts

Loading...
Searching...
No Matches
multipoleY.hh
Go to the documentation of this file.
1
6#ifndef multipoleY_hh
7#define multipoleY_hh
8
10#include "bem/element.hh"
11#include "cluster/expansion.hh"
12
13namespace cluster {
14
15 // ************************************************************ MultipoleY **
16
20 template <class F = concepts::Real>
21 class MultipoleY : public ExpansionXY<F> {
22
24 uint m_;
26 uint blksz_;
28 uint gauss_;
29
31 concepts::Real* foo_;
32
33 public:
38 MultipoleY(uint m, uint gauss);
39
40 ~MultipoleY() {delete[] foo_;}
41
42 uint blksz() const {return blksz_;}
43 uint m() const {return m_;}
44 inline XYColReal* getCol(uint blksz, uint n) const;
49 void evaluate(const concepts::Real3d& z, concepts::Real Y[]) const;
50 inline void shift(const concepts::Real3d& z, const concepts::Real src[],
51 concepts::Real dst[]) const;
52 void shift(const concepts::Real3d& z, const concepts::Cmplx src[],
53 concepts::Cmplx dst[]) const;
54 template<class FF>
55 void shift(const concepts::Real3d& z, const FF src[], FF dst[],
56 uint foo) const;
57 void apply(const concepts::Real Y[], const F src[], F dst[]) const;
58 inline void apply(const XYColExpPtr* Y, const F src[], F dst[]) const;
59
67 const concepts::Real3d& c, XYColExpPtr* Y[]) const;
70 const concepts::Real3d& c, XYColExpPtr* Y[]) const;
73 const concepts::Real3d& c, XYColExpPtr* Y[]) const;
76 const concepts::Real3d& c, XYColExpPtr* Y[]) const;
79 const concepts::Real3d& c, XYColExpPtr* Y[]) const;
82 const concepts::Real3d& c, XYColExpPtr* Y[]) const;
83 };
84
85 template <class F>
86 inline XYColReal* MultipoleY<F>::getCol(uint blksz, uint n) const {
87 return new XYColReal(blksz, n);
88 }
89
90 template <class F>
92 const concepts::Real src[],
93 concepts::Real dst[]) const {
94 shift<concepts::Real>(z, src, dst, 0);
95 }
96
97 template <class F>
98 inline void MultipoleY<F>::apply(const XYColExpPtr* Y, const F src[],
99 F dst[]) const {
100 const XYColRealPtr* YMPE = dynamic_cast<const XYColRealPtr*>(Y);
101 if (Y) {apply(YMPE->value(), src, dst); return;}
102
103 throw
104 conceptsException(concepts::MissingFeature("XYColExp not supported"));
105 }
106
107} // namespace cluster
108
109#endif // multipoleY_hh
#define conceptsException(exc)
void evaluate(const bem::Constant3d000< F > &elm, const concepts::Real3d &c, XYColExpPtr *Y[]) const
void evaluate(const bem::Linear3d000< F > &elm, const concepts::Real3d &c, XYColExpPtr *Y[]) const
uint blksz() const
Size of memory used for the expansion.
Definition multipoleY.hh:42
void evaluate(const bem::Dirac3d000< F > &elm, const concepts::Real3d &c, XYColExpPtr *Y[]) const
void shift(const concepts::Real3d &z, const concepts::Real src[], concepts::Real dst[]) const
Definition multipoleY.hh:91
XYColReal * getCol(uint blksz, uint n) const
Definition multipoleY.hh:86
void evaluate(const bem::Constant3d002< F > &elm, const concepts::Real3d &c, XYColExpPtr *Y[]) const
void evaluate(const concepts::Real3d &z, concepts::Real Y[]) const
void apply(const XYColExpPtr *Y, const F src[], F dst[]) const
Definition multipoleY.hh:98
void evaluate(const bem::Constant3d001< F > &elm, const concepts::Real3d &c, XYColExpPtr *Y[]) const
void evaluate(const concepts::Element< F > &elm, const concepts::Real3d &c, XYColExpPtr *Y[]) const
uint m() const
Order of the expansion.
Definition multipoleY.hh:43
MultipoleY(uint m, uint gauss)
double Real
Definition typedefs.hh:39
std::complex< Real > Cmplx
Type for a complex number. It also depends on the setting of Real.
Definition typedefs.hh:42