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 bubble enriched Lagrange degree 1 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.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.011785113019775728, -8.00276728565863e-18, -1.5829351718288365e-17, -0.004860098695998325, -1.3769367590565906e-17, -0.004347004424644148, 0.0016835875742536631, 8.023096076392733e-18, -0.003764616262105151, 1.0950441942103595e-17]], dtype=np.float64),
[[np.array([[0.0, 0.0]], dtype=np.float64), np.array([[1.0, 0.0]], dtype=np.float64), np.array([[0.0, 1.0]], 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.3333333333333333, 0.3333333333333333]], dtype=np.float64)], []],
[[np.array([[[[1.0]]]], dtype=np.float64), np.array([[[[1.0]]]], dtype=np.float64), np.array([[[[1.0]]]], 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]]]], dtype=np.float64)], []],
0,
basix.MapType.identity,
basix.SobolevSpace.H1,
False,
-1,
3,
basix.PolysetType.standard, dtype=np.float64
)
# Create bubble enriched Lagrange degree 2 on a triangle
e = basix.ufl.custom_element(
basix.CellType.triangle,
(),
np.array([[0.7071067811865476, 0.0, 2.7755575615628914e-17, -3.885780586188048e-16, 3.469446951953614e-17, -3.0531133177191805e-16, 2.636779683484747e-16, 4.163336342344337e-17, -3.0531133177191805e-16, 9.020562075079397e-17, -4.440892098500626e-16, 1.3877787807814457e-17, -3.191891195797325e-16, 1.249000902703301e-16, -4.0245584642661925e-16], [0.23570226039551584, -0.08333333333333329, 0.14433756729740638, -1.3183898417423734e-16, 3.469446951953614e-17, -7.28583859910259e-17, 1.5265566588595902e-16, -7.632783294297951e-17, -4.163336342344337e-17, -9.71445146547012e-17, -1.249000902703301e-16, 9.71445146547012e-17, -7.632783294297951e-17, 4.683753385137379e-17, -1.249000902703301e-16], [0.11785113019775792, -0.06666666666666662, 0.1154700538379251, 0.01360827634879535, -0.023570226039551542, 0.030429030972509173, 1.0408340855860843e-16, -7.632783294297951e-17, 4.163336342344337e-17, -1.0408340855860843e-16, -9.71445146547012e-17, 9.020562075079397e-17, -7.979727989493313e-17, 7.025630077706069e-17, -1.0755285551056204e-16], [0.2357022603955159, 0.16666666666666657, 1.0408340855860843e-17, -9.71445146547012e-17, 3.122502256758253e-17, -8.326672684688674e-17, -7.632783294297951e-17, 3.469446951953614e-17, -1.734723475976807e-16, 2.5153490401663703e-17, -1.8041124150158794e-16, 1.734723475976807e-17, -1.457167719820518e-16, 5.984795992119984e-17, -1.5178830414797062e-17], [0.058925565098878974, 0.016666666666666663, 0.028867513459481277, -0.020412414523193156, 0.02357022603955157, -1.6479873021779667e-17, 1.0408340855860843e-17, -7.806255641895632e-18, -3.209238430557093e-17, -3.0357660829594124e-18, -3.469446951953614e-18, 1.734723475976807e-17, -2.2551405187698492e-17, -1.6479873021779667e-17, 8.239936510889834e-18], [0.1178511301977579, 0.13333333333333328, 5.204170427930421e-18, 0.040824829046386214, 1.734723475976807e-17, -3.382710778154774e-17, -1.0755285551056204e-16, 1.214306433183765e-17, -8.326672684688674e-17, 9.64939933512099e-18, -1.8041124150158794e-16, 6.938893903907228e-18, -8.847089727481716e-17, 3.426078865054194e-17, -4.9873299934333204e-18], [0.003928371006591934, -0.0007936507936507941, -0.001374643498070538, -0.001458029608799513, -0.00042089689356342126, -0.0016301266592415678, 0.0010288590731550309, 0.0004860098695998373, -0.0010457267394736725, 0.0007423923386456237, -0.0002091453478947333, -0.00010867511061610463, 0.0003273642505493279, 0.0006640158940746641, 0.0], [0.0039283710065919335, -0.0007936507936507943, 0.0013746434980705378, -0.0014580296087995125, 0.0004208968935634208, -0.0016301266592415678, 0.0010288590731550307, -0.00048600986959983715, -0.0010457267394736727, -0.0007423923386456242, -0.00020914534789473298, 0.00010867511061610398, 0.00032736425054932805, -0.0006640158940746648, -3.2526065174565133e-19], [0.0039283710065919335, 0.0015873015873015873, -4.87890977618477e-19, -0.0019440394783993495, -7.182839392716467e-19, -0.0010867511061610456, -0.0003741305720563736, -9.215718466126788e-19, -0.0016731627831578753, -1.6263032587282567e-19, 0.00041829069578946986, -9.215718466126788e-19, -0.0006547285010986563, -2.710505431213761e-19, 2.981555974335137e-19]], dtype=np.float64),
[[np.array([[0.0, 0.0]], dtype=np.float64), np.array([[1.0, 0.0]], dtype=np.float64), np.array([[0.0, 1.0]], dtype=np.float64)], [np.array([[0.5, 0.5]], dtype=np.float64), np.array([[0.0, 0.5]], dtype=np.float64), np.array([[0.5, 0.0]], dtype=np.float64)], [np.array([[0.25, 0.25], [0.5, 0.25], [0.25, 0.5]], dtype=np.float64)], []],
[[np.array([[[[1.0]]]], dtype=np.float64), np.array([[[[1.0]]]], dtype=np.float64), np.array([[[[1.0]]]], dtype=np.float64)], [np.array([[[[1.0]]]], dtype=np.float64), np.array([[[[1.0]]]], dtype=np.float64), np.array([[[[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)], []],
0,
basix.MapType.identity,
basix.SobolevSpace.H1,
False,
-1,
4,
basix.PolysetType.standard, dtype=np.float64
)