Before running this example, you must install
Basix.UFL:
pip3 install git+https://github.com/FEniCS/basix fenics-ufl
This element can then be created with the following lines of Python:
import basix
import basix.ufl
import numpy as np
# Create Crouzeix-Falk degree 3 on a triangle
e = basix.ufl.custom_element(
basix.CellType.triangle,
(),
np.array([[0.7071067811865489, -3.608224830031759e-16, -5.967448757360216e-16, 3.434752482434078e-15, -4.926614671774132e-16, 2.67841304690819e-15, -3.2335245592207684e-15, 3.191891195797325e-16, 7.896461262646426e-15, 4.649058915617843e-16], [0.23570226039551628, -0.08333333333333401, 0.14433756729740724, 1.40989650510015e-15, 3.0357660829594124e-16, 6.557254739192331e-16, -1.7403613272737317e-15, 7.485331798839923e-16, 2.4060614611798314e-15, 1.0174153186603974e-15], [0.11785113019775828, -0.06666666666666712, 0.11547005383792579, 0.01360827634879615, -0.023570226039551643, 0.030429030972509735, -9.993633524885137e-16, 5.049671618351237e-16, 1.0830908652587068e-15, 6.541533807691291e-16], [0.07071067811865506, -0.05000000000000034, 0.08660254037844436, 0.01749635530559457, -0.030304576336566497, 0.03912303982179802, -0.0025253813613811296, 0.0043740888263988946, -0.005646924393157328, 0.006681531047811082], [0.23570226039551628, 0.1666666666666677, -2.0469737016526324e-16, 7.667477763817487e-16, -2.255140518769849e-16, 1.349614864309956e-15, 1.4051260155412137e-16, 5.898059818321144e-17, 3.226585665316861e-15, 1.6306400674181987e-16], [0.05892556509887893, 0.016666666666666784, 0.028867513459481495, -0.020412414523193062, 0.02357022603955198, 3.8510861166685117e-16, -1.0592655225183378e-16, 2.205267218835516e-16, 8.020927672047762e-16, 3.2482697087665713e-16], [0.023570226039551605, 5.648608615354753e-17, 0.019245008972987636, -0.009720197391996737, 0.01010152544552229, 0.004347004424644381, 0.0033671751485073037, -0.004860098695998318, 0.00376461626210557, 2.0734011296069665e-16], [0.1178511301977583, 0.1333333333333341, -7.632783294297951e-17, 0.04082482904638698, -1.0495077029659683e-16, 5.872038966181492e-16, 3.616898447411643e-16, 5.204170427930421e-18, 1.6705387073656652e-15, 5.941427905220564e-17], [0.0235702260395516, 0.01666666666666674, 0.009622504486493866, -0.005832118435197997, 0.0134687005940297, 1.537940781670688e-16, -0.005050762722761071, 0.004860098695998528, 3.7925391993542945e-16, 1.0527603094834248e-16], [0.07071067811865506, 0.1000000000000006, -3.252606517456513e-17, 0.052489065916782984, -4.96564594998361e-17, 2.894819800536297e-16, 0.010101525445522504, -2.168404344971009e-18, 9.341485918135106e-16, 2.5478751053409354e-17]], dtype=np.float64),
[[np.empty((0, 2), dtype=np.float64), np.empty((0, 2), dtype=np.float64), np.empty((0, 2), dtype=np.float64)], [np.array([[0.75, 0.25], [0.5, 0.5], [0.25, 0.75]], dtype=np.float64), np.array([[0.0, 0.25], [0.0, 0.5], [0.0, 0.75]], dtype=np.float64), np.array([[0.25, 0.0], [0.5, 0.0], [0.75, 0.0]], dtype=np.float64)], [np.array([[0.3333333333333333, 0.3333333333333333]], dtype=np.float64)], []],
[[np.empty((0, 1, 0, 1), dtype=np.float64), np.empty((0, 1, 0, 1), dtype=np.float64), np.empty((0, 1, 0, 1), dtype=np.float64)], [np.array([[[[1.0], [0.0], [0.0]]], [[[0.0], [1.0], [0.0]]], [[[0.0], [0.0], [1.0]]]], dtype=np.float64), np.array([[[[1.0], [0.0], [0.0]]], [[[0.0], [1.0], [0.0]]], [[[0.0], [0.0], [1.0]]]], dtype=np.float64), np.array([[[[1.0], [0.0], [0.0]]], [[[0.0], [1.0], [0.0]]], [[[0.0], [0.0], [1.0]]]], dtype=np.float64)], [np.array([[[[1.0]]]], dtype=np.float64)], []],
0,
basix.MapType.identity,
basix.SobolevSpace.L2,
False,
-1,
3,
basix.PolysetType.standard, dtype=np.float64
)