Go to the documentation of this file.00001
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
00014 template<class F>
00015 class Quad;
00016 using concepts::Real;
00017
00018
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
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
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
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
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
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
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
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 }
00154
00155 #endif // shortestDist2D_hh