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

app-cwinkelm/periodicSquare.hh
Go to the documentation of this file.
00001 // periodic uint square mesh
00002 
00003 #ifndef periodicSquare_hh
00004 #define periodicSquare_hh
00005 
00006 #include "basics/typedefs.hh"
00007 #include "geometry/mesh.hh"
00008 #include "geometry/cell2D.hh"
00009 
00010 using concepts::Real;
00011 
00016 class PeriodicSquare : public concepts::Mesh2 {
00017 public:
00024   PeriodicSquare(uint n, Real jitter = 0);
00026   virtual ~PeriodicSquare();
00028   virtual unsigned int ncell() const { return 2*n_*n_; }
00030   virtual concepts::Scan2* scan() { return new S(cell_, n_); }
00032   virtual std::ostream& info(std::ostream& os) const;
00034   uint n() { return n_; };
00035 private:
00037   class S : public concepts::Scan<concepts::Cell2> {
00039     unsigned int idx_;
00041     unsigned int n_;
00043     concepts::Triangle2d** cell_;
00044   public:
00046     S(concepts::Triangle2d* cell[], uint n) : idx_(0), n_(n), cell_(cell) {}
00048     S(const S& scan) : idx_(scan.idx_),  cell_(scan.cell_) {}
00050     bool eos() const { return idx_ == 2*n_*n_; }
00052     concepts::Cell2& operator++(int) { return *cell_[idx_++]; }
00054     concepts::Scan2* clone() const { return new S(*this); }
00055   };
00057   uint ii(uint a, uint b) { 
00058     return a + (1+n_)*b;
00059   };
00061   uint j(uint a, uint b) { return (a%n_) + n_*(b%n_); };
00063   uint k(uint a, uint b, uint c) { return c + 3*j(a, b); };
00065   uint l(uint a, uint b, uint d) { return d + 2*j(a, b); };
00067   Real dRand() {
00068     return jitter_*2*((static_cast<Real>(std::rand()) /
00069       static_cast<Real>(RAND_MAX))-0.5);
00070   }
00072   double x(uint a) { return static_cast<double>(a)/static_cast<double>(n_); }
00074   uint n_;
00076   Real jitter_;
00078   concepts::Real2d** coord_;
00080   concepts::Vertex** vtx_;
00082   concepts::Edge** edg_;
00084   concepts::Triangle** tri_;
00086   concepts::Triangle2d** cell_;
00087 };
00088 
00089 #endif // periodicSquare_hh

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