deal.II version GIT relicensing-6809-ge913b9bb34 2026-09-25 17:20:01+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
quadrature_lib.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 1998 - 2023 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13#ifndef dealii_quadrature_lib_h
14#define dealii_quadrature_lib_h
15
16
17#include <deal.II/base/config.h>
18
20
22
36template <int dim>
37class QGauss : public Quadrature<dim>
38{
39public:
44 QGauss(const unsigned int n);
45};
46
47
48
78template <int dim>
79class QGaussRadau : public Quadrature<dim>
80{
81public:
87 {
95 right
96 };
103 QGaussRadau(const unsigned int n,
105
109 QGaussRadau(QGaussRadau<dim> &&) noexcept = default;
110
111private:
113};
114
115
116
139template <int dim>
140class QGaussLobatto : public Quadrature<dim>
141{
142public:
147 QGaussLobatto(const unsigned int n);
148};
149
150
151
161template <int dim>
162class QMidpoint : public Quadrature<dim>
163{
164public:
165 QMidpoint();
166};
167
168
169
174template <int dim>
175class QSimpson : public Quadrature<dim>
176{
177public:
178 QSimpson();
179};
180
181
182
191template <int dim>
192class QTrapezoid : public Quadrature<dim>
193{
194public:
195 QTrapezoid();
196};
197
198
199
206template <int dim>
207class QMilne : public Quadrature<dim>
208{
209public:
210 QMilne();
211};
212
213
214
221template <int dim>
222class QWeddle : public Quadrature<dim>
223{
224public:
225 QWeddle();
226};
227
228
229
243template <int dim>
244class QGaussLog : public Quadrature<dim>
245{
246public:
250 QGaussLog(const unsigned int n, const bool revert = false);
251
252private:
256 static std::vector<double>
257 get_quadrature_points(const unsigned int n);
258
262 static std::vector<double>
263 get_quadrature_weights(const unsigned int n);
264};
265
266
267
304template <int dim>
305class QGaussLogR : public Quadrature<dim>
306{
307public:
315 QGaussLogR(const unsigned int n,
316 const Point<dim> &x0 = Point<dim>(),
317 const double alpha = 1,
318 const bool factor_out_singular_weight = false);
319
325 QGaussLogR(QGaussLogR<dim> &&) noexcept = default;
326
327protected:
332 const double fraction;
333};
334
335
336
360template <int dim>
361class QGaussOneOverR : public Quadrature<dim>
362{
363public:
396 QGaussOneOverR(const unsigned int n,
397 const Point<dim> &singularity,
398 const bool factor_out_singular_weight = false);
433 QGaussOneOverR(const unsigned int n,
434 const unsigned int vertex_index,
435 const bool factor_out_singular_weight = false);
436
437private:
443 static unsigned int
444 quad_size(const Point<dim> &singularity, const unsigned int n);
445};
446
447
448
458template <int dim>
459class QSorted : public Quadrature<dim>
460{
461public:
466 QSorted(const Quadrature<dim> &quad);
467
468private:
474 bool
475 compare_weights(const unsigned int a, const unsigned int b) const;
476};
477
478
479
534template <int dim>
535class QTelles : public Quadrature<dim>
536{
537public:
544 QTelles(const Quadrature<1> &base_quad, const Point<dim> &singularity);
550 QTelles(const unsigned int n, const Point<dim> &singularity);
551};
552
553
554
566template <int dim>
567class QGaussChebyshev : public Quadrature<dim>
568{
569public:
571 QGaussChebyshev(const unsigned int n);
572};
573
574
575
590template <int dim>
592{
593public:
599 {
607 right
608 };
611 const unsigned int n,
612 const EndPoint end_point = QGaussRadauChebyshev::EndPoint::left);
613
618
619private:
620 const EndPoint end_point;
621};
622
623
624
638template <int dim>
640{
641public:
643 QGaussLobattoChebyshev(const unsigned int n);
644};
645
646
647
681template <int dim>
682class QSimplex : public Quadrature<dim>
683{
684public:
691 QSimplex(const Quadrature<dim> &quad);
692
721 template <int spacedim = dim>
723 compute_affine_transformation(
724 const std::array<Point<spacedim>, dim + 1> &vertices) const;
725
738 template <int spacedim = dim>
740 mapped_quadrature(
741 const std::vector<std::array<Point<spacedim>, dim + 1>> &simplices) const;
742};
743
744
745
764class QTrianglePolar : public QSimplex<2>
765{
766public:
774 QTrianglePolar(const Quadrature<1> &radial_quadrature,
775 const Quadrature<1> &angular_quadrature);
776
783 QTrianglePolar(const unsigned int n);
784};
785
786
787
820class QDuffy : public QSimplex<2>
821{
822public:
837 QDuffy(const Quadrature<1> &radial_quadrature,
838 const Quadrature<1> &angular_quadrature,
839 const double beta = 1.0);
840
848 QDuffy(const unsigned int n, const double beta);
849};
850
851
852
857template <int dim>
858class QSplit : public Quadrature<dim>
859{
860public:
895 QSplit(const QSimplex<dim> &base, const Point<dim> &split_point);
896};
897
898
899
927template <int dim>
928class QGaussSimplex : public QSimplex<dim>
929{
930public:
935 explicit QGaussSimplex(const unsigned int n_points_1D);
936};
937
938
939
971template <int dim>
973{
974public:
981 explicit QWitherdenVincentSimplex(const unsigned int n_points_1D,
982 const bool use_odd_order = true);
983};
984
985
986
1026template <int dim>
1027class QStroudSimplex : public QSimplex<dim>
1028{
1029public:
1034 explicit QStroudSimplex(const unsigned int n_points_1D);
1035};
1036
1037
1038
1046template <int dim>
1047class QIteratedSimplex : public Quadrature<dim>
1048{
1049public:
1050 QIteratedSimplex(const Quadrature<dim> &base_quadrature,
1051 const unsigned int n_copies);
1052};
1053
1054
1055
1059template <int dim>
1060class QGaussWedge : public Quadrature<dim>
1061{
1062public:
1068 explicit QGaussWedge(const unsigned int n_points_1D);
1069};
1070
1071
1072
1085template <int dim>
1086class QGaussPyramid : public Quadrature<dim>
1087{
1088public:
1094 explicit QGaussPyramid(const unsigned int n_points_1D);
1095};
1096
1099/* -------------- declaration of explicit specializations ------------- */
1100
1101#ifndef DOXYGEN
1102template <>
1103QGauss<1>::QGauss(const unsigned int n);
1104template <>
1105QGaussRadau<1>::QGaussRadau(const unsigned int n,
1106 const QGaussRadau<1>::EndPoint end_point);
1107template <>
1108QGaussLobatto<1>::QGaussLobatto(const unsigned int n);
1109
1110template <>
1111std::vector<double>
1112QGaussLog<1>::get_quadrature_points(const unsigned int);
1113template <>
1114std::vector<double>
1115QGaussLog<1>::get_quadrature_weights(const unsigned int);
1116
1117template <>
1119template <>
1121template <>
1123template <>
1125template <>
1127template <>
1128QGaussLog<1>::QGaussLog(const unsigned int n, const bool revert);
1129template <>
1130QGaussLogR<1>::QGaussLogR(const unsigned int n,
1131 const Point<1> &x0,
1132 const double alpha,
1133 const bool flag);
1134template <>
1135QGaussOneOverR<2>::QGaussOneOverR(const unsigned int n,
1136 const unsigned int index,
1137 const bool flag);
1138template <>
1139QTelles<1>::QTelles(const Quadrature<1> &base_quad,
1140 const Point<1> &singularity);
1141#endif // DOXYGEN
1142
1143
1144
1146#endif
Definition point.h:111
QGaussLobatto(const unsigned int n)
QGaussLogR(const unsigned int n, const Point< dim > &x0=Point< dim >(), const double alpha=1, const bool factor_out_singular_weight=false)
QGaussLogR(QGaussLogR< dim > &&) noexcept=default
QGaussLog(const unsigned int n, const bool revert=false)
static std::vector< double > get_quadrature_points(const unsigned int n)
static std::vector< double > get_quadrature_weights(const unsigned int n)
QGaussOneOverR(const unsigned int n, const unsigned int vertex_index, const bool factor_out_singular_weight=false)
QGaussOneOverR(const unsigned int n, const Point< dim > &singularity, const bool factor_out_singular_weight=false)
static unsigned int quad_size(const Point< dim > &singularity, const unsigned int n)
QGaussRadauChebyshev(QGaussRadauChebyshev< dim > &&) noexcept=default
const EndPoint end_point
QGaussRadau(QGaussRadau< dim > &&) noexcept=default
QGaussRadau(const unsigned int n, const EndPoint end_point=QGaussRadau::EndPoint::left)
QGauss(const unsigned int n)
QTelles(const Quadrature< 1 > &base_quad, const Point< dim > &singularity)
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39