00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__quadrature_lib_h
00013 #define __deal2__quadrature_lib_h
00014
00015
00016 #include <deal.II/base/config.h>
00017 #include <deal.II/base/quadrature.h>
00018
00019 DEAL_II_NAMESPACE_OPEN
00020
00023
00032 template <int dim>
00033 class QGauss : public Quadrature<dim>
00034 {
00035 public:
00043 QGauss (const unsigned int n);
00044 };
00045
00046
00073 template<int dim>
00074 class QGaussLobatto : public Quadrature<dim>
00075 {
00076 public:
00082 QGaussLobatto(const unsigned int n);
00083
00084 protected:
00097 std::vector<long double>
00098 compute_quadrature_points (const unsigned int q,
00099 const int alpha,
00100 const int beta) const;
00101
00111 std::vector<long double>
00112 compute_quadrature_weights (const std::vector<long double> &x,
00113 const int alpha,
00114 const int beta) const;
00115
00126 long double JacobiP(const long double x,
00127 const int alpha,
00128 const int beta,
00129 const unsigned int n) const;
00130
00136 long double gamma(const unsigned int n) const;
00137 };
00138
00139
00140
00144 template <int dim>
00145 class QMidpoint : public Quadrature<dim>
00146 {
00147 public:
00148 QMidpoint ();
00149 };
00150
00151
00155 template <int dim>
00156 class QSimpson : public Quadrature<dim>
00157 {
00158 public:
00159 QSimpson ();
00160 };
00161
00162
00166 template <int dim>
00167 class QTrapez : public Quadrature<dim>
00168 {
00169 public:
00170 QTrapez ();
00171 };
00172
00177 template <int dim>
00178 class QMilne : public Quadrature<dim>
00179 {
00180 public:
00181 QMilne ();
00182 };
00183
00184
00189 template <int dim>
00190 class QWeddle : public Quadrature<dim>
00191 {
00192 public:
00193 QWeddle ();
00194 };
00195
00196
00197
00213 template <int dim>
00214 class QGaussLog : public Quadrature<dim>
00215 {
00216 public:
00221 QGaussLog(const unsigned int n,
00222 const bool revert=false);
00223
00224 protected:
00229 std::vector<double>
00230 set_quadrature_points(const unsigned int n) const;
00231
00236 std::vector<double>
00237 set_quadrature_weights(const unsigned int n) const;
00238
00239 };
00240
00241
00242
00243
00287 template<int dim>
00288 class QGaussLogR : public Quadrature<dim>
00289 {
00290 public:
00303 QGaussLogR(const unsigned int n,
00304 const Point<dim> x0 = Point<dim>(),
00305 const double alpha = 1,
00306 const bool factor_out_singular_weight=false);
00307
00308 protected:
00314 const double fraction;
00315 };
00316
00317
00342 template<int dim>
00343 class QGaussOneOverR : public Quadrature<dim>
00344 {
00345 public:
00380 QGaussOneOverR(const unsigned int n,
00381 const Point<dim> singularity,
00382 const bool factor_out_singular_weight=false);
00419 QGaussOneOverR(const unsigned int n,
00420 const unsigned int vertex_index,
00421 const bool factor_out_singular_weight=false);
00422 private:
00427 static unsigned int quad_size(const Point<dim> singularity,
00428 const unsigned int n);
00429 };
00430
00431
00432
00435
00436
00437 template <> QGauss<1>::QGauss (const unsigned int n);
00438 template <> QGaussLobatto<1>::QGaussLobatto (const unsigned int n);
00439 template <>
00440 std::vector<long double> QGaussLobatto<1>::
00441 compute_quadrature_points(const unsigned int, const int, const int) const;
00442 template <>
00443 std::vector<long double> QGaussLobatto<1>::
00444 compute_quadrature_weights(const std::vector<long double>&, const int, const int) const;
00445 template <>
00446 long double QGaussLobatto<1>::
00447 JacobiP(const long double, const int, const int, const unsigned int) const;
00448 template <>
00449 long double
00450 QGaussLobatto<1>::gamma(const unsigned int n) const;
00451
00452 template <> std::vector<double> QGaussLog<1>::set_quadrature_points(const unsigned int) const;
00453 template <> std::vector<double> QGaussLog<1>::set_quadrature_weights(const unsigned int) const;
00454
00455 template <> QMidpoint<1>::QMidpoint ();
00456 template <> QTrapez<1>::QTrapez ();
00457 template <> QSimpson<1>::QSimpson ();
00458 template <> QMilne<1>::QMilne ();
00459 template <> QWeddle<1>::QWeddle ();
00460 template <> QGaussLog<1>::QGaussLog (const unsigned int n, const bool revert);
00461 template <> QGaussLogR<1>::QGaussLogR (const unsigned int n, const Point<1> x0, const double alpha, const bool flag);
00462 template <> QGaussOneOverR<2>::QGaussOneOverR (const unsigned int n, const unsigned int index, const bool flag);
00463
00464
00465
00466
00467 DEAL_II_NAMESPACE_CLOSE
00468
00469 #endif
00470