Boundary Conditions
This section describes the user facing API for boundary conditions along with the implementation details.
DirichletBC
We can set up dirichlet boundary conditions on a variable u
and sideset sset_1
with a zero function as follows.
julia> using FiniteElementContainers
julia> bc_func(x, t) = 0.
bc_func (generic function with 1 method)
julia> bc = DirichletBC(:u, :sset_1, bc_func)
DirichletBC{typeof(Main.bc_func)}(Main.bc_func, :sset_1, :u)
Internally this is eventually converted in a DirichletBCContainer
API
FiniteElementContainers.DirichletBC
— Typestruct DirichletBC{F} <: FiniteElementContainers.AbstractBC{F}
func::Any
sset_name::Symbol
var_name::Symbol
User facing API to define a DirichletBC
`.
FiniteElementContainers.DirichletBC
— Methodstruct DirichletBC{F} <: FiniteElementContainers.AbstractBC{F}
DirichletBC(
var_name::String,
sset_name::String,
func::Function
) -> DirichletBC{<:Function}
func::Any
sset_name::Symbol
var_name::Symbol
FiniteElementContainers.DirichletBC
— Methodstruct DirichletBC{F} <: FiniteElementContainers.AbstractBC{F}
DirichletBC(
var_name::Symbol,
sset_name::Symbol,
func::Function
) -> DirichletBC{<:Function}
func::Any
sset_name::Symbol
var_name::Symbol
FiniteElementContainers.DirichletBCContainer
— Typestruct DirichletBCContainer{B, T, V} <: FiniteElementContainers.AbstractBCContainer{B, T, 1, V}
bookkeeping::Any
vals::Any
Internal implementation of dirichlet BCs
FiniteElementContainers.DirichletBCContainer
— Methodstruct DirichletBCContainer{B, T, V} <: FiniteElementContainers.AbstractBCContainer{B, T, 1, V}
DirichletBCContainer(
dof::DofManager,
dbc::DirichletBC
) -> FiniteElementContainers.DirichletBCContainer{FiniteElementContainers.BCBookKeeping{_A, Vector{Int64}}, Float64, Vector{Float64}} where _A<:(AbstractMatrix{<:Integer})
bookkeeping::Any
vals::Any
FiniteElementContainers._update_bc_values!
— Method_update_bc_values!(
bc::FiniteElementContainers.DirichletBCContainer,
func,
X,
t,
backend::KernelAbstractions.Backend
)
GPU kernel wrapper for updating bc values based on the stored function
FiniteElementContainers._update_bc_values!
— Method_update_bc_values!(
bc::FiniteElementContainers.DirichletBCContainer,
func,
X,
t,
_::KernelAbstractions.CPU
)
CPU implementation for updating stored bc values based on the stored function
FiniteElementContainers.NeumannBC
— Typestruct NeumannBC{F} <: FiniteElementContainers.AbstractBC{F}
func::Any
sset_name::Symbol
var_name::Symbol
User facing API to define a NeumannBC
`.
FiniteElementContainers.NeumannBC
— Methodstruct NeumannBC{F} <: FiniteElementContainers.AbstractBC{F}
NeumannBC(
var_name::String,
sset_name::Symbol,
func::Function
)
func::Any
sset_name::Symbol
var_name::Symbol
FiniteElementContainers.NeumannBC
— Methodstruct NeumannBC{F} <: FiniteElementContainers.AbstractBC{F}
NeumannBC(
var_name::Symbol,
sset_name::Symbol,
func::Function
) -> NeumannBC{<:Function}
func::Any
sset_name::Symbol
var_name::Symbol
FiniteElementContainers.NeumannBCContainer
— Typestruct NeumannBCContainer{B, C1, C2, R, T, V} <: FiniteElementContainers.AbstractBCContainer{B, T, 2, V}
bookkeeping::Any
element_conns::Any
surface_conns::Any
ref_fe::Any
vals::Any
Internal implementation of dirichlet BCs
Boundary Condition Implementation Details
FiniteElementContainers.AbstractBC
— Typeabstract type AbstractBC{F<:Function}
FiniteElementContainers.AbstractBCContainer
— Typeabstract type AbstractBCContainer{B<:FiniteElementContainers.BCBookKeeping, T<:(Union{var"#s38", var"#s37"} where {var"#s38"<:Number, var"#s37"<:(StaticArraysCore.SVector)}), N, V<:AbstractArray{T<:(Union{var"#s38", var"#s37"} where {var"#s38"<:Number, var"#s37"<:(StaticArraysCore.SVector)}), N}}
FiniteElementContainers.BCBookKeeping
— Typestruct BCBookKeeping{M<:(AbstractMatrix{<:Integer}), V<:(AbstractVector{<:Integer})}
blocks::AbstractVector{<:Integer}
dofs::AbstractVector{<:Integer}
elements::AbstractVector{<:Integer}
nodes::AbstractVector{<:Integer}
sides::AbstractVector{<:Integer}
side_nodes::AbstractMatrix{<:Integer}
This struct is used to help with book keeping nodes, sides, etc. for all types of boundary conditions.
TODO need to add a domain ID for extending to Schwarz
FiniteElementContainers.BCBookKeeping
— MethodBCBookKeeping(
dof::DofManager,
var_name::Symbol,
sset_name::Symbol
) -> FiniteElementContainers.BCBookKeeping{_A, Vector{Int64}} where _A<:(AbstractMatrix{<:Integer})
FiniteElementContainers.BCBookKeeping_old
— MethodBCBookKeeping_old(
dof::DofManager,
var_names::Vector{Symbol},
sset_names::Vector{Symbol}
)
FiniteElementContainers.update_bc_values!
— Methodupdate_bc_values!(bcs, funcs, X, t)
Wrapper that is generic for all architectures to update bc values based on the stored function
KernelAbstractions.get_backend
— Methodget_backend(
bk::FiniteElementContainers.BCBookKeeping
) -> Any