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

hp2D/shortestDist.hh
Go to the documentation of this file.
00001 /* weight functions for weighted regularization
00002  */
00003 
00004 #ifndef shortestDist2D_hh
00005 #define shortestDist2D_hh
00006 
00007 #include <cmath>
00008 #include "basics/vectorsMatrices.hh"
00009 #include "hp2D/singularSet.hh"
00010 
00011 namespace hp2D {
00012 
00013   // forward declarations
00014   template<class F>
00015   class Quad;
00016   using concepts::Real;
00017 
00018   // ********************************************************* TrivialWeight **
00019 
00024   class TrivialWeight {
00025   public:
00027     Real operator()(const SingularSet&, concepts::Real2d,
00028         const Quad<Real>*) const { return 1.0; }
00029   };
00030 
00031   std::ostream& operator<<(std::ostream& os, const TrivialWeight& p);
00032 
00033   // ********************************************************** ShortestDist **
00034 
00041   class ShortestDist {
00042   public:
00050     Real operator()(const SingularSet& singularities,
00051         concepts::Real2d point, const Quad<Real>* elm) const;
00052   };
00053 
00054   std::ostream& operator<<(std::ostream& os, const ShortestDist& p);
00055 
00056   // ********************************************************** DistancePost **
00057 
00067   template<typename DistClass, typename Function>
00068   class DistancePost {
00069   public:
00073     Real operator()(const SingularSet& singularities,
00074         concepts::Real2d point, const Quad<Real>* elm) const {
00075       return Function::post(dist_(singularities, point, elm));
00076     }
00077   private:
00078     DistClass dist_;
00079   };
00080 
00081   template<typename DistClass, typename Function>
00082   inline std::ostream& operator<<(std::ostream& os,
00083           const DistancePost<DistClass, Function>& p) {
00084     return os << Function() << '(' << DistClass() << ')';
00085   }
00086 
00087 
00088   // ********************************************************** Postprocess4 **
00089 
00094   class Postprocess4 {
00095   public:
00096     static Real post(Real x) { return std::pow(x, 0.4); }
00097   };
00098 
00099   std::ostream& operator<<(std::ostream& os, const Postprocess4& p);
00100 
00101   // ********************************************************** Postprocess7 **
00102 
00107   class Postprocess7 {
00108   public:
00109     static Real post(Real x) { return std::pow(x, 0.7); }
00110   };
00111 
00112   std::ostream& operator<<(std::ostream& os, const Postprocess7& p);
00113 
00114   // ********************************************************** Postprocess8 **
00115 
00120   class Postprocess8 {
00121   public:
00122     static Real post(Real x) { return std::pow(x, 0.8); }
00123   };
00124 
00125   std::ostream& operator<<(std::ostream& os, const Postprocess8& p);
00126 
00127   // ********************************************************** Postprocess9 **
00128 
00133   class Postprocess9 {
00134   public:
00135     static Real post(Real x) { return std::pow(x, 0.9); }
00136   };
00137 
00138   std::ostream& operator<<(std::ostream& os, const Postprocess9& p);
00139 
00140   // ******************************************************* PostprocessSqrt **
00141 
00146   class PostprocessSqrt {
00147   public:
00148     static Real post(Real x) { return std::sqrt(x); }
00149   };
00150 
00151   std::ostream& operator<<(std::ostream& os, const PostprocessSqrt& p);
00152 
00153 } // namespace hp2D
00154 
00155 #endif // shortestDist2D_hh

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