Class documentation of Concepts

Loading...
Searching...
No Matches
multipoleX.hh
Go to the documentation of this file.
1
6#ifndef multipoleX_hh
7#define multipoleX_hh
8
10#include "bem/element.hh"
11#include "cluster/expansion.hh"
12
13namespace cluster {
14
15 // ************************************************************ MultipoleX **
16
20 template <class F = concepts::Real>
21 class MultipoleX : public ExpansionXY<F> {
22
24 uint m_;
26 uint blksz_;
28 uint gauss_;
29
31 concepts::Real* foo_;
32
33 public:
38 MultipoleX(uint m, uint gauss);
39
40 ~MultipoleX() {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 X[]) const;
51 inline void shift(const concepts::Real3d& z, const concepts::Real src[],
52 concepts::Real dst[]) const;
53 void shift(const concepts::Real3d& z, const concepts::Cmplx src[],
54 concepts::Cmplx dst[]) const;
55 template<class FF>
56 void shift(const concepts::Real3d& z, const FF src[], FF dst[],
57 uint foo) const;
59 void apply(const concepts::Real X[], const F src[], F dst[]) const;
60 inline void apply(const XYColExpPtr* Xexp, const F src[], F dst[]) const;
61
69 const concepts::Real3d& c, XYColExpPtr* X[]) const;
72 const concepts::Real3d& c, XYColExpPtr* X[]) const;
75 const concepts::Real3d& c, XYColExpPtr* X[]) const;
78 const concepts::Real3d& c, XYColExpPtr* X[]) const;
81 const concepts::Real3d& c, XYColExpPtr* X[]) const;
84 const concepts::Real3d& c, XYColExpPtr* X[]) const;
85 };
86
87 template <class F>
88 inline XYColReal* MultipoleX<F>::getCol(uint blksz, uint n) const {
89 return new XYColReal(blksz, n);
90 }
91
92 template <class F>
94 const concepts::Real src[],
95 concepts::Real dst[]) const {
96 shift<concepts::Real>(z, src, dst, 0);
97 }
98
99 template <class F>
100 inline void MultipoleX<F>::apply(const XYColExpPtr* Xexp, const F src[],
101 F dst[]) const {
102 const XYColRealPtr* X = dynamic_cast<const XYColRealPtr*>(Xexp);
103 if (X) {apply(X->value(), src, dst); return;}
104
105 throw
106 conceptsException(concepts::MissingFeature("XYColExp not supported"));
107 }
108
109} // namespace cluster
110
111#endif // multipoleX_hh
#define conceptsException(exc)
void shift(const concepts::Real3d &z, const concepts::Real src[], concepts::Real dst[]) const
Shifting the expansion coefficients.
Definition multipoleX.hh:93
void evaluate(const concepts::Real3d &z, concepts::Real X[]) const
void evaluate(const bem::Constant3d002< F > &elm, const concepts::Real3d &c, XYColExpPtr *X[]) const
void evaluate(const concepts::Element< F > &elm, const concepts::Real3d &c, XYColExpPtr *X[]) const
uint m() const
Order of the expansion.
Definition multipoleX.hh:43
XYColReal * getCol(uint blksz, uint n) const
Definition multipoleX.hh:88
void evaluate(const bem::Constant3d001< F > &elm, const concepts::Real3d &c, XYColExpPtr *X[]) const
uint blksz() const
Size of memory used for the expansion.
Definition multipoleX.hh:42
MultipoleX(uint m, uint gauss)
void evaluate(const bem::Dirac3d000< F > &elm, const concepts::Real3d &c, XYColExpPtr *X[]) const
void apply(const concepts::Real X[], const F src[], F dst[]) const
void apply(const XYColExpPtr *Xexp, const F src[], F dst[]) const
void evaluate(const bem::Linear3d000< F > &elm, const concepts::Real3d &c, XYColExpPtr *X[]) const
void evaluate(const bem::Constant3d000< F > &elm, const concepts::Real3d &c, XYColExpPtr *X[]) const
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