include/deal.II/base/quadrature.h

00001 //---------------------------------------------------------------------------
00002 //    @f$Id: quadrature.h 25345 2012-03-31 08:37:04Z bangerth @f$
00003 //
00004 //    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012 by the deal.II authors
00005 //
00006 //    This file is subject to QPL and may not be  distributed
00007 //    without copyright and license information. Please refer
00008 //    to the file deal.II/doc/license.html for the  text  and
00009 //    further information on this license.
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 // -------------------  inline and template functions ----------------
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                                      // forward to serialization
00432                                      // function in the base class.
00433   ar &  static_cast<Subscriptor &>(*this);
00434 
00435   ar & quadrature_points & weights;
00436 }
00437 
00438 
00439 
00440 /* -------------- declaration of explicit specializations ------------- */
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

deal.II documentation generated on Tue May 22 2012 12:06:02 by doxygen 1.7.3