-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpoisson.ufl
41 lines (33 loc) · 1.37 KB
/
poisson.ufl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# UFL input for the Poisson equation
# ==================================
#
# The first step is to define the variational problem at hand. We define
# the variational problem in UFL terms in a separate form file
# :download:`Poisson.ufl`. We begin by defining the finite element::
element = FiniteElement("Lagrange", tetrahedron, 2)
# The first argument to :py:class:`FiniteElement` is the finite element
# family, the second argument specifies the domain, while the third
# argument specifies the polynomial degree. Thus, in this case, our
# element ``element`` consists of first-order, continuous Lagrange basis
# functions on triangles (or in order words, continuous piecewise linear
# polynomials on triangles).
#
# Next, we use this element to initialize the trial and test functions
# (:math:`u` and :math:`v`) and the coefficient functions (:math:`f` and
# :math:`g`)::
coord_element = VectorElement("Lagrange", tetrahedron, 1)
mesh = Mesh(coord_element)
V = FunctionSpace(mesh, element)
u = TrialFunction(V)
v = TestFunction(V)
f = Coefficient(V)
# Finally, we define the bilinear and linear forms according to the
# variational formulation of the equations::
a = inner(grad(u), grad(v)) * dx
L = inner(f, v) * dx
# Before the form file can be used in the C++ program, it must be
# compiled using FFCX by running (on the command-line):
#
# .. code-block:: sh
#
# ffcx Poisson.ufl