MathTL
numerics/corner_singularity_biharmonic.h
00001 // -*- c++ -*-
00002 
00003 // +--------------------------------------------------------------------+
00004 // | This file is part of MathTL - the Mathematical Template Library    |
00005 // |                                                                    |
00006 // | Copyright (c) 2002-2009                                            |
00007 // | Thorsten Raasch, Manuel Werner                                     |
00008 // +--------------------------------------------------------------------+
00009 
00010 #ifndef _MATHTL_CORNER_SINGULARITY_BIHARMONIC_H
00011 #define _MATHTL_CORNER_SINGULARITY_BIHARMONIC_H
00012 
00013 #include <geometry/point.h>
00014 #include <utils/function.h>
00015 
00016 namespace MathTL
00017 {
00036   class CornerSingularityBiharmonic
00037     : public Function<2>
00038   {
00039   public:
00045     CornerSingularityBiharmonic(const Point<2>& x0,
00046                       const double theta0,
00047                       const double omega,
00048                       const double r0 = 0.01,
00049                       const double r1 = 0.99);
00050 
00052     virtual ~CornerSingularityBiharmonic() {}
00053 
00055     double value(const Point<2>& x, const unsigned int component = 0) const;
00056 
00058     void vector_value(const Point<2>& p, Vector<double>& values) const;
00059     
00060   protected:
00062     Point<2> x0;
00063 
00065     double theta0;
00066 
00068     double omega;
00069 
00071     double r0, r1;
00072 
00074     double zeta(const double r) const;
00075   };
00076 
00082   class CornerSingularityBiharmonicRHS
00083     : public Function<2>
00084   {
00085   public:
00091     CornerSingularityBiharmonicRHS(const Point<2>& x0,
00092                          const double theta0,
00093                          const double omega,
00094                          const double r0 = 0.01,
00095                          const double r1 = 0.99);
00096     
00098     virtual ~CornerSingularityBiharmonicRHS() {}
00099 
00101     double value(const Point<2>& x, const unsigned int component = 0) const;
00102 
00104     void vector_value(const Point<2>& p, Vector<double>& values) const;
00105     
00106   protected:
00108     Point<2> x0;
00109 
00111     double theta0;
00112 
00114     double omega;
00115 
00117     double r0, r1;
00118 
00120     double zeta(const double r) const;
00121 
00123     double zeta_prime(const double r) const;
00124 
00126     double zeta_primeprime(const double r) const;
00127  
00129     double zeta_third_der(const double r) const;
00130 
00132     double zeta_fourth_der(const double r) const;
00133  };
00134 
00135 }
00136 
00137 // implementations of inline functions
00138 #include "numerics/corner_singularity_biharmonic.cpp"
00139 
00140 #endif
 All Classes Functions Variables Typedefs Enumerations