UFL input for mixed formulation of Poisson EquationΒΆ
First we define the variational problem in UFL which we save in the
file called MixedPoisson.ufl
.
We begin by defining the finite element spaces. We define two finite element spaces \(\Sigma_h = BDM\) and \(V_h = DG\) separately, before combining these into a mixed finite element space:
BDM = FiniteElement("BDM", triangle, 1)
DG = FiniteElement("DG", triangle, 0)
W = BDM * DG
The first argument to FiniteElement
specifies the type of
finite element family, while the third argument specifies the
polynomial degree. The UFL user manual contains a list of all
available finite element families and more details. The * operator
creates a mixed (product) space W
from the two separate spaces
BDM
and DG
. Hence,
Next, we need to specify the trial functions (the unknowns) and the test functions on this space. This can be done as follows
(sigma, u) = TrialFunctions(W)
(tau, v) = TestFunctions(W)
Further, we need to specify the source \(f\) (a coefficient) that will be used in the linear form of the variational problem. This coefficient needs be defined on a finite element space, but none of the above defined elements are quite appropriate. We therefore define a separate finite element space for this coefficient.
CG = FiniteElement("CG", triangle, 1)
f = Coefficient(CG)
Finally, we define the bilinear and linear forms according to the equations:
a = (dot(sigma, tau) + div(tau)*u + div(sigma)*v)*dx
L = - f*v*dx