Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)

geometry/circle.hh
Go to the documentation of this file.
00001 /* circle made out of five quadrilaterials (4 curved, 1 straight)
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   // **************************************************************** Circle **
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 } // namespace concepts
00206 
00207 #endif // circle_hh

Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)