FerriteOperators

A SciML compatible high performance parallel assembly system for Ferrite.jl.

Note

For an assembly framework in Ferrite.jl style we refer users for now to FerriteAssembly.jl.

Warning

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.

Note

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.

Missing docstring for FerriteOperators.AbstractVolumetricElement. Check Documenter's build log for details.

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
source
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
source
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
source
Missing docstring.

Missing docstring for FerriteOperators.setup_element_cache. Check Documenter's build log for details.

Missing docstring.

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.

Missing docstring for FerriteOperators.AbstractBilinearIntegrator. Check Documenter's build log for details.

Missing docstring.

Missing docstring for FerriteOperators.AbstractNonlinearIntegrator. Check Documenter's build log for details.

Missing docstring.

Missing docstring for FerriteOperators.AbstractLinearIntegrator. Check Documenter's build log for details.

The Setup Interface

The main entry point for users is the function

Missing docstring.

Missing docstring for setup_operator. Check Documenter's build log for details.

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.