myfunctions.h

Go to the documentation of this file.
00001 #ifndef _deal2_myfunction_h_
00002 #define _deal2_myfunction_h_
00003 
00004 #include <base/function_lib.h>
00005 
00006 using namespace dealii;
00007 
00008 
00009   template<int dim>
00010     class MyFunction : public Function<dim>
00011     {
00012       public:
00013 
00014         virtual Tensor<2,dim> hessian (const Point<dim>   &p,
00015             const unsigned int  component = 0) const = 0 ;
00016 
00017         virtual void hessian_list (const std::vector<Point<dim> > &points,
00018             std::vector<Tensor<2,dim> >    &hessians,
00019             const unsigned int              component = 0) const = 0;
00020 
00021     };
00022 
00023   template<int dim>
00024     class TestFunction : public MyFunction<dim>
00025     {
00026       public:
00027 
00028         TestFunction ();
00029 
00030         virtual double value (const Point<dim>   &p,
00031             const unsigned int  component = 0) const;
00032 
00033         virtual void value_list (const std::vector<Point<dim> > &points,
00034             std::vector<double>            &values,
00035             const unsigned int              component = 0) const;
00036 
00037         virtual Tensor<1,dim> gradient (const Point<dim>   &p,
00038             const unsigned int  component = 0) const;
00039 
00040         virtual void gradient_list (const std::vector<Point<dim> > &points,
00041             std::vector<Tensor<1,dim> >    &gradients,
00042             const unsigned int              component = 0) const;
00043 
00044         virtual Tensor<2,dim> hessian (const Point<dim>   &p,
00045             const unsigned int  component = 0) const;
00046 
00047         virtual void hessian_list (const std::vector<Point<dim> > &points,
00048             std::vector<Tensor<2,dim> >    &hessians,
00049             const unsigned int              component = 0) const;
00050 
00051         virtual double laplacian (const Point<dim>   &p,
00052             const unsigned int  component = 0) const;
00053 
00054         virtual void laplacian_list (const std::vector<Point<dim> > &points,
00055             std::vector<double>            &values,
00056             const unsigned int              component = 0) const;
00057       private:
00058     };
00059 
00060 
00061   
00062   template<int dim>
00063     class QuarticFunction : public MyFunction<dim>
00064     {
00065       public:
00066 
00067         QuarticFunction ();
00068 
00069         virtual double value (const Point<dim>   &p,
00070             const unsigned int  component = 0) const;
00071 
00072         virtual void value_list (const std::vector<Point<dim> > &points,
00073             std::vector<double>            &values,
00074             const unsigned int              component = 0) const;
00075 
00076         virtual Tensor<1,dim> gradient (const Point<dim>   &p,
00077             const unsigned int  component = 0) const;
00078 
00079         virtual void gradient_list (const std::vector<Point<dim> > &points,
00080             std::vector<Tensor<1,dim> >    &gradients,
00081             const unsigned int              component = 0) const;
00082 
00083         virtual Tensor<2,dim> hessian (const Point<dim>   &p,
00084             const unsigned int  component = 0) const;
00085 
00086         virtual void hessian_list (const std::vector<Point<dim> > &points,
00087             std::vector<Tensor<2,dim> >    &hessians,
00088             const unsigned int              component = 0) const;
00089 
00090         virtual double laplacian (const Point<dim>   &p,
00091             const unsigned int  component = 0) const;
00092 
00093         virtual void laplacian_list (const std::vector<Point<dim> > &points,
00094             std::vector<double>            &values,
00095             const unsigned int              component = 0) const;
00096       private:
00097     };
00098 
00099   template<int dim>
00100     class QuadraticFunction : public MyFunction<dim>
00101     {
00102       public:
00103 
00104         QuadraticFunction ();
00105 
00106         virtual double value (const Point<dim>   &p,
00107             const unsigned int  component = 0) const;
00108 
00109         virtual void value_list (const std::vector<Point<dim> > &points,
00110             std::vector<double>            &values,
00111             const unsigned int              component = 0) const;
00112 
00113         virtual Tensor<1,dim> gradient (const Point<dim>   &p,
00114             const unsigned int  component = 0) const;
00115 
00116         virtual void gradient_list (const std::vector<Point<dim> > &points,
00117             std::vector<Tensor<1,dim> >    &gradients,
00118             const unsigned int              component = 0) const;
00119 
00120         virtual Tensor<2,dim> hessian (const Point<dim>   &p,
00121             const unsigned int  component = 0) const;
00122 
00123         virtual void hessian_list (const std::vector<Point<dim> > &points,
00124             std::vector<Tensor<2,dim> >    &hessians,
00125             const unsigned int              component = 0) const;
00126 
00127         virtual double laplacian (const Point<dim>   &p,
00128             const unsigned int  component = 0) const;
00129 
00130         virtual void laplacian_list (const std::vector<Point<dim> > &points,
00131             std::vector<double>            &values,
00132             const unsigned int              component = 0) const;
00133       private:
00134     };
00135 
00136     class CubicTestFunction : public MyFunction<2>
00137     {
00138       public:
00139 
00140         CubicTestFunction ();
00141 
00142         virtual double value (const Point<2>   &p,
00143             const unsigned int  component = 0) const;
00144 
00145         virtual void value_list (const std::vector<Point<2> > &points,
00146             std::vector<double>            &values,
00147             const unsigned int              component = 0) const;
00148 
00149         virtual Tensor<1,2> gradient (const Point<2>   &p,
00150             const unsigned int  component = 0) const;
00151 
00152         virtual void gradient_list (const std::vector<Point<2> > &points,
00153             std::vector<Tensor<1,2> >    &gradients,
00154             const unsigned int              component = 0) const;
00155 
00156         virtual Tensor<2,2> hessian (const Point<2>   &p,
00157             const unsigned int  component = 0) const;
00158 
00159         virtual void hessian_list (const std::vector<Point<2> > &points,
00160             std::vector<Tensor<2,2> >    &hessians,
00161             const unsigned int              component = 0) const;
00162 
00163         virtual double laplacian (const Point<2>   &p,
00164             const unsigned int  component = 0) const;
00165 
00166         virtual void laplacian_list (const std::vector<Point<2> > &points,
00167             std::vector<double>            &values,
00168             const unsigned int              component = 0) const;
00169       private:
00170     };
00171 
00172 template<int dim>
00173     class LinearFunction : public MyFunction<dim>
00174     {
00175       public:
00176 
00177         LinearFunction ();
00178 
00179         virtual double value (const Point<dim>   &p,
00180             const unsigned int  component = 0) const;
00181 
00182         virtual void value_list (const std::vector<Point<dim> > &points,
00183             std::vector<double>            &values,
00184             const unsigned int              component = 0) const;
00185 
00186         virtual Tensor<1,dim> gradient (const Point<dim>   &p,
00187             const unsigned int  component = 0) const;
00188 
00189         virtual void gradient_list (const std::vector<Point<dim> > &points,
00190             std::vector<Tensor<1,dim> >    &gradients,
00191             const unsigned int              component = 0) const;
00192 
00193         virtual Tensor<2,dim> hessian (const Point<dim>   &p,
00194             const unsigned int  component = 0) const;
00195 
00196         virtual void hessian_list (const std::vector<Point<dim> > &points,
00197             std::vector<Tensor<2,dim> >    &hessians,
00198             const unsigned int              component = 0) const;
00199 
00200         virtual double laplacian (const Point<dim>   &p,
00201             const unsigned int  component = 0) const;
00202 
00203         virtual void laplacian_list (const std::vector<Point<dim> > &points,
00204             std::vector<double>            &values,
00205             const unsigned int              component = 0) const;
00206       private:
00207     };
00208 
00209 
00210   template<int dim>
00211     class ExactSolutionSSSS : public MyFunction<dim>
00212     {
00213       public:
00214 
00215         ExactSolutionSSSS ();
00216 
00217         virtual double value (const Point<dim>   &p,
00218             const unsigned int  component = 0) const;
00219 
00220         virtual void value_list (const std::vector<Point<dim> > &points,
00221             std::vector<double>            &values,
00222             const unsigned int              component = 0) const;
00223 
00224         virtual Tensor<1,dim> gradient (const Point<dim>   &p,
00225             const unsigned int  component = 0) const;
00226 
00227         virtual void gradient_list (const std::vector<Point<dim> > &points,
00228             std::vector<Tensor<1,dim> >    &gradients,
00229             const unsigned int              component = 0) const;
00230 
00231         virtual Tensor<2,dim> hessian (const Point<dim>   &p,
00232             const unsigned int  component = 0) const;
00233 
00234         virtual void hessian_list (const std::vector<Point<dim> > &points,
00235             std::vector<Tensor<2,dim> >    &hessians,
00236             const unsigned int              component = 0) const;
00237 
00238         virtual double laplacian (const Point<dim>   &p,
00239             const unsigned int  component = 0) const;
00240 
00241         virtual void laplacian_list (const std::vector<Point<dim> > &points,
00242             std::vector<double>            &values,
00243             const unsigned int              component = 0) const;
00244       private:
00245     };
00246 
00247   template<int dim>
00248     class ExactSolutionCFCF : public MyFunction<dim>
00249     {
00250       public:
00251 
00252         ExactSolutionCFCF ();
00253 
00254         virtual double value (const Point<dim>   &p,
00255             const unsigned int  component = 0) const;
00256 
00257         virtual void value_list (const std::vector<Point<dim> > &points,
00258             std::vector<double>            &values,
00259             const unsigned int              component = 0) const;
00260 
00261         virtual Tensor<1,dim> gradient (const Point<dim>   &p,
00262             const unsigned int  component = 0) const;
00263 
00264         virtual void gradient_list (const std::vector<Point<dim> > &points,
00265             std::vector<Tensor<1,dim> >    &gradients,
00266             const unsigned int              component = 0) const;
00267 
00268         virtual Tensor<2,dim> hessian (const Point<dim>   &p,
00269             const unsigned int  component = 0) const;
00270 
00271         virtual void hessian_list (const std::vector<Point<dim> > &points,
00272             std::vector<Tensor<2,dim> >    &hessians,
00273             const unsigned int              component = 0) const;
00274 
00275         virtual double laplacian (const Point<dim>   &p,
00276             const unsigned int  component = 0) const;
00277 
00278         virtual void laplacian_list (const std::vector<Point<dim> > &points,
00279             std::vector<double>            &values,
00280             const unsigned int              component = 0) const;
00281       private:
00282     };
00283 
00284   template<int dim>
00285     class ExactSolutionSFSF : public MyFunction<dim>
00286     {
00287       public:
00288 
00289         ExactSolutionSFSF ();
00290 
00291         virtual double value (const Point<dim>   &p,
00292             const unsigned int  component = 0) const;
00293 
00294         virtual void value_list (const std::vector<Point<dim> > &points,
00295             std::vector<double>            &values,
00296             const unsigned int              component = 0) const;
00297 
00298         virtual Tensor<1,dim> gradient (const Point<dim>   &p,
00299             const unsigned int  component = 0) const;
00300 
00301         virtual void gradient_list (const std::vector<Point<dim> > &points,
00302             std::vector<Tensor<1,dim> >    &gradients,
00303             const unsigned int              component = 0) const;
00304 
00305         virtual Tensor<2,dim> hessian (const Point<dim>   &p,
00306             const unsigned int  component = 0) const;
00307 
00308         virtual void hessian_list (const std::vector<Point<dim> > &points,
00309             std::vector<Tensor<2,dim> >    &hessians,
00310             const unsigned int              component = 0) const;
00311 
00312         virtual double laplacian (const Point<dim>   &p,
00313             const unsigned int  component = 0) const;
00314 
00315         virtual void laplacian_list (const std::vector<Point<dim> > &points,
00316             std::vector<double>            &values,
00317             const unsigned int              component = 0) const;
00318       private:
00319     };
00320 
00321   template<int dim>
00322     class ExactSolutionCFSF : public MyFunction<dim>
00323     {
00324       public:
00325 
00326         ExactSolutionCFSF ();
00327 
00328         virtual double value (const Point<dim>   &p,
00329             const unsigned int  component = 0) const;
00330 
00331         virtual void value_list (const std::vector<Point<dim> > &points,
00332             std::vector<double>            &values,
00333             const unsigned int              component = 0) const;
00334 
00335         virtual Tensor<1,dim> gradient (const Point<dim>   &p,
00336             const unsigned int  component = 0) const;
00337 
00338         virtual void gradient_list (const std::vector<Point<dim> > &points,
00339             std::vector<Tensor<1,dim> >    &gradients,
00340             const unsigned int              component = 0) const;
00341 
00342         virtual Tensor<2,dim> hessian (const Point<dim>   &p,
00343             const unsigned int  component = 0) const;
00344 
00345         virtual void hessian_list (const std::vector<Point<dim> > &points,
00346             std::vector<Tensor<2,dim> >    &hessians,
00347             const unsigned int              component = 0) const;
00348 
00349         virtual double laplacian (const Point<dim>   &p,
00350             const unsigned int  component = 0) const;
00351 
00352         virtual void laplacian_list (const std::vector<Point<dim> > &points,
00353             std::vector<double>            &values,
00354             const unsigned int              component = 0) const;
00355       private:
00356     };
00357 
00358   template<int dim>
00359     class PillowSquareFunction : public MyFunction<dim>
00360     {
00361       public:
00362 
00363         PillowSquareFunction (const double offset=0.);
00364 
00365 
00366         virtual double value (const Point<dim>   &p,
00367             const unsigned int  component = 0) const;
00368 
00369         virtual void value_list (const std::vector<Point<dim> > &points,
00370             std::vector<double>            &values,
00371             const unsigned int              component = 0) const;
00372 
00373         virtual Tensor<1,dim> gradient (const Point<dim>   &p,
00374             const unsigned int  component = 0) const;
00375 
00376         virtual void gradient_list (const std::vector<Point<dim> > &points,
00377             std::vector<Tensor<1,dim> >    &gradients,
00378             const unsigned int              component = 0) const;
00379 
00380         virtual Tensor<2,dim> hessian (const Point<dim>   &p,
00381             const unsigned int  component = 0) const;
00382 
00383         virtual void hessian_list (const std::vector<Point<dim> > &points,
00384             std::vector<Tensor<2,dim> >    &hessians,
00385             const unsigned int              component = 0) const;
00386 
00387         virtual double laplacian (const Point<dim>   &p,
00388             const unsigned int  component = 0) const;
00389 
00390         virtual void laplacian_list (const std::vector<Point<dim> > &points,
00391             std::vector<double>            &values,
00392             const unsigned int              component = 0) const;
00393       private:
00394         const double offset;
00395     };
00396 
00397   template <int dim>
00398     class CosineSquareFunction : public MyFunction<dim>
00399     {
00400       public:
00401 
00402         virtual double value (const Point<dim>   &p,
00403             const unsigned int  component = 0) const;
00404 
00405         virtual void value_list (const std::vector<Point<dim> > &points,
00406             std::vector<double>            &values,
00407             const unsigned int              component = 0) const;
00408 
00409         virtual Tensor<1,dim> gradient (const Point<dim>   &p,
00410             const unsigned int  component = 0) const;
00411 
00412         virtual void gradient_list (const std::vector<Point<dim> > &points,
00413             std::vector<Tensor<1,dim> >    &gradients,
00414             const unsigned int              component = 0) const;
00415 
00416         virtual double laplacian (const Point<dim>   &p,
00417             const unsigned int  component = 0) const;
00418 
00419         virtual void laplacian_list (const std::vector<Point<dim> > &points,
00420             std::vector<double>            &values,
00421             const unsigned int              component = 0) const;
00422 
00423         virtual Tensor<2,dim> hessian (const Point<dim>   &p,
00424             const unsigned int  component = 0) const;
00425 
00426         virtual void hessian_list (const std::vector<Point<dim> > &points,
00427             std::vector<Tensor<2,dim> >    &hessians,
00428             const unsigned int              component = 0) const;
00429 
00430     };
00431 
00432 #endif // _deal2_myfunction_h

Generated on Thu Oct 9 14:52:44 2008 for Additional Finite Elements for deal.II by  doxygen 1.5.3