Go to the documentation of this file.00001
00002
00003
00004 #ifndef circle_hh
00005 #define circle_hh
00006
00007 #include "toolbox/array.hh"
00008 #include "toolbox/sequence.hh"
00009 #include "cell1D.hh"
00010 #include "cell2D.hh"
00011 #include "mesh.hh"
00012
00013 namespace concepts {
00014
00015
00016
00045 class Circle : public Mesh2withBoundary {
00046 public:
00058 Circle(const Real r = 1.0, const Real ratio = 0.5,
00059 const Real innerRadius = 0.0);
00069 Circle(const Array<Real> rings, const Real ratio = 0.5,
00070 const Real innerRadius = 0.0);
00082 Circle(const Array<Real> rings,
00083 const Array<uint> ringAttrib,
00084 const Real ratio = 0.5, const Real innerRadius = 0.0);
00098 Circle(const Array<Real> rings,
00099 const Array<uint> ringAttrib, const Array<uint> ringEdgeAttrib,
00100 const Real ratio = 0.5, const Real innerRadius = 0.0);
00106 Circle(const Real innerRadius, const Array<Real> rings);
00117 Circle(const Real innerRadius, const Array<Real> rings,
00118 const Array<uint> ringAttrib);
00119
00129 Circle(const Real2d center, const Real r, const uint n,
00130 const Attribute attrib = 0, const Real phi0 = 0,
00131 const Attribute edgAttr = 0);
00132
00146 Circle(const Real2d center, const Real innerRadius,
00147 const Real outerRadius, const uint n,
00148 const Attribute attrib = 0, const Real phi0 = 0);
00149
00150 virtual ~Circle();
00151
00152 inline uint ncell() const { return ncell_; }
00153 inline Scan2* scan() { return new S(&cell_); }
00154
00155 virtual std::ostream& info(std::ostream& os) const;
00156 private:
00158 class S : public Scan<Cell2> {
00159 uint idx_;
00160 Array<Quad2d*>* cell_;
00161 public:
00162 inline S(Array<Quad2d*>* cell) : idx_(0),
00163 cell_(cell) {}
00164 inline S(const S &scan) : idx_(scan.idx_),
00165 cell_(scan.cell_) {}
00166
00167 inline bool eos() const { return idx_ == cell_->size(); }
00168 inline Cell2& operator++(int) { return *(*cell_)[idx_++]; }
00169
00170 inline Scan2* clone() const { return new S(*this); }
00171 };
00172 uint ncell_;
00173
00174 Array<Vertex*> vtx_;
00175 Array<Edge*> edg_;
00176 Array<Quad*> quad_;
00177
00179 Array<CircleMappingEdge2d*> edges_;
00180
00182 Array<Quad2d*> cell_;
00183
00188 Real2d point_(const uint n, const Real r) const;
00197 void construct_(const Array<Real> rings, const Real ratio,
00198 const Real innerRadius,
00199 const std::map<uint, uint>* const attrib = 0,
00200 const std::map<uint, uint>* const edgeAttrib = 0,
00201 const bool hole = false);
00202 };
00203
00204
00205 }
00206
00207 #endif // circle_hh