From 7d84dc9fcff4a0291b0ba4b4d1258bde2dff833e Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Fri, 8 Nov 2024 13:22:19 +0000 Subject: [PATCH] build based on 27e4be6 --- dev/.documenter-siteinfo.json | 2 +- dev/docstrings/index.html | 34 +++++++++--------- dev/index.html | 2 +- dev/objects.inv | Bin 4222 -> 4232 bytes .../helmholtz_scattering/index.html | 12 +++---- dev/pluto-examples/poisson/index.html | 8 ++--- dev/pluto-examples/toy_example/index.html | 2 +- dev/references/index.html | 2 +- dev/search_index.js | 2 +- dev/tutorials/compression_methods/index.html | 8 ++--- dev/tutorials/correction_methods/index.html | 2 +- dev/tutorials/geo_and_meshes/19f16ee7.png | Bin 21319 -> 0 bytes dev/tutorials/geo_and_meshes/3a92ac05.png | Bin 78884 -> 0 bytes dev/tutorials/geo_and_meshes/55469009.png | Bin 0 -> 78959 bytes dev/tutorials/geo_and_meshes/7ea2bf1b.png | Bin 0 -> 193244 bytes dev/tutorials/geo_and_meshes/80eccad5.png | Bin 193251 -> 0 bytes dev/tutorials/geo_and_meshes/ac8457bc.png | Bin 0 -> 21318 bytes dev/tutorials/geo_and_meshes/index.html | 22 ++++++------ dev/tutorials/getting_started/index.html | 12 +++---- dev/tutorials/integral_operators/index.html | 2 +- dev/tutorials/layer_potentials/86493074.png | Bin 108695 -> 0 bytes dev/tutorials/layer_potentials/a9b241ca.png | Bin 78482 -> 0 bytes dev/tutorials/layer_potentials/bfc06597.png | Bin 0 -> 77543 bytes dev/tutorials/layer_potentials/d9ee0647.png | Bin 81778 -> 0 bytes dev/tutorials/layer_potentials/dd8ae9ff.png | Bin 0 -> 82679 bytes dev/tutorials/layer_potentials/ece240d1.png | Bin 0 -> 106515 bytes dev/tutorials/layer_potentials/index.html | 12 +++---- dev/tutorials/solvers/index.html | 2 +- 28 files changed, 62 insertions(+), 62 deletions(-) delete mode 100644 dev/tutorials/geo_and_meshes/19f16ee7.png delete mode 100644 dev/tutorials/geo_and_meshes/3a92ac05.png create mode 100644 dev/tutorials/geo_and_meshes/55469009.png create mode 100644 dev/tutorials/geo_and_meshes/7ea2bf1b.png delete mode 100644 dev/tutorials/geo_and_meshes/80eccad5.png create mode 100644 dev/tutorials/geo_and_meshes/ac8457bc.png delete mode 100644 dev/tutorials/layer_potentials/86493074.png delete mode 100644 dev/tutorials/layer_potentials/a9b241ca.png create mode 100644 dev/tutorials/layer_potentials/bfc06597.png delete mode 100644 dev/tutorials/layer_potentials/d9ee0647.png create mode 100644 dev/tutorials/layer_potentials/dd8ae9ff.png create mode 100644 dev/tutorials/layer_potentials/ece240d1.png diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index f33fa7ae..6f1aa7aa 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.11.1","generation_timestamp":"2024-11-08T07:13:05","documenter_version":"1.7.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.11.1","generation_timestamp":"2024-11-08T13:22:12","documenter_version":"1.7.0"}} \ No newline at end of file diff --git a/dev/docstrings/index.html b/dev/docstrings/index.html index 654b2ae3..6f29a789 100644 --- a/dev/docstrings/index.html +++ b/dev/docstrings/index.html @@ -1,5 +1,5 @@ -Docstrings · Inti.jl

Docstrings

Inti.IntiModule
module Inti

Library for solving integral equations using Nyström methods.

source
Inti.CORRECTION_METHODSConstant
const CORRECTION_METHODS = [:none, :dim, :hcubature]

Available correction methods for the singular and nearly-singular integrals in Inti.

source
Inti.AbstractMeshType
abstract type AbstractMesh{N,T}

An abstract mesh structure in dimension N with primite data of type T (e.g. Float64 for double precision representation).

Concrete subtypes of AbstractMesh should implement ElementIterator for accessing the mesh elements.

See also: Mesh

source
Inti.AdjointDoubleLayerKernelType
struct AdjointDoubleLayerKernel{T,Op} <: AbstractKernel{T}

Given an operator Op, construct its free-space adjoint double-layer kernel. This corresponds to the transpose(γ₁,ₓ[G]), where G is the SingleLayerKernel. For operators such as Laplace or Helmholtz, this is simply the normal derivative of the fundamental solution respect to the target variable.

source
Inti.BlockArrayType
struct BlockArray{T<:StaticArray,N,S} <: AbstractMatrix{T,N}

A struct which behaves like an Array{T,N}, but with the underlying data stored as a Matrix{S}, where S::Number = eltype(T) is the scalar type associated with T. This allows for the use of blas routines under-the-hood, while providing a convenient interface for handling matrices over StaticArrays.

using StaticArrays
+Docstrings · Inti.jl

Docstrings

Inti.IntiModule
module Inti

Library for solving integral equations using Nyström methods.

source
Inti.CORRECTION_METHODSConstant
const CORRECTION_METHODS = [:none, :dim, :hcubature]

Available correction methods for the singular and nearly-singular integrals in Inti.

source
Inti.AbstractMeshType
abstract type AbstractMesh{N,T}

An abstract mesh structure in dimension N with primite data of type T (e.g. Float64 for double precision representation).

Concrete subtypes of AbstractMesh should implement ElementIterator for accessing the mesh elements.

See also: Mesh

source
Inti.AdjointDoubleLayerKernelType
struct AdjointDoubleLayerKernel{T,Op} <: AbstractKernel{T}

Given an operator Op, construct its free-space adjoint double-layer kernel. This corresponds to the transpose(γ₁,ₓ[G]), where G is the SingleLayerKernel. For operators such as Laplace or Helmholtz, this is simply the normal derivative of the fundamental solution respect to the target variable.

source
Inti.BlockArrayType
struct BlockArray{T<:StaticArray,N,S} <: AbstractMatrix{T,N}

A struct which behaves like an Array{T,N}, but with the underlying data stored as a Matrix{S}, where S::Number = eltype(T) is the scalar type associated with T. This allows for the use of blas routines under-the-hood, while providing a convenient interface for handling matrices over StaticArrays.

using StaticArrays
 T = SMatrix{2,2,Int,4}
 B = Inti.BlockArray{T}([i*j for i in 1:4, j in 1:4])
 
@@ -8,7 +8,7 @@
 2×2 Inti.BlockArray{SMatrix{2, 2, Int64, 4}, 2, Int64}:
  [1 2; 2 4]  [3 4; 6 8]
  [3 6; 4 8]  [9 12; 12 16]
-
source
Inti.DomainType
struct Domain

Representation of a geometrical domain formed by a set of entities with the same geometric dimension. For basic set operations on domains are supported (union, intersection, difference, etc), and they all return a new Domain object.

Calling keys(Ω) returns the set of EntityKeys that make up the domain; given a key, the underlying entities can be accessed with global_get_entity(key).

source
Inti.DomainMethod
Domain([f::Function,] keys)

Create a domain from a set of EntityKeys. Optionally, a filter function f can be passed to filter the entities.

Note that all entities in a domain must have the same geometric dimension.

source
Inti.DomainMethod
Domain(f::Function, msh::AbstractMesh)

Call Domain(f, ents) on ents = entities(msh).

source
Inti.DoubleLayerKernelType
struct DoubleLayerKernel{T,Op} <: AbstractKernel{T}

Given an operator Op, construct its free-space double-layer kernel. This corresponds to the γ₁ trace of the SingleLayerKernel. For operators such as Laplace or Helmholtz, this is simply the normal derivative of the fundamental solution respect to the source variable.

source
Inti.ElastostaticType
struct Elastostatic{N,T} <: AbstractDifferentialOperator{N}

Elastostatic operator in N dimensions: -μΔu - (μ+λ)∇(∇⋅u)

Note that the displacement $u$ is a vector of length N since this is a vectorial problem.

source
Inti.ElementIteratorType
struct ElementIterator{E,M} <: AbstractVector{E}

Structure to lazily access elements of type E in a mesh of type M. This is particularly useful for LagrangeElements, where the information to reconstruct the element is stored in the mesh connectivity matrix.

source
Inti.EmbeddedQuadratureType
struct EmbeddedQuadrature{L,H,D} <: ReferenceQuadrature{D}

A quadrature rule for the reference shape D based on a high-order quadrature of type H and a low-order quadrature of type L. The low-order quadrature rule is embedded in the sense that its n nodes are exactly the first n nodes of the high-order quadrature rule.

source
Inti.EntityKeyType
EntityKey

Used to represent the key of a GeometricEntity, comprised of a dim and a tag field, where dim is the geometrical dimension of the entity, and tag is a unique integer identifying the entity.

The sign of the tag field is used to distinguish the orientation of the entity, and is ignored when comparing two EntityKeys for equality.

source
Inti.FejerType
struct Fejer{N}

N-point Fejer's first quadrature rule for integrating a function over [0,1]. Exactly integrates all polynomials of degree ≤ N-1.

using Inti
+
source
Inti.DomainType
struct Domain

Representation of a geometrical domain formed by a set of entities with the same geometric dimension. For basic set operations on domains are supported (union, intersection, difference, etc), and they all return a new Domain object.

Calling keys(Ω) returns the set of EntityKeys that make up the domain; given a key, the underlying entities can be accessed with global_get_entity(key).

source
Inti.DomainMethod
Domain([f::Function,] keys)

Create a domain from a set of EntityKeys. Optionally, a filter function f can be passed to filter the entities.

Note that all entities in a domain must have the same geometric dimension.

source
Inti.DomainMethod
Domain(f::Function, msh::AbstractMesh)

Call Domain(f, ents) on ents = entities(msh).

source
Inti.DoubleLayerKernelType
struct DoubleLayerKernel{T,Op} <: AbstractKernel{T}

Given an operator Op, construct its free-space double-layer kernel. This corresponds to the γ₁ trace of the SingleLayerKernel. For operators such as Laplace or Helmholtz, this is simply the normal derivative of the fundamental solution respect to the source variable.

source
Inti.ElastostaticType
struct Elastostatic{N,T} <: AbstractDifferentialOperator{N}

Elastostatic operator in N dimensions: -μΔu - (μ+λ)∇(∇⋅u)

Note that the displacement $u$ is a vector of length N since this is a vectorial problem.

source
Inti.ElementIteratorType
struct ElementIterator{E,M} <: AbstractVector{E}

Structure to lazily access elements of type E in a mesh of type M. This is particularly useful for LagrangeElements, where the information to reconstruct the element is stored in the mesh connectivity matrix.

source
Inti.EmbeddedQuadratureType
struct EmbeddedQuadrature{L,H,D} <: ReferenceQuadrature{D}

A quadrature rule for the reference shape D based on a high-order quadrature of type H and a low-order quadrature of type L. The low-order quadrature rule is embedded in the sense that its n nodes are exactly the first n nodes of the high-order quadrature rule.

source
Inti.EntityKeyType
EntityKey

Used to represent the key of a GeometricEntity, comprised of a dim and a tag field, where dim is the geometrical dimension of the entity, and tag is a unique integer identifying the entity.

The sign of the tag field is used to distinguish the orientation of the entity, and is ignored when comparing two EntityKeys for equality.

source
Inti.FejerType
struct Fejer{N}

N-point Fejer's first quadrature rule for integrating a function over [0,1]. Exactly integrates all polynomials of degree ≤ N-1.

using Inti
 
 q = Inti.Fejer(;order=10)
 
@@ -16,7 +16,7 @@
 
 # output
 
-true
source
Inti.GaussType
struct Gauss{D,N} <: ReferenceQuadrature{D}

Tabulated N-point symmetric Gauss quadrature rule for integration over D.

source
Inti.GaussLegendreType
struct GaussLegendre{N,T}

N-point Gauss-Legendre quadrature rule for integrating a function over [0,1]. Exactly integrates all polynomials of degree ≤ 2N-1.

using Inti
+true
source
Inti.GaussType
struct Gauss{D,N} <: ReferenceQuadrature{D}

Tabulated N-point symmetric Gauss quadrature rule for integration over D.

source
Inti.GaussLegendreType
struct GaussLegendre{N,T}

N-point Gauss-Legendre quadrature rule for integrating a function over [0,1]. Exactly integrates all polynomials of degree ≤ 2N-1.

using Inti
 
 q = Inti.GaussLegendre(;order=10)
 
@@ -24,14 +24,14 @@
 
 # output
 
-true
source
Inti.GeometricEntityType
struct GeometricEntity

Geometrical objects such as lines, surfaces, and volumes.

Geometrical entities are stored in a global ENTITIES dictionary mapping EntityKey to the corresponding GeometricEntity, and usually entities are manipulated through their keys.

A GeometricEntity can also contain a pushforward field used to parametrically represent the entry as the image of a reference domain (pushforward.domain) under some function (pushforward.parametrization).

Note that entities are manipulated through their keys, and the GeometricEntity constructor returns the key of the created entity; to retrieve the entity, use the global_get_entity function.

source
Inti.GeometricEntityMethod
GeometricEntity(shape::String [; translation, rotation, scaling, kwargs...])

Constructs a geometric entity with the specified shape and optional parameters, and returns its key.

Arguments

  • shape::String: The shape of the geometric entity.
  • translation: The translation vector of the geometric entity. Default is SVector(0, 0, 0).
  • rotation: The rotation vector of the geometric entity. Default is SVector(0, 0, 0).
  • scaling: The scaling vector of the geometric entity. Default is SVector(1, 1, 1).
  • kwargs...: Additional keyword arguments to be passed to the shape constructor.

Supported shapes

source
Inti.HelmholtzMethod
Helmholtz(; k, dim)

Helmholtz operator in dim dimensions: -Δu - k²u.

The parameter k can be a real or complex number. For purely imaginary wavenumbers, consider using the Yukawa kernel.

source
Inti.HyperRectangleType
struct HyperRectangle{N,T} <: ReferenceInterpolant{ReferenceHyperCube{N},T}

Axis-aligned hyperrectangle in N dimensions given by low_corner::SVector{N,T} and high_corner::SVector{N,T}.

source
Inti.HyperSingularKernelType
struct HyperSingularKernel{T,Op} <: AbstractKernel{T}

Given an operator Op, construct its free-space hypersingular kernel. This corresponds to the transpose(γ₁,ₓγ₁[G]), where G is the SingleLayerKernel. For operators such as Laplace or Helmholtz, this is simply the normal derivative respect to the target variable of the DoubleLayerKernel.

source
Inti.IntegralOperatorType
struct IntegralOperator{T} <: AbstractMatrix{T}

A discrete linear integral operator given by

\[I[u](x) = \int_{\Gamma\_s} K(x,y)u(y) ds_y, x \in \Gamma_{t}\]

where $\Gamma_s$ and $\Gamma_t$ are the source and target domains, respectively.

source
Inti.IntegralPotentialType
struct IntegralPotential

Represent a potential given by a kernel and a quadrature over which integration is performed.

IntegralPotentials are created using IntegralPotential(kernel, quadrature).

Evaluating an integral potential requires a density σ (defined over the quadrature nodes of the source mesh) and a point x at which to evaluate the integral

\[\int_{\Gamma} K(oldsymbol{x},oldsymbol{y})\sigma(y) ds_y, x \not \in \Gamma\]

Assuming 𝒮 is an integral potential and σ is a vector of values defined on quadrature, calling 𝒮[σ] creates an anonymous function that can be evaluated at any point x.

source
Inti.KronrodType
struct Kronrod{D,N} <: ReferenceQuadrature{D}

N-point Kronrod rule obtained by adding n+1 points to a Gauss quadrature containing n points. The order is either 3n + 1 for n even or 3n + 2 for n odd.

source
Inti.LagrangeElementType
struct LagrangeElement{D,Np,T} <: ReferenceInterpolant{D,T}

A polynomial p : D → T uniquely defined by its Np values on the Np reference nodes of D.

The return type T should be a vector space (i.e. support addition and multiplication by scalars). For istance, T could be a number or a vector, but not a Tuple.

source
Inti.LaplaceMethod
Laplace(; dim)

Laplace's differential operator in dim dimension: $-Δu$. ```

Note the negative sign in the definition.

source
Inti.MeshType
struct Mesh{N,T} <: AbstractMesh{N,T}

Unstructured mesh defined by a set of nodes(of typeSVector{N,T}`), and a dictionary mapping element types to connectivity matrices. Each columns of a given connectivity matrix stores the integer tags of the nodes in the mesh comprising the element.

Additionally, the mesh contains a mapping from EntityKeys to the tags of the elements composing the entity. This can be used to extract submeshes from a given mesh using e.g. view(msh,Γ) or msh[Γ], where Γ is a Domain.

See elements for a way to iterate over the elements of a mesh.

source
Inti.MultiIndexType
MultiIndex{N}

Wrapper around NTuple{N,Int} mimicking a multi-index in ℤ₀ᴺ.

source
Inti.ParametricElementType
ParametricElement{D,T,F} <: ReferenceInterpolant{D,T}

An element represented through a explicit function f mapping D into the element. For performance reasons, f should take as input a StaticVector and return a StaticVector or StaticArray.

See also: ReferenceInterpolant, LagrangeElement

source
Inti.PolynomialSpaceType
struct PolynomialSpace{D,K}

The space of all polynomials of degree ≤K, commonly referred to as ℙₖ.

The type parameter D, of singleton type, is used to determine the reference domain of the polynomial basis. In particular, when D is a hypercube in d dimensions, the precise definition is ℙₖ = span{𝐱ᶿ : 0≤max(θ)≤ K}; when D is a d-dimensional simplex, the space is ℙₖ = span{𝐱ᶿ : 0≤sum(θ)≤ K}, where θ ∈ 𝐍ᵈ is a multi-index.

See also: monomial_basis, lagrange_basis

source
Inti.QuadratureMethod
Quadrature(Ω::Domain; meshsize, qorder)

Construct a Quadrature over the domain Ω with a mesh of size meshsize and quadrature order qorder.

source
Inti.GeometricEntityType
struct GeometricEntity

Geometrical objects such as lines, surfaces, and volumes.

Geometrical entities are stored in a global ENTITIES dictionary mapping EntityKey to the corresponding GeometricEntity, and usually entities are manipulated through their keys.

A GeometricEntity can also contain a pushforward field used to parametrically represent the entry as the image of a reference domain (pushforward.domain) under some function (pushforward.parametrization).

Note that entities are manipulated through their keys, and the GeometricEntity constructor returns the key of the created entity; to retrieve the entity, use the global_get_entity function.

source
Inti.GeometricEntityMethod
GeometricEntity(shape::String [; translation, rotation, scaling, kwargs...])

Constructs a geometric entity with the specified shape and optional parameters, and returns its key.

Arguments

  • shape::String: The shape of the geometric entity.
  • translation: The translation vector of the geometric entity. Default is SVector(0, 0, 0).
  • rotation: The rotation vector of the geometric entity. Default is SVector(0, 0, 0).
  • scaling: The scaling vector of the geometric entity. Default is SVector(1, 1, 1).
  • kwargs...: Additional keyword arguments to be passed to the shape constructor.

Supported shapes

source
Inti.HelmholtzMethod
Helmholtz(; k, dim)

Helmholtz operator in dim dimensions: -Δu - k²u.

The parameter k can be a real or complex number. For purely imaginary wavenumbers, consider using the Yukawa kernel.

source
Inti.HyperRectangleType
struct HyperRectangle{N,T} <: ReferenceInterpolant{ReferenceHyperCube{N},T}

Axis-aligned hyperrectangle in N dimensions given by low_corner::SVector{N,T} and high_corner::SVector{N,T}.

source
Inti.HyperSingularKernelType
struct HyperSingularKernel{T,Op} <: AbstractKernel{T}

Given an operator Op, construct its free-space hypersingular kernel. This corresponds to the transpose(γ₁,ₓγ₁[G]), where G is the SingleLayerKernel. For operators such as Laplace or Helmholtz, this is simply the normal derivative respect to the target variable of the DoubleLayerKernel.

source
Inti.IntegralOperatorType
struct IntegralOperator{T} <: AbstractMatrix{T}

A discrete linear integral operator given by

\[I[u](x) = \int_{\Gamma\_s} K(x,y)u(y) ds_y, x \in \Gamma_{t}\]

where $\Gamma_s$ and $\Gamma_t$ are the source and target domains, respectively.

source
Inti.IntegralPotentialType
struct IntegralPotential

Represent a potential given by a kernel and a quadrature over which integration is performed.

IntegralPotentials are created using IntegralPotential(kernel, quadrature).

Evaluating an integral potential requires a density σ (defined over the quadrature nodes of the source mesh) and a point x at which to evaluate the integral

\[\int_{\Gamma} K(oldsymbol{x},oldsymbol{y})\sigma(y) ds_y, x \not \in \Gamma\]

Assuming 𝒮 is an integral potential and σ is a vector of values defined on quadrature, calling 𝒮[σ] creates an anonymous function that can be evaluated at any point x.

source
Inti.KronrodType
struct Kronrod{D,N} <: ReferenceQuadrature{D}

N-point Kronrod rule obtained by adding n+1 points to a Gauss quadrature containing n points. The order is either 3n + 1 for n even or 3n + 2 for n odd.

source
Inti.LagrangeElementType
struct LagrangeElement{D,Np,T} <: ReferenceInterpolant{D,T}

A polynomial p : D → T uniquely defined by its Np values on the Np reference nodes of D.

The return type T should be a vector space (i.e. support addition and multiplication by scalars). For istance, T could be a number or a vector, but not a Tuple.

source
Inti.LaplaceMethod
Laplace(; dim)

Laplace's differential operator in dim dimension: $-Δu$. ```

Note the negative sign in the definition.

source
Inti.MeshType
struct Mesh{N,T} <: AbstractMesh{N,T}

Unstructured mesh defined by a set of nodes(of typeSVector{N,T}`), and a dictionary mapping element types to connectivity matrices. Each columns of a given connectivity matrix stores the integer tags of the nodes in the mesh comprising the element.

Additionally, the mesh contains a mapping from EntityKeys to the tags of the elements composing the entity. This can be used to extract submeshes from a given mesh using e.g. view(msh,Γ) or msh[Γ], where Γ is a Domain.

See elements for a way to iterate over the elements of a mesh.

source
Inti.MultiIndexType
MultiIndex{N}

Wrapper around NTuple{N,Int} mimicking a multi-index in ℤ₀ᴺ.

source
Inti.ParametricElementType
ParametricElement{D,T,F} <: ReferenceInterpolant{D,T}

An element represented through a explicit function f mapping D into the element. For performance reasons, f should take as input a StaticVector and return a StaticVector or StaticArray.

See also: ReferenceInterpolant, LagrangeElement

source
Inti.PolynomialSpaceType
struct PolynomialSpace{D,K}

The space of all polynomials of degree ≤K, commonly referred to as ℙₖ.

The type parameter D, of singleton type, is used to determine the reference domain of the polynomial basis. In particular, when D is a hypercube in d dimensions, the precise definition is ℙₖ = span{𝐱ᶿ : 0≤max(θ)≤ K}; when D is a d-dimensional simplex, the space is ℙₖ = span{𝐱ᶿ : 0≤sum(θ)≤ K}, where θ ∈ 𝐍ᵈ is a multi-index.

See also: monomial_basis, lagrange_basis

source
Inti.QuadratureMethod
Quadrature(Ω::Domain; meshsize, qorder)

Construct a Quadrature over the domain Ω with a mesh of size meshsize and quadrature order qorder.

source
Inti.QuadratureMethod
Quadrature(msh::AbstractMesh, etype2qrule::Dict)
 Quadrature(msh::AbstractMesh, qrule::ReferenceQuadrature)
-Quadrature(msh::AbstractMesh; qorder)

Construct a Quadrature for msh, where for each element type E in msh the reference quadrature q = etype2qrule[E] is used. When a single qrule is passed, it is used for all element types in msh.

If an order keyword is passed, a default quadrature of the desired order is used for each element type usig _qrule_for_reference_shape.

For co-dimension one elements, the normal vector is also computed and stored in the QuadratureNodes.

source
Inti.QuadratureNodeType
QuadratureNode{N,T<:Real}

A point in ℝᴺ with a weight for performing numerical integration. A QuadratureNode can optionally store a normal vector.

source
Inti.ReferenceCubeType
const ReferenceCube = ReferenceHyperCube{3}

Singleton type representing the unit cube [0,1]³.

source
Inti.ReferenceHyperCubeType
struct ReferenceHyperCube{N} <: ReferenceShape{N}

Singleton type representing the axis-aligned hypercube in N dimensions with the lower corner at the origin and the upper corner at (1,1,…,1).

source
Inti.ReferenceInterpolantType
abstract type ReferenceInterpolant{D,T}

Interpolanting function mapping points on the domain D<:ReferenceShape (of singleton type) to a value of type T.

Instances el of ReferenceInterpolant are expected to implement:

  • el(x̂): evaluate the interpolation scheme at the (reference) coordinate x̂ ∈ D.
  • jacobian(el,x̂) : evaluate the jacobian matrix of the interpolation at the (reference) coordinate x ∈ D.
Note

For performance reasons, both el(x̂) and jacobian(el,x̂) should take as input a StaticVector and output a static vector or static array.

source
Inti.ReferenceLineType
const ReferenceLine = ReferenceHyperCube{1}

Singleton type representing the [0,1] segment.

source
Inti.ReferenceQuadratureType
abstract type ReferenceQuadrature{D}

A quadrature rule for integrating a function over the domain D <: ReferenceShape.

Calling x,w = q() returns the nodes x, given as SVectors, and weights w, for performing integration over domain(q).

source
Inti.ReferenceShapeType
abstract type ReferenceShape

A fixed reference domain/shape. Used mostly for defining more complex shapes as transformations mapping an ReferenceShape to some region of ℜᴹ.

See e.g. ReferenceLine or ReferenceTriangle for some examples of concrete subtypes.

source
Inti.ReferenceSimplexType
struct ReferenceSimplex{N}

Singleton type representing the N-simplex with N+1 vertices (0,...,0),(0,...,0,1),(0,...,0,1,0),(1,0,...,0)

source
Inti.ReferenceSquareType
const ReferenceSquare = ReferenceHyperCube{2}

Singleton type representing the unit square [0,1]².

source
Inti.ReferenceTetrahedronType
struct ReferenceTetrahedron

Singleton type representing the tetrahedron with vertices (0,0,0),(0,0,1),(0,1,0),(1,0,0)

source
Inti.SingleLayerKernelType
struct SingleLayerKernel{T,Op} <: AbstractKernel{T}

The free-space single-layer kernel (i.e. the fundamental solution) of an Op <: AbstractDifferentialOperator.

source
Inti.StokesMethod
Stokes(; μ, dim)

Stokes operator in dim dimensions: $[-μΔu + ∇p, ∇⋅u]$.

source
Inti.SubMeshType
struct SubMesh{N,T} <: AbstractMesh{N,T}

View into a parent mesh over a given domain.

A submesh implements the interface for AbstractMesh; therefore you can iterate over elements of the submesh just like you would with a mesh.

Construct SubMeshs using view(parent,Ω::Domain).

source
Inti.TensorProductQuadratureType
TensorProductQuadrature{N,Q}

A tensor-product of one-dimension quadrature rules. Integrates over [0,1]^N.

Examples

qx = Inti.Fejer(10)
+Quadrature(msh::AbstractMesh; qorder)

Construct a Quadrature for msh, where for each element type E in msh the reference quadrature q = etype2qrule[E] is used. When a single qrule is passed, it is used for all element types in msh.

If an order keyword is passed, a default quadrature of the desired order is used for each element type usig _qrule_for_reference_shape.

For co-dimension one elements, the normal vector is also computed and stored in the QuadratureNodes.

source
Inti.QuadratureNodeType
QuadratureNode{N,T<:Real}

A point in ℝᴺ with a weight for performing numerical integration. A QuadratureNode can optionally store a normal vector.

source
Inti.ReferenceCubeType
const ReferenceCube = ReferenceHyperCube{3}

Singleton type representing the unit cube [0,1]³.

source
Inti.ReferenceHyperCubeType
struct ReferenceHyperCube{N} <: ReferenceShape{N}

Singleton type representing the axis-aligned hypercube in N dimensions with the lower corner at the origin and the upper corner at (1,1,…,1).

source
Inti.ReferenceInterpolantType
abstract type ReferenceInterpolant{D,T}

Interpolanting function mapping points on the domain D<:ReferenceShape (of singleton type) to a value of type T.

Instances el of ReferenceInterpolant are expected to implement:

  • el(x̂): evaluate the interpolation scheme at the (reference) coordinate x̂ ∈ D.
  • jacobian(el,x̂) : evaluate the jacobian matrix of the interpolation at the (reference) coordinate x ∈ D.
Note

For performance reasons, both el(x̂) and jacobian(el,x̂) should take as input a StaticVector and output a static vector or static array.

source
Inti.ReferenceLineType
const ReferenceLine = ReferenceHyperCube{1}

Singleton type representing the [0,1] segment.

source
Inti.ReferenceQuadratureType
abstract type ReferenceQuadrature{D}

A quadrature rule for integrating a function over the domain D <: ReferenceShape.

Calling x,w = q() returns the nodes x, given as SVectors, and weights w, for performing integration over domain(q).

source
Inti.ReferenceShapeType
abstract type ReferenceShape

A fixed reference domain/shape. Used mostly for defining more complex shapes as transformations mapping an ReferenceShape to some region of ℜᴹ.

See e.g. ReferenceLine or ReferenceTriangle for some examples of concrete subtypes.

source
Inti.ReferenceSimplexType
struct ReferenceSimplex{N}

Singleton type representing the N-simplex with N+1 vertices (0,...,0),(0,...,0,1),(0,...,0,1,0),(1,0,...,0)

source
Inti.ReferenceSquareType
const ReferenceSquare = ReferenceHyperCube{2}

Singleton type representing the unit square [0,1]².

source
Inti.ReferenceTetrahedronType
struct ReferenceTetrahedron

Singleton type representing the tetrahedron with vertices (0,0,0),(0,0,1),(0,1,0),(1,0,0)

source
Inti.SingleLayerKernelType
struct SingleLayerKernel{T,Op} <: AbstractKernel{T}

The free-space single-layer kernel (i.e. the fundamental solution) of an Op <: AbstractDifferentialOperator.

source
Inti.StokesMethod
Stokes(; μ, dim)

Stokes operator in dim dimensions: $[-μΔu + ∇p, ∇⋅u]$.

source
Inti.SubMeshType
struct SubMesh{N,T} <: AbstractMesh{N,T}

View into a parent mesh over a given domain.

A submesh implements the interface for AbstractMesh; therefore you can iterate over elements of the submesh just like you would with a mesh.

Construct SubMeshs using view(parent,Ω::Domain).

source
Inti.TensorProductQuadratureType
TensorProductQuadrature{N,Q}

A tensor-product of one-dimension quadrature rules. Integrates over [0,1]^N.

Examples

qx = Inti.Fejer(10)
 qy = Inti.Fejer(15)
-q  = Inti.TensorProductQuadrature(qx,qy)
source
Inti.VioreanuRokhlinType
struct VioreanuRokhlin{D,N} <: ReferenceQuadrature{D}

Tabulated N-point Vioreanu-Rokhlin quadrature rule for integration over D.

source
Inti.YukawaMethod
Yukawa(; λ, dim)

Yukawa operator, also known as modified Helmholtz, in dim dimensions: $-Δu + λ²u$.

The parameter λ is a positive number. Note the negative sign in front of the Laplacian.

source
Base.iterateFunction
iterate(Ω::Domain)

Iterating over a domain means iterating over its entities.

source
Inti._copyto!Method
_copyto!(target,source)

Defaults to Base.copyto!, but includes some specialized methods to copy from a Matrix of SMatrix to a Matrix of Numbers and viceversa.

source
Inti._green_multiplierMethod
_green_multiplier(s::Symbol)

Return -1.0 if s == :inside, 0.0 if s == :outside, and -0.5 if s == :on; otherwise, throw an error. The orientation is relative to the normal of the bounding curve/surface.

source
Inti._green_multiplierMethod
_green_multiplier(x, quad)

Helper function to help determine the constant σ in the Green identity S[γ₁u](x)

  • D[γ₀u](x) + σ*u(x) = 0. This can be used as a predicate to determine whether a

point is inside a domain or not.

source
Inti._meshgenMethod
_meshgen(f,d::HyperRectangle,sz)

Create prod(sz) elements of ParametricElement type representing the push forward of f on each of the subdomains defined by a uniform cartesian mesh of d of size sz.

source
Inti._normalMethod
_normal(jac::SMatrix{M,N})

Given a an M by N matrix representing the jacobian of a codimension one object, compute the normal vector.

source
Inti.acornMethod
acorn(; translation, rotation, scaling, labels)

Create an acorn entity in 3D, and apply optional transformations. Returns the key.

source
Inti.adaptive_correctionMethod
adaptive_correction(iop::IntegralOperator; tol, maxdist = farfield_distance(iop; atol), maxsplit = 1000])

Given an integral operator iop, this function provides a sparse correction to iop for the entries i,j such that the distance between the i-th target and the j-th source is less than maxdist.

Choosing maxdist is a trade-off between accuracy and efficiency. The smaller the value, the fewer corrections are needed, but this may compromise the accuracy. For a fixed quadrature, the size of maxdist has to grow as the tolerance tol decreases. The default [farfield_distance(iop; tol)](@ref) provides a heuristic to determine a suitablemaxdist`.

The correction is computed by using the adaptive_integration routine, with a tolerance atol and a maximum number of subdivisions maxsplit; see adaptive_integration for more details.

source
Inti.adaptive_integrationMethod
adaptive_integration(f, τ̂::RefernceShape; kwargs...)
-adaptive_integration(f, qrule::EmbeddedQuadrature; kwargs...)

Use an adaptive procedure to estimate the integral of f over τ̂ = domain(qrule). The following optional keyword arguments are available:

  • atol::Real=0.0: absolute tolerance for the integral estimate
  • rtol::Real=0.0: relative tolerance for the integral estimate
  • maxsplit::Int=1000: maximum number of times to split the domain
  • norm::Function=LinearAlgebra.norm: norm to use for error estimates
  • buffer::BinaryHeap: a pre-allocated buffer to use for the adaptive procedure (see allocate_buffer)
source
Inti.adaptive_integration_singularMethod
adaptive_integration_singular(f, τ̂, x̂ₛ; kwargs...)

Similar to adaptive_integration, but indicates that f has an isolated (integrable) singularity at x̂ₛ ∈ x̂ₛ.

The integration is performed by splitting τ̂ so that x̂ₛ is a fixed vertex, guaranteeing that f is never evaluated at x̂ₛ. Aditionally, a suitable change of variables may be applied to alleviate the singularity and improve the rate of convergence.

source
Inti.adj_double_layer_hypersingularMethod
adj_double_layer_hypersingular(; op, target, source, compression,
-correction)

Similar to single_double_layer, but for the adjoint double-layer and hypersingular operators. See the documentation of [single_double_layer] for a description of the arguments.

source
Inti.ambient_dimensionFunction
ambient_dimension(x)

Dimension of the ambient space where x lives. For geometrical objects this can differ from its geometric_dimension; for example a triangle in ℝ³ has ambient dimension 3 but geometric dimension 2, while a curve in ℝ³ has ambient dimension 3 but geometric dimension 1.

source
Inti.assemble_fmmMethod
assemble_fmm(iop; atol)

Set up a 2D or 3D FMM for evaluating the discretized integral operator iop associated with the op. In 2D the FMM2D or FMMLIB2D library is used (whichever was most recently loaded) while in 3D FMM3D is used.

FMMLIB2D

FMMLIB2D does no checking for if the targets and sources coincide, and will return Inf values if iop.target !== iop.source, but there is a point x ∈ iop.target such that x ∈ iop.source.

source
Inti.assemble_hmatrixMethod
assemble_hmatrix(iop[; atol, rank, rtol, eta])

Assemble an H-matrix representation of the discretized integral operator iop using the HMatrices.jl library.

See the documentation of HMatrices for more details on usage and other keyword arguments.

source
Inti.assemble_matrixMethod
assemble_matrix(iop::IntegralOperator; threads = true)

Assemble a dense matrix representation of an IntegralOperator.

source
Inti.bdim_correctionMethod
bdim_correction(op,X,Y,S,D; green_multiplier, kwargs...)

Given a op and a (possibly innacurate) discretizations of its single and double-layer operators S and D (taking a vector of values on Y and returning a vector on of values on X), compute corrections δS and δD such that S + δS and D + δD are more accurate approximations of the underlying single- and double-layer integral operators.

See [7] for more details on the method.

Arguments

Required:

  • op must be an AbstractDifferentialOperator
  • Y must be a Quadrature object of a closed surface
  • X is either inside, outside, or on Y
  • S and D are approximations to the single- and double-layer operators for op taking densities in Y and returning densities in X.
  • green_multiplier (keyword argument) is a vector with the same length as X storing the value of μ(x) for x ∈ X in the Green identity S\[γ₁u\](x) - D\[γ₀u\](x) + μ*u(x) = 0. See _green_multiplier.

Optional kwargs:

  • parameters::DimParameters: parameters associated with the density interpolation method
  • derivative: if true, compute the correction to the adjoint double-layer and hypersingular operators instead. In this case, S and D should be replaced by a (possibly innacurate) discretization of adjoint double-layer and hypersingular operators, respectively.
  • maxdist: distance beyond which interactions are considered sufficiently far so that no correction is needed. This is used to determine a threshold for nearly-singular corrections when X and Y are different surfaces. When X === Y, this is not needed.
source
Inti.beanMethod
bean(; translation, rotation, scaling, labels)

Create a bean entity in 3D, and apply optional transformations. Returns the key.

source
Inti.boundary_idxsMethod
boundary_idxs(el::LagrangeElement)

The indices of the nodes in el that define the boundary of the element.

source
Inti.cart2sphMethod
cart2sph(x,y,z)

Map cartesian coordinates x,y,z to spherical ones r, θ, φ representing the radius, elevation, and azimuthal angle respectively. The convention followed is that 0 ≤ θ ≤ π and -π < φ ≤ π. Same as the cart2sph function in MATLAB.

source
Inti.connectivityMethod
connectivity(msh::AbstractMesh,E::DataType)

Return the connectivity matrix for elements of type E in msh. The integer tags in the matrix refer to the points in nodes(msh)

source
Inti.cushionMethod
cushion(; translation, rotation, scaling, labels)

Create a cushion entity in 3D, and apply optional transformations. Returns the key.

source
Inti.decomposeFunction
decompose(s::ReferenceShape,x)

Decompose an ReferenceShape into LagrangeElements so that x is a fixed vertex of the children elements.

The decomposed elements may be oriented differently than the parent, and thus care has to be taken regarding e.g. normal vectors.

source
Inti.degreeMethod
degree(el::LagrangeElement)
-degree(el::Type{<:LagrangeElement})

The polynomial degree el.

source
Inti.dimensionMethod
dimension(space)

The length of a basis for space; i.e. the number of linearly independent elements required to span space.

source
Inti.dom2eltMethod
dom2elt(m::Mesh,Ω,E)::Vector{Int}

Compute the element indices idxs of the elements of type E composing Ω.

source
Inti.dom2qtagsMethod
dom2qtags(Q::Quadrature, dom::Domain)

Given a domain, return the indices of the quadratures nodes in Q associated to its quadrature.

source
Inti.domainFunction
domain(f)

Given a function-like object f: Ω → R, return Ω.

source
Inti.domainMethod
domain(msh::AbstractMesh)

Return a [Domain] containing of all entities covered by the mesh.

source
Inti.domainMethod
domain(q::ReferenceQuadrature)

The domain of integratino for quadrature rule q.

source
Inti.elementsFunction
elements(msh::AbstractMesh [, E::DataType])

Return the elements of a msh. Passing and element type E will restricts to elements of that type.

A common pattern to avoid type-instabilies in performance critical parts of the code is to use a function barrier, as illustrated below:

for E in element_types(msh)
+q  = Inti.TensorProductQuadrature(qx,qy)
source
Inti.VioreanuRokhlinType
struct VioreanuRokhlin{D,N} <: ReferenceQuadrature{D}

Tabulated N-point Vioreanu-Rokhlin quadrature rule for integration over D.

source
Inti.YukawaMethod
Yukawa(; λ, dim)

Yukawa operator, also known as modified Helmholtz, in dim dimensions: $-Δu + λ²u$.

The parameter λ is a positive number. Note the negative sign in front of the Laplacian.

source
Base.iterateFunction
iterate(Ω::Domain)

Iterating over a domain means iterating over its entities.

source
Inti._copyto!Method
_copyto!(target,source)

Defaults to Base.copyto!, but includes some specialized methods to copy from a Matrix of SMatrix to a Matrix of Numbers and viceversa.

source
Inti._green_multiplierMethod
_green_multiplier(s::Symbol)

Return -1.0 if s == :inside, 0.0 if s == :outside, and -0.5 if s == :on; otherwise, throw an error. The orientation is relative to the normal of the bounding curve/surface.

source
Inti._green_multiplierMethod
_green_multiplier(x, quad)

Helper function to help determine the constant σ in the Green identity S[γ₁u](x)

  • D[γ₀u](x) + σ*u(x) = 0. This can be used as a predicate to determine whether a

point is inside a domain or not.

source
Inti._meshgenMethod
_meshgen(f,d::HyperRectangle,sz)

Create prod(sz) elements of ParametricElement type representing the push forward of f on each of the subdomains defined by a uniform cartesian mesh of d of size sz.

source
Inti._normalMethod
_normal(jac::SMatrix{M,N})

Given a an M by N matrix representing the jacobian of a codimension one object, compute the normal vector.

source
Inti.acornMethod
acorn(; translation, rotation, scaling, labels)

Create an acorn entity in 3D, and apply optional transformations. Returns the key.

source
Inti.adaptive_correctionMethod
adaptive_correction(iop::IntegralOperator; tol, maxdist = farfield_distance(iop; atol), maxsplit = 1000])

Given an integral operator iop, this function provides a sparse correction to iop for the entries i,j such that the distance between the i-th target and the j-th source is less than maxdist.

Choosing maxdist is a trade-off between accuracy and efficiency. The smaller the value, the fewer corrections are needed, but this may compromise the accuracy. For a fixed quadrature, the size of maxdist has to grow as the tolerance tol decreases. The default [farfield_distance(iop; tol)](@ref) provides a heuristic to determine a suitablemaxdist`.

The correction is computed by using the adaptive_integration routine, with a tolerance atol and a maximum number of subdivisions maxsplit; see adaptive_integration for more details.

source
Inti.adaptive_integrationMethod
adaptive_integration(f, τ̂::RefernceShape; kwargs...)
+adaptive_integration(f, qrule::EmbeddedQuadrature; kwargs...)

Use an adaptive procedure to estimate the integral of f over τ̂ = domain(qrule). The following optional keyword arguments are available:

  • atol::Real=0.0: absolute tolerance for the integral estimate
  • rtol::Real=0.0: relative tolerance for the integral estimate
  • maxsplit::Int=1000: maximum number of times to split the domain
  • norm::Function=LinearAlgebra.norm: norm to use for error estimates
  • buffer::BinaryHeap: a pre-allocated buffer to use for the adaptive procedure (see allocate_buffer)
source
Inti.adaptive_integration_singularMethod
adaptive_integration_singular(f, τ̂, x̂ₛ; kwargs...)

Similar to adaptive_integration, but indicates that f has an isolated (integrable) singularity at x̂ₛ ∈ x̂ₛ.

The integration is performed by splitting τ̂ so that x̂ₛ is a fixed vertex, guaranteeing that f is never evaluated at x̂ₛ. Aditionally, a suitable change of variables may be applied to alleviate the singularity and improve the rate of convergence.

source
Inti.adj_double_layer_hypersingularMethod
adj_double_layer_hypersingular(; op, target, source, compression,
+correction)

Similar to single_double_layer, but for the adjoint double-layer and hypersingular operators. See the documentation of [single_double_layer] for a description of the arguments.

source
Inti.ambient_dimensionFunction
ambient_dimension(x)

Dimension of the ambient space where x lives. For geometrical objects this can differ from its geometric_dimension; for example a triangle in ℝ³ has ambient dimension 3 but geometric dimension 2, while a curve in ℝ³ has ambient dimension 3 but geometric dimension 1.

source
Inti.assemble_fmmMethod
assemble_fmm(iop; atol)

Set up a 2D or 3D FMM for evaluating the discretized integral operator iop associated with the op. In 2D the FMM2D or FMMLIB2D library is used (whichever was most recently loaded) while in 3D FMM3D is used.

FMMLIB2D

FMMLIB2D does no checking for if the targets and sources coincide, and will return Inf values if iop.target !== iop.source, but there is a point x ∈ iop.target such that x ∈ iop.source.

source
Inti.assemble_hmatrixMethod
assemble_hmatrix(iop[; atol, rank, rtol, eta])

Assemble an H-matrix representation of the discretized integral operator iop using the HMatrices.jl library.

See the documentation of HMatrices for more details on usage and other keyword arguments.

source
Inti.assemble_matrixMethod
assemble_matrix(iop::IntegralOperator; threads = true)

Assemble a dense matrix representation of an IntegralOperator.

source
Inti.bdim_correctionMethod
bdim_correction(op,X,Y,S,D; green_multiplier, kwargs...)

Given a op and a (possibly innacurate) discretizations of its single and double-layer operators S and D (taking a vector of values on Y and returning a vector on of values on X), compute corrections δS and δD such that S + δS and D + δD are more accurate approximations of the underlying single- and double-layer integral operators.

See [7] for more details on the method.

Arguments

Required:

  • op must be an AbstractDifferentialOperator
  • Y must be a Quadrature object of a closed surface
  • X is either inside, outside, or on Y
  • S and D are approximations to the single- and double-layer operators for op taking densities in Y and returning densities in X.
  • green_multiplier (keyword argument) is a vector with the same length as X storing the value of μ(x) for x ∈ X in the Green identity S\[γ₁u\](x) - D\[γ₀u\](x) + μ*u(x) = 0. See _green_multiplier.

Optional kwargs:

  • parameters::DimParameters: parameters associated with the density interpolation method
  • derivative: if true, compute the correction to the adjoint double-layer and hypersingular operators instead. In this case, S and D should be replaced by a (possibly innacurate) discretization of adjoint double-layer and hypersingular operators, respectively.
  • maxdist: distance beyond which interactions are considered sufficiently far so that no correction is needed. This is used to determine a threshold for nearly-singular corrections when X and Y are different surfaces. When X === Y, this is not needed.
source
Inti.beanMethod
bean(; translation, rotation, scaling, labels)

Create a bean entity in 3D, and apply optional transformations. Returns the key.

source
Inti.boundary_idxsMethod
boundary_idxs(el::LagrangeElement)

The indices of the nodes in el that define the boundary of the element.

source
Inti.cart2sphMethod
cart2sph(x,y,z)

Map cartesian coordinates x,y,z to spherical ones r, θ, φ representing the radius, elevation, and azimuthal angle respectively. The convention followed is that 0 ≤ θ ≤ π and -π < φ ≤ π. Same as the cart2sph function in MATLAB.

source
Inti.connectivityMethod
connectivity(msh::AbstractMesh,E::DataType)

Return the connectivity matrix for elements of type E in msh. The integer tags in the matrix refer to the points in nodes(msh)

source
Inti.cushionMethod
cushion(; translation, rotation, scaling, labels)

Create a cushion entity in 3D, and apply optional transformations. Returns the key.

source
Inti.decomposeFunction
decompose(s::ReferenceShape,x)

Decompose an ReferenceShape into LagrangeElements so that x is a fixed vertex of the children elements.

The decomposed elements may be oriented differently than the parent, and thus care has to be taken regarding e.g. normal vectors.

source
Inti.degreeMethod
degree(el::LagrangeElement)
+degree(el::Type{<:LagrangeElement})

The polynomial degree el.

source
Inti.dimensionMethod
dimension(space)

The length of a basis for space; i.e. the number of linearly independent elements required to span space.

source
Inti.dom2eltMethod
dom2elt(m::Mesh,Ω,E)::Vector{Int}

Compute the element indices idxs of the elements of type E composing Ω.

source
Inti.dom2qtagsMethod
dom2qtags(Q::Quadrature, dom::Domain)

Given a domain, return the indices of the quadratures nodes in Q associated to its quadrature.

source
Inti.domainFunction
domain(f)

Given a function-like object f: Ω → R, return Ω.

source
Inti.domainMethod
domain(msh::AbstractMesh)

Return a [Domain] containing of all entities covered by the mesh.

source
Inti.domainMethod
domain(q::ReferenceQuadrature)

The domain of integratino for quadrature rule q.

source
Inti.elementsFunction
elements(msh::AbstractMesh [, E::DataType])

Return the elements of a msh. Passing and element type E will restricts to elements of that type.

A common pattern to avoid type-instabilies in performance critical parts of the code is to use a function barrier, as illustrated below:

for E in element_types(msh)
     _long_computation(elements(msh, E), args...)
 end
 
@@ -39,11 +39,11 @@
     for el in iter # the type of el is known at compile time
         # do something with el
     end
-end

where a dynamic dispatch is performed only on the element types (typically small for a given mesh).

source
Inti.ellipsoidMethod
ellipsoid(; translation, rotation, scaling, labels)

Create an ellipsoid entity in 3D, and apply optional transformations. Returns the key of the created entity.

source
Inti.ent2etagsMethod
ent2etags(msh::AbstractMesh)

Return a dictionary mapping entities to a dictionary of element types to element tags.

source
Inti.etype_to_nearest_pointsMethod
etype_to_nearest_points(X,Y::Quadrature; maxdist)

For each element el in Y.mesh, return a list with the indices of all points in X for which el is the nearest element. Ignore indices for which the distance exceeds maxdist.

source
Inti.farfield_distanceMethod
farfield_distance(iop::IntegralOperator; tol, maxiter = 10)
-farfield_distance(K, Q::Quadrature; tol, maxiter = 10)

Return an estimate of the distance d such that the (absolute) quadrature error of the integrand y -> K(x,y) is below tol for x at a distance d from the center of the largest element in Q; when an integral operator is passed, we have Q::Quadrature = source(iop) and K = kernel(iop).

The estimate is computed by finding the first integer n such that the quadrature error on the largest element τ lies below tol for points x satisfying dist(x,center(τ)) = n*radius(τ).

Note that the desired tolerance may not be achievable if the quadrature rule is not accurate enough, or if τ is not sufficiently small, and therefore a maximum number of iterations maxiter is provided to avoid an infinite loops. In such cases, it is recommended that you either increase the quadrature order, or decrease the mesh size.

Note: this is obviously a heuristic, and may not be accurate in all cases.

source
Inti.fibonnaci_points_sphereMethod
fibonnaci_points_sphere(N,r,c)

Return N points distributed (roughly) in a uniform manner on the sphere of radius r centered at c.

source
Inti.flip_normalMethod
flip_normal(q::QuadratureNode)

Return a new QuadratureNode with the normal vector flipped.

source
Inti.geometric_dimensionFunction
geometric_dimension(x)

NNumber of degrees of freedom necessary to locally represent the geometrical object. For example, lines have geometric dimension of 1 (whether in ℝ² or in ℝ³), while surfaces have geometric dimension of 2.

source
Inti.gmsh_curveMethod
gmsh_curve(f::Function, a, b; npts=100, meshsize = 0, tag=-1)

Create a curve in the current gmsh model given by {f(t) : t ∈ (a,b) } where f is a function from to ℝ^3. The curve is approximated by C² b-splines passing through npts equispaced in parameter space. If a meshsize is given, gmsh will use it when meshing the curve.

source
Inti.hessianMethod
hesssian(el,x)

Given a (possibly vector-valued) functor f : 𝐑ᵐ → 𝐅ⁿ, return the n × m × m matrix Aᵢⱼⱼ = ∂²fᵢ/∂xⱼ∂xⱼ. By default ForwardDiff is used to compute the hessian, but you should overload this method for specific f if better performance and/or precision is required.

Note: both x and f(x) are expected to be of SVector type.

source
Inti.imageFunction
image(f)

Given a function-like object f: Ω → R, return f(Ω).

source
Inti.import_meshMethod
import_mesh(filename = nothing; dim=3)

Open filename and create a Mesh from the gmsh model in it.

If filename is nothing, the current gmsh model is used. Note that this assumes that the Gmsh API has been initialized through gmsh.initialize.

Passing dim=2 will create a two-dimensional mesh by projecting the original mesh onto the x,y plane.

source
Inti.integrateMethod
integrate(f,quad::Quadrature)

Compute ∑ᵢ f(qᵢ)wᵢ, where the qᵢ are the quadrature nodes of quad, and wᵢ are the quadrature weights.

Note that you must define f(::QuadratureNode): use q.coords and q.normal if you need to access the coordinate or normal vector at que quadrature node.

source
Inti.integrateMethod
integrate(f,q::ReferenceQuadrature)
-integrate(f,x,w)

Integrate the function f using the quadrature rule q. This is simply sum(f.(x) .* w), where x and w are the quadrature nodes and weights, respectively.

The function f should take an SVector as input.

source
Inti.integrate_with_error_estimateFunction
integrate_with_error_estimate(f, quad::EmbeddedQuadrature, norm = LinearAlgebra.norm)

Return I, E where I is the estimated integral of f over domain(quad) using the high-order quadrature and E is the error estimate obtained by taking the norm of the difference between the high and low-order quadratures in quad.

source
Inti.integration_measureMethod
integration_measure(f, x̂)

Given the Jacobian matrix J of a transformation f : ℝᴹ → ℝᴺ compute the integration measure √det(JᵀJ) at the parametric coordinate

source
Inti.interface_methodMethod
interface_method(x)

A method of an abstract type for which concrete subtypes are expected to provide an implementation.

source
Inti.internal_boundaryMethod
internal_boundary(Ω::Domain)

Return the internal boundaries of a Domain. These are entities in skeleton(Ω) which appear at least twice as a boundary of entities in Ω.

source
Inti.interpolation_orderMethod
interpolation_order(qrule::ReferenceQuadrature)

The interpolation order of a quadrature rule is defined as the the smallest k such that there exists a unique polynomial in PolynomialSpace{D,k} that minimizes the error in approximating the function f at the quadrature nodes.

For an N-point Gauss quadrature rule on the segment, the interpolation order is N-1 since N points uniquely determine a polynomial of degree N-1.

For a triangular reference domain, the interpolation order is more difficult to define. An unisolvent three-node quadrature on the triangular, for example, has an interpolation order k=1 since the three nodes uniquely determine a linear polynomial, but a four-node quadrature may also have an interpolation order k=1 since for k=2 there are multiple polynomials that pass through the four nodes.

source
Inti.jacobianMethod
jacobian(f,x)

Given a (possibly vector-valued) functor f : 𝐑ᵐ → 𝐅ⁿ, return the n × m matrix Aᵢⱼ = ∂fᵢ/∂xⱼ. By default ForwardDiff is used to compute the jacobian, but you should overload this method for specific f if better performance and/or precision is required.

Note: both x and f(x) are expected to be of SVector type.

source
Inti.kress_change_of_variablesMethod
kress_change_of_variables(P)

Return a change of variables mapping [0,1] to [0,1] with the property that the first P-1 derivatives of the transformation vanish at x=0.

source
Inti.kress_change_of_variables_periodicMethod
kress_change_of_variables_periodic(P)

Like kress_change_of_variables, this change of variables maps the interval [0,1] onto itself, but the first P derivatives of the transformation vanish at both endpoints (thus making it a periodic function).

This change of variables can be used to periodize integrals over the interval [0,1] by mapping the integrand into a new integrand that vanishes (to order P) at both endpoints.

source
Inti.lagrange_basisMethod
lagrange_basis(nodes,[sp::AbstractPolynomialSpace])

Return the set of n polynomials in sp taking the value of 1 on node i and 0 on nodes j ≂̸ i for 1 ≤ i ≤ n.

source
Inti.lagrange_basisMethod
lagrange_basis(qrule::ReferenceQuadrature)

Return a function L : ℝᴺ → ℝᵖ where N is the dimension of the domain of qrule, and p is the number of nodes in qrule. The function L is a polynomial in polynomial_space(qrule), and L(xⱼ)[i] = δᵢⱼ (i.e. the ith component of L is the ith Lagrange basis).

source
Inti.lagrange_basisMethod
lagrange_basis(E::Type{<:LagrangeElement})

Return the Lagrange basis B for the element E. Evaluating B(x) yields the value of each basis function at x.

source
Inti.lineMethod
line(a,b)

Create a [GeometricEntity] representing a straight line connecting points a and b. The points a and b can be either SVectors or a Tuple.

The parametrization of the line is given by f(u) = a + u(b - a), where 0 ≤ u ≤ 1.

source
Inti.measureFunction
measure(k::EntityKey, rtol)

Compute the length/area/volume of the entity k using an adaptive quadrature with a relative tolerance rtol. Assumes that the entity has an explicit parametrization.

source
Inti.meshgenFunction
meshgen(Ω, n)
-meshgen(Ω, n_dict)
-meshgen(Ω; meshsize)

Generate a Mesh for the domain Ω where each curve is meshed using n elements. Passing a dictionary allows for a finer control; in such cases, n_dict[ent] should return an integer for each entity ent in Ω of geometric_dimension one.

Alternatively, a meshsize can be passed, in which case, the number of elements is computed as so as to obtain an average mesh size of meshsize. Note that the actual mesh size may vary significantly for each element if the parametrization is far from uniform.

This function requires the entities forming Ω to have an explicit parametrization.

Mesh quality

The quality of the generated mesh created using meshgen depends on the quality of the underlying parametrization. For complex surfaces, you are better off using a proper mesher such as gmsh.

source
Inti.monomial_basisFunction
monomial_basis(sp::PolynomialSpace)

Return a function f : ℝᴺ → ℝᵈ, where N is the dimension of the domain of sp containing a basis of monomials 𝐱ᶿ spanning the polynomial space PolynomialSpace.

source
Inti.near_interaction_listMethod
near_interaction_list(X,Y::AbstractMesh; tol)

For each element el of type E in Y, return the indices of the points in X which are closer than tol to the center of el.

This function returns a dictionary where e.g. dict[E][5] --> Vector{Int} gives the indices of points in X which are closer than tol to the center of the fifth element of type E.

If tol is a Dict, then tol[E] is the tolerance for elements of type E.

source
Inti.new_tagMethod
new_tag(dim)

Return a new tag for an entity of dimension dim so that EntityKey(dim, tag) is not already in ENTITIES.

source
Inti.nodesMethod
nodes(msh::SubMesh)

A view of the nodes of the parent mesh belonging to the submesh. The ordering is given by the nodetags function.

source
Inti.nodetagsMethod
nodetags(msh::SubMesh)

Return the tags of the nodes in the parent mesh belonging to the submesh.

source
Inti.normalMethod
normal(el, x̂)

Return the normal vector of el at the parametric coordinate .

source
Inti.orderMethod
order(q::ReferenceQuadrature)

A quadrature of order p (sometimes called degree of precision) integrates all polynomials of degree ≤ p but not ≤ p + 1.

source
Inti.orderMethod
order(el::LagrangeElement)

The order of the element's interpolating polynomial (e.g. a LagrangeLine with 2 nodes defines a linear polynomial, and thus has order 1).

source
Inti.parametric_curveMethod
parametric_curve(f, a::Real, b::Real)

Create a [GeometricEntity] representing a parametric curve defined by the {f(t) | a ≤ t ≤ b}. The function f should map a scalar to an SVector.

Flipping the orientation is supported by passing a > b.

source
Inti.parametric_surfaceFunction
    parametric_surface(f, lc, hc, boundary = nothing; kwargs...)

Create a parametric surface defined by the function f over the rectangular domain defined by the lower corner lc and the upper corner hc. The optional boundary argument can be used to specify the boundary curves of the surface.

Arguments

  • f: A function that takes two arguments x and y and returns a tuple (u, v) representing the parametric coordinates of the surface at (x, y).
  • lc: A 2-element array representing the lower corner of the rectangular domain.
  • hc: A 2-element array representing the upper corner of the rectangular domain.
  • boundary: An optional array of boundary curves that define the surface.

Keyword Arguments

  • kwargs: Additional keyword arguments that can be passed to the GeometricEntity constructor.

Returns

  • The key of the created GeometricEntity.
source
Inti.polynomial_solutions_vdimFunction
polynomial_solutions_vdim(op, order[, center])

For every monomial term pₙ of degree order, compute a polynomial Pₙ such that ℒ[Pₙ] = pₙ, where is the differential operator associated with op. This function returns {pₙ,Pₙ,γ₁Pₙ}, where γ₁Pₙ is the generalized Neumann trace of Pₙ.

Passing a point center will shift the monomials and solutions accordingly.

source
Inti.qcoordsMethod
qcoords(q)

Return the coordinate of the quadrature nodes associated with q.

source
Inti.quadrature_to_node_valsMethod
quadrature_to_node_vals(Q::Quadrature, qvals::AbstractVector)

Given a vector qvals of scalar values at the quadrature nodes of Q, return a vector ivals of scalar values at the interpolation nodes of Q.mesh.

source
Inti.reference_nodesMethod
reference_nodes(el::LagrangeElement)
-reference_nodes(::Type{<:LagrangeElement})

Return the reference nodes on domain(el) used for the polynomial interpolation. The function values on these nodes completely determines the interpolating polynomial.

We use the same convention as gmsh for defining the reference nodes and their order (see node ordering on gmsh documentation).

source
Inti.return_typeMethod
return_type(f[,args...])

The type returned by f(args...), where args is a tuple of types. Falls back to Base.promote_op by default.

A functors of type T with a knonw return type should extend return_type(::T,args...) to avoid relying on promote_op.

source
Inti.rotation_matrixMethod
rotation_matrix(rot)

Constructs a rotation matrix given the rotation angles around the x, y, and z axes.

Arguments

  • rot: A tuple or vector containing the rotation angles in radians for each axis.

Returns

  • R::SMatrix: The resulting rotation matrix.
source
Inti.single_double_layerMethod
single_double_layer(; op, target, source::Quadrature, compression,
-correction, derivative = false)

Construct a discrete approximation to the single- and double-layer integral operators for op, mapping values defined on the quadrature nodes of source to values defined on the nodes of target. If derivative = true, return instead the adjoint double-layer and hypersingular operators (which are the derivative of the single- and double-layer, respectively).

You must choose a compression method and a correction method, as described below.

Compression

The compression argument is a named tuple with a method field followed by method-specific fields. It specifies how the dense linear operators should be compressed. The available options are:

  • (method = :none, ): no compression is performed, the resulting matrices are dense.
  • (method =:hmatrix, tol): the resulting operators are compressed using hierarchical matrices with an absolute tolerance tol (defaults to 1e-8).
  • (method = :fmm, tol): the resulting operators are compressed using the fast multipole method with an absolute tolerance tol (defaults to 1e-8).

Correction

The correction argument is a named tuple with a method field followed by method-specific fields. It specifies how the singular and nearly-singular integrals should be computed. The available options are:

  • (method = :none, ): no correction is performed. This is not recommented, as the resulting approximation will be inaccurate if the source and target are not sufficiently far apart.
  • (method = :dim, maxdist, target_location): use the density interpolation method to compute the correction. maxdist specifies the distance between source and target points above which no correction is performed (defaults to Inf). target_location should be either :inside, :outside, or :on, and specifies where the targetpoints lie relative to the to thesourcecurve/surface (which is assumed to be closed). Whentarget === source,target_location` is not needed.
source
Inti.skeletonMethod
skeleton(Ω::Domain)

Return all the boundaries of the domain, i.e. the domain's skeleton.

source
Inti.stack_weakdeps_env!Method
stack_weakdeps_env!(; verbose = false, update = false)

Push to the load stack an environment providing the weak dependencies of Inti.jl. This allows benefiting from additional functionalities of Inti.jl which are powered by weak dependencies without having to manually install them in your environment.

Set update=true if you want to update the weakdeps environment.

Warning

Calling this function can take quite some time, especially the first time around, if packages have to be installed or precompiled. Run in verbose mode to see what is happening.

Examples:

Inti.stack_weakdeps_env!()
-using HMatrices
source
Inti.svectorMethod
svector(f,n)

Create an SVector of length n, computing each element as f(i), where i is the index of the element.

source
Inti.torusMethod
torus(; r, R, translation, rotation, scaling, labels)

Create a torus entity in 3D, and apply optional transformations. Returns the key. The parameters r and R are the inner and outer radii of the torus.

source
Inti.vdim_correctionMethod
vdim_correction(op,X,Y,Y_boundary,S,D,V; green_multiplier, kwargs...)

Compute a correction to the volume potential V : Y → X such that V + δV is a more accurate approximation of the underlying volume potential operator. The correction is computed using the (volume) density interpolation method.

This function requires a op::AbstractDifferentialOperator, a target set X, a source quadrature Y, a boundary quadrature Y_boundary, approximations S : Y_boundary -> X and D : Y_boundary -> X to the single- and double-layer potentials (correctly handling nearly-singular integrals), and a naive approximation of the volume potential V. The green_multiplier is a vector of the same length as X storing the value of μ(x) for x ∈ X in the Green identity (see _green_multiplier).

See [8] for more details on the method.

Optional kwargs:

  • interpolation_order: the order of the polynomial interpolation. By default, the maximum order of the quadrature rules is used.
  • maxdist: distance beyond which interactions are considered sufficiently far so that no correction is needed. This is used to determine a threshold for nearly-singular corrections.
  • center: the center of the basis functions. By default, the basis functions are centered at the origin.
  • shift: a boolean indicating whether the basis functions should be shifted and rescaled to each element.
source
Inti.vdim_mesh_centerMethod
vdim_mesh_center(msh)

Point x which minimizes ∑ (x-xⱼ)²/r²ⱼ, where xⱼ and rⱼ are the circumcenter and circumradius of the elements of msh, respectively.

source
Inti.vertices_idxsMethod
vertices_idxs(el::LagrangeElement)

The indices of the nodes in el that define the vertices of the element.

source
Inti.volume_potentialMethod
volume_potential(; op, target, source::Quadrature, compression, correction)

Compute the volume potential operator for a given PDE.

Arguments

  • op: The PDE (Partial Differential Equation) to solve.
  • target: The target domain where the potential is computed.
  • source: The source domain where the potential is generated.
  • compression: The compression method to use for the potential operator.
  • correction: The correction method to use for the potential operator.

Returns

The volume potential operator V that represents the interaction between the target and source domains.

Compression

The compression argument is a named tuple with a method field followed by method-specific fields. It specifies how the dense linear operators should be compressed. The available options are:

  • (method = :none, ): no compression is performed, the resulting matrices are dense.
  • (method =:hmatrix, tol): the resulting operators are compressed using hierarchical matrices with an absolute tolerance tol (defaults to 1e-8).
  • (method = :fmm, tol): the resulting operators are compressed using the fast multipole method with an absolute tolerance tol (defaults to 1e-8).

Correction

The correction argument is a named tuple with a method field followed by method-specific fields. It specifies how the singular and nearly-singular integrals should be computed. The available options are:

  • (method = :none, ): no correction is performed. This is not recommented, as the resulting approximation will be inaccurate if the source and target are not sufficiently far apart.
  • (method = :dim, maxdist, target_location): use the density interpolation method to compute the correction. maxdist specifies the distance between source and target points above which no correction is performed (defaults to Inf). target_location should be either :inside, :outside, or :on, and specifies where the targetpoints lie relative to the to thesource's boundary. Whentarget === source,target_location` is not needed.

Details

The volume potential operator is computed by assembling the integral operator V using the single-layer kernel G. The operator V is then compressed using the specified compression method. If no compression is specified, the operator is returned as is. If a correction method is specified, the correction is computed and added to the compressed operator.

source
+end

where a dynamic dispatch is performed only on the element types (typically small for a given mesh).

source
Inti.ellipsoidMethod
ellipsoid(; translation, rotation, scaling, labels)

Create an ellipsoid entity in 3D, and apply optional transformations. Returns the key of the created entity.

source
Inti.ent2etagsMethod
ent2etags(msh::AbstractMesh)

Return a dictionary mapping entities to a dictionary of element types to element tags.

source
Inti.etype_to_nearest_pointsMethod
etype_to_nearest_points(X,Y::Quadrature; maxdist)

For each element el in Y.mesh, return a list with the indices of all points in X for which el is the nearest element. Ignore indices for which the distance exceeds maxdist.

source
Inti.farfield_distanceMethod
farfield_distance(iop::IntegralOperator; tol, maxiter = 10)
+farfield_distance(K, Q::Quadrature; tol, maxiter = 10)

Return an estimate of the distance d such that the (absolute) quadrature error of the integrand y -> K(x,y) is below tol for x at a distance d from the center of the largest element in Q; when an integral operator is passed, we have Q::Quadrature = source(iop) and K = kernel(iop).

The estimate is computed by finding the first integer n such that the quadrature error on the largest element τ lies below tol for points x satisfying dist(x,center(τ)) = n*radius(τ).

Note that the desired tolerance may not be achievable if the quadrature rule is not accurate enough, or if τ is not sufficiently small, and therefore a maximum number of iterations maxiter is provided to avoid an infinite loops. In such cases, it is recommended that you either increase the quadrature order, or decrease the mesh size.

Note: this is obviously a heuristic, and may not be accurate in all cases.

source
Inti.fibonnaci_points_sphereMethod
fibonnaci_points_sphere(N,r,c)

Return N points distributed (roughly) in a uniform manner on the sphere of radius r centered at c.

source
Inti.flip_normalMethod
flip_normal(q::QuadratureNode)

Return a new QuadratureNode with the normal vector flipped.

source
Inti.geometric_dimensionFunction
geometric_dimension(x)

NNumber of degrees of freedom necessary to locally represent the geometrical object. For example, lines have geometric dimension of 1 (whether in ℝ² or in ℝ³), while surfaces have geometric dimension of 2.

source
Inti.gmsh_curveMethod
gmsh_curve(f::Function, a, b; npts=100, meshsize = 0, tag=-1)

Create a curve in the current gmsh model given by {f(t) : t ∈ (a,b) } where f is a function from to ℝ^3. The curve is approximated by C² b-splines passing through npts equispaced in parameter space. If a meshsize is given, gmsh will use it when meshing the curve.

source
Inti.hessianMethod
hesssian(el,x)

Given a (possibly vector-valued) functor f : 𝐑ᵐ → 𝐅ⁿ, return the n × m × m matrix Aᵢⱼⱼ = ∂²fᵢ/∂xⱼ∂xⱼ. By default ForwardDiff is used to compute the hessian, but you should overload this method for specific f if better performance and/or precision is required.

Note: both x and f(x) are expected to be of SVector type.

source
Inti.imageFunction
image(f)

Given a function-like object f: Ω → R, return f(Ω).

source
Inti.import_meshMethod
import_mesh(filename = nothing; dim=3)

Open filename and create a Mesh from the gmsh model in it.

If filename is nothing, the current gmsh model is used. Note that this assumes that the Gmsh API has been initialized through gmsh.initialize.

Passing dim=2 will create a two-dimensional mesh by projecting the original mesh onto the x,y plane.

source
Inti.integrateMethod
integrate(f,quad::Quadrature)

Compute ∑ᵢ f(qᵢ)wᵢ, where the qᵢ are the quadrature nodes of quad, and wᵢ are the quadrature weights.

Note that you must define f(::QuadratureNode): use q.coords and q.normal if you need to access the coordinate or normal vector at que quadrature node.

source
Inti.integrateMethod
integrate(f,q::ReferenceQuadrature)
+integrate(f,x,w)

Integrate the function f using the quadrature rule q. This is simply sum(f.(x) .* w), where x and w are the quadrature nodes and weights, respectively.

The function f should take an SVector as input.

source
Inti.integrate_with_error_estimateFunction
integrate_with_error_estimate(f, quad::EmbeddedQuadrature, norm = LinearAlgebra.norm)

Return I, E where I is the estimated integral of f over domain(quad) using the high-order quadrature and E is the error estimate obtained by taking the norm of the difference between the high and low-order quadratures in quad.

source
Inti.integration_measureMethod
integration_measure(f, x̂)

Given the Jacobian matrix J of a transformation f : ℝᴹ → ℝᴺ compute the integration measure √det(JᵀJ) at the parametric coordinate

source
Inti.interface_methodMethod
interface_method(x)

A method of an abstract type for which concrete subtypes are expected to provide an implementation.

source
Inti.internal_boundaryMethod
internal_boundary(Ω::Domain)

Return the internal boundaries of a Domain. These are entities in skeleton(Ω) which appear at least twice as a boundary of entities in Ω.

source
Inti.interpolation_orderMethod
interpolation_order(qrule::ReferenceQuadrature)

The interpolation order of a quadrature rule is defined as the the smallest k such that there exists a unique polynomial in PolynomialSpace{D,k} that minimizes the error in approximating the function f at the quadrature nodes.

For an N-point Gauss quadrature rule on the segment, the interpolation order is N-1 since N points uniquely determine a polynomial of degree N-1.

For a triangular reference domain, the interpolation order is more difficult to define. An unisolvent three-node quadrature on the triangular, for example, has an interpolation order k=1 since the three nodes uniquely determine a linear polynomial, but a four-node quadrature may also have an interpolation order k=1 since for k=2 there are multiple polynomials that pass through the four nodes.

source
Inti.jacobianMethod
jacobian(f,x)

Given a (possibly vector-valued) functor f : 𝐑ᵐ → 𝐅ⁿ, return the n × m matrix Aᵢⱼ = ∂fᵢ/∂xⱼ. By default ForwardDiff is used to compute the jacobian, but you should overload this method for specific f if better performance and/or precision is required.

Note: both x and f(x) are expected to be of SVector type.

source
Inti.kress_change_of_variablesMethod
kress_change_of_variables(P)

Return a change of variables mapping [0,1] to [0,1] with the property that the first P-1 derivatives of the transformation vanish at x=0.

source
Inti.kress_change_of_variables_periodicMethod
kress_change_of_variables_periodic(P)

Like kress_change_of_variables, this change of variables maps the interval [0,1] onto itself, but the first P derivatives of the transformation vanish at both endpoints (thus making it a periodic function).

This change of variables can be used to periodize integrals over the interval [0,1] by mapping the integrand into a new integrand that vanishes (to order P) at both endpoints.

source
Inti.lagrange_basisMethod
lagrange_basis(nodes,[sp::AbstractPolynomialSpace])

Return the set of n polynomials in sp taking the value of 1 on node i and 0 on nodes j ≂̸ i for 1 ≤ i ≤ n.

source
Inti.lagrange_basisMethod
lagrange_basis(qrule::ReferenceQuadrature)

Return a function L : ℝᴺ → ℝᵖ where N is the dimension of the domain of qrule, and p is the number of nodes in qrule. The function L is a polynomial in polynomial_space(qrule), and L(xⱼ)[i] = δᵢⱼ (i.e. the ith component of L is the ith Lagrange basis).

source
Inti.lagrange_basisMethod
lagrange_basis(E::Type{<:LagrangeElement})

Return the Lagrange basis B for the element E. Evaluating B(x) yields the value of each basis function at x.

source
Inti.lineMethod
line(a,b)

Create a [GeometricEntity] representing a straight line connecting points a and b. The points a and b can be either SVectors or a Tuple.

The parametrization of the line is given by f(u) = a + u(b - a), where 0 ≤ u ≤ 1.

source
Inti.measureFunction
measure(k::EntityKey, rtol)

Compute the length/area/volume of the entity k using an adaptive quadrature with a relative tolerance rtol. Assumes that the entity has an explicit parametrization.

source
Inti.meshgenMethod
meshgen(Ω, n; T = Float64)
+meshgen(Ω, n_dict; T = Float64)
+meshgen(Ω; meshsize, T = Float64)

Generate a Mesh for the domain Ω where each curve is meshed using n elements. Passing a dictionary allows for a finer control; in such cases, n_dict[ent] should return an integer for each entity ent in Ω of geometric_dimension one.

Alternatively, a meshsize can be passed, in which case, the number of elements is computed as so as to obtain an average mesh size of meshsize. Note that the actual mesh size may vary significantly for each element if the parametrization is far from uniform.

The mesh is created with primitive data of type T.

This function requires the entities forming Ω to have an explicit parametrization.

Mesh quality

The quality of the generated mesh created using meshgen depends on the quality of the underlying parametrization. For complex surfaces, you are better off using a proper mesher such as gmsh.

source
Inti.monomial_basisFunction
monomial_basis(sp::PolynomialSpace)

Return a function f : ℝᴺ → ℝᵈ, where N is the dimension of the domain of sp containing a basis of monomials 𝐱ᶿ spanning the polynomial space PolynomialSpace.

source
Inti.near_interaction_listMethod
near_interaction_list(X,Y::AbstractMesh; tol)

For each element el of type E in Y, return the indices of the points in X which are closer than tol to the center of el.

This function returns a dictionary where e.g. dict[E][5] --> Vector{Int} gives the indices of points in X which are closer than tol to the center of the fifth element of type E.

If tol is a Dict, then tol[E] is the tolerance for elements of type E.

source
Inti.new_tagMethod
new_tag(dim)

Return a new tag for an entity of dimension dim so that EntityKey(dim, tag) is not already in ENTITIES.

source
Inti.nodesMethod
nodes(msh::SubMesh)

A view of the nodes of the parent mesh belonging to the submesh. The ordering is given by the nodetags function.

source
Inti.nodetagsMethod
nodetags(msh::SubMesh)

Return the tags of the nodes in the parent mesh belonging to the submesh.

source
Inti.normalMethod
normal(el, x̂)

Return the normal vector of el at the parametric coordinate .

source
Inti.orderMethod
order(q::ReferenceQuadrature)

A quadrature of order p (sometimes called degree of precision) integrates all polynomials of degree ≤ p but not ≤ p + 1.

source
Inti.orderMethod
order(el::LagrangeElement)

The order of the element's interpolating polynomial (e.g. a LagrangeLine with 2 nodes defines a linear polynomial, and thus has order 1).

source
Inti.parametric_curveMethod
parametric_curve(f, a::Real, b::Real)

Create a [GeometricEntity] representing a parametric curve defined by the {f(t) | a ≤ t ≤ b}. The function f should map a scalar to an SVector.

Flipping the orientation is supported by passing a > b.

source
Inti.parametric_surfaceFunction
    parametric_surface(f, lc, hc, boundary = nothing; kwargs...)

Create a parametric surface defined by the function f over the rectangular domain defined by the lower corner lc and the upper corner hc. The optional boundary argument can be used to specify the boundary curves of the surface.

Arguments

  • f: A function that takes two arguments x and y and returns a tuple (u, v) representing the parametric coordinates of the surface at (x, y).
  • lc: A 2-element array representing the lower corner of the rectangular domain.
  • hc: A 2-element array representing the upper corner of the rectangular domain.
  • boundary: An optional array of boundary curves that define the surface.

Keyword Arguments

  • kwargs: Additional keyword arguments that can be passed to the GeometricEntity constructor.

Returns

  • The key of the created GeometricEntity.
source
Inti.polynomial_solutions_vdimFunction
polynomial_solutions_vdim(op, order[, center])

For every monomial term pₙ of degree order, compute a polynomial Pₙ such that ℒ[Pₙ] = pₙ, where is the differential operator associated with op. This function returns {pₙ,Pₙ,γ₁Pₙ}, where γ₁Pₙ is the generalized Neumann trace of Pₙ.

Passing a point center will shift the monomials and solutions accordingly.

source
Inti.qcoordsMethod
qcoords(q)

Return the coordinate of the quadrature nodes associated with q.

source
Inti.quadrature_to_node_valsMethod
quadrature_to_node_vals(Q::Quadrature, qvals::AbstractVector)

Given a vector qvals of scalar values at the quadrature nodes of Q, return a vector ivals of scalar values at the interpolation nodes of Q.mesh.

source
Inti.reference_nodesMethod
reference_nodes(el::LagrangeElement)
+reference_nodes(::Type{<:LagrangeElement})

Return the reference nodes on domain(el) used for the polynomial interpolation. The function values on these nodes completely determines the interpolating polynomial.

We use the same convention as gmsh for defining the reference nodes and their order (see node ordering on gmsh documentation).

source
Inti.return_typeMethod
return_type(f[,args...])

The type returned by f(args...), where args is a tuple of types. Falls back to Base.promote_op by default.

A functors of type T with a knonw return type should extend return_type(::T,args...) to avoid relying on promote_op.

source
Inti.rotation_matrixMethod
rotation_matrix(rot)

Constructs a rotation matrix given the rotation angles around the x, y, and z axes.

Arguments

  • rot: A tuple or vector containing the rotation angles in radians for each axis.

Returns

  • R::SMatrix: The resulting rotation matrix.
source
Inti.single_double_layerMethod
single_double_layer(; op, target, source::Quadrature, compression,
+correction, derivative = false)

Construct a discrete approximation to the single- and double-layer integral operators for op, mapping values defined on the quadrature nodes of source to values defined on the nodes of target. If derivative = true, return instead the adjoint double-layer and hypersingular operators (which are the derivative of the single- and double-layer, respectively).

You must choose a compression method and a correction method, as described below.

Compression

The compression argument is a named tuple with a method field followed by method-specific fields. It specifies how the dense linear operators should be compressed. The available options are:

  • (method = :none, ): no compression is performed, the resulting matrices are dense.
  • (method =:hmatrix, tol): the resulting operators are compressed using hierarchical matrices with an absolute tolerance tol (defaults to 1e-8).
  • (method = :fmm, tol): the resulting operators are compressed using the fast multipole method with an absolute tolerance tol (defaults to 1e-8).

Correction

The correction argument is a named tuple with a method field followed by method-specific fields. It specifies how the singular and nearly-singular integrals should be computed. The available options are:

  • (method = :none, ): no correction is performed. This is not recommented, as the resulting approximation will be inaccurate if the source and target are not sufficiently far apart.
  • (method = :dim, maxdist, target_location): use the density interpolation method to compute the correction. maxdist specifies the distance between source and target points above which no correction is performed (defaults to Inf). target_location should be either :inside, :outside, or :on, and specifies where the targetpoints lie relative to the to thesourcecurve/surface (which is assumed to be closed). Whentarget === source,target_location` is not needed.
source
Inti.skeletonMethod
skeleton(Ω::Domain)

Return all the boundaries of the domain, i.e. the domain's skeleton.

source
Inti.stack_weakdeps_env!Method
stack_weakdeps_env!(; verbose = false, update = false)

Push to the load stack an environment providing the weak dependencies of Inti.jl. This allows benefiting from additional functionalities of Inti.jl which are powered by weak dependencies without having to manually install them in your environment.

Set update=true if you want to update the weakdeps environment.

Warning

Calling this function can take quite some time, especially the first time around, if packages have to be installed or precompiled. Run in verbose mode to see what is happening.

Examples:

Inti.stack_weakdeps_env!()
+using HMatrices
source
Inti.svectorMethod
svector(f,n)

Create an SVector of length n, computing each element as f(i), where i is the index of the element.

source
Inti.torusMethod
torus(; r, R, translation, rotation, scaling, labels)

Create a torus entity in 3D, and apply optional transformations. Returns the key. The parameters r and R are the inner and outer radii of the torus.

source
Inti.vdim_correctionMethod
vdim_correction(op,X,Y,Y_boundary,S,D,V; green_multiplier, kwargs...)

Compute a correction to the volume potential V : Y → X such that V + δV is a more accurate approximation of the underlying volume potential operator. The correction is computed using the (volume) density interpolation method.

This function requires a op::AbstractDifferentialOperator, a target set X, a source quadrature Y, a boundary quadrature Y_boundary, approximations S : Y_boundary -> X and D : Y_boundary -> X to the single- and double-layer potentials (correctly handling nearly-singular integrals), and a naive approximation of the volume potential V. The green_multiplier is a vector of the same length as X storing the value of μ(x) for x ∈ X in the Green identity (see _green_multiplier).

See [8] for more details on the method.

Optional kwargs:

  • interpolation_order: the order of the polynomial interpolation. By default, the maximum order of the quadrature rules is used.
  • maxdist: distance beyond which interactions are considered sufficiently far so that no correction is needed. This is used to determine a threshold for nearly-singular corrections.
  • center: the center of the basis functions. By default, the basis functions are centered at the origin.
  • shift: a boolean indicating whether the basis functions should be shifted and rescaled to each element.
source
Inti.vdim_mesh_centerMethod
vdim_mesh_center(msh)

Point x which minimizes ∑ (x-xⱼ)²/r²ⱼ, where xⱼ and rⱼ are the circumcenter and circumradius of the elements of msh, respectively.

source
Inti.vertices_idxsMethod
vertices_idxs(el::LagrangeElement)

The indices of the nodes in el that define the vertices of the element.

source
Inti.volume_potentialMethod
volume_potential(; op, target, source::Quadrature, compression, correction)

Compute the volume potential operator for a given PDE.

Arguments

  • op: The PDE (Partial Differential Equation) to solve.
  • target: The target domain where the potential is computed.
  • source: The source domain where the potential is generated.
  • compression: The compression method to use for the potential operator.
  • correction: The correction method to use for the potential operator.

Returns

The volume potential operator V that represents the interaction between the target and source domains.

Compression

The compression argument is a named tuple with a method field followed by method-specific fields. It specifies how the dense linear operators should be compressed. The available options are:

  • (method = :none, ): no compression is performed, the resulting matrices are dense.
  • (method =:hmatrix, tol): the resulting operators are compressed using hierarchical matrices with an absolute tolerance tol (defaults to 1e-8).
  • (method = :fmm, tol): the resulting operators are compressed using the fast multipole method with an absolute tolerance tol (defaults to 1e-8).

Correction

The correction argument is a named tuple with a method field followed by method-specific fields. It specifies how the singular and nearly-singular integrals should be computed. The available options are:

  • (method = :none, ): no correction is performed. This is not recommented, as the resulting approximation will be inaccurate if the source and target are not sufficiently far apart.
  • (method = :dim, maxdist, target_location): use the density interpolation method to compute the correction. maxdist specifies the distance between source and target points above which no correction is performed (defaults to Inf). target_location should be either :inside, :outside, or :on, and specifies where the targetpoints lie relative to the to thesource's boundary. Whentarget === source,target_location` is not needed.

Details

The volume potential operator is computed by assembling the integral operator V using the single-layer kernel G. The operator V is then compressed using the specified compression method. If no compression is specified, the operator is returned as is. If a correction method is specified, the correction is computed and added to the compressed operator.

source
diff --git a/dev/index.html b/dev/index.html index 0c6601d8..11cbaf0a 100644 --- a/dev/index.html +++ b/dev/index.html @@ -50,4 +50,4 @@ cb = Colorbar(fig[1, 3], h1, size = 20, height = 200) ax2 = Axis(fig[1, 2]; title = "Approx. solution", opts...) h2 = heatmap!(ax2, xx,yy, (x, y) -> inside((x,y)) ? uₕ((x,y)) : NaN, colorrange = cb.limits[]) -viz!(msh; segmentsize = 3)Example block output
Formulation of the problem as an integral equation

Given a PDE and boundary conditions, there are often many ways to recast the problem as an integral equation, and the choice of formulation plays an important role in the unique solvability, efficiency, and accuracy of the numerical solution. Inti.jl provides a flexible framework for experimenting with different formulations, but it is up to the user to choose the most appropriate one for their problem.

While the example above is a simple one, Inti.jl can handle significantly more complex problems involving multiple domains, heterogeneous coefficients, vector-valued PDEs, and three-dimensional geometries. The best way to dive deeper into Inti.jl's capabilities is the tutorials section. More advanced usage can be found in the examples section.

Contributing

There are several ways to contribute to Inti.jl:

Acknowledgements

+viz!(msh; segmentsize = 3)Example block output
Formulation of the problem as an integral equation

Given a PDE and boundary conditions, there are often many ways to recast the problem as an integral equation, and the choice of formulation plays an important role in the unique solvability, efficiency, and accuracy of the numerical solution. Inti.jl provides a flexible framework for experimenting with different formulations, but it is up to the user to choose the most appropriate one for their problem.

While the example above is a simple one, Inti.jl can handle significantly more complex problems involving multiple domains, heterogeneous coefficients, vector-valued PDEs, and three-dimensional geometries. The best way to dive deeper into Inti.jl's capabilities is the tutorials section. More advanced usage can be found in the examples section.

Contributing

There are several ways to contribute to Inti.jl:

Acknowledgements

diff --git a/dev/objects.inv b/dev/objects.inv index 831a052e100b8b106dd5d7ad1bc7da3a1eed7e62..c3674ec85f069e3c5bc5c07dc183d86279486e2c 100644 GIT binary patch delta 4051 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 F)GU=g^dA5K delta 4043 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 diff --git a/dev/pluto-examples/helmholtz_scattering/index.html b/dev/pluto-examples/helmholtz_scattering/index.html index af0f4e58..e451c1f7 100644 --- a/dev/pluto-examples/helmholtz_scattering/index.html +++ b/dev/pluto-examples/helmholtz_scattering/index.html @@ -29,17 +29,17 @@ meshsize = λ / 5 gmsh_circle(; meshsize, order = gorder, name)
Info    : Meshing 1D...
 Info    : Meshing curve 1 (Ellipse)
-Info    : Done meshing 1D (Wall 0.000146754s, CPU 0.000148s)
+Info    : Done meshing 1D (Wall 0.000163636s, CPU 0.000166s)
 Info    : 63 nodes 64 elements
 Info    : Meshing order 2 (curvilinear on)...
 Info    : [  0%] Meshing curve 1 order 2
 Info    : [ 60%] Meshing surface 1 order 2
-Info    : Done meshing order 2 (Wall 0.000377535s, CPU 0.000374s)
+Info    : Done meshing order 2 (Wall 0.000376095s, CPU 0.000373s)
 Info    : Writing '/home/runner/work/Inti.jl/Inti.jl/docs/build/pluto-examples/circle.msh'...
 Info    : Done writing '/home/runner/work/Inti.jl/Inti.jl/docs/build/pluto-examples/circle.msh'

We can now import the file and parse the mesh and domain information into Inti.jl using the import_mesh function:

Inti.clear_entities!() # empty the entity cache
 msh = Inti.import_mesh(name; dim = 2)
Inti.Mesh{2, Float64} containing:
-	 63 elements of type Inti.LagrangeElement{Inti.ReferenceHyperCube{1}, 3, StaticArraysCore.SVector{2, Float64}}
-	 1 elements of type StaticArraysCore.SVector{2, Float64}

The code above will import the mesh with all of its geometrical entities. The dim=2 projects all points to two dimensions by ignoring the third component. To extract the domain $\Omega$ we need to filter the entities in the mesh; here we will simply filter them based on the geometric_dimension:

Ω = Inti.Domain(e -> Inti.geometric_dimension(e) == 2, Inti.entities(msh))
Domain with 1 entity
+	 1 elements of type StaticArraysCore.SVector{2, Float64}
+	 63 elements of type Inti.LagrangeElement{Inti.ReferenceHyperCube{1}, 3, StaticArraysCore.SVector{2, Float64}}

The code above will import the mesh with all of its geometrical entities. The dim=2 projects all points to two dimensions by ignoring the third component. To extract the domain $\Omega$ we need to filter the entities in the mesh; here we will simply filter them based on the geometric_dimension:

Ω = Inti.Domain(e -> Inti.geometric_dimension(e) == 2, Inti.entities(msh))
Domain with 1 entity
  EntityKey: (2, 1) => Inti.GeometricEntity with labels String[]

To solve our boundary integral equation usign a Nyström method, we actually need a quadrature of our curve/surface (and possibly the normal vectors at the quadrature nodes). Once a mesh is available, creating a quadrature object can be done via the Quadrature constructor, which requires passing a mesh of the domain that one wishes to generate a quadrature for:

Γ = Inti.boundary(Ω)
 Γ_msh = view(msh, Γ)
 Q = Inti.Quadrature(Γ_msh; qorder)
Views of a mesh

In Inti.jl, you can use domain to create a view of a mesh containing only the elements in the domain. For example view(msh,Γ) will return an SubMesh type that you can use to iterate over the elements in the boundary of the disk without actually creating a new mesh. You can use msh[Γ], or collect(view(msh,Γ)) to create a new mesh containing only the elements and nodes in Γ.

The object Q now contains a quadrature (of order 4) that can be used to solve a boundary integral equation on Γ. As a sanity check, let's make sure integrating the function x->1 over Q gives an approximation to the perimeter:

abs(Inti.integrate(x -> 1, Q) - 2π)
6.470135849312442e-7

With the Quadrature constructed, we now can define discrete approximation to the integral operators $\mathrm{S}$ and $\mathrm{D}$ as follows:

op = Inti.Helmholtz(; k, dim = 2)
@@ -213,7 +213,7 @@
     x = 2 * x̂
     return abs(uₛ_3d(x) - uₑ_3d(x))
 end
-@info "error with correction = $er_3d"
[ Info: error with correction = 3.2643662518176203e-5

We see that, once again, the approximation is quite accurate. Let us now visualize the solution on the punctured plane (which we labeled as "sigma"). Since evaluating the integral representation of the solution at many points is expensive, we will use again use a method to accelerate the evaluation:

Σ_msh = view(msh_3d, Σ_3d)
+@info "error with correction = $er_3d"
[ Info: error with correction = 3.1928794362372006e-5

We see that, once again, the approximation is quite accurate. Let us now visualize the solution on the punctured plane (which we labeled as "sigma"). Since evaluating the integral representation of the solution at many points is expensive, we will use again use a method to accelerate the evaluation:

Σ_msh = view(msh_3d, Σ_3d)
 target = Inti.nodes(Σ_msh)
 
 S_viz, D_viz = Inti.single_double_layer(;
@@ -234,4 +234,4 @@
 ax_3d = Axis3(fig_3d[1, 1]; aspect = :data)
 viz!(Γ_msh_3d; colorrange, colormap, color = zeros(nv), interpolate = true)
 viz!(Σ_msh; colorrange, colormap, color = real(u_eval_msh))
-cb = Colorbar(fig_3d[1, 2]; label = "real(u)", colormap, colorrange)
Example block output +cb = Colorbar(fig_3d[1, 2]; label = "real(u)", colormap, colorrange)Example block output diff --git a/dev/pluto-examples/poisson/index.html b/dev/pluto-examples/poisson/index.html index acfd15f7..c544eacf 100644 --- a/dev/pluto-examples/poisson/index.html +++ b/dev/pluto-examples/poisson/index.html @@ -21,16 +21,16 @@ msh = Inti.import_mesh(; dim = 2) gmsh.finalize()
Info    : Meshing 1D...
 Info    : Meshing curve 1 (BSpline)
-Info    : Done meshing 1D (Wall 0.0272208s, CPU 0.027223s)
+Info    : Done meshing 1D (Wall 0.0270783s, CPU 0.027079s)
 Info    : Meshing 2D...
 Info    : Meshing surface 1 (Plane, Frontal-Delaunay)
-Info    : Done meshing 2D (Wall 0.0765097s, CPU 0.076507s)
+Info    : Done meshing 2D (Wall 0.0845333s, CPU 0.084529s)
 Info    : 566 nodes 1033 elements
 Info    : Meshing order 2 (curvilinear on)...
 Info    : [  0%] Meshing curve 1 order 2
 Info    : [ 60%] Meshing surface 1 order 2
 Info    : Surface mesh: worst distortion = 0.451559 (0 elements in ]0, 0.2]); worst gamma = 0.758919
-Info    : Done meshing order 2 (Wall 0.00776852s, CPU 0.007768s)

We can now extract components of the mesh corresponding to the $\Omega$ and $\Gamma$ domains:

Ω = Inti.Domain(e -> Inti.geometric_dimension(e) == 2, msh)
+Info    : Done meshing order 2 (Wall 0.00846885s, CPU 0.008471s)

We can now extract components of the mesh corresponding to the $\Omega$ and $\Gamma$ domains:

Ω = Inti.Domain(e -> Inti.geometric_dimension(e) == 2, msh)
 Γ = Inti.boundary(Ω)
 Ω_msh = view(msh, Ω)
 Γ_msh = view(msh, Γ)

and visualize them:

using Meshes, GLMakie
@@ -110,4 +110,4 @@
 colormap = :inferno
 ax = Axis(fig[1, 3]; aspect = DataAspect())
 viz!(Ω_msh; colorrange, colormap, color = log_er, interpolate = true)
-cb = Colorbar(fig[1, 4]; label = "log₁₀|u - uₑ|", colormap, colorrange)
Example block output +cb = Colorbar(fig[1, 4]; label = "log₁₀|u - uₑ|", colormap, colorrange)Example block output diff --git a/dev/pluto-examples/toy_example/index.html b/dev/pluto-examples/toy_example/index.html index 4f365ea7..bd727b81 100644 --- a/dev/pluto-examples/toy_example/index.html +++ b/dev/pluto-examples/toy_example/index.html @@ -1,2 +1,2 @@ -Toy example · Inti.jl

Pluto notebook

Toy example

All examples in Inti.jl are autogenerated by executing the make.jl script in the docs folder. The workflow uses Pluto.jl to generate markdown files passed to Documenter.jl. The original pluto notebook files are downloadable from the example's page.

using Inti
+Toy example · Inti.jl

Pluto notebook

Toy example

All examples in Inti.jl are autogenerated by executing the make.jl script in the docs folder. The workflow uses Pluto.jl to generate markdown files passed to Documenter.jl. The original pluto notebook files are downloadable from the example's page.

using Inti
diff --git a/dev/references/index.html b/dev/references/index.html index 33defc54..f8f465d5 100644 --- a/dev/references/index.html +++ b/dev/references/index.html @@ -1,2 +1,2 @@ -References · Inti.jl

References

[1]
J.-C. Nédélec. Acoustic and electromagnetic equations: integral representations for harmonic problems. Vol. 144 (Springer, 2001).
[2]
D. Colton and R. Kress. Integral equation methods in scattering theory (SIAM, 2013).
[3]
M. Bebendorf. Hierarchical matrices (Springer, 2008).
[4]
W. Hackbusch and others. Hierarchical matrices: algorithms and analysis. Vol. 49 (Springer, 2015).
[5]
V. Rokhlin. Rapid solution of integral equations of classical potential theory. Journal of computational physics 60, 187–207 (1985).
[6]
L. Greengard and V. Rokhlin. A fast algorithm for particle simulations. Journal of computational physics 73, 325–348 (1987).
[7]
L. M. Faria, C. Pérez-Arancibia and M. Bonnet. General-purpose kernel regularization of boundary integral equations via density interpolation. Computer Methods in Applied Mechanics and Engineering 378, 113703 (2021).
[8]
T. G. Anderson, M. Bonnet, L. M. Faria and C. Pérez-Arancibia. Fast, high-order numerical evaluation of volume potentials via polynomial density interpolation. Journal of Computational Physics, 113091 (2024).
+References · Inti.jl

References

[1]
J.-C. Nédélec. Acoustic and electromagnetic equations: integral representations for harmonic problems. Vol. 144 (Springer, 2001).
[2]
D. Colton and R. Kress. Integral equation methods in scattering theory (SIAM, 2013).
[3]
M. Bebendorf. Hierarchical matrices (Springer, 2008).
[4]
W. Hackbusch and others. Hierarchical matrices: algorithms and analysis. Vol. 49 (Springer, 2015).
[5]
V. Rokhlin. Rapid solution of integral equations of classical potential theory. Journal of computational physics 60, 187–207 (1985).
[6]
L. Greengard and V. Rokhlin. A fast algorithm for particle simulations. Journal of computational physics 73, 325–348 (1987).
[7]
L. M. Faria, C. Pérez-Arancibia and M. Bonnet. General-purpose kernel regularization of boundary integral equations via density interpolation. Computer Methods in Applied Mechanics and Engineering 378, 113703 (2021).
[8]
T. G. Anderson, M. Bonnet, L. M. Faria and C. Pérez-Arancibia. Fast, high-order numerical evaluation of volume potentials via polynomial density interpolation. Journal of Computational Physics, 113091 (2024).
diff --git a/dev/search_index.js b/dev/search_index.js index 21a4e851..88a002b8 100644 --- a/dev/search_index.js +++ b/dev/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"location":"tutorials/solvers/#Linear-solvers","page":"Linear solvers","title":"Linear solvers","text":"","category":"section"},{"location":"tutorials/solvers/","page":"Linear solvers","title":"Linear solvers","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/solvers/","page":"Linear solvers","title":"Linear solvers","text":"warning: Work in progress\nThis tutorial is still a work in progress. We will update it with more details and examples in the future.","category":"page"},{"location":"tutorials/solvers/","page":"Linear solvers","title":"Linear solvers","text":"Inti.jl does not provide its own linear solvers, but relies on external libraries such as IterativeSolvers.jl or the LinearAlgebra standard library for the solving the linear systems that arise in the discretization of integral equations.","category":"page"},{"location":"references/","page":"References","title":"References","text":"CurrentModule = Inti","category":"page"},{"location":"references/#References","page":"References","title":"References","text":"","category":"section"},{"location":"references/","page":"References","title":"References","text":"J.-C. Nédélec. Acoustic and electromagnetic equations: integral representations for harmonic problems. Vol. 144 (Springer, 2001).\n\n\n\nD. Colton and R. Kress. Integral equation methods in scattering theory (SIAM, 2013).\n\n\n\nM. Bebendorf. Hierarchical matrices (Springer, 2008).\n\n\n\nW. Hackbusch and others. Hierarchical matrices: algorithms and analysis. Vol. 49 (Springer, 2015).\n\n\n\nV. Rokhlin. Rapid solution of integral equations of classical potential theory. Journal of computational physics 60, 187–207 (1985).\n\n\n\nL. Greengard and V. Rokhlin. A fast algorithm for particle simulations. Journal of computational physics 73, 325–348 (1987).\n\n\n\nL. M. Faria, C. Pérez-Arancibia and M. Bonnet. General-purpose kernel regularization of boundary integral equations via density interpolation. Computer Methods in Applied Mechanics and Engineering 378, 113703 (2021).\n\n\n\nT. G. Anderson, M. Bonnet, L. M. Faria and C. Pérez-Arancibia. Fast, high-order numerical evaluation of volume potentials via polynomial density interpolation. Journal of Computational Physics, 113091 (2024).\n\n\n\n","category":"page"},{"location":"tutorials/layer_potentials/#Layer-potentials","page":"Layer potentials","title":"Layer potentials","text":"","category":"section"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"note: Important points covered in this tutorial\nNearly singular evaluation of layer potentials\nCreating a smooth domain with splines using Gmsh's API\nPlotting values on a mesh","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"In this tutorial we focus on evaluating the layer potentials given a source density. This is a common post-processing task in boundary integral equation methods, and while most of it is straightforward, some subtleties arise when the target points are close to the boundary (nearly-singular integrals).","category":"page"},{"location":"tutorials/layer_potentials/#Integral-potentials","page":"Layer potentials","title":"Integral potentials","text":"","category":"section"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"IntegralPotential represent the following mathematical objects:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"mathcalPsigma(boldsymbolr) = int_Gamma K(boldsymbolr boldsymbolr) sigma(boldsymbolr) dboldsymbolr","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"where K is the kernel of the operator, Gamma is the source's boundary, boldsymbolr not in Gamma is a target point, and sigma is the source density.","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"Here is a simple example of how to create a kernel representing a Laplace double-layer potential:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"using Inti, StaticArrays, LinearAlgebra\n# define a kernel function\nfunction K(target,source)\n r = Inti.coords(target) - Inti.coords(source)\n ny = Inti.normal(source)\n return 1 / (2π * norm(r)^2) * dot(r, ny)\nend\n# define a domain\nΓ = Inti.parametric_curve(s -> SVector(cos(2π * s), sin(2π * s)), 0, 1) |> Inti.Domain\n# and a quadrature of Γ\nQ = Inti.Quadrature(Γ; meshsize = 0.1, qorder = 5)\n𝒮 = Inti.IntegralPotential(K, Q)","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"If we have a source density sigma, defined on the quadrature nodes of Gamma, we can create a function that evaluates the layer potential at an arbitrary point:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"σ = map(q -> 1.0, Q)\nu = 𝒮[σ]","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"u is now an anonymous function that evaluates the layer potential at any point:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"r = SVector(0.1, 0.2)\n@assert u(r) ≈ -1 # hide\nu(r)","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"Although we created the single-layer potential for the Laplace kernel manually, it is often more convenient to use the single_layer_potential when working with a supported PDE, e.g.:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"op = Inti.Laplace(; dim = 2)\n𝒮, 𝒟 = Inti.single_double_layer_potential(; op, source = Q)","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"creates the single and double layer potentials for the Laplace equation in 2D.","category":"page"},{"location":"tutorials/layer_potentials/#Direct-evaluation-of-layer-potentials","page":"Layer potentials","title":"Direct evaluation of layer potentials","text":"","category":"section"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"We now show how to evaluate the layer potentials of an exact solution on a mesh created through the Gmsh API. Do to so, let us first define the PDE:g","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"using Inti, StaticArrays, LinearAlgebra, Meshes, GLMakie, Gmsh\n# define the PDE\nk = 4π\nop = Inti.Helmholtz(; dim = 2, k)","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"We will now use the gmsh_curve function to create a smooth domain of a kite using splines:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"gmsh.initialize()\nmeshsize = 2π / k / 4\nkite = Inti.gmsh_curve(0, 1; meshsize) do s\n SVector(0.25, 0.0) + SVector(cos(2π * s) + 0.65 * cos(4π * s[1]) - 0.65, 1.5 * sin(2π * s))\nend\ncl = gmsh.model.occ.addCurveLoop([kite])\nsurf = gmsh.model.occ.addPlaneSurface([cl])\ngmsh.model.occ.synchronize()\ngmsh.model.mesh.generate(2)\nmsh = Inti.import_mesh(; dim = 2)\ngmsh.finalize()","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"tip: Tip\nThe GMSH API is a powerful tool to create complex geometries and meshes directly from Julia (the gmsh_curve function above is just a simple wrapper around some spline functionality). For more information, see the official documentation.","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"We can visualize the triangular mesh using:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"using Meshes, GLMakie\n# extract the domain Ω from the mesh entities\nents = Inti.entities(msh)\nΩ = Inti.Domain(e->Inti.geometric_dimension(e) == 2, ents)\nviz(msh[Ω]; showsegments = true, axis = (aspect = DataAspect(), ))","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"For the purpose of testing the accuracy of the layer potential evaluation, we will construct an exact solution of the Helmholtz equation on the interior domain and plot it:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"# construct an exact interior solution as a sum of random plane waves\ndirs = [SVector(cos(θ), sin(θ)) for θ in 2π*rand(10)]\ncoefs = rand(ComplexF64, 10)\nu = (x) -> sum(c*exp(im*k*dot(x, d)) for (c,d) in zip(coefs, dirs))\ndu = (x,ν) -> sum(c*im*k*dot(d, ν)*exp(im*k*dot(x, d)) for (c,d) in zip(coefs, dirs))\n# plot the exact solution\nΩ_msh = view(msh, Ω)\ntarget = Inti.nodes(Ω_msh)\nviz(Ω_msh; showsegments = false, axis = (aspect = DataAspect(), ), color = real(u.(target)))","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"Since u satisfies the Helmholtz equation, we know that the following representation holds:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"u(boldsymbolr) = mathcalSgamma_1 u(boldsymbolr) - mathcalDgamma_0 u(boldsymbolr) quad boldsymbolr in Omega","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"where gamma_0 u and gamma_1 u are the respective Dirichlet and Neumann traces of u, and mathcalS and mathcalD are the respective single and double layer potentials over Gamma = partial Omega.","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"Let's compare next the exact solution with the layer potential evaluation, based on a quadrature of Gamma:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"Γ = Inti.boundary(Ω)\nQ = Inti.Quadrature(view(msh,Γ); qorder = 5)\n# evaluate the layer potentials\n𝒮, 𝒟 = Inti.single_double_layer_potential(; op, source = Q)\nγ₀u = map(q -> u(q.coords), Q)\nγ₁u = map(q -> du(q.coords, q.normal), Q)\nuₕ = x -> 𝒮[γ₁u](x) - 𝒟[γ₀u](x)\n# plot the error on the target nodes\ner_log10 = log10.(abs.(u.(target) - uₕ.(target)))\ncolorrange = extrema(er_log10)\nfig, ax, pl = viz(Ω_msh;\n color = er_log10,\n colormap = :viridis,\n colorrange,\n axis = (aspect = DataAspect(),),\n interpolate=true\n)\nColorbar(fig[1, 2]; label = \"log₁₀(error)\", colorrange)\nfig","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"We see a common pattern of potential evaluation: the error is small away from the boundary, but grows near it. This is due to the nearly-singular nature of the layer potential integrals, which can be mitigated by using a correction method that accounts for the singularity of the kernel as boldsymbolr to Gamma.","category":"page"},{"location":"tutorials/layer_potentials/#Near-field-correction-of-layer-potentials","page":"Layer potentials","title":"Near-field correction of layer potentials","text":"","category":"section"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"There are two cases where the direct evaluation of layer potentials is not recommended:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"When the target point is close to the boundary (nearly-singular integrals).\nWhen evaluation at many target points is desired (computationally burdensome)and take advantage of an acceleration routine.","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"In such contexts, it is recommended to use the single_double_layer function (alternately, one can directly assemble an IntegralOperator) with a correction, for the first case, and/or a compression (acceleration) method, for the latter case, as appropriate. Here is an example of how to use the FMM acceleration with a near-field correction to evaluate the layer potentials::","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"using FMM2D\nS, D = Inti.single_double_layer(; op, target, source = Q,\n compression = (method = :fmm, tol = 1e-12),\n correction = (method = :dim, target_location = :inside, maxdist = 0.2)\n)\ner_log10_cor = log10.(abs.(S*γ₁u - D*γ₀u - u.(target)))\ncolorrange = extrema(er_log10) # use scale without correction\nfig = Figure(resolution = (800, 400))\nax1 = Axis(fig[1, 1], aspect = DataAspect(), title = \"Naive evaluation\")\nviz!(Ω_msh; color = er_log10, colormap = :viridis, colorrange,interpolate=true)\nax2 = Axis(fig[1, 2], aspect = DataAspect(), title = \"Nearfield correction\")\nviz!(Ω_msh; color = er_log10_cor, colormap = :viridis, colorrange, interpolate=true)\nColorbar(fig[1, 3]; label = \"log₁₀(error)\", colorrange)\nfig","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"As can be seen, the near-field correction significantly reduces the error near the boundary, making if feasible to evaluate the layer potential near Gamma if necessary.","category":"page"},{"location":"tutorials/integral_operators/#Boundary-integral-operators","page":"Boundary integral operators","title":"Boundary integral operators","text":"","category":"section"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"note: Important points covered in this tutorial\nDefine layer potentials and the four integral operators of Calderón calculus\nConstruct block operators\nSet up a custom kernel","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"A central piece of integral equation methods is the efficient and accurate computation of integral operators. In the first part of this tutorial we will cover how to assemble and manipulate the four integral operators of Calderón calculus, namely the single-layer, double-layer, hypersingular, and adjoint operators [1, 2], for some predefined kernels in Inti.jl. In the second part we will show how to extend the package to handle custom kernels.","category":"page"},{"location":"tutorials/integral_operators/#Predefined-kernels-and-integral-operators","page":"Boundary integral operators","title":"Predefined kernels and integral operators","text":"","category":"section"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"To simplify the construction of integral operators for some commonly used PDEs, Inti.jl defines a few AbstractDifferentialOperators types. For each of these PDEs, the package provides a SingleLayerKernel, DoubleLayerKernel, HyperSingularKernel, and AdjointDoubleLayerKernel that can be used to construct the corresponding kernel functions, e.g.:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"using Inti, StaticArrays, LinearAlgebra\nop = Inti.Helmholtz(; dim = 2, k = 2π)\nG = Inti.SingleLayerKernel(op)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Typically, we are not interested in the kernels themselves, but in the integral operators they define. Two functions, single_double_layer and adj_double_layer_hypersingular, are provided as a high-level syntax to construct the four integral operators of Calderón calculus:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Γ = Inti.parametric_curve(s -> SVector(cos(s), sin(s)), 0, 2π) |> Inti.Domain\nQ = Inti.Quadrature(Γ; meshsize = 0.1, qorder = 5)\nS, D = Inti.single_double_layer(; \n op, \n target = Q, \n source = Q, \n compression = (method = :none,), \n correction = (method = :dim,)\n)\nK, N = Inti.adj_double_layer_hypersingular(; \n op, \n target = Q, \n source = Q, \n compression = (method = :none,), \n correction = (method = :dim,)\n)\nnothing # hide","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Much goes on under the hood in the function above, and the sections on correction and compression methods will provide more details on the options available. The important thing to keep in mind is that S, D, K, and N are discrete approximations of the following (linear) operators:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"beginaligned\n Ssigma(boldsymbolx) = int_Gamma G(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmd s_boldsymboly quad \n Dsigma(boldsymbolx) = mathrmpv int_Gamma fracpartial Gpartial nu_boldsymboly(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmd s_boldsymboly \n Ksigma(boldsymbolx) = mathrmpv int_Gamma fracpartial Gpartial nu_boldsymbolx(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmd s_boldsymboly quad\n Nsigma(boldsymbolx) = mathrmfp int_Gamma fracpartial^2 Gpartial nu_boldsymbolx partial nu_boldsymboly(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmd s_boldsymboly\nendaligned","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"The actual type of S, D, K, and N depends on the compression and correction methods. In the simple case above, these are simply matrices:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"@assert all(T -> T == Matrix{ComplexF64}, map(typeof, (S, D, K, N))) # hide\nmap(typeof, (S, D, K, N))","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"If we turn on a compression method, such as :fmm, the types may change into something different:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"using FMM2D # will load the extension\nSfmm, Dfmm = Inti.single_double_layer(; \n op, \n target = Q, \n source = Q, \n compression = (method = :fmm, tol = 1e-10), \n correction = (method = :dim, )\n)\nKfmm, Nfmm = Inti.adj_double_layer_hypersingular(; \n op, \n target = Q, \n source = Q, \n compression = (method = :fmm, tol = 1e-10), \n correction = (method = :dim,)\n)\ntypeof(Sfmm)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"This is because the FMM method is used to approximate the matrix-vector in a matrix-free way: the only thing guaranteed is that S and D can be applied to a vector:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"x = map(q -> cos(q.coords[1] + q.coords[2]), Q)\n@assert norm(Sfmm*x - S*x, Inf) / norm(S*x, Inf) < 1e-8 # hide\nnorm(Sfmm*x - S*x, Inf)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"The Sfmm object above in fact combines two linear maps:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Sfmm","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"The FunctionMap computes a matrix-vector by performing a function call to the FMM2D library. The WrappedMap accounts for a sparse matrix used to correct for singular and nearly singular interactions. These two objects are added lazily using LinearMaps.","category":"page"},{"location":"tutorials/integral_operators/#Operator-composition","page":"Boundary integral operators","title":"Operator composition","text":"","category":"section"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Effortlessly and efficiently composing operators is a powerful abstraction for integral equations, as it allows for the construction of complex systems from simple building blocks. To show this, let us show how to construct the Calderón projectors:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"beginaligned\nH = beginbmatrix\n -D S \n -N K\nendbmatrix \nendaligned","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"As is well-known [1, Theorem 3.1.3], the operators C_pm = I2 pm H are the projectors (i.e. C_pm^2 = C_pm):","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"using LinearMaps\n# create the block operator\nH = [-Dfmm Sfmm; -Nfmm Kfmm]\nC₊ = I / 2 + H\nC₋ = I / 2 - H\n# define two density functions on Γ\nu = map(q -> cos(q.coords[1] + q.coords[2]), Q)\nv = map(q-> q.coords[1], Q)\nx = [u; v]\n# compute the error in the projector identity\ne₊ = norm(C₊*(C₊*x) - C₊*x, Inf)\ne₋ = norm(C₋*(C₋*x) - C₋*x, Inf)\n@assert e₊ < 1e-5 && e₋ < 1e-5 # hide\nprintln(\"projection error for C₊: $e₊\")\nprintln(\"projection error for C₋: $e₋\")","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"We see that the error in the projector identity is small, as expected. Note that such compositions are not limited to the Calderón projectors, and can be used e.g. to construct the combined field integral equation (CFIE), or to compose a formulation with an operator preconditioner.","category":"page"},{"location":"tutorials/integral_operators/#Custom-kernels","page":"Boundary integral operators","title":"Custom kernels","text":"","category":"section"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"So far we have focused on problems for which Inti.jl provides predefined kernels, and used the high-level syntax of e.g. single_double_layer to construct the integral operators. We will now dig into the details of how to set up a custom kernel function, and how to build an integral operator from it.","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"note: Integral operators coming from PDEs\nIf the integral operator of interest arises from a PDE, it is recommended to define a new AbstractDifferentialOperator type, and implement the required methods for SingleLayerKernel, DoubleLayerKernel, AdjointDoubleLayerKernel, and HyperSingularKernel. This will enable the use of the high-level syntax for constructing boundary integral operators, as well as the use of the compression and correction methods specific to integral operators arising from PDEs.","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"For the sake of simplicity, let us consider the following kernel representing the half-space Dirichlet Green function for Helmholtz's equation in 2D:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":" G_D(boldsymbolx boldsymboly) = fraci4 H^(1)_0(k boldsymbolx - boldsymboly) - fraci4 H^(1)_0(k boldsymbolx - boldsymboly^*)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"where boldsymboly^* = (y_1 -y_2). We can define this kernel as a","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"using SpecialFunctions # for hankelh1\nfunction helmholtz_kernel(target, source, k)\n x, y = Inti.coords(target), Inti.coords(source)\n yc = SVector(y[1], -y[2])\n d, dc = norm(x-y), norm(x-yc)\n # the singularity at x = y needs to be handled separately, so just put a zero\n d == 0 ? zero(ComplexF64) : im / 4 * ( hankelh1(0, k * d) - hankelh1(0, k * dc))\nend","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Let us now consider the integral operator S defined by:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":" Ssigma(boldsymbolx) = int_Gamma G_D(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmd s_boldsymboly quad boldsymbolx in Gamma","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"We can represent S by an IntegralOperator type:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"k = 50π\nλ = 2π/k\nmeshsize = λ / 10\ngeo = Inti.parametric_curve(s -> SVector(cos(s), 2 + sin(s)), 0, 2π)\nΓ = Inti.Domain(geo)\nmsh = Inti.meshgen(Γ; meshsize)\nQ = Inti.Quadrature(msh; qorder = 5)\n# create a local scope to capture `k`\nK = let k = k\n (t,q) -> helmholtz_kernel(t,q,k)\nend\nSop = Inti.IntegralOperator(K, Q, Q)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"note: Signature of custom kernels\nKernel functions passed to IntegralOperator should always take two arguments, target and source, which are both of QuadratureNode. This allows for extracting not only the coords of the nodes, but also the normal vector if needed (e.g. for double-layer or hypersingular kernels).","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"The approximation of Sop now involves two steps:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"build a dense operator S₀ that efficiently computes the matrix-vector product Sop * x for any vector x\ncorrect for the inaccuracies of S₀ due to singular/nearly-singular interactions by adding to it a correction matrix δS","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"For the first step, we will use a hierarchical matrix:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"using HMatrices\nS₀ = Inti.assemble_hmatrix(Sop; rtol = 1e-4)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"The correction matrix δS will be constructed using adaptive_correction:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"δS = Inti.adaptive_correction(Sop; tol = 1e-4, maxdist = 5*meshsize)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"How exactly one adds S₀ and δS to get the final operator depends on the intended usage. For instance, one can use the LinearMap type to simply add them lazily:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"using LinearMaps\nS = LinearMap(S₀) + LinearMap(δS)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Or, one can add δS to S₀ to create a new object:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"S = S₀ + δS","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"or if performance/memory is a concern, one may want to directly add δS to S₀ in-place:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"axpy!(1.0, δS, S₀)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"All of these should give an identical matrix-vector product, but the latter two allow e.g. for the use of direct solvers though an LU factorization.","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"warning: Limitations\nIntegral operators defined from custom kernel functions do not support all the features of the predefined ones. In particular, some singular integration methods (e.g. the Density Interpolation Method) and acceleration routines (e.g. Fast Multipole Method) used to correct for singular and nearly singular integral operators, and to accelerate the matrix vector products, are only available for specific kernels. Check the corrections and compression for more details concerning which methods are compatible with custom kernels.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"(Image: Pluto notebook)","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"begin\n import Pkg as _Pkg\n haskey(ENV, \"PLUTO_PROJECT\") && _Pkg.activate(ENV[\"PLUTO_PROJECT\"])\n using PlutoUI: TableOfContents\nend;","category":"page"},{"location":"pluto-examples/helmholtz_scattering/#Helmholtz-scattering","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"","category":"section"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"note: Important points covered in this example\nCreating a geometry using the Gmsh API\nAssembling integral operators and integral potentials\nSetting up a sound-soft problem in both 2 and 3 spatial dimensions\nUsing GMRES to solve the linear system\nExporting the solution to Gmsh for visualization","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"In this tutorial we will show how to solve an acoustic scattering problem in the context of Helmholtz equation. We will focus on a smooth sound-soft obstacle for simplicity, and introduce along the way the necessary techniques used to handle some difficulties encountered. We will use various packages throughout this example (including of course Inti.jl); if they are not on your environment, you can install them using ] add in the REPL.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"In the following section, we will provide a brief mathematical description of the problem (valid in both 2 and 3 dimensions). We will tackle the two-dimensional problem first, for which we do not need to worry much about performance issues (e.g. compressing the integral operators). Finally, we present a three-dimensional example, where we will use HMatrices.jl to compress the underlying integral operators.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/#Sound-soft-problem","page":"Helmholtz scattering","title":"Sound-soft problem","text":"","category":"section"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"This example concerns the sound-soft acoustic scattering problem. Mathematically, this means solving an exterior problem governed by Helmholtz equation (time-harmonic acoustics) with a Dirichlet boundary condition. More precisely, letting Omega subset mathbbR^d be a bounded domain, and denoting by Gamma = partial Omega its boundary, we wish to solve","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Delta u + k^2 u = 0 quad texton quad mathbbR^d setminus barOmega","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"subject to Dirichlet boundary conditions on Gamma","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"\tu(boldsymbolx) = g(boldsymbolx) quad textfor quad boldsymbolx in Gamma","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"and the Sommerfeld radiation condition at infinity","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"\tlim_boldsymbolx to infty boldsymbolx^(d-1)2 left( fracpartial upartial boldsymbolx - i k u right) = 0","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Here g is a (given) boundary datum, and k is the constant wavenumber.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"For simplicity, we will take Gamma circle/sphere, and focus on the plane-wave scattering problem. This means we will seek a solution u of the form u = u_s + u_i, where u_i is a known incident field, and u_s is the scattered field we wish to compute.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"note: Complex geometries\nThe main reason for focusing on such a simple example is twofold. First, it alleviates the complexities associated with the mesh generation. Second, since exact solutions are known for this problem (in the form of a series), it is easy to assess the accuracy of the solution obtained. In practice, you can use the same techniques to solve the problem on more complex geometries by providing a .msh file containing the mesh.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Using the theory of boundary integral equations, we can express u_s as","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"\tu_s(boldsymbolr) = mathcalDsigma(boldsymbolr) - i k mathcalSsigma(boldsymbolr)","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"where mathcalS is the so-called single layer potential, mathcalD is the double-layer potential, and sigma Gamma to mathbbC is a surface density. This is an indirect formulation (because sigma is an auxiliary density, not necessarily physical) commonly referred to as a combined field formulation. Taking the limit mathbbR^d setminus bar Omega ni x to Gamma, it can be shown that the following equation holds on Gamma:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"\tleft( fracmathrmI2 + mathrmD - i k mathrmS right)sigma = g","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"where mathrmI is the identity operator, and mathrmS and mathrmD are the single- and double-layer operators. This is the combined field integral equation that we will solve. The boundary data g is obtained by applying the sound-soft condition u=0 on Gamma, from which it readily follows that u_s = -u_i on Gamma.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We are now have the necessary background to solve this problem in both 2 and 3 spatial dimensions. Let's load Inti.jl as well as the required dependencies","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"using Inti\nusing LinearAlgebra\nusing StaticArrays\nusing Gmsh\nusing Meshes\nusing GLMakie\nusing SpecialFunctions\nusing GSL\nusing IterativeSolvers\nusing LinearMaps","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"and setup some of the (global) problem parameters:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"k = 4π\nλ = 2π / k\nqorder = 4 # quadrature order\ngorder = 2 # order of geometrical approximation\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/#Two-dimensional-scattering","page":"Helmholtz scattering","title":"Two-dimensional scattering","text":"","category":"section"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We will use Gmsh API for creating .msh file containing the desired geometry and mesh. Here is a function to mesh the circle:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"function gmsh_circle(; name, meshsize, order = 1, radius = 1, center = (0, 0))\n try\n gmsh.initialize()\n gmsh.model.add(\"circle-mesh\")\n gmsh.option.setNumber(\"Mesh.MeshSizeMax\", meshsize)\n gmsh.option.setNumber(\"Mesh.MeshSizeMin\", meshsize)\n gmsh.model.occ.addDisk(center[1], center[2], 0, radius, radius)\n gmsh.model.occ.synchronize()\n gmsh.model.mesh.generate(1)\n gmsh.model.mesh.setOrder(order)\n gmsh.write(name)\n finally\n gmsh.finalize()\n end\nend\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Let us now use gmsh_circle to create a circle.msh file. As customary in wave-scattering problems, we will choose a mesh size that is proportional to wavelength:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"name = joinpath(@__DIR__, \"circle.msh\")\nmeshsize = λ / 5\ngmsh_circle(; meshsize, order = gorder, name)","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We can now import the file and parse the mesh and domain information into Inti.jl using the import_mesh function:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Inti.clear_entities!() # empty the entity cache\nmsh = Inti.import_mesh(name; dim = 2)","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"The code above will import the mesh with all of its geometrical entities. The dim=2 projects all points to two dimensions by ignoring the third component. To extract the domain Omega we need to filter the entities in the mesh; here we will simply filter them based on the geometric_dimension:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Ω = Inti.Domain(e -> Inti.geometric_dimension(e) == 2, Inti.entities(msh))","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"To solve our boundary integral equation usign a Nyström method, we actually need a quadrature of our curve/surface (and possibly the normal vectors at the quadrature nodes). Once a mesh is available, creating a quadrature object can be done via the Quadrature constructor, which requires passing a mesh of the domain that one wishes to generate a quadrature for:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Γ = Inti.boundary(Ω)\nΓ_msh = view(msh, Γ)\nQ = Inti.Quadrature(Γ_msh; qorder)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"tip: Views of a mesh\nIn Inti.jl, you can use domain to create a view of a mesh containing only the elements in the domain. For example view(msh,Γ) will return an SubMesh type that you can use to iterate over the elements in the boundary of the disk without actually creating a new mesh. You can use msh[Γ], or collect(view(msh,Γ)) to create a new mesh containing only the elements and nodes in Γ.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"The object Q now contains a quadrature (of order 4) that can be used to solve a boundary integral equation on Γ. As a sanity check, let's make sure integrating the function x->1 over Q gives an approximation to the perimeter:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"@assert abs(Inti.integrate(x -> 1, Q) - 2π) < 1e-5","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"abs(Inti.integrate(x -> 1, Q) - 2π)","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"With the Quadrature constructed, we now can define discrete approximation to the integral operators mathrmS and mathrmD as follows:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"op = Inti.Helmholtz(; k, dim = 2)\nS, D = Inti.single_double_layer(;\n op,\n target = Q,\n source = Q,\n compression = (method = :none,),\n correction = (method = :dim,),\n)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"There are two well-known difficulties related to the discretization of the boundary integral operators S and D:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"The kernel of the integral operator is not smooth, and thus specialized quadrature rules are required to accurately approximate the matrix entries for which the target and source point lie close (relative to some scale) to each other.\nThe underlying matrix is dense, and thus the storage and computational cost of the operator is prohibitive for large problems unless acceleration techniques such as Fast Multipole Methods or Hierarchical Matrices are employed.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Inti.jl tries to provide a modular and transparent interface for dealing with both of these difficulties, where the general approach for solving a BIE will be to first construct a (possible compressed) naive representation of the integral operator where singular and nearly-singular integrals are ignored, followed by a the creation of a (sparse) correction intended to account for such singular interactions. See single_double_layer for more details on the various options available.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We can now combine S and D to form the combined-field operator:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"L = I / 2 + D - im * k * S\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"where I is the identity matrix. Assuming an incident field along the x_1 direction of the form u_i =e^ikx_1, the right-hand side of the equation can be construted using:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"uᵢ = x -> exp(im * k * x[1]) # plane-wave incident field\nrhs = map(Q) do q\n x = q.coords\n return -uᵢ(x)\nend\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"note: Iterating over a quadrature\nIn computing rhs above, we used map to evaluate the incident field at all quadrature nodes. When iterating over Q, the iterator returns a QuadratureNode, and not simply the coordinate of the quadrature node. This is so that you can access additional information, such as the normal vector, at the quadrature node.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We can now solve the integral equation using e.g. the backslash operator:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"σ = L \\ rhs\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"The variable σ contains the value of the approximate density at the quadrature nodes. To reconstruct a continuous approximation to the solution, we can use single_double_layer_potential to obtain the single- and double-layer potentials, and then combine them as follows:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"𝒮, 𝒟 = Inti.single_double_layer_potential(; op, source = Q)\nuₛ = x -> 𝒟[σ](x) - im * k * 𝒮[σ](x)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"The variable uₛ is an anonymous/lambda function representing the approximate scattered field.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"To assess the accuracy of the solution, we can compare it to the exact solution (obtained by separation of variables in polar coordinates):","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"function circle_helmholtz_soundsoft(pt; radius = 1, k, θin)\n x = pt[1]\n y = pt[2]\n r = sqrt(x^2 + y^2)\n θ = atan(y, x)\n u = 0.0\n r < radius && return u\n c(n) = -exp(im * n * (π / 2 - θin)) * besselj(n, k * radius) / besselh(n, k * radius)\n u = c(0) * besselh(0, k * r)\n n = 1\n while (abs(c(n)) > 1e-12)\n u +=\n c(n) * besselh(n, k * r) * exp(im * n * θ) +\n c(-n) * besselh(-n, k * r) * exp(-im * n * θ)\n n += 1\n end\n return u\nend\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Here is the maximum error on some points located on a circle of radius 2:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"uₑ = x -> circle_helmholtz_soundsoft(x; k, radius = 1, θin = 0) # exact solution\ner = maximum(0:0.01:2π) do θ\n R = 2\n x = (R * cos(θ), R * sin(θ))\n return abs(uₛ(x) - uₑ(x))\nend\n@info \"maximum error = $er\"","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"@assert er < 1e-3","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"As we can see, the error is quite small! Let's use Makie to visualize the solution in this simple (2d) example:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"xx = yy = range(-4; stop = 4, length = 200)\nvals =\n map(pt -> Inti.isinside(pt, Q) ? NaN : real(uₛ(pt) + uᵢ(pt)), Iterators.product(xx, yy))\nfig, ax, hm = heatmap(\n xx,\n yy,\n vals;\n colormap = :inferno,\n interpolate = true,\n axis = (aspect = DataAspect(), xgridvisible = false, ygridvisible = false),\n)\nviz!(Γ_msh; color = :white, segmentsize = 5)\nColorbar(fig[1, 2], hm)\nfig","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"While here we simply used a heatmap to visualize the solution, more complex problems may require a mesh-based visualization, where we would first create a mesh for the places where we want to visualize the solution.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Before moving on to the 3D example let us simply mention that, besides the fact that an analytic solution was available for comparisson, there was nothing special about the unit disk (or the use of GMSH). We could have, for instance, replaced the disk by shapes created parametrically:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"let\n # vertices of an equilateral triangle centered at the origin with a vertex at (0,1)\n a, b, c = SVector(0, 1), SVector(sqrt(3) / 2, -1 / 2), SVector(-sqrt(3) / 2, -1 / 2)\n function circle_f(center, radius)\n return s -> center + radius * SVector(cospi(2 * s[1]), sinpi(2 * s[1]))\n end\n disk1 = Inti.parametric_curve(circle_f(a, 1 / 2), 0, 1)\n disk2 = Inti.parametric_curve(circle_f(b, 1 / 2), 0, 1)\n disk3 = Inti.parametric_curve(circle_f(c, 1 / 2), 0, 1)\n Γ = disk1 ∪ disk2 ∪ disk3\n msh = Inti.meshgen(Γ; meshsize)\n Γ_msh = view(msh, Γ)\n Q = Inti.Quadrature(Γ_msh; qorder)\n S, D = Inti.single_double_layer(;\n op,\n target = Q,\n source = Q,\n compression = (method = :none,),\n correction = (method = :dim,),\n )\n L = I / 2 + D - im * k * S\n rhs = map(q -> -uᵢ(q.coords), Q)\n σ = L \\ rhs\n 𝒮, 𝒟 = Inti.single_double_layer_potential(; op, source = Q)\n uₛ = x -> 𝒟[σ](x) - im * k * 𝒮[σ](x)\n vals = map(\n pt -> Inti.isinside(pt, Q) ? NaN : real(uₛ(pt) + uᵢ(pt)),\n Iterators.product(xx, yy),\n )\n colorrange = (-2, 2)\n fig, ax, hm = heatmap(\n xx,\n yy,\n vals;\n colormap = :inferno,\n colorrange,\n interpolate = true,\n axis = (aspect = DataAspect(), xgridvisible = false, ygridvisible = false),\n )\n viz!(Γ_msh; color = :black, segmentsize = 4)\n Colorbar(fig[1, 2], hm)\n fig\nend","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"note: Near-field evaluation\nIn the example above we employed a naive evaluation of the integral potentials, and therefore the computed solution is expected to become innacurate near the obstacles. See the layer potential tutorial for more information on how to correct for this.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/#Three-dimensional-scattering","page":"Helmholtz scattering","title":"Three-dimensional scattering","text":"","category":"section"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We now consider the same problem in 3D. Unlike the 2D case, assembling dense matrix representations of the integral operators quickly becomes unfeasiable as the problem size increases. Inti adds support for compressing the underlying linear operators by wrapping external libraries. In this example, we will rely on HMatrices.jl to handle the compression.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"The visualization is also more involved, and we will use the Gmsh API to create a not only a mesh of the scatterer, but also of a punctured plane where we will visualize the solution. Here is the function that setups up the mesh:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"function gmsh_sphere(; meshsize, order = gorder, radius = 1, visualize = false, name)\n gmsh.initialize()\n gmsh.model.add(\"sphere-scattering\")\n gmsh.option.setNumber(\"Mesh.MeshSizeMax\", meshsize)\n gmsh.option.setNumber(\"Mesh.MeshSizeMin\", meshsize)\n sphere_tag = gmsh.model.occ.addSphere(0, 0, 0, radius)\n xl, yl, zl = -2 * radius, -2 * radius, 0\n Δx, Δy = 4 * radius, 4 * radius\n rectangle_tag = gmsh.model.occ.addRectangle(xl, yl, zl, Δx, Δy)\n outDimTags, _ =\n gmsh.model.occ.cut([(2, rectangle_tag)], [(3, sphere_tag)], -1, true, false)\n gmsh.model.occ.synchronize()\n gmsh.model.addPhysicalGroup(3, [sphere_tag], -1, \"omega\")\n gmsh.model.addPhysicalGroup(2, [dt[2] for dt in outDimTags], -1, \"sigma\")\n gmsh.model.mesh.generate(2)\n gmsh.model.mesh.setOrder(order)\n visualize && gmsh.fltk.run()\n gmsh.option.setNumber(\"Mesh.SaveAll\", 1) # otherwise only the physical groups are saved\n gmsh.write(name)\n return gmsh.finalize()\nend\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"As before, lets write a file with our mesh, and import it into Inti.jl:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"name_sphere = joinpath(@__DIR__, \"sphere.msh\")\ngmsh_sphere(; meshsize = (λ / 5), order = gorder, name = name_sphere, visualize = false)\nmsh_3d = Inti.import_mesh(name_sphere; dim = 3)","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"tip: Tip\nIf you pass visualize=true to gmsh_sphere, it will open a window with the current model. This is done by calling gmsh.fltk.run(). Note that the main julia thread will be blocked until the window is closed.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Since we created physical groups in Gmsh, we can use them to extract the relevant domains Ω and Σ:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Ω_3d = Inti.Domain(e -> \"omega\" ∈ Inti.labels(e), Inti.entities(msh_3d))\nΣ_3d = Inti.Domain(e -> \"sigma\" ∈ Inti.labels(e), Inti.entities(msh_3d))\nΓ_3d = Inti.boundary(Ω_3d)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We can now create a quadrature as before","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Γ_msh_3d = view(msh_3d, Γ_3d)\nQ_3d = Inti.Quadrature(Γ_msh_3d; qorder)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"tip: Writing/reading a mesh from disk\nWriting and reading a mesh to/from disk can be time consuming. You can avoid doing so by using import_mesh without a file name to import the mesh from the current gmsh session without the need to write it to disk.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Next we assemble the integral operators, indicating that we wish to compress them using hierarchical matrices:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"using HMatrices\nop_3d = Inti.Helmholtz(; k, dim = 3)\nS_3d, D_3d = Inti.single_double_layer(;\n op = op_3d,\n target = Q_3d,\n source = Q_3d,\n compression = (method = :hmatrix, tol = 1e-4),\n correction = (method = :dim,),\n)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Here is how much memory it would take to store the dense representation of these matrices:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"mem = 2 * length(S_3d) * 16 / 1e9 # 16 bytes per complex number, 1e9 bytes per GB, two matrices\nprintln(\"memory required to store S and D: $(mem) GB\")","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Even for this simple example, the dense representation of the integral operators as matrix is already quite expensive!","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"note: Compression methods\nIt is worth mentioning that hierchical matrices are not the only way to compress such integral operators, and may in fact not even be the best for the problem at hand. For example, one could use a fast multipole method (FMM), which has a much lighter memory footprint. See the the tutorial on compression methods for more information.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We will use the generalized minimal residual (GMRES) iterative solver, for the linear system. This requires us to define a linear operator L, approximating the combined-field operator, that supports the matrix-vector product. While it is possible to add two HMatrix objects to obtain a new HMatrix, this is somewhat more involved due to the addition of low-rank blocks (which requires a recompression). To keep things simple, we will use LinearMaps to lazily compose the operators:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"L_3d = I / 2 + LinearMap(D_3d) - im * k * LinearMap(S_3d)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We can now solve the linear system using GMRES solver:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"rhs_3d = map(Q_3d) do q\n x = q.coords\n return -uᵢ(x)\nend\nσ_3d, hist = gmres(\n L_3d,\n rhs_3d;\n log = true,\n abstol = 1e-6,\n verbose = false,\n restart = 100,\n maxiter = 100,\n)\n@show hist","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"As before, let us represent the solution using IntegralPotentials:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"𝒮_3d, 𝒟_3d = Inti.single_double_layer_potential(; op = op_3d, source = Q_3d)\nuₛ_3d = x -> 𝒟_3d[σ_3d](x) - im * k * 𝒮_3d[σ_3d](x)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"To check the result, we compare against the exact solution obtained through a series:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"sphbesselj(l, r) = sqrt(π / (2r)) * besselj(l + 1 / 2, r)\nsphbesselh(l, r) = sqrt(π / (2r)) * besselh(l + 1 / 2, r)\nsphharmonic(l, m, θ, ϕ) = GSL.sf_legendre_sphPlm(l, abs(m), cos(θ)) * exp(im * m * ϕ)\nfunction sphere_helmholtz_soundsoft(xobs; radius = 1, k = 1, θin = 0, ϕin = 0)\n x = xobs[1]\n y = xobs[2]\n z = xobs[3]\n r = sqrt(x^2 + y^2 + z^2)\n θ = acos(z / r)\n ϕ = atan(y, x)\n u = 0.0\n r < radius && return u\n function c(l, m)\n return -4π * im^l * sphharmonic(l, -m, θin, ϕin) * sphbesselj(l, k * radius) /\n sphbesselh(l, k * radius)\n end\n l = 0\n for l = 0:60\n for m = -l:l\n u += c(l, m) * sphbesselh(l, k * r) * sphharmonic(l, m, θ, ϕ)\n end\n l += 1\n end\n return u\nend\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We will compute the error on some point on the sphere of radius 2:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"uₑ_3d = (x) -> sphere_helmholtz_soundsoft(x; radius = 1, k = k, θin = π / 2, ϕin = 0)\ner_3d = maximum(1:100) do _\n x̂ = rand(Inti.Point3D) |> normalize # an SVector of unit norm\n x = 2 * x̂\n return abs(uₛ_3d(x) - uₑ_3d(x))\nend\n@info \"error with correction = $er_3d\"","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"@assert er_3d < 1e-3","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We see that, once again, the approximation is quite accurate. Let us now visualize the solution on the punctured plane (which we labeled as \"sigma\"). Since evaluating the integral representation of the solution at many points is expensive, we will use again use a method to accelerate the evaluation:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Σ_msh = view(msh_3d, Σ_3d)\ntarget = Inti.nodes(Σ_msh)\n\nS_viz, D_viz = Inti.single_double_layer(;\n op = op_3d,\n target,\n source = Q_3d,\n compression = (method = :hmatrix, tol = 1e-4),\n # correction for the nearfield (for visual purposes, set to `:none` to disable)\n correction = (method = :dim, maxdist = meshsize, target_location = :outside),\n)\n\nui_eval_msh = uᵢ.(target)\nus_eval_msh = D_viz * σ_3d - im * k * S_viz * σ_3d\nu_eval_msh = ui_eval_msh + us_eval_msh\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Finalize, we use Meshes.viz to visualize the scattered field:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"nv = length(Inti.nodes(Γ_msh_3d))\ncolorrange = extrema(real(u_eval_msh))\ncolormap = :inferno\nfig_3d = Figure(; size = (800, 500))\nax_3d = Axis3(fig_3d[1, 1]; aspect = :data)\nviz!(Γ_msh_3d; colorrange, colormap, color = zeros(nv), interpolate = true)\nviz!(Σ_msh; colorrange, colormap, color = real(u_eval_msh))\ncb = Colorbar(fig_3d[1, 2]; label = \"real(u)\", colormap, colorrange)\nfig_3d #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"TableOfContents()","category":"page"},{"location":"pluto-examples/toy_example/","page":"Toy example","title":"Toy example","text":"(Image: Pluto notebook)","category":"page"},{"location":"pluto-examples/toy_example/","page":"Toy example","title":"Toy example","text":"begin\n import Pkg as _Pkg\n haskey(ENV, \"PLUTO_PROJECT\") && _Pkg.activate(ENV[\"PLUTO_PROJECT\"])\nend;","category":"page"},{"location":"pluto-examples/toy_example/#Toy-example","page":"Toy example","title":"Toy example","text":"","category":"section"},{"location":"pluto-examples/toy_example/","page":"Toy example","title":"Toy example","text":"All examples in Inti.jl are autogenerated by executing the make.jl script in the docs folder. The workflow uses Pluto.jl to generate markdown files passed to Documenter.jl. The original pluto notebook files are downloadable from the example's page.","category":"page"},{"location":"pluto-examples/toy_example/","page":"Toy example","title":"Toy example","text":"using Inti","category":"page"},{"location":"docstrings/#Docstrings","page":"Docstrings","title":"Docstrings","text":"","category":"section"},{"location":"docstrings/","page":"Docstrings","title":"Docstrings","text":"CurrentModule = Inti","category":"page"},{"location":"docstrings/","page":"Docstrings","title":"Docstrings","text":"Modules = [Inti]","category":"page"},{"location":"docstrings/#Inti.Inti","page":"Docstrings","title":"Inti.Inti","text":"module Inti\n\nLibrary for solving integral equations using Nyström methods.\n\n\n\n\n\n","category":"module"},{"location":"docstrings/#Inti.COMPRESSION_METHODS","page":"Docstrings","title":"Inti.COMPRESSION_METHODS","text":"const COMPRESSION_METHODS = [:none, :hmatrix, :fmm]\n\nAvailable compression methods for the dense linear operators in Inti.\n\n\n\n\n\n","category":"constant"},{"location":"docstrings/#Inti.CORRECTION_METHODS","page":"Docstrings","title":"Inti.CORRECTION_METHODS","text":"const CORRECTION_METHODS = [:none, :dim, :hcubature]\n\nAvailable correction methods for the singular and nearly-singular integrals in Inti.\n\n\n\n\n\n","category":"constant"},{"location":"docstrings/#Inti.ENTITIES","page":"Docstrings","title":"Inti.ENTITIES","text":"const ENTITIES\n\nDictionary mapping EntityKey to GeometricEntity. Contains all entities created in a given session.\n\n\n\n\n\n","category":"constant"},{"location":"docstrings/#Inti.SAME_POINT_TOLERANCE","page":"Docstrings","title":"Inti.SAME_POINT_TOLERANCE","text":"SAME_POINTS_TOLERANCE\n\nTwo points x and y are considerd the same if norm(x-y) ≤ SAME_POINT_TOLERANCE.\n\n\n\n\n\n","category":"constant"},{"location":"docstrings/#Inti.AbstractDifferentialOperator","page":"Docstrings","title":"Inti.AbstractDifferentialOperator","text":"abstract type AbstractDifferentialOperator{N}\n\nA partial differential operator in dimension N.\n\nAbstractDifferentialOperator types are used to define AbstractKernels related to fundamental solutions of differential operators.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.AbstractKernel","page":"Docstrings","title":"Inti.AbstractKernel","text":"abstract type AbstractKernel{T}\n\nA kernel functions K with the signature K(target,source)::T.\n\nSee also: SingleLayerKernel, DoubleLayerKernel, AdjointDoubleLayerKernel, HyperSingularKernel\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.AbstractMesh","page":"Docstrings","title":"Inti.AbstractMesh","text":"abstract type AbstractMesh{N,T}\n\nAn abstract mesh structure in dimension N with primite data of type T (e.g. Float64 for double precision representation).\n\nConcrete subtypes of AbstractMesh should implement ElementIterator for accessing the mesh elements.\n\nSee also: Mesh\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.AdjointDoubleLayerKernel","page":"Docstrings","title":"Inti.AdjointDoubleLayerKernel","text":"struct AdjointDoubleLayerKernel{T,Op} <: AbstractKernel{T}\n\nGiven an operator Op, construct its free-space adjoint double-layer kernel. This corresponds to the transpose(γ₁,ₓ[G]), where G is the SingleLayerKernel. For operators such as Laplace or Helmholtz, this is simply the normal derivative of the fundamental solution respect to the target variable.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.BlockArray","page":"Docstrings","title":"Inti.BlockArray","text":"struct BlockArray{T<:StaticArray,N,S} <: AbstractMatrix{T,N}\n\nA struct which behaves like an Array{T,N}, but with the underlying data stored as a Matrix{S}, where S::Number = eltype(T) is the scalar type associated with T. This allows for the use of blas routines under-the-hood, while providing a convenient interface for handling matrices over StaticArrays.\n\nusing StaticArrays\nT = SMatrix{2,2,Int,4}\nB = Inti.BlockArray{T}([i*j for i in 1:4, j in 1:4])\n\n# output\n\n2×2 Inti.BlockArray{SMatrix{2, 2, Int64, 4}, 2, Int64}:\n [1 2; 2 4] [3 4; 6 8]\n [3 6; 4 8] [9 12; 12 16]\n\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.DimParameters","page":"Docstrings","title":"Inti.DimParameters","text":"struct DimParameters\n\nParameters associated with the density interpolation method used in bdim_correction.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Domain","page":"Docstrings","title":"Inti.Domain","text":"struct Domain\n\nRepresentation of a geometrical domain formed by a set of entities with the same geometric dimension. For basic set operations on domains are supported (union, intersection, difference, etc), and they all return a new Domain object.\n\nCalling keys(Ω) returns the set of EntityKeys that make up the domain; given a key, the underlying entities can be accessed with global_get_entity(key).\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Domain-Tuple{Function, Any}","page":"Docstrings","title":"Inti.Domain","text":"Domain([f::Function,] keys)\n\nCreate a domain from a set of EntityKeys. Optionally, a filter function f can be passed to filter the entities.\n\nNote that all entities in a domain must have the same geometric dimension.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.Domain-Tuple{Function, Inti.AbstractMesh}","page":"Docstrings","title":"Inti.Domain","text":"Domain(f::Function, msh::AbstractMesh)\n\nCall Domain(f, ents) on ents = entities(msh).\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.DoubleLayerKernel","page":"Docstrings","title":"Inti.DoubleLayerKernel","text":"struct DoubleLayerKernel{T,Op} <: AbstractKernel{T}\n\nGiven an operator Op, construct its free-space double-layer kernel. This corresponds to the γ₁ trace of the SingleLayerKernel. For operators such as Laplace or Helmholtz, this is simply the normal derivative of the fundamental solution respect to the source variable.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Elastostatic","page":"Docstrings","title":"Inti.Elastostatic","text":"struct Elastostatic{N,T} <: AbstractDifferentialOperator{N}\n\nElastostatic operator in N dimensions: -μΔu - (μ+λ)∇(∇⋅u)\n\nNote that the displacement u is a vector of length N since this is a vectorial problem.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ElementIterator","page":"Docstrings","title":"Inti.ElementIterator","text":"struct ElementIterator{E,M} <: AbstractVector{E}\n\nStructure to lazily access elements of type E in a mesh of type M. This is particularly useful for LagrangeElements, where the information to reconstruct the element is stored in the mesh connectivity matrix.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.EmbeddedQuadrature","page":"Docstrings","title":"Inti.EmbeddedQuadrature","text":"struct EmbeddedQuadrature{L,H,D} <: ReferenceQuadrature{D}\n\nA quadrature rule for the reference shape D based on a high-order quadrature of type H and a low-order quadrature of type L. The low-order quadrature rule is embedded in the sense that its n nodes are exactly the first n nodes of the high-order quadrature rule.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.EntityKey","page":"Docstrings","title":"Inti.EntityKey","text":"EntityKey\n\nUsed to represent the key of a GeometricEntity, comprised of a dim and a tag field, where dim is the geometrical dimension of the entity, and tag is a unique integer identifying the entity.\n\nThe sign of the tag field is used to distinguish the orientation of the entity, and is ignored when comparing two EntityKeys for equality.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Fejer","page":"Docstrings","title":"Inti.Fejer","text":"struct Fejer{N}\n\nN-point Fejer's first quadrature rule for integrating a function over [0,1]. Exactly integrates all polynomials of degree ≤ N-1.\n\nusing Inti\n\nq = Inti.Fejer(;order=10)\n\nInti.integrate(cos,q) ≈ sin(1) - sin(0)\n\n# output\n\ntrue\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Gauss","page":"Docstrings","title":"Inti.Gauss","text":"struct Gauss{D,N} <: ReferenceQuadrature{D}\n\nTabulated N-point symmetric Gauss quadrature rule for integration over D.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.GaussLegendre","page":"Docstrings","title":"Inti.GaussLegendre","text":"struct GaussLegendre{N,T}\n\nN-point Gauss-Legendre quadrature rule for integrating a function over [0,1]. Exactly integrates all polynomials of degree ≤ 2N-1.\n\nusing Inti\n\nq = Inti.GaussLegendre(;order=10)\n\nInti.integrate(cos,q) ≈ sin(1) - sin(0)\n\n# output\n\ntrue\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.GeometricEntity","page":"Docstrings","title":"Inti.GeometricEntity","text":"struct GeometricEntity\n\nGeometrical objects such as lines, surfaces, and volumes.\n\nGeometrical entities are stored in a global ENTITIES dictionary mapping EntityKey to the corresponding GeometricEntity, and usually entities are manipulated through their keys.\n\nA GeometricEntity can also contain a pushforward field used to parametrically represent the entry as the image of a reference domain (pushforward.domain) under some function (pushforward.parametrization).\n\nNote that entities are manipulated through their keys, and the GeometricEntity constructor returns the key of the created entity; to retrieve the entity, use the global_get_entity function.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.GeometricEntity-Tuple{String}","page":"Docstrings","title":"Inti.GeometricEntity","text":"GeometricEntity(shape::String [; translation, rotation, scaling, kwargs...])\n\nConstructs a geometric entity with the specified shape and optional parameters, and returns its key.\n\nArguments\n\nshape::String: The shape of the geometric entity.\ntranslation: The translation vector of the geometric entity. Default is SVector(0, 0, 0).\nrotation: The rotation vector of the geometric entity. Default is SVector(0, 0, 0).\nscaling: The scaling vector of the geometric entity. Default is SVector(1, 1, 1).\nkwargs...: Additional keyword arguments to be passed to the shape constructor.\n\nSupported shapes\n\nellipsoid\ntorus\nbean\nacorn\ncushion\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.Helmholtz-Tuple{}","page":"Docstrings","title":"Inti.Helmholtz","text":"Helmholtz(; k, dim)\n\nHelmholtz operator in dim dimensions: -Δu - k²u.\n\nThe parameter k can be a real or complex number. For purely imaginary wavenumbers, consider using the Yukawa kernel.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.HyperRectangle","page":"Docstrings","title":"Inti.HyperRectangle","text":"struct HyperRectangle{N,T} <: ReferenceInterpolant{ReferenceHyperCube{N},T}\n\nAxis-aligned hyperrectangle in N dimensions given by low_corner::SVector{N,T} and high_corner::SVector{N,T}.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.HyperSingularKernel","page":"Docstrings","title":"Inti.HyperSingularKernel","text":"struct HyperSingularKernel{T,Op} <: AbstractKernel{T}\n\nGiven an operator Op, construct its free-space hypersingular kernel. This corresponds to the transpose(γ₁,ₓγ₁[G]), where G is the SingleLayerKernel. For operators such as Laplace or Helmholtz, this is simply the normal derivative respect to the target variable of the DoubleLayerKernel.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.IntegralOperator","page":"Docstrings","title":"Inti.IntegralOperator","text":"struct IntegralOperator{T} <: AbstractMatrix{T}\n\nA discrete linear integral operator given by\n\nIu(x) = int_Gamma_s K(xy)u(y) ds_y x in Gamma_t\n\nwhere Gamma_s and Gamma_t are the source and target domains, respectively.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.IntegralPotential","page":"Docstrings","title":"Inti.IntegralPotential","text":"struct IntegralPotential\n\nRepresent a potential given by a kernel and a quadrature over which integration is performed.\n\nIntegralPotentials are created using IntegralPotential(kernel, quadrature).\n\nEvaluating an integral potential requires a density σ (defined over the quadrature nodes of the source mesh) and a point x at which to evaluate the integral\n\nint_Gamma K(oldsymbolxoldsymboly)sigma(y) ds_y x not in Gamma\n\nAssuming 𝒮 is an integral potential and σ is a vector of values defined on quadrature, calling 𝒮[σ] creates an anonymous function that can be evaluated at any point x.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Kronrod","page":"Docstrings","title":"Inti.Kronrod","text":"struct Kronrod{D,N} <: ReferenceQuadrature{D}\n\nN-point Kronrod rule obtained by adding n+1 points to a Gauss quadrature containing n points. The order is either 3n + 1 for n even or 3n + 2 for n odd.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.LagrangeCube","page":"Docstrings","title":"Inti.LagrangeCube","text":"const LagrangeSquare = LagrangeElement{ReferenceSquare}\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.LagrangeElement","page":"Docstrings","title":"Inti.LagrangeElement","text":"struct LagrangeElement{D,Np,T} <: ReferenceInterpolant{D,T}\n\nA polynomial p : D → T uniquely defined by its Np values on the Np reference nodes of D.\n\nThe return type T should be a vector space (i.e. support addition and multiplication by scalars). For istance, T could be a number or a vector, but not a Tuple.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.LagrangeLine","page":"Docstrings","title":"Inti.LagrangeLine","text":"const LagrangeLine = LagrangeElement{ReferenceLine}\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.LagrangeSquare","page":"Docstrings","title":"Inti.LagrangeSquare","text":"const LagrangeSquare = LagrangeElement{ReferenceSquare}\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.LagrangeTetrahedron","page":"Docstrings","title":"Inti.LagrangeTetrahedron","text":"const LagrangeTetrahedron = LagrangeElement{ReferenceTetrahedron}\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.LagrangeTriangle","page":"Docstrings","title":"Inti.LagrangeTriangle","text":"const LagrangeTriangle = LagrangeElement{ReferenceTriangle}\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Laplace-Tuple{}","page":"Docstrings","title":"Inti.Laplace","text":"Laplace(; dim)\n\nLaplace's differential operator in dim dimension: -Δu. ```\n\nNote the negative sign in the definition.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.Mesh","page":"Docstrings","title":"Inti.Mesh","text":"struct Mesh{N,T} <: AbstractMesh{N,T}\n\nUnstructured mesh defined by a set of nodes(of typeSVector{N,T}`), and a dictionary mapping element types to connectivity matrices. Each columns of a given connectivity matrix stores the integer tags of the nodes in the mesh comprising the element.\n\nAdditionally, the mesh contains a mapping from EntityKeys to the tags of the elements composing the entity. This can be used to extract submeshes from a given mesh using e.g. view(msh,Γ) or msh[Γ], where Γ is a Domain.\n\nSee elements for a way to iterate over the elements of a mesh.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ModifiedHelmholtz","page":"Docstrings","title":"Inti.ModifiedHelmholtz","text":"const ModifiedHelmholtz\n\nType alias for the Yukawa operator.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.MultiIndex","page":"Docstrings","title":"Inti.MultiIndex","text":"MultiIndex{N}\n\nWrapper around NTuple{N,Int} mimicking a multi-index in ℤ₀ᴺ.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ParametricElement","page":"Docstrings","title":"Inti.ParametricElement","text":"ParametricElement{D,T,F} <: ReferenceInterpolant{D,T}\n\nAn element represented through a explicit function f mapping D into the element. For performance reasons, f should take as input a StaticVector and return a StaticVector or StaticArray.\n\nSee also: ReferenceInterpolant, LagrangeElement\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ParametricElement-Union{Tuple{T}, Tuple{N}, Tuple{Any, Inti.HyperRectangle{N, T}}} where {N, T}","page":"Docstrings","title":"Inti.ParametricElement","text":"ParametricElement(f, d::HyperRectangle)\n\nConstruct the element defined as the image of f over d.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.PolynomialSpace","page":"Docstrings","title":"Inti.PolynomialSpace","text":"struct PolynomialSpace{D,K}\n\nThe space of all polynomials of degree ≤K, commonly referred to as ℙₖ.\n\nThe type parameter D, of singleton type, is used to determine the reference domain of the polynomial basis. In particular, when D is a hypercube in d dimensions, the precise definition is ℙₖ = span{𝐱ᶿ : 0≤max(θ)≤ K}; when D is a d-dimensional simplex, the space is ℙₖ = span{𝐱ᶿ : 0≤sum(θ)≤ K}, where θ ∈ 𝐍ᵈ is a multi-index.\n\nSee also: monomial_basis, lagrange_basis\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Quadrature","page":"Docstrings","title":"Inti.Quadrature","text":"struct Quadrature{N,T} <: AbstractVector{QuadratureNode{N,T}}\n\nA collection of QuadratureNodes used to integrate over an AbstractMesh.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Quadrature-Tuple{Inti.Domain}","page":"Docstrings","title":"Inti.Quadrature","text":"Quadrature(Ω::Domain; meshsize, qorder)\n\nConstruct a Quadrature over the domain Ω with a mesh of size meshsize and quadrature order qorder.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.Quadrature-Union{Tuple{T}, Tuple{N}, Tuple{Inti.AbstractMesh{N, T}, Dict}} where {N, T}","page":"Docstrings","title":"Inti.Quadrature","text":"Quadrature(msh::AbstractMesh, etype2qrule::Dict)\nQuadrature(msh::AbstractMesh, qrule::ReferenceQuadrature)\nQuadrature(msh::AbstractMesh; qorder)\n\nConstruct a Quadrature for msh, where for each element type E in msh the reference quadrature q = etype2qrule[E] is used. When a single qrule is passed, it is used for all element types in msh.\n\nIf an order keyword is passed, a default quadrature of the desired order is used for each element type usig _qrule_for_reference_shape.\n\nFor co-dimension one elements, the normal vector is also computed and stored in the QuadratureNodes.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.QuadratureNode","page":"Docstrings","title":"Inti.QuadratureNode","text":"QuadratureNode{N,T<:Real}\n\nA point in ℝᴺ with a weight for performing numerical integration. A QuadratureNode can optionally store a normal vector.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceCube","page":"Docstrings","title":"Inti.ReferenceCube","text":"const ReferenceCube = ReferenceHyperCube{3}\n\nSingleton type representing the unit cube [0,1]³.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceHyperCube","page":"Docstrings","title":"Inti.ReferenceHyperCube","text":"struct ReferenceHyperCube{N} <: ReferenceShape{N}\n\nSingleton type representing the axis-aligned hypercube in N dimensions with the lower corner at the origin and the upper corner at (1,1,…,1).\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceInterpolant","page":"Docstrings","title":"Inti.ReferenceInterpolant","text":"abstract type ReferenceInterpolant{D,T}\n\nInterpolanting function mapping points on the domain D<:ReferenceShape (of singleton type) to a value of type T.\n\nInstances el of ReferenceInterpolant are expected to implement:\n\nel(x̂): evaluate the interpolation scheme at the (reference) coordinate x̂ ∈ D.\njacobian(el,x̂) : evaluate the jacobian matrix of the interpolation at the (reference) coordinate x ∈ D.\n\nnote: Note\nFor performance reasons, both el(x̂) and jacobian(el,x̂) should take as input a StaticVector and output a static vector or static array.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceLine","page":"Docstrings","title":"Inti.ReferenceLine","text":"const ReferenceLine = ReferenceHyperCube{1}\n\nSingleton type representing the [0,1] segment.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceQuadrature","page":"Docstrings","title":"Inti.ReferenceQuadrature","text":"abstract type ReferenceQuadrature{D}\n\nA quadrature rule for integrating a function over the domain D <: ReferenceShape.\n\nCalling x,w = q() returns the nodes x, given as SVectors, and weights w, for performing integration over domain(q).\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceShape","page":"Docstrings","title":"Inti.ReferenceShape","text":"abstract type ReferenceShape\n\nA fixed reference domain/shape. Used mostly for defining more complex shapes as transformations mapping an ReferenceShape to some region of ℜᴹ.\n\nSee e.g. ReferenceLine or ReferenceTriangle for some examples of concrete subtypes.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceSimplex","page":"Docstrings","title":"Inti.ReferenceSimplex","text":"struct ReferenceSimplex{N}\n\nSingleton type representing the N-simplex with N+1 vertices (0,...,0),(0,...,0,1),(0,...,0,1,0),(1,0,...,0)\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceSquare","page":"Docstrings","title":"Inti.ReferenceSquare","text":"const ReferenceSquare = ReferenceHyperCube{2}\n\nSingleton type representing the unit square [0,1]².\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceTetrahedron","page":"Docstrings","title":"Inti.ReferenceTetrahedron","text":"struct ReferenceTetrahedron\n\nSingleton type representing the tetrahedron with vertices (0,0,0),(0,0,1),(0,1,0),(1,0,0)\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceTriangle","page":"Docstrings","title":"Inti.ReferenceTriangle","text":"struct ReferenceTriangle\n\nSingleton type representing the triangle with vertices (0,0),(1,0),(0,1)\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.SingleLayerKernel","page":"Docstrings","title":"Inti.SingleLayerKernel","text":"struct SingleLayerKernel{T,Op} <: AbstractKernel{T}\n\nThe free-space single-layer kernel (i.e. the fundamental solution) of an Op <: AbstractDifferentialOperator.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Stokes-Tuple{}","page":"Docstrings","title":"Inti.Stokes","text":"Stokes(; μ, dim)\n\nStokes operator in dim dimensions: -μΔu + p u.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.SubMesh","page":"Docstrings","title":"Inti.SubMesh","text":"struct SubMesh{N,T} <: AbstractMesh{N,T}\n\nView into a parent mesh over a given domain.\n\nA submesh implements the interface for AbstractMesh; therefore you can iterate over elements of the submesh just like you would with a mesh.\n\nConstruct SubMeshs using view(parent,Ω::Domain).\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.TensorProductQuadrature","page":"Docstrings","title":"Inti.TensorProductQuadrature","text":"TensorProductQuadrature{N,Q}\n\nA tensor-product of one-dimension quadrature rules. Integrates over [0,1]^N.\n\nExamples\n\nqx = Inti.Fejer(10)\nqy = Inti.Fejer(15)\nq = Inti.TensorProductQuadrature(qx,qy)\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.VioreanuRokhlin","page":"Docstrings","title":"Inti.VioreanuRokhlin","text":"struct VioreanuRokhlin{D,N} <: ReferenceQuadrature{D}\n\nTabulated N-point Vioreanu-Rokhlin quadrature rule for integration over D.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Yukawa-Tuple{}","page":"Docstrings","title":"Inti.Yukawa","text":"Yukawa(; λ, dim)\n\nYukawa operator, also known as modified Helmholtz, in dim dimensions: -Δu + λ²u.\n\nThe parameter λ is a positive number. Note the negative sign in front of the Laplacian.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Base.iterate","page":"Docstrings","title":"Base.iterate","text":"iterate(Ω::Domain)\n\nIterating over a domain means iterating over its entities.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti._copyto!-Tuple{AbstractMatrix{<:Number}, AbstractMatrix{<:StaticArraysCore.SMatrix}}","page":"Docstrings","title":"Inti._copyto!","text":"_copyto!(target,source)\n\nDefaults to Base.copyto!, but includes some specialized methods to copy from a Matrix of SMatrix to a Matrix of Numbers and viceversa.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._get_gauss_qcoords_and_qweights-Tuple{Type{<:Inti.ReferenceShape}, Any}","page":"Docstrings","title":"Inti._get_gauss_qcoords_and_qweights","text":"_get_gauss_and_qweights(R::Type{<:ReferenceShape{D}}, N) where D\n\nReturns the N-point symmetric gaussian qnodes and qweights (x, w) for integration over R.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._get_vioreanurokhlin_qcoords_and_qweights-Tuple{Type{<:Inti.ReferenceShape}, Any}","page":"Docstrings","title":"Inti._get_vioreanurokhlin_qcoords_and_qweights","text":"_get_vioreanurokhlin_qcoords_and_qweights(R::Type{<:ReferenceShape{D}}, N) where D\n\nReturns the N-point Vioreanu-Rokhlin qnodes and qweights (x, w) for integration over R.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._green_multiplier-Tuple{Symbol}","page":"Docstrings","title":"Inti._green_multiplier","text":"_green_multiplier(s::Symbol)\n\nReturn -1.0 if s == :inside, 0.0 if s == :outside, and -0.5 if s == :on; otherwise, throw an error. The orientation is relative to the normal of the bounding curve/surface.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._green_multiplier-Union{Tuple{N}, Tuple{StaticArraysCore.SVector, Inti.Quadrature{N}}} where N","page":"Docstrings","title":"Inti._green_multiplier","text":"_green_multiplier(x, quad)\n\nHelper function to help determine the constant σ in the Green identity S[γ₁u](x)\n\nD[γ₀u](x) + σ*u(x) = 0. This can be used as a predicate to determine whether a\n\npoint is inside a domain or not.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._meshgen-Tuple{Any, Inti.HyperRectangle, NTuple{N, T} where {N, T}}","page":"Docstrings","title":"Inti._meshgen","text":"_meshgen(f,d::HyperRectangle,sz)\n\nCreate prod(sz) elements of ParametricElement type representing the push forward of f on each of the subdomains defined by a uniform cartesian mesh of d of size sz.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._normal-Union{Tuple{StaticArraysCore.SMatrix{N, M}}, Tuple{M}, Tuple{N}} where {N, M}","page":"Docstrings","title":"Inti._normal","text":"_normal(jac::SMatrix{M,N})\n\nGiven a an M by N matrix representing the jacobian of a codimension one object, compute the normal vector.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._qrule_for_reference_shape-Tuple{Any, Any}","page":"Docstrings","title":"Inti._qrule_for_reference_shape","text":"_qrule_for_reference_shape(ref,order)\n\nGiven a reference shape and a desired quadrature order, return an appropiate quadrature rule.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.acorn-Tuple{}","page":"Docstrings","title":"Inti.acorn","text":"acorn(; translation, rotation, scaling, labels)\n\nCreate an acorn entity in 3D, and apply optional transformations. Returns the key.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.adaptive_correction-Tuple{Inti.IntegralOperator}","page":"Docstrings","title":"Inti.adaptive_correction","text":"adaptive_correction(iop::IntegralOperator; tol, maxdist = farfield_distance(iop; atol), maxsplit = 1000])\n\nGiven an integral operator iop, this function provides a sparse correction to iop for the entries i,j such that the distance between the i-th target and the j-th source is less than maxdist.\n\nChoosing maxdist is a trade-off between accuracy and efficiency. The smaller the value, the fewer corrections are needed, but this may compromise the accuracy. For a fixed quadrature, the size of maxdist has to grow as the tolerance tol decreases. The default [farfield_distance(iop; tol)](@ref) provides a heuristic to determine a suitablemaxdist`.\n\nThe correction is computed by using the adaptive_integration routine, with a tolerance atol and a maximum number of subdivisions maxsplit; see adaptive_integration for more details.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.adaptive_integration-Tuple{Any, Inti.EmbeddedQuadrature}","page":"Docstrings","title":"Inti.adaptive_integration","text":"adaptive_integration(f, τ̂::RefernceShape; kwargs...)\nadaptive_integration(f, qrule::EmbeddedQuadrature; kwargs...)\n\nUse an adaptive procedure to estimate the integral of f over τ̂ = domain(qrule). The following optional keyword arguments are available:\n\natol::Real=0.0: absolute tolerance for the integral estimate\nrtol::Real=0.0: relative tolerance for the integral estimate\nmaxsplit::Int=1000: maximum number of times to split the domain\nnorm::Function=LinearAlgebra.norm: norm to use for error estimates\nbuffer::BinaryHeap: a pre-allocated buffer to use for the adaptive procedure (see allocate_buffer)\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.adaptive_integration_singular-Tuple{Any, Inti.ReferenceHyperCube{1}, Any}","page":"Docstrings","title":"Inti.adaptive_integration_singular","text":"adaptive_integration_singular(f, τ̂, x̂ₛ; kwargs...)\n\nSimilar to adaptive_integration, but indicates that f has an isolated (integrable) singularity at x̂ₛ ∈ x̂ₛ.\n\nThe integration is performed by splitting τ̂ so that x̂ₛ is a fixed vertex, guaranteeing that f is never evaluated at x̂ₛ. Aditionally, a suitable change of variables may be applied to alleviate the singularity and improve the rate of convergence.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.adj_double_layer_hypersingular-Tuple{}","page":"Docstrings","title":"Inti.adj_double_layer_hypersingular","text":"adj_double_layer_hypersingular(; op, target, source, compression,\ncorrection)\n\nSimilar to single_double_layer, but for the adjoint double-layer and hypersingular operators. See the documentation of [single_double_layer] for a description of the arguments.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.allocate_buffer-Tuple{Any, Inti.EmbeddedQuadrature}","page":"Docstrings","title":"Inti.allocate_buffer","text":"allocate_buffer(f, quad::EmbeddedQuadrature)\n\nCreate the buffer needed for the call adaptive_integration(f, τ̂; buffer, ...).\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.ambient_dimension","page":"Docstrings","title":"Inti.ambient_dimension","text":"ambient_dimension(x)\n\nDimension of the ambient space where x lives. For geometrical objects this can differ from its geometric_dimension; for example a triangle in ℝ³ has ambient dimension 3 but geometric dimension 2, while a curve in ℝ³ has ambient dimension 3 but geometric dimension 1.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.assemble_fmm-Tuple{Inti.IntegralOperator, Vararg{Any}}","page":"Docstrings","title":"Inti.assemble_fmm","text":"assemble_fmm(iop; atol)\n\nSet up a 2D or 3D FMM for evaluating the discretized integral operator iop associated with the op. In 2D the FMM2D or FMMLIB2D library is used (whichever was most recently loaded) while in 3D FMM3D is used.\n\nwarning: FMMLIB2D\nFMMLIB2D does no checking for if the targets and sources coincide, and will return Inf values if iop.target !== iop.source, but there is a point x ∈ iop.target such that x ∈ iop.source.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.assemble_hmatrix-Tuple","page":"Docstrings","title":"Inti.assemble_hmatrix","text":"assemble_hmatrix(iop[; atol, rank, rtol, eta])\n\nAssemble an H-matrix representation of the discretized integral operator iop using the HMatrices.jl library.\n\nSee the documentation of HMatrices for more details on usage and other keyword arguments.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.assemble_matrix-Tuple{Inti.IntegralOperator}","page":"Docstrings","title":"Inti.assemble_matrix","text":"assemble_matrix(iop::IntegralOperator; threads = true)\n\nAssemble a dense matrix representation of an IntegralOperator.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.bdim_correction-Tuple{Any, Any, Inti.Quadrature, Any, Any}","page":"Docstrings","title":"Inti.bdim_correction","text":"bdim_correction(op,X,Y,S,D; green_multiplier, kwargs...)\n\nGiven a op and a (possibly innacurate) discretizations of its single and double-layer operators S and D (taking a vector of values on Y and returning a vector on of values on X), compute corrections δS and δD such that S + δS and D + δD are more accurate approximations of the underlying single- and double-layer integral operators.\n\nSee [7] for more details on the method.\n\nArguments\n\nRequired:\n\nop must be an AbstractDifferentialOperator\nY must be a Quadrature object of a closed surface\nX is either inside, outside, or on Y\nS and D are approximations to the single- and double-layer operators for op taking densities in Y and returning densities in X.\ngreen_multiplier (keyword argument) is a vector with the same length as X storing the value of μ(x) for x ∈ X in the Green identity S\\[γ₁u\\](x) - D\\[γ₀u\\](x) + μ*u(x) = 0. See _green_multiplier.\n\nOptional kwargs:\n\nparameters::DimParameters: parameters associated with the density interpolation method\nderivative: if true, compute the correction to the adjoint double-layer and hypersingular operators instead. In this case, S and D should be replaced by a (possibly innacurate) discretization of adjoint double-layer and hypersingular operators, respectively.\nmaxdist: distance beyond which interactions are considered sufficiently far so that no correction is needed. This is used to determine a threshold for nearly-singular corrections when X and Y are different surfaces. When X === Y, this is not needed.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.bean-Tuple{}","page":"Docstrings","title":"Inti.bean","text":"bean(; translation, rotation, scaling, labels)\n\nCreate a bean entity in 3D, and apply optional transformations. Returns the key.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.boundary-Tuple{Inti.Domain}","page":"Docstrings","title":"Inti.boundary","text":"boundary(Ω::Domain)\n\nReturn the external boundaries of a domain.\n\nSee also: external_boundary, internal_boundary, skeleton.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.boundary_idxs-Tuple{Inti.LagrangeElement{Inti.ReferenceHyperCube{1}}}","page":"Docstrings","title":"Inti.boundary_idxs","text":"boundary_idxs(el::LagrangeElement)\n\nThe indices of the nodes in el that define the boundary of the element.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.cart2sph-Tuple{Any, Any, Any}","page":"Docstrings","title":"Inti.cart2sph","text":"cart2sph(x,y,z)\n\nMap cartesian coordinates x,y,z to spherical ones r, θ, φ representing the radius, elevation, and azimuthal angle respectively. The convention followed is that 0 ≤ θ ≤ π and -π < φ ≤ π. Same as the cart2sph function in MATLAB.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.connectivity-Tuple{Inti.Mesh, DataType}","page":"Docstrings","title":"Inti.connectivity","text":"connectivity(msh::AbstractMesh,E::DataType)\n\nReturn the connectivity matrix for elements of type E in msh. The integer tags in the matrix refer to the points in nodes(msh)\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.coords-Tuple{T} where T","page":"Docstrings","title":"Inti.coords","text":"coords(q)\n\nReturn the spatial coordinates of q.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.cushion-Tuple{}","page":"Docstrings","title":"Inti.cushion","text":"cushion(; translation, rotation, scaling, labels)\n\nCreate a cushion entity in 3D, and apply optional transformations. Returns the key.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.decompose","page":"Docstrings","title":"Inti.decompose","text":"decompose(s::ReferenceShape,x)\n\nDecompose an ReferenceShape into LagrangeElements so that x is a fixed vertex of the children elements.\n\nThe decomposed elements may be oriented differently than the parent, and thus care has to be taken regarding e.g. normal vectors.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.degree-Union{Tuple{Type{<:Inti.LagrangeElement{D, Np}}}, Tuple{Np}, Tuple{D}} where {D, Np}","page":"Docstrings","title":"Inti.degree","text":"degree(el::LagrangeElement)\ndegree(el::Type{<:LagrangeElement})\n\nThe polynomial degree el.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.dimension-Union{Tuple{Type{Inti.PolynomialSpace{D, K}}}, Tuple{K}, Tuple{D}} where {D, K}","page":"Docstrings","title":"Inti.dimension","text":"dimension(space)\n\nThe length of a basis for space; i.e. the number of linearly independent elements required to span space.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.dom2elt-Tuple{Inti.AbstractMesh, Inti.Domain, DataType}","page":"Docstrings","title":"Inti.dom2elt","text":"dom2elt(m::Mesh,Ω,E)::Vector{Int}\n\nCompute the element indices idxs of the elements of type E composing Ω.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.dom2qtags-Tuple{Inti.Quadrature, Inti.Domain}","page":"Docstrings","title":"Inti.dom2qtags","text":"dom2qtags(Q::Quadrature, dom::Domain)\n\nGiven a domain, return the indices of the quadratures nodes in Q associated to its quadrature.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.domain","page":"Docstrings","title":"Inti.domain","text":"domain(f)\n\nGiven a function-like object f: Ω → R, return Ω.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.domain-Tuple{Inti.AbstractMesh}","page":"Docstrings","title":"Inti.domain","text":"domain(msh::AbstractMesh)\n\nReturn a [Domain] containing of all entities covered by the mesh.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.domain-Tuple{Inti.Quadrature}","page":"Docstrings","title":"Inti.domain","text":"domain(Q::Quadrature)\n\nThe Domain over which Q performs integration.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.domain-Union{Tuple{Inti.ReferenceQuadrature{D}}, Tuple{D}} where D","page":"Docstrings","title":"Inti.domain","text":"domain(q::ReferenceQuadrature)\n\nThe domain of integratino for quadrature rule q.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.element_types","page":"Docstrings","title":"Inti.element_types","text":"element_types(msh::AbstractMesh)\n\nReturn the element types present in the msh.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.elements","page":"Docstrings","title":"Inti.elements","text":"elements(msh::AbstractMesh [, E::DataType])\n\nReturn the elements of a msh. Passing and element type E will restricts to elements of that type.\n\nA common pattern to avoid type-instabilies in performance critical parts of the code is to use a function barrier, as illustrated below:\n\nfor E in element_types(msh)\n _long_computation(elements(msh, E), args...)\nend\n\n@noinline function _long_computation(iter, args...)\n for el in iter # the type of el is known at compile time\n # do something with el\n end\nend\n\nwhere a dynamic dispatch is performed only on the element types (typically small for a given mesh).\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.ellipsoid-Tuple{}","page":"Docstrings","title":"Inti.ellipsoid","text":"ellipsoid(; translation, rotation, scaling, labels)\n\nCreate an ellipsoid entity in 3D, and apply optional transformations. Returns the key of the created entity.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.ent2etags-Tuple{Inti.Mesh}","page":"Docstrings","title":"Inti.ent2etags","text":"ent2etags(msh::AbstractMesh)\n\nReturn a dictionary mapping entities to a dictionary of element types to element tags.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.entities-Tuple{Inti.Domain}","page":"Docstrings","title":"Inti.entities","text":"entities(Ω::Domain)\n\nReturn all entities making up a domain (as a set of EntityKeys).\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.etype_to_nearest_points-Tuple{Any, Inti.Quadrature}","page":"Docstrings","title":"Inti.etype_to_nearest_points","text":"etype_to_nearest_points(X,Y::Quadrature; maxdist)\n\nFor each element el in Y.mesh, return a list with the indices of all points in X for which el is the nearest element. Ignore indices for which the distance exceeds maxdist.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.external_boundary-Tuple{Inti.Domain}","page":"Docstrings","title":"Inti.external_boundary","text":"external_boundary(Ω::Domain)\n\nReturn the external boundaries inside a domain. These are entities in the skeleton of Ω which are not in the internal boundaries of Ω.\n\nSee also: internal_boundary, skeleton.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.farfield_distance-Tuple{Inti.IntegralOperator}","page":"Docstrings","title":"Inti.farfield_distance","text":"farfield_distance(iop::IntegralOperator; tol, maxiter = 10)\nfarfield_distance(K, Q::Quadrature; tol, maxiter = 10)\n\nReturn an estimate of the distance d such that the (absolute) quadrature error of the integrand y -> K(x,y) is below tol for x at a distance d from the center of the largest element in Q; when an integral operator is passed, we have Q::Quadrature = source(iop) and K = kernel(iop).\n\nThe estimate is computed by finding the first integer n such that the quadrature error on the largest element τ lies below tol for points x satisfying dist(x,center(τ)) = n*radius(τ).\n\nNote that the desired tolerance may not be achievable if the quadrature rule is not accurate enough, or if τ is not sufficiently small, and therefore a maximum number of iterations maxiter is provided to avoid an infinite loops. In such cases, it is recommended that you either increase the quadrature order, or decrease the mesh size.\n\nNote: this is obviously a heuristic, and may not be accurate in all cases.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.fibonnaci_points_sphere-Tuple{Any, Any, Any}","page":"Docstrings","title":"Inti.fibonnaci_points_sphere","text":"fibonnaci_points_sphere(N,r,c)\n\nReturn N points distributed (roughly) in a uniform manner on the sphere of radius r centered at c.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.flip_normal-Tuple{Inti.QuadratureNode}","page":"Docstrings","title":"Inti.flip_normal","text":"flip_normal(q::QuadratureNode)\n\nReturn a new QuadratureNode with the normal vector flipped.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.gauss_curvature-Tuple{Inti.Quadrature}","page":"Docstrings","title":"Inti.gauss_curvature","text":"gauss_curvature(Q::Quadrature)\n\nCompute the gauss_curvature at each quadrature node in Q.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.gauss_curvature-Tuple{Inti.ReferenceInterpolant, Any}","page":"Docstrings","title":"Inti.gauss_curvature","text":"gauss_curvature(τ, x̂)\n\nCalculate the Gaussian curvature of the element τ at the parametric coordinate x̂.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.geometric_dimension","page":"Docstrings","title":"Inti.geometric_dimension","text":"geometric_dimension(x)\n\nNNumber of degrees of freedom necessary to locally represent the geometrical object. For example, lines have geometric dimension of 1 (whether in ℝ² or in ℝ³), while surfaces have geometric dimension of 2.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.global_get_entity-Tuple{Inti.EntityKey}","page":"Docstrings","title":"Inti.global_get_entity","text":"global_get_entity(k::EntityKey)\n\nRetrieve the GeometricEntity corresponding to the EntityKey k from the global ENTITIES dictionary.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.gmsh_curve-Tuple","page":"Docstrings","title":"Inti.gmsh_curve","text":"gmsh_curve(f::Function, a, b; npts=100, meshsize = 0, tag=-1)\n\nCreate a curve in the current gmsh model given by {f(t) : t ∈ (a,b) } where f is a function from ℝ to ℝ^3. The curve is approximated by C² b-splines passing through npts equispaced in parameter space. If a meshsize is given, gmsh will use it when meshing the curve.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.hessian-Tuple{Inti.ReferenceInterpolant, Any}","page":"Docstrings","title":"Inti.hessian","text":"hesssian(el,x)\n\nGiven a (possibly vector-valued) functor f : 𝐑ᵐ → 𝐅ⁿ, return the n × m × m matrix Aᵢⱼⱼ = ∂²fᵢ/∂xⱼ∂xⱼ. By default ForwardDiff is used to compute the hessian, but you should overload this method for specific f if better performance and/or precision is required.\n\nNote: both x and f(x) are expected to be of SVector type.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.image","page":"Docstrings","title":"Inti.image","text":"image(f)\n\nGiven a function-like object f: Ω → R, return f(Ω).\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.import_mesh-Tuple","page":"Docstrings","title":"Inti.import_mesh","text":"import_mesh(filename = nothing; dim=3)\n\nOpen filename and create a Mesh from the gmsh model in it.\n\nIf filename is nothing, the current gmsh model is used. Note that this assumes that the Gmsh API has been initialized through gmsh.initialize.\n\nPassing dim=2 will create a two-dimensional mesh by projecting the original mesh onto the x,y plane.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.integrate-Tuple{Any, Inti.Quadrature}","page":"Docstrings","title":"Inti.integrate","text":"integrate(f,quad::Quadrature)\n\nCompute ∑ᵢ f(qᵢ)wᵢ, where the qᵢ are the quadrature nodes of quad, and wᵢ are the quadrature weights.\n\nNote that you must define f(::QuadratureNode): use q.coords and q.normal if you need to access the coordinate or normal vector at que quadrature node.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.integrate-Tuple{Any, Inti.ReferenceQuadrature}","page":"Docstrings","title":"Inti.integrate","text":"integrate(f,q::ReferenceQuadrature)\nintegrate(f,x,w)\n\nIntegrate the function f using the quadrature rule q. This is simply sum(f.(x) .* w), where x and w are the quadrature nodes and weights, respectively.\n\nThe function f should take an SVector as input.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.integrate_with_error_estimate","page":"Docstrings","title":"Inti.integrate_with_error_estimate","text":"integrate_with_error_estimate(f, quad::EmbeddedQuadrature, norm = LinearAlgebra.norm)\n\nReturn I, E where I is the estimated integral of f over domain(quad) using the high-order quadrature and E is the error estimate obtained by taking the norm of the difference between the high and low-order quadratures in quad.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.integration_measure-Tuple{Any, Any}","page":"Docstrings","title":"Inti.integration_measure","text":"integration_measure(f, x̂)\n\nGiven the Jacobian matrix J of a transformation f : ℝᴹ → ℝᴺ compute the integration measure √det(JᵀJ) at the parametric coordinate x̂\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.interface_method-Tuple{DataType}","page":"Docstrings","title":"Inti.interface_method","text":"interface_method(x)\n\nA method of an abstract type for which concrete subtypes are expected to provide an implementation.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.internal_boundary-Tuple{Inti.Domain}","page":"Docstrings","title":"Inti.internal_boundary","text":"internal_boundary(Ω::Domain)\n\nReturn the internal boundaries of a Domain. These are entities in skeleton(Ω) which appear at least twice as a boundary of entities in Ω.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.interpolation_order-Tuple{Inti.ReferenceQuadrature{Inti.ReferenceHyperCube{1}}}","page":"Docstrings","title":"Inti.interpolation_order","text":"interpolation_order(qrule::ReferenceQuadrature)\n\nThe interpolation order of a quadrature rule is defined as the the smallest k such that there exists a unique polynomial in PolynomialSpace{D,k} that minimizes the error in approximating the function f at the quadrature nodes.\n\nFor an N-point Gauss quadrature rule on the segment, the interpolation order is N-1 since N points uniquely determine a polynomial of degree N-1.\n\nFor a triangular reference domain, the interpolation order is more difficult to define. An unisolvent three-node quadrature on the triangular, for example, has an interpolation order k=1 since the three nodes uniquely determine a linear polynomial, but a four-node quadrature may also have an interpolation order k=1 since for k=2 there are multiple polynomials that pass through the four nodes.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.jacobian-Tuple{Any, Any}","page":"Docstrings","title":"Inti.jacobian","text":"jacobian(f,x)\n\nGiven a (possibly vector-valued) functor f : 𝐑ᵐ → 𝐅ⁿ, return the n × m matrix Aᵢⱼ = ∂fᵢ/∂xⱼ. By default ForwardDiff is used to compute the jacobian, but you should overload this method for specific f if better performance and/or precision is required.\n\nNote: both x and f(x) are expected to be of SVector type.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.kress_change_of_variables-Tuple{Any}","page":"Docstrings","title":"Inti.kress_change_of_variables","text":"kress_change_of_variables(P)\n\nReturn a change of variables mapping [0,1] to [0,1] with the property that the first P-1 derivatives of the transformation vanish at x=0.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.kress_change_of_variables_periodic-Tuple{Any}","page":"Docstrings","title":"Inti.kress_change_of_variables_periodic","text":"kress_change_of_variables_periodic(P)\n\nLike kress_change_of_variables, this change of variables maps the interval [0,1] onto itself, but the first P derivatives of the transformation vanish at both endpoints (thus making it a periodic function).\n\nThis change of variables can be used to periodize integrals over the interval [0,1] by mapping the integrand into a new integrand that vanishes (to order P) at both endpoints.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.lagrange_basis-Tuple{Any, Inti.PolynomialSpace}","page":"Docstrings","title":"Inti.lagrange_basis","text":"lagrange_basis(nodes,[sp::AbstractPolynomialSpace])\n\nReturn the set of n polynomials in sp taking the value of 1 on node i and 0 on nodes j ≂̸ i for 1 ≤ i ≤ n.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.lagrange_basis-Union{Tuple{Inti.ReferenceQuadrature{D}}, Tuple{D}} where D","page":"Docstrings","title":"Inti.lagrange_basis","text":"lagrange_basis(qrule::ReferenceQuadrature)\n\nReturn a function L : ℝᴺ → ℝᵖ where N is the dimension of the domain of qrule, and p is the number of nodes in qrule. The function L is a polynomial in polynomial_space(qrule), and L(xⱼ)[i] = δᵢⱼ (i.e. the ith component of L is the ith Lagrange basis).\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.lagrange_basis-Union{Tuple{Type{Inti.LagrangeElement{D, N, T}}}, Tuple{T}, Tuple{N}, Tuple{D}} where {D, N, T}","page":"Docstrings","title":"Inti.lagrange_basis","text":"lagrange_basis(E::Type{<:LagrangeElement})\n\nReturn the Lagrange basis B for the element E. Evaluating B(x) yields the value of each basis function at x.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.line-Tuple{Any, Any}","page":"Docstrings","title":"Inti.line","text":"line(a,b)\n\nCreate a [GeometricEntity] representing a straight line connecting points a and b. The points a and b can be either SVectors or a Tuple.\n\nThe parametrization of the line is given by f(u) = a + u(b - a), where 0 ≤ u ≤ 1.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.mean_curvature-Tuple{Inti.Quadrature}","page":"Docstrings","title":"Inti.mean_curvature","text":"mean_curvature(Q::Quadrature)\n\nCompute the mean_curvature at each quadrature node in Q.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.mean_curvature-Tuple{Inti.ReferenceInterpolant, Any}","page":"Docstrings","title":"Inti.mean_curvature","text":"mean_curvature(τ, x̂)\n\nCalculate the mean curvature of the element τ at the parametric coordinate x̂.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.measure","page":"Docstrings","title":"Inti.measure","text":"measure(k::EntityKey, rtol)\n\nCompute the length/area/volume of the entity k using an adaptive quadrature with a relative tolerance rtol. Assumes that the entity has an explicit parametrization.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.meshgen","page":"Docstrings","title":"Inti.meshgen","text":"meshgen(Ω, n)\nmeshgen(Ω, n_dict)\nmeshgen(Ω; meshsize)\n\nGenerate a Mesh for the domain Ω where each curve is meshed using n elements. Passing a dictionary allows for a finer control; in such cases, n_dict[ent] should return an integer for each entity ent in Ω of geometric_dimension one.\n\nAlternatively, a meshsize can be passed, in which case, the number of elements is computed as so as to obtain an average mesh size of meshsize. Note that the actual mesh size may vary significantly for each element if the parametrization is far from uniform.\n\nThis function requires the entities forming Ω to have an explicit parametrization.\n\nwarning: Mesh quality\nThe quality of the generated mesh created using meshgen depends on the quality of the underlying parametrization. For complex surfaces, you are better off using a proper mesher such as gmsh.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.meshgen!-Tuple{Inti.Mesh, Inti.Domain, Int64}","page":"Docstrings","title":"Inti.meshgen!","text":"meshgen!(mesh,Ω,sz)\n\nSimilar to meshgen, but append entries to mesh.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.monomial_basis","page":"Docstrings","title":"Inti.monomial_basis","text":"monomial_basis(sp::PolynomialSpace)\n\nReturn a function f : ℝᴺ → ℝᵈ, where N is the dimension of the domain of sp containing a basis of monomials 𝐱ᶿ spanning the polynomial space PolynomialSpace.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.near_interaction_list-Union{Tuple{N}, Tuple{AbstractVector{<:StaticArraysCore.SVector{N}}, Inti.AbstractMesh{N}}} where N","page":"Docstrings","title":"Inti.near_interaction_list","text":"near_interaction_list(X,Y::AbstractMesh; tol)\n\nFor each element el of type E in Y, return the indices of the points in X which are closer than tol to the center of el.\n\nThis function returns a dictionary where e.g. dict[E][5] --> Vector{Int} gives the indices of points in X which are closer than tol to the center of the fifth element of type E.\n\nIf tol is a Dict, then tol[E] is the tolerance for elements of type E.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.new_tag-Tuple{Integer}","page":"Docstrings","title":"Inti.new_tag","text":"new_tag(dim)\n\nReturn a new tag for an entity of dimension dim so that EntityKey(dim, tag) is not already in ENTITIES.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.nodes-Tuple{Inti.SubMesh}","page":"Docstrings","title":"Inti.nodes","text":"nodes(msh::SubMesh)\n\nA view of the nodes of the parent mesh belonging to the submesh. The ordering is given by the nodetags function.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.nodetags-Tuple{Inti.SubMesh}","page":"Docstrings","title":"Inti.nodetags","text":"nodetags(msh::SubMesh)\n\nReturn the tags of the nodes in the parent mesh belonging to the submesh.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.normal-Tuple{Any, Any}","page":"Docstrings","title":"Inti.normal","text":"normal(el, x̂)\n\nReturn the normal vector of el at the parametric coordinate x̂.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.normal-Tuple{T} where T","page":"Docstrings","title":"Inti.normal","text":"normal(q)\n\nReturn the normal vector of q, if it exists.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.notimplemented-Tuple{}","page":"Docstrings","title":"Inti.notimplemented","text":"notimplemented()\n\nThings which should probably be implemented at some point.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.order-Union{Tuple{Inti.Fejer{N}}, Tuple{N}} where N","page":"Docstrings","title":"Inti.order","text":"order(q::ReferenceQuadrature)\n\nA quadrature of order p (sometimes called degree of precision) integrates all polynomials of degree ≤ p but not ≤ p + 1.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.order-Union{Tuple{Type{<:Inti.LagrangeElement{D, Np}}}, Tuple{Np}, Tuple{D}} where {D, Np}","page":"Docstrings","title":"Inti.order","text":"order(el::LagrangeElement)\n\nThe order of the element's interpolating polynomial (e.g. a LagrangeLine with 2 nodes defines a linear polynomial, and thus has order 1).\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.parametric_curve-Union{Tuple{F}, Tuple{F, Real, Real}} where F","page":"Docstrings","title":"Inti.parametric_curve","text":"parametric_curve(f, a::Real, b::Real)\n\nCreate a [GeometricEntity] representing a parametric curve defined by the {f(t) | a ≤ t ≤ b}. The function f should map a scalar to an SVector.\n\nFlipping the orientation is supported by passing a > b.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.parametric_surface","page":"Docstrings","title":"Inti.parametric_surface","text":" parametric_surface(f, lc, hc, boundary = nothing; kwargs...)\n\nCreate a parametric surface defined by the function f over the rectangular domain defined by the lower corner lc and the upper corner hc. The optional boundary argument can be used to specify the boundary curves of the surface.\n\nArguments\n\nf: A function that takes two arguments x and y and returns a tuple (u, v) representing the parametric coordinates of the surface at (x, y).\nlc: A 2-element array representing the lower corner of the rectangular domain.\nhc: A 2-element array representing the upper corner of the rectangular domain.\nboundary: An optional array of boundary curves that define the surface.\n\nKeyword Arguments\n\nkwargs: Additional keyword arguments that can be passed to the GeometricEntity constructor.\n\nReturns\n\nThe key of the created GeometricEntity.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.polynomial_solutions_vdim","page":"Docstrings","title":"Inti.polynomial_solutions_vdim","text":"polynomial_solutions_vdim(op, order[, center])\n\nFor every monomial term pₙ of degree order, compute a polynomial Pₙ such that ℒ[Pₙ] = pₙ, where ℒ is the differential operator associated with op. This function returns {pₙ,Pₙ,γ₁Pₙ}, where γ₁Pₙ is the generalized Neumann trace of Pₙ.\n\nPassing a point center will shift the monomials and solutions accordingly.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.polynomial_space-Union{Tuple{Inti.ReferenceQuadrature{D}}, Tuple{D}} where D","page":"Docstrings","title":"Inti.polynomial_space","text":"polynomial_space(qrule::ReferenceQuadrature)\n\nReturn a PolynomialSpace associated with the interpolation_order of the quadrature nodes of qrule.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.qcoords-Tuple{Inti.ReferenceQuadrature}","page":"Docstrings","title":"Inti.qcoords","text":"qcoords(q)\n\nReturn the coordinate of the quadrature nodes associated with q.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.quadrature_to_node_vals-Tuple{Inti.Quadrature, AbstractVector}","page":"Docstrings","title":"Inti.quadrature_to_node_vals","text":"quadrature_to_node_vals(Q::Quadrature, qvals::AbstractVector)\n\nGiven a vector qvals of scalar values at the quadrature nodes of Q, return a vector ivals of scalar values at the interpolation nodes of Q.mesh.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.qweights-Tuple{Inti.ReferenceQuadrature}","page":"Docstrings","title":"Inti.qweights","text":"qweights(q)\n\nReturn the quadrature weights associated with q.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.reference_nodes-Tuple{Inti.LagrangeElement}","page":"Docstrings","title":"Inti.reference_nodes","text":"reference_nodes(el::LagrangeElement)\nreference_nodes(::Type{<:LagrangeElement})\n\nReturn the reference nodes on domain(el) used for the polynomial interpolation. The function values on these nodes completely determines the interpolating polynomial.\n\nWe use the same convention as gmsh for defining the reference nodes and their order (see node ordering on gmsh documentation).\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.return_type-Tuple{Any, Vararg{Any}}","page":"Docstrings","title":"Inti.return_type","text":"return_type(f[,args...])\n\nThe type returned by f(args...), where args is a tuple of types. Falls back to Base.promote_op by default.\n\nA functors of type T with a knonw return type should extend return_type(::T,args...) to avoid relying on promote_op.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.rotation_matrix-Tuple{Any}","page":"Docstrings","title":"Inti.rotation_matrix","text":"rotation_matrix(rot)\n\nConstructs a rotation matrix given the rotation angles around the x, y, and z axes.\n\nArguments\n\nrot: A tuple or vector containing the rotation angles in radians for each axis.\n\nReturns\n\nR::SMatrix: The resulting rotation matrix.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.single_double_layer-Tuple{}","page":"Docstrings","title":"Inti.single_double_layer","text":"single_double_layer(; op, target, source::Quadrature, compression,\ncorrection, derivative = false)\n\nConstruct a discrete approximation to the single- and double-layer integral operators for op, mapping values defined on the quadrature nodes of source to values defined on the nodes of target. If derivative = true, return instead the adjoint double-layer and hypersingular operators (which are the derivative of the single- and double-layer, respectively).\n\nYou must choose a compression method and a correction method, as described below.\n\nCompression\n\nThe compression argument is a named tuple with a method field followed by method-specific fields. It specifies how the dense linear operators should be compressed. The available options are:\n\n(method = :none, ): no compression is performed, the resulting matrices are dense.\n(method =:hmatrix, tol): the resulting operators are compressed using hierarchical matrices with an absolute tolerance tol (defaults to 1e-8).\n(method = :fmm, tol): the resulting operators are compressed using the fast multipole method with an absolute tolerance tol (defaults to 1e-8).\n\nCorrection\n\nThe correction argument is a named tuple with a method field followed by method-specific fields. It specifies how the singular and nearly-singular integrals should be computed. The available options are:\n\n(method = :none, ): no correction is performed. This is not recommented, as the resulting approximation will be inaccurate if the source and target are not sufficiently far apart.\n(method = :dim, maxdist, target_location): use the density interpolation method to compute the correction. maxdist specifies the distance between source and target points above which no correction is performed (defaults to Inf). target_location should be either :inside, :outside, or :on, and specifies where the targetpoints lie relative to the to thesourcecurve/surface (which is assumed to be closed). Whentarget === source,target_location` is not needed.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.single_double_layer_potential-Tuple{}","page":"Docstrings","title":"Inti.single_double_layer_potential","text":"single_double_layer_potential(; op, source)\n\nReturn the single- and double-layer potentials for op as IntegralPotentials.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.skeleton-Tuple{Inti.Domain}","page":"Docstrings","title":"Inti.skeleton","text":"skeleton(Ω::Domain)\n\nReturn all the boundaries of the domain, i.e. the domain's skeleton.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.stack_weakdeps_env!-Tuple{}","page":"Docstrings","title":"Inti.stack_weakdeps_env!","text":"stack_weakdeps_env!(; verbose = false, update = false)\n\nPush to the load stack an environment providing the weak dependencies of Inti.jl. This allows benefiting from additional functionalities of Inti.jl which are powered by weak dependencies without having to manually install them in your environment.\n\nSet update=true if you want to update the weakdeps environment.\n\nwarning: Warning\nCalling this function can take quite some time, especially the first time around, if packages have to be installed or precompiled. Run in verbose mode to see what is happening.\n\nExamples:\n\nInti.stack_weakdeps_env!()\nusing HMatrices\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.standard_basis_vector-Union{Tuple{N}, Tuple{Any, Val{N}}} where N","page":"Docstrings","title":"Inti.standard_basis_vector","text":"standard_basis_vector(k, ::Val{N})\n\nCreate an SVector of length N with a 1 in the kth position and zeros elsewhere.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.svector-Union{Tuple{F}, Tuple{F, Any}} where F","page":"Docstrings","title":"Inti.svector","text":"svector(f,n)\n\nCreate an SVector of length n, computing each element as f(i), where i is the index of the element.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.torus-Tuple{}","page":"Docstrings","title":"Inti.torus","text":"torus(; r, R, translation, rotation, scaling, labels)\n\nCreate a torus entity in 3D, and apply optional transformations. Returns the key. The parameters r and R are the inner and outer radii of the torus.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.uniform_points_circle-Tuple{Any, Any, Any}","page":"Docstrings","title":"Inti.uniform_points_circle","text":"uniform_points_circle(N,r,c)\n\nReturn N points uniformly distributed on a circle of radius r centered at c.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.vdim_correction-Union{Tuple{SHIFT}, Tuple{Any, Any, Inti.Quadrature, Inti.Quadrature, Any, Any, Any}} where SHIFT","page":"Docstrings","title":"Inti.vdim_correction","text":"vdim_correction(op,X,Y,Y_boundary,S,D,V; green_multiplier, kwargs...)\n\nCompute a correction to the volume potential V : Y → X such that V + δV is a more accurate approximation of the underlying volume potential operator. The correction is computed using the (volume) density interpolation method.\n\nThis function requires a op::AbstractDifferentialOperator, a target set X, a source quadrature Y, a boundary quadrature Y_boundary, approximations S : Y_boundary -> X and D : Y_boundary -> X to the single- and double-layer potentials (correctly handling nearly-singular integrals), and a naive approximation of the volume potential V. The green_multiplier is a vector of the same length as X storing the value of μ(x) for x ∈ X in the Green identity (see _green_multiplier).\n\nSee [8] for more details on the method.\n\nOptional kwargs:\n\ninterpolation_order: the order of the polynomial interpolation. By default, the maximum order of the quadrature rules is used.\nmaxdist: distance beyond which interactions are considered sufficiently far so that no correction is needed. This is used to determine a threshold for nearly-singular corrections.\ncenter: the center of the basis functions. By default, the basis functions are centered at the origin.\nshift: a boolean indicating whether the basis functions should be shifted and rescaled to each element.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.vdim_mesh_center-Tuple{Inti.AbstractMesh}","page":"Docstrings","title":"Inti.vdim_mesh_center","text":"vdim_mesh_center(msh)\n\nPoint x which minimizes ∑ (x-xⱼ)²/r²ⱼ, where xⱼ and rⱼ are the circumcenter and circumradius of the elements of msh, respectively.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.vertices-Tuple{Inti.LagrangeElement}","page":"Docstrings","title":"Inti.vertices","text":"vertices(el::LagrangeElement)\n\nCoordinates of the vertices of el.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.vertices_idxs-Tuple{Type{<:Inti.LagrangeElement{Inti.ReferenceHyperCube{1}}}}","page":"Docstrings","title":"Inti.vertices_idxs","text":"vertices_idxs(el::LagrangeElement)\n\nThe indices of the nodes in el that define the vertices of the element.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.volume_potential-Tuple{}","page":"Docstrings","title":"Inti.volume_potential","text":"volume_potential(; op, target, source::Quadrature, compression, correction)\n\nCompute the volume potential operator for a given PDE.\n\nArguments\n\nop: The PDE (Partial Differential Equation) to solve.\ntarget: The target domain where the potential is computed.\nsource: The source domain where the potential is generated.\ncompression: The compression method to use for the potential operator.\ncorrection: The correction method to use for the potential operator.\n\nReturns\n\nThe volume potential operator V that represents the interaction between the target and source domains.\n\nCompression\n\nThe compression argument is a named tuple with a method field followed by method-specific fields. It specifies how the dense linear operators should be compressed. The available options are:\n\n(method = :none, ): no compression is performed, the resulting matrices are dense.\n(method =:hmatrix, tol): the resulting operators are compressed using hierarchical matrices with an absolute tolerance tol (defaults to 1e-8).\n(method = :fmm, tol): the resulting operators are compressed using the fast multipole method with an absolute tolerance tol (defaults to 1e-8).\n\nCorrection\n\nThe correction argument is a named tuple with a method field followed by method-specific fields. It specifies how the singular and nearly-singular integrals should be computed. The available options are:\n\n(method = :none, ): no correction is performed. This is not recommented, as the resulting approximation will be inaccurate if the source and target are not sufficiently far apart.\n(method = :dim, maxdist, target_location): use the density interpolation method to compute the correction. maxdist specifies the distance between source and target points above which no correction is performed (defaults to Inf). target_location should be either :inside, :outside, or :on, and specifies where the targetpoints lie relative to the to thesource's boundary. Whentarget === source,target_location` is not needed.\n\nDetails\n\nThe volume potential operator is computed by assembling the integral operator V using the single-layer kernel G. The operator V is then compressed using the specified compression method. If no compression is specified, the operator is returned as is. If a correction method is specified, the correction is computed and added to the compressed operator.\n\n\n\n\n\n","category":"method"},{"location":"tutorials/compression_methods/#Compression-methods","page":"Compression methods","title":"Compression methods","text":"","category":"section"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"note: Important points covered in this tutorial\nOverview of the compression methods available in Inti.jl\nDetails and limitations of the various compression methods\nGuideline on how to choose a compression method","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"Inti.jl wraps several external libraries providing acceleration routines for integral operators. In general, acceleration routines have the signature assemble_*(iop, args...; kwargs...), and take an IntegralOperator as a first argument. They return a new object that represents a compressed version of the operator. The following methods are available:","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"assemble_matrix: create a dense Matrix representation of the integral operator. Not really a compression method, but useful for debugging and small problems.\nassemble_hmatrix: assemble a hierarchical matrix representation of the operator using the HMatrices library.\nassemble_fmm: return a LinearMap object that represents the operator using the fast multipole method. This method is powered by the FMM2D, FMMLIB2D and FMM3D libraries, and is only available for certain kernels.","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"warning: Singular kernels\nAcceleration methods do not correct for singular or nearly-singular interactions. When the underlying kernel is singular, a correction is usually necessary in order to obtain accurate results (see the section on correction methods for more details).","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"To illustrate the use of compression methods, we will use the following problem as an example. Note that for such a small problem, compression methods are not likely not necessary, but they are useful for larger problems.","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"using Inti\nusing LinearAlgebra\n# define the quadrature\ngeo = Inti.GeometricEntity(\"ellipsoid\")\nΩ = Inti.Domain(geo)\nΓ = Inti.boundary(Ω)\nQ = Inti.Quadrature(Γ; meshsize = 0.4, qorder = 5)\n# create the operator\nop = Inti.Helmholtz(; dim = 3, k = 2π)\nK = Inti.SingleLayerKernel(op)\nSop = Inti.IntegralOperator(K, Q, Q)\nx = rand(eltype(Sop), length(Q))\nrtol = 1e-8\nnothing # hide","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"In what follows we compress Sop using the different methods available.","category":"page"},{"location":"tutorials/compression_methods/#Dense-matrix","page":"Compression methods","title":"Dense matrix","text":"","category":"section"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"assemble_matrix","category":"page"},{"location":"tutorials/compression_methods/#Inti.assemble_matrix-tutorials-compression_methods","page":"Compression methods","title":"Inti.assemble_matrix","text":"assemble_matrix(iop::IntegralOperator; threads = true)\n\nAssemble a dense matrix representation of an IntegralOperator.\n\n\n\n\n\n","category":"function"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"Typically used for small problems, the dense matrix representation converts the IntegralOperator into a Matrix object. The underlying type of the Matrix is determined by the eltype of the IntegralOperator, and depends on the inferred type of the kernel. Here is how assemble_matrix can be used:","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"Smat = Inti.assemble_matrix(Sop; threads=true)\n@assert Sop * x ≈ Smat * x # hide\ner = norm(Sop * x - Smat * x, Inf) / norm(Sop * x, Inf)\nprintln(\"Forward map error: $er\")","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"Since the returned object is plain Julia Matrix, it can be used with any of the linear algebra routines available in Julia (e.g. \\, lu, qr, *, etc.)","category":"page"},{"location":"tutorials/compression_methods/#Hierarchical-matrix","page":"Compression methods","title":"Hierarchical matrix","text":"","category":"section"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"assemble_hmatrix","category":"page"},{"location":"tutorials/compression_methods/#Inti.assemble_hmatrix-tutorials-compression_methods","page":"Compression methods","title":"Inti.assemble_hmatrix","text":"assemble_hmatrix(iop[; atol, rank, rtol, eta])\n\nAssemble an H-matrix representation of the discretized integral operator iop using the HMatrices.jl library.\n\nSee the documentation of HMatrices for more details on usage and other keyword arguments.\n\n\n\n\n\n","category":"function"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"The hierarchical matrix representation is a compressed representation of the underlying operator; as such, it takes a tolerance parameter that determines the relative error of the compression. Here is an example of how to use the assemble_hmatrix method to compress the previous problem:","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"using HMatrices\nShmat = Inti.assemble_hmatrix(Sop; rtol = 1e-8)\ner = norm(Smat * x - Shmat * x, Inf) / norm(Smat * x, Inf)\n@assert er < 10*rtol # hide\nprintln(\"Forward map error: $er\")","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"Note that HMatrices are said to be kernel-independent, meaning that they efficiently compress a wide range of integral operators provided they satisfy a certain asymptotic smoothness criterion (see e.g. [3, 4]).","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"The HMatrix object can be used to solve linear systems, both iteratively through e.g. GMRES, or directly using an LU factorization.","category":"page"},{"location":"tutorials/compression_methods/#Fast-multipole-method","page":"Compression methods","title":"Fast multipole method","text":"","category":"section"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"assemble_fmm","category":"page"},{"location":"tutorials/compression_methods/#Inti.assemble_fmm-tutorials-compression_methods","page":"Compression methods","title":"Inti.assemble_fmm","text":"assemble_fmm(iop; atol)\n\nSet up a 2D or 3D FMM for evaluating the discretized integral operator iop associated with the op. In 2D the FMM2D or FMMLIB2D library is used (whichever was most recently loaded) while in 3D FMM3D is used.\n\nwarning: FMMLIB2D\nFMMLIB2D does no checking for if the targets and sources coincide, and will return Inf values if iop.target !== iop.source, but there is a point x ∈ iop.target such that x ∈ iop.source.\n\n\n\n\n\n","category":"function"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"The fast multipole method (FMM) is an acceleration technique based on an analytic multipole expansion of the kernel in the integral operator [5, 6]. It provides a very memory-efficient and fast way to evaluate certain types of integral operators. Here is how assemble_fmm can be used:","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"using FMM3D\nSfmm = Inti.assemble_fmm(Sop; rtol = 1e-8)\ner = norm(Sop * x - Sfmm * x, Inf) / norm(Sop * x, Inf)\n@assert er < 10*rtol # hide\nprintln(\"Forward map error: $er\")","category":"page"},{"location":"tutorials/compression_methods/#Tips-on-choosing-a-compression-method","page":"Compression methods","title":"Tips on choosing a compression method","text":"","category":"section"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"The choice of compression method depends on the problem at hand, as well as on the available hardware. Here is a rough guide on how to choose a compression:","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"For small problems (say less than 5k degrees of freedom), use the dense matrix representation. It is the simplest and most straightforward method, and does not require any additional packages. It is also the most accurate since it does not introduce any approximation errors.\nIf the integral operator is supported by the assemble_fmm, and if an iterative solver is acceptable, use it. The FMM is a very efficient method for certain types of kernels, and can handle problems with up to a few million degrees of freedom on a laptop.\nIf the kernel is not supported by assemble_fmm, if iterative solvers are not an option, or if the system needs solution for many right-hand sides, use the assemble_hmatrix method. It is a very general method that can handle a wide range of kernels, and although assembling the HMatrix can be time and memory consuming (the complexity is still log-linear in the DOFs for many kernels of interest, but the constants can be large), the resulting HMatrix object is very efficient to use. For example, the forward map is usually significantly faster than the one obtained through assemble_fmm.","category":"page"},{"location":"tutorials/correction_methods/#Correction-methods","page":"Correction methods","title":"Correction methods","text":"","category":"section"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"warning: Work in progress\nThis tutorial is still a work in progress. We will update it with more details and examples in the future.","category":"page"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"note: Important points covered in this tutorial\nOverview of the correction methods available in Inti.jl\nDetails and limitations of the various correction methods\nGuideline on how to choose a correction method","category":"page"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"When the underlying kernel is singular, a correction is usually necessary in order to obtain accurate results in the approximation of the underlying integral operator by a quadrature. At present, Inti.jl provides the following functions to correct for singularities:","category":"page"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"adaptive_correction\nbdim_correction\nvdim_correction","category":"page"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"They have different strengths and weaknesses, and we will discuss them in the following sections.","category":"page"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"note: High-level API\nNote that the single_double_layer, adj_double_layer_hypersingular, and volume_potential functions have high-level API with a correction keyword argument that allows one to specify the correction method to use when constructing the integral operators; see the documentation of these functions for more details.","category":"page"},{"location":"tutorials/correction_methods/#Adaptive-correction","page":"Correction methods","title":"Adaptive correction","text":"","category":"section"},{"location":"tutorials/correction_methods/#Boundary-density-interpolation-method","page":"Correction methods","title":"Boundary density interpolation method","text":"","category":"section"},{"location":"tutorials/correction_methods/#Volume-density-interpolation-method","page":"Correction methods","title":"Volume density interpolation method","text":"","category":"section"},{"location":"tutorials/correction_methods/#Martensen-Kussmaul-method","page":"Correction methods","title":"Martensen-Kussmaul method","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/#Geometry-and-meshes","page":"Geometry and meshes","title":"Geometry and meshes","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"note: Important points covered in this tutorial\nCombine simple shapes to create domains\nImport a mesh from a file\nIterative over mesh elements","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"In the getting started tutorial, we saw how to solve a simple Helmholtz scattering problem in 2D. We will now dig deeper into how to create and manipulate more complex geometrical shapes, as well the associated meshes.","category":"page"},{"location":"tutorials/geo_and_meshes/#Overview","page":"Geometry and meshes","title":"Overview","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Inti.jl provides a flexible way to define geometrical entities and their associated meshes. Simply put, the GeometricEntity type is the atomic building block of geometries: they can represent points, curves, surfaces, or volumes. Geometrical entities of the same dimension can be combined to form Domain, and domains can be manipulated using basic set operations such union and intersection. Meshes on the other hand are collections of (simple) elements that approximate the geometrical entities. A mesh element is a just a function that maps points from a ReferenceShape to the physical space.","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"In most applications involving complex three-dimensional surfaces, an external meshing software is used to generate a mesh, and the mesh is imported using the import_mesh function (which relies on Gmsh). The entities can then be extracted from the mesh based on e.g. their dimension or label. Here is an example of how to import a mesh from a file:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"using Inti\nusing Gmsh \nfilename = joinpath(Inti.PROJECT_ROOT,\"docs\", \"assets\", \"piece.msh\")\nmsh = Inti.import_mesh(filename)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"The imported mesh contains elements of several types, used to represent the segments, triangles, and tetras used to approximate the geometry:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Inti.element_types(msh)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Note that the msh object contains all entities used to construct the mesh, usually defined in a .geo file, which can be extracted using the entities:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"ents = Inti.entities(msh)\nnothing # hide","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Filtering of entities satisfying a certain condition, e.g., entities of a given dimension or containing a certain label, can also be performed in order to construct a domain:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"filter = e -> Inti.geometric_dimension(e) == 3\nΩ = Inti.Domain(filter, ents)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Domains can be used to index the mesh, creating either a new object containing only the necessary elements:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Γ = Inti.boundary(Ω)\nmsh[Γ]","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"or a SubMesh containing a view of the mesh:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Γ_msh = view(msh, Γ)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Finally, we can visualize the mesh using:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"using Meshes, GLMakie\nfig = Figure(; size = (800,400))\nax = Axis3(fig[1, 1]; aspect = :data)\nviz!(Γ_msh; showsegments = true, alpha = 0.5)\nfig","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"warning: Mesh visualization\nNote that although the mesh may be of high order and/or conforming, the visualization of a mesh is always performed on the underlying first order mesh, and therefore elements may look flat even if the problem is solved on a curved mesh.","category":"page"},{"location":"tutorials/geo_and_meshes/#Parametric-entities-and-meshgen","page":"Geometry and meshes","title":"Parametric entities and meshgen","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"In the previous section we saw an example of how to import a mesh from a file, and how to extract the entities from the mesh. For simple geometries for which an explicit parametrization is available, Inti.jl provides a way to create and manipulate geometrical entities and their associated meshes.","category":"page"},{"location":"tutorials/geo_and_meshes/#Parametric-curves","page":"Geometry and meshes","title":"Parametric curves","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"The simplest parametric shapes are parametric_curves, which are defined by a function that maps a scalar parameter t to a point in 2D or 3D space. Parametric curves are expected to return an SVector, and can be created as follows:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"using StaticArrays\nl1 = Inti.parametric_curve(x->SVector(x, 0.1 * sin(2π * x)), 0.0, 1.0, labels = [\"l₁\"])","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"The object l1 represents a GeometricEntity with a known push-forward map:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Inti.pushforward(l1)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"For the sake of this example, let's create three more curves, and group them together to form a Domain:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"l2 = Inti.parametric_curve(x->SVector(1 + 0.1 * sin(2π * x), x), 0.0, 1.0, labels = [\"l₂\"])\nl3 = Inti.parametric_curve(x->SVector(1 - x, 1 - 0.1 * sin(2π * x)), 0.0, 1.0, labels = [\"l₃\"])\nl4 = Inti.parametric_curve(x->SVector(0.1 * sin(2π * x), 1 - x), 0.0, 1.0, labels = [\"l₄\"])\nΓ = l1 ∪ l2 ∪ l3 ∪ l4","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Domains for which a parametric representation is available can be passed to the meshgen function:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"msh = Inti.meshgen(Γ; meshsize = 0.05)\nnothing # hide","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"We can use the Meshes.viz function to visualize the mesh, and use domains to index the mesh:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Γ₁ = l1 ∪ l3\nΓ₂ = l2 ∪ l4\nfig, ax, pl = viz(view(msh, Γ₁); segmentsize = 4, label = \"Γ₁\")\nviz!(view(msh, Γ₂); segmentsize = 4, color = :red, label = \"Γ₂\")\nfig # hide","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Note that the orientation of the curve determines the direction of the normal vector. The normal points to the right of the curve when moving in the direction of increasing parameter t:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"pts, tangents, normals = Makie.Point2f[], Makie.Vec2f[], Makie.Vec2f[]\nfor l in [l1, l2, l3, l4]\n push!(pts, l(0.5)) # mid-point of the curve \n push!(tangents, vec(Inti.jacobian(l, 0.5)))\n push!(normals,Inti.normal(l, 0.5))\nend\narrows!(pts, tangents, color = :blue, linewidth = 2, linestyle = :dash, lengthscale = 1/4, label = \"tangent\")\narrows!(pts, normals, color = :black, linewidth = 2, linestyle = :dash, lengthscale = 1/4, label = \"normal\")\naxislegend()\nfig # hide","category":"page"},{"location":"tutorials/geo_and_meshes/#Parametric-surfaces","page":"Geometry and meshes","title":"Parametric surfaces","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Like parametric curves, parametric surfaces are defined by a function that maps a reference domain D subset mathbbR^2 to a surface in 3D space. They can be constructed using the parametric_surface function:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"# a patch of the unit sphere\nlc = SVector(-1.0, -1.0)\nhc = SVector(1.0, 1.0)\nf = (u,v) -> begin\n x = SVector(1.0, u, v) # a face of the cube\n x ./ sqrt(u^2 + v^2 + 1) # project to the sphere\nend\npatch = Inti.parametric_surface(f, lc, hc, labels = [\"patch1\"])\nΓ = Inti.Domain(patch)\nmsh = Inti.meshgen(Γ; meshsize = 0.1)\nviz(msh[Γ]; showsegments = true, figure = (; size = (400,400),))","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Since creating parametric surfaces that form a closed volume can be a bit more involved, Inti.jl provide a few helper functions to create simple shapes:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"fig = Figure(; size = (600,400))\nnshapes = Inti.length(Inti.PREDEFINED_SHAPES)\nncols = 3; nrows = ceil(Int, nshapes/ncols)\nfor (n,shape) in enumerate(Inti.PREDEFINED_SHAPES)\n Ω = Inti.GeometricEntity(shape) |> Inti.Domain\n Γ = Inti.boundary(Ω)\n msh = Inti.meshgen(Γ; meshsize = 0.1)\n i,j = (n-1) ÷ ncols + 1, (n-1) % ncols + 1\n ax = Axis3(fig[i,j]; aspect = :data, title = shape)\n hidedecorations!(ax)\n viz!(msh; showsegments = true)\nend\nfig # hide","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"See GeometricEntity(shape::String) for a list of predefined geometries.","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"warning: Mesh quality\nThe quality of the generated mesh created through meshgen depends heavily on the quality of the underlying parametrization. For surfaces containing a degenerate parametrization, or for complex shapes, one is better off using a suitable CAD (Computer-Aided Design) software in conjunction with a mesh generator.","category":"page"},{"location":"tutorials/geo_and_meshes/#Transfinite-domains","page":"Geometry and meshes","title":"Transfinite domains","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"It is possible to combine parametric curves/surfaces to form a transfinite domain where the parametrization is inherited from the curves/surfaces that form its boundary. At present, Inti.jl only supports transfinite squares, which are defined by four parametric curves:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"l1 = Inti.parametric_curve(x->SVector(x, 0.1 * sin(2π * x)), 0.0, 1.0, labels = [\"l₁\"])\nl2 = Inti.parametric_curve(x->SVector(1 + 0.1 * sin(2π * x), x), 0.0, 1.0, labels = [\"l₂\"])\nl3 = Inti.parametric_curve(x->SVector(1 - x, 1 - 0.1 * sin(2π * x)), 0.0, 1.0, labels = [\"l₃\"])\nl4 = Inti.parametric_curve(x->SVector(0.1 * sin(2π * x), 1 - x), 0.0, 1.0, labels = [\"l₄\"])\nsurf = Inti.transfinite_square(l1, l2, l3, l4; labels = [\"Ω\"])\nΩ = Inti.Domain(surf)\nmsh = Inti.meshgen(Ω; meshsize = 0.05)\nviz(msh; showsegments = true)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Note that the msh object contains all entities used to construct Ω, including the boundary segments:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Inti.entities(msh)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"This allows us to probe the msh object to extract e.g. the boundary mesh:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"viz(msh[Inti.boundary(Ω)]; color = :red)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"warning: Limitations\nAt present only the transfinite interpolation for the logically quadrilateral domains is supported. In the future we hope to add support for three-dimensional transfinite interpolation, as well as transfinite formulas for simplices.","category":"page"},{"location":"tutorials/geo_and_meshes/#Elements-of-a-mesh","page":"Geometry and meshes","title":"Elements of a mesh","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"To iterate over the elements of a mesh, use the elements function:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"filename = joinpath(Inti.PROJECT_ROOT,\"docs\", \"assets\", \"piece.msh\")\nmsh = Inti.import_mesh(filename)\nents = Inti.entities(msh)\nΩ = Inti.Domain(e -> Inti.geometric_dimension(e) == 3, ents) \nels = Inti.elements(view(msh, Ω))\ncenters = map(el -> Inti.center(el), els)\nfig = Figure(; size = (800,400))\nax = Axis3(fig[1, 1]; aspect = :data)\nscatter!([c[1] for c in centers], [c[2] for c in centers], [c[3] for c in centers], markersize = 5)\nfig # hide","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"This example shows how to extract the centers of the tetrahedral elements in the mesh; and of course we can perform any desired computation on the elements.","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"tip: Type-stable iteration over elements\nSince a mesh in Inti.jl can contain elements of various types, the elements function above is not type-stable. For a type-stable iterator approach, one should first iterate over the element types using element_types, and then use elements(msh, E) to iterate over a specific element type E.","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Under the hood, each element is simply a functor which maps points x̂ from a ReferenceShape into the physical space:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"el = first(els)\nx̂ = SVector(1/3,1/3, 1/3)\nel(x̂)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Likewise, we can compute the jacobian of the element, or its normal at a given parametric coordinate.","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"(Image: Pluto notebook)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"begin\n import Pkg as _Pkg\n haskey(ENV, \"PLUTO_PROJECT\") && _Pkg.activate(ENV[\"PLUTO_PROJECT\"])\n using PlutoUI: TableOfContents\nend;","category":"page"},{"location":"pluto-examples/poisson/#Poisson-Problem","page":"Poisson problem","title":"Poisson Problem","text":"","category":"section"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"note: Important points covered in this example\nReformulating Poisson-like problems using integral equations\nUsing volume potentials\nCreating interior meshes using Gmsh","category":"page"},{"location":"pluto-examples/poisson/#Problem-definition","page":"Poisson problem","title":"Problem definition","text":"","category":"section"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"In this example we will solve the Poisson equation in a domain Omega with Dirichlet boundary conditions on Gamma = partial Omega:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":" beginalign*\n -Delta u = f quad textin quad Omega\n u = g quad texton quad Gamma\n endalign*","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"where f Omega to mathbbR and g Gamma to mathbbR are given functions. To solve this problem using integral equations, we split the solution u into a particular solution u_p and a homogeneous solution u_h:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":" u = u_p + u_h","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"The function u_p is given by","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"u_p(boldsymbolr) = int_Omega G(boldsymbolr boldsymbolr) f(boldsymbolr) dboldsymbolr","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"with G the fundamental solution of -Delta.","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"The function u_h satisfies the homogeneous problem","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":" beginalign*\n Delta u_h = 0 quad textin quad Omega \n u_h = g - u_p quad texton quad Gamma\n endalign*","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"which can be solved using the integral equation method. In particular, for this example, we employ a double-layer formulation:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"u_h(boldsymbolr) = int_Gamma G(boldsymbolr boldsymbolr) sigma(boldsymbolr) dboldsymbolr","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"where the density function sigma solves the integral equation","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":" -fracsigma(boldsymbolx)2 + int_Gamma partial_nu_boldsymbolyG(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmd s_boldsymboly = g(boldsymbolx) - u_p(boldsymbolx)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"In what follows we illustrate how to solve the problem in this manner.","category":"page"},{"location":"pluto-examples/poisson/#Geometry-and-mesh","page":"Poisson problem","title":"Geometry and mesh","text":"","category":"section"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"We use the Gmsh API to create a jellyfish-shaped domain and to generate a second order mesh of its interior and boundary:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"using Inti, Gmsh\nmeshsize = 0.1\ngmsh.initialize()\njellyfish = Inti.gmsh_curve(0, 2π; meshsize) do s\n r = 1 + 0.3 * cos(4 * s + 2 * sin(s))\n return r * Inti.Point2D(cos(s), sin(s))\nend\ncl = gmsh.model.occ.addCurveLoop([jellyfish])\nsurf = gmsh.model.occ.addPlaneSurface([cl])\ngmsh.model.occ.synchronize()\ngmsh.option.setNumber(\"Mesh.MeshSizeMax\", meshsize)\ngmsh.model.mesh.generate(2)\ngmsh.model.mesh.setOrder(2)\nmsh = Inti.import_mesh(; dim = 2)\ngmsh.finalize()","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"We can now extract components of the mesh corresponding to the Omega and Gamma domains:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"Ω = Inti.Domain(e -> Inti.geometric_dimension(e) == 2, msh)\nΓ = Inti.boundary(Ω)\nΩ_msh = view(msh, Ω)\nΓ_msh = view(msh, Γ)\nnothing #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"and visualize them:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"using Meshes, GLMakie\nviz(Ω_msh; showsegments = true)\nviz!(Γ_msh; color = :red)\nMakie.current_figure() #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"To conclude the geometric setup, we need a quadrature for the volume and boundary:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"Ω_quad = Inti.Quadrature(Ω_msh; qorder = 4)\nΓ_quad = Inti.Quadrature(Γ_msh; qorder = 6)\nnothing #hide","category":"page"},{"location":"pluto-examples/poisson/#Integral-operators","page":"Poisson problem","title":"Integral operators","text":"","category":"section"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"We can now assemble the required volume potential. To obtain the value of the particular solution u_p on the boundary for the modified integral equation above we will need the volume integral operator mapping to points on the boundary, i.e. operator:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"using FMM2D #to accelerate the maps\nop = Inti.Laplace(; dim = 2)\n# Newtonian potential mapping domain to boundary\nV_d2b = Inti.volume_potential(;\n op,\n target = Γ_quad,\n source = Ω_quad,\n compression = (method = :fmm, tol = 1e-12),\n correction = (method = :dim, maxdist = 5 * meshsize, target_location = :on),\n)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"We require also the boundary integral operators for the ensuing integral equation:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"# Single and double layer operators on Γ\nS_b2b, D_b2b = Inti.single_double_layer(;\n op,\n target = Γ_quad,\n source = Γ_quad,\n compression = (method = :fmm, tol = 1e-12),\n correction = (method = :dim,),\n)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"note: Note\nIn this example we used the Fast Multipole Method (:fmm) to accelerate the operators, and the Density Interpolation Method (:dim) to correct singular and nearly-singular integral.","category":"page"},{"location":"pluto-examples/poisson/#Solving-the-linear-system","page":"Poisson problem","title":"Solving the linear system","text":"","category":"section"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"We are now in a position to solve the original Poisson problem, but for that we need to specify the functions f and g. In order to verify that our numerical approximation is correct, however, we will play a different game and specify instead a manufactured solution u_e from which we will derive the functions f and g:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"# Create a manufactured solution\nuₑ = (x) -> cos(2 * x[1]) * sin(2 * x[2])\nfₑ = (x) -> 8 * cos(2 * x[1]) * sin(2 * x[2]) # -Δuₑ\ng = map(q -> uₑ(q.coords), Γ_quad)\nf = map(q -> fₑ(q.coords), Ω_quad)\nnothing #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"With these, we can compute the right-hand-side of the integral equation for the homogeneous part of the solution:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"rhs = g - V_d2b * f\nnothing #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"and solve the integral equation for the integral density function σ:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"using IterativeSolvers, LinearAlgebra\nσ = gmres(-I / 2 + D_b2b, rhs; abstol = 1e-8, verbose = true, restart = 1000)\nnothing #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"With the density function at hand, we can now reconstruct our approximate solution:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"G = Inti.SingleLayerKernel(op)\ndG = Inti.DoubleLayerKernel(op)\n𝒱 = Inti.IntegralPotential(G, Ω_quad)\n𝒟 = Inti.IntegralPotential(dG, Γ_quad)\nu = (x) -> 𝒱[f](x) + 𝒟[σ](x)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"and evaluate it at any point in the domain:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"x = Inti.Point2D(0.1, 0.4)\nprintln(\"error at $x: \", u(x) - uₑ(x))","category":"page"},{"location":"pluto-examples/poisson/#Solution-evaluation-and-visualization","page":"Poisson problem","title":"Solution evaluation and visualization","text":"","category":"section"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"Although we have \"solved\" the problem in the previous section, using the anonymous function u to evaluate the field is neither efficient nor accurate when there are either many points to evaluate, or when they lie close to the domain Omega. The fundamental reason for this is the usual: the integral operators in the function u are dense matrices, and their evaluation inside or near to Omega suffers from inaccurate singular and near-singular quadrature.","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"To address this issue, we need to assemble accelerated and corrected versions of the integral operators. Let us suppose we wish to evaluate the solution u at all the quadrature nodes of Omega:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"V_d2d = Inti.volume_potential(;\n op,\n target = Ω_quad,\n source = Ω_quad,\n compression = (method = :fmm, tol = 1e-8),\n correction = (method = :dim,),\n)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"Likewise, we need operators mapping densities from our boundary quadrature to our mesh nodes:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"S_b2d, D_b2d = Inti.single_double_layer(;\n op,\n target = Ω_quad,\n source = Γ_quad,\n compression = (method = :fmm, tol = 1e-8),\n correction = (method = :dim, maxdist = 2 * meshsize, target_location = :inside),\n)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"We now evaluate the solution at all quadrature nodes and compare it to the manufactured:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"u_quad = V_d2d * f + D_b2d * σ\ner_quad = u_quad - map(q -> uₑ(q.coords), Ω_quad)\nprintln(\"maximum error at all quadrature nodes: \", norm(er_quad, Inf))\nnothing #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"Lastly, let us visualize the solution and the error on the mesh nodes using quadrature_to_node_vals:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"nodes = Inti.nodes(Ω_msh)\nu_nodes = Inti.quadrature_to_node_vals(Ω_quad, u_quad)\ner = u_nodes - map(uₑ, nodes)\ncolorrange = extrema(u_nodes)\nfig = Figure(; size = (800, 300))\nax = Axis(fig[1, 1]; aspect = DataAspect())\nviz!(Ω_msh; colorrange, color = u_nodes, interpolate = true)\ncb = Colorbar(fig[1, 2]; label = \"u\", colorrange)\n# plot error\nlog_er = log10.(abs.(er))\ncolorrange = extrema(log_er)\ncolormap = :inferno\nax = Axis(fig[1, 3]; aspect = DataAspect())\nviz!(Ω_msh; colorrange, colormap, color = log_er, interpolate = true)\ncb = Colorbar(fig[1, 4]; label = \"log₁₀|u - uₑ|\", colormap, colorrange)\nfig #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"TableOfContents()","category":"page"},{"location":"tutorials/getting_started/#Getting-started","page":"Getting started","title":"Getting started","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"note: Important points covered in this tutorial\nCreate a domain and its accompanying mesh\nSolve a basic boundary integral equation\nVisualize the solution","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"This first tutorial will be a guided tour through the basic steps of setting up a boundary integral equation and solving it using Inti.jl. ","category":"page"},{"location":"tutorials/getting_started/#Mathematical-formulation","page":"Getting started","title":"Mathematical formulation","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"We will consider the classic Helmholtz scattering problem in 2D, and solve it using a direct boundary integral formulation. More precisely, letting Omega subset mathbbR^2 be a bounded domain, and denoting by Gamma = partial Omega its boundary, we will solve the following Helmholtz problem:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"beginaligned\n Delta u + k^2 u = 0 quad textin quad mathbbR^2 setminus overlineOmega\n partial_nu u = g quad texton quad Gamma\n sqrtr left( fracpartial upartial r - i k u right) = o(1) quad textas quad r = boldsymbolx to infty\nendaligned","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"where g is the given boundary datum, nu is the outward unit normal to Gamma, and k is the constant wavenumber. The last condition is the Sommerfeld radiation condition, and is required to ensure the uniqueness of the solution; physically, it means that the solution sought should radiate energy towards infinity.","category":"page"},{"location":"tutorials/getting_started/#PDE,-geometry,-and-mesh","page":"Getting started","title":"PDE, geometry, and mesh","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"The first step is to define the PDE under consideration:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"using Inti\nInti.stack_weakdeps_env!() # add weak dependencies \n# PDE\nk = 2π\nop = Inti.Helmholtz(; dim = 2, k)","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Next, we generate the geometry of the problem. For this tutorial, we will manually create parametric curves representing the boundary of the domain using the parametric_curve function:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"using StaticArrays # for SVector\n# Create the geometry as the union of a kite and a circle\nkite = Inti.parametric_curve(0.0, 1.0; labels = [\"kite\"]) do s\n return SVector(2.5 + cos(2π * s[1]) + 0.65 * cos(4π * s[1]) - 0.65, 1.5 * sin(2π * s[1]))\nend\ncircle = Inti.parametric_curve(0.0, 1.0; labels = [\"circle\"]) do s\n return SVector(cos(2π * s[1]), sin(2π * s[1]))\nend\nΓ = kite ∪ circle","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Inti.jl expects the parametrization of the curve to be a function mapping scalars to points in space represented by SVectors. The labels argument is optional, and can be used to identify the different parts of the boundary. The Domain object Γ represents the boundary of the geometry, and can be used to create a mesh:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"# Create a mesh for the geometry\nmsh = Inti.meshgen(Γ; meshsize = 2π / k / 10)","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"To visualize the mesh, we can load Meshes.jl and one of Makie's backends:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"using Meshes, GLMakie\nviz(msh; segmentsize = 3, axis = (aspect = DataAspect(), ), figure = (; size = (400,300)))","category":"page"},{"location":"tutorials/getting_started/#Quadrature","page":"Getting started","title":"Quadrature","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Once the mesh is created, we can define a quadrature to be used in the discretization of the integral operators:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"# Create a quadrature\nQ = Inti.Quadrature(msh; qorder = 5)\nnothing # hide","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"A Quadrature is simply a collection of QuadratureNode objects:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Q[1]","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"In the constructor above we specified a quadrature order of 5, and Inti.jl internally picked a ReferenceQuadrature suitable for the specified order; for finer control, a quadrature rule can be specified directly.","category":"page"},{"location":"tutorials/getting_started/#Integral-operators","page":"Getting started","title":"Integral operators","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"To continue, we need to reformulate the Helmholtz problem as a boundary integral equation. Among the plethora of options, we will use in this tutorial a simple direct formulation, which uses Green's third identity to relate the values of u and partial_nu u on Gamma:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":" -fracu(boldsymbolx)2 + Du(boldsymbolx) = Spartial_nu u(boldsymbolx) quad boldsymbolx in Gamma","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Here S and D are the single- and double-layer operators, formally defined as:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":" Ssigma(boldsymbolx) = int_Gamma G(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmds(boldsymboly) quad\n Dsigma(boldsymbolx) = int_Gamma fracpartial Gpartial nu_boldsymboly(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmds(boldsymboly)","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"where","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"G(boldsymbolx boldsymboly) = fraci4 H^(1)_0(kboldsymbolx -\nboldsymboly)","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"is the fundamental solution of the Helmholtz equation, with H^(1)_0 being the Hankel function of the first kind. Note that G is singular when boldsymbolx = boldsymboly, and therefore the numerical discretization of S and D requires special care.","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"To approximate S and D, we can proceed as follows:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"S, D = Inti.single_double_layer(;\n op,\n target = Q,\n source = Q,\n compression = (method = :none,),\n correction = (method = :dim,),\n)\nnothing # hide","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Much of the complexity involved in the numerical computation is hidden in the function above; later in the tutorials we will discuss in more details the options available for the compression and correction methods, as well as how to define custom kernels and operators. For now, it suffices to know that S and D are matrix-like objects that can be used to solve the boundary integral equation. For that, we need to provide the boundary data g.","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"tip: Fast algorithms\nPowered by external libraries, Inti.jl supports several acceleration methods for matrix-vector multiplication, including so far:Fast multipole method (FMM) mapsto correction = (method = :fmm, tol = 1e-8)\nHierarchical matrix (H-matrix) mapsto correction = (method = :hmatrix, tol = 1e-8)Note that in such cases only the matrix-vector product may not be available, and therefore iterative solvers such as GMRES are required for the solution of the resulting linear systems.","category":"page"},{"location":"tutorials/getting_started/#Source-term-and-solution","page":"Getting started","title":"Source term and solution","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"We are interested in the scattered field u produced by an incident plane wave u_i = e^i k boldsymbold cdot boldsymbolx, where boldsymbold is a unit vector denoting the direction of the plane wave. Assuming that the total field u_t = u_i + u satisfies a homogenous Neumann condition on Gamma, and that the scattered field u satisfies the Sommerfeld radiation condition, we can write the boundary condition as:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":" partial_nu u = -partial_nu u_i quad boldsymbolx in Gamma","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"We can thus solve the boundary integral equation to find u on Gamma:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"using LinearAlgebra\n# define the incident field and compute its normal derivative\nθ = 0\nd = SVector(cos(θ), sin(θ))\ng = map(Q) do q\n # normal derivative of e^{ik*d⃗⋅x}\n x, ν = q.coords, q.normal\n return -im * k * exp(im * k * dot(x, d)) * dot(d, ν)\nend ## Neumann trace on boundary\nu = (-I / 2 + D) \\ (S * g) # Dirichlet trace on boundary\nnothing # hide","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"note: Iterating over a quadrature\nIn computing g above, we used map to evaluate the incident field at all quadrature nodes. When iterating over Q, the iterator returns a QuadratureNode, and not simply the coordinate of the quadrature node. This is so that we can access additional information, such as the normal vector, at the quadrature node.","category":"page"},{"location":"tutorials/getting_started/#Integral-representation-and-visualization","page":"Getting started","title":"Integral representation and visualization","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Now that we know both the Dirichlet and Neumann data on the boundary, we can use Green's representation formula, i.e.,","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":" mathcalDu(boldsymbolr) - mathcalSpartial_nu u(boldsymbolr) = begincases\n u(boldsymbolr) textif boldsymbolr in mathbbR^2 setminus overlineOmega\n 0 textif boldsymbolr in Omega\n endcases","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"where mathcalD and mathcalS are the double- and single-layer potentials defined as:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":" mathcalSsigma(boldsymbolr) = int_Gamma G(boldsymbolr boldsymboly) sigma(boldsymboly) mathrmds(boldsymboly) quad\n mathcalDsigma(boldsymbolr) = int_Gamma fracpartial Gpartial nu_boldsymboly(boldsymbolr boldsymboly) sigma(boldsymboly) mathrmds(boldsymboly)","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"to compute the solution u in the domain:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"𝒮, 𝒟 = Inti.single_double_layer_potential(; op, source = Q)\nuₛ = x -> 𝒟[u](x) - 𝒮[g](x)","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"To wrap things up, let's visualize the scattered field:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"xx = yy = range(-5; stop = 5, length = 100)\nU = map(uₛ, Iterators.product(xx, yy))\nUi = map(x -> exp(im*k*dot(x, d)), Iterators.product(xx, yy))\nUt = Ui + U\nfig, ax, hm = heatmap(\n xx,\n yy,\n real(Ut);\n colormap = :inferno,\n interpolate = true,\n axis = (aspect = DataAspect(), xgridvisible = false, ygridvisible = false),\n)\nviz!(msh; segmentsize = 2)\nColorbar(fig[1, 2], hm; label = \"real(u)\")\nfig # hide","category":"page"},{"location":"tutorials/getting_started/#Accuracy-check","page":"Getting started","title":"Accuracy check","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"The scattering example above does not provide an easy way to check the accuracy of the solution. To do so, we can manufacture an exact solution and compare it to the solution obtained numerically, as illustrated below:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"# build an exact solution\nG = Inti.SingleLayerKernel(op)\ndG = Inti.DoubleLayerKernel(op)\nxs = map(θ -> 0.5 * rand() * SVector(cos(θ), sin(θ)), 2π * rand(10))\ncs = rand(ComplexF64, length(xs))\nuₑ = q -> sum(c * G(x, q) for (x, c) in zip(xs, cs))\n∂ₙu = q -> sum(c * dG(x, q) for (x, c) in zip(xs, cs))\ng = map(∂ₙu, Q) \nu = (-I / 2 + D) \\ (S * g)\nuₛ = x -> 𝒟[u](x) - 𝒮[g](x)\npts = [5*SVector(cos(θ), sin(θ)) for θ in range(0, 2π, length = 100)]\ner = norm(uₛ.(pts) - uₑ.(pts), Inf)\nprintln(\"maximum error on circle of radius 5: $er\")","category":"page"},{"location":"#Inti","page":"Home","title":"Inti","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"CurrentModule = Inti","category":"page"},{"location":"","page":"Home","title":"Home","text":"(Image: Stable) (Image: Dev) (Image: Build Status) (Image: codecov) (Image: Aqua)","category":"page"},{"location":"","page":"Home","title":"Home","text":"Inti.jl is a Julia library for the numerical solution of boundary and volume integral equations. It offers routines for assembling and solving the linear systems that result from applying the Nyström discretization method. Designed for flexibility and efficiency, the package currently supports the following features:","category":"page"},{"location":"","page":"Home","title":"Home","text":"Specialized integration routines for computing singular and nearly-singular integrals.\nIntegrated support for acceleration routines, including the Fast Multipole Method (FMM) and Hierarchical Matrices, by wrapping external libraries.\nPredefined kernels and integral operators for partial differential equations (PDEs) commonly found in mathematical physics (e.g. Laplace, Helmholtz, Stokes).\nSupport for complex geometries in 2D and 3D, either through native parametric representations or by importing mesh files from external sources.\nEfficient construction of complex integral operators from simpler ones through lazy composition.","category":"page"},{"location":"#Installing-Julia","page":"Home","title":"Installing Julia","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Download Julia from julialang.org, or use juliaup installer. We recommend using the latest stable version of Julia, although Inti.jl should work with >=v1.9.","category":"page"},{"location":"#Installing-Inti.jl","page":"Home","title":"Installing Inti.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Inti.jl is registered in the Julia General registry and can be installed by launching a Julia REPL and typing the following command:","category":"page"},{"location":"","page":"Home","title":"Home","text":"]add Inti","category":"page"},{"location":"","page":"Home","title":"Home","text":"Alternatively, one can install the latest version of Inti.jl from the main branch using:","category":"page"},{"location":"","page":"Home","title":"Home","text":"using Pkg; Pkg.add(;url = \"https://github.com/IntegralEquations/Inti.jl\", rev = \"main\")","category":"page"},{"location":"","page":"Home","title":"Home","text":"Change rev if a different branch or a specific commit hash is desired.","category":"page"},{"location":"#Installing-weak-dependencies","page":"Home","title":"Installing weak dependencies","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Inti.jl comes with a set of optional dependencies that can be installed on demand. These provide additional features which can be useful in certain scenarios (e.g. visualization, meshing, acceleration). For convenience, Inti.jl provides the stack_weakdeps_env! function to install all the weak dependencies at once:","category":"page"},{"location":"","page":"Home","title":"Home","text":"using Inti\nInti.stack_weakdeps_env!(; verbose = false, update = true)","category":"page"},{"location":"","page":"Home","title":"Home","text":"Note that the first time you run this command, it may take a while to download and compile the dependencies. Subsequent runs will be faster. If preferred, extensions can be manually controlled by Pkg.adding the desired packages from the list above.","category":"page"},{"location":"#Basic-usage","page":"Home","title":"Basic usage","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Inti.jl can be used to solve a variety of linear partial differential equations by recasting them as integral equations. The general workflow for solving a problem consists of the following steps:","category":"page"},{"location":"","page":"Home","title":"Home","text":" underbracefboxGeometry rightarrow fboxMesh_textbfpre-processing rightarrow fboxcolorredSolver rightarrow underbracefboxVisualization_textbfpost-processing","category":"page"},{"location":"","page":"Home","title":"Home","text":"Geometry: Define the domain of interest using simple shapes (e.g., circles, rectangles) or more complex CAD models.\nMesh: Create a mesh to approximate the geometry. The mesh is used to define a quadrature and discretize the boundary integral equation.\nSolver: With a mesh and an accompanying quadrature, Inti.jl's routines provide ways to assemble and solve the system of equations arising from the discretization of the integral operators. The core of the library lies in service of this step.\nVisualization: Visualize the solution using a plotting library such as Makie.jl, or export it to a file for further analysis.","category":"page"},{"location":"","page":"Home","title":"Home","text":"As a simple example illustrating the steps above, consider an interior Laplace problem, in two dimensions, with Dirichlet boundary conditions:","category":"page"},{"location":"","page":"Home","title":"Home","text":"beginaligned\nDelta u = 0 quad textin Omega \nu = g quad texton Gamma\nendaligned","category":"page"},{"location":"","page":"Home","title":"Home","text":"where Omega subset mathbbR^2 is a sufficiently smooth domain, and Gamma = partial Omega its boundary. A boundary integral reformulation can be achieved by e.g. searching for the solution u in the form of a single-layer potential:","category":"page"},{"location":"","page":"Home","title":"Home","text":"u(boldsymbolr) = int_Gamma G(boldsymbolrboldsymboly)sigma(boldsymboly) mathrmdGamma(boldsymboly)","category":"page"},{"location":"","page":"Home","title":"Home","text":"where sigma Gamma to mathbbR is an unknown density function, and G is the fundamental solution of the Laplace equation. This ansatz is, by construction, an exact solution to the PDE on Omega. Imposing the boundary condition on Gamma leads to the following integral equation:","category":"page"},{"location":"","page":"Home","title":"Home","text":" int_Gamma G(boldsymbolxboldsymboly)sigma(boldsymboly) mathrmdGamma(boldsymboly) = g(boldsymbolx) quad forall boldsymbolx in Gamma","category":"page"},{"location":"","page":"Home","title":"Home","text":"Expressing the problem above in Inti.jl looks like this:","category":"page"},{"location":"","page":"Home","title":"Home","text":"using Inti, LinearAlgebra, StaticArrays\n# create a geometry given by a function f : [0,1] → Γ ⊂ R^2. \ngeo = Inti.parametric_curve(0, 1) do s\n SVector(0.25, 0.0) + SVector(cos(2π * s) + 0.65 * cos(4π * s[1]) - 0.65, 1.5 * sin(2π * s))\nend\nΓ = Inti.Domain(geo)\n# create a mesh and quadrature\nmsh = Inti.meshgen(Γ; meshsize = 0.1)\nQ = Inti.Quadrature(msh; qorder = 5)\n# create the integral operators\nop = Inti.Laplace(;dim=2)\nS, _ = Inti.single_double_layer(;\n op, \n target = Q,\n source = Q,\n compression = (method = :none,),\n correction = (method = :dim,)\n)\n# manufacture a harmonic function (exact solution) and take its trace on Γ\nuₑ = x -> x[1] + x[2] + x[1]*x[2] + x[1]^2 - x[2]^2 - 2 * log(norm(x .- SVector(-0.5, -1.5)))\ng = map(q -> uₑ(q.coords), Q) # value at quad nodes\n# solve for σ\nσ = S \\ g\n# use the single-layer potential to evaluate the solution\n𝒮, 𝒟 = Inti.single_double_layer_potential(; op, source = Q)\nuₕ = x -> 𝒮[σ](x)","category":"page"},{"location":"","page":"Home","title":"Home","text":"The function uₕ is now a numerical approximation of the solution to the Laplace equation, and can be evaluated at any point in the domain:","category":"page"},{"location":"","page":"Home","title":"Home","text":"pt = SVector(0.5, 0.1)\nprintln(\"Exact value at $pt: \", uₑ(pt))\nprintln(\"Approx. value at $pt: \", uₕ(pt))","category":"page"},{"location":"","page":"Home","title":"Home","text":"If we care about the solution on the entire domain, we can visualize it using:","category":"page"},{"location":"","page":"Home","title":"Home","text":"using Meshes, GLMakie # trigger the loading of some Inti extensions\nxx = yy = range(-2, 2, length = 100)\nfig = Figure(; size = (600,300))\ninside = x -> Inti.isinside(x, Q) \nopts = (xlabel = \"x\", ylabel = \"y\", aspect = DataAspect())\nax1 = Axis(fig[1, 1]; title = \"Exact solution\", opts...)\nh1 = heatmap!(ax1, xx,yy,(x, y) -> inside((x,y)) ? uₑ((x,y)) : NaN)\nviz!(msh; segmentsize = 3)\ncb = Colorbar(fig[1, 3], h1, size = 20, height = 200)\nax2 = Axis(fig[1, 2]; title = \"Approx. solution\", opts...)\nh2 = heatmap!(ax2, xx,yy, (x, y) -> inside((x,y)) ? uₕ((x,y)) : NaN, colorrange = cb.limits[])\nviz!(msh; segmentsize = 3)\nfig # hide","category":"page"},{"location":"","page":"Home","title":"Home","text":"info: Formulation of the problem as an integral equation\nGiven a PDE and boundary conditions, there are often many ways to recast the problem as an integral equation, and the choice of formulation plays an important role in the unique solvability, efficiency, and accuracy of the numerical solution. Inti.jl provides a flexible framework for experimenting with different formulations, but it is up to the user to choose the most appropriate one for their problem.","category":"page"},{"location":"","page":"Home","title":"Home","text":"While the example above is a simple one, Inti.jl can handle significantly more complex problems involving multiple domains, heterogeneous coefficients, vector-valued PDEs, and three-dimensional geometries. The best way to dive deeper into Inti.jl's capabilities is the tutorials section. More advanced usage can be found in the examples section.","category":"page"},{"location":"#Contributing","page":"Home","title":"Contributing","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"There are several ways to contribute to Inti.jl:","category":"page"},{"location":"","page":"Home","title":"Home","text":"Reporting bugs: If you encounter a bug, please open an issue on the GitHub. If possible, please include a minimal working example that reproduces the problem.\nExamples: If you have a cool example that showcases Inti.jl's capabilities, consider submitting a PR to add it to the examples section.\nContributing code: If you would like to contribute code to Inti.jl, please fork the repository and submit a pull request. Feel free to open a draft PR early in the development process to get feedback on your changes.\nFeature requests: If you have an idea for a new feature or improvement, we would love to hear about it.\nDocumentation: If you find any part of the documentation unclear or incomplete, please let us know. Or even better, submit a PR with the improved documentation.","category":"page"},{"location":"#Acknowledgements","page":"Home","title":"Acknowledgements","text":"","category":"section"}] +[{"location":"tutorials/solvers/#Linear-solvers","page":"Linear solvers","title":"Linear solvers","text":"","category":"section"},{"location":"tutorials/solvers/","page":"Linear solvers","title":"Linear solvers","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/solvers/","page":"Linear solvers","title":"Linear solvers","text":"warning: Work in progress\nThis tutorial is still a work in progress. We will update it with more details and examples in the future.","category":"page"},{"location":"tutorials/solvers/","page":"Linear solvers","title":"Linear solvers","text":"Inti.jl does not provide its own linear solvers, but relies on external libraries such as IterativeSolvers.jl or the LinearAlgebra standard library for the solving the linear systems that arise in the discretization of integral equations.","category":"page"},{"location":"references/","page":"References","title":"References","text":"CurrentModule = Inti","category":"page"},{"location":"references/#References","page":"References","title":"References","text":"","category":"section"},{"location":"references/","page":"References","title":"References","text":"J.-C. Nédélec. Acoustic and electromagnetic equations: integral representations for harmonic problems. Vol. 144 (Springer, 2001).\n\n\n\nD. Colton and R. Kress. Integral equation methods in scattering theory (SIAM, 2013).\n\n\n\nM. Bebendorf. Hierarchical matrices (Springer, 2008).\n\n\n\nW. Hackbusch and others. Hierarchical matrices: algorithms and analysis. Vol. 49 (Springer, 2015).\n\n\n\nV. Rokhlin. Rapid solution of integral equations of classical potential theory. Journal of computational physics 60, 187–207 (1985).\n\n\n\nL. Greengard and V. Rokhlin. A fast algorithm for particle simulations. Journal of computational physics 73, 325–348 (1987).\n\n\n\nL. M. Faria, C. Pérez-Arancibia and M. Bonnet. General-purpose kernel regularization of boundary integral equations via density interpolation. Computer Methods in Applied Mechanics and Engineering 378, 113703 (2021).\n\n\n\nT. G. Anderson, M. Bonnet, L. M. Faria and C. Pérez-Arancibia. Fast, high-order numerical evaluation of volume potentials via polynomial density interpolation. Journal of Computational Physics, 113091 (2024).\n\n\n\n","category":"page"},{"location":"tutorials/layer_potentials/#Layer-potentials","page":"Layer potentials","title":"Layer potentials","text":"","category":"section"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"note: Important points covered in this tutorial\nNearly singular evaluation of layer potentials\nCreating a smooth domain with splines using Gmsh's API\nPlotting values on a mesh","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"In this tutorial we focus on evaluating the layer potentials given a source density. This is a common post-processing task in boundary integral equation methods, and while most of it is straightforward, some subtleties arise when the target points are close to the boundary (nearly-singular integrals).","category":"page"},{"location":"tutorials/layer_potentials/#Integral-potentials","page":"Layer potentials","title":"Integral potentials","text":"","category":"section"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"IntegralPotential represent the following mathematical objects:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"mathcalPsigma(boldsymbolr) = int_Gamma K(boldsymbolr boldsymbolr) sigma(boldsymbolr) dboldsymbolr","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"where K is the kernel of the operator, Gamma is the source's boundary, boldsymbolr not in Gamma is a target point, and sigma is the source density.","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"Here is a simple example of how to create a kernel representing a Laplace double-layer potential:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"using Inti, StaticArrays, LinearAlgebra\n# define a kernel function\nfunction K(target,source)\n r = Inti.coords(target) - Inti.coords(source)\n ny = Inti.normal(source)\n return 1 / (2π * norm(r)^2) * dot(r, ny)\nend\n# define a domain\nΓ = Inti.parametric_curve(s -> SVector(cos(2π * s), sin(2π * s)), 0, 1) |> Inti.Domain\n# and a quadrature of Γ\nQ = Inti.Quadrature(Γ; meshsize = 0.1, qorder = 5)\n𝒮 = Inti.IntegralPotential(K, Q)","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"If we have a source density sigma, defined on the quadrature nodes of Gamma, we can create a function that evaluates the layer potential at an arbitrary point:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"σ = map(q -> 1.0, Q)\nu = 𝒮[σ]","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"u is now an anonymous function that evaluates the layer potential at any point:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"r = SVector(0.1, 0.2)\n@assert u(r) ≈ -1 # hide\nu(r)","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"Although we created the single-layer potential for the Laplace kernel manually, it is often more convenient to use the single_layer_potential when working with a supported PDE, e.g.:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"op = Inti.Laplace(; dim = 2)\n𝒮, 𝒟 = Inti.single_double_layer_potential(; op, source = Q)","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"creates the single and double layer potentials for the Laplace equation in 2D.","category":"page"},{"location":"tutorials/layer_potentials/#Direct-evaluation-of-layer-potentials","page":"Layer potentials","title":"Direct evaluation of layer potentials","text":"","category":"section"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"We now show how to evaluate the layer potentials of an exact solution on a mesh created through the Gmsh API. Do to so, let us first define the PDE:g","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"using Inti, StaticArrays, LinearAlgebra, Meshes, GLMakie, Gmsh\n# define the PDE\nk = 4π\nop = Inti.Helmholtz(; dim = 2, k)","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"We will now use the gmsh_curve function to create a smooth domain of a kite using splines:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"gmsh.initialize()\nmeshsize = 2π / k / 4\nkite = Inti.gmsh_curve(0, 1; meshsize) do s\n SVector(0.25, 0.0) + SVector(cos(2π * s) + 0.65 * cos(4π * s[1]) - 0.65, 1.5 * sin(2π * s))\nend\ncl = gmsh.model.occ.addCurveLoop([kite])\nsurf = gmsh.model.occ.addPlaneSurface([cl])\ngmsh.model.occ.synchronize()\ngmsh.model.mesh.generate(2)\nmsh = Inti.import_mesh(; dim = 2)\ngmsh.finalize()","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"tip: Tip\nThe GMSH API is a powerful tool to create complex geometries and meshes directly from Julia (the gmsh_curve function above is just a simple wrapper around some spline functionality). For more information, see the official documentation.","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"We can visualize the triangular mesh using:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"using Meshes, GLMakie\n# extract the domain Ω from the mesh entities\nents = Inti.entities(msh)\nΩ = Inti.Domain(e->Inti.geometric_dimension(e) == 2, ents)\nviz(msh[Ω]; showsegments = true, axis = (aspect = DataAspect(), ))","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"For the purpose of testing the accuracy of the layer potential evaluation, we will construct an exact solution of the Helmholtz equation on the interior domain and plot it:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"# construct an exact interior solution as a sum of random plane waves\ndirs = [SVector(cos(θ), sin(θ)) for θ in 2π*rand(10)]\ncoefs = rand(ComplexF64, 10)\nu = (x) -> sum(c*exp(im*k*dot(x, d)) for (c,d) in zip(coefs, dirs))\ndu = (x,ν) -> sum(c*im*k*dot(d, ν)*exp(im*k*dot(x, d)) for (c,d) in zip(coefs, dirs))\n# plot the exact solution\nΩ_msh = view(msh, Ω)\ntarget = Inti.nodes(Ω_msh)\nviz(Ω_msh; showsegments = false, axis = (aspect = DataAspect(), ), color = real(u.(target)))","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"Since u satisfies the Helmholtz equation, we know that the following representation holds:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"u(boldsymbolr) = mathcalSgamma_1 u(boldsymbolr) - mathcalDgamma_0 u(boldsymbolr) quad boldsymbolr in Omega","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"where gamma_0 u and gamma_1 u are the respective Dirichlet and Neumann traces of u, and mathcalS and mathcalD are the respective single and double layer potentials over Gamma = partial Omega.","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"Let's compare next the exact solution with the layer potential evaluation, based on a quadrature of Gamma:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"Γ = Inti.boundary(Ω)\nQ = Inti.Quadrature(view(msh,Γ); qorder = 5)\n# evaluate the layer potentials\n𝒮, 𝒟 = Inti.single_double_layer_potential(; op, source = Q)\nγ₀u = map(q -> u(q.coords), Q)\nγ₁u = map(q -> du(q.coords, q.normal), Q)\nuₕ = x -> 𝒮[γ₁u](x) - 𝒟[γ₀u](x)\n# plot the error on the target nodes\ner_log10 = log10.(abs.(u.(target) - uₕ.(target)))\ncolorrange = extrema(er_log10)\nfig, ax, pl = viz(Ω_msh;\n color = er_log10,\n colormap = :viridis,\n colorrange,\n axis = (aspect = DataAspect(),),\n interpolate=true\n)\nColorbar(fig[1, 2]; label = \"log₁₀(error)\", colorrange)\nfig","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"We see a common pattern of potential evaluation: the error is small away from the boundary, but grows near it. This is due to the nearly-singular nature of the layer potential integrals, which can be mitigated by using a correction method that accounts for the singularity of the kernel as boldsymbolr to Gamma.","category":"page"},{"location":"tutorials/layer_potentials/#Near-field-correction-of-layer-potentials","page":"Layer potentials","title":"Near-field correction of layer potentials","text":"","category":"section"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"There are two cases where the direct evaluation of layer potentials is not recommended:","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"When the target point is close to the boundary (nearly-singular integrals).\nWhen evaluation at many target points is desired (computationally burdensome)and take advantage of an acceleration routine.","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"In such contexts, it is recommended to use the single_double_layer function (alternately, one can directly assemble an IntegralOperator) with a correction, for the first case, and/or a compression (acceleration) method, for the latter case, as appropriate. Here is an example of how to use the FMM acceleration with a near-field correction to evaluate the layer potentials::","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"using FMM2D\nS, D = Inti.single_double_layer(; op, target, source = Q,\n compression = (method = :fmm, tol = 1e-12),\n correction = (method = :dim, target_location = :inside, maxdist = 0.2)\n)\ner_log10_cor = log10.(abs.(S*γ₁u - D*γ₀u - u.(target)))\ncolorrange = extrema(er_log10) # use scale without correction\nfig = Figure(resolution = (800, 400))\nax1 = Axis(fig[1, 1], aspect = DataAspect(), title = \"Naive evaluation\")\nviz!(Ω_msh; color = er_log10, colormap = :viridis, colorrange,interpolate=true)\nax2 = Axis(fig[1, 2], aspect = DataAspect(), title = \"Nearfield correction\")\nviz!(Ω_msh; color = er_log10_cor, colormap = :viridis, colorrange, interpolate=true)\nColorbar(fig[1, 3]; label = \"log₁₀(error)\", colorrange)\nfig","category":"page"},{"location":"tutorials/layer_potentials/","page":"Layer potentials","title":"Layer potentials","text":"As can be seen, the near-field correction significantly reduces the error near the boundary, making if feasible to evaluate the layer potential near Gamma if necessary.","category":"page"},{"location":"tutorials/integral_operators/#Boundary-integral-operators","page":"Boundary integral operators","title":"Boundary integral operators","text":"","category":"section"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"note: Important points covered in this tutorial\nDefine layer potentials and the four integral operators of Calderón calculus\nConstruct block operators\nSet up a custom kernel","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"A central piece of integral equation methods is the efficient and accurate computation of integral operators. In the first part of this tutorial we will cover how to assemble and manipulate the four integral operators of Calderón calculus, namely the single-layer, double-layer, hypersingular, and adjoint operators [1, 2], for some predefined kernels in Inti.jl. In the second part we will show how to extend the package to handle custom kernels.","category":"page"},{"location":"tutorials/integral_operators/#Predefined-kernels-and-integral-operators","page":"Boundary integral operators","title":"Predefined kernels and integral operators","text":"","category":"section"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"To simplify the construction of integral operators for some commonly used PDEs, Inti.jl defines a few AbstractDifferentialOperators types. For each of these PDEs, the package provides a SingleLayerKernel, DoubleLayerKernel, HyperSingularKernel, and AdjointDoubleLayerKernel that can be used to construct the corresponding kernel functions, e.g.:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"using Inti, StaticArrays, LinearAlgebra\nop = Inti.Helmholtz(; dim = 2, k = 2π)\nG = Inti.SingleLayerKernel(op)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Typically, we are not interested in the kernels themselves, but in the integral operators they define. Two functions, single_double_layer and adj_double_layer_hypersingular, are provided as a high-level syntax to construct the four integral operators of Calderón calculus:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Γ = Inti.parametric_curve(s -> SVector(cos(s), sin(s)), 0, 2π) |> Inti.Domain\nQ = Inti.Quadrature(Γ; meshsize = 0.1, qorder = 5)\nS, D = Inti.single_double_layer(; \n op, \n target = Q, \n source = Q, \n compression = (method = :none,), \n correction = (method = :dim,)\n)\nK, N = Inti.adj_double_layer_hypersingular(; \n op, \n target = Q, \n source = Q, \n compression = (method = :none,), \n correction = (method = :dim,)\n)\nnothing # hide","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Much goes on under the hood in the function above, and the sections on correction and compression methods will provide more details on the options available. The important thing to keep in mind is that S, D, K, and N are discrete approximations of the following (linear) operators:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"beginaligned\n Ssigma(boldsymbolx) = int_Gamma G(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmd s_boldsymboly quad \n Dsigma(boldsymbolx) = mathrmpv int_Gamma fracpartial Gpartial nu_boldsymboly(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmd s_boldsymboly \n Ksigma(boldsymbolx) = mathrmpv int_Gamma fracpartial Gpartial nu_boldsymbolx(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmd s_boldsymboly quad\n Nsigma(boldsymbolx) = mathrmfp int_Gamma fracpartial^2 Gpartial nu_boldsymbolx partial nu_boldsymboly(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmd s_boldsymboly\nendaligned","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"The actual type of S, D, K, and N depends on the compression and correction methods. In the simple case above, these are simply matrices:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"@assert all(T -> T == Matrix{ComplexF64}, map(typeof, (S, D, K, N))) # hide\nmap(typeof, (S, D, K, N))","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"If we turn on a compression method, such as :fmm, the types may change into something different:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"using FMM2D # will load the extension\nSfmm, Dfmm = Inti.single_double_layer(; \n op, \n target = Q, \n source = Q, \n compression = (method = :fmm, tol = 1e-10), \n correction = (method = :dim, )\n)\nKfmm, Nfmm = Inti.adj_double_layer_hypersingular(; \n op, \n target = Q, \n source = Q, \n compression = (method = :fmm, tol = 1e-10), \n correction = (method = :dim,)\n)\ntypeof(Sfmm)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"This is because the FMM method is used to approximate the matrix-vector in a matrix-free way: the only thing guaranteed is that S and D can be applied to a vector:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"x = map(q -> cos(q.coords[1] + q.coords[2]), Q)\n@assert norm(Sfmm*x - S*x, Inf) / norm(S*x, Inf) < 1e-8 # hide\nnorm(Sfmm*x - S*x, Inf)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"The Sfmm object above in fact combines two linear maps:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Sfmm","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"The FunctionMap computes a matrix-vector by performing a function call to the FMM2D library. The WrappedMap accounts for a sparse matrix used to correct for singular and nearly singular interactions. These two objects are added lazily using LinearMaps.","category":"page"},{"location":"tutorials/integral_operators/#Operator-composition","page":"Boundary integral operators","title":"Operator composition","text":"","category":"section"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Effortlessly and efficiently composing operators is a powerful abstraction for integral equations, as it allows for the construction of complex systems from simple building blocks. To show this, let us show how to construct the Calderón projectors:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"beginaligned\nH = beginbmatrix\n -D S \n -N K\nendbmatrix \nendaligned","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"As is well-known [1, Theorem 3.1.3], the operators C_pm = I2 pm H are the projectors (i.e. C_pm^2 = C_pm):","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"using LinearMaps\n# create the block operator\nH = [-Dfmm Sfmm; -Nfmm Kfmm]\nC₊ = I / 2 + H\nC₋ = I / 2 - H\n# define two density functions on Γ\nu = map(q -> cos(q.coords[1] + q.coords[2]), Q)\nv = map(q-> q.coords[1], Q)\nx = [u; v]\n# compute the error in the projector identity\ne₊ = norm(C₊*(C₊*x) - C₊*x, Inf)\ne₋ = norm(C₋*(C₋*x) - C₋*x, Inf)\n@assert e₊ < 1e-5 && e₋ < 1e-5 # hide\nprintln(\"projection error for C₊: $e₊\")\nprintln(\"projection error for C₋: $e₋\")","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"We see that the error in the projector identity is small, as expected. Note that such compositions are not limited to the Calderón projectors, and can be used e.g. to construct the combined field integral equation (CFIE), or to compose a formulation with an operator preconditioner.","category":"page"},{"location":"tutorials/integral_operators/#Custom-kernels","page":"Boundary integral operators","title":"Custom kernels","text":"","category":"section"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"So far we have focused on problems for which Inti.jl provides predefined kernels, and used the high-level syntax of e.g. single_double_layer to construct the integral operators. We will now dig into the details of how to set up a custom kernel function, and how to build an integral operator from it.","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"note: Integral operators coming from PDEs\nIf the integral operator of interest arises from a PDE, it is recommended to define a new AbstractDifferentialOperator type, and implement the required methods for SingleLayerKernel, DoubleLayerKernel, AdjointDoubleLayerKernel, and HyperSingularKernel. This will enable the use of the high-level syntax for constructing boundary integral operators, as well as the use of the compression and correction methods specific to integral operators arising from PDEs.","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"For the sake of simplicity, let us consider the following kernel representing the half-space Dirichlet Green function for Helmholtz's equation in 2D:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":" G_D(boldsymbolx boldsymboly) = fraci4 H^(1)_0(k boldsymbolx - boldsymboly) - fraci4 H^(1)_0(k boldsymbolx - boldsymboly^*)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"where boldsymboly^* = (y_1 -y_2). We can define this kernel as a","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"using SpecialFunctions # for hankelh1\nfunction helmholtz_kernel(target, source, k)\n x, y = Inti.coords(target), Inti.coords(source)\n yc = SVector(y[1], -y[2])\n d, dc = norm(x-y), norm(x-yc)\n # the singularity at x = y needs to be handled separately, so just put a zero\n d == 0 ? zero(ComplexF64) : im / 4 * ( hankelh1(0, k * d) - hankelh1(0, k * dc))\nend","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Let us now consider the integral operator S defined by:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":" Ssigma(boldsymbolx) = int_Gamma G_D(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmd s_boldsymboly quad boldsymbolx in Gamma","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"We can represent S by an IntegralOperator type:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"k = 50π\nλ = 2π/k\nmeshsize = λ / 10\ngeo = Inti.parametric_curve(s -> SVector(cos(s), 2 + sin(s)), 0, 2π)\nΓ = Inti.Domain(geo)\nmsh = Inti.meshgen(Γ; meshsize)\nQ = Inti.Quadrature(msh; qorder = 5)\n# create a local scope to capture `k`\nK = let k = k\n (t,q) -> helmholtz_kernel(t,q,k)\nend\nSop = Inti.IntegralOperator(K, Q, Q)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"note: Signature of custom kernels\nKernel functions passed to IntegralOperator should always take two arguments, target and source, which are both of QuadratureNode. This allows for extracting not only the coords of the nodes, but also the normal vector if needed (e.g. for double-layer or hypersingular kernels).","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"The approximation of Sop now involves two steps:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"build a dense operator S₀ that efficiently computes the matrix-vector product Sop * x for any vector x\ncorrect for the inaccuracies of S₀ due to singular/nearly-singular interactions by adding to it a correction matrix δS","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"For the first step, we will use a hierarchical matrix:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"using HMatrices\nS₀ = Inti.assemble_hmatrix(Sop; rtol = 1e-4)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"The correction matrix δS will be constructed using adaptive_correction:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"δS = Inti.adaptive_correction(Sop; tol = 1e-4, maxdist = 5*meshsize)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"How exactly one adds S₀ and δS to get the final operator depends on the intended usage. For instance, one can use the LinearMap type to simply add them lazily:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"using LinearMaps\nS = LinearMap(S₀) + LinearMap(δS)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"Or, one can add δS to S₀ to create a new object:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"S = S₀ + δS","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"or if performance/memory is a concern, one may want to directly add δS to S₀ in-place:","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"axpy!(1.0, δS, S₀)","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"All of these should give an identical matrix-vector product, but the latter two allow e.g. for the use of direct solvers though an LU factorization.","category":"page"},{"location":"tutorials/integral_operators/","page":"Boundary integral operators","title":"Boundary integral operators","text":"warning: Limitations\nIntegral operators defined from custom kernel functions do not support all the features of the predefined ones. In particular, some singular integration methods (e.g. the Density Interpolation Method) and acceleration routines (e.g. Fast Multipole Method) used to correct for singular and nearly singular integral operators, and to accelerate the matrix vector products, are only available for specific kernels. Check the corrections and compression for more details concerning which methods are compatible with custom kernels.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"(Image: Pluto notebook)","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"begin\n import Pkg as _Pkg\n haskey(ENV, \"PLUTO_PROJECT\") && _Pkg.activate(ENV[\"PLUTO_PROJECT\"])\n using PlutoUI: TableOfContents\nend;","category":"page"},{"location":"pluto-examples/helmholtz_scattering/#Helmholtz-scattering","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"","category":"section"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"note: Important points covered in this example\nCreating a geometry using the Gmsh API\nAssembling integral operators and integral potentials\nSetting up a sound-soft problem in both 2 and 3 spatial dimensions\nUsing GMRES to solve the linear system\nExporting the solution to Gmsh for visualization","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"In this tutorial we will show how to solve an acoustic scattering problem in the context of Helmholtz equation. We will focus on a smooth sound-soft obstacle for simplicity, and introduce along the way the necessary techniques used to handle some difficulties encountered. We will use various packages throughout this example (including of course Inti.jl); if they are not on your environment, you can install them using ] add in the REPL.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"In the following section, we will provide a brief mathematical description of the problem (valid in both 2 and 3 dimensions). We will tackle the two-dimensional problem first, for which we do not need to worry much about performance issues (e.g. compressing the integral operators). Finally, we present a three-dimensional example, where we will use HMatrices.jl to compress the underlying integral operators.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/#Sound-soft-problem","page":"Helmholtz scattering","title":"Sound-soft problem","text":"","category":"section"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"This example concerns the sound-soft acoustic scattering problem. Mathematically, this means solving an exterior problem governed by Helmholtz equation (time-harmonic acoustics) with a Dirichlet boundary condition. More precisely, letting Omega subset mathbbR^d be a bounded domain, and denoting by Gamma = partial Omega its boundary, we wish to solve","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Delta u + k^2 u = 0 quad texton quad mathbbR^d setminus barOmega","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"subject to Dirichlet boundary conditions on Gamma","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"\tu(boldsymbolx) = g(boldsymbolx) quad textfor quad boldsymbolx in Gamma","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"and the Sommerfeld radiation condition at infinity","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"\tlim_boldsymbolx to infty boldsymbolx^(d-1)2 left( fracpartial upartial boldsymbolx - i k u right) = 0","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Here g is a (given) boundary datum, and k is the constant wavenumber.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"For simplicity, we will take Gamma circle/sphere, and focus on the plane-wave scattering problem. This means we will seek a solution u of the form u = u_s + u_i, where u_i is a known incident field, and u_s is the scattered field we wish to compute.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"note: Complex geometries\nThe main reason for focusing on such a simple example is twofold. First, it alleviates the complexities associated with the mesh generation. Second, since exact solutions are known for this problem (in the form of a series), it is easy to assess the accuracy of the solution obtained. In practice, you can use the same techniques to solve the problem on more complex geometries by providing a .msh file containing the mesh.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Using the theory of boundary integral equations, we can express u_s as","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"\tu_s(boldsymbolr) = mathcalDsigma(boldsymbolr) - i k mathcalSsigma(boldsymbolr)","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"where mathcalS is the so-called single layer potential, mathcalD is the double-layer potential, and sigma Gamma to mathbbC is a surface density. This is an indirect formulation (because sigma is an auxiliary density, not necessarily physical) commonly referred to as a combined field formulation. Taking the limit mathbbR^d setminus bar Omega ni x to Gamma, it can be shown that the following equation holds on Gamma:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"\tleft( fracmathrmI2 + mathrmD - i k mathrmS right)sigma = g","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"where mathrmI is the identity operator, and mathrmS and mathrmD are the single- and double-layer operators. This is the combined field integral equation that we will solve. The boundary data g is obtained by applying the sound-soft condition u=0 on Gamma, from which it readily follows that u_s = -u_i on Gamma.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We are now have the necessary background to solve this problem in both 2 and 3 spatial dimensions. Let's load Inti.jl as well as the required dependencies","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"using Inti\nusing LinearAlgebra\nusing StaticArrays\nusing Gmsh\nusing Meshes\nusing GLMakie\nusing SpecialFunctions\nusing GSL\nusing IterativeSolvers\nusing LinearMaps","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"and setup some of the (global) problem parameters:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"k = 4π\nλ = 2π / k\nqorder = 4 # quadrature order\ngorder = 2 # order of geometrical approximation\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/#Two-dimensional-scattering","page":"Helmholtz scattering","title":"Two-dimensional scattering","text":"","category":"section"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We will use Gmsh API for creating .msh file containing the desired geometry and mesh. Here is a function to mesh the circle:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"function gmsh_circle(; name, meshsize, order = 1, radius = 1, center = (0, 0))\n try\n gmsh.initialize()\n gmsh.model.add(\"circle-mesh\")\n gmsh.option.setNumber(\"Mesh.MeshSizeMax\", meshsize)\n gmsh.option.setNumber(\"Mesh.MeshSizeMin\", meshsize)\n gmsh.model.occ.addDisk(center[1], center[2], 0, radius, radius)\n gmsh.model.occ.synchronize()\n gmsh.model.mesh.generate(1)\n gmsh.model.mesh.setOrder(order)\n gmsh.write(name)\n finally\n gmsh.finalize()\n end\nend\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Let us now use gmsh_circle to create a circle.msh file. As customary in wave-scattering problems, we will choose a mesh size that is proportional to wavelength:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"name = joinpath(@__DIR__, \"circle.msh\")\nmeshsize = λ / 5\ngmsh_circle(; meshsize, order = gorder, name)","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We can now import the file and parse the mesh and domain information into Inti.jl using the import_mesh function:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Inti.clear_entities!() # empty the entity cache\nmsh = Inti.import_mesh(name; dim = 2)","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"The code above will import the mesh with all of its geometrical entities. The dim=2 projects all points to two dimensions by ignoring the third component. To extract the domain Omega we need to filter the entities in the mesh; here we will simply filter them based on the geometric_dimension:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Ω = Inti.Domain(e -> Inti.geometric_dimension(e) == 2, Inti.entities(msh))","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"To solve our boundary integral equation usign a Nyström method, we actually need a quadrature of our curve/surface (and possibly the normal vectors at the quadrature nodes). Once a mesh is available, creating a quadrature object can be done via the Quadrature constructor, which requires passing a mesh of the domain that one wishes to generate a quadrature for:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Γ = Inti.boundary(Ω)\nΓ_msh = view(msh, Γ)\nQ = Inti.Quadrature(Γ_msh; qorder)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"tip: Views of a mesh\nIn Inti.jl, you can use domain to create a view of a mesh containing only the elements in the domain. For example view(msh,Γ) will return an SubMesh type that you can use to iterate over the elements in the boundary of the disk without actually creating a new mesh. You can use msh[Γ], or collect(view(msh,Γ)) to create a new mesh containing only the elements and nodes in Γ.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"The object Q now contains a quadrature (of order 4) that can be used to solve a boundary integral equation on Γ. As a sanity check, let's make sure integrating the function x->1 over Q gives an approximation to the perimeter:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"@assert abs(Inti.integrate(x -> 1, Q) - 2π) < 1e-5","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"abs(Inti.integrate(x -> 1, Q) - 2π)","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"With the Quadrature constructed, we now can define discrete approximation to the integral operators mathrmS and mathrmD as follows:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"op = Inti.Helmholtz(; k, dim = 2)\nS, D = Inti.single_double_layer(;\n op,\n target = Q,\n source = Q,\n compression = (method = :none,),\n correction = (method = :dim,),\n)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"There are two well-known difficulties related to the discretization of the boundary integral operators S and D:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"The kernel of the integral operator is not smooth, and thus specialized quadrature rules are required to accurately approximate the matrix entries for which the target and source point lie close (relative to some scale) to each other.\nThe underlying matrix is dense, and thus the storage and computational cost of the operator is prohibitive for large problems unless acceleration techniques such as Fast Multipole Methods or Hierarchical Matrices are employed.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Inti.jl tries to provide a modular and transparent interface for dealing with both of these difficulties, where the general approach for solving a BIE will be to first construct a (possible compressed) naive representation of the integral operator where singular and nearly-singular integrals are ignored, followed by a the creation of a (sparse) correction intended to account for such singular interactions. See single_double_layer for more details on the various options available.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We can now combine S and D to form the combined-field operator:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"L = I / 2 + D - im * k * S\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"where I is the identity matrix. Assuming an incident field along the x_1 direction of the form u_i =e^ikx_1, the right-hand side of the equation can be construted using:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"uᵢ = x -> exp(im * k * x[1]) # plane-wave incident field\nrhs = map(Q) do q\n x = q.coords\n return -uᵢ(x)\nend\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"note: Iterating over a quadrature\nIn computing rhs above, we used map to evaluate the incident field at all quadrature nodes. When iterating over Q, the iterator returns a QuadratureNode, and not simply the coordinate of the quadrature node. This is so that you can access additional information, such as the normal vector, at the quadrature node.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We can now solve the integral equation using e.g. the backslash operator:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"σ = L \\ rhs\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"The variable σ contains the value of the approximate density at the quadrature nodes. To reconstruct a continuous approximation to the solution, we can use single_double_layer_potential to obtain the single- and double-layer potentials, and then combine them as follows:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"𝒮, 𝒟 = Inti.single_double_layer_potential(; op, source = Q)\nuₛ = x -> 𝒟[σ](x) - im * k * 𝒮[σ](x)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"The variable uₛ is an anonymous/lambda function representing the approximate scattered field.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"To assess the accuracy of the solution, we can compare it to the exact solution (obtained by separation of variables in polar coordinates):","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"function circle_helmholtz_soundsoft(pt; radius = 1, k, θin)\n x = pt[1]\n y = pt[2]\n r = sqrt(x^2 + y^2)\n θ = atan(y, x)\n u = 0.0\n r < radius && return u\n c(n) = -exp(im * n * (π / 2 - θin)) * besselj(n, k * radius) / besselh(n, k * radius)\n u = c(0) * besselh(0, k * r)\n n = 1\n while (abs(c(n)) > 1e-12)\n u +=\n c(n) * besselh(n, k * r) * exp(im * n * θ) +\n c(-n) * besselh(-n, k * r) * exp(-im * n * θ)\n n += 1\n end\n return u\nend\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Here is the maximum error on some points located on a circle of radius 2:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"uₑ = x -> circle_helmholtz_soundsoft(x; k, radius = 1, θin = 0) # exact solution\ner = maximum(0:0.01:2π) do θ\n R = 2\n x = (R * cos(θ), R * sin(θ))\n return abs(uₛ(x) - uₑ(x))\nend\n@info \"maximum error = $er\"","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"@assert er < 1e-3","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"As we can see, the error is quite small! Let's use Makie to visualize the solution in this simple (2d) example:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"xx = yy = range(-4; stop = 4, length = 200)\nvals =\n map(pt -> Inti.isinside(pt, Q) ? NaN : real(uₛ(pt) + uᵢ(pt)), Iterators.product(xx, yy))\nfig, ax, hm = heatmap(\n xx,\n yy,\n vals;\n colormap = :inferno,\n interpolate = true,\n axis = (aspect = DataAspect(), xgridvisible = false, ygridvisible = false),\n)\nviz!(Γ_msh; color = :white, segmentsize = 5)\nColorbar(fig[1, 2], hm)\nfig","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"While here we simply used a heatmap to visualize the solution, more complex problems may require a mesh-based visualization, where we would first create a mesh for the places where we want to visualize the solution.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Before moving on to the 3D example let us simply mention that, besides the fact that an analytic solution was available for comparisson, there was nothing special about the unit disk (or the use of GMSH). We could have, for instance, replaced the disk by shapes created parametrically:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"let\n # vertices of an equilateral triangle centered at the origin with a vertex at (0,1)\n a, b, c = SVector(0, 1), SVector(sqrt(3) / 2, -1 / 2), SVector(-sqrt(3) / 2, -1 / 2)\n function circle_f(center, radius)\n return s -> center + radius * SVector(cospi(2 * s[1]), sinpi(2 * s[1]))\n end\n disk1 = Inti.parametric_curve(circle_f(a, 1 / 2), 0, 1)\n disk2 = Inti.parametric_curve(circle_f(b, 1 / 2), 0, 1)\n disk3 = Inti.parametric_curve(circle_f(c, 1 / 2), 0, 1)\n Γ = disk1 ∪ disk2 ∪ disk3\n msh = Inti.meshgen(Γ; meshsize)\n Γ_msh = view(msh, Γ)\n Q = Inti.Quadrature(Γ_msh; qorder)\n S, D = Inti.single_double_layer(;\n op,\n target = Q,\n source = Q,\n compression = (method = :none,),\n correction = (method = :dim,),\n )\n L = I / 2 + D - im * k * S\n rhs = map(q -> -uᵢ(q.coords), Q)\n σ = L \\ rhs\n 𝒮, 𝒟 = Inti.single_double_layer_potential(; op, source = Q)\n uₛ = x -> 𝒟[σ](x) - im * k * 𝒮[σ](x)\n vals = map(\n pt -> Inti.isinside(pt, Q) ? NaN : real(uₛ(pt) + uᵢ(pt)),\n Iterators.product(xx, yy),\n )\n colorrange = (-2, 2)\n fig, ax, hm = heatmap(\n xx,\n yy,\n vals;\n colormap = :inferno,\n colorrange,\n interpolate = true,\n axis = (aspect = DataAspect(), xgridvisible = false, ygridvisible = false),\n )\n viz!(Γ_msh; color = :black, segmentsize = 4)\n Colorbar(fig[1, 2], hm)\n fig\nend","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"note: Near-field evaluation\nIn the example above we employed a naive evaluation of the integral potentials, and therefore the computed solution is expected to become innacurate near the obstacles. See the layer potential tutorial for more information on how to correct for this.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/#Three-dimensional-scattering","page":"Helmholtz scattering","title":"Three-dimensional scattering","text":"","category":"section"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We now consider the same problem in 3D. Unlike the 2D case, assembling dense matrix representations of the integral operators quickly becomes unfeasiable as the problem size increases. Inti adds support for compressing the underlying linear operators by wrapping external libraries. In this example, we will rely on HMatrices.jl to handle the compression.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"The visualization is also more involved, and we will use the Gmsh API to create a not only a mesh of the scatterer, but also of a punctured plane where we will visualize the solution. Here is the function that setups up the mesh:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"function gmsh_sphere(; meshsize, order = gorder, radius = 1, visualize = false, name)\n gmsh.initialize()\n gmsh.model.add(\"sphere-scattering\")\n gmsh.option.setNumber(\"Mesh.MeshSizeMax\", meshsize)\n gmsh.option.setNumber(\"Mesh.MeshSizeMin\", meshsize)\n sphere_tag = gmsh.model.occ.addSphere(0, 0, 0, radius)\n xl, yl, zl = -2 * radius, -2 * radius, 0\n Δx, Δy = 4 * radius, 4 * radius\n rectangle_tag = gmsh.model.occ.addRectangle(xl, yl, zl, Δx, Δy)\n outDimTags, _ =\n gmsh.model.occ.cut([(2, rectangle_tag)], [(3, sphere_tag)], -1, true, false)\n gmsh.model.occ.synchronize()\n gmsh.model.addPhysicalGroup(3, [sphere_tag], -1, \"omega\")\n gmsh.model.addPhysicalGroup(2, [dt[2] for dt in outDimTags], -1, \"sigma\")\n gmsh.model.mesh.generate(2)\n gmsh.model.mesh.setOrder(order)\n visualize && gmsh.fltk.run()\n gmsh.option.setNumber(\"Mesh.SaveAll\", 1) # otherwise only the physical groups are saved\n gmsh.write(name)\n return gmsh.finalize()\nend\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"As before, lets write a file with our mesh, and import it into Inti.jl:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"name_sphere = joinpath(@__DIR__, \"sphere.msh\")\ngmsh_sphere(; meshsize = (λ / 5), order = gorder, name = name_sphere, visualize = false)\nmsh_3d = Inti.import_mesh(name_sphere; dim = 3)","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"tip: Tip\nIf you pass visualize=true to gmsh_sphere, it will open a window with the current model. This is done by calling gmsh.fltk.run(). Note that the main julia thread will be blocked until the window is closed.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Since we created physical groups in Gmsh, we can use them to extract the relevant domains Ω and Σ:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Ω_3d = Inti.Domain(e -> \"omega\" ∈ Inti.labels(e), Inti.entities(msh_3d))\nΣ_3d = Inti.Domain(e -> \"sigma\" ∈ Inti.labels(e), Inti.entities(msh_3d))\nΓ_3d = Inti.boundary(Ω_3d)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We can now create a quadrature as before","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Γ_msh_3d = view(msh_3d, Γ_3d)\nQ_3d = Inti.Quadrature(Γ_msh_3d; qorder)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"tip: Writing/reading a mesh from disk\nWriting and reading a mesh to/from disk can be time consuming. You can avoid doing so by using import_mesh without a file name to import the mesh from the current gmsh session without the need to write it to disk.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Next we assemble the integral operators, indicating that we wish to compress them using hierarchical matrices:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"using HMatrices\nop_3d = Inti.Helmholtz(; k, dim = 3)\nS_3d, D_3d = Inti.single_double_layer(;\n op = op_3d,\n target = Q_3d,\n source = Q_3d,\n compression = (method = :hmatrix, tol = 1e-4),\n correction = (method = :dim,),\n)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Here is how much memory it would take to store the dense representation of these matrices:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"mem = 2 * length(S_3d) * 16 / 1e9 # 16 bytes per complex number, 1e9 bytes per GB, two matrices\nprintln(\"memory required to store S and D: $(mem) GB\")","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Even for this simple example, the dense representation of the integral operators as matrix is already quite expensive!","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"note: Compression methods\nIt is worth mentioning that hierchical matrices are not the only way to compress such integral operators, and may in fact not even be the best for the problem at hand. For example, one could use a fast multipole method (FMM), which has a much lighter memory footprint. See the the tutorial on compression methods for more information.","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We will use the generalized minimal residual (GMRES) iterative solver, for the linear system. This requires us to define a linear operator L, approximating the combined-field operator, that supports the matrix-vector product. While it is possible to add two HMatrix objects to obtain a new HMatrix, this is somewhat more involved due to the addition of low-rank blocks (which requires a recompression). To keep things simple, we will use LinearMaps to lazily compose the operators:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"L_3d = I / 2 + LinearMap(D_3d) - im * k * LinearMap(S_3d)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We can now solve the linear system using GMRES solver:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"rhs_3d = map(Q_3d) do q\n x = q.coords\n return -uᵢ(x)\nend\nσ_3d, hist = gmres(\n L_3d,\n rhs_3d;\n log = true,\n abstol = 1e-6,\n verbose = false,\n restart = 100,\n maxiter = 100,\n)\n@show hist","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"As before, let us represent the solution using IntegralPotentials:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"𝒮_3d, 𝒟_3d = Inti.single_double_layer_potential(; op = op_3d, source = Q_3d)\nuₛ_3d = x -> 𝒟_3d[σ_3d](x) - im * k * 𝒮_3d[σ_3d](x)\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"To check the result, we compare against the exact solution obtained through a series:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"sphbesselj(l, r) = sqrt(π / (2r)) * besselj(l + 1 / 2, r)\nsphbesselh(l, r) = sqrt(π / (2r)) * besselh(l + 1 / 2, r)\nsphharmonic(l, m, θ, ϕ) = GSL.sf_legendre_sphPlm(l, abs(m), cos(θ)) * exp(im * m * ϕ)\nfunction sphere_helmholtz_soundsoft(xobs; radius = 1, k = 1, θin = 0, ϕin = 0)\n x = xobs[1]\n y = xobs[2]\n z = xobs[3]\n r = sqrt(x^2 + y^2 + z^2)\n θ = acos(z / r)\n ϕ = atan(y, x)\n u = 0.0\n r < radius && return u\n function c(l, m)\n return -4π * im^l * sphharmonic(l, -m, θin, ϕin) * sphbesselj(l, k * radius) /\n sphbesselh(l, k * radius)\n end\n l = 0\n for l = 0:60\n for m = -l:l\n u += c(l, m) * sphbesselh(l, k * r) * sphharmonic(l, m, θ, ϕ)\n end\n l += 1\n end\n return u\nend\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We will compute the error on some point on the sphere of radius 2:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"uₑ_3d = (x) -> sphere_helmholtz_soundsoft(x; radius = 1, k = k, θin = π / 2, ϕin = 0)\ner_3d = maximum(1:100) do _\n x̂ = rand(Inti.Point3D) |> normalize # an SVector of unit norm\n x = 2 * x̂\n return abs(uₛ_3d(x) - uₑ_3d(x))\nend\n@info \"error with correction = $er_3d\"","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"@assert er_3d < 1e-3","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"We see that, once again, the approximation is quite accurate. Let us now visualize the solution on the punctured plane (which we labeled as \"sigma\"). Since evaluating the integral representation of the solution at many points is expensive, we will use again use a method to accelerate the evaluation:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Σ_msh = view(msh_3d, Σ_3d)\ntarget = Inti.nodes(Σ_msh)\n\nS_viz, D_viz = Inti.single_double_layer(;\n op = op_3d,\n target,\n source = Q_3d,\n compression = (method = :hmatrix, tol = 1e-4),\n # correction for the nearfield (for visual purposes, set to `:none` to disable)\n correction = (method = :dim, maxdist = meshsize, target_location = :outside),\n)\n\nui_eval_msh = uᵢ.(target)\nus_eval_msh = D_viz * σ_3d - im * k * S_viz * σ_3d\nu_eval_msh = ui_eval_msh + us_eval_msh\nnothing #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"Finalize, we use Meshes.viz to visualize the scattered field:","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"nv = length(Inti.nodes(Γ_msh_3d))\ncolorrange = extrema(real(u_eval_msh))\ncolormap = :inferno\nfig_3d = Figure(; size = (800, 500))\nax_3d = Axis3(fig_3d[1, 1]; aspect = :data)\nviz!(Γ_msh_3d; colorrange, colormap, color = zeros(nv), interpolate = true)\nviz!(Σ_msh; colorrange, colormap, color = real(u_eval_msh))\ncb = Colorbar(fig_3d[1, 2]; label = \"real(u)\", colormap, colorrange)\nfig_3d #hide","category":"page"},{"location":"pluto-examples/helmholtz_scattering/","page":"Helmholtz scattering","title":"Helmholtz scattering","text":"TableOfContents()","category":"page"},{"location":"pluto-examples/toy_example/","page":"Toy example","title":"Toy example","text":"(Image: Pluto notebook)","category":"page"},{"location":"pluto-examples/toy_example/","page":"Toy example","title":"Toy example","text":"begin\n import Pkg as _Pkg\n haskey(ENV, \"PLUTO_PROJECT\") && _Pkg.activate(ENV[\"PLUTO_PROJECT\"])\nend;","category":"page"},{"location":"pluto-examples/toy_example/#Toy-example","page":"Toy example","title":"Toy example","text":"","category":"section"},{"location":"pluto-examples/toy_example/","page":"Toy example","title":"Toy example","text":"All examples in Inti.jl are autogenerated by executing the make.jl script in the docs folder. The workflow uses Pluto.jl to generate markdown files passed to Documenter.jl. The original pluto notebook files are downloadable from the example's page.","category":"page"},{"location":"pluto-examples/toy_example/","page":"Toy example","title":"Toy example","text":"using Inti","category":"page"},{"location":"docstrings/#Docstrings","page":"Docstrings","title":"Docstrings","text":"","category":"section"},{"location":"docstrings/","page":"Docstrings","title":"Docstrings","text":"CurrentModule = Inti","category":"page"},{"location":"docstrings/","page":"Docstrings","title":"Docstrings","text":"Modules = [Inti]","category":"page"},{"location":"docstrings/#Inti.Inti","page":"Docstrings","title":"Inti.Inti","text":"module Inti\n\nLibrary for solving integral equations using Nyström methods.\n\n\n\n\n\n","category":"module"},{"location":"docstrings/#Inti.COMPRESSION_METHODS","page":"Docstrings","title":"Inti.COMPRESSION_METHODS","text":"const COMPRESSION_METHODS = [:none, :hmatrix, :fmm]\n\nAvailable compression methods for the dense linear operators in Inti.\n\n\n\n\n\n","category":"constant"},{"location":"docstrings/#Inti.CORRECTION_METHODS","page":"Docstrings","title":"Inti.CORRECTION_METHODS","text":"const CORRECTION_METHODS = [:none, :dim, :hcubature]\n\nAvailable correction methods for the singular and nearly-singular integrals in Inti.\n\n\n\n\n\n","category":"constant"},{"location":"docstrings/#Inti.ENTITIES","page":"Docstrings","title":"Inti.ENTITIES","text":"const ENTITIES\n\nDictionary mapping EntityKey to GeometricEntity. Contains all entities created in a given session.\n\n\n\n\n\n","category":"constant"},{"location":"docstrings/#Inti.SAME_POINT_TOLERANCE","page":"Docstrings","title":"Inti.SAME_POINT_TOLERANCE","text":"SAME_POINTS_TOLERANCE\n\nTwo points x and y are considerd the same if norm(x-y) ≤ SAME_POINT_TOLERANCE.\n\n\n\n\n\n","category":"constant"},{"location":"docstrings/#Inti.AbstractDifferentialOperator","page":"Docstrings","title":"Inti.AbstractDifferentialOperator","text":"abstract type AbstractDifferentialOperator{N}\n\nA partial differential operator in dimension N.\n\nAbstractDifferentialOperator types are used to define AbstractKernels related to fundamental solutions of differential operators.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.AbstractKernel","page":"Docstrings","title":"Inti.AbstractKernel","text":"abstract type AbstractKernel{T}\n\nA kernel functions K with the signature K(target,source)::T.\n\nSee also: SingleLayerKernel, DoubleLayerKernel, AdjointDoubleLayerKernel, HyperSingularKernel\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.AbstractMesh","page":"Docstrings","title":"Inti.AbstractMesh","text":"abstract type AbstractMesh{N,T}\n\nAn abstract mesh structure in dimension N with primite data of type T (e.g. Float64 for double precision representation).\n\nConcrete subtypes of AbstractMesh should implement ElementIterator for accessing the mesh elements.\n\nSee also: Mesh\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.AdjointDoubleLayerKernel","page":"Docstrings","title":"Inti.AdjointDoubleLayerKernel","text":"struct AdjointDoubleLayerKernel{T,Op} <: AbstractKernel{T}\n\nGiven an operator Op, construct its free-space adjoint double-layer kernel. This corresponds to the transpose(γ₁,ₓ[G]), where G is the SingleLayerKernel. For operators such as Laplace or Helmholtz, this is simply the normal derivative of the fundamental solution respect to the target variable.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.BlockArray","page":"Docstrings","title":"Inti.BlockArray","text":"struct BlockArray{T<:StaticArray,N,S} <: AbstractMatrix{T,N}\n\nA struct which behaves like an Array{T,N}, but with the underlying data stored as a Matrix{S}, where S::Number = eltype(T) is the scalar type associated with T. This allows for the use of blas routines under-the-hood, while providing a convenient interface for handling matrices over StaticArrays.\n\nusing StaticArrays\nT = SMatrix{2,2,Int,4}\nB = Inti.BlockArray{T}([i*j for i in 1:4, j in 1:4])\n\n# output\n\n2×2 Inti.BlockArray{SMatrix{2, 2, Int64, 4}, 2, Int64}:\n [1 2; 2 4] [3 4; 6 8]\n [3 6; 4 8] [9 12; 12 16]\n\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.DimParameters","page":"Docstrings","title":"Inti.DimParameters","text":"struct DimParameters\n\nParameters associated with the density interpolation method used in bdim_correction.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Domain","page":"Docstrings","title":"Inti.Domain","text":"struct Domain\n\nRepresentation of a geometrical domain formed by a set of entities with the same geometric dimension. For basic set operations on domains are supported (union, intersection, difference, etc), and they all return a new Domain object.\n\nCalling keys(Ω) returns the set of EntityKeys that make up the domain; given a key, the underlying entities can be accessed with global_get_entity(key).\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Domain-Tuple{Function, Any}","page":"Docstrings","title":"Inti.Domain","text":"Domain([f::Function,] keys)\n\nCreate a domain from a set of EntityKeys. Optionally, a filter function f can be passed to filter the entities.\n\nNote that all entities in a domain must have the same geometric dimension.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.Domain-Tuple{Function, Inti.AbstractMesh}","page":"Docstrings","title":"Inti.Domain","text":"Domain(f::Function, msh::AbstractMesh)\n\nCall Domain(f, ents) on ents = entities(msh).\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.DoubleLayerKernel","page":"Docstrings","title":"Inti.DoubleLayerKernel","text":"struct DoubleLayerKernel{T,Op} <: AbstractKernel{T}\n\nGiven an operator Op, construct its free-space double-layer kernel. This corresponds to the γ₁ trace of the SingleLayerKernel. For operators such as Laplace or Helmholtz, this is simply the normal derivative of the fundamental solution respect to the source variable.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Elastostatic","page":"Docstrings","title":"Inti.Elastostatic","text":"struct Elastostatic{N,T} <: AbstractDifferentialOperator{N}\n\nElastostatic operator in N dimensions: -μΔu - (μ+λ)∇(∇⋅u)\n\nNote that the displacement u is a vector of length N since this is a vectorial problem.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ElementIterator","page":"Docstrings","title":"Inti.ElementIterator","text":"struct ElementIterator{E,M} <: AbstractVector{E}\n\nStructure to lazily access elements of type E in a mesh of type M. This is particularly useful for LagrangeElements, where the information to reconstruct the element is stored in the mesh connectivity matrix.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.EmbeddedQuadrature","page":"Docstrings","title":"Inti.EmbeddedQuadrature","text":"struct EmbeddedQuadrature{L,H,D} <: ReferenceQuadrature{D}\n\nA quadrature rule for the reference shape D based on a high-order quadrature of type H and a low-order quadrature of type L. The low-order quadrature rule is embedded in the sense that its n nodes are exactly the first n nodes of the high-order quadrature rule.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.EntityKey","page":"Docstrings","title":"Inti.EntityKey","text":"EntityKey\n\nUsed to represent the key of a GeometricEntity, comprised of a dim and a tag field, where dim is the geometrical dimension of the entity, and tag is a unique integer identifying the entity.\n\nThe sign of the tag field is used to distinguish the orientation of the entity, and is ignored when comparing two EntityKeys for equality.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Fejer","page":"Docstrings","title":"Inti.Fejer","text":"struct Fejer{N}\n\nN-point Fejer's first quadrature rule for integrating a function over [0,1]. Exactly integrates all polynomials of degree ≤ N-1.\n\nusing Inti\n\nq = Inti.Fejer(;order=10)\n\nInti.integrate(cos,q) ≈ sin(1) - sin(0)\n\n# output\n\ntrue\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Gauss","page":"Docstrings","title":"Inti.Gauss","text":"struct Gauss{D,N} <: ReferenceQuadrature{D}\n\nTabulated N-point symmetric Gauss quadrature rule for integration over D.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.GaussLegendre","page":"Docstrings","title":"Inti.GaussLegendre","text":"struct GaussLegendre{N,T}\n\nN-point Gauss-Legendre quadrature rule for integrating a function over [0,1]. Exactly integrates all polynomials of degree ≤ 2N-1.\n\nusing Inti\n\nq = Inti.GaussLegendre(;order=10)\n\nInti.integrate(cos,q) ≈ sin(1) - sin(0)\n\n# output\n\ntrue\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.GeometricEntity","page":"Docstrings","title":"Inti.GeometricEntity","text":"struct GeometricEntity\n\nGeometrical objects such as lines, surfaces, and volumes.\n\nGeometrical entities are stored in a global ENTITIES dictionary mapping EntityKey to the corresponding GeometricEntity, and usually entities are manipulated through their keys.\n\nA GeometricEntity can also contain a pushforward field used to parametrically represent the entry as the image of a reference domain (pushforward.domain) under some function (pushforward.parametrization).\n\nNote that entities are manipulated through their keys, and the GeometricEntity constructor returns the key of the created entity; to retrieve the entity, use the global_get_entity function.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.GeometricEntity-Tuple{String}","page":"Docstrings","title":"Inti.GeometricEntity","text":"GeometricEntity(shape::String [; translation, rotation, scaling, kwargs...])\n\nConstructs a geometric entity with the specified shape and optional parameters, and returns its key.\n\nArguments\n\nshape::String: The shape of the geometric entity.\ntranslation: The translation vector of the geometric entity. Default is SVector(0, 0, 0).\nrotation: The rotation vector of the geometric entity. Default is SVector(0, 0, 0).\nscaling: The scaling vector of the geometric entity. Default is SVector(1, 1, 1).\nkwargs...: Additional keyword arguments to be passed to the shape constructor.\n\nSupported shapes\n\nellipsoid\ntorus\nbean\nacorn\ncushion\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.Helmholtz-Tuple{}","page":"Docstrings","title":"Inti.Helmholtz","text":"Helmholtz(; k, dim)\n\nHelmholtz operator in dim dimensions: -Δu - k²u.\n\nThe parameter k can be a real or complex number. For purely imaginary wavenumbers, consider using the Yukawa kernel.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.HyperRectangle","page":"Docstrings","title":"Inti.HyperRectangle","text":"struct HyperRectangle{N,T} <: ReferenceInterpolant{ReferenceHyperCube{N},T}\n\nAxis-aligned hyperrectangle in N dimensions given by low_corner::SVector{N,T} and high_corner::SVector{N,T}.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.HyperSingularKernel","page":"Docstrings","title":"Inti.HyperSingularKernel","text":"struct HyperSingularKernel{T,Op} <: AbstractKernel{T}\n\nGiven an operator Op, construct its free-space hypersingular kernel. This corresponds to the transpose(γ₁,ₓγ₁[G]), where G is the SingleLayerKernel. For operators such as Laplace or Helmholtz, this is simply the normal derivative respect to the target variable of the DoubleLayerKernel.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.IntegralOperator","page":"Docstrings","title":"Inti.IntegralOperator","text":"struct IntegralOperator{T} <: AbstractMatrix{T}\n\nA discrete linear integral operator given by\n\nIu(x) = int_Gamma_s K(xy)u(y) ds_y x in Gamma_t\n\nwhere Gamma_s and Gamma_t are the source and target domains, respectively.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.IntegralPotential","page":"Docstrings","title":"Inti.IntegralPotential","text":"struct IntegralPotential\n\nRepresent a potential given by a kernel and a quadrature over which integration is performed.\n\nIntegralPotentials are created using IntegralPotential(kernel, quadrature).\n\nEvaluating an integral potential requires a density σ (defined over the quadrature nodes of the source mesh) and a point x at which to evaluate the integral\n\nint_Gamma K(oldsymbolxoldsymboly)sigma(y) ds_y x not in Gamma\n\nAssuming 𝒮 is an integral potential and σ is a vector of values defined on quadrature, calling 𝒮[σ] creates an anonymous function that can be evaluated at any point x.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Kronrod","page":"Docstrings","title":"Inti.Kronrod","text":"struct Kronrod{D,N} <: ReferenceQuadrature{D}\n\nN-point Kronrod rule obtained by adding n+1 points to a Gauss quadrature containing n points. The order is either 3n + 1 for n even or 3n + 2 for n odd.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.LagrangeCube","page":"Docstrings","title":"Inti.LagrangeCube","text":"const LagrangeSquare = LagrangeElement{ReferenceSquare}\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.LagrangeElement","page":"Docstrings","title":"Inti.LagrangeElement","text":"struct LagrangeElement{D,Np,T} <: ReferenceInterpolant{D,T}\n\nA polynomial p : D → T uniquely defined by its Np values on the Np reference nodes of D.\n\nThe return type T should be a vector space (i.e. support addition and multiplication by scalars). For istance, T could be a number or a vector, but not a Tuple.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.LagrangeLine","page":"Docstrings","title":"Inti.LagrangeLine","text":"const LagrangeLine = LagrangeElement{ReferenceLine}\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.LagrangeSquare","page":"Docstrings","title":"Inti.LagrangeSquare","text":"const LagrangeSquare = LagrangeElement{ReferenceSquare}\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.LagrangeTetrahedron","page":"Docstrings","title":"Inti.LagrangeTetrahedron","text":"const LagrangeTetrahedron = LagrangeElement{ReferenceTetrahedron}\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.LagrangeTriangle","page":"Docstrings","title":"Inti.LagrangeTriangle","text":"const LagrangeTriangle = LagrangeElement{ReferenceTriangle}\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Laplace-Tuple{}","page":"Docstrings","title":"Inti.Laplace","text":"Laplace(; dim)\n\nLaplace's differential operator in dim dimension: -Δu. ```\n\nNote the negative sign in the definition.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.Mesh","page":"Docstrings","title":"Inti.Mesh","text":"struct Mesh{N,T} <: AbstractMesh{N,T}\n\nUnstructured mesh defined by a set of nodes(of typeSVector{N,T}`), and a dictionary mapping element types to connectivity matrices. Each columns of a given connectivity matrix stores the integer tags of the nodes in the mesh comprising the element.\n\nAdditionally, the mesh contains a mapping from EntityKeys to the tags of the elements composing the entity. This can be used to extract submeshes from a given mesh using e.g. view(msh,Γ) or msh[Γ], where Γ is a Domain.\n\nSee elements for a way to iterate over the elements of a mesh.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ModifiedHelmholtz","page":"Docstrings","title":"Inti.ModifiedHelmholtz","text":"const ModifiedHelmholtz\n\nType alias for the Yukawa operator.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.MultiIndex","page":"Docstrings","title":"Inti.MultiIndex","text":"MultiIndex{N}\n\nWrapper around NTuple{N,Int} mimicking a multi-index in ℤ₀ᴺ.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ParametricElement","page":"Docstrings","title":"Inti.ParametricElement","text":"ParametricElement{D,T,F} <: ReferenceInterpolant{D,T}\n\nAn element represented through a explicit function f mapping D into the element. For performance reasons, f should take as input a StaticVector and return a StaticVector or StaticArray.\n\nSee also: ReferenceInterpolant, LagrangeElement\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ParametricElement-Union{Tuple{T}, Tuple{N}, Tuple{Any, Inti.HyperRectangle{N, T}}} where {N, T}","page":"Docstrings","title":"Inti.ParametricElement","text":"ParametricElement(f, d::HyperRectangle)\n\nConstruct the element defined as the image of f over d.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.PolynomialSpace","page":"Docstrings","title":"Inti.PolynomialSpace","text":"struct PolynomialSpace{D,K}\n\nThe space of all polynomials of degree ≤K, commonly referred to as ℙₖ.\n\nThe type parameter D, of singleton type, is used to determine the reference domain of the polynomial basis. In particular, when D is a hypercube in d dimensions, the precise definition is ℙₖ = span{𝐱ᶿ : 0≤max(θ)≤ K}; when D is a d-dimensional simplex, the space is ℙₖ = span{𝐱ᶿ : 0≤sum(θ)≤ K}, where θ ∈ 𝐍ᵈ is a multi-index.\n\nSee also: monomial_basis, lagrange_basis\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Quadrature","page":"Docstrings","title":"Inti.Quadrature","text":"struct Quadrature{N,T} <: AbstractVector{QuadratureNode{N,T}}\n\nA collection of QuadratureNodes used to integrate over an AbstractMesh.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Quadrature-Tuple{Inti.Domain}","page":"Docstrings","title":"Inti.Quadrature","text":"Quadrature(Ω::Domain; meshsize, qorder)\n\nConstruct a Quadrature over the domain Ω with a mesh of size meshsize and quadrature order qorder.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.Quadrature-Union{Tuple{T}, Tuple{N}, Tuple{Inti.AbstractMesh{N, T}, Dict}} where {N, T}","page":"Docstrings","title":"Inti.Quadrature","text":"Quadrature(msh::AbstractMesh, etype2qrule::Dict)\nQuadrature(msh::AbstractMesh, qrule::ReferenceQuadrature)\nQuadrature(msh::AbstractMesh; qorder)\n\nConstruct a Quadrature for msh, where for each element type E in msh the reference quadrature q = etype2qrule[E] is used. When a single qrule is passed, it is used for all element types in msh.\n\nIf an order keyword is passed, a default quadrature of the desired order is used for each element type usig _qrule_for_reference_shape.\n\nFor co-dimension one elements, the normal vector is also computed and stored in the QuadratureNodes.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.QuadratureNode","page":"Docstrings","title":"Inti.QuadratureNode","text":"QuadratureNode{N,T<:Real}\n\nA point in ℝᴺ with a weight for performing numerical integration. A QuadratureNode can optionally store a normal vector.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceCube","page":"Docstrings","title":"Inti.ReferenceCube","text":"const ReferenceCube = ReferenceHyperCube{3}\n\nSingleton type representing the unit cube [0,1]³.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceHyperCube","page":"Docstrings","title":"Inti.ReferenceHyperCube","text":"struct ReferenceHyperCube{N} <: ReferenceShape{N}\n\nSingleton type representing the axis-aligned hypercube in N dimensions with the lower corner at the origin and the upper corner at (1,1,…,1).\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceInterpolant","page":"Docstrings","title":"Inti.ReferenceInterpolant","text":"abstract type ReferenceInterpolant{D,T}\n\nInterpolanting function mapping points on the domain D<:ReferenceShape (of singleton type) to a value of type T.\n\nInstances el of ReferenceInterpolant are expected to implement:\n\nel(x̂): evaluate the interpolation scheme at the (reference) coordinate x̂ ∈ D.\njacobian(el,x̂) : evaluate the jacobian matrix of the interpolation at the (reference) coordinate x ∈ D.\n\nnote: Note\nFor performance reasons, both el(x̂) and jacobian(el,x̂) should take as input a StaticVector and output a static vector or static array.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceLine","page":"Docstrings","title":"Inti.ReferenceLine","text":"const ReferenceLine = ReferenceHyperCube{1}\n\nSingleton type representing the [0,1] segment.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceQuadrature","page":"Docstrings","title":"Inti.ReferenceQuadrature","text":"abstract type ReferenceQuadrature{D}\n\nA quadrature rule for integrating a function over the domain D <: ReferenceShape.\n\nCalling x,w = q() returns the nodes x, given as SVectors, and weights w, for performing integration over domain(q).\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceShape","page":"Docstrings","title":"Inti.ReferenceShape","text":"abstract type ReferenceShape\n\nA fixed reference domain/shape. Used mostly for defining more complex shapes as transformations mapping an ReferenceShape to some region of ℜᴹ.\n\nSee e.g. ReferenceLine or ReferenceTriangle for some examples of concrete subtypes.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceSimplex","page":"Docstrings","title":"Inti.ReferenceSimplex","text":"struct ReferenceSimplex{N}\n\nSingleton type representing the N-simplex with N+1 vertices (0,...,0),(0,...,0,1),(0,...,0,1,0),(1,0,...,0)\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceSquare","page":"Docstrings","title":"Inti.ReferenceSquare","text":"const ReferenceSquare = ReferenceHyperCube{2}\n\nSingleton type representing the unit square [0,1]².\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceTetrahedron","page":"Docstrings","title":"Inti.ReferenceTetrahedron","text":"struct ReferenceTetrahedron\n\nSingleton type representing the tetrahedron with vertices (0,0,0),(0,0,1),(0,1,0),(1,0,0)\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.ReferenceTriangle","page":"Docstrings","title":"Inti.ReferenceTriangle","text":"struct ReferenceTriangle\n\nSingleton type representing the triangle with vertices (0,0),(1,0),(0,1)\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.SingleLayerKernel","page":"Docstrings","title":"Inti.SingleLayerKernel","text":"struct SingleLayerKernel{T,Op} <: AbstractKernel{T}\n\nThe free-space single-layer kernel (i.e. the fundamental solution) of an Op <: AbstractDifferentialOperator.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Stokes-Tuple{}","page":"Docstrings","title":"Inti.Stokes","text":"Stokes(; μ, dim)\n\nStokes operator in dim dimensions: -μΔu + p u.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.SubMesh","page":"Docstrings","title":"Inti.SubMesh","text":"struct SubMesh{N,T} <: AbstractMesh{N,T}\n\nView into a parent mesh over a given domain.\n\nA submesh implements the interface for AbstractMesh; therefore you can iterate over elements of the submesh just like you would with a mesh.\n\nConstruct SubMeshs using view(parent,Ω::Domain).\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.TensorProductQuadrature","page":"Docstrings","title":"Inti.TensorProductQuadrature","text":"TensorProductQuadrature{N,Q}\n\nA tensor-product of one-dimension quadrature rules. Integrates over [0,1]^N.\n\nExamples\n\nqx = Inti.Fejer(10)\nqy = Inti.Fejer(15)\nq = Inti.TensorProductQuadrature(qx,qy)\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.VioreanuRokhlin","page":"Docstrings","title":"Inti.VioreanuRokhlin","text":"struct VioreanuRokhlin{D,N} <: ReferenceQuadrature{D}\n\nTabulated N-point Vioreanu-Rokhlin quadrature rule for integration over D.\n\n\n\n\n\n","category":"type"},{"location":"docstrings/#Inti.Yukawa-Tuple{}","page":"Docstrings","title":"Inti.Yukawa","text":"Yukawa(; λ, dim)\n\nYukawa operator, also known as modified Helmholtz, in dim dimensions: -Δu + λ²u.\n\nThe parameter λ is a positive number. Note the negative sign in front of the Laplacian.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Base.iterate","page":"Docstrings","title":"Base.iterate","text":"iterate(Ω::Domain)\n\nIterating over a domain means iterating over its entities.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti._copyto!-Tuple{AbstractMatrix{<:Number}, AbstractMatrix{<:StaticArraysCore.SMatrix}}","page":"Docstrings","title":"Inti._copyto!","text":"_copyto!(target,source)\n\nDefaults to Base.copyto!, but includes some specialized methods to copy from a Matrix of SMatrix to a Matrix of Numbers and viceversa.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._get_gauss_qcoords_and_qweights-Tuple{Type{<:Inti.ReferenceShape}, Any}","page":"Docstrings","title":"Inti._get_gauss_qcoords_and_qweights","text":"_get_gauss_and_qweights(R::Type{<:ReferenceShape{D}}, N) where D\n\nReturns the N-point symmetric gaussian qnodes and qweights (x, w) for integration over R.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._get_vioreanurokhlin_qcoords_and_qweights-Tuple{Type{<:Inti.ReferenceShape}, Any}","page":"Docstrings","title":"Inti._get_vioreanurokhlin_qcoords_and_qweights","text":"_get_vioreanurokhlin_qcoords_and_qweights(R::Type{<:ReferenceShape{D}}, N) where D\n\nReturns the N-point Vioreanu-Rokhlin qnodes and qweights (x, w) for integration over R.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._green_multiplier-Tuple{Symbol}","page":"Docstrings","title":"Inti._green_multiplier","text":"_green_multiplier(s::Symbol)\n\nReturn -1.0 if s == :inside, 0.0 if s == :outside, and -0.5 if s == :on; otherwise, throw an error. The orientation is relative to the normal of the bounding curve/surface.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._green_multiplier-Union{Tuple{N}, Tuple{StaticArraysCore.SVector, Inti.Quadrature{N}}} where N","page":"Docstrings","title":"Inti._green_multiplier","text":"_green_multiplier(x, quad)\n\nHelper function to help determine the constant σ in the Green identity S[γ₁u](x)\n\nD[γ₀u](x) + σ*u(x) = 0. This can be used as a predicate to determine whether a\n\npoint is inside a domain or not.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._meshgen-Tuple{Any, Inti.HyperRectangle, NTuple{N, T} where {N, T}}","page":"Docstrings","title":"Inti._meshgen","text":"_meshgen(f,d::HyperRectangle,sz)\n\nCreate prod(sz) elements of ParametricElement type representing the push forward of f on each of the subdomains defined by a uniform cartesian mesh of d of size sz.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._normal-Union{Tuple{StaticArraysCore.SMatrix{N, M}}, Tuple{M}, Tuple{N}} where {N, M}","page":"Docstrings","title":"Inti._normal","text":"_normal(jac::SMatrix{M,N})\n\nGiven a an M by N matrix representing the jacobian of a codimension one object, compute the normal vector.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti._qrule_for_reference_shape-Tuple{Any, Any}","page":"Docstrings","title":"Inti._qrule_for_reference_shape","text":"_qrule_for_reference_shape(ref,order)\n\nGiven a reference shape and a desired quadrature order, return an appropiate quadrature rule.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.acorn-Tuple{}","page":"Docstrings","title":"Inti.acorn","text":"acorn(; translation, rotation, scaling, labels)\n\nCreate an acorn entity in 3D, and apply optional transformations. Returns the key.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.adaptive_correction-Tuple{Inti.IntegralOperator}","page":"Docstrings","title":"Inti.adaptive_correction","text":"adaptive_correction(iop::IntegralOperator; tol, maxdist = farfield_distance(iop; atol), maxsplit = 1000])\n\nGiven an integral operator iop, this function provides a sparse correction to iop for the entries i,j such that the distance between the i-th target and the j-th source is less than maxdist.\n\nChoosing maxdist is a trade-off between accuracy and efficiency. The smaller the value, the fewer corrections are needed, but this may compromise the accuracy. For a fixed quadrature, the size of maxdist has to grow as the tolerance tol decreases. The default [farfield_distance(iop; tol)](@ref) provides a heuristic to determine a suitablemaxdist`.\n\nThe correction is computed by using the adaptive_integration routine, with a tolerance atol and a maximum number of subdivisions maxsplit; see adaptive_integration for more details.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.adaptive_integration-Tuple{Any, Inti.EmbeddedQuadrature}","page":"Docstrings","title":"Inti.adaptive_integration","text":"adaptive_integration(f, τ̂::RefernceShape; kwargs...)\nadaptive_integration(f, qrule::EmbeddedQuadrature; kwargs...)\n\nUse an adaptive procedure to estimate the integral of f over τ̂ = domain(qrule). The following optional keyword arguments are available:\n\natol::Real=0.0: absolute tolerance for the integral estimate\nrtol::Real=0.0: relative tolerance for the integral estimate\nmaxsplit::Int=1000: maximum number of times to split the domain\nnorm::Function=LinearAlgebra.norm: norm to use for error estimates\nbuffer::BinaryHeap: a pre-allocated buffer to use for the adaptive procedure (see allocate_buffer)\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.adaptive_integration_singular-Tuple{Any, Inti.ReferenceHyperCube{1}, Any}","page":"Docstrings","title":"Inti.adaptive_integration_singular","text":"adaptive_integration_singular(f, τ̂, x̂ₛ; kwargs...)\n\nSimilar to adaptive_integration, but indicates that f has an isolated (integrable) singularity at x̂ₛ ∈ x̂ₛ.\n\nThe integration is performed by splitting τ̂ so that x̂ₛ is a fixed vertex, guaranteeing that f is never evaluated at x̂ₛ. Aditionally, a suitable change of variables may be applied to alleviate the singularity and improve the rate of convergence.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.adj_double_layer_hypersingular-Tuple{}","page":"Docstrings","title":"Inti.adj_double_layer_hypersingular","text":"adj_double_layer_hypersingular(; op, target, source, compression,\ncorrection)\n\nSimilar to single_double_layer, but for the adjoint double-layer and hypersingular operators. See the documentation of [single_double_layer] for a description of the arguments.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.allocate_buffer-Tuple{Any, Inti.EmbeddedQuadrature}","page":"Docstrings","title":"Inti.allocate_buffer","text":"allocate_buffer(f, quad::EmbeddedQuadrature)\n\nCreate the buffer needed for the call adaptive_integration(f, τ̂; buffer, ...).\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.ambient_dimension","page":"Docstrings","title":"Inti.ambient_dimension","text":"ambient_dimension(x)\n\nDimension of the ambient space where x lives. For geometrical objects this can differ from its geometric_dimension; for example a triangle in ℝ³ has ambient dimension 3 but geometric dimension 2, while a curve in ℝ³ has ambient dimension 3 but geometric dimension 1.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.assemble_fmm-Tuple{Inti.IntegralOperator, Vararg{Any}}","page":"Docstrings","title":"Inti.assemble_fmm","text":"assemble_fmm(iop; atol)\n\nSet up a 2D or 3D FMM for evaluating the discretized integral operator iop associated with the op. In 2D the FMM2D or FMMLIB2D library is used (whichever was most recently loaded) while in 3D FMM3D is used.\n\nwarning: FMMLIB2D\nFMMLIB2D does no checking for if the targets and sources coincide, and will return Inf values if iop.target !== iop.source, but there is a point x ∈ iop.target such that x ∈ iop.source.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.assemble_hmatrix-Tuple","page":"Docstrings","title":"Inti.assemble_hmatrix","text":"assemble_hmatrix(iop[; atol, rank, rtol, eta])\n\nAssemble an H-matrix representation of the discretized integral operator iop using the HMatrices.jl library.\n\nSee the documentation of HMatrices for more details on usage and other keyword arguments.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.assemble_matrix-Tuple{Inti.IntegralOperator}","page":"Docstrings","title":"Inti.assemble_matrix","text":"assemble_matrix(iop::IntegralOperator; threads = true)\n\nAssemble a dense matrix representation of an IntegralOperator.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.bdim_correction-Tuple{Any, Any, Inti.Quadrature, Any, Any}","page":"Docstrings","title":"Inti.bdim_correction","text":"bdim_correction(op,X,Y,S,D; green_multiplier, kwargs...)\n\nGiven a op and a (possibly innacurate) discretizations of its single and double-layer operators S and D (taking a vector of values on Y and returning a vector on of values on X), compute corrections δS and δD such that S + δS and D + δD are more accurate approximations of the underlying single- and double-layer integral operators.\n\nSee [7] for more details on the method.\n\nArguments\n\nRequired:\n\nop must be an AbstractDifferentialOperator\nY must be a Quadrature object of a closed surface\nX is either inside, outside, or on Y\nS and D are approximations to the single- and double-layer operators for op taking densities in Y and returning densities in X.\ngreen_multiplier (keyword argument) is a vector with the same length as X storing the value of μ(x) for x ∈ X in the Green identity S\\[γ₁u\\](x) - D\\[γ₀u\\](x) + μ*u(x) = 0. See _green_multiplier.\n\nOptional kwargs:\n\nparameters::DimParameters: parameters associated with the density interpolation method\nderivative: if true, compute the correction to the adjoint double-layer and hypersingular operators instead. In this case, S and D should be replaced by a (possibly innacurate) discretization of adjoint double-layer and hypersingular operators, respectively.\nmaxdist: distance beyond which interactions are considered sufficiently far so that no correction is needed. This is used to determine a threshold for nearly-singular corrections when X and Y are different surfaces. When X === Y, this is not needed.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.bean-Tuple{}","page":"Docstrings","title":"Inti.bean","text":"bean(; translation, rotation, scaling, labels)\n\nCreate a bean entity in 3D, and apply optional transformations. Returns the key.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.boundary-Tuple{Inti.Domain}","page":"Docstrings","title":"Inti.boundary","text":"boundary(Ω::Domain)\n\nReturn the external boundaries of a domain.\n\nSee also: external_boundary, internal_boundary, skeleton.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.boundary_idxs-Tuple{Inti.LagrangeElement{Inti.ReferenceHyperCube{1}}}","page":"Docstrings","title":"Inti.boundary_idxs","text":"boundary_idxs(el::LagrangeElement)\n\nThe indices of the nodes in el that define the boundary of the element.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.cart2sph-Tuple{Any, Any, Any}","page":"Docstrings","title":"Inti.cart2sph","text":"cart2sph(x,y,z)\n\nMap cartesian coordinates x,y,z to spherical ones r, θ, φ representing the radius, elevation, and azimuthal angle respectively. The convention followed is that 0 ≤ θ ≤ π and -π < φ ≤ π. Same as the cart2sph function in MATLAB.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.connectivity-Tuple{Inti.Mesh, DataType}","page":"Docstrings","title":"Inti.connectivity","text":"connectivity(msh::AbstractMesh,E::DataType)\n\nReturn the connectivity matrix for elements of type E in msh. The integer tags in the matrix refer to the points in nodes(msh)\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.coords-Tuple{T} where T","page":"Docstrings","title":"Inti.coords","text":"coords(q)\n\nReturn the spatial coordinates of q.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.cushion-Tuple{}","page":"Docstrings","title":"Inti.cushion","text":"cushion(; translation, rotation, scaling, labels)\n\nCreate a cushion entity in 3D, and apply optional transformations. Returns the key.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.decompose","page":"Docstrings","title":"Inti.decompose","text":"decompose(s::ReferenceShape,x)\n\nDecompose an ReferenceShape into LagrangeElements so that x is a fixed vertex of the children elements.\n\nThe decomposed elements may be oriented differently than the parent, and thus care has to be taken regarding e.g. normal vectors.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.degree-Union{Tuple{Type{<:Inti.LagrangeElement{D, Np}}}, Tuple{Np}, Tuple{D}} where {D, Np}","page":"Docstrings","title":"Inti.degree","text":"degree(el::LagrangeElement)\ndegree(el::Type{<:LagrangeElement})\n\nThe polynomial degree el.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.dimension-Union{Tuple{Type{Inti.PolynomialSpace{D, K}}}, Tuple{K}, Tuple{D}} where {D, K}","page":"Docstrings","title":"Inti.dimension","text":"dimension(space)\n\nThe length of a basis for space; i.e. the number of linearly independent elements required to span space.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.dom2elt-Tuple{Inti.AbstractMesh, Inti.Domain, DataType}","page":"Docstrings","title":"Inti.dom2elt","text":"dom2elt(m::Mesh,Ω,E)::Vector{Int}\n\nCompute the element indices idxs of the elements of type E composing Ω.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.dom2qtags-Tuple{Inti.Quadrature, Inti.Domain}","page":"Docstrings","title":"Inti.dom2qtags","text":"dom2qtags(Q::Quadrature, dom::Domain)\n\nGiven a domain, return the indices of the quadratures nodes in Q associated to its quadrature.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.domain","page":"Docstrings","title":"Inti.domain","text":"domain(f)\n\nGiven a function-like object f: Ω → R, return Ω.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.domain-Tuple{Inti.AbstractMesh}","page":"Docstrings","title":"Inti.domain","text":"domain(msh::AbstractMesh)\n\nReturn a [Domain] containing of all entities covered by the mesh.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.domain-Tuple{Inti.Quadrature}","page":"Docstrings","title":"Inti.domain","text":"domain(Q::Quadrature)\n\nThe Domain over which Q performs integration.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.domain-Union{Tuple{Inti.ReferenceQuadrature{D}}, Tuple{D}} where D","page":"Docstrings","title":"Inti.domain","text":"domain(q::ReferenceQuadrature)\n\nThe domain of integratino for quadrature rule q.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.element_types","page":"Docstrings","title":"Inti.element_types","text":"element_types(msh::AbstractMesh)\n\nReturn the element types present in the msh.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.elements","page":"Docstrings","title":"Inti.elements","text":"elements(msh::AbstractMesh [, E::DataType])\n\nReturn the elements of a msh. Passing and element type E will restricts to elements of that type.\n\nA common pattern to avoid type-instabilies in performance critical parts of the code is to use a function barrier, as illustrated below:\n\nfor E in element_types(msh)\n _long_computation(elements(msh, E), args...)\nend\n\n@noinline function _long_computation(iter, args...)\n for el in iter # the type of el is known at compile time\n # do something with el\n end\nend\n\nwhere a dynamic dispatch is performed only on the element types (typically small for a given mesh).\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.ellipsoid-Tuple{}","page":"Docstrings","title":"Inti.ellipsoid","text":"ellipsoid(; translation, rotation, scaling, labels)\n\nCreate an ellipsoid entity in 3D, and apply optional transformations. Returns the key of the created entity.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.ent2etags-Tuple{Inti.Mesh}","page":"Docstrings","title":"Inti.ent2etags","text":"ent2etags(msh::AbstractMesh)\n\nReturn a dictionary mapping entities to a dictionary of element types to element tags.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.entities-Tuple{Inti.Domain}","page":"Docstrings","title":"Inti.entities","text":"entities(Ω::Domain)\n\nReturn all entities making up a domain (as a set of EntityKeys).\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.etype_to_nearest_points-Tuple{Any, Inti.Quadrature}","page":"Docstrings","title":"Inti.etype_to_nearest_points","text":"etype_to_nearest_points(X,Y::Quadrature; maxdist)\n\nFor each element el in Y.mesh, return a list with the indices of all points in X for which el is the nearest element. Ignore indices for which the distance exceeds maxdist.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.external_boundary-Tuple{Inti.Domain}","page":"Docstrings","title":"Inti.external_boundary","text":"external_boundary(Ω::Domain)\n\nReturn the external boundaries inside a domain. These are entities in the skeleton of Ω which are not in the internal boundaries of Ω.\n\nSee also: internal_boundary, skeleton.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.farfield_distance-Tuple{Inti.IntegralOperator}","page":"Docstrings","title":"Inti.farfield_distance","text":"farfield_distance(iop::IntegralOperator; tol, maxiter = 10)\nfarfield_distance(K, Q::Quadrature; tol, maxiter = 10)\n\nReturn an estimate of the distance d such that the (absolute) quadrature error of the integrand y -> K(x,y) is below tol for x at a distance d from the center of the largest element in Q; when an integral operator is passed, we have Q::Quadrature = source(iop) and K = kernel(iop).\n\nThe estimate is computed by finding the first integer n such that the quadrature error on the largest element τ lies below tol for points x satisfying dist(x,center(τ)) = n*radius(τ).\n\nNote that the desired tolerance may not be achievable if the quadrature rule is not accurate enough, or if τ is not sufficiently small, and therefore a maximum number of iterations maxiter is provided to avoid an infinite loops. In such cases, it is recommended that you either increase the quadrature order, or decrease the mesh size.\n\nNote: this is obviously a heuristic, and may not be accurate in all cases.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.fibonnaci_points_sphere-Tuple{Any, Any, Any}","page":"Docstrings","title":"Inti.fibonnaci_points_sphere","text":"fibonnaci_points_sphere(N,r,c)\n\nReturn N points distributed (roughly) in a uniform manner on the sphere of radius r centered at c.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.flip_normal-Tuple{Inti.QuadratureNode}","page":"Docstrings","title":"Inti.flip_normal","text":"flip_normal(q::QuadratureNode)\n\nReturn a new QuadratureNode with the normal vector flipped.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.gauss_curvature-Tuple{Inti.Quadrature}","page":"Docstrings","title":"Inti.gauss_curvature","text":"gauss_curvature(Q::Quadrature)\n\nCompute the gauss_curvature at each quadrature node in Q.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.gauss_curvature-Tuple{Inti.ReferenceInterpolant, Any}","page":"Docstrings","title":"Inti.gauss_curvature","text":"gauss_curvature(τ, x̂)\n\nCalculate the Gaussian curvature of the element τ at the parametric coordinate x̂.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.geometric_dimension","page":"Docstrings","title":"Inti.geometric_dimension","text":"geometric_dimension(x)\n\nNNumber of degrees of freedom necessary to locally represent the geometrical object. For example, lines have geometric dimension of 1 (whether in ℝ² or in ℝ³), while surfaces have geometric dimension of 2.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.global_get_entity-Tuple{Inti.EntityKey}","page":"Docstrings","title":"Inti.global_get_entity","text":"global_get_entity(k::EntityKey)\n\nRetrieve the GeometricEntity corresponding to the EntityKey k from the global ENTITIES dictionary.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.gmsh_curve-Tuple","page":"Docstrings","title":"Inti.gmsh_curve","text":"gmsh_curve(f::Function, a, b; npts=100, meshsize = 0, tag=-1)\n\nCreate a curve in the current gmsh model given by {f(t) : t ∈ (a,b) } where f is a function from ℝ to ℝ^3. The curve is approximated by C² b-splines passing through npts equispaced in parameter space. If a meshsize is given, gmsh will use it when meshing the curve.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.hessian-Tuple{Inti.ReferenceInterpolant, Any}","page":"Docstrings","title":"Inti.hessian","text":"hesssian(el,x)\n\nGiven a (possibly vector-valued) functor f : 𝐑ᵐ → 𝐅ⁿ, return the n × m × m matrix Aᵢⱼⱼ = ∂²fᵢ/∂xⱼ∂xⱼ. By default ForwardDiff is used to compute the hessian, but you should overload this method for specific f if better performance and/or precision is required.\n\nNote: both x and f(x) are expected to be of SVector type.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.image","page":"Docstrings","title":"Inti.image","text":"image(f)\n\nGiven a function-like object f: Ω → R, return f(Ω).\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.import_mesh-Tuple","page":"Docstrings","title":"Inti.import_mesh","text":"import_mesh(filename = nothing; dim=3)\n\nOpen filename and create a Mesh from the gmsh model in it.\n\nIf filename is nothing, the current gmsh model is used. Note that this assumes that the Gmsh API has been initialized through gmsh.initialize.\n\nPassing dim=2 will create a two-dimensional mesh by projecting the original mesh onto the x,y plane.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.integrate-Tuple{Any, Inti.Quadrature}","page":"Docstrings","title":"Inti.integrate","text":"integrate(f,quad::Quadrature)\n\nCompute ∑ᵢ f(qᵢ)wᵢ, where the qᵢ are the quadrature nodes of quad, and wᵢ are the quadrature weights.\n\nNote that you must define f(::QuadratureNode): use q.coords and q.normal if you need to access the coordinate or normal vector at que quadrature node.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.integrate-Tuple{Any, Inti.ReferenceQuadrature}","page":"Docstrings","title":"Inti.integrate","text":"integrate(f,q::ReferenceQuadrature)\nintegrate(f,x,w)\n\nIntegrate the function f using the quadrature rule q. This is simply sum(f.(x) .* w), where x and w are the quadrature nodes and weights, respectively.\n\nThe function f should take an SVector as input.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.integrate_with_error_estimate","page":"Docstrings","title":"Inti.integrate_with_error_estimate","text":"integrate_with_error_estimate(f, quad::EmbeddedQuadrature, norm = LinearAlgebra.norm)\n\nReturn I, E where I is the estimated integral of f over domain(quad) using the high-order quadrature and E is the error estimate obtained by taking the norm of the difference between the high and low-order quadratures in quad.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.integration_measure-Tuple{Any, Any}","page":"Docstrings","title":"Inti.integration_measure","text":"integration_measure(f, x̂)\n\nGiven the Jacobian matrix J of a transformation f : ℝᴹ → ℝᴺ compute the integration measure √det(JᵀJ) at the parametric coordinate x̂\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.interface_method-Tuple{DataType}","page":"Docstrings","title":"Inti.interface_method","text":"interface_method(x)\n\nA method of an abstract type for which concrete subtypes are expected to provide an implementation.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.internal_boundary-Tuple{Inti.Domain}","page":"Docstrings","title":"Inti.internal_boundary","text":"internal_boundary(Ω::Domain)\n\nReturn the internal boundaries of a Domain. These are entities in skeleton(Ω) which appear at least twice as a boundary of entities in Ω.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.interpolation_order-Tuple{Inti.ReferenceQuadrature{Inti.ReferenceHyperCube{1}}}","page":"Docstrings","title":"Inti.interpolation_order","text":"interpolation_order(qrule::ReferenceQuadrature)\n\nThe interpolation order of a quadrature rule is defined as the the smallest k such that there exists a unique polynomial in PolynomialSpace{D,k} that minimizes the error in approximating the function f at the quadrature nodes.\n\nFor an N-point Gauss quadrature rule on the segment, the interpolation order is N-1 since N points uniquely determine a polynomial of degree N-1.\n\nFor a triangular reference domain, the interpolation order is more difficult to define. An unisolvent three-node quadrature on the triangular, for example, has an interpolation order k=1 since the three nodes uniquely determine a linear polynomial, but a four-node quadrature may also have an interpolation order k=1 since for k=2 there are multiple polynomials that pass through the four nodes.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.jacobian-Tuple{Any, Any}","page":"Docstrings","title":"Inti.jacobian","text":"jacobian(f,x)\n\nGiven a (possibly vector-valued) functor f : 𝐑ᵐ → 𝐅ⁿ, return the n × m matrix Aᵢⱼ = ∂fᵢ/∂xⱼ. By default ForwardDiff is used to compute the jacobian, but you should overload this method for specific f if better performance and/or precision is required.\n\nNote: both x and f(x) are expected to be of SVector type.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.kress_change_of_variables-Tuple{Any}","page":"Docstrings","title":"Inti.kress_change_of_variables","text":"kress_change_of_variables(P)\n\nReturn a change of variables mapping [0,1] to [0,1] with the property that the first P-1 derivatives of the transformation vanish at x=0.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.kress_change_of_variables_periodic-Tuple{Any}","page":"Docstrings","title":"Inti.kress_change_of_variables_periodic","text":"kress_change_of_variables_periodic(P)\n\nLike kress_change_of_variables, this change of variables maps the interval [0,1] onto itself, but the first P derivatives of the transformation vanish at both endpoints (thus making it a periodic function).\n\nThis change of variables can be used to periodize integrals over the interval [0,1] by mapping the integrand into a new integrand that vanishes (to order P) at both endpoints.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.lagrange_basis-Tuple{Any, Inti.PolynomialSpace}","page":"Docstrings","title":"Inti.lagrange_basis","text":"lagrange_basis(nodes,[sp::AbstractPolynomialSpace])\n\nReturn the set of n polynomials in sp taking the value of 1 on node i and 0 on nodes j ≂̸ i for 1 ≤ i ≤ n.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.lagrange_basis-Union{Tuple{Inti.ReferenceQuadrature{D}}, Tuple{D}} where D","page":"Docstrings","title":"Inti.lagrange_basis","text":"lagrange_basis(qrule::ReferenceQuadrature)\n\nReturn a function L : ℝᴺ → ℝᵖ where N is the dimension of the domain of qrule, and p is the number of nodes in qrule. The function L is a polynomial in polynomial_space(qrule), and L(xⱼ)[i] = δᵢⱼ (i.e. the ith component of L is the ith Lagrange basis).\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.lagrange_basis-Union{Tuple{Type{Inti.LagrangeElement{D, N, T}}}, Tuple{T}, Tuple{N}, Tuple{D}} where {D, N, T}","page":"Docstrings","title":"Inti.lagrange_basis","text":"lagrange_basis(E::Type{<:LagrangeElement})\n\nReturn the Lagrange basis B for the element E. Evaluating B(x) yields the value of each basis function at x.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.line-Tuple{Any, Any}","page":"Docstrings","title":"Inti.line","text":"line(a,b)\n\nCreate a [GeometricEntity] representing a straight line connecting points a and b. The points a and b can be either SVectors or a Tuple.\n\nThe parametrization of the line is given by f(u) = a + u(b - a), where 0 ≤ u ≤ 1.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.mean_curvature-Tuple{Inti.Quadrature}","page":"Docstrings","title":"Inti.mean_curvature","text":"mean_curvature(Q::Quadrature)\n\nCompute the mean_curvature at each quadrature node in Q.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.mean_curvature-Tuple{Inti.ReferenceInterpolant, Any}","page":"Docstrings","title":"Inti.mean_curvature","text":"mean_curvature(τ, x̂)\n\nCalculate the mean curvature of the element τ at the parametric coordinate x̂.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.measure","page":"Docstrings","title":"Inti.measure","text":"measure(k::EntityKey, rtol)\n\nCompute the length/area/volume of the entity k using an adaptive quadrature with a relative tolerance rtol. Assumes that the entity has an explicit parametrization.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.meshgen!-Tuple{Inti.Mesh, Inti.Domain, Int64}","page":"Docstrings","title":"Inti.meshgen!","text":"meshgen!(mesh,Ω,sz)\n\nSimilar to meshgen, but append entries to mesh.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.meshgen-Tuple{Inti.Domain, Vararg{Any}}","page":"Docstrings","title":"Inti.meshgen","text":"meshgen(Ω, n; T = Float64)\nmeshgen(Ω, n_dict; T = Float64)\nmeshgen(Ω; meshsize, T = Float64)\n\nGenerate a Mesh for the domain Ω where each curve is meshed using n elements. Passing a dictionary allows for a finer control; in such cases, n_dict[ent] should return an integer for each entity ent in Ω of geometric_dimension one.\n\nAlternatively, a meshsize can be passed, in which case, the number of elements is computed as so as to obtain an average mesh size of meshsize. Note that the actual mesh size may vary significantly for each element if the parametrization is far from uniform.\n\nThe mesh is created with primitive data of type T.\n\nThis function requires the entities forming Ω to have an explicit parametrization.\n\nwarning: Mesh quality\nThe quality of the generated mesh created using meshgen depends on the quality of the underlying parametrization. For complex surfaces, you are better off using a proper mesher such as gmsh.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.monomial_basis","page":"Docstrings","title":"Inti.monomial_basis","text":"monomial_basis(sp::PolynomialSpace)\n\nReturn a function f : ℝᴺ → ℝᵈ, where N is the dimension of the domain of sp containing a basis of monomials 𝐱ᶿ spanning the polynomial space PolynomialSpace.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.near_interaction_list-Union{Tuple{N}, Tuple{AbstractVector{<:StaticArraysCore.SVector{N}}, Inti.AbstractMesh{N}}} where N","page":"Docstrings","title":"Inti.near_interaction_list","text":"near_interaction_list(X,Y::AbstractMesh; tol)\n\nFor each element el of type E in Y, return the indices of the points in X which are closer than tol to the center of el.\n\nThis function returns a dictionary where e.g. dict[E][5] --> Vector{Int} gives the indices of points in X which are closer than tol to the center of the fifth element of type E.\n\nIf tol is a Dict, then tol[E] is the tolerance for elements of type E.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.new_tag-Tuple{Integer}","page":"Docstrings","title":"Inti.new_tag","text":"new_tag(dim)\n\nReturn a new tag for an entity of dimension dim so that EntityKey(dim, tag) is not already in ENTITIES.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.nodes-Tuple{Inti.SubMesh}","page":"Docstrings","title":"Inti.nodes","text":"nodes(msh::SubMesh)\n\nA view of the nodes of the parent mesh belonging to the submesh. The ordering is given by the nodetags function.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.nodetags-Tuple{Inti.SubMesh}","page":"Docstrings","title":"Inti.nodetags","text":"nodetags(msh::SubMesh)\n\nReturn the tags of the nodes in the parent mesh belonging to the submesh.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.normal-Tuple{Any, Any}","page":"Docstrings","title":"Inti.normal","text":"normal(el, x̂)\n\nReturn the normal vector of el at the parametric coordinate x̂.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.normal-Tuple{T} where T","page":"Docstrings","title":"Inti.normal","text":"normal(q)\n\nReturn the normal vector of q, if it exists.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.notimplemented-Tuple{}","page":"Docstrings","title":"Inti.notimplemented","text":"notimplemented()\n\nThings which should probably be implemented at some point.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.order-Union{Tuple{Inti.Fejer{N}}, Tuple{N}} where N","page":"Docstrings","title":"Inti.order","text":"order(q::ReferenceQuadrature)\n\nA quadrature of order p (sometimes called degree of precision) integrates all polynomials of degree ≤ p but not ≤ p + 1.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.order-Union{Tuple{Type{<:Inti.LagrangeElement{D, Np}}}, Tuple{Np}, Tuple{D}} where {D, Np}","page":"Docstrings","title":"Inti.order","text":"order(el::LagrangeElement)\n\nThe order of the element's interpolating polynomial (e.g. a LagrangeLine with 2 nodes defines a linear polynomial, and thus has order 1).\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.parametric_curve-Union{Tuple{F}, Tuple{F, Real, Real}} where F","page":"Docstrings","title":"Inti.parametric_curve","text":"parametric_curve(f, a::Real, b::Real)\n\nCreate a [GeometricEntity] representing a parametric curve defined by the {f(t) | a ≤ t ≤ b}. The function f should map a scalar to an SVector.\n\nFlipping the orientation is supported by passing a > b.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.parametric_surface","page":"Docstrings","title":"Inti.parametric_surface","text":" parametric_surface(f, lc, hc, boundary = nothing; kwargs...)\n\nCreate a parametric surface defined by the function f over the rectangular domain defined by the lower corner lc and the upper corner hc. The optional boundary argument can be used to specify the boundary curves of the surface.\n\nArguments\n\nf: A function that takes two arguments x and y and returns a tuple (u, v) representing the parametric coordinates of the surface at (x, y).\nlc: A 2-element array representing the lower corner of the rectangular domain.\nhc: A 2-element array representing the upper corner of the rectangular domain.\nboundary: An optional array of boundary curves that define the surface.\n\nKeyword Arguments\n\nkwargs: Additional keyword arguments that can be passed to the GeometricEntity constructor.\n\nReturns\n\nThe key of the created GeometricEntity.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.polynomial_solutions_vdim","page":"Docstrings","title":"Inti.polynomial_solutions_vdim","text":"polynomial_solutions_vdim(op, order[, center])\n\nFor every monomial term pₙ of degree order, compute a polynomial Pₙ such that ℒ[Pₙ] = pₙ, where ℒ is the differential operator associated with op. This function returns {pₙ,Pₙ,γ₁Pₙ}, where γ₁Pₙ is the generalized Neumann trace of Pₙ.\n\nPassing a point center will shift the monomials and solutions accordingly.\n\n\n\n\n\n","category":"function"},{"location":"docstrings/#Inti.polynomial_space-Union{Tuple{Inti.ReferenceQuadrature{D}}, Tuple{D}} where D","page":"Docstrings","title":"Inti.polynomial_space","text":"polynomial_space(qrule::ReferenceQuadrature)\n\nReturn a PolynomialSpace associated with the interpolation_order of the quadrature nodes of qrule.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.qcoords-Tuple{Inti.ReferenceQuadrature}","page":"Docstrings","title":"Inti.qcoords","text":"qcoords(q)\n\nReturn the coordinate of the quadrature nodes associated with q.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.quadrature_to_node_vals-Tuple{Inti.Quadrature, AbstractVector}","page":"Docstrings","title":"Inti.quadrature_to_node_vals","text":"quadrature_to_node_vals(Q::Quadrature, qvals::AbstractVector)\n\nGiven a vector qvals of scalar values at the quadrature nodes of Q, return a vector ivals of scalar values at the interpolation nodes of Q.mesh.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.qweights-Tuple{Inti.ReferenceQuadrature}","page":"Docstrings","title":"Inti.qweights","text":"qweights(q)\n\nReturn the quadrature weights associated with q.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.reference_nodes-Tuple{Inti.LagrangeElement}","page":"Docstrings","title":"Inti.reference_nodes","text":"reference_nodes(el::LagrangeElement)\nreference_nodes(::Type{<:LagrangeElement})\n\nReturn the reference nodes on domain(el) used for the polynomial interpolation. The function values on these nodes completely determines the interpolating polynomial.\n\nWe use the same convention as gmsh for defining the reference nodes and their order (see node ordering on gmsh documentation).\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.return_type-Tuple{Any, Vararg{Any}}","page":"Docstrings","title":"Inti.return_type","text":"return_type(f[,args...])\n\nThe type returned by f(args...), where args is a tuple of types. Falls back to Base.promote_op by default.\n\nA functors of type T with a knonw return type should extend return_type(::T,args...) to avoid relying on promote_op.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.rotation_matrix-Tuple{Any}","page":"Docstrings","title":"Inti.rotation_matrix","text":"rotation_matrix(rot)\n\nConstructs a rotation matrix given the rotation angles around the x, y, and z axes.\n\nArguments\n\nrot: A tuple or vector containing the rotation angles in radians for each axis.\n\nReturns\n\nR::SMatrix: The resulting rotation matrix.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.single_double_layer-Tuple{}","page":"Docstrings","title":"Inti.single_double_layer","text":"single_double_layer(; op, target, source::Quadrature, compression,\ncorrection, derivative = false)\n\nConstruct a discrete approximation to the single- and double-layer integral operators for op, mapping values defined on the quadrature nodes of source to values defined on the nodes of target. If derivative = true, return instead the adjoint double-layer and hypersingular operators (which are the derivative of the single- and double-layer, respectively).\n\nYou must choose a compression method and a correction method, as described below.\n\nCompression\n\nThe compression argument is a named tuple with a method field followed by method-specific fields. It specifies how the dense linear operators should be compressed. The available options are:\n\n(method = :none, ): no compression is performed, the resulting matrices are dense.\n(method =:hmatrix, tol): the resulting operators are compressed using hierarchical matrices with an absolute tolerance tol (defaults to 1e-8).\n(method = :fmm, tol): the resulting operators are compressed using the fast multipole method with an absolute tolerance tol (defaults to 1e-8).\n\nCorrection\n\nThe correction argument is a named tuple with a method field followed by method-specific fields. It specifies how the singular and nearly-singular integrals should be computed. The available options are:\n\n(method = :none, ): no correction is performed. This is not recommented, as the resulting approximation will be inaccurate if the source and target are not sufficiently far apart.\n(method = :dim, maxdist, target_location): use the density interpolation method to compute the correction. maxdist specifies the distance between source and target points above which no correction is performed (defaults to Inf). target_location should be either :inside, :outside, or :on, and specifies where the targetpoints lie relative to the to thesourcecurve/surface (which is assumed to be closed). Whentarget === source,target_location` is not needed.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.single_double_layer_potential-Tuple{}","page":"Docstrings","title":"Inti.single_double_layer_potential","text":"single_double_layer_potential(; op, source)\n\nReturn the single- and double-layer potentials for op as IntegralPotentials.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.skeleton-Tuple{Inti.Domain}","page":"Docstrings","title":"Inti.skeleton","text":"skeleton(Ω::Domain)\n\nReturn all the boundaries of the domain, i.e. the domain's skeleton.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.stack_weakdeps_env!-Tuple{}","page":"Docstrings","title":"Inti.stack_weakdeps_env!","text":"stack_weakdeps_env!(; verbose = false, update = false)\n\nPush to the load stack an environment providing the weak dependencies of Inti.jl. This allows benefiting from additional functionalities of Inti.jl which are powered by weak dependencies without having to manually install them in your environment.\n\nSet update=true if you want to update the weakdeps environment.\n\nwarning: Warning\nCalling this function can take quite some time, especially the first time around, if packages have to be installed or precompiled. Run in verbose mode to see what is happening.\n\nExamples:\n\nInti.stack_weakdeps_env!()\nusing HMatrices\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.standard_basis_vector-Union{Tuple{N}, Tuple{Any, Val{N}}} where N","page":"Docstrings","title":"Inti.standard_basis_vector","text":"standard_basis_vector(k, ::Val{N})\n\nCreate an SVector of length N with a 1 in the kth position and zeros elsewhere.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.svector-Union{Tuple{F}, Tuple{F, Any}} where F","page":"Docstrings","title":"Inti.svector","text":"svector(f,n)\n\nCreate an SVector of length n, computing each element as f(i), where i is the index of the element.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.torus-Tuple{}","page":"Docstrings","title":"Inti.torus","text":"torus(; r, R, translation, rotation, scaling, labels)\n\nCreate a torus entity in 3D, and apply optional transformations. Returns the key. The parameters r and R are the inner and outer radii of the torus.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.uniform_points_circle-Tuple{Any, Any, Any}","page":"Docstrings","title":"Inti.uniform_points_circle","text":"uniform_points_circle(N,r,c)\n\nReturn N points uniformly distributed on a circle of radius r centered at c.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.vdim_correction-Union{Tuple{SHIFT}, Tuple{Any, Any, Inti.Quadrature, Inti.Quadrature, Any, Any, Any}} where SHIFT","page":"Docstrings","title":"Inti.vdim_correction","text":"vdim_correction(op,X,Y,Y_boundary,S,D,V; green_multiplier, kwargs...)\n\nCompute a correction to the volume potential V : Y → X such that V + δV is a more accurate approximation of the underlying volume potential operator. The correction is computed using the (volume) density interpolation method.\n\nThis function requires a op::AbstractDifferentialOperator, a target set X, a source quadrature Y, a boundary quadrature Y_boundary, approximations S : Y_boundary -> X and D : Y_boundary -> X to the single- and double-layer potentials (correctly handling nearly-singular integrals), and a naive approximation of the volume potential V. The green_multiplier is a vector of the same length as X storing the value of μ(x) for x ∈ X in the Green identity (see _green_multiplier).\n\nSee [8] for more details on the method.\n\nOptional kwargs:\n\ninterpolation_order: the order of the polynomial interpolation. By default, the maximum order of the quadrature rules is used.\nmaxdist: distance beyond which interactions are considered sufficiently far so that no correction is needed. This is used to determine a threshold for nearly-singular corrections.\ncenter: the center of the basis functions. By default, the basis functions are centered at the origin.\nshift: a boolean indicating whether the basis functions should be shifted and rescaled to each element.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.vdim_mesh_center-Tuple{Inti.AbstractMesh}","page":"Docstrings","title":"Inti.vdim_mesh_center","text":"vdim_mesh_center(msh)\n\nPoint x which minimizes ∑ (x-xⱼ)²/r²ⱼ, where xⱼ and rⱼ are the circumcenter and circumradius of the elements of msh, respectively.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.vertices-Tuple{Inti.LagrangeElement}","page":"Docstrings","title":"Inti.vertices","text":"vertices(el::LagrangeElement)\n\nCoordinates of the vertices of el.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.vertices_idxs-Tuple{Type{<:Inti.LagrangeElement{Inti.ReferenceHyperCube{1}}}}","page":"Docstrings","title":"Inti.vertices_idxs","text":"vertices_idxs(el::LagrangeElement)\n\nThe indices of the nodes in el that define the vertices of the element.\n\n\n\n\n\n","category":"method"},{"location":"docstrings/#Inti.volume_potential-Tuple{}","page":"Docstrings","title":"Inti.volume_potential","text":"volume_potential(; op, target, source::Quadrature, compression, correction)\n\nCompute the volume potential operator for a given PDE.\n\nArguments\n\nop: The PDE (Partial Differential Equation) to solve.\ntarget: The target domain where the potential is computed.\nsource: The source domain where the potential is generated.\ncompression: The compression method to use for the potential operator.\ncorrection: The correction method to use for the potential operator.\n\nReturns\n\nThe volume potential operator V that represents the interaction between the target and source domains.\n\nCompression\n\nThe compression argument is a named tuple with a method field followed by method-specific fields. It specifies how the dense linear operators should be compressed. The available options are:\n\n(method = :none, ): no compression is performed, the resulting matrices are dense.\n(method =:hmatrix, tol): the resulting operators are compressed using hierarchical matrices with an absolute tolerance tol (defaults to 1e-8).\n(method = :fmm, tol): the resulting operators are compressed using the fast multipole method with an absolute tolerance tol (defaults to 1e-8).\n\nCorrection\n\nThe correction argument is a named tuple with a method field followed by method-specific fields. It specifies how the singular and nearly-singular integrals should be computed. The available options are:\n\n(method = :none, ): no correction is performed. This is not recommented, as the resulting approximation will be inaccurate if the source and target are not sufficiently far apart.\n(method = :dim, maxdist, target_location): use the density interpolation method to compute the correction. maxdist specifies the distance between source and target points above which no correction is performed (defaults to Inf). target_location should be either :inside, :outside, or :on, and specifies where the targetpoints lie relative to the to thesource's boundary. Whentarget === source,target_location` is not needed.\n\nDetails\n\nThe volume potential operator is computed by assembling the integral operator V using the single-layer kernel G. The operator V is then compressed using the specified compression method. If no compression is specified, the operator is returned as is. If a correction method is specified, the correction is computed and added to the compressed operator.\n\n\n\n\n\n","category":"method"},{"location":"tutorials/compression_methods/#Compression-methods","page":"Compression methods","title":"Compression methods","text":"","category":"section"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"note: Important points covered in this tutorial\nOverview of the compression methods available in Inti.jl\nDetails and limitations of the various compression methods\nGuideline on how to choose a compression method","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"Inti.jl wraps several external libraries providing acceleration routines for integral operators. In general, acceleration routines have the signature assemble_*(iop, args...; kwargs...), and take an IntegralOperator as a first argument. They return a new object that represents a compressed version of the operator. The following methods are available:","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"assemble_matrix: create a dense Matrix representation of the integral operator. Not really a compression method, but useful for debugging and small problems.\nassemble_hmatrix: assemble a hierarchical matrix representation of the operator using the HMatrices library.\nassemble_fmm: return a LinearMap object that represents the operator using the fast multipole method. This method is powered by the FMM2D, FMMLIB2D and FMM3D libraries, and is only available for certain kernels.","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"warning: Singular kernels\nAcceleration methods do not correct for singular or nearly-singular interactions. When the underlying kernel is singular, a correction is usually necessary in order to obtain accurate results (see the section on correction methods for more details).","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"To illustrate the use of compression methods, we will use the following problem as an example. Note that for such a small problem, compression methods are not likely not necessary, but they are useful for larger problems.","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"using Inti\nusing LinearAlgebra\n# define the quadrature\ngeo = Inti.GeometricEntity(\"ellipsoid\")\nΩ = Inti.Domain(geo)\nΓ = Inti.boundary(Ω)\nQ = Inti.Quadrature(Γ; meshsize = 0.4, qorder = 5)\n# create the operator\nop = Inti.Helmholtz(; dim = 3, k = 2π)\nK = Inti.SingleLayerKernel(op)\nSop = Inti.IntegralOperator(K, Q, Q)\nx = rand(eltype(Sop), length(Q))\nrtol = 1e-8\nnothing # hide","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"In what follows we compress Sop using the different methods available.","category":"page"},{"location":"tutorials/compression_methods/#Dense-matrix","page":"Compression methods","title":"Dense matrix","text":"","category":"section"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"assemble_matrix","category":"page"},{"location":"tutorials/compression_methods/#Inti.assemble_matrix-tutorials-compression_methods","page":"Compression methods","title":"Inti.assemble_matrix","text":"assemble_matrix(iop::IntegralOperator; threads = true)\n\nAssemble a dense matrix representation of an IntegralOperator.\n\n\n\n\n\n","category":"function"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"Typically used for small problems, the dense matrix representation converts the IntegralOperator into a Matrix object. The underlying type of the Matrix is determined by the eltype of the IntegralOperator, and depends on the inferred type of the kernel. Here is how assemble_matrix can be used:","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"Smat = Inti.assemble_matrix(Sop; threads=true)\n@assert Sop * x ≈ Smat * x # hide\ner = norm(Sop * x - Smat * x, Inf) / norm(Sop * x, Inf)\nprintln(\"Forward map error: $er\")","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"Since the returned object is plain Julia Matrix, it can be used with any of the linear algebra routines available in Julia (e.g. \\, lu, qr, *, etc.)","category":"page"},{"location":"tutorials/compression_methods/#Hierarchical-matrix","page":"Compression methods","title":"Hierarchical matrix","text":"","category":"section"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"assemble_hmatrix","category":"page"},{"location":"tutorials/compression_methods/#Inti.assemble_hmatrix-tutorials-compression_methods","page":"Compression methods","title":"Inti.assemble_hmatrix","text":"assemble_hmatrix(iop[; atol, rank, rtol, eta])\n\nAssemble an H-matrix representation of the discretized integral operator iop using the HMatrices.jl library.\n\nSee the documentation of HMatrices for more details on usage and other keyword arguments.\n\n\n\n\n\n","category":"function"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"The hierarchical matrix representation is a compressed representation of the underlying operator; as such, it takes a tolerance parameter that determines the relative error of the compression. Here is an example of how to use the assemble_hmatrix method to compress the previous problem:","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"using HMatrices\nShmat = Inti.assemble_hmatrix(Sop; rtol = 1e-8)\ner = norm(Smat * x - Shmat * x, Inf) / norm(Smat * x, Inf)\n@assert er < 10*rtol # hide\nprintln(\"Forward map error: $er\")","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"Note that HMatrices are said to be kernel-independent, meaning that they efficiently compress a wide range of integral operators provided they satisfy a certain asymptotic smoothness criterion (see e.g. [3, 4]).","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"The HMatrix object can be used to solve linear systems, both iteratively through e.g. GMRES, or directly using an LU factorization.","category":"page"},{"location":"tutorials/compression_methods/#Fast-multipole-method","page":"Compression methods","title":"Fast multipole method","text":"","category":"section"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"assemble_fmm","category":"page"},{"location":"tutorials/compression_methods/#Inti.assemble_fmm-tutorials-compression_methods","page":"Compression methods","title":"Inti.assemble_fmm","text":"assemble_fmm(iop; atol)\n\nSet up a 2D or 3D FMM for evaluating the discretized integral operator iop associated with the op. In 2D the FMM2D or FMMLIB2D library is used (whichever was most recently loaded) while in 3D FMM3D is used.\n\nwarning: FMMLIB2D\nFMMLIB2D does no checking for if the targets and sources coincide, and will return Inf values if iop.target !== iop.source, but there is a point x ∈ iop.target such that x ∈ iop.source.\n\n\n\n\n\n","category":"function"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"The fast multipole method (FMM) is an acceleration technique based on an analytic multipole expansion of the kernel in the integral operator [5, 6]. It provides a very memory-efficient and fast way to evaluate certain types of integral operators. Here is how assemble_fmm can be used:","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"using FMM3D\nSfmm = Inti.assemble_fmm(Sop; rtol = 1e-8)\ner = norm(Sop * x - Sfmm * x, Inf) / norm(Sop * x, Inf)\n@assert er < 10*rtol # hide\nprintln(\"Forward map error: $er\")","category":"page"},{"location":"tutorials/compression_methods/#Tips-on-choosing-a-compression-method","page":"Compression methods","title":"Tips on choosing a compression method","text":"","category":"section"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"The choice of compression method depends on the problem at hand, as well as on the available hardware. Here is a rough guide on how to choose a compression:","category":"page"},{"location":"tutorials/compression_methods/","page":"Compression methods","title":"Compression methods","text":"For small problems (say less than 5k degrees of freedom), use the dense matrix representation. It is the simplest and most straightforward method, and does not require any additional packages. It is also the most accurate since it does not introduce any approximation errors.\nIf the integral operator is supported by the assemble_fmm, and if an iterative solver is acceptable, use it. The FMM is a very efficient method for certain types of kernels, and can handle problems with up to a few million degrees of freedom on a laptop.\nIf the kernel is not supported by assemble_fmm, if iterative solvers are not an option, or if the system needs solution for many right-hand sides, use the assemble_hmatrix method. It is a very general method that can handle a wide range of kernels, and although assembling the HMatrix can be time and memory consuming (the complexity is still log-linear in the DOFs for many kernels of interest, but the constants can be large), the resulting HMatrix object is very efficient to use. For example, the forward map is usually significantly faster than the one obtained through assemble_fmm.","category":"page"},{"location":"tutorials/correction_methods/#Correction-methods","page":"Correction methods","title":"Correction methods","text":"","category":"section"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"warning: Work in progress\nThis tutorial is still a work in progress. We will update it with more details and examples in the future.","category":"page"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"note: Important points covered in this tutorial\nOverview of the correction methods available in Inti.jl\nDetails and limitations of the various correction methods\nGuideline on how to choose a correction method","category":"page"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"When the underlying kernel is singular, a correction is usually necessary in order to obtain accurate results in the approximation of the underlying integral operator by a quadrature. At present, Inti.jl provides the following functions to correct for singularities:","category":"page"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"adaptive_correction\nbdim_correction\nvdim_correction","category":"page"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"They have different strengths and weaknesses, and we will discuss them in the following sections.","category":"page"},{"location":"tutorials/correction_methods/","page":"Correction methods","title":"Correction methods","text":"note: High-level API\nNote that the single_double_layer, adj_double_layer_hypersingular, and volume_potential functions have high-level API with a correction keyword argument that allows one to specify the correction method to use when constructing the integral operators; see the documentation of these functions for more details.","category":"page"},{"location":"tutorials/correction_methods/#Adaptive-correction","page":"Correction methods","title":"Adaptive correction","text":"","category":"section"},{"location":"tutorials/correction_methods/#Boundary-density-interpolation-method","page":"Correction methods","title":"Boundary density interpolation method","text":"","category":"section"},{"location":"tutorials/correction_methods/#Volume-density-interpolation-method","page":"Correction methods","title":"Volume density interpolation method","text":"","category":"section"},{"location":"tutorials/correction_methods/#Martensen-Kussmaul-method","page":"Correction methods","title":"Martensen-Kussmaul method","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/#Geometry-and-meshes","page":"Geometry and meshes","title":"Geometry and meshes","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"note: Important points covered in this tutorial\nCombine simple shapes to create domains\nImport a mesh from a file\nIterative over mesh elements","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"In the getting started tutorial, we saw how to solve a simple Helmholtz scattering problem in 2D. We will now dig deeper into how to create and manipulate more complex geometrical shapes, as well the associated meshes.","category":"page"},{"location":"tutorials/geo_and_meshes/#Overview","page":"Geometry and meshes","title":"Overview","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Inti.jl provides a flexible way to define geometrical entities and their associated meshes. Simply put, the GeometricEntity type is the atomic building block of geometries: they can represent points, curves, surfaces, or volumes. Geometrical entities of the same dimension can be combined to form Domain, and domains can be manipulated using basic set operations such union and intersection. Meshes on the other hand are collections of (simple) elements that approximate the geometrical entities. A mesh element is a just a function that maps points from a ReferenceShape to the physical space.","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"In most applications involving complex three-dimensional surfaces, an external meshing software is used to generate a mesh, and the mesh is imported using the import_mesh function (which relies on Gmsh). The entities can then be extracted from the mesh based on e.g. their dimension or label. Here is an example of how to import a mesh from a file:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"using Inti\nusing Gmsh \nfilename = joinpath(Inti.PROJECT_ROOT,\"docs\", \"assets\", \"piece.msh\")\nmsh = Inti.import_mesh(filename)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"The imported mesh contains elements of several types, used to represent the segments, triangles, and tetras used to approximate the geometry:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Inti.element_types(msh)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Note that the msh object contains all entities used to construct the mesh, usually defined in a .geo file, which can be extracted using the entities:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"ents = Inti.entities(msh)\nnothing # hide","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Filtering of entities satisfying a certain condition, e.g., entities of a given dimension or containing a certain label, can also be performed in order to construct a domain:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"filter = e -> Inti.geometric_dimension(e) == 3\nΩ = Inti.Domain(filter, ents)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Domains can be used to index the mesh, creating either a new object containing only the necessary elements:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Γ = Inti.boundary(Ω)\nmsh[Γ]","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"or a SubMesh containing a view of the mesh:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Γ_msh = view(msh, Γ)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Finally, we can visualize the mesh using:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"using Meshes, GLMakie\nfig = Figure(; size = (800,400))\nax = Axis3(fig[1, 1]; aspect = :data)\nviz!(Γ_msh; showsegments = true, alpha = 0.5)\nfig","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"warning: Mesh visualization\nNote that although the mesh may be of high order and/or conforming, the visualization of a mesh is always performed on the underlying first order mesh, and therefore elements may look flat even if the problem is solved on a curved mesh.","category":"page"},{"location":"tutorials/geo_and_meshes/#Parametric-entities-and-meshgen","page":"Geometry and meshes","title":"Parametric entities and meshgen","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"In the previous section we saw an example of how to import a mesh from a file, and how to extract the entities from the mesh. For simple geometries for which an explicit parametrization is available, Inti.jl provides a way to create and manipulate geometrical entities and their associated meshes.","category":"page"},{"location":"tutorials/geo_and_meshes/#Parametric-curves","page":"Geometry and meshes","title":"Parametric curves","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"The simplest parametric shapes are parametric_curves, which are defined by a function that maps a scalar parameter t to a point in 2D or 3D space. Parametric curves are expected to return an SVector, and can be created as follows:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"using StaticArrays\nl1 = Inti.parametric_curve(x->SVector(x, 0.1 * sin(2π * x)), 0.0, 1.0, labels = [\"l₁\"])","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"The object l1 represents a GeometricEntity with a known push-forward map:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Inti.pushforward(l1)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"For the sake of this example, let's create three more curves, and group them together to form a Domain:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"l2 = Inti.parametric_curve(x->SVector(1 + 0.1 * sin(2π * x), x), 0.0, 1.0, labels = [\"l₂\"])\nl3 = Inti.parametric_curve(x->SVector(1 - x, 1 - 0.1 * sin(2π * x)), 0.0, 1.0, labels = [\"l₃\"])\nl4 = Inti.parametric_curve(x->SVector(0.1 * sin(2π * x), 1 - x), 0.0, 1.0, labels = [\"l₄\"])\nΓ = l1 ∪ l2 ∪ l3 ∪ l4","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Domains for which a parametric representation is available can be passed to the meshgen function:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"msh = Inti.meshgen(Γ; meshsize = 0.05)\nnothing # hide","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"We can use the Meshes.viz function to visualize the mesh, and use domains to index the mesh:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Γ₁ = l1 ∪ l3\nΓ₂ = l2 ∪ l4\nfig, ax, pl = viz(view(msh, Γ₁); segmentsize = 4, label = \"Γ₁\")\nviz!(view(msh, Γ₂); segmentsize = 4, color = :red, label = \"Γ₂\")\nfig # hide","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Note that the orientation of the curve determines the direction of the normal vector. The normal points to the right of the curve when moving in the direction of increasing parameter t:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"pts, tangents, normals = Makie.Point2f[], Makie.Vec2f[], Makie.Vec2f[]\nfor l in [l1, l2, l3, l4]\n push!(pts, l(0.5)) # mid-point of the curve \n push!(tangents, vec(Inti.jacobian(l, 0.5)))\n push!(normals,Inti.normal(l, 0.5))\nend\narrows!(pts, tangents, color = :blue, linewidth = 2, linestyle = :dash, lengthscale = 1/4, label = \"tangent\")\narrows!(pts, normals, color = :black, linewidth = 2, linestyle = :dash, lengthscale = 1/4, label = \"normal\")\naxislegend()\nfig # hide","category":"page"},{"location":"tutorials/geo_and_meshes/#Parametric-surfaces","page":"Geometry and meshes","title":"Parametric surfaces","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Like parametric curves, parametric surfaces are defined by a function that maps a reference domain D subset mathbbR^2 to a surface in 3D space. They can be constructed using the parametric_surface function:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"# a patch of the unit sphere\nlc = SVector(-1.0, -1.0)\nhc = SVector(1.0, 1.0)\nf = (u,v) -> begin\n x = SVector(1.0, u, v) # a face of the cube\n x ./ sqrt(u^2 + v^2 + 1) # project to the sphere\nend\npatch = Inti.parametric_surface(f, lc, hc, labels = [\"patch1\"])\nΓ = Inti.Domain(patch)\nmsh = Inti.meshgen(Γ; meshsize = 0.1)\nviz(msh[Γ]; showsegments = true, figure = (; size = (400,400),))","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Since creating parametric surfaces that form a closed volume can be a bit more involved, Inti.jl provide a few helper functions to create simple shapes:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"fig = Figure(; size = (600,400))\nnshapes = Inti.length(Inti.PREDEFINED_SHAPES)\nncols = 3; nrows = ceil(Int, nshapes/ncols)\nfor (n,shape) in enumerate(Inti.PREDEFINED_SHAPES)\n Ω = Inti.GeometricEntity(shape) |> Inti.Domain\n Γ = Inti.boundary(Ω)\n msh = Inti.meshgen(Γ; meshsize = 0.1)\n i,j = (n-1) ÷ ncols + 1, (n-1) % ncols + 1\n ax = Axis3(fig[i,j]; aspect = :data, title = shape)\n hidedecorations!(ax)\n viz!(msh; showsegments = true)\nend\nfig # hide","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"See GeometricEntity(shape::String) for a list of predefined geometries.","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"warning: Mesh quality\nThe quality of the generated mesh created through meshgen depends heavily on the quality of the underlying parametrization. For surfaces containing a degenerate parametrization, or for complex shapes, one is better off using a suitable CAD (Computer-Aided Design) software in conjunction with a mesh generator.","category":"page"},{"location":"tutorials/geo_and_meshes/#Transfinite-domains","page":"Geometry and meshes","title":"Transfinite domains","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"It is possible to combine parametric curves/surfaces to form a transfinite domain where the parametrization is inherited from the curves/surfaces that form its boundary. At present, Inti.jl only supports transfinite squares, which are defined by four parametric curves:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"l1 = Inti.parametric_curve(x->SVector(x, 0.1 * sin(2π * x)), 0.0, 1.0, labels = [\"l₁\"])\nl2 = Inti.parametric_curve(x->SVector(1 + 0.1 * sin(2π * x), x), 0.0, 1.0, labels = [\"l₂\"])\nl3 = Inti.parametric_curve(x->SVector(1 - x, 1 - 0.1 * sin(2π * x)), 0.0, 1.0, labels = [\"l₃\"])\nl4 = Inti.parametric_curve(x->SVector(0.1 * sin(2π * x), 1 - x), 0.0, 1.0, labels = [\"l₄\"])\nsurf = Inti.transfinite_square(l1, l2, l3, l4; labels = [\"Ω\"])\nΩ = Inti.Domain(surf)\nmsh = Inti.meshgen(Ω; meshsize = 0.05)\nviz(msh; showsegments = true)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Note that the msh object contains all entities used to construct Ω, including the boundary segments:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Inti.entities(msh)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"This allows us to probe the msh object to extract e.g. the boundary mesh:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"viz(msh[Inti.boundary(Ω)]; color = :red)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"warning: Limitations\nAt present only the transfinite interpolation for the logically quadrilateral domains is supported. In the future we hope to add support for three-dimensional transfinite interpolation, as well as transfinite formulas for simplices.","category":"page"},{"location":"tutorials/geo_and_meshes/#Elements-of-a-mesh","page":"Geometry and meshes","title":"Elements of a mesh","text":"","category":"section"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"To iterate over the elements of a mesh, use the elements function:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"filename = joinpath(Inti.PROJECT_ROOT,\"docs\", \"assets\", \"piece.msh\")\nmsh = Inti.import_mesh(filename)\nents = Inti.entities(msh)\nΩ = Inti.Domain(e -> Inti.geometric_dimension(e) == 3, ents) \nels = Inti.elements(view(msh, Ω))\ncenters = map(el -> Inti.center(el), els)\nfig = Figure(; size = (800,400))\nax = Axis3(fig[1, 1]; aspect = :data)\nscatter!([c[1] for c in centers], [c[2] for c in centers], [c[3] for c in centers], markersize = 5)\nfig # hide","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"This example shows how to extract the centers of the tetrahedral elements in the mesh; and of course we can perform any desired computation on the elements.","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"tip: Type-stable iteration over elements\nSince a mesh in Inti.jl can contain elements of various types, the elements function above is not type-stable. For a type-stable iterator approach, one should first iterate over the element types using element_types, and then use elements(msh, E) to iterate over a specific element type E.","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Under the hood, each element is simply a functor which maps points x̂ from a ReferenceShape into the physical space:","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"el = first(els)\nx̂ = SVector(1/3,1/3, 1/3)\nel(x̂)","category":"page"},{"location":"tutorials/geo_and_meshes/","page":"Geometry and meshes","title":"Geometry and meshes","text":"Likewise, we can compute the jacobian of the element, or its normal at a given parametric coordinate.","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"(Image: Pluto notebook)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"begin\n import Pkg as _Pkg\n haskey(ENV, \"PLUTO_PROJECT\") && _Pkg.activate(ENV[\"PLUTO_PROJECT\"])\n using PlutoUI: TableOfContents\nend;","category":"page"},{"location":"pluto-examples/poisson/#Poisson-Problem","page":"Poisson problem","title":"Poisson Problem","text":"","category":"section"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"note: Important points covered in this example\nReformulating Poisson-like problems using integral equations\nUsing volume potentials\nCreating interior meshes using Gmsh","category":"page"},{"location":"pluto-examples/poisson/#Problem-definition","page":"Poisson problem","title":"Problem definition","text":"","category":"section"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"In this example we will solve the Poisson equation in a domain Omega with Dirichlet boundary conditions on Gamma = partial Omega:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":" beginalign*\n -Delta u = f quad textin quad Omega\n u = g quad texton quad Gamma\n endalign*","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"where f Omega to mathbbR and g Gamma to mathbbR are given functions. To solve this problem using integral equations, we split the solution u into a particular solution u_p and a homogeneous solution u_h:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":" u = u_p + u_h","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"The function u_p is given by","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"u_p(boldsymbolr) = int_Omega G(boldsymbolr boldsymbolr) f(boldsymbolr) dboldsymbolr","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"with G the fundamental solution of -Delta.","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"The function u_h satisfies the homogeneous problem","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":" beginalign*\n Delta u_h = 0 quad textin quad Omega \n u_h = g - u_p quad texton quad Gamma\n endalign*","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"which can be solved using the integral equation method. In particular, for this example, we employ a double-layer formulation:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"u_h(boldsymbolr) = int_Gamma G(boldsymbolr boldsymbolr) sigma(boldsymbolr) dboldsymbolr","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"where the density function sigma solves the integral equation","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":" -fracsigma(boldsymbolx)2 + int_Gamma partial_nu_boldsymbolyG(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmd s_boldsymboly = g(boldsymbolx) - u_p(boldsymbolx)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"In what follows we illustrate how to solve the problem in this manner.","category":"page"},{"location":"pluto-examples/poisson/#Geometry-and-mesh","page":"Poisson problem","title":"Geometry and mesh","text":"","category":"section"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"We use the Gmsh API to create a jellyfish-shaped domain and to generate a second order mesh of its interior and boundary:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"using Inti, Gmsh\nmeshsize = 0.1\ngmsh.initialize()\njellyfish = Inti.gmsh_curve(0, 2π; meshsize) do s\n r = 1 + 0.3 * cos(4 * s + 2 * sin(s))\n return r * Inti.Point2D(cos(s), sin(s))\nend\ncl = gmsh.model.occ.addCurveLoop([jellyfish])\nsurf = gmsh.model.occ.addPlaneSurface([cl])\ngmsh.model.occ.synchronize()\ngmsh.option.setNumber(\"Mesh.MeshSizeMax\", meshsize)\ngmsh.model.mesh.generate(2)\ngmsh.model.mesh.setOrder(2)\nmsh = Inti.import_mesh(; dim = 2)\ngmsh.finalize()","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"We can now extract components of the mesh corresponding to the Omega and Gamma domains:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"Ω = Inti.Domain(e -> Inti.geometric_dimension(e) == 2, msh)\nΓ = Inti.boundary(Ω)\nΩ_msh = view(msh, Ω)\nΓ_msh = view(msh, Γ)\nnothing #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"and visualize them:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"using Meshes, GLMakie\nviz(Ω_msh; showsegments = true)\nviz!(Γ_msh; color = :red)\nMakie.current_figure() #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"To conclude the geometric setup, we need a quadrature for the volume and boundary:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"Ω_quad = Inti.Quadrature(Ω_msh; qorder = 4)\nΓ_quad = Inti.Quadrature(Γ_msh; qorder = 6)\nnothing #hide","category":"page"},{"location":"pluto-examples/poisson/#Integral-operators","page":"Poisson problem","title":"Integral operators","text":"","category":"section"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"We can now assemble the required volume potential. To obtain the value of the particular solution u_p on the boundary for the modified integral equation above we will need the volume integral operator mapping to points on the boundary, i.e. operator:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"using FMM2D #to accelerate the maps\nop = Inti.Laplace(; dim = 2)\n# Newtonian potential mapping domain to boundary\nV_d2b = Inti.volume_potential(;\n op,\n target = Γ_quad,\n source = Ω_quad,\n compression = (method = :fmm, tol = 1e-12),\n correction = (method = :dim, maxdist = 5 * meshsize, target_location = :on),\n)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"We require also the boundary integral operators for the ensuing integral equation:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"# Single and double layer operators on Γ\nS_b2b, D_b2b = Inti.single_double_layer(;\n op,\n target = Γ_quad,\n source = Γ_quad,\n compression = (method = :fmm, tol = 1e-12),\n correction = (method = :dim,),\n)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"note: Note\nIn this example we used the Fast Multipole Method (:fmm) to accelerate the operators, and the Density Interpolation Method (:dim) to correct singular and nearly-singular integral.","category":"page"},{"location":"pluto-examples/poisson/#Solving-the-linear-system","page":"Poisson problem","title":"Solving the linear system","text":"","category":"section"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"We are now in a position to solve the original Poisson problem, but for that we need to specify the functions f and g. In order to verify that our numerical approximation is correct, however, we will play a different game and specify instead a manufactured solution u_e from which we will derive the functions f and g:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"# Create a manufactured solution\nuₑ = (x) -> cos(2 * x[1]) * sin(2 * x[2])\nfₑ = (x) -> 8 * cos(2 * x[1]) * sin(2 * x[2]) # -Δuₑ\ng = map(q -> uₑ(q.coords), Γ_quad)\nf = map(q -> fₑ(q.coords), Ω_quad)\nnothing #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"With these, we can compute the right-hand-side of the integral equation for the homogeneous part of the solution:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"rhs = g - V_d2b * f\nnothing #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"and solve the integral equation for the integral density function σ:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"using IterativeSolvers, LinearAlgebra\nσ = gmres(-I / 2 + D_b2b, rhs; abstol = 1e-8, verbose = true, restart = 1000)\nnothing #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"With the density function at hand, we can now reconstruct our approximate solution:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"G = Inti.SingleLayerKernel(op)\ndG = Inti.DoubleLayerKernel(op)\n𝒱 = Inti.IntegralPotential(G, Ω_quad)\n𝒟 = Inti.IntegralPotential(dG, Γ_quad)\nu = (x) -> 𝒱[f](x) + 𝒟[σ](x)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"and evaluate it at any point in the domain:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"x = Inti.Point2D(0.1, 0.4)\nprintln(\"error at $x: \", u(x) - uₑ(x))","category":"page"},{"location":"pluto-examples/poisson/#Solution-evaluation-and-visualization","page":"Poisson problem","title":"Solution evaluation and visualization","text":"","category":"section"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"Although we have \"solved\" the problem in the previous section, using the anonymous function u to evaluate the field is neither efficient nor accurate when there are either many points to evaluate, or when they lie close to the domain Omega. The fundamental reason for this is the usual: the integral operators in the function u are dense matrices, and their evaluation inside or near to Omega suffers from inaccurate singular and near-singular quadrature.","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"To address this issue, we need to assemble accelerated and corrected versions of the integral operators. Let us suppose we wish to evaluate the solution u at all the quadrature nodes of Omega:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"V_d2d = Inti.volume_potential(;\n op,\n target = Ω_quad,\n source = Ω_quad,\n compression = (method = :fmm, tol = 1e-8),\n correction = (method = :dim,),\n)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"Likewise, we need operators mapping densities from our boundary quadrature to our mesh nodes:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"S_b2d, D_b2d = Inti.single_double_layer(;\n op,\n target = Ω_quad,\n source = Γ_quad,\n compression = (method = :fmm, tol = 1e-8),\n correction = (method = :dim, maxdist = 2 * meshsize, target_location = :inside),\n)","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"We now evaluate the solution at all quadrature nodes and compare it to the manufactured:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"u_quad = V_d2d * f + D_b2d * σ\ner_quad = u_quad - map(q -> uₑ(q.coords), Ω_quad)\nprintln(\"maximum error at all quadrature nodes: \", norm(er_quad, Inf))\nnothing #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"Lastly, let us visualize the solution and the error on the mesh nodes using quadrature_to_node_vals:","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"nodes = Inti.nodes(Ω_msh)\nu_nodes = Inti.quadrature_to_node_vals(Ω_quad, u_quad)\ner = u_nodes - map(uₑ, nodes)\ncolorrange = extrema(u_nodes)\nfig = Figure(; size = (800, 300))\nax = Axis(fig[1, 1]; aspect = DataAspect())\nviz!(Ω_msh; colorrange, color = u_nodes, interpolate = true)\ncb = Colorbar(fig[1, 2]; label = \"u\", colorrange)\n# plot error\nlog_er = log10.(abs.(er))\ncolorrange = extrema(log_er)\ncolormap = :inferno\nax = Axis(fig[1, 3]; aspect = DataAspect())\nviz!(Ω_msh; colorrange, colormap, color = log_er, interpolate = true)\ncb = Colorbar(fig[1, 4]; label = \"log₁₀|u - uₑ|\", colormap, colorrange)\nfig #hide","category":"page"},{"location":"pluto-examples/poisson/","page":"Poisson problem","title":"Poisson problem","text":"TableOfContents()","category":"page"},{"location":"tutorials/getting_started/#Getting-started","page":"Getting started","title":"Getting started","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"CurrentModule = Inti","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"note: Important points covered in this tutorial\nCreate a domain and its accompanying mesh\nSolve a basic boundary integral equation\nVisualize the solution","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"This first tutorial will be a guided tour through the basic steps of setting up a boundary integral equation and solving it using Inti.jl. ","category":"page"},{"location":"tutorials/getting_started/#Mathematical-formulation","page":"Getting started","title":"Mathematical formulation","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"We will consider the classic Helmholtz scattering problem in 2D, and solve it using a direct boundary integral formulation. More precisely, letting Omega subset mathbbR^2 be a bounded domain, and denoting by Gamma = partial Omega its boundary, we will solve the following Helmholtz problem:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"beginaligned\n Delta u + k^2 u = 0 quad textin quad mathbbR^2 setminus overlineOmega\n partial_nu u = g quad texton quad Gamma\n sqrtr left( fracpartial upartial r - i k u right) = o(1) quad textas quad r = boldsymbolx to infty\nendaligned","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"where g is the given boundary datum, nu is the outward unit normal to Gamma, and k is the constant wavenumber. The last condition is the Sommerfeld radiation condition, and is required to ensure the uniqueness of the solution; physically, it means that the solution sought should radiate energy towards infinity.","category":"page"},{"location":"tutorials/getting_started/#PDE,-geometry,-and-mesh","page":"Getting started","title":"PDE, geometry, and mesh","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"The first step is to define the PDE under consideration:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"using Inti\nInti.stack_weakdeps_env!() # add weak dependencies \n# PDE\nk = 2π\nop = Inti.Helmholtz(; dim = 2, k)","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Next, we generate the geometry of the problem. For this tutorial, we will manually create parametric curves representing the boundary of the domain using the parametric_curve function:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"using StaticArrays # for SVector\n# Create the geometry as the union of a kite and a circle\nkite = Inti.parametric_curve(0.0, 1.0; labels = [\"kite\"]) do s\n return SVector(2.5 + cos(2π * s[1]) + 0.65 * cos(4π * s[1]) - 0.65, 1.5 * sin(2π * s[1]))\nend\ncircle = Inti.parametric_curve(0.0, 1.0; labels = [\"circle\"]) do s\n return SVector(cos(2π * s[1]), sin(2π * s[1]))\nend\nΓ = kite ∪ circle","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Inti.jl expects the parametrization of the curve to be a function mapping scalars to points in space represented by SVectors. The labels argument is optional, and can be used to identify the different parts of the boundary. The Domain object Γ represents the boundary of the geometry, and can be used to create a mesh:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"# Create a mesh for the geometry\nmsh = Inti.meshgen(Γ; meshsize = 2π / k / 10)","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"To visualize the mesh, we can load Meshes.jl and one of Makie's backends:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"using Meshes, GLMakie\nviz(msh; segmentsize = 3, axis = (aspect = DataAspect(), ), figure = (; size = (400,300)))","category":"page"},{"location":"tutorials/getting_started/#Quadrature","page":"Getting started","title":"Quadrature","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Once the mesh is created, we can define a quadrature to be used in the discretization of the integral operators:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"# Create a quadrature\nQ = Inti.Quadrature(msh; qorder = 5)\nnothing # hide","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"A Quadrature is simply a collection of QuadratureNode objects:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Q[1]","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"In the constructor above we specified a quadrature order of 5, and Inti.jl internally picked a ReferenceQuadrature suitable for the specified order; for finer control, a quadrature rule can be specified directly.","category":"page"},{"location":"tutorials/getting_started/#Integral-operators","page":"Getting started","title":"Integral operators","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"To continue, we need to reformulate the Helmholtz problem as a boundary integral equation. Among the plethora of options, we will use in this tutorial a simple direct formulation, which uses Green's third identity to relate the values of u and partial_nu u on Gamma:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":" -fracu(boldsymbolx)2 + Du(boldsymbolx) = Spartial_nu u(boldsymbolx) quad boldsymbolx in Gamma","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Here S and D are the single- and double-layer operators, formally defined as:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":" Ssigma(boldsymbolx) = int_Gamma G(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmds(boldsymboly) quad\n Dsigma(boldsymbolx) = int_Gamma fracpartial Gpartial nu_boldsymboly(boldsymbolx boldsymboly) sigma(boldsymboly) mathrmds(boldsymboly)","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"where","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"G(boldsymbolx boldsymboly) = fraci4 H^(1)_0(kboldsymbolx -\nboldsymboly)","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"is the fundamental solution of the Helmholtz equation, with H^(1)_0 being the Hankel function of the first kind. Note that G is singular when boldsymbolx = boldsymboly, and therefore the numerical discretization of S and D requires special care.","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"To approximate S and D, we can proceed as follows:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"S, D = Inti.single_double_layer(;\n op,\n target = Q,\n source = Q,\n compression = (method = :none,),\n correction = (method = :dim,),\n)\nnothing # hide","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Much of the complexity involved in the numerical computation is hidden in the function above; later in the tutorials we will discuss in more details the options available for the compression and correction methods, as well as how to define custom kernels and operators. For now, it suffices to know that S and D are matrix-like objects that can be used to solve the boundary integral equation. For that, we need to provide the boundary data g.","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"tip: Fast algorithms\nPowered by external libraries, Inti.jl supports several acceleration methods for matrix-vector multiplication, including so far:Fast multipole method (FMM) mapsto correction = (method = :fmm, tol = 1e-8)\nHierarchical matrix (H-matrix) mapsto correction = (method = :hmatrix, tol = 1e-8)Note that in such cases only the matrix-vector product may not be available, and therefore iterative solvers such as GMRES are required for the solution of the resulting linear systems.","category":"page"},{"location":"tutorials/getting_started/#Source-term-and-solution","page":"Getting started","title":"Source term and solution","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"We are interested in the scattered field u produced by an incident plane wave u_i = e^i k boldsymbold cdot boldsymbolx, where boldsymbold is a unit vector denoting the direction of the plane wave. Assuming that the total field u_t = u_i + u satisfies a homogenous Neumann condition on Gamma, and that the scattered field u satisfies the Sommerfeld radiation condition, we can write the boundary condition as:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":" partial_nu u = -partial_nu u_i quad boldsymbolx in Gamma","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"We can thus solve the boundary integral equation to find u on Gamma:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"using LinearAlgebra\n# define the incident field and compute its normal derivative\nθ = 0\nd = SVector(cos(θ), sin(θ))\ng = map(Q) do q\n # normal derivative of e^{ik*d⃗⋅x}\n x, ν = q.coords, q.normal\n return -im * k * exp(im * k * dot(x, d)) * dot(d, ν)\nend ## Neumann trace on boundary\nu = (-I / 2 + D) \\ (S * g) # Dirichlet trace on boundary\nnothing # hide","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"note: Iterating over a quadrature\nIn computing g above, we used map to evaluate the incident field at all quadrature nodes. When iterating over Q, the iterator returns a QuadratureNode, and not simply the coordinate of the quadrature node. This is so that we can access additional information, such as the normal vector, at the quadrature node.","category":"page"},{"location":"tutorials/getting_started/#Integral-representation-and-visualization","page":"Getting started","title":"Integral representation and visualization","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"Now that we know both the Dirichlet and Neumann data on the boundary, we can use Green's representation formula, i.e.,","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":" mathcalDu(boldsymbolr) - mathcalSpartial_nu u(boldsymbolr) = begincases\n u(boldsymbolr) textif boldsymbolr in mathbbR^2 setminus overlineOmega\n 0 textif boldsymbolr in Omega\n endcases","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"where mathcalD and mathcalS are the double- and single-layer potentials defined as:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":" mathcalSsigma(boldsymbolr) = int_Gamma G(boldsymbolr boldsymboly) sigma(boldsymboly) mathrmds(boldsymboly) quad\n mathcalDsigma(boldsymbolr) = int_Gamma fracpartial Gpartial nu_boldsymboly(boldsymbolr boldsymboly) sigma(boldsymboly) mathrmds(boldsymboly)","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"to compute the solution u in the domain:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"𝒮, 𝒟 = Inti.single_double_layer_potential(; op, source = Q)\nuₛ = x -> 𝒟[u](x) - 𝒮[g](x)","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"To wrap things up, let's visualize the scattered field:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"xx = yy = range(-5; stop = 5, length = 100)\nU = map(uₛ, Iterators.product(xx, yy))\nUi = map(x -> exp(im*k*dot(x, d)), Iterators.product(xx, yy))\nUt = Ui + U\nfig, ax, hm = heatmap(\n xx,\n yy,\n real(Ut);\n colormap = :inferno,\n interpolate = true,\n axis = (aspect = DataAspect(), xgridvisible = false, ygridvisible = false),\n)\nviz!(msh; segmentsize = 2)\nColorbar(fig[1, 2], hm; label = \"real(u)\")\nfig # hide","category":"page"},{"location":"tutorials/getting_started/#Accuracy-check","page":"Getting started","title":"Accuracy check","text":"","category":"section"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"The scattering example above does not provide an easy way to check the accuracy of the solution. To do so, we can manufacture an exact solution and compare it to the solution obtained numerically, as illustrated below:","category":"page"},{"location":"tutorials/getting_started/","page":"Getting started","title":"Getting started","text":"# build an exact solution\nG = Inti.SingleLayerKernel(op)\ndG = Inti.DoubleLayerKernel(op)\nxs = map(θ -> 0.5 * rand() * SVector(cos(θ), sin(θ)), 2π * rand(10))\ncs = rand(ComplexF64, length(xs))\nuₑ = q -> sum(c * G(x, q) for (x, c) in zip(xs, cs))\n∂ₙu = q -> sum(c * dG(x, q) for (x, c) in zip(xs, cs))\ng = map(∂ₙu, Q) \nu = (-I / 2 + D) \\ (S * g)\nuₛ = x -> 𝒟[u](x) - 𝒮[g](x)\npts = [5*SVector(cos(θ), sin(θ)) for θ in range(0, 2π, length = 100)]\ner = norm(uₛ.(pts) - uₑ.(pts), Inf)\nprintln(\"maximum error on circle of radius 5: $er\")","category":"page"},{"location":"#Inti","page":"Home","title":"Inti","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"CurrentModule = Inti","category":"page"},{"location":"","page":"Home","title":"Home","text":"(Image: Stable) (Image: Dev) (Image: Build Status) (Image: codecov) (Image: Aqua)","category":"page"},{"location":"","page":"Home","title":"Home","text":"Inti.jl is a Julia library for the numerical solution of boundary and volume integral equations. It offers routines for assembling and solving the linear systems that result from applying the Nyström discretization method. Designed for flexibility and efficiency, the package currently supports the following features:","category":"page"},{"location":"","page":"Home","title":"Home","text":"Specialized integration routines for computing singular and nearly-singular integrals.\nIntegrated support for acceleration routines, including the Fast Multipole Method (FMM) and Hierarchical Matrices, by wrapping external libraries.\nPredefined kernels and integral operators for partial differential equations (PDEs) commonly found in mathematical physics (e.g. Laplace, Helmholtz, Stokes).\nSupport for complex geometries in 2D and 3D, either through native parametric representations or by importing mesh files from external sources.\nEfficient construction of complex integral operators from simpler ones through lazy composition.","category":"page"},{"location":"#Installing-Julia","page":"Home","title":"Installing Julia","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Download Julia from julialang.org, or use juliaup installer. We recommend using the latest stable version of Julia, although Inti.jl should work with >=v1.9.","category":"page"},{"location":"#Installing-Inti.jl","page":"Home","title":"Installing Inti.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Inti.jl is registered in the Julia General registry and can be installed by launching a Julia REPL and typing the following command:","category":"page"},{"location":"","page":"Home","title":"Home","text":"]add Inti","category":"page"},{"location":"","page":"Home","title":"Home","text":"Alternatively, one can install the latest version of Inti.jl from the main branch using:","category":"page"},{"location":"","page":"Home","title":"Home","text":"using Pkg; Pkg.add(;url = \"https://github.com/IntegralEquations/Inti.jl\", rev = \"main\")","category":"page"},{"location":"","page":"Home","title":"Home","text":"Change rev if a different branch or a specific commit hash is desired.","category":"page"},{"location":"#Installing-weak-dependencies","page":"Home","title":"Installing weak dependencies","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Inti.jl comes with a set of optional dependencies that can be installed on demand. These provide additional features which can be useful in certain scenarios (e.g. visualization, meshing, acceleration). For convenience, Inti.jl provides the stack_weakdeps_env! function to install all the weak dependencies at once:","category":"page"},{"location":"","page":"Home","title":"Home","text":"using Inti\nInti.stack_weakdeps_env!(; verbose = false, update = true)","category":"page"},{"location":"","page":"Home","title":"Home","text":"Note that the first time you run this command, it may take a while to download and compile the dependencies. Subsequent runs will be faster. If preferred, extensions can be manually controlled by Pkg.adding the desired packages from the list above.","category":"page"},{"location":"#Basic-usage","page":"Home","title":"Basic usage","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Inti.jl can be used to solve a variety of linear partial differential equations by recasting them as integral equations. The general workflow for solving a problem consists of the following steps:","category":"page"},{"location":"","page":"Home","title":"Home","text":" underbracefboxGeometry rightarrow fboxMesh_textbfpre-processing rightarrow fboxcolorredSolver rightarrow underbracefboxVisualization_textbfpost-processing","category":"page"},{"location":"","page":"Home","title":"Home","text":"Geometry: Define the domain of interest using simple shapes (e.g., circles, rectangles) or more complex CAD models.\nMesh: Create a mesh to approximate the geometry. The mesh is used to define a quadrature and discretize the boundary integral equation.\nSolver: With a mesh and an accompanying quadrature, Inti.jl's routines provide ways to assemble and solve the system of equations arising from the discretization of the integral operators. The core of the library lies in service of this step.\nVisualization: Visualize the solution using a plotting library such as Makie.jl, or export it to a file for further analysis.","category":"page"},{"location":"","page":"Home","title":"Home","text":"As a simple example illustrating the steps above, consider an interior Laplace problem, in two dimensions, with Dirichlet boundary conditions:","category":"page"},{"location":"","page":"Home","title":"Home","text":"beginaligned\nDelta u = 0 quad textin Omega \nu = g quad texton Gamma\nendaligned","category":"page"},{"location":"","page":"Home","title":"Home","text":"where Omega subset mathbbR^2 is a sufficiently smooth domain, and Gamma = partial Omega its boundary. A boundary integral reformulation can be achieved by e.g. searching for the solution u in the form of a single-layer potential:","category":"page"},{"location":"","page":"Home","title":"Home","text":"u(boldsymbolr) = int_Gamma G(boldsymbolrboldsymboly)sigma(boldsymboly) mathrmdGamma(boldsymboly)","category":"page"},{"location":"","page":"Home","title":"Home","text":"where sigma Gamma to mathbbR is an unknown density function, and G is the fundamental solution of the Laplace equation. This ansatz is, by construction, an exact solution to the PDE on Omega. Imposing the boundary condition on Gamma leads to the following integral equation:","category":"page"},{"location":"","page":"Home","title":"Home","text":" int_Gamma G(boldsymbolxboldsymboly)sigma(boldsymboly) mathrmdGamma(boldsymboly) = g(boldsymbolx) quad forall boldsymbolx in Gamma","category":"page"},{"location":"","page":"Home","title":"Home","text":"Expressing the problem above in Inti.jl looks like this:","category":"page"},{"location":"","page":"Home","title":"Home","text":"using Inti, LinearAlgebra, StaticArrays\n# create a geometry given by a function f : [0,1] → Γ ⊂ R^2. \ngeo = Inti.parametric_curve(0, 1) do s\n SVector(0.25, 0.0) + SVector(cos(2π * s) + 0.65 * cos(4π * s[1]) - 0.65, 1.5 * sin(2π * s))\nend\nΓ = Inti.Domain(geo)\n# create a mesh and quadrature\nmsh = Inti.meshgen(Γ; meshsize = 0.1)\nQ = Inti.Quadrature(msh; qorder = 5)\n# create the integral operators\nop = Inti.Laplace(;dim=2)\nS, _ = Inti.single_double_layer(;\n op, \n target = Q,\n source = Q,\n compression = (method = :none,),\n correction = (method = :dim,)\n)\n# manufacture a harmonic function (exact solution) and take its trace on Γ\nuₑ = x -> x[1] + x[2] + x[1]*x[2] + x[1]^2 - x[2]^2 - 2 * log(norm(x .- SVector(-0.5, -1.5)))\ng = map(q -> uₑ(q.coords), Q) # value at quad nodes\n# solve for σ\nσ = S \\ g\n# use the single-layer potential to evaluate the solution\n𝒮, 𝒟 = Inti.single_double_layer_potential(; op, source = Q)\nuₕ = x -> 𝒮[σ](x)","category":"page"},{"location":"","page":"Home","title":"Home","text":"The function uₕ is now a numerical approximation of the solution to the Laplace equation, and can be evaluated at any point in the domain:","category":"page"},{"location":"","page":"Home","title":"Home","text":"pt = SVector(0.5, 0.1)\nprintln(\"Exact value at $pt: \", uₑ(pt))\nprintln(\"Approx. value at $pt: \", uₕ(pt))","category":"page"},{"location":"","page":"Home","title":"Home","text":"If we care about the solution on the entire domain, we can visualize it using:","category":"page"},{"location":"","page":"Home","title":"Home","text":"using Meshes, GLMakie # trigger the loading of some Inti extensions\nxx = yy = range(-2, 2, length = 100)\nfig = Figure(; size = (600,300))\ninside = x -> Inti.isinside(x, Q) \nopts = (xlabel = \"x\", ylabel = \"y\", aspect = DataAspect())\nax1 = Axis(fig[1, 1]; title = \"Exact solution\", opts...)\nh1 = heatmap!(ax1, xx,yy,(x, y) -> inside((x,y)) ? uₑ((x,y)) : NaN)\nviz!(msh; segmentsize = 3)\ncb = Colorbar(fig[1, 3], h1, size = 20, height = 200)\nax2 = Axis(fig[1, 2]; title = \"Approx. solution\", opts...)\nh2 = heatmap!(ax2, xx,yy, (x, y) -> inside((x,y)) ? uₕ((x,y)) : NaN, colorrange = cb.limits[])\nviz!(msh; segmentsize = 3)\nfig # hide","category":"page"},{"location":"","page":"Home","title":"Home","text":"info: Formulation of the problem as an integral equation\nGiven a PDE and boundary conditions, there are often many ways to recast the problem as an integral equation, and the choice of formulation plays an important role in the unique solvability, efficiency, and accuracy of the numerical solution. Inti.jl provides a flexible framework for experimenting with different formulations, but it is up to the user to choose the most appropriate one for their problem.","category":"page"},{"location":"","page":"Home","title":"Home","text":"While the example above is a simple one, Inti.jl can handle significantly more complex problems involving multiple domains, heterogeneous coefficients, vector-valued PDEs, and three-dimensional geometries. The best way to dive deeper into Inti.jl's capabilities is the tutorials section. More advanced usage can be found in the examples section.","category":"page"},{"location":"#Contributing","page":"Home","title":"Contributing","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"There are several ways to contribute to Inti.jl:","category":"page"},{"location":"","page":"Home","title":"Home","text":"Reporting bugs: If you encounter a bug, please open an issue on the GitHub. If possible, please include a minimal working example that reproduces the problem.\nExamples: If you have a cool example that showcases Inti.jl's capabilities, consider submitting a PR to add it to the examples section.\nContributing code: If you would like to contribute code to Inti.jl, please fork the repository and submit a pull request. Feel free to open a draft PR early in the development process to get feedback on your changes.\nFeature requests: If you have an idea for a new feature or improvement, we would love to hear about it.\nDocumentation: If you find any part of the documentation unclear or incomplete, please let us know. Or even better, submit a PR with the improved documentation.","category":"page"},{"location":"#Acknowledgements","page":"Home","title":"Acknowledgements","text":"","category":"section"}] } diff --git a/dev/tutorials/compression_methods/index.html b/dev/tutorials/compression_methods/index.html index 95f284a1..7a5bbeed 100644 --- a/dev/tutorials/compression_methods/index.html +++ b/dev/tutorials/compression_methods/index.html @@ -11,12 +11,12 @@ K = Inti.SingleLayerKernel(op) Sop = Inti.IntegralOperator(K, Q, Q) x = rand(eltype(Sop), length(Q)) -rtol = 1e-8

In what follows we compress Sop using the different methods available.

Dense matrix

Inti.assemble_matrixFunction
assemble_matrix(iop::IntegralOperator; threads = true)

Assemble a dense matrix representation of an IntegralOperator.

source

Typically used for small problems, the dense matrix representation converts the IntegralOperator into a Matrix object. The underlying type of the Matrix is determined by the eltype of the IntegralOperator, and depends on the inferred type of the kernel. Here is how assemble_matrix can be used:

Smat = Inti.assemble_matrix(Sop; threads=true)
+rtol = 1e-8

In what follows we compress Sop using the different methods available.

Dense matrix

Inti.assemble_matrixFunction
assemble_matrix(iop::IntegralOperator; threads = true)

Assemble a dense matrix representation of an IntegralOperator.

source

Typically used for small problems, the dense matrix representation converts the IntegralOperator into a Matrix object. The underlying type of the Matrix is determined by the eltype of the IntegralOperator, and depends on the inferred type of the kernel. Here is how assemble_matrix can be used:

Smat = Inti.assemble_matrix(Sop; threads=true)
 er = norm(Sop * x - Smat * x, Inf) / norm(Sop * x, Inf)
-println("Forward map error: $er")
Forward map error: 9.256264614296266e-15

Since the returned object is plain Julia Matrix, it can be used with any of the linear algebra routines available in Julia (e.g. \, lu, qr, *, etc.)

Hierarchical matrix

Inti.assemble_hmatrixFunction
assemble_hmatrix(iop[; atol, rank, rtol, eta])

Assemble an H-matrix representation of the discretized integral operator iop using the HMatrices.jl library.

See the documentation of HMatrices for more details on usage and other keyword arguments.

source

The hierarchical matrix representation is a compressed representation of the underlying operator; as such, it takes a tolerance parameter that determines the relative error of the compression. Here is an example of how to use the assemble_hmatrix method to compress the previous problem:

using HMatrices
+println("Forward map error: $er")
Forward map error: 9.493353392661563e-15

Since the returned object is plain Julia Matrix, it can be used with any of the linear algebra routines available in Julia (e.g. \, lu, qr, *, etc.)

Hierarchical matrix

Inti.assemble_hmatrixFunction
assemble_hmatrix(iop[; atol, rank, rtol, eta])

Assemble an H-matrix representation of the discretized integral operator iop using the HMatrices.jl library.

See the documentation of HMatrices for more details on usage and other keyword arguments.

source

The hierarchical matrix representation is a compressed representation of the underlying operator; as such, it takes a tolerance parameter that determines the relative error of the compression. Here is an example of how to use the assemble_hmatrix method to compress the previous problem:

using HMatrices
 Shmat = Inti.assemble_hmatrix(Sop; rtol = 1e-8)
 er = norm(Smat * x - Shmat * x, Inf) / norm(Smat * x, Inf)
-println("Forward map error: $er")
Forward map error: 2.395040782211143e-8

Note that HMatrices are said to be kernel-independent, meaning that they efficiently compress a wide range of integral operators provided they satisfy a certain asymptotic smoothness criterion (see e.g. [3, 4]).

The HMatrix object can be used to solve linear systems, both iteratively through e.g. GMRES, or directly using an LU factorization.

Fast multipole method

Inti.assemble_fmmFunction
assemble_fmm(iop; atol)

Set up a 2D or 3D FMM for evaluating the discretized integral operator iop associated with the op. In 2D the FMM2D or FMMLIB2D library is used (whichever was most recently loaded) while in 3D FMM3D is used.

FMMLIB2D

FMMLIB2D does no checking for if the targets and sources coincide, and will return Inf values if iop.target !== iop.source, but there is a point x ∈ iop.target such that x ∈ iop.source.

source

The fast multipole method (FMM) is an acceleration technique based on an analytic multipole expansion of the kernel in the integral operator [5, 6]. It provides a very memory-efficient and fast way to evaluate certain types of integral operators. Here is how assemble_fmm can be used:

using FMM3D
+println("Forward map error: $er")
Forward map error: 2.749953905685806e-8

Note that HMatrices are said to be kernel-independent, meaning that they efficiently compress a wide range of integral operators provided they satisfy a certain asymptotic smoothness criterion (see e.g. [3, 4]).

The HMatrix object can be used to solve linear systems, both iteratively through e.g. GMRES, or directly using an LU factorization.

Fast multipole method

Inti.assemble_fmmFunction
assemble_fmm(iop; atol)

Set up a 2D or 3D FMM for evaluating the discretized integral operator iop associated with the op. In 2D the FMM2D or FMMLIB2D library is used (whichever was most recently loaded) while in 3D FMM3D is used.

FMMLIB2D

FMMLIB2D does no checking for if the targets and sources coincide, and will return Inf values if iop.target !== iop.source, but there is a point x ∈ iop.target such that x ∈ iop.source.

source

The fast multipole method (FMM) is an acceleration technique based on an analytic multipole expansion of the kernel in the integral operator [5, 6]. It provides a very memory-efficient and fast way to evaluate certain types of integral operators. Here is how assemble_fmm can be used:

using FMM3D
 Sfmm = Inti.assemble_fmm(Sop; rtol = 1e-8)
 er = norm(Sop * x - Sfmm * x, Inf) / norm(Sop * x, Inf)
-println("Forward map error: $er")
Forward map error: 1.4642155346045475e-10

Tips on choosing a compression method

The choice of compression method depends on the problem at hand, as well as on the available hardware. Here is a rough guide on how to choose a compression:

  1. For small problems (say less than 5k degrees of freedom), use the dense matrix representation. It is the simplest and most straightforward method, and does not require any additional packages. It is also the most accurate since it does not introduce any approximation errors.
  2. If the integral operator is supported by the assemble_fmm, and if an iterative solver is acceptable, use it. The FMM is a very efficient method for certain types of kernels, and can handle problems with up to a few million degrees of freedom on a laptop.
  3. If the kernel is not supported by assemble_fmm, if iterative solvers are not an option, or if the system needs solution for many right-hand sides, use the assemble_hmatrix method. It is a very general method that can handle a wide range of kernels, and although assembling the HMatrix can be time and memory consuming (the complexity is still log-linear in the DOFs for many kernels of interest, but the constants can be large), the resulting HMatrix object is very efficient to use. For example, the forward map is usually significantly faster than the one obtained through assemble_fmm.
+println("Forward map error: $er")
Forward map error: 1.3084073429707378e-10

Tips on choosing a compression method

The choice of compression method depends on the problem at hand, as well as on the available hardware. Here is a rough guide on how to choose a compression:

  1. For small problems (say less than 5k degrees of freedom), use the dense matrix representation. It is the simplest and most straightforward method, and does not require any additional packages. It is also the most accurate since it does not introduce any approximation errors.
  2. If the integral operator is supported by the assemble_fmm, and if an iterative solver is acceptable, use it. The FMM is a very efficient method for certain types of kernels, and can handle problems with up to a few million degrees of freedom on a laptop.
  3. If the kernel is not supported by assemble_fmm, if iterative solvers are not an option, or if the system needs solution for many right-hand sides, use the assemble_hmatrix method. It is a very general method that can handle a wide range of kernels, and although assembling the HMatrix can be time and memory consuming (the complexity is still log-linear in the DOFs for many kernels of interest, but the constants can be large), the resulting HMatrix object is very efficient to use. For example, the forward map is usually significantly faster than the one obtained through assemble_fmm.
diff --git a/dev/tutorials/correction_methods/index.html b/dev/tutorials/correction_methods/index.html index 98739ec9..b7cac2fe 100644 --- a/dev/tutorials/correction_methods/index.html +++ b/dev/tutorials/correction_methods/index.html @@ -1,2 +1,2 @@ -Correction methods · Inti.jl

Correction methods

Work in progress

This tutorial is still a work in progress. We will update it with more details and examples in the future.

Important points covered in this tutorial
  • Overview of the correction methods available in Inti.jl
  • Details and limitations of the various correction methods
  • Guideline on how to choose a correction method

When the underlying kernel is singular, a correction is usually necessary in order to obtain accurate results in the approximation of the underlying integral operator by a quadrature. At present, Inti.jl provides the following functions to correct for singularities:

They have different strengths and weaknesses, and we will discuss them in the following sections.

High-level API

Note that the single_double_layer, adj_double_layer_hypersingular, and volume_potential functions have high-level API with a correction keyword argument that allows one to specify the correction method to use when constructing the integral operators; see the documentation of these functions for more details.

Adaptive correction

Boundary density interpolation method

Volume density interpolation method

Martensen-Kussmaul method

+Correction methods · Inti.jl

Correction methods

Work in progress

This tutorial is still a work in progress. We will update it with more details and examples in the future.

Important points covered in this tutorial
  • Overview of the correction methods available in Inti.jl
  • Details and limitations of the various correction methods
  • Guideline on how to choose a correction method

When the underlying kernel is singular, a correction is usually necessary in order to obtain accurate results in the approximation of the underlying integral operator by a quadrature. At present, Inti.jl provides the following functions to correct for singularities:

They have different strengths and weaknesses, and we will discuss them in the following sections.

High-level API

Note that the single_double_layer, adj_double_layer_hypersingular, and volume_potential functions have high-level API with a correction keyword argument that allows one to specify the correction method to use when constructing the integral operators; see the documentation of these functions for more details.

Adaptive correction

Boundary density interpolation method

Volume density interpolation method

Martensen-Kussmaul method

diff --git a/dev/tutorials/geo_and_meshes/19f16ee7.png b/dev/tutorials/geo_and_meshes/19f16ee7.png deleted file mode 100644 index 2d469213dd3d30b96cec0db97a2c4f1d39b5f0be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21319 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

ThXGtbNcFxV!Z{f`N zgHmdu3Uu}9^q>8p7B-|ICPx3^=CwR<8XSb?fE)y%h6`#?5PiM5>)Ud%5U$^|5%^X} z67UCpf8+QdFuFe8Gc%% zdV8hN&=BhWM=aUdmvBJzWukM(ZIw#?1QfDqX$uPw(uaqk>i{@GH}=Lx(C+Olp~Dl- zZ)betK7et^OVtlQca>QH@|D&Z!^mqAr49XKQ1Q`eJYqQq4F+hgQvX-ahjl_?^H@cy z*1rZj`2C0fMy;59VX(GJ{k|A(w&zI|o26)#5l8a|ZNC716k*KJL)AX)K#l z4~_tOv#wBg^cTKCJB)JQP}YTaQB}=&wYAec^$LE>;kPV6X>B+I5GYw&es_-~&prx9 z9dRW_z%5Mj-=I(Y-P}8SImA=yWr!IuT~{?UZWjsA*bW3I-_R{~b$OjlKyaIq;0iP+ z8CTczwt>VdBV%(n&w&5mz*<99nHu|uKQmR*4N!vfY59L@xzeB}&n;YP@iM}dpka$F zMoMM5C`&9B3X#Yzix5a`Bn7WhbK!!3fDjZnv>6H5dmXN*fPpj!36Ufu44@QB8vJW~$_L+yr&Np(7Id0Sw{+BNLF~Pvd z=;tzrb!E18G{kOcPGUQyQUP7e?&pmdJpNW$86B|{4iX864z(A8jWbKi%EGq%;c%94 z90C_H;fvR$V^~p=eA|2G?)(Px`12-cZG%d63KI4I-n!+6{gd&d{t2LJdU~40V)^>| z?teUch0Arp5~HH{AcF-dVXa)PY|S&a`O*T7qHL^w@Xpq_qKbgUWfw^20R)`-{NF=q zsxA`|iHyf@$($KE0LlVrRE&Wfuusa>kQ-*kGEOxxRJ0!Mec-Rt+dIK3c=zB@K zx-7oP`1D*Yn|;?k@rj&6Tw9#U17ajVwUMEr<+Zf|By{FTNXXp${Oa5IO?DsUack>1 z^)2_OZ;jVhR?;QFLIgq>=!Wq?vg6~)$;r1b>TSQw;Z->pL>YroB)@q0_wC#Bfrxh5 z%!TxixF%QVh**5hn;!T|de0M%f|?)P&nMLa4nkC+`v(R9)#hr3+?ah`ZD%351pc2C zsCurhy%bC_>Oj&5wHziH6R@o+|3+cq^K$Ro-+jmEqg-Mzb{iTN+65Ia>v}c!N&-p_ z0K9AA;F}L{6mV!uOUoXAAEZ1qEbMziPR{b)`{(C3mc}17HKj=)y`~4A3<>G3@X5>c zB2PUlx3;!6sX}*jbO5ys%oiAM9c^dd^j3Z&y_*H(c^;29yRqBoS%v;9zj@ z!fGZ|fxvJe5DbBbf`|7j6bcF^b^M31o}QjQD4MAyN~Kbv$O9(>*%@l9uZxRxaIg`E z-wpqE_y-aX)P`kAJ;@^EhM3Xmwv%FD@QvPsot45}!UtDF*_T_d z>Xl+I`p&-m*47s!0v~11tiHd$sZpz`?_W#7jG%EWN504Zr>~A52LYlaFbq&9Qb?sK zopeixqA+M+gDSw;N}P#SR#w-IZ6kKFcB{F-4!yXh7|(vEyZ}!!u?zfU>(*#zUtgW< z5Q%F>D=uDKSXf_FoXPSc=j1dM78-(K0svL!PL=!QEm{iUn&-NFb& z3OCi9`uz2|AOQ0co4luTxhWd;5T+Vm9hRP*UHv}-$J&Rgt3-)9i*}js*pV@>3W2r| z)D=TRx)^*N0(}5T4q;z3pFORfz@+{1fXQg u`dUG|!hjoq*JZf>pAGl-d-UR_-uWN!H%$*)Uje1dk3s?>{2$^HuKWrtp1%tK diff --git a/dev/tutorials/geo_and_meshes/3a92ac05.png b/dev/tutorials/geo_and_meshes/3a92ac05.png deleted file mode 100644 index 23910f2dccca368ee8ecbf61d120e9a40048c272..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78884 zcmdSB^+VNL*FCyH5EKPe1f)fzJB3Y4h%_jmq;!LHHzF-9Eg&EwCEXwbBHi63-CcL` zJm2@;_ul{D{&J3ZHhb^ST62v##+YNBKm|F;ySIsMBM^wYQZK}m5C~K?1Onv~CMx{R zg=%0o{0q%UL{ymCTWZ^U@@+Gy(8>U8yyU@iGG4D8w?YH>7_ z%rV6qx+smkoO+R-E_M2b`E;k9`kYzk9PLu^RD|lf!PFmo)9vt3L|kH~T#*;+M^o)@ z-!K#}F+|0GRvhhq{w~D3QHPZzz9 z|9*kaJz_GlI_JHt&`?=5H8mq6BTdcZj0`;;9UUpDwipK0^o)!L4<5|M*)Da&fB5jB zq=b{4oc#D!t(ND(>TBk>#800PurNi!+5L-)i$$aBU%yi6Oi1G~>c+&x$P1nMNTB5;lBOUgDY@swuQS1c$4E`6=ZAZa zsmCuMkk@OBXwYYum6taweT%@v#B^HC$&O{#yzLpBW#U6IW7W$ki;H$n8p4L4@SBm` z+1csBnvo>bLwrt7PEJX|zwJ+`r^7$9y1FWOv9Fwv#bY&fM@XcfQv`QgyOHpT-;C$; z>mM4_IE@ohQc{*|DwUO$HJAw=qj?7W=L5EMLhgxfYp0ncP+;nuqoD^scXd6>PW2cY z82CNEqpPQPv_9ITTg2M3{p3I20iomOcD^}TT~}9!us+_Nt*WZ}^XJd^@89$DnaRmh z3AEjMr>4jdL_|cem{Es^4ngUnqM~H3>ufPE(GioAld0~9Z)9cfwv3FAyLP7tXlZF7 zSUEWd1_uq;;}H!ytRw<1`(veM_XB?q4-@E_b0^*tZE*VZ`qis%gQlSp%5UB{pYE?% zjF)wGcf;;$*L!GY^p1>-m`~RU2nv!R>Mjn)t?Et;M}Hc))YjG4Up2#5I@>7E`|)GS zZBN#RA}BaGoJ^p~?PS;e?C@QPe5#=PN?&GMo0Pw3k;BFqyz^r}ubsl@m?&^!j(6Kx za=(Aa6-|VNEz-katZ>?y^T#4+X=yPxH)rSI$Vg8|=vZ2A&W8&z)6w-Bb3(BY^H|DA zNwE>$slU3|qM@OQW7d4DqB1l(y0Wox0dI&zB5&xSpa(bf^z^{*O$`k#ZEOgzv+oY6 zTOAx6kUq0Uc%VM^BR~jCOSkh(yUlNG+(kgOPP-pzs;d)=E6&f)8yFbm<>eW5rzEGQ zdaf6>Zcf#%ZEWNXuL+(0%Q!tfoo@}7mytPN;;GNc$$4*MlTN$Z5=xAYj!q+=V&~|{ zLPu8#4_jt2j?lTfypRkhi+PzjG&ID-#02$GR#tXhRexGqTO}nWO%ll92$7KdCagc- zZO@iZRiTfGjg1`~98}HMIN5H(;jtJS=)R$Wn)YowbEi_UPzHyTTgf@xbJy zrkdJ|eme#3(CW4ptA= zhGCZdK33!lGSjIv7Ci@yD=O+x=h=KHKwTF%AQVj5A(FBBR%w zyS%(S_1Sw-`WO%RdpJs4HG6Uf2AOU8qL?W2B4wt7-(fR?f`X2Zk853zpr%rIZ6$JE zkqLQB^!M-Wbqif>Sb3iHN|IZQ6rvzPBr;TTC+j`y>+6L?aH*pLvrN>4anWiKh{Q)qFIsl9H18%Yy>FE*bMN&PXq*PK?M)^`& z`tUKDP`U{b0#_8FV`UYNdpZ})^0&R+7m6_|3P8ZC2vaA7F6d`@`SeeNU>R!Hg$T(o z65hVvUPW!~>45=#PNKctUCW6IHeTL9HcMk;)_9q4fy0qdVxE`M(s0TEWkRrYycK9Q zN=;*AsIjoH9t1bTO6jwsTw{foRsjaW?^CbwZ$e2iF@%>I2%T0)@g9xCk$m z+-9M7tc0vB&=l~kD>Wjiymu5D2yY-nF%dG<4_ZDq%{HJi$4N(imB?UA>_m9|=T{Mr z{XEfxei7bi$OsqwJHG?{QvK~)dU|^JUJvB?-*3-|za1sGt z!!C>966!^@QQ_T=ii&zoA2Vt$=(2C@;ZZk^s;)jB7KZJI3(r)f#)zQ6M8($$@h2Aoed0HFDnyF5HR30Vc&^>vn$d_ENL zEV9&5)z!$;TkwSiQ?=o10e1iUr>3C5Dj*=+&&f*W2A|{ArjLq%S8yk4YHC97v3&PV zQALGYP;hf~l|JU>Eg!E`VN8^U-@nBi9n0a9fvEHvqamW&>;UtE(mk%urV~4tCMG5_ zB*V2TtY-&RwI2pIH#m*N%VYs0Ko_BU`gF3&KDVHt8z>3jVVXimM+ZLuyoiVhoVe1` zQa3?Qz#MoI*m$ejgILitr;XC#4nvL>!s}9n`T*L1KS3_h$w_tAPDt*C|*SRk;ltWBZRR4e9Ek*1$lX$&ki?cW@e6$ol4)j z@BdSTHtBKUQmbXfNz|-c1dx)LIKBc1m(0h7L`o|T98G&#nV7`K#@>W?M0_#fV`XKf zrk2Q4$26mHVMp?gVXY9k28Q~_)uG0+iJ%xhxhNLuLaAva$@v%Pc%R zJgB5#IXrfn2^jHnv$AgL$@Fuc-eYVae1PT+UpSmr4eeJ`6Al@_)BeBSg8It@Dk&bG za$t9jLqlabIc?+P<6T|Y2&(&m@Ti%YPZ6|ux1kKBrKQyxmiJVDr~yxTCMZ~E*qJbW zvFUg}5cW5-w)UbgQyLn1Godt9Bu$DFB|H25$NP;KMH!?APoj zDLJ{ewiX=~CAgW-?jLSqXMRo&oXXzb-rN47nM&8p#Va^4@J+3Yy`!U}xVX5D&2H+| z`EvP`OKyICeo>JkeN5ecpEOI&HY(!VtM9P(V`F2#Py@wwTZpaBcfviBl9FE0#{i7S zyr5!cX2wi|=9`?g0^mC~_BN6#jz#-&eEKrBSr-<$)vy@2%}d2-rJNf3HGC0V=*q`t z1+_O31vR^WCnhu$6&0nWgM}&7>OC&{<%O7HULI|X9|0r7!^89Y@F8Ebx~#C!+RhFS z0oxCpYQ&ryQKV(vS4@4m0pFf%g?N=HyIGjINlVYr4l zB_*Z%_wPfQAl3o<*M{;$({Qf~|I_EsPBRTC#iNWdFYm!QP#l1EIS#be#my}#%Oq2Y z4nO!^+6hh?dS-gyvo^f2S-P1c6@-@@iI5D8~|@E#<}r>(S^ne-#u4S>RVs` zAx4=-``4H=lIj)$qyvpy5+NB`N__n6juU)xI;{>PDik6MkC!H1^OGp%Rbab?FS`@Qr)cjaI3BAy()37NVS9A!= ztLV@6iJO{^iODU`R#TL7*k*L0$o9oTuV&pw`9d|uYh4j?6_J~}_U|7ptlG6iVOV17iUFwzJhUIq80W zyaNa3S6|efL^bS7}YLxBvQpK2m>w6}kV zkH56AfQOIY)zOi}?+i5F7D`7>POjm&RiWXSm$d~bz{$ypX=&AuAB^<$robXV00`PF z`~k)x1iGdv0LMsQ|LfPUBV%Kz@H7)QIAtB}>=u@nmlqbId zlkp!C_!E?c!nBqSt= zFC`_>>EA*^LN>IiV-Fub%v8#msh?e2bKRb4grl4+(gruYySQF>;I|*P$lWWK^&pe0v*UzEg-t{!Ozc+XUa(rr0M-YG>=NM^sz%r%&5UiB=!{ z{iUexA3yy>^{DtuQPIvqTNE(yyI5H5fBy!BhAvt^E38l~R0H=x_0_9|r6ni;MZ6fm z&VM~=pFZKHDPSHUVDB{)l$CAauz|X2ZD}zyG;I0(TjBZ~>M4S$kpJzQLhc|iEOTxo z8`};P`dw^nFea?6K)sMWv(}leb6@UC9ndV5vX3xY86KO8}P^^@Vk~% zH90D|1)9~=F)yPcBg4o9i16^hx0q2)Q_4y4I9&k;Cub1&!vA~A@yT!F2SC#VE&&B` ze(o0Y5(L|KmiqI)>FHEpy!Ak@nu1yCDgct(<5)Z|PnH94$h-dhc_AxXT3mbsO70WU zqepZM49dBKfE4sG@awMuAOWXHurV%4{Y2lHny!Ky1iKVYio}2L0KVQ&+vTpA866r=aBj9HtA|@#0|0Z~y{OtgqXR9vKJR4~>c+;#uxT0^ zBmqs{;$A)hidI%u(3%186cr=DA_30}YWu0YynH0p>?OE8_wfNjlAgV%1p3z;^e{d? z9&m{f9}8gFHwVbgw{NsGG}#pu&nPH#02{AOu-JKm?>zRf+_cJ(6M^J)f ze0H>e6ui7|nB$tBhx!Ddw^TsS`tn6MPbDro+AkoW;7ze1KmyPcG?4~h3gbplpRVBE z#c6xI$$4e?-z}$%xPEF}oe+?EShsJ(s)1~ZV^S{z(GTaOX>c%x0@Dc>D9v?~AI{e_ zE#-rA@+aa6(qVlBNOW;A2me=Er-ok6$)Tax)YJl%Tn2jj^z`(he9bcu_s@8FAN$Rq z=v!G`{la1aHnF_B*scxoe6}fogPk2@;Ks%Vn5+|V#tD{YX6@bG0N8+UP({!?kaqt* zWn?@N#Uv9JO=IQavIn&d+tnII8XOiT2dMDp59X~~BAAU${yrE{ZThArCg8s$yv+k8 zs8*ya{`T#dB)L1_I|dGVpx94<2zWHShYt<@H{yGHdjsNc;!sEBWM(b`2t$7Yl?xjL z9f90^KO#Aq^gNxl1yC9MnQJ=F+5$^jD;cTZ;REa{ibmcNTrw&uDh37yX67)c^Cll3 zjG$g)b7SKQmjhFPZdKLcYv|sZB83mPu(*r!1V8v;{S0g-aF&r06Je3u>2@wGg%ldbpXfsbNWK^CIu*hqWC%{PFJhj6ro*)NZn;rRRG# zX4&3W^>=UGg1!(M9%2lWo?yLR;R(9+9t_?%dJLvDqadO!in=R27)eZ2I+!k%>u9S9d1mu@t+Zh@Rej zj&e3AQ?mQ_BV%G75)ib`TF-ckHeM{xH3t{eovwm6J?(jQ0WAa*4OQoy6zaG9OIg|B z@4yGZ;lhG~fOu$B+B^+zhDpf#@W*~&ZL`2}zJeC>%%-(+$3t3O_2r@%h5mApzV1wZ zMz;;N_Q;^MwE4TIk@Wisl_xpx1ApDTkwUnd*4gssAfBq(1}miIvNLr#yG3`%%B+%MuQE>OWQiZPmzrc9I$L9=3T=BZqfLA>$_`Dx1 zv=WJoqM{-;qEKLNAR0Jj6FUuIZjgw^=(H4X)RiJ|HfC1Pwzvx&)qZVADpLvQ;1OHM z4p?$wsn6c6mD-gQr_jVcIv^tIH}uZQu4Jb@yoaACjq4YhOD-y=Zl7j0Vz>=_pgI!_Gf=NF2hV@xBcgm9j7AN^g+LZ@dNS- z{&~}PwsJYebuF*_M_!)4Xxb}!cTnHJ%xY_DC@Co`G?>q;pwd!YH!CNr9k0M^h87Er zSPoj1v@|F&M2jy%Zvt#)&|FZ6*S_T6zqbi-O2KLb4<&e*;m3qe_RTGN(prCZ^d39u z=GX6>(nAyLN6mlpCA2>wX#1a{48Nm4B_q2;p^nB2D zxf`x7&P#p`anx@kgPLcz{fRnO;zbUOx>a7i`rX_NTmy_O+r_^z+YI-Eo58n`mX&2< zX71|h@&M5QN~6MTm|16{0J@Zw71$%)ZEfJ#;s%OA6NbsuD7d5mv9P{gJFLG5+ZT6@ zQayY7dgGc6rK1n|14$6nAF4Iue#~t9vHM$?iP!l$zL1pNIp072Y5xXK{IQP$uk&zR z&hw}~Tnoz_#?Q$__S*Li=GUP%v9+XeMQpqA3E%6o-S~7`zkWv z2g7LM35>MJo=Dl8>@ME+MWA*T3vots7cix5Omz`<$XM5zUT<%4ab{*N))&i!V zXpSgFX#?k^lJg{s4Oaj|kJ<97)wia|vhaiHQiolVn(-00y&$o)1S19^-owyZqeK#F z0E`WAh;-Rt2xgW>OYhJKqYs!ORa|}UT!MB5G5|OsI2s_8z!we|JpBjQ0s9Eu2JHIR z8X6j4n?TD0`xny((ehkhS9h*-SS#w=gnjY6t)4AqJl8KTlVV}rMgr+uK014To6@>` zYk$2cHU#2&45My!;5DN(c(mVNlV-j_c^>;zk&!#N{kd0FVy;Q?XtR(EMFg)CdZ0n9 zOCGn!T7StXzmNcaY+>f==}B5z+O=inSbs(;71?ln>oy_Q^+0QPcQ-4GI;hF^FgzhO z-umv_UWLIjDg}4n&kxO87*S7|^C}2zF88MY(Soo@U`oJD zb#tr~xYA1~XL&}=?FrlNWI^}SomTRr?d?B*|AI1{+dFBfu%ftz(mjx2G11X?LPP$V zGuahCxbI)9V8}HzEvLkY9cRV{>U$*+zjVSa(4#|Fc{|67i3Y;A>u zngrw@8ag-lpDY0A>zJ2M&yO@THNlyh76f0LfJKWREQYk_0pLi$yz$2?dhhqs4TMeI zoP2!XD8CV{ROB)1Gr2Ry8)A|n_r!7M#@K+O@&ZX=O>x;kBZD7JBrcj1u3v`Z$KEdm zRW8(S7FB;o6Pq4jX2wzm8fd-=TaJ9lo*AlzT>e-3wL0?ycYIBgZgy*cRM4vFkC3tB z#G&!#3(~uF_oV9D7dm77$)wY1sHvBhmrvXTMKK8xFeSfn;|96s`Od<^*9aq~!h^Kd z(-Rf!8y16>(kg^@dw9W<(~7ynU7?3%qt0l(h7UwvAcX`bCReK&dq=HSUdUH#aey<6 z#vUK~5^1z?zQ3SQE-g$&i5W>{Z_B}rB8VDMQoX`0f-BqE3Fk4@ZMO~Z3Z(PRkbq>l z>}t?YP>#@VV5&MlH>U;k+@L+SZPDg9;LY2&n_vL~;|3)PT>`*x>JXibjI6>f|`g*#F(5q~(@G3UTykEw2+y zxm5q@ee#h4lUu%F7Aub0veskio9DvnheTB$-65>Zpk0P+as1mknV|~0v-lM?)kS?q zCK|Q|BCfI~I{Q_PUDQPyZ%*A$z(B1v>Cb`|9YJ*~m<&C5&?wcNI;!n^ZmvbmFPby; zdldL_NFG`B>SGktD8=bvrHxWfMGj=+A{HICDw1Q=ZtuIa&R3at(x1Ne4f(e}*zt>8 z3R-)K9A5f+o+&j>i=WGX#M!3XYUNJ!_>0U2e_(`F-1|v=P)}cqS*zxo zQVuj(UJ~pH>FWt6tB2;^-X08bVF&;mrFX^d)~#D-M_bxeb~$2{-k$j3t>cC7nyT#A zEGMggP-}xHqzkGB7~UNm9O#jRIALjNj{!3(?&F7Bu^P9!zRemX!Pcfy=6!EGc83+o zMiohCp>gqsQ4Tt5$KNT@#Stydxqqa(i~ruen;)@TOZYoFKGyr313B2Q)U>qCXhCuj zS8%TlPovIwbakUtJnjTFC!QrCk*IoHL8PeikPL<1cX`7{T56?xIrSoV>*wz`n{cXPY6JJ!TPhNqR$FF$24YCWYn-E#3S5Jg)xsqn}A z)rdsHwMM5bR-B%EwepB)?Lou8E%t%^}8pShtVHrejq&0)A`6f&J$c#$e& z0%iYhZBBDnvrN_c4kd*{`-9|zn0L8l4qPgiU%HfYUV+jDYs16jx_bCA!Mg#E44Afi z+3&X;Y!oF5x0rrBeOVnJQMXgaU0{%l(D|DEngjW?+`&BeFM;~lpJ)f0m<$<{fJ;w6 zs28%A{`nu&FBRAPl>Czug+%{|8fc$yEN@Dun`^k06!#ydh}>Ot)~I8pFzqDF4Q9ZD zKFOeuPWg>EuKxB%EmdXf_g~9>I~T958F_(&XqW-9lBogFEVrCg`i~vuCMZNlw*pQX zCN}oc-idWLn8R0>NA;eN4ZkT^l7^(c0R12O&F(D&TW2(p>*i&>IsXmFbXJQYO>1mHcTx&r(H`d9HgZA5LH6N^)OhNKWnNB& z%MgohjG3_0_=XZx+vVYDcil65Qc?jVlHq>fOq?&<2Mi4KU@2SMJ(vWE-e}adT`b$= z$PhrA6%^v)8|&BIn8PCcP({>wiu6$t^g&Tax)wc~I9yF14Sc80bCnZ;65l7mfiy|8 zc{NsTKNOdnJlrejn9=hn`0B3l=>l36_ha)fg`x za_i=#XKa2b?p8`s2w~eG#aE4Ylv`Y86ngA z_6;FkwUq8VgN+$Q>&plJq4Nv>gw^eHfWjG>B<1DGtM*&aq$Rj6O-z$#Njep(i-;H*^($eGbcn7Tc%V&`5s@Mt*35kx0SzK6v;RDR6 z!9`q!{|wUsn2%k`I`K~d`Q$n!DB*aLd>|Unl@*%b$N+4$g-OA3qvy3})SNYGjVNmtuZH(EyYcnl6zj zCaZ#Zn5)A6#`#{midA*8=X*ol0S5EtnMuO}1tT;}RT`!5&5rWy(R&6!iPRz`Ca z%_O^R4(QZXQ#Z4|e_NQA3B}n(i>zU2<|nfPJp+!_-1Ejc>y5F}U;-A?gPRSXJ0DPr zVJ>o)w9!Vs;bnP)g2-^Ukn?EA6+I}&GM~6nS{&7N89^ll&x0u2^vvDIfohnFVHx;-YOH6)lmoR1DD<1?>z zx$uIOZB~Lm9Y;T;3wIb&RpWJ9&_+UT&>DO`FnJL3b)3(hscC2=MMWvAsr>_?3EnRl zBPYklV2U4M_)t*d^Ix6sWy>W)2xj-_s2e!)ix)FCl?@d}z>sah^E}cxM@ihrY>?^y z_=R!3wrKPZL3_ZM*#bRH@hH{L!uVv8!LIISysnO16F(Jr-;7ln8`987x+J@cuC))u za?8;hk^2Z67Qb)%D+^+@8eJT-nVngiDnfm5vf?L|3uz)v$oNl3^DnlRHb2TI8M{9}Zv zUVmsMwyR3`wdJGBZS8~#M}b+}xMxjtUU~KJz`eCTS?c)_o$?IT?UVEmr>Lc{@cQ~x z=QgZhYw4U9ySTc7PX?ASWEN0SQB?}GF8(qUI5|0eqPlg&fP)i$0la3i`sn;*&-1v6 z9GjFcIzGPg{k#O&hB^}%An}Ut;d)o-Zitafy?@4!(mY3KzsH^Om{7q}z0}un#9Fo3 zR`{!eX&|m?Ef2!tA}0q~@iMi$UM) zSNsVCwSTf#(qD~d-cqN}PsR%M{CZ`XAqerI|v< z;`y7FKdwc9UbsLkL{;n2LfF7mM#G!%#1$pfJN5^+ZhgAm)5*#2Nf{NUlI50wz(C`J zHd%>UUr$b*;!)$IM3Pu~^H7(&7TkxWDy}T*zD1)`NIaC1S6X|4YE0$t7XqnVHYOq~ zqGP|KUYsYnzPKZ$#K7TvdZ4w!-1XgG1tfX{My4T$A2%eRU2l5Md!GO z@jM7f%HKPfc6{mQRDIZI7-h75JF52|S%pS+d>&I<1l@)g6A3Xf10$nGkuEyxr8{d2 zL}UE@{dswL!5s$s!))lsDCE>~a~VLJ??KQ7GGaw)=B$MKF0~RFD{E_e2M4vb%h=+I zoU%6{$O9Dh>C>k$`2ri2fLUW^#|aV|AVjI7fJ+NSDdm7dpaEwC{xeum;Uv6~DJgaK zYbvU$sygSQ|5>tlA79^kLC-+y$`{B`Tm_QGeQN?$+NV-M4AH1wd6L^YlBDvC{bozY zx|PD;w>9hVSxHHb{s1LXvuxJ2Mfs9Z=VtnK8fo`bo_6*Y_z~i=J2=3m-k3Ycn=u8q zXRH1AcemPjYyqF}eRV9rg{-)uEfHq^q9shxkI0ieVvwZifii2*v5|T%tZ+vsT+|JVUM{(W6lz;+l z>?6B`t`9FIyAibx9wwr<6I+*ek}LSVg((M33^A(Sw%n{T*Q_}kTh+XXjl?r6%zesv z8L^X=lBGU;{$v;qV*N+4pys#_0iK~spK993`CwJ-0%^Fp(>2a}5blA|6dfJiwJy1PR~+J#(-O*@1E+&+-B^M2<_=hX`VHqxoOyP z(^-^Fn~@{&4)>;a-lD3Z1V++%+(G%!GYm0Ys@&|8!~Kyjs>bF<&z-H*^L!;0&XS3{ z>fUM8DKM&jXtAO{Jq#{9#`6!&@RdXa(A21VwhPeOIOvvSXG)lYIZVf7k*xmxHfSDG zX^&6pPI>P?GeDSVw1WNGenTk;v+rAS zVk#lt+izI`NRtc^BuAFrZmG?|vh|5!v5Dzd96kQAVQ#h&CRN`3@}X1lJU!bJ8#9bC znPGg-Eus>Q#f8qrU?;bGaWtGn_In%;DC40R!?HSi+v0f!vY!mE_m~)#*!Jf+{>9^# zBlB(-Q^I0!E&oX__ZI0KftdFdXsX>XES55TH|bfP!V)=%=RxyH4K)3ItiguK4_D{i zR}=M~Lg)AY3%W-ghPGyAYp^r6Ha4baW-xPtyq4hkHpItWk9iG^jQm9*uLsdLM`h*y zR&vh?0anU#n;zqic-O<#QrnxgKy{iTV<3YHo)s&R9hx_qF0bgHv9@adqp#gRfA4rR z2Q@#Y4eFfbb76V+-ihmETFxxApR{(~MWtQ4y9MnTHy76lOV5fOp7`ja&A~7cqoJW1c44(z2WD7Gc-C)QaiznT+^5Q)i&8GajbHVkuUN zbUKnaw?Sw~0BX#_(hdlq&3r1t*KKeDP0ZITT)@+SlH2EHgnq#uiz75 z<*y}6y_gqSh>(jonuF3Ixsd&*mabLh8B>i8VpsKGjnruZ`&G|j)Bb`78Z7RZ~(a9l4Y17 zLLOO>m+Q!CyaXd1SV%T`%-QT1TVIix7c>T`x;VQB^u74=3Q*nU3gQjtny z)sOvxx;!b1UL9~w8}1!zc&kwrWb9x)|?^a(m8Lj-? zTq2^`nrZBceHhOF_OPjKCWaWelKvjrgXaRbk;`?5Hw$`VEC!oX(uxS`uS_B9vt96? z+Z`gpjn7|Jf2pYW{N)*yyjY^$htXS2=U;#SeWX_`f|R6C`cWwH(Yi#8 zs6CIg)RrUJ-heybBi13`UOeuYGTyAm#*BbGO^jK2tms+N=F<0~%lw9ar8W%e5d%u@ z=kAVInN0#47mmc>6=v|P+wEY-s*m1B3p7bcSG!+nu!2KFIlNiXpQ-gzH@VH+Jck}H zXc3?OEMlr!u1-2{eX=FM#cr>dvQoD&*Pn{6Rtx99w1!ZKo$wA^c=&I{l$S#u{IHEC zRinh*lRn8$p!j{=8p6wa3=~h%~>tG>v6B1jhQybsZtb;MsF3# zh!pYW4L-fRCq+_Mn3wem$>WP4J~)MoF)d&yLBjNsj!@6ZT4DRs>ed!SXvOh}^@`s+ zBsIqsI#Jejn0nO6>uz*Blv<|waC3a?#lypr(Pv}htM_7!*^QCkgMVncY5JzWF=y5R zp}UQy8`Rm`A%iK#9@X2^uVJvUu(D3f&BJB*&HxAT?pC7Jw|c`O-q}DpM*MN(o;PZv zM0R^k0;D%4^Y%EDlVxAuGb>vwwPhnNwi|O!Hte#Mk}=XVFtabJHJVwlPSsd^5gA>a zYW=lbz_g!iWBpEeYqi~ql8p^JtH&+A|J4)~p|z{s80{-7QdNU7|25A0|MqiO^>HB(R}_pEQDKUpeY&o z`1k-uf#*_Dp*=mKPe?R^SDT<5F?2m?Ur$AIPC7 zW(Y9#%U-B-O>t%k#8E4NLHXeGKA%h?o0J{bq@isE%zFq6C;q0;M0a${U>}v?962}z zh*>$C3T3Sr1k$0V8Jp@lnHM@1<~AGmoQYFa90$mU?Q^}xa|&pFkDmT1hM4$o!HGDv zJmj7?H1aWk;Eyt6e;F6zpK4|)$zOjdte@`S;ozdX06j~? zgqWl_HhtvD4b4f}awZEB5h@1$tDH7tjhLOJUsJEIsqolO@-Pgsf_bcFQhT1K_}_Of z6GC>pyUJE6{S=IU;o}ESYP@E3DlaO}a~SL*z!kMs*0WWfcj>Hg zu!Q!TGu$zRr_G%hB2gPg@dCu!7MbNSt|E49US_YD0DpxcP%fNQVSna z2G-=}vHX;M7>r)xbG;sL4ux$djJ91KN(B19G=H~I&6qZ8sP$sPaLk;nVw|F= z1Y4~xwh18dR5yX_pSjq_4!DLVC-)(M6dfmHb#=AxCp!hL50g$Hqih0QzM52Gh`IMG zisGSe+0L+oaiq9u9q9hULTWhVI)Pi&GEAUFfXg zKVui-;NhVG%U0V9E+8~g!cVGi-oO>3>sV$&7NpJL`T!w5J~g}~RlMKM!NK9xs{w!M zxQ*JT4@lx9QI$h(RbD5w7Z1zqc?Oi5+>6u?yFzfL=`N=@o{fS39o+eT`>m3?TYT2a zO3~xuwnEd^VgP(s9`d>urdz9P3lDVJ9~pCSC(2%t3;*frOwH=-pKtp31=sr~-|E@; znuUN5HK@MH^NS4bJ4YpU6LhnI`plR21n=c88D%BV=Q9P$Hh$i;{2r}7uFmVSx@076 zg)ek4pbVGS+|GAeAKpekzv1TQhE4LU5CTvzklUE9zxuzETI}(62%GTaU08xHW{q|~^6Q7Kp*C~PWtxD-HUdO<7!Dn2 zZPlvfdHs5$qxIylJH_c1Z~bL;?fjh9{uCzedh&fb`~%&WKlNjtIn1erJ!nllHNT4^aFRN~4uum1{9+I;}N_mb-V&?#2Y0 z=qA3+WOZ4}v$L5EV>!R<7;%Q{KX=ThY)@*3%Sqj66$q?W-tagaZoKy3Q=480=Uh-F zFp}(EDK(Xzz8S~!8%xR5L-#n=wY9r;SxhEZ7s3enl{^`jr%XyO(p;;$K$Huua zx1;^9^fuh>6ThWMLe|bn!$N{1mdHxOE|%!RO&PMBU#C4hY})-zWt7mp+7#B7-~rC~ee>}r+V<36@OYs;d|=%P(yz=KeU z`oq!!0m$_OpL2$6RozkTmH^zd!Vx^yv9;xx*v}b*sMDVV@*BVI;I<^qU@MCTuh0p9 zQ_(<2=*COrbx8lD%~d9t4s^tR9Tczg!~T4KO-{bhcCzboqrBQZt@mhp+dm^PzIW*I z?&yG2uXCyo|&Cl1s%UGG1x`3ccGQmcRKIATPkmeZu+SBjON zBr%;)?*)uI9)_kGDhE#~gb?`k9%*k)mKbrd^_QD$HJ57>jX3mBAMVVz!j+bp480Ht zv<{=-qzYg@ZXtAon|-y%bHOsV6pA~LsDy+f8V2?%JAQdu`w@=3^ znTwxo-WD^-T;Vv?(HT80b)<#{2=6RgcCq)cf^=zK*`bU%DrAGzYNkq04wFt(sfwthj_+jlH z`o*qU(&xynI)}rN-zW1;)mt%|o0)CxX{WJ+%{f!Du2IUW>ZjbDS^_cZDb@2~NXUQB zW`+M+v4gx$hUbB*Cwl4!xQ+^A$*WV}RKn(0t)~Lg^ULGIn}4$L37_s9Uas$+4<2a; zb2@xoqITh#9;&yvig678{2^8=p^dql+-V=D#B^sjP}Onj;&+>>XF6?|`j#g0N~TYCsbA2{25>eyv6xWL32eW@d)x74Ke%$hD zJddcX=E>q4Pxo9Fyu`YFOWWxdIe4~~R@)1K4+_Y^){2#N zoOmzk>WXwTmdn0QyB~KQy7!2Wkzol3Q?21 z;s~Y1{KK>H0kP(`Tag@uJoL^Pkvs=)^P*KXHZynj@_fh9N4;^mOIBw#T{)!tG4+%S zP=qy=TT6>u9j33IDn>qf+M6XOe0;v6YKh!mJZXz?QZH{O-uGX%a-S(@Nq$zfs5754 zoHA|u&k>;}So&`_AbF}GVFLr;!o^2XTeGQBPiSwr8F{n3BP?aIaO<(6%EP#=gSgA; z)_G^RkUrDW+;n#t(tX60d_np=BR7jpUpVYw<8ax_Iq3doBdg5F!~CSeyns*RR>WPe|Rw42V9?Ne*W&J>{+-^3&R~ghjTw9Ar_B)L07mc)|-}*x!>ZRn)AO;%F(1W z9oH_f%dPB9Ty}pUBby8c=pPVFy(zZ8itzNPa%{@ms@;7MFkW57Ia%$od{U01`Vt-6 zw#=e{u`|IXFIs-Q%wW7sEBD3s>S#@oq=s8c(}zgaWtxOx^K#i*`{SYb;4M}OJ<_HF z(&v#)F|r+mrR?~NEp@V=mt||;%CKm=tQoBxl2tjJ+Us=89;kn)JDGX1lKH6r^?$C7 z%U>?Y!{vk7j2UN-;d)|HQuocuWtfVTz-3IhPo)d@ZqjLg$)<*MFQ4tk)yv@Gcs-hX z^wjWauy}JBle}iG#gKj+`MV?%AzxPNvgVzdrulAaL&jPnla)$`(@+~h(y($K2OJB* z<3E9MDV2-1+HzeXOx<#~Bi+uPXwRd+Yp=sFY-K*Q9Eo}RIVG{8gHXClWBh7cIa;xt zg_FaDTVeV)ZLy5I!FzgEdoDt=M^o-wa|aBO->di=18rMxI!?Xr%F^91ga4mHrzDxP z-~6)*ksa%%O27!M;}dC}!9t=hE)g%~bYAQXDz|f5WW>s|y$pGoGG_S0kwf&OB9R5T z7-qMITdwW=rSOlt2)?1opPU|o<@~A)%TU9s)d8;DQx3BuSkX$}1QK#&k0w0MssmDU zVr?|d%3t5+^`w2vyuiKX+Av_+cG4E}yM}@~LpFKqe9qI7cl*oSK1CRLy|u31v#9~z zk)A2f&5>a5st@O;O7E*8IrJi0!nnq>!QOwDu{(# zvn02(%%Mx!L8V4=i^k8n__l#<(s{l}nGEv*`pos0yQluKX_Mb+{@vzz6=dQ_Yx%~o zzoE>{H2>|NrO1A7wOk$&?PT(;sfzNqe-F$jGWZ0NC|>-0Qq3=9v-^!kZTU8r$1-yI zB)I-K7;-|#{~&L9d0KFFYNmZQh6O4;&&pj|F*-ZNWi>5;%qLMWzIwCD46ZxZ9}N~L zO^MTq{En_sWc(O2@pJBwDYSNL+b`i}*-8wh0V5Z3Y5S(QRNfY0&FSVW7jlcTOx(iO zWcB+vxmNwrB?C=(7Jhy?j`?4zURMa2|3N92S}@O#v6#q%aP#+#ZlhY=3Km~vP=fb z!T#poD~*yZh`zTkZ=>lCmh$sh#`7)t#WYJbuSj)-IACwtIiV6`d(8eGL~D6Q7TzR# zRS9|YtpgWNmxYQq47bz87>jND>!1%qp`H}k?i_jt?pfu?u~3w3Y|;deM*m+_y@gxU z%^SG8bmIali-0WM-GY>ew1jl0bho5*cS%Wi!_wU$NH@HIfV6}lAaKU-IlptAbMX)C zHOyz`nJ4bs(xPky1Hxv&k(gPoCU>!&8sfIW>$7wD#rE#JJUoV1Co`ZVuO#nacGOH+ zoq;ylI0c&5>=UIjgYb6!mSSm>VChJWb+bVs_}hyz zqmGrkk)z{F=7!JYw)^V`ym2G3G=eYMnTqtguX`{l5&F#Z=7T1-_tdB49lyVy+IHMe z%@yuz>U7y=EU;&pCK0aaetDtQbnP5osytTb`*)k-amV0+RsvImY!LSM_PVLq@82=VS3r*I_Wu@UDrKx!C3YJ*?L+Zvg}l6xJGVd8Bfn|SMK;T zJ+}*uMSO`)jLzr_%kkxDA)@Ra)P%J?U~)GLEY&>3`eC{{qjV*b^{B^)4po>QApZ zr&&gbt%WdqGm2|{esMl)2fn?b;R-p~kX8{V`1%+#xEigTH*UXSywu9h2y6O{li+=m zrSY7eZD1J#cg^D9rM|*Ax(Vx$!Ch)=3R{P+-I132$+sN$si5K!R$Sc zk!KM?-c#C)IdY23Cx(22tkMys)>YEhj;=3_VwQ`xuz%%kVexVpN;R(5`tpai{Fn`^ zXcdUr@Y*xM{Tiou(8vXG_Ci@X@jB1(`|JHG%XcfB{y!o>#qja*0TVR)M5=1Pe{J^R zUMx<-o|h;O)ZtvTzX(fKCnoE;U7a@7a=XoAU6|}V!JeIK#2d!vFD%d=Urw2-_v~UA z1%U{6Lj(V*rC5KId=k!Zd!|N)Y66mtF-Zv@^W& z5jS4ZF8pzhPGZuJNclK)_(CY$_MJ{^>c^@=BJMR(yR6Pj{WlA7TbC~O%k^BMg$uHx zw^Om57g?uZ7NmKMINV`{kWaUx~+AC-;u@P2$>g`IukY$bqfaB3gPEsm;}Ja5+pe zx3B+&EdImZ_#Ag$g}%`J7@{XDZ!1nuWaT>y-k~k4U{I^jksvp!C`#Wp?mbFkHNqNI z+9OpNch%n}s1I2gXH(=dK1>#7AMNotJR1IV{AOj6?7sHM!FKsk+W6M$x^?YhBC;JG zlkJ<|S@^N96T`rFzY7ec+pf2Rmo*O@yvBZE*{rv>6c_J3dHfk0Z;PxnN*0z1+j<+C zx`;T!o{g{+Px91y+YW(Lz7c{-*!j_P2n;ar{7ayiE`i#~{=o+k?Q3A%<*cD|~uR z$JWwLX+X1!H5*>ndVjLvb^5D5VurQ6%1?UYVPExqH(o^OSYj4dck{LY^{?!5PpYBnc^6gN4S4iWIBhWR+L(2HDOYpC4|Y zt5$RQgE-&3x?N|qs@aENg-e6DDs<3`vJtHu zj`5u4F9yF~-NT$uyRIZoL)K2o??;xi+(*iA9CaI$CM(%I-~7%i;Bl?)@ZPG?XUzzi zZ}fF{-asGwzB@Ewr2pO8tV4aIn#HA}Yv)V|(fV&wi2^2uu~YZ{l>-@t%>gf7^j?d! zbyq>Fr#@!CHaM$Naz_;18{E5M_`q& z1`Q&q9Mkk92|GQyNpyW-0V4<31pM*)ya3Z#|Hk7l6l1jfIg?Z~58h!yoXO~)6D7u9 zH4a=74rY!KYr$Suw%*6@zSLLgjn0}$RpgL8{PL+imjPbWuw0t|Sa*8yUfK8}Av3di z>vu3iVNq`J^P;Nu>s#BLI~9TTGV8hE@G-nBl)AoXPW`sSs?xFI7oX-2lDXJ1@lz*> zDunKC--p{G@NJx$?@6y-mn@Wlqi=?ZJ6>9H!Bs0|Go-H%Pcoq(r|U2Fj+&$`sEw6q zZ43X7QZ}~Egfj)CRcb(oRILt^%eKzQh*rlz$=6>=#Z$G+B;lf(lr%l0v%p$_f ze%mY?Fz*EfSkAJHIe7M^|G>>pBBmW&{B`o_oH;Uu^89n0mOjg#fg=50YY4(jHM|mo zBIUzJhV?I*E#~PVV-)MI8>v;E^knkodxZf>tzdq@aYo_3e!U}0xraA@UC}kb z^_z(OKGv|oacvy~w}a1lC+WxmpwP|}--|GgajjmG_(PXL-~UwpJJzX40`r7auJ2=> zicqyCgE(@?*V_ZsrCI^EWrGcEY5Ka6rCWqA2rd-lukG6I|FS=7&~dJ{xMi#mckVcM z=}5D;-BUs=PG0DK$&iT*(hKWyjzxOeDjJY2FpC!05FU{b#0y zohHZq`wQChHuMOjD8crgY}Px1-tA(8a_jxGw=Y7jh5ZTW5Ll3bRV&IiGTVdEDwg9< zf2<*f7RmjWuwHM#&wSSE*iB#nW<_cqFPP}h?yc~FO zy8Q^4gTJTwyjVRH%9_J4%j6oJRitirqD5?bkSXBK(k9$>y}7}@H}lc&rkeCx^rypJ z95b25No&f*Umfl;m)TO9Xl_x ziBtBf?+#x?q|XL#hkly3J>6(8w%=x3L8R`{KMU1y^@MzNb{JdjPY${2T(#ojV^RA^}EW}ngj zKS}B$dbczQqvuxakwl5XmpEP#i><$n+z~4jF^$yYGz0s1L#(P@P6xkp*RELb54|PT#jd^daCa@=DE1N+z!s~x;6K1_3%?;Isb?? z#+{)a3W|>xJ~tr`j8c9Nw|dbCg4Zz$MO}*ABuT1!kRObYE!=Wz>zRc~X}X=~Nr&6& zgz(R2lZmbf*YI+>w{-gW6Vs|zS1q|dsf|j$8Ci-~eVuXDeDAuq@mC|2oh+s)6{kFS zu7C6|&F-JU_1|Nv8i&j1s{vl2{Ow$#`mE*>3a`V6tb^6i#aL!aQqV#%YQj8TI_BA~ zh+);@hCu7_3?bTRD3PxCPGt09bzA4JUO%Yt@w%Q#7RE`Xwe19Kpo#6p-g`e1KR}_a zZYO`X`U`E{U$aHXI+-7J^gRlDANmmOZP@K^2ymV&)@ojQ2>$}uQ7A}#7Sq6RAAW_3 zHh2=l|4S2(#@;nEo`34sp*51xsN(cDihdPdrg(MQ9$$3E-E|qV9sQbAcHi`s;0#~$ z@6m7r=-8HrNWJjKgGQWFvX{#U(fanEm#Dfg{VG*-Gdt&3JLb9YB%}+Ibkds1?2oaA zw8`v5d;k2cO_czdNe)>?5Xe$yT?TKHu@~*q-}0@gvlT?9n-%j*hTVfC29BMi@G1k$ z1oW9fF(6^fxRl*wCb;Fk=2n>pZ^bWzC=c&O3f)%&`6^jaJ7>Q&v=;z|G zr|IPJOkXrNKCqfB>Oc`X883R?C>y{1M+`2;H~{N=*AIJx*<%m;UrhIWtd5~jS}9#w z(%)){hJ$IijD3E+-TWOTZzxAmP{WhcT~9~fOBc?>qYbya!9W9n`-6J?*se}nu_QG= znhC7w;cx>GW}93c>=%Yd&KXywDLA%6x?!}LaN3JK+R#)@I{J~6DiqqJ#r|m|7%l1< z7m8FP*)PR_^nhD)_pcMgmj9szXqs0h5u-k=9!~0nAg(VAs*}(63-@cehfL=@4|6xl zQ=IDa_rA1-&P2{2%oOznYFl~g?@#FWs`W~KaHoMF@&U2`+bmE+imga#g;=smOJ|?=yYINF(;=oZLJ+-5oYIL6WQ9LL? zQJZUjIplNT=IgR?O9i}$B7nA!vrra5wqVp@sg+g%spOhU5a*<27)bh$Ybz`1mWf)i zMC*Wc(mEenW>KY22@uRyVH%AQtEkMBc_oY_CC%8@&c$zM@k~EKA%A(Xl^>24BdP0x8@0&J$OHPL9u&lgT^=%uY5V<+$Zj?oG&OA7`Og83hJHnDG3;uj` zIb0SA6%ypu-k8tP%8YTx^X$V*_WqLk!-{gP>v-bme3g4r*m=da3BaKE?;}9%;;4V* z8oE{UlY>d?9fx9r6Kj)=PJUE^gLCzf1AA1KrGdMg)s+=x7Hrk^6eNk)0xZV9RKE0+ zcD>mU{Y$OvCa~IB^}B6GPBnVXn!Wu-RX+(;8JvKZ+HV~_IM@win9WjNM<0Wl6Ey_= zYgx?T=CR3XhxWp%iH=lFr`f?4RuJw=-PSQmh8X3_`El8TJSlG>8W| zcX2D37|Lcysrv0mmuq=EEiJ7Y8twaTJ908wyqGi>BpGaf>LzMuo(1Ra|IjVzwA`A$ zyY|_CPl7U-ZW1WLu0!Qry9guVT#%6ZziHW)pGL( %3#u; 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%0Ae#8*dBf$M^&J9 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

EDW#gQE-IjBl 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 H&W!voa0MPV literal 0 HcmV?d00001 diff --git a/dev/tutorials/geo_and_meshes/7ea2bf1b.png b/dev/tutorials/geo_and_meshes/7ea2bf1b.png new file mode 100644 index 0000000000000000000000000000000000000000..e66c9fdabed388d2078e8acedd12d2aa3c29f28e GIT binary patch literal 193244 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

}TM5rK5gjnx$P5FqMb)J}l?ZUyKrL-N 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 diff --git a/dev/tutorials/geo_and_meshes/ac8457bc.png b/dev/tutorials/geo_and_meshes/ac8457bc.png new file mode 100644 index 0000000000000000000000000000000000000000..2cce00ad42da4babe89f16d9d8cbb91c848f4cef GIT binary patch literal 21318 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 literal 0 HcmV?d00001 diff --git a/dev/tutorials/geo_and_meshes/index.html b/dev/tutorials/geo_and_meshes/index.html index 61810ef1..66180b50 100644 --- a/dev/tutorials/geo_and_meshes/index.html +++ b/dev/tutorials/geo_and_meshes/index.html @@ -3,14 +3,14 @@ using Gmsh filename = joinpath(Inti.PROJECT_ROOT,"docs", "assets", "piece.msh") msh = Inti.import_mesh(filename)

    Inti.Mesh{3, Float64} containing:
    -	 126 elements of type StaticArraysCore.SVector{3, Float64}
    -	 14035 elements of type Inti.LagrangeElement{Inti.ReferenceSimplex{3}, 4, StaticArraysCore.SVector{3, Float64}}
     	 7156 elements of type Inti.LagrangeElement{Inti.ReferenceSimplex{2}, 3, StaticArraysCore.SVector{3, Float64}}
    -	 852 elements of type Inti.LagrangeElement{Inti.ReferenceHyperCube{1}, 2, StaticArraysCore.SVector{3, Float64}}

    The imported mesh contains elements of several types, used to represent the segments, triangles, and tetras used to approximate the geometry:

    Inti.element_types(msh)
    KeySet for a Dict{DataType, Matrix{Int64}} with 4 entries. Keys:
    -  StaticArraysCore.SVector{3, Float64}
    -  Inti.LagrangeElement{Inti.ReferenceSimplex{3}, 4, StaticArraysCore.SVector{3,…
    +	 126 elements of type StaticArraysCore.SVector{3, Float64}
    +	 852 elements of type Inti.LagrangeElement{Inti.ReferenceHyperCube{1}, 2, StaticArraysCore.SVector{3, Float64}}
    +	 14035 elements of type Inti.LagrangeElement{Inti.ReferenceSimplex{3}, 4, StaticArraysCore.SVector{3, Float64}}

    The imported mesh contains elements of several types, used to represent the segments, triangles, and tetras used to approximate the geometry:

    Inti.element_types(msh)
    KeySet for a Dict{DataType, Matrix{Int64}} with 4 entries. Keys:
       Inti.LagrangeElement{Inti.ReferenceSimplex{2}, 3, StaticArraysCore.SVector{3,…
    -  Inti.LagrangeElement{Inti.ReferenceHyperCube{1}, 2, StaticArraysCore.SVector{…

    Note that the msh object contains all entities used to construct the mesh, usually defined in a .geo file, which can be extracted using the entities:

    ents = Inti.entities(msh)

    Filtering of entities satisfying a certain condition, e.g., entities of a given dimension or containing a certain label, can also be performed in order to construct a domain:

    filter = e -> Inti.geometric_dimension(e) == 3
    +  StaticArraysCore.SVector{3, Float64}
    +  Inti.LagrangeElement{Inti.ReferenceHyperCube{1}, 2, StaticArraysCore.SVector{…
    +  Inti.LagrangeElement{Inti.ReferenceSimplex{3}, 4, StaticArraysCore.SVector{3,…

    Note that the msh object contains all entities used to construct the mesh, usually defined in a .geo file, which can be extracted using the entities:

    ents = Inti.entities(msh)

    Filtering of entities satisfying a certain condition, e.g., entities of a given dimension or containing a certain label, can also be performed in order to construct a domain:

    filter = e -> Inti.geometric_dimension(e) == 3
     Ω = Inti.Domain(filter, ents)
    Domain with 4 entities
      EntityKey: (3, 3) => Inti.GeometricEntity with labels String[]
      EntityKey: (3, 6) => Inti.GeometricEntity with labels String[]
    @@ -30,7 +30,7 @@
      EntityKey: (1, 201) => Inti.GeometricEntity with labels ["l₃"]
      EntityKey: (1, 202) => Inti.GeometricEntity with labels ["l₄"]
      EntityKey: (1, 199) => Inti.GeometricEntity with labels ["l₁"]
    - EntityKey: (1, 200) => Inti.GeometricEntity with labels ["l₂"]

    Domains for which a parametric representation is available can be passed to the meshgen function:

    msh = Inti.meshgen(Γ; meshsize = 0.05)

    We can use the Meshes.viz function to visualize the mesh, and use domains to index the mesh:

    Γ₁ = l1 ∪ l3
    + EntityKey: (1, 200) => Inti.GeometricEntity with labels ["l₂"]

    Domains for which a parametric representation is available can be passed to the meshgen function:

    msh = Inti.meshgen(Γ; meshsize = 0.05)

    We can use the Meshes.viz function to visualize the mesh, and use domains to index the mesh:

    Γ₁ = l1 ∪ l3
     Γ₂ = l2 ∪ l4
     fig, ax, pl = viz(view(msh, Γ₁); segmentsize = 4,  label = "Γ₁")
     viz!(view(msh, Γ₂); segmentsize = 4, color = :red, label = "Γ₂")
    Example block output

    Note that the orientation of the curve determines the direction of the normal vector. The normal points to the right of the curve when moving in the direction of increasing parameter t:

    pts, tangents, normals = Makie.Point2f[], Makie.Vec2f[], Makie.Vec2f[]
    @@ -62,19 +62,19 @@
           ax = Axis3(fig[i,j]; aspect = :data, title = shape)
           hidedecorations!(ax)
           viz!(msh; showsegments = true)
    -end
    Example block output

    See GeometricEntity(shape::String) for a list of predefined geometries.

    Mesh quality

    The quality of the generated mesh created through meshgen depends heavily on the quality of the underlying parametrization. For surfaces containing a degenerate parametrization, or for complex shapes, one is better off using a suitable CAD (Computer-Aided Design) software in conjunction with a mesh generator.

    Transfinite domains

    It is possible to combine parametric curves/surfaces to form a transfinite domain where the parametrization is inherited from the curves/surfaces that form its boundary. At present, Inti.jl only supports transfinite squares, which are defined by four parametric curves:

    l1 = Inti.parametric_curve(x->SVector(x, 0.1 * sin(2π * x)), 0.0, 1.0, labels = ["l₁"])
    +end
    Example block output

    See GeometricEntity(shape::String) for a list of predefined geometries.

    Mesh quality

    The quality of the generated mesh created through meshgen depends heavily on the quality of the underlying parametrization. For surfaces containing a degenerate parametrization, or for complex shapes, one is better off using a suitable CAD (Computer-Aided Design) software in conjunction with a mesh generator.

    Transfinite domains

    It is possible to combine parametric curves/surfaces to form a transfinite domain where the parametrization is inherited from the curves/surfaces that form its boundary. At present, Inti.jl only supports transfinite squares, which are defined by four parametric curves:

    l1 = Inti.parametric_curve(x->SVector(x, 0.1 * sin(2π * x)), 0.0, 1.0, labels = ["l₁"])
     l2 = Inti.parametric_curve(x->SVector(1 + 0.1 * sin(2π * x), x), 0.0, 1.0, labels = ["l₂"])
     l3 = Inti.parametric_curve(x->SVector(1 - x, 1 - 0.1 * sin(2π * x)), 0.0, 1.0, labels = ["l₃"])
     l4 = Inti.parametric_curve(x->SVector(0.1 * sin(2π * x), 1 - x), 0.0, 1.0, labels = ["l₄"])
     surf = Inti.transfinite_square(l1, l2, l3, l4; labels = ["Ω"])
     Ω = Inti.Domain(surf)
     msh = Inti.meshgen(Ω; meshsize = 0.05)
    -viz(msh; showsegments = true)
    Example block output

    Note that the msh object contains all entities used to construct Ω, including the boundary segments:

    Inti.entities(msh)
    KeySet for a Dict{Inti.EntityKey, Dict{DataType, Vector{Int64}}} with 5 entries. Keys:
    +viz(msh; showsegments = true)
    Example block output

    Note that the msh object contains all entities used to construct Ω, including the boundary segments:

    Inti.entities(msh)
    KeySet for a Dict{Inti.EntityKey, Dict{DataType, Vector{Int64}}} with 5 entries. Keys:
       EntityKey: (1, 309) => Inti.GeometricEntity with labels ["l₃"]
       EntityKey: (1, 308) => Inti.GeometricEntity with labels ["l₂"]
       EntityKey: (1, 310) => Inti.GeometricEntity with labels ["l₄"]
       EntityKey: (1, 307) => Inti.GeometricEntity with labels ["l₁"]
    -  EntityKey: (2, 102) => Inti.GeometricEntity with labels ["Ω"]

    This allows us to probe the msh object to extract e.g. the boundary mesh:

    viz(msh[Inti.boundary(Ω)]; color = :red)
    Example block output
    Limitations

    At present only the transfinite interpolation for the logically quadrilateral domains is supported. In the future we hope to add support for three-dimensional transfinite interpolation, as well as transfinite formulas for simplices.

    Elements of a mesh

    To iterate over the elements of a mesh, use the elements function:

    filename = joinpath(Inti.PROJECT_ROOT,"docs", "assets", "piece.msh")
    +  EntityKey: (2, 102) => Inti.GeometricEntity with labels ["Ω"]

    This allows us to probe the msh object to extract e.g. the boundary mesh:

    viz(msh[Inti.boundary(Ω)]; color = :red)
    Example block output
    Limitations

    At present only the transfinite interpolation for the logically quadrilateral domains is supported. In the future we hope to add support for three-dimensional transfinite interpolation, as well as transfinite formulas for simplices.

    Elements of a mesh

    To iterate over the elements of a mesh, use the elements function:

    filename = joinpath(Inti.PROJECT_ROOT,"docs", "assets", "piece.msh")
     msh = Inti.import_mesh(filename)
     ents = Inti.entities(msh)
     Ω = Inti.Domain(e -> Inti.geometric_dimension(e) == 3, ents)
    @@ -87,4 +87,4 @@
     el(x̂)
    3-element StaticArraysCore.SVector{3, Float64} with indices SOneTo(3):
       0.18054505519780645
      -0.14630186206938434
    -  0.09955887205829847

    Likewise, we can compute the jacobian of the element, or its normal at a given parametric coordinate.

    + 0.09955887205829847

    Likewise, we can compute the jacobian of the element, or its normal at a given parametric coordinate.

    diff --git a/dev/tutorials/getting_started/index.html b/dev/tutorials/getting_started/index.html index 5c52d4c1..b18dadba 100644 --- a/dev/tutorials/getting_started/index.html +++ b/dev/tutorials/getting_started/index.html @@ -19,13 +19,13 @@ EntityKey: (1, 473) => Inti.GeometricEntity with labels ["circle"] EntityKey: (1, 472) => Inti.GeometricEntity with labels ["kite"]

    Inti.jl expects the parametrization of the curve to be a function mapping scalars to points in space represented by SVectors. The labels argument is optional, and can be used to identify the different parts of the boundary. The Domain object Γ represents the boundary of the geometry, and can be used to create a mesh:

    # Create a mesh for the geometry
     msh = Inti.meshgen(Γ; meshsize = 2π / k / 10)
    Inti.Mesh{2, Float64} containing:
    -	 63 elements of type Inti.ParametricElement{Inti.ReferenceHyperCube{1}, StaticArraysCore.SVector{2, Float64}, Inti.var"#48#49"{Inti.var"#120#122"{Main.var"#3#4"}, Inti.HyperRectangle{1, Float64}}}
    -	 94 elements of type Inti.ParametricElement{Inti.ReferenceHyperCube{1}, StaticArraysCore.SVector{2, Float64}, Inti.var"#48#49"{Inti.var"#120#122"{Main.var"#1#2"}, Inti.HyperRectangle{1, Float64}}}

    To visualize the mesh, we can load Meshes.jl and one of Makie's backends:

    using Meshes, GLMakie
    +	 94 elements of type Inti.ParametricElement{Inti.ReferenceHyperCube{1}, StaticArraysCore.SVector{2, Float64}, Inti.var"#48#49"{Inti.var"#120#122"{Main.var"#1#2"}, Inti.HyperRectangle{1, Float64}}}
    +	 63 elements of type Inti.ParametricElement{Inti.ReferenceHyperCube{1}, StaticArraysCore.SVector{2, Float64}, Inti.var"#48#49"{Inti.var"#120#122"{Main.var"#3#4"}, Inti.HyperRectangle{1, Float64}}}

    To visualize the mesh, we can load Meshes.jl and one of Makie's backends:

    using Meshes, GLMakie
     viz(msh; segmentsize = 3, axis = (aspect = DataAspect(), ), figure = (; size = (400,300)))
    Example block output

    Quadrature

    Once the mesh is created, we can define a quadrature to be used in the discretization of the integral operators:

    # Create a quadrature
     Q = Inti.Quadrature(msh; qorder = 5)

    A Quadrature is simply a collection of QuadratureNode objects:

    Q[1]
    Quadrature node:
    --- coords: [0.9999985564254644, 0.0016991606713842712]
    --- normal: [0.9999985564254645, 0.0016991606713842712]
    --- weight: 0.005917215762519871

    In the constructor above we specified a quadrature order of 5, and Inti.jl internally picked a ReferenceQuadrature suitable for the specified order; for finer control, a quadrature rule can be specified directly.

    Integral operators

    To continue, we need to reformulate the Helmholtz problem as a boundary integral equation. Among the plethora of options, we will use in this tutorial a simple direct formulation, which uses Green's third identity to relate the values of $u$ and $\partial_{\nu} u$ on $\Gamma$:

    \[ -\frac{u(\boldsymbol{x})}{2} + D[u](\boldsymbol{x}) = S[\partial_\nu u](\boldsymbol{x}), \quad \boldsymbol{x} \in \Gamma.\]

    Here $S$ and $D$ are the single- and double-layer operators, formally defined as:

    \[ S[\sigma](\boldsymbol{x}) = \int_\Gamma G(\boldsymbol{x}, \boldsymbol{y}) \sigma(\boldsymbol{y}) \ \mathrm{d}s(\boldsymbol{y}), \quad +-- coords: [3.4999976656441496, 0.0017081992128157699] +-- normal: [0.9999962650505546, 0.002733109024732988] +-- weight: 0.005948708675251202

    In the constructor above we specified a quadrature order of 5, and Inti.jl internally picked a ReferenceQuadrature suitable for the specified order; for finer control, a quadrature rule can be specified directly.

    Integral operators

    To continue, we need to reformulate the Helmholtz problem as a boundary integral equation. Among the plethora of options, we will use in this tutorial a simple direct formulation, which uses Green's third identity to relate the values of $u$ and $\partial_{\nu} u$ on $\Gamma$:

    \[ -\frac{u(\boldsymbol{x})}{2} + D[u](\boldsymbol{x}) = S[\partial_\nu u](\boldsymbol{x}), \quad \boldsymbol{x} \in \Gamma.\]

    Here $S$ and $D$ are the single- and double-layer operators, formally defined as:

    \[ S[\sigma](\boldsymbol{x}) = \int_\Gamma G(\boldsymbol{x}, \boldsymbol{y}) \sigma(\boldsymbol{y}) \ \mathrm{d}s(\boldsymbol{y}), \quad D[\sigma](\boldsymbol{x}) = \int_\Gamma \frac{\partial G}{\partial \nu_{\boldsymbol{y}}}(\boldsymbol{x}, \boldsymbol{y}) \sigma(\boldsymbol{y}) \ \mathrm{d}s(\boldsymbol{y}),\]

    where

    \[G(\boldsymbol{x}, \boldsymbol{y}) = \frac{i}{4} H^{(1)}_0(k|\boldsymbol{x} - \boldsymbol{y}|)\]

    is the fundamental solution of the Helmholtz equation, with $H^{(1)}_0$ being the Hankel function of the first kind. Note that $G$ is singular when $\boldsymbol{x} = \boldsymbol{y}$, and therefore the numerical discretization of $S$ and $D$ requires special care.

    To approximate $S$ and $D$, we can proceed as follows:

    S, D = Inti.single_double_layer(;
         op,
    @@ -72,4 +72,4 @@
     uₛ = x -> 𝒟[u](x) - 𝒮[g](x)
     pts = [5*SVector(cos(θ), sin(θ)) for θ in range(0, 2π, length = 100)]
     er = norm(uₛ.(pts) - uₑ.(pts), Inf)
    -println("maximum error on circle of radius 5: $er")
    maximum error on circle of radius 5: 4.8614979179442054e-11
    +println("maximum error on circle of radius 5: $er")
    maximum error on circle of radius 5: 5.3953161277429586e-11
    diff --git a/dev/tutorials/integral_operators/index.html b/dev/tutorials/integral_operators/index.html index d47fd625..5c8cc955 100644 --- a/dev/tutorials/integral_operators/index.html +++ b/dev/tutorials/integral_operators/index.html @@ -156,4 +156,4 @@ max number of elements per leaf: 2468041 depth of tree: 0 compression ratio: 15.270194 -

    All of these should give an identical matrix-vector product, but the latter two allow e.g. for the use of direct solvers though an LU factorization.

    Limitations

    Integral operators defined from custom kernel functions do not support all the features of the predefined ones. In particular, some singular integration methods (e.g. the Density Interpolation Method) and acceleration routines (e.g. Fast Multipole Method) used to correct for singular and nearly singular integral operators, and to accelerate the matrix vector products, are only available for specific kernels. Check the corrections and compression for more details concerning which methods are compatible with custom kernels.

    +

    All of these should give an identical matrix-vector product, but the latter two allow e.g. for the use of direct solvers though an LU factorization.

    Limitations

    Integral operators defined from custom kernel functions do not support all the features of the predefined ones. In particular, some singular integration methods (e.g. the Density Interpolation Method) and acceleration routines (e.g. Fast Multipole Method) used to correct for singular and nearly singular integral operators, and to accelerate the matrix vector products, are only available for specific kernels. Check the corrections and compression for more details concerning which methods are compatible with custom kernels.

    diff --git a/dev/tutorials/layer_potentials/86493074.png b/dev/tutorials/layer_potentials/86493074.png deleted file mode 100644 index c5ca4e33b8763d8c6b42715a9853c1b1af70fa7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108695 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 qvt9jvE2RJbGUcCI|Nmx)J#KH2GsRxD>nq diff --git a/dev/tutorials/layer_potentials/a9b241ca.png b/dev/tutorials/layer_potentials/a9b241ca.png deleted file mode 100644 index 36a0dafe2a0eaf2c2a22d8670134658da0a5e954..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78482 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 EKY8KlssI20 diff --git a/dev/tutorials/layer_potentials/bfc06597.png b/dev/tutorials/layer_potentials/bfc06597.png new file mode 100644 index 0000000000000000000000000000000000000000..cf3f18f9b68e82e3632eb541b4b351a102b22988 GIT binary patch literal 77543 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 H*Z*%ay9zToR02> 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 diff --git a/dev/tutorials/layer_potentials/dd8ae9ff.png b/dev/tutorials/layer_potentials/dd8ae9ff.png new file mode 100644 index 0000000000000000000000000000000000000000..28e346327ee3d3dcfef8284b863195bd48d7158f GIT binary patch literal 82679 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 literal 0 HcmV?d00001 diff --git a/dev/tutorials/layer_potentials/ece240d1.png b/dev/tutorials/layer_potentials/ece240d1.png new file mode 100644 index 0000000000000000000000000000000000000000..73b8e226243da4af6435166659df12c702be2c55 GIT binary patch literal 106515 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