Skip to content

Quadrature

All docstrings from Mantis.Quadrature

Mantis.Quadrature.AbstractElementQuadratureRule Type
julia
AbstractElementQuadratureRule{manifold_dim} <: AbstractQuadratureRule{manifold_dim}

A quadrature rule on a single quadrature element.

source
Mantis.Quadrature.AbstractGlobalQuadratureRule Type
julia
AbstractGlobalQuadratureRule{manifold_dim} <: AbstractQuadratureRule{manifold_dim}

A quadrature rule on a global domain.

source
Mantis.Quadrature.AbstractQuadratureRule Type
julia
AbstractQuadratureRule{manifold_dim}

Abstract type for a quadrature rule on an entire domain of dimension manifold_dim.

Type parameters

  • manifold_dim: Dimension of the domain
source
Mantis.Quadrature.CanonicalQuadratureRule Type
julia
CanonicalQuadratureRule{manifold_dim} <: ElementQuadratureRule{manifold_dim}

Represents a quadrature rule on a canonical element of dimension manifold_dim.

Fields

  • nodes::NTuple{manifold_dim, Vector{Float64}}: Quadrature nodes per dimension.

  • weights::Vector{Float64}: Tensor product of quadrature rules. The shape is consistent with the output of the evaluate methods for FunctionSpaces.

  • rule_label::String: Name or type of quadrature rule. Used for human verification.

Type parameters

  • manifold_dim: Dimension of the domain

Inner Constructors

  • CanonicalQuadratureRule(nodes::NTuple{manifold_dim, Vector{Float64}}, weights::Vector{Float64}): General constructor.

Outer Constructors

source
Mantis.Quadrature.StandardQuadrature Type
julia
StandardQuadrature{manifold_dim, Q} <: AbstractGlobalQuadratureRule{manifold_dim}

Represents a standard quadrature rule for a given manifold dimension, where each element has the same canonical rule Q.

Fields

  • canonical_qrule::Q: The canonical quadrature rule used for the elements.

  • num_elements::Int: The number of elements in the quadrature rule.

Type parameters

  • manifold_dim: Dimension of the domain

  • Q: Type of the canonical quadrature rule.

Inner Constructors

  • StandardQuadrature(canonical_qrule::Q, num_elements::Int): Creates a new StandardQuadrature instance with the specified canonical quadrature rule and number of elements.
source
Mantis.Quadrature._compute_tensor_product Method
julia
_compute_tensor_product(weights_1d::NTuple{manifold_dim, Vector{T}}) where {
    manifold_dim, T <: Number
}

Compute the tensor product of the given 1D quadrature weights.

Arguments

  • weights_1d::NTuple{manifold_dim, Vector{T}}: Quadrature weights per dimension.

Returns

  • ::Vector{T}: Tensor product of the quadrature weights.
source
Mantis.Quadrature.clenshaw_curtis Method
julia
clenshaw_curtis(p::Integer)

Find the roots and weights for Clenshaw-Curtis quadrature on the interval [0, 1]. The roots include the endpoints 0 and 1 and Clenshaw-Curtis quadrature is exact for polynomials up to degree p. However, in practise, this quadrature rule can obtain results comparable to Gauss quadrature (in some cases), see [12] and [13].

Arguments

  • p::Integer: Degree of the quadrature rule.

Returns

  • ::CanonicalQuadratureRule{1}: 1 dimensional quadrature rule containing the nodes and weights. There will be p+1 nodes and weights.

Notes

See [14] for the algorithm based on fast fourier transforms. The algorithm used here is a direct translation from the given MATLAB code on page 201.

source
Mantis.Quadrature.gauss_legendre Method
julia
gauss_legendre(N::Integer)

Computes the nodes ξ and weights w of Gauss-Legendre quadrature.

Note that here the quadrature rule is valid for the interval ξ[0,1], instead of ξ[1,1] as usual.

Arguments

  • N::Integer: Number of nodes used in the quadrature rule.

Returns

  • ::CanonicalQuadratureRule{1}: 1 dimensional quadrature rule containing the nodes and weights. There will be N nodes and weights.

Throws

  • DomainError: If N is less than or equal to zero.

Notes

Uses the FastGaussQuadrature.jl package. We only linearly map the nodes and weights to the interval [0, 1].

source
Mantis.Quadrature.gauss_lobatto Method
julia
gauss_lobatto(N::Integer)

Computes the nodes ξ and weights w of Gauss-Lobatto quadrature.

Note that here the quadrature rule is valid for the interval ξ[0,1], instead of ξ[1,1] as usual.

Arguments

  • N::Integer: Number of nodes used in the quadrature rule.

Returns

  • ::CanonicalQuadratureRule{1}: 1 dimensional quadrature rule containing the nodes and weights. There will be N nodes and weights.

Throws

  • DomainError: If N is less than or equal to 1. This is handled by the FastGaussQuadrature.jl package.

Notes

Uses the FastGaussQuadrature.jl package. We only linearly map the nodes and weights to the interval [0, 1].

source
Mantis.Quadrature.get_canonical_quadrature_rule Method
julia
get_canonical_quadrature_rule(standard_quadrature::StandardQuadrature)

Get the canonical quadrature rule of the standard quadrature.

Arguments

  • standard_quadrature::StandardQuadrature: The standard quadrature rule.

Returns

  • CanonicalQuadratureRule: The canonical quadrature rule of the standard quadrature.
source
Mantis.Quadrature.get_canonical_quadrature_rules Method
julia
get_canonical_quadrature_rules(
    q_rule::Function,
    nq_single::NTuple{manifold_dim, Int},
    nq_others::NTuple{manifold_dim, Int}...,
) where {manifold_dim}

Returns a tuple of tensor-product quadrature rules, of the type q_rule, for the given number of quadrature points in each dimension.

Arguments

  • q_rule::Function: The type of univariate quadrature rule to use.

  • nq_single::NTuple{manifold_dim, Int}: Number of quadrature points per dimension for the first quadrature rule.

  • nq_others::NTuple{manifold_dim, Int}...: Number of quadrature points per dimension for the other quadrature rules.

Returns

  • ::NTuple{num_rules, CanonicalQuadratureRule{manifold_dim}}: A tuple of quadrature rules where num_rules is the number of other quadrature rules given plus the single rule.
source
Mantis.Quadrature.get_element_idxs Method
julia
get_element_idxs(global_quad_rule::AbstractGlobalQuadratureRule, element_idx::Int)

Get the indices of the quadrature elements in a given base element.

Arguments

  • global_quad_rule::AbstractGlobalQuadratureRule: The global quadrature rule.

  • element_idx::Int: The index of the base element.

Returns

  • Vector{Int}: The indices of the quadrature elements in the specified base element.
source
Mantis.Quadrature.get_element_quadrature_rule Method
julia
get_element_quadrature_rule(global_quad_rule::AbstractGlobalQuadratureRule, element_idx::Int)

Get the quadrature rule for a specific quadrature element index .

Arguments

  • global_quad_rule::AbstractGlobalQuadratureRule: The global quadrature rule.

  • element_idx::Int: The index of the quadrature element.

Returns

  • AbstractElementQuadratureRule: The quadrature rule for the specified quadrature element.
source
Mantis.Quadrature.get_label Method
julia
get_label(qr::AbstractElementQuadratureRule{manifold_dim}) where {manifold_dim}

Returns the label of a quadrature rule.

Arguments

  • qr::AbstractElementQuadratureRule{manifold_dim}: Rule to get the label from.

Returns

  • rule_label::String: Label of the quadrature rule.
source
Mantis.Quadrature.get_nodes Method
julia
get_nodes(qr::AbstractElementQuadratureRule{manifold_dim}) where {manifold_dim}

Returns the quadrature nodes of a quadrature rule.

Arguments

  • qr::AbstractElementQuadratureRule{manifold_dim}: Rule to get the nodes from.

Returns

  • nodes::NTuple{manifold_dim, Vector{Float64}}: Nodes of the quadrature rule.
source
Mantis.Quadrature.get_num_base_elements Method
julia
get_num_base_elements(global_quad_rule::AbstractGlobalQuadratureRule)

Get the number of base elements in the global quadrature rule. Each base element can have several sub-elements on which quadrature is performed.

Arguments

  • global_quad_rule::AbstractGlobalQuadratureRule: The global quadrature rule.

Returns

  • Int: The number of base elements in the global quadrature rule.
source
Mantis.Quadrature.get_num_base_elements Method
julia
get_num_base_elements(standard_quadrature::StandardQuadrature)

Returns the number of base elements in the standard quadrature.

Arguments

  • standard_quadrature::StandardQuadrature: The standard quadrature rule.

Returns

  • ::Int: The number of base elements in the standard quadrature.
source
Mantis.Quadrature.get_num_evaluation_elements Method
julia
get_num_evaluation_elements(global_quad_rule::AbstractGlobalQuadratureRule)

Get the number of quadrature elements in the global quadrature rule. These are the smallest element units on which quadrature is performed.

Arguments

  • global_quad_rule::AbstractGlobalQuadratureRule: The global quadrature rule.

Returns

  • Int: The number of quadrature elements in the global quadrature rule.
source
Mantis.Quadrature.get_weights Method
julia
get_weights(qr::AbstractElementQuadratureRule{manifold_dim}) where {manifold_dim}

Returns the quadrature weights of a quadrature rule.

Arguments

  • qr::AbstractElementQuadratureRule{manifold_dim}: Rule to get the weights from.

Returns

  • weights::Vector{Float64}: Weights of the quadrature rule.
source
Mantis.Quadrature.newton_cotes Method
julia
newton_cotes(num_points::Integer, type::String="closed")

Computes the nodes ξ and weights w of a Newton-Cotes quadrature rule.

Newton-Cotes quadrature rules are based on equally spaced nodes. There are two types of Newton-Cotes rules: closed and open. Closed Newton-Cotes rules include the endpoints of the interval, while open Newton-Cotes rules do not.

The algorithm used to compute the weights is not the most efficient nor the most accurate.

Arguments

  • num_points::Integer: Number of points in the quadrature rule.

  • type::String: Type of the Newton-Cotes rule. Valid types are "closed" and "open".

Returns

  • ::CanonicalQuadratureRule{1}: 1 dimensional quadrature rule containing the nodes and weights.
source
Mantis.Quadrature.tensor_product_rule Method
julia
tensor_product_rule(p::NTuple{manifold_dim, Integer}, quad_rule::F, rule_args_1d...) where {
    manifold_dim, F <: Function
}

Returns a tensor product quadrature rule of given degree and rule type.

Arguments

  • p::NTuple{manifold_dim, Integer}: Degree of the quadrature rule per dimension.

  • quad_rule::F: The function that returns a CanonicalQuadratureRule{1} given an integer degree. May take additional arguments.

  • rule_args_1d...: Additional arguments for the 1D quadrature rule. Optional.

Returns

  • ::CanonicalQuadratureRule{manifold_dim}: CanonicalQuadratureRule of the new dimension.
source
Mantis.Quadrature.tensor_product_rule Method
julia
tensor_product_rule(qrules_1d::NTuple{manifold_dim, CanonicalQuadratureRule{1}}) where {
    manifold_dim
}

Returns a tensor product quadrature rule from the given rules.

Arguments

  • qrules_1d::NTuple{manifold_dim, CanonicalQuadratureRule{1}}: Quadrature rules per dimension.

Returns

  • ::CanonicalQuadratureRule{manifold_dim}: CanonicalQuadratureRule of the new dimension.
source