00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__quadrature_h
00013 #define __deal2__quadrature_h
00014
00015
00016 #include <deal.II/base/config.h>
00017 #include <deal.II/base/point.h>
00018 #include <deal.II/base/subscriptor.h>
00019 #include <vector>
00020
00021 DEAL_II_NAMESPACE_OPEN
00022
00025
00079 template <int dim>
00080 class Quadrature : public Subscriptor
00081 {
00082 public:
00090 typedef Quadrature<dim-1> SubQuadrature;
00091
00104 explicit Quadrature (const unsigned int n_quadrature_points = 0);
00105
00117 Quadrature (const SubQuadrature &,
00118 const Quadrature<1> &);
00119
00141 explicit Quadrature (const Quadrature<dim != 1 ? 1 : 0> &quadrature_1d);
00142
00146 Quadrature (const Quadrature<dim> &q);
00147
00158 Quadrature (const std::vector<Point<dim> > &points,
00159 const std::vector<double> &weights);
00160
00176 Quadrature (const std::vector<Point<dim> > &points);
00177
00183 Quadrature (const Point<dim> &point);
00184
00188 virtual ~Quadrature ();
00189
00196 Quadrature& operator = (const Quadrature<dim>&);
00197
00201 bool operator == (const Quadrature<dim> & p) const;
00202
00208 void initialize(const std::vector<Point<dim> > &points,
00209 const std::vector<double> &weights);
00210
00214 unsigned int size () const;
00215
00220 const Point<dim> & point (const unsigned int i) const;
00221
00227 const std::vector<Point<dim> > & get_points () const;
00228
00233 double weight (const unsigned int i) const;
00234
00239 const std::vector<double> & get_weights () const;
00240
00247 std::size_t memory_consumption () const;
00248
00253 template <class Archive>
00254 void serialize (Archive & ar, const unsigned int version);
00255
00256 protected:
00262 std::vector<Point<dim> > quadrature_points;
00263
00270 std::vector<double> weights;
00271 };
00272
00273
00285 template <int dim>
00286 class QAnisotropic : public Quadrature<dim>
00287 {
00288 public:
00295 QAnisotropic(const Quadrature<1>& qx);
00296
00301 QAnisotropic(const Quadrature<1>& qx,
00302 const Quadrature<1>& qy);
00303
00308 QAnisotropic(const Quadrature<1>& qx,
00309 const Quadrature<1>& qy,
00310 const Quadrature<1>& qz);
00311 };
00312
00313
00339 template <int dim>
00340 class QIterated : public Quadrature<dim>
00341 {
00342 public:
00348 QIterated (const Quadrature<1> &base_quadrature,
00349 const unsigned int n_copies);
00350
00354 DeclException0 (ExcInvalidQuadratureFormula);
00355 private:
00362 static bool
00363 uses_both_endpoints (const Quadrature<1> &base_quadrature);
00364 };
00365
00366
00367
00370 #ifndef DOXYGEN
00371
00372
00373
00374
00375 template<int dim>
00376 inline
00377 unsigned int
00378 Quadrature<dim>::size () const
00379 {
00380 return weights.size();
00381 }
00382
00383
00384 template <int dim>
00385 inline
00386 const Point<dim> &
00387 Quadrature<dim>::point (const unsigned int i) const
00388 {
00389 AssertIndexRange(i, size());
00390 return quadrature_points[i];
00391 }
00392
00393
00394
00395 template <int dim>
00396 double
00397 Quadrature<dim>::weight (const unsigned int i) const
00398 {
00399 AssertIndexRange(i, size());
00400 return weights[i];
00401 }
00402
00403
00404
00405 template <int dim>
00406 inline
00407 const std::vector<Point<dim> > &
00408 Quadrature<dim>::get_points () const
00409 {
00410 return quadrature_points;
00411 }
00412
00413
00414
00415 template <int dim>
00416 inline
00417 const std::vector<double> &
00418 Quadrature<dim>::get_weights () const
00419 {
00420 return weights;
00421 }
00422
00423
00424
00425 template <int dim>
00426 template <class Archive>
00427 inline
00428 void
00429 Quadrature<dim>::serialize (Archive & ar, const unsigned int)
00430 {
00431
00432
00433 ar & static_cast<Subscriptor &>(*this);
00434
00435 ar & quadrature_points & weights;
00436 }
00437
00438
00439
00440
00441
00442 template <>
00443 Quadrature<0>::Quadrature (const unsigned int);
00444 template <>
00445 Quadrature<0>::Quadrature (const Quadrature<-1> &,
00446 const Quadrature<1> &);
00447 template <>
00448 Quadrature<0>::Quadrature (const Quadrature<1> &);
00449 template <>
00450 Quadrature<0>::~Quadrature ();
00451
00452 template <>
00453 Quadrature<1>::Quadrature (const Quadrature<0> &,
00454 const Quadrature<1> &);
00455
00456 template <>
00457 Quadrature<1>::Quadrature (const Quadrature<0> &);
00458
00459 #endif // DOXYGEN
00460 DEAL_II_NAMESPACE_CLOSE
00461
00462 #endif
00463