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

space/smatrix.hh
Go to the documentation of this file.
00001 /* S Matrix
00002  * An S matrix changes a T matrix according to a refinement to handle
00003  * hanging nodes
00004  */
00005 
00006 #ifndef smatrix_hh
00007 #define smatrix_hh
00008 
00009 #include "basics/outputOperator.hh"
00010 #include "basics/typedefs.hh"
00011 #include "toolbox/array.hh"
00012 
00013 namespace concepts {
00014 
00015   // forward declaration
00016   template<class F>
00017   class TColumn;
00018 
00019   template<class F>
00020   class ShapeFunction1D;
00021 
00022   // *********************************************************** SMatrixBase **
00023 
00051   template<class F>
00052   class SMatrixBase : public OutputOperator {
00053   public:
00055     virtual void operator()(const TColumn<F>& src, TColumn<F>& dest) const = 0;
00056 
00058     virtual uint size() const = 0;
00059   protected:
00060     virtual std::ostream& info(std::ostream& os) const;
00061   };
00062 
00063   // ************************************************************* SMatrix1D **
00064 
00076   class SMatrix1D : public SMatrixBase<Real> {
00077   public:
00093     SMatrix1D(const ShapeFunction1D<Real>& small,
00094         const ShapeFunction1D<Real>& left,
00095         const ShapeFunction1D<Real>& right);
00096 
00108     SMatrix1D(const SMatrix1D& s, const bool flip = false);
00109     virtual void operator()(const TColumn<Real>& src,
00110           TColumn<Real>& dest) const;
00112     void scale(const Real factor);
00113     virtual uint size() const;
00114   protected:
00115     virtual std::ostream& info(std::ostream& os) const;
00116   private:
00118     const uint n_;
00119 
00130     Array<Real> data_;
00131 
00140     Real* left_;
00141 
00149     Real* right_;
00150   };
00151 
00152   // ********************************************************* SMatrixTensor **
00153 
00164   template<class F, int dim>
00165   class SMatrixTensor : public SMatrixBase<F> {
00166   public:
00172     SMatrixTensor(const SMatrixBase<F>& matrix, const uint position);
00173     virtual void operator()(const TColumn<F>& src, TColumn<F>& dest) const;
00174     virtual uint size() const;
00175   protected:
00176     virtual std::ostream& info(std::ostream& os) const;
00177   private:
00178     const SMatrixBase<Real>& matrix_;
00179     const uint position_;
00180   };
00181 
00182   // ******************************************************** SMatrixCompose **
00183 
00188   template<class F>
00189   class SMatrixCompose : public SMatrixBase<F> {
00190   public:
00196     inline SMatrixCompose(const SMatrixBase<F>& A, const SMatrixBase<F>& B,
00197         const SMatrixBase<F>* C = 0) : A_(A), B_(B), C_(C) {}
00198     virtual void operator()(const TColumn<F>& src, TColumn<F>& dest) const;
00199     virtual uint size() const;
00200   protected:
00201     virtual std::ostream& info(std::ostream& os) const;
00202   private:
00204     const SMatrixBase<F>& A_;
00206     const SMatrixBase<F>& B_;
00208     const SMatrixBase<F>* C_;
00209   };
00210 
00211 
00212   // ************************************************** SMatrixGeneralTensor **
00213 
00225   template<class F, int dim>
00226   class SMatrixGeneralTensor : public SMatrixBase<F> {
00227   public:
00235     SMatrixGeneralTensor(const SMatrixBase<F>& matrix, const uint* n,
00236        const uint position);
00243     SMatrixGeneralTensor(const SMatrixBase<F>& matrix, const uint position);
00244     virtual void operator()(const TColumn<F>& src, TColumn<F>& dest) const;
00245     virtual uint size() const;
00246   protected:
00247     virtual std::ostream& info(std::ostream& os) const;
00248   private:
00249     const SMatrixBase<Real>& matrix_;
00250     uint n_[dim];
00251     const uint position_;
00252   };
00253 
00254 
00255   // ********************************************************** SMatrixBlock **
00256 
00270   template<class F, int dim>
00271   class SMatrixBlock : public SMatrixBase<F> {
00272   public:
00278     SMatrixBlock(const SMatrixBase<F>& A, const SMatrixBase<F>& B,
00279      const SMatrixBase<F>* C = 0);
00280     virtual void operator()(const TColumn<F>& src, TColumn<F>& dest) const;
00282     inline uint size() const { return size_; }
00283   protected:
00284     virtual std::ostream& info(std::ostream& os) const;
00285   private:
00287     const SMatrixBase<F>& A_;
00289     const SMatrixBase<F>& B_;
00291     const SMatrixBase<F>* C_;
00293     uint* n_;
00295     uint size_;
00296   };
00297 
00298 } // namespace concepts
00299 
00300 #endif // smatrix_hh

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