Skip to content

ioannisPApapadopoulos/RadialPiecewisePolynomials.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RadialPiecewisePolynomials.jl

CI codecov.io

A Julia package for a hierarchical hp-finite element basis on disk and annuli. The mesh is an innermost disk (omitted if the domain is an annulus) and concentric annuli. The basis consists of Zernike (annular) polynomials modified into hat (external shape) and bubble (internal shape) functions.

This package utilizes AnnuliOrthogonalPolynomials.jl and SemiclassicalOrthogonalPolynomials.jl for the construction of the FEM basis.

See the examples/ folder for examples. Some basic usage:

julia> using RadialPiecewisePolynomials

julia> s = 0.5^(-1/3); points = [0; reverse([s^(-j) for j in 0:3])]
5-element Vector{Float64}:
 0.0
 0.49999999999999994
 0.6299605249474365
 0.7937005259840997
 1.0

julia> Φ = ContinuousZernike(10, points); # H¹ conforming disk FEM basis up to degree 10
ContinuousZernike at degree N=10 and endpoints [0.0, 0.49999999999999994, 0.6299605249474365, 0.7937005259840997, 1.0].

julia> Ψ = ZernikeBasis(10, points, 0, 0); # L² conforming disk FEM basis up to degree 10

julia> f = Ψ \ (xy -> sin(first(xy))+last(xy)).(xy); # Expand sin(x+y)

julia> M = Φ' * Φ; # mass matrix

julia> D = Derivative(axes(Φ,1)); A = (D*Φ)' * (D*Φ); # stiffness matrix

julia> b =' * Ψ) .* f; # load vector

julia> u = Matrix.(A .+ M) .\ b; # Solve (-Δ + I)u = f with zero Nuemann bcs