Note: This is an intermediate solution to the library documentation, while doxygen documentation is in preparation.
- User-defined (spatially dependent)
ScalarFunctor
: Scalar functionTensorFunctor
: Tensor functionSymmetricTensorFunctor
: Symmetric tensor function
- User-defined (with caching)
ScalarCacheFunctor
: Scalar functionTensorCacheFunctor
: Tensor functionSymmetricTensorCacheFunctor
: Symmetric tensor function
- Wrappers for
deal.II
Function
sScalarFunctionFunctor
: Scalar function, FunctionParserTensorFunctionFunctor
: Tensor function, TensorFunctionParser
- Conversion utilities (local to symbolic)
constant_scalar()
: Constant scalar functionconstant_vector()
: Constant vector functionconstant_tensor()
: Constant tensor functionconstant_symmetric_tensor()
: Constant symmetric tensor function
- [TODO] No-op
TestFunction
: Global test functionTrialSolution
: Global trial solutionFieldSolution
: Global field solution- Indexed storage for time history or other solution fields via the
SolutionStorage
class - Indexed storage also supports multiple DoFHandlers (e.g. when a field solution for another discretisation is used in the RHS of the one being assembled)
- Indexed storage for time history or other solution fields via the
- Sub-space extractors, used to segment a finite element space into
sub-components
SubSpaceExtractors::Scalar
SubSpaceExtractors::Vector
SubSpaceExtractors::Tensor
SubSpaceExtractors::SymmetricTensor
- Sub-space views (extracted from a space), accessing one or more components of
the finite element space. With a sub-space view, the natural "type" of the
finite element component is known, and more operators become available for
use.
SubSpaceViews::Scalar
SubSpaceViews::Vector
SubSpaceViews::Tensor
SubSpaceViews::SymmetricTensor
- Standard
LinearForm
: A class that encapsulates a linear form, composed of a test space operator and an arbitrary functor.- Convenience function to create a linear form:
linear_form()
- Convenience function to create a linear form:
BilinearForm
: A class that encapsulates a bilinear form, composed of a test space operator, an arbitrary functor, and a trial space operator.symmetrize()
: Set a symmetry flag for local contributionsdelta_IJ()
: Ensure that accumulation is only done when the DoF component of the trial and test functions are equal (a "Kronecker delta" of the shape functions)- The template function
component_filter<...>()
allows one to restrict assembly to certain components of the shape functions. The filters consider the finite element base function and/or the the component index of the shape functions associated with the test function (indexI
) or trial solution (indexJ
). - Convenience function to create a bilinear form:
bilinear_form()
- Feature points
- Form operators involve slots for per-dof calculations and per-quadrature point calculations
- Can use the per-quadrature point slot as much as possible to minimise number of operations
- Test function and trial solution may be a composite operation
- Note: In this case, the composite operation may incur n(dofs)*n(q-points) operations
- Form operators involve slots for per-dof calculations and per-quadrature point calculations
- Self-linearising
- Accumulation of these forms into an assembler will automatically generate additional forms for the linearisation (and, in the case of an energy functional, the residual as well). The parameterisation (dictating how many additional forms are generated) are automatically deduced.
SelfLinearization::EnergyFunctional
: A self-linearising energy functional (as is often defined for variational problems)- Feature points
- Consumes an
EnergyFunctor
- Parameterisation is defined by the energy functor
- Variation and linearisation with respect to all field variables
- Convenience function to create an energy functional form:
energy_functional_form()
- Consumes an
EnergyFunctor
: Energy functional Functors to parameterise and define self-linearisation finite element residuals (or a component of the residual)- Automatic differentiation stored energy function
- Symbolic differentiation free/stored energy function
- Convenience function to create an energy functor:
energy_functor()
- Feature points
SelfLinearization::ResidualView
: A self-linearising energy functional (as is often defined for variational problems)- Feature points
- Consumes an
ResidualFunctor
or aResidualViewFunctor
- Finite element component selection using the designated test function
- Test function may be a composite operation (but will not be linearised)
- Parameterisation is defined by the residual functor
- Linearisation with respect to all field variables
- Convenience function to create a residual form:
residual_form()
- Consumes an
ResidualFunctor
,ResidualViewFunctor
: Functors to parameterise and define self-linearisation finite element residuals (or a component of the residual)- Automatic differentiation function for kinetic variable
- Symbolic differentiation function for kinetic variable
- Convenience functions to create residual functors:
residual_functor()
,residual_view_functor()
- Feature points
AD_SD_Functor_Cache
: A class that provides a caching mechanism forSD
calculations. Using this class, the results of symbolic operations (e.g. symbolic differentiation) can persist across timesteps and Newton iterations, rather than being recomputed each time assembly is invoked.
- Forms are integrated over volumes, boundaries and interfaces using the
dV()
,dA()
anddI()
class member functions.
- Symbolic test functions/trial solutions/field solutions
- Global
TestFunction
,TrialSolution
,FieldSolution
- sub-space extraction
value()
: valuegradient()
: gradientlaplacian()
: laplacianhessian()
: Hessianthird_derivative()
: third derivativejump_in_values()
: jump in valuesjump_in_gradients()
: jump in gradientsjump_in_hessians()
: jump in Hessiansjump_in_third_derivatives()
: jump in third derivativesaverage_of_values()
: average of valuesaverage_of_gradients()
: average of gradientsaverage_of_hessians()
: average of Hessians
- Scalar (
SubSpaceViews::Scalar
generated by aTestFunction[SubSpaceExtractors::Scalar]
,TrialSolution[SubSpaceExtractors::Scalar]
, or aFieldSolution[SubSpaceExtractors::Scalar]
)value()
: valuegradient()
: gradientlaplacian()
: laplacianhessian()
: Hessianthird_derivative()
: third derivativejump_in_values()
: jump in valuesjump_in_gradients()
: jump in gradientsjump_in_hessians()
: jump in Hessiansjump_in_third_derivatives()
: jump in third derivativesaverage_of_values()
: average of valuesaverage_of_gradients()
: average of gradientsaverage_of_hessians()
: average of Hessians
- Vector (
SubSpaceViews::Vector
generated by aTestFunction[SubSpaceExtractors::Vector]
,TrialSolution[SubSpaceExtractors::Vector]
, or aFieldSolution[SubSpaceExtractors::Vector]
)value()
: valuegradient()
: gradientsymmetric_gradient()
: symmetric gradientdivergence()
: divergencecurl()
: curlhessian()
: Hessianthird_derivative()
: third derivativejump_in_values()
: jump in valuesjump_in_gradients()
: jump in gradientsjump_in_hessians()
: jump in Hessiansjump_in_third_derivatives()
: jump in third derivativesaverage_of_values()
: average of valuesaverage_of_gradients()
: average of gradientsaverage_of_hessians()
: average of Hessians
- Tensor (
SubSpaceViews::Tensor
generated by aTestFunction[SubSpaceExtractors::Tensor]
,TrialSolution[SubSpaceExtractors::Tensor]
, or aFieldSolution[SubSpaceExtractors::Tensor]
)value()
: valuegradient()
: gradientdivergence()
: divergence
- Symmetric tensor (
SubSpaceViews::SymmetricTensor
generated by aTestFunction[SubSpaceExtractors::SymmetricTensor]
,TrialSolution[SubSpaceExtractors::SymmetricTensor]
, or aFieldSolution[SubSpaceExtractors::SymmetricTensor]
)value()
: valuedivergence()
: divergence
- Convenience functions (for field solution subspace views only)
test_function()
: Convert a field solution symbolic operation to a test functiontrial_solution()
: Convert a field solution symbolic operation to a trial solution
- Global
- Function operators
- Unary
- General
operator-
: negation
- Scalar operations
invert()
: reciprocal valuesin()
,cos()
,tan()
: trignometric operations: sine, cosine, tangentexp()
,log()
:`exponential, logarithmsqrt()
:square rootabs()
:absolute value- [TODO] Other math functions
- Tensor operations
determinant()
: determinant of a tensor or symmetric tensorinvert()
: invert a tensor or symmetric tensortranspose()
: transpose of a tensor or symmetric tensortrace()
: trace of a tensor or symmetric tensorsymmetrize()
: symmetrize a tensoradjugate()
: adjugate of a tensorcofactor()
: cofactor of a tensorl1_norm()
: l(1) norm of a tensor (NOTE: Not yet available for vectorised numbers)linfty_norm()
: l(infty) norm of a tensor (NOTE: Not yet available for vectorised numbers)
- Interface operations (evaluating a function across an interface)
- [TODO] jump
- [TODO] average
- General
- Binary
operator+
: Additionoperator-
: Subtractionoperator*
: Multiplication- Scalar
- Tensor
- Scalar operations
pow()
: powermax()
,min()
: maximum, minimum- [TODO] Other math functions
- Tensor operations
cross_product()
: cross productschur_product()
: Schur productouter_product
: outer product
- Tensor contractions
operator*
(single contraction forTensor
s, double contraction forSymmetricTensor
s)scalar_product()
: scalar productcontract()
: single index contractiondouble_contract
: double index double contraction- [TODO] general contraction
- Implicit conversions to functors
- Arithmetic types, e.g.
double
->constant_scalar()
- Tensor, e.g.
Tensor
->constant_tensor()
- SymmetricTensor, e.g.
SymmetricTensor
->constant_symmetric_tensor()
- Arithmetic types, e.g.
- Operation modes
- Quadrature point
- Shape function @ quadrature point (binary operation with test function / trial solution)
- Unary
- Form operators
- Unary
operator-
: negation
- Binary
operator+
: Additionoperator-
: Subtractionoperator*
: Multiplication- Scalar
- Unary
- Integration domains
VolumeIntegral
: A class representing volume integrals- Subdomain selection: Material ID (
dealii::types::material_id
)
- Subdomain selection: Material ID (
BoundaryIntegral
: A class representing boundary integrals- Subdomain selection: Boundary ID (
dealii::types::boundary_id
)
- Subdomain selection: Boundary ID (
Interfacentegral
: A class representing interface integrals- Inter-cell interfaces for DG FEM
- Subdomain selection: Manifold ID (
dealii::types::manifold_id
)
- [TODO] Custom predicates for the above
FunctionIntegrator
: User-defined function integrators, used to compute integrals of quantities over a domain or subdomain.- Position independent/dependent
- Volume, boundary, interface (using
MeshWorker::mesh_loop()
)
Integrator
: Integrator for symbolic functors, used to compute integrals of quantities over a domain or subdomain.- Volume, boundary, interface (using
MeshWorker::mesh_loop()
)
- Volume, boundary, interface (using
- Integral operators
- Binary
operator+
: Additionoperator-
: Subtractionoperator*
: Multiplication- Scalar
- Binary
MatrixBasedAssembler
: Matrix-based assembly (usingMeshWorker::mesh_loop()
for multithreading as well asSIMD
)- Symmetry flag for global system
symmetrize()
: Marks the global system as symmetric- Exclusion of bilinear form contributions based on field index
- Ignore DoFs that aren't in DoF group
- Vectorisation if
AVX
extensions are available - Pre-computation and result caching
- Symmetry flag for global system
- [TODO] Matrix-free
SymbolicDecorations
: A (partially customisable) symbolic decorator that is used to provide some nomenclature when the expression tree is parsed during output- ASCII using the
as_ascii()
class member functions - LaTeX using the
as_latex()
class member functions