Class documentation of Concepts

Loading...
Searching...
No Matches
multipoleDY.hh
Go to the documentation of this file.
1
6#ifndef multipoleDY_hh
7#define multipoleDY_hh
8
10#include "bem/element.hh"
11#include "cluster/expansion.hh"
12#include "cluster/multipoleY.hh"
13
14namespace cluster {
15
16 // *********************************************************** DMultipoleY **
17
21 template <class F = concepts::Real>
22 class DMultipoleY : public ExpansionXY<F> {
23
26
28 uint m_;
30 uint blksz_;
32 uint gauss_;
33
35 concepts::Real* foo_;
36 concepts::Real* fee_;
37
38 public:
43 DMultipoleY(uint m, uint gauss);
44
45 ~DMultipoleY() {delete[] fee_; delete[] foo_;}
46
47 uint blksz() const {return blksz_;}
48 uint m() const {return m_;}
49 inline XYColReal* getCol(uint blksz, uint n) const;
56 concepts::Real Y[]) const;
57 inline void shift(const concepts::Real3d& z, const concepts::Real src[],
58 concepts::Real dst[]) const;
59 inline void shift(const concepts::Real3d& z, const concepts::Cmplx src[],
60 concepts::Cmplx dst[]) const;
62 inline void apply(const XYColExpPtr* Y, const F src[], F dst[]) const;
63
71 const concepts::Real3d& c, XYColExpPtr* Y[]) const;
74 const concepts::Real3d& c, XYColExpPtr* Y[]) const;
77 const concepts::Real3d& c, XYColExpPtr* Y[]) const;
80 const concepts::Real3d& c, XYColExpPtr* Y[]) const;
83 const concepts::Real3d& c, XYColExpPtr* Y[]) const;
84 };
85
86 template <class Fspc>
87 inline XYColReal* DMultipoleY<Fspc>::getCol(uint blksz, uint n) const {
88 return new XYColReal(blksz, n);
89 }
90
91 template <class Fspc>
93 const concepts::Real src[],
94 concepts::Real dst[]) const {
95 Y_.shift(z, src, dst, 0);
96 }
97
98 template <class Fspc>
99 inline void DMultipoleY<Fspc>::shift(const concepts::Real3d& z,
100 const concepts::Cmplx src[],
101 concepts::Cmplx dst[]) const {
102 Y_.shift(z, src, dst);
103 }
104
105 template <class F>
106 inline void DMultipoleY<F>::apply(const XYColExpPtr* Y,
107 const F src[], F dst[]) const {
108 const XYColRealPtr* YMPE = dynamic_cast<const XYColRealPtr*>(Y);
109 if (YMPE) {Y_.apply(YMPE->value(), src, dst); return;}
110
111 throw
112 conceptsException(concepts::MissingFeature("XYColExp not supported"));
113 }
114
115} // namespace cluster
116
117#endif // multipoleDY_hh
#define conceptsException(exc)
uint blksz() const
Size of memory used for the expansion.
void evaluate(const bem::Constant3d001< F > &elm, const concepts::Real3d &c, XYColExpPtr *Y[]) const
void evaluate(const bem::Linear3d000< F > &elm, const concepts::Real3d &c, XYColExpPtr *Y[]) const
XYColReal * getCol(uint blksz, uint n) const
void evaluate(const bem::Constant3d000< F > &elm, const concepts::Real3d &c, XYColExpPtr *Y[]) const
void evaluate(const concepts::Element< F > &elm, const concepts::Real3d &c, XYColExpPtr *Y[]) const
void apply(const XYColExpPtr *Y, const F src[], F dst[]) const
DMultipoleY(uint m, uint gauss)
void evaluate(const bem::Constant3d002< F > &elm, const concepts::Real3d &c, XYColExpPtr *Y[]) const
uint m() const
Order of the expansion.
void shift(const concepts::Real3d &z, const concepts::Real src[], concepts::Real dst[]) const
void evaluate(const concepts::Real3d &z, const concepts::Unit3d &h, concepts::Real Y[]) 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