FerriteOperators
A SciML compatible high performance parallel assembly system for Ferrite.jl.
For an assembly framework in Ferrite.jl style we refer users for now to FerriteAssembly.jl.
This package is under heavy development. Expect regular breaking changes for now. If you are interested in joining development, then either comment an issue or reach out via julialang.zulipchat.com, via mail or via julialang.slack.com. Alternatively open a discussion if you have something specific in mind.
If you are interested in using this package, then I am also happy to to get some constructive feedback, especially if things don't work out in the current design. This can be done via julialang.slack.com, julialang.zulipchat.com or via mail.
The Element Interface
For users the most important piece is the element interface. Users need to provide some structs and corresponding dispatches to work with FerriteOperators.jl.
Essentially there are three super-types for elements
Missing docstring for FerriteOperators.AbstractVolumetricElement. Check Documenter's build log for details.
FerriteOperators.AbstractSurfaceElementCache — Type
Supertype for all caches to integrate over surfaces.
Interface:
setup_boundary_cache(model, qr, sdh)FerriteOperators.AbstractInterfaceElementCache — Type
Supertype for all caches to integrate over interfaces.
Interface:
setup_interface_cache(model, qr, ip, sdh)FerriteOperators.assemble_element! — Function
assemble_element!(Kₑ::AbstractMatrix, cell::CellCache, element_cache::AbstractVolumetricElementCache, time)Main entry point for bilinear operators
assemble_element!(Kₑ::AbstractMatrix, uₑ::AbstractVector, cell::CellCache, element_cache::AbstractVolumetricElementCache, time)Update element matrix in nonlinear operators
assemble_element!(Kₑ::AbstractMatrix, residualₑ::AbstractVector, uₑ::AbstractVector, cell::CellCache, element_cache::AbstractVolumetricElementCache, time)Update element matrix and residual in nonlinear operators
assemble_element!(residualₑ::AbstractVector, uₑ::AbstractVector, cell::CellCache, element_cache::AbstractVolumetricElementCache, time)Update residual in nonlinear operators
The notation is as follows.
\[K_e\]
the element stiffness matrix\[u_e\]
the element unknowns\[residual_e\]
the element residual
FerriteOperators.assemble_face! — Function
assemble_face!(Kₑ::AbstractMatrix, cell::CellCache, face_cache::AbstractSurfaceElementCache, time)Main entry point for bilinear operators
assemble_face!(Kₑ::AbstractMatrix, uₑ::AbstractVector, cell::CellCache, face_cache::AbstractSurfaceElementCache, time)Update face matrix in nonlinear operators
assemble_face!(Kₑ::AbstractMatrix, residualₑ::AbstractVector, uₑ::AbstractVector, cell::CellCache, face_cache::AbstractSurfaceElementCache, time)Update face matrix and residual in nonlinear operators
assemble_face!(residualₑ::AbstractVector, uₑ::AbstractVector, cell::CellCache, face_cache::AbstractSurfaceElementCache, time)Update residual in nonlinear operators
The notation is as follows.
\[K_e\]
the element stiffness matrix\[u_e\]
the element unknowns\[residual_e\]
the element residual
FerriteOperators.assemble_interface! — Function
assemble_interface!(Kₑ::AbstractMatrix, cell::CellCache, face_cache::AbstractSurfaceElementCache, time)Main entry point for bilinear operators
assemble_interface!(Kₑ::AbstractMatrix, uₑ::AbstractVector, cell::CellCache, face_cache::AbstractSurfaceElementCache, time)Update face matrix in nonlinear operators
assemble_interface!(Kₑ::AbstractMatrix, residualₑ::AbstractVector, uₑ::AbstractVector, cell::CellCache, face_cache::AbstractSurfaceElementCache, time)Update face matrix and residual in nonlinear operators
assemble_interface!(residualₑ::AbstractVector, uₑ::AbstractVector, cell::CellCache, face_cache::AbstractSurfaceElementCache, time)Update residual in nonlinear operators
The notation is as follows.
\[K_e\]
the element pair stiffness matrix\[u_e\]
the element pair unknowns\[residual_e\]
the element pair residual
Missing docstring for FerriteOperators.setup_element_cache. Check Documenter's build log for details.
Missing docstring for FerriteOperators.load_element_unknowns!. Check Documenter's build log for details.
Only FerriteOperators.AbstractVolumetricElement is implemented for now and it covers already all typical use-cases.
Furthermore, each element formulation is derived from an integrator. Integrators are the bridge between elements and materials. Right now, these types of integrators are provided
Missing docstring for FerriteOperators.AbstractBilinearIntegrator. Check Documenter's build log for details.
Missing docstring for FerriteOperators.AbstractNonlinearIntegrator. Check Documenter's build log for details.
Missing docstring for FerriteOperators.AbstractLinearIntegrator. Check Documenter's build log for details.
The Setup Interface
The main entry point for users is the function
which takes a strategy, the integrator and a matching dof handler. Here the strategy controls the type of parallelism, the used device (e.g. threaded CPU or GPU) and the integrator is the hub controlling what exactly will be assembled.
FerriteOperators.SequentialCPUDevice — Type
SequentialCPUDeviceSequential algorithms on CPU.
FerriteOperators.PolyesterDevice — Type
PolyesterDeviceThreaded algorithms via Polyester.jl .
FerriteOperators.SequentialAssemblyStrategy — Type
SequentialAssemblyStrategy()FerriteOperators.PerColorAssemblyStrategy — Type
PerColorAssemblyStrategy(chunksize, coloralg)FerriteOperators.ElementAssemblyStrategy — Type
ElementAssemblyStrategy