Index
Exported
ExtendableFEM — ModuleExtendableFEMExtendableFEM.jl is a high-level, extensible finite element method (FEM) library for Julia, supporting flexible problem descriptions, custom operators, and advanced grid management.
Features
- High-level, extensible API for solving PDE problems by finite element methods
- Flexible
ProblemDescriptioninterface for assigning unknowns and operators - Supports custom kernel functions for bilinear, linear, and nonlinear forms
- Automatic assembly and Newton's method for NonlinearOperators
- Builds upon ExtendableGrids.jl and low level structures from ExtendableFEMBase.jl
Quick Example
The following minimal example demonstrates how to set up and solve a Poisson problem:
using ExtendableFEM
using ExtendableGrids
# Build a uniform-refined 2D unit square grid with triangles
xgrid = uniform_refine(grid_unitsquare(Triangle2D), 4)
# Create a new PDE description
PD = ProblemDescription()
# Define and assign the unknown
u = Unknown("u"; name = "potential")
assign_unknown!(PD, u)
# Assign Laplace operator (diffusion term)
assign_operator!(PD, BilinearOperator([grad(u)]; factor = 1e-3))
# Assign right-hand side data
function f!(fval, qpinfo)
x = qpinfo.x # global coordinates of quadrature point
fval[1] = x[1] * x[2]
end
assign_operator!(PD, LinearOperator(f!, [id(u)]))
# Assign Dirichlet boundary data (u = 0)
assign_operator!(PD, HomogeneousBoundaryData(u; regions = 1:4))
# Discretize: choose finite element space
FEType = H1Pk{1,2,3} # cubic H1-conforming element with 1 component in 2D
FES = FESpace{FEType}(xgrid)
# Solve the problem
sol = solve!(PD, [FES])
# Plot the solution
using PyPlot
plot(id(u), sol; Plotter = PyPlot)Citing
If you use ExtendableFEM.jl in your research, please cite this Zenodo record.
License
ExtendableFEM.jl is licensed under the MIT License. See LICENSE for details.
Types and Constructors
ExtendableFEM.BilinearOperatorExtendableFEM.BilinearOperatorExtendableFEM.BilinearOperatorExtendableFEM.BilinearOperatorDGExtendableFEM.BilinearOperatorDGExtendableFEM.BoundaryDataRestrictionExtendableFEM.CallbackOperatorExtendableFEM.CombineDofsExtendableFEM.CombineDofsExtendableFEM.CoupledDofsRestrictionExtendableFEM.FaceInterpolatorExtendableFEM.FixDofsExtendableFEM.HomogeneousDataExtendableFEM.InterpolateBoundaryDataExtendableFEM.ItemIntegratorExtendableFEM.ItemIntegratorDGExtendableFEM.LinearFunctionalRestrictionExtendableFEM.LinearOperatorExtendableFEM.LinearOperatorExtendableFEM.LinearOperatorExtendableFEM.LinearOperatorExtendableFEM.LinearOperatorDGExtendableFEM.LinearOperatorDGExtendableFEM.NonlinearOperatorExtendableFEM.ProblemDescriptionExtendableFEM.SolverConfigurationExtendableFEM.TDMatrixExtendableFEM.TDRank3ExtendableFEM.TDRank4ExtendableFEM.TDScalarExtendableFEM.TDVectorExtendableFEM.TensorDescriptionExtendableFEM.UnknownExtendableFEM.Unknown
Constants
Methods
ExtendableFEM.HomogeneousBoundaryDataExtendableFEM.L2NormIntegratorExtendableFEM.MassRestrictionExtendableFEM.ZeroMeanValueRestrictionExtendableFEM.applyExtendableFEM.apply!ExtendableFEM.apply_penalties!ExtendableFEM.assemble!ExtendableFEM.assemble!ExtendableFEM.assemble!ExtendableFEM.assemble!ExtendableFEM.assign_operator!ExtendableFEM.assign_restriction!ExtendableFEM.assign_unknown!ExtendableFEM.averageExtendableFEM.broken_scalarplot!ExtendableFEM.curl1ExtendableFEM.curl2ExtendableFEM.curl3ExtendableFEM.dofgridExtendableFEM.eval_jacobian!ExtendableFEM.eval_rhs!ExtendableFEM.evaluateExtendableFEM.evaluateExtendableFEM.fixed_dofsExtendableFEM.fixed_valsExtendableFEM.generate_ODEProblemExtendableFEM.generate_ODEProblemExtendableFEM.get_periodic_coupling_infoExtendableFEM.get_periodic_coupling_matrixExtendableFEM.gradExtendableFEM.gridExtendableFEM.hessianExtendableFEM.idExtendableFEM.idExtendableFEM.iterate_until_stationarityExtendableFEM.jac_prototypeExtendableFEM.jumpExtendableFEM.laplaceExtendableFEM.normalfluxExtendableFEM.otherExtendableFEM.plotExtendableFEM.plot!ExtendableFEM.plot_convergencehistoryExtendableFEM.plot_convergencehistory!ExtendableFEM.plot_unicodeExtendableFEM.print_convergencehistoryExtendableFEM.print_tableExtendableFEM.replace_operator!ExtendableFEM.residualExtendableFEM.symgrad_voigtExtendableFEM.tangentialfluxExtendableFEM.tangentialgradExtendableFEM.tensor_viewExtendableFEM.tensor_viewExtendableFEM.tensor_viewExtendableFEM.tensor_viewExtendableFEM.tensor_viewExtendableFEM.tensor_viewExtendableFEM.thisExtendableFEM.tmul!ExtendableFEM.ΔExtendableFEM.εV