Coeff.h
00001 #ifndef gridripper_multipole_Coeff_h
00002 #define gridripper_multipole_Coeff_h
00003
00004
00005 #include "Bases.h"
00006
00007
00008 namespace gridripper { namespace multipole {
00009
00010
00019 template <typename K>
00020 class Coeff;
00022 template <>
00023 class Coeff<GReal_t>;
00025 template <>
00026 class Coeff<GComplex_t>;
00027
00028
00036 template <>
00037 class Coeff<GReal_t> : public Yre
00038 {
00039 public:
00041 GReal_t v;
00042 public:
00043 Coeff<GReal_t>();
00044 Coeff<GReal_t>(const Coeff<GReal_t>&);
00046 Coeff<GReal_t>(const GReal_t value, const Yre& Yrearg);
00047 Coeff<GReal_t>(const Yre& Yrearg);
00052 Coeff<GReal_t>(const GReal_t value, const int l, const int m);
00053 ~Coeff<GReal_t>();
00055 GReal_t eval(const GReal_t theta, const GReal_t phi) const;
00056 };
00057
00059 Coeff<GReal_t> operator*(const GReal_t, const Yre&);
00060 Coeff<GReal_t> operator*(const Yre&, const GReal_t);
00061
00063 Coeff<GReal_t> operator/(const Yre&, const GReal_t);
00064
00066 Coeff<GReal_t> operator*(const GReal_t, const Coeff<GReal_t>&);
00067 Coeff<GReal_t> operator*(const Coeff<GReal_t>&, const GReal_t);
00068
00070 Coeff<GReal_t> operator/(const Coeff<GReal_t>&, const GReal_t);
00071
00073 Coeff<GReal_t> operator-(const Yre&);
00074 Coeff<GReal_t> operator-(const Coeff<GReal_t>&);
00075
00076
00084 template <>
00085 class Coeff<GComplex_t> : public Y
00086 {
00087 public:
00089 GComplex_t v;
00090 public:
00091 Coeff<GComplex_t>();
00092 Coeff<GComplex_t>(const Coeff<GComplex_t>&);
00094 Coeff<GComplex_t>(const GReal_t value, const Y& Yarg);
00096 Coeff<GComplex_t>(const GComplex_t& value, const Y& Yarg);
00097 Coeff<GComplex_t>(const Y& Yarg);
00102 Coeff<GComplex_t>(const GReal_t value, const int l, const int m);
00107 Coeff<GComplex_t>(const GComplex_t& value, const int l, const int m);
00108 ~Coeff<GComplex_t>();
00110 GComplex_t eval(const GReal_t theta, const GReal_t phi) const;
00111 };
00112
00114 Coeff<GComplex_t> operator*(const GReal_t, const Y&);
00115 Coeff<GComplex_t> operator*(const Y&, const GReal_t);
00116 Coeff<GComplex_t> operator*(const GComplex_t&, const Y&);
00117 Coeff<GComplex_t> operator*(const Y&, const GComplex_t&);
00118
00120 Coeff<GComplex_t> operator/(const Y&, const GReal_t);
00121 Coeff<GComplex_t> operator/(const Y&, const GComplex_t&);
00122
00124 Coeff<GComplex_t> operator*(const GReal_t, const Coeff<GComplex_t>&);
00125 Coeff<GComplex_t> operator*(const Coeff<GComplex_t>&, const GReal_t);
00126 Coeff<GComplex_t> operator*(const GComplex_t&, const Coeff<GComplex_t>&);
00127 Coeff<GComplex_t> operator*(const Coeff<GComplex_t>&, const GComplex_t&);
00128
00130 Coeff<GComplex_t> operator/(const Coeff<GComplex_t>&, const GReal_t);
00131 Coeff<GComplex_t> operator/(const Coeff<GComplex_t>&, const GComplex_t&);
00132
00134 Coeff<GComplex_t> operator-(const Y&);
00135 Coeff<GComplex_t> operator-(const Coeff<GComplex_t>&);
00136
00138 Coeff<GComplex_t> conj(const Y&);
00139 Coeff<GComplex_t> conj(const Coeff<GComplex_t>&);
00140
00141
00142 } }
00143
00144
00145 #endif