{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.6Uyl48Yh/b1/fenics-dolfinx_0.9.0-6_armhf.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.6Uyl48Yh/b2/fenics-dolfinx_0.9.0-6_armhf.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,9 +1,9 @@\n \n- 1ab6d4adc6cacc70809b8357b9eb68c6 1237416 doc optional dolfinx-doc_0.9.0-6_all.deb\n+ 2e31d6a1cf1820f345caea7d8c22ef29 1237396 doc optional dolfinx-doc_0.9.0-6_all.deb\n 8b80e5675355fc521de24c4514bda8c2 48656 libdevel optional libdolfinx-complex-dev_0.9.0-6_armhf.deb\n 8c0a81184ce4551f53696d961061a868 10732516 debug optional libdolfinx-complex0.9-dbgsym_0.9.0-6_armhf.deb\n bd6409e5a576091b5fef2a09e9454b99 465512 libs optional libdolfinx-complex0.9_0.9.0-6_armhf.deb\n 8dab79be666009a249852ab53b83e8ca 201636 libdevel optional libdolfinx-dev_0.9.0-6_armhf.deb\n 5a913d1cb242f1802049e87c61333d29 48652 libdevel optional libdolfinx-real-dev_0.9.0-6_armhf.deb\n 877325c48c958366e8b0856aa2fea58d 10731804 debug optional libdolfinx-real0.9-dbgsym_0.9.0-6_armhf.deb\n f0ca3672da8b3749cda18e2d5324a929 465596 libs optional libdolfinx-real0.9_0.9.0-6_armhf.deb\n"}, {"source1": "dolfinx-doc_0.9.0-6_all.deb", "source2": "dolfinx-doc_0.9.0-6_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2024-12-29 17:02:28.000000 debian-binary\n--rw-r--r-- 0 0 0 21960 2024-12-29 17:02:28.000000 control.tar.xz\n--rw-r--r-- 0 0 0 1215264 2024-12-29 17:02:28.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 21956 2024-12-29 17:02:28.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 1215248 2024-12-29 17:02:28.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -905,17 +905,17 @@\n drwxr-xr-x 0 root (0) root (0) 0 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/56ce7e71d8c71b4d8ef7c699176dd4fd/\n -rw-r--r-- 0 root (0) root (0) 19507 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/56ce7e71d8c71b4d8ef7c699176dd4fd/demo_stokes.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/67f8546536727bd5386a27073bd16e12/\n -rw-r--r-- 0 root (0) root (0) 8141 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/67f8546536727bd5386a27073bd16e12/demo_elasticity.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/6ad57720b461988475bd5c9286e3f111/\n -rw-r--r-- 0 root (0) root (0) 7325 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/6ad57720b461988475bd5c9286e3f111/demo_types.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/\n--rw-r--r-- 0 root (0) root (0) 3862 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/demo_poisson_matrix_free.ipynb.gz\n+-rw-r--r-- 0 root (0) root (0) 3869 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/demo_poisson_matrix_free.ipynb.gz\n drwxr-xr-x 0 root (0) root (0) 0 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/\n--rw-r--r-- 0 root (0) root (0) 2720 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/demo_mixed-poisson.ipynb.gz\n+-rw-r--r-- 0 root (0) root (0) 2721 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/demo_mixed-poisson.ipynb.gz\n drwxr-xr-x 0 root (0) root (0) 0 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/b94ac7be61dc3726ca331afd20f195d2/\n -rw-r--r-- 0 root (0) root (0) 5886 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/b94ac7be61dc3726ca331afd20f195d2/demo_poisson.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8140d02a100265518e126a3cfe79d8e/\n -rw-r--r-- 0 root (0) root (0) 3877 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8140d02a100265518e126a3cfe79d8e/demo_interpolation-io.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8b180b39a27d7b04c2f666d14475ee3/\n -rw-r--r-- 0 root (0) root (0) 11424 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8b180b39a27d7b04c2f666d14475ee3/demo_cahn-hilliard.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-12-29 17:02:28.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/f6f3cc4d9540871af057920d1ddb5561/\n"}, {"source1": "./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/demo_poisson_matrix_free.ipynb.gz", "source2": "./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/demo_poisson_matrix_free.ipynb.gz", "unified_diff": null, "details": [{"source1": "demo_poisson_matrix_free.ipynb", "source2": "demo_poisson_matrix_free.ipynb", "unified_diff": null, "details": [{"source1": "Pretty-printed", "source2": "Pretty-printed", "comments": ["Similarity: 0.9876077586206897%", "Differences: {\"'cells'\": \"{0: {'id': '0b67a0ff'}, 1: {'id': '19805a95'}, 2: {'id': 'd7fe1000'}, 3: {'id': \"", " \"'02c47081'}, 4: {'id': '9e94d375'}, 5: {'id': '724e9e77'}, 6: {'id': '3acd1326'}, 7: \"", " \"{'id': '08ec1c9e'}, 8: {'id': '7bb7fdab'}, 9: {'id': '36714f20'}, 10: {'id': \"", " \"'0ff3e08f'}, 11: {'id': '2a736fd8'}, 12: {'id': '7bd2e379'}, 13: {'id': 'baf61bdd'}, \"", " \"14: {'id': '639569cb'}, 15: {'id': 'a63e23f0'}, 16: {'id': '16520478'}, 17: {'id': \"", " \"'dfb0e2b5'}, 1 [\u2026]"], "unified_diff": "@@ -1,12 +1,12 @@\n {\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"ebd2dfc6\",\n+ \"id\": \"0b67a0ff\",\n \"metadata\": {},\n \"source\": [\n \"# Matrix-free conjugate gradient solver for the Poisson equation\\n\",\n \"\\n\",\n \"This demo illustrates how to solve the Poisson equation using a\\n\",\n \"matrix-free conjugate gradient (CG) solver. In particular, it\\n\",\n \"illustrates how to\\n\",\n@@ -68,84 +68,84 @@\n \"\\n\",\n \"The modules that will be used are imported:\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"cfbda623\",\n+ \"id\": \"19805a95\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"from mpi4py import MPI\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"60ea1751\",\n+ \"id\": \"d7fe1000\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"import numpy as np\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"d454e433\",\n+ \"id\": \"02c47081\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"import dolfinx\\n\",\n \"import ufl\\n\",\n \"from dolfinx import fem, la\\n\",\n \"from ufl import action, dx, grad, inner\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"6f6ac373\",\n+ \"id\": \"9e94d375\",\n \"metadata\": {},\n \"source\": [\n \"We begin by using {py:func}`create_rectangle\\n\",\n \"` to create a rectangular\\n\",\n \"{py:class}`Mesh ` of the domain, and creating a\\n\",\n \"finite element {py:class}`FunctionSpace `\\n\",\n \"on the mesh.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"4809c03c\",\n+ \"id\": \"724e9e77\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"dtype = dolfinx.default_scalar_type\\n\",\n \"real_type = np.real(dtype(0.0)).dtype\\n\",\n \"comm = MPI.COMM_WORLD\\n\",\n \"mesh = dolfinx.mesh.create_rectangle(comm, [[0.0, 0.0], [1.0, 1.0]], [10, 10], dtype=real_type)\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"cf8a06cf\",\n+ \"id\": \"3acd1326\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"# Create function space\\n\",\n \"degree = 2\\n\",\n \"V = fem.functionspace(mesh, (\\\"Lagrange\\\", degree))\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"ea5c5fb9\",\n+ \"id\": \"08ec1c9e\",\n \"metadata\": {},\n \"source\": [\n \"The second argument to {py:class}`functionspace\\n\",\n \"` is a tuple consisting of `(family,\\n\",\n \"degree)`, where `family` is the finite element family, and `degree`\\n\",\n \"specifies the polynomial degree. In this case `V` consists of\\n\",\n \"third-order, continuous Lagrange finite element functions.\\n\",\n@@ -156,94 +156,94 @@\n \"and then retrieving all facets on the boundary using\\n\",\n \"{py:func}`exterior_facet_indices `.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"74d26bc9\",\n+ \"id\": \"7bb7fdab\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"tdim = mesh.topology.dim\\n\",\n \"mesh.topology.create_connectivity(tdim - 1, tdim)\\n\",\n \"facets = dolfinx.mesh.exterior_facet_indices(mesh.topology)\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"4d64c9a1\",\n+ \"id\": \"36714f20\",\n \"metadata\": {},\n \"source\": [\n \"We now find the degrees of freedom that are associated with the boundary\\n\",\n \"facets using\\n\",\n \"{py:func}`locate_dofs_topological `\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"4959c741\",\n+ \"id\": \"0ff3e08f\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"dofs = fem.locate_dofs_topological(V=V, entity_dim=tdim - 1, entities=facets)\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"9d9c5337\",\n+ \"id\": \"2a736fd8\",\n \"metadata\": {},\n \"source\": [\n \"and use {py:func}`dirichletbc ` to define the\\n\",\n \"essential boundary condition. On the boundary we prescribe the\\n\",\n \"{py:class}`Function ` `uD`, which we create by\\n\",\n \"interpolating the expression $u_{\\\\rm D}$ in the finite element space\\n\",\n \"$V$.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"b134e24e\",\n+ \"id\": \"7bd2e379\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"uD = fem.Function(V, dtype=dtype)\\n\",\n \"uD.interpolate(lambda x: 1 + x[0] ** 2 + 2 * x[1] ** 2)\\n\",\n \"bc = fem.dirichletbc(value=uD, dofs=dofs)\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"6a4e8a72\",\n+ \"id\": \"baf61bdd\",\n \"metadata\": {},\n \"source\": [\n \"Next, we express the variational problem using UFL.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"f65fcc5d\",\n+ \"id\": \"639569cb\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"x = ufl.SpatialCoordinate(mesh)\\n\",\n \"u = ufl.TrialFunction(V)\\n\",\n \"v = ufl.TestFunction(V)\\n\",\n \"f = fem.Constant(mesh, dtype(-6.0))\\n\",\n \"a = inner(grad(u), grad(v)) * dx\\n\",\n \"L = inner(f, v) * dx\\n\",\n \"L_fem = fem.form(L, dtype=dtype)\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"415c930d\",\n+ \"id\": \"a63e23f0\",\n \"metadata\": {},\n \"source\": [\n \"For the matrix-free solvers we also define a second linear form `M` as\\n\",\n \"the {py:class}`action ` of the bilinear form $a$ on an\\n\",\n \"arbitrary {py:class}`Function ` `ui`. This linear\\n\",\n \"form is defined as\\n\",\n \"\\n\",\n@@ -251,78 +251,78 @@\n \"M(v) = a(u_i, v) \\\\quad \\\\text{for} \\\\; \\\\ u_i \\\\in V.\\n\",\n \"$$\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"80c82b3a\",\n+ \"id\": \"16520478\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"ui = fem.Function(V, dtype=dtype)\\n\",\n \"M = action(a, ui)\\n\",\n \"M_fem = fem.form(M, dtype=dtype)\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"89ab9c80\",\n+ \"id\": \"dfb0e2b5\",\n \"metadata\": {},\n \"source\": [\n \"### Matrix-free conjugate gradient solver\\n\",\n \"\\n\",\n \"The right hand side vector $b - A x_{\\\\rm bc}$ is the assembly of the linear\\n\",\n \"form $L$ where the essential Dirichlet boundary conditions are implemented\\n\",\n \"using lifting. Since we want to avoid assembling the matrix `A`, we compute\\n\",\n \"the necessary matrix-vector product using the linear form `M` explicitly.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"1fbdfc62\",\n+ \"id\": \"80d3ff13\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"# Apply lifting: b <- b - A * x_bc\\n\",\n \"b = fem.assemble_vector(L_fem)\\n\",\n \"ui.x.array[:] = 0.0\\n\",\n \"bc.set(ui.x.array, alpha=-1.0)\\n\",\n \"fem.assemble_vector(b.array, M_fem)\\n\",\n \"b.scatter_reverse(la.InsertMode.add)\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"a328f730\",\n+ \"id\": \"e64e97c9\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"# Set BC dofs to zero on right hand side\\n\",\n \"bc.set(b.array, alpha=0.0)\\n\",\n \"b.scatter_forward()\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"4b311d03\",\n+ \"id\": \"05333362\",\n \"metadata\": {\n \"lines_to_next_cell\": 2\n },\n \"source\": [\n \"To implement the matrix-free CG solver using *DOLFINx* vectors, we define the\\n\",\n \"function `action_A` to compute the matrix-vector product $y = A x$.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"b4cd6618\",\n+ \"id\": \"1957ea0f\",\n \"metadata\": {\n \"lines_to_next_cell\": 2\n },\n \"outputs\": [],\n \"source\": [\n \"def action_A(x, y):\\n\",\n \" # Set coefficient vector of the linear form M and ensure it is updated\\n\",\n@@ -337,15 +337,15 @@\n \"\\n\",\n \" # Set BC dofs to zero\\n\",\n \" bc.set(y.array, alpha=0.0)\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"38d21df8\",\n+ \"id\": \"e2ce3299\",\n \"metadata\": {\n \"lines_to_next_cell\": 2\n },\n \"source\": [\n \"### Basic conjugate gradient solver\\n\",\n \"\\n\",\n \"Solves the problem `A x = b`, using the function `action_A` as the operator,\\n\",\n@@ -353,15 +353,15 @@\n \"vector. `comm` is the MPI Communicator, `max_iter` is the maximum number of\\n\",\n \"iterations, `rtol` is the relative tolerance.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"52107dd9\",\n+ \"id\": \"3155d87c\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"def cg(comm, action_A, x: la.Vector, b: la.Vector, max_iter: int = 200, rtol: float = 1e-6):\\n\",\n \" rtol2 = rtol**2\\n\",\n \"\\n\",\n \" nr = b.index_map.size_local\\n\",\n@@ -399,61 +399,61 @@\n \" p.array[:] = beta * p.array + r\\n\",\n \"\\n\",\n \" raise RuntimeError(f\\\"Solver exceeded max iterations ({max_iter}).\\\")\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"a0ca701a\",\n+ \"id\": \"52876218\",\n \"metadata\": {},\n \"source\": [\n \"This matrix-free solver is now used to compute the finite element solution.\\n\",\n \"The finite element solution's approximation error as compared with the\\n\",\n \"exact solution is measured in the $L_2$-norm.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"b86df4db\",\n+ \"id\": \"deb09cec\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"rtol = 1e-6\\n\",\n \"u = fem.Function(V, dtype=dtype)\\n\",\n \"iter_cg1 = cg(mesh.comm, action_A, u.x, b, max_iter=200, rtol=rtol)\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"c02de235\",\n+ \"id\": \"d3859dea\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"# Set BC values in the solution vector\\n\",\n \"bc.set(u.x.array, alpha=1.0)\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"f16b72be\",\n+ \"id\": \"69a6389e\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"def L2Norm(u):\\n\",\n \" val = fem.assemble_scalar(fem.form(inner(u, u) * dx, dtype=dtype))\\n\",\n \" return np.sqrt(comm.allreduce(val, op=MPI.SUM))\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"a32b4ede\",\n+ \"id\": \"306be91d\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"# Print CG iteration number and error\\n\",\n \"error_L2_cg1 = L2Norm(u - uD)\\n\",\n \"if mesh.comm.rank == 0:\\n\",\n \" print(\\\"Matrix-free CG solver using DOLFINx vectors:\\\")\\n\",\n"}]}]}, {"source1": "./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/demo_mixed-poisson.ipynb.gz", "source2": "./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/demo_mixed-poisson.ipynb.gz", "unified_diff": null, "details": [{"source1": "demo_mixed-poisson.ipynb", "source2": "demo_mixed-poisson.ipynb", "unified_diff": null, "details": [{"source1": "Pretty-printed", "source2": "Pretty-printed", "comments": ["Similarity: 0.9856770833333333%", "Differences: {\"'cells'\": \"{0: {'id': '8a0753a5'}, 1: {'id': 'f2abc7a6'}, 2: {'id': 'bc805046'}, 3: {'id': \"", " \"'eb43a854'}}\"}"], "unified_diff": "@@ -1,32 +1,32 @@\n {\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"a641cf1f\",\n+ \"id\": \"8a0753a5\",\n \"metadata\": {},\n \"source\": [\n \"# Mixed formulation for the Poisson equation\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"8aea2819\",\n+ \"id\": \"f2abc7a6\",\n \"metadata\": {},\n \"source\": [\n \"This demo illustrates how to solve Poisson equation using a mixed\\n\",\n \"(two-field) formulation. In particular, it illustrates how to\\n\",\n \"\\n\",\n \"* Use mixed and non-continuous finite element spaces.\\n\",\n \"* Set essential boundary conditions for subspaces and $H(\\\\mathrm{div})$ spaces.\\n\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"9f1a1455\",\n+ \"id\": \"bc805046\",\n \"metadata\": {},\n \"source\": [\n \"```{admonition} Download sources\\n\",\n \":class: download\\n\",\n \"\\n\",\n \"* {download}`Python script <./demo_mixed-poisson.py>`\\n\",\n \"* {download}`Jupyter notebook <./demo_mixed-poisson.ipynb>`\\n\",\n@@ -99,15 +99,15 @@\n \"\\n\",\n \"## Implementation\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"27e16369\",\n+ \"id\": \"eb43a854\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"\\n\",\n \"try:\\n\",\n \" from petsc4py import PETSc\\n\",\n \"\\n\",\n"}]}]}]}]}]}]}