{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.HzlvVOMf/b1/fenics-dolfinx_0.9.0-5_i386.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.HzlvVOMf/b2/fenics-dolfinx_0.9.0-5_i386.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,9 +1,9 @@\n \n- 03c42727f292279aead059af32f15496 1236916 doc optional dolfinx-doc_0.9.0-5_all.deb\n+ 7ffb16fba72e713fe3afb2f450718cc5 1236920 doc optional dolfinx-doc_0.9.0-5_all.deb\n 6db69c2cb006a94e746c51d5ed38bf73 48520 libdevel optional libdolfinx-complex-dev_0.9.0-5_i386.deb\n 643f8e715d5cb18c97c25d8260903605 10995892 debug optional libdolfinx-complex0.9-dbgsym_0.9.0-5_i386.deb\n 856634f94ebd291c0775f55ae82121ef 595764 libs optional libdolfinx-complex0.9_0.9.0-5_i386.deb\n c1905ac570198068f9069c41addd3310 201520 libdevel optional libdolfinx-dev_0.9.0-5_i386.deb\n 39ac8ea6604d5277f36278705339e254 48508 libdevel optional libdolfinx-real-dev_0.9.0-5_i386.deb\n d87b17df26785fb68171ff7d022b6040 10994160 debug optional libdolfinx-real0.9-dbgsym_0.9.0-5_i386.deb\n 37ecd9b2106f703d03fd5403d35405e2 595968 libs optional libdolfinx-real0.9_0.9.0-5_i386.deb\n"}, {"source1": "dolfinx-doc_0.9.0-5_all.deb", "source2": "dolfinx-doc_0.9.0-5_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-02 15:55:08.000000 debian-binary\n--rw-r--r-- 0 0 0 21928 2024-12-02 15:55:08.000000 control.tar.xz\n--rw-r--r-- 0 0 0 1214796 2024-12-02 15:55:08.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 21924 2024-12-02 15:55:08.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 1214804 2024-12-02 15:55:08.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-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/56ce7e71d8c71b4d8ef7c699176dd4fd/\n -rw-r--r-- 0 root (0) root (0) 19507 2024-12-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/56ce7e71d8c71b4d8ef7c699176dd4fd/demo_stokes.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-12-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/67f8546536727bd5386a27073bd16e12/\n -rw-r--r-- 0 root (0) root (0) 8141 2024-12-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/67f8546536727bd5386a27073bd16e12/demo_elasticity.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-12-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/6ad57720b461988475bd5c9286e3f111/\n -rw-r--r-- 0 root (0) root (0) 7325 2024-12-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/6ad57720b461988475bd5c9286e3f111/demo_types.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-12-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/\n--rw-r--r-- 0 root (0) root (0) 3864 2024-12-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/demo_poisson_matrix_free.ipynb.gz\n+-rw-r--r-- 0 root (0) root (0) 3866 2024-12-02 15:55:08.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-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/\n--rw-r--r-- 0 root (0) root (0) 2723 2024-12-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/demo_mixed-poisson.ipynb.gz\n+-rw-r--r-- 0 root (0) root (0) 2719 2024-12-02 15:55:08.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-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/b94ac7be61dc3726ca331afd20f195d2/\n -rw-r--r-- 0 root (0) root (0) 5886 2024-12-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/b94ac7be61dc3726ca331afd20f195d2/demo_poisson.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-12-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8140d02a100265518e126a3cfe79d8e/\n -rw-r--r-- 0 root (0) root (0) 3877 2024-12-02 15:55:08.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-02 15:55:08.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8b180b39a27d7b04c2f666d14475ee3/\n -rw-r--r-- 0 root (0) root (0) 11424 2024-12-02 15:55:08.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-02 15:55:08.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': 'b75f4c45'}, 1: {'id': '69a5d155'}, 2: {'id': '0639e63c'}, 3: {'id': \"", " \"'c218cd23'}, 4: {'id': '4383f228'}, 5: {'id': 'c6b77459'}, 6: {'id': 'b70e4c73'}, 7: \"", " \"{'id': '28d0718d'}, 8: {'id': '77f987e9'}, 9: {'id': '4d953804'}, 10: {'id': \"", " \"'b2fde44b'}, 11: {'id': '86aab5b3'}, 12: {'id': '5fd38d9c'}, 13: {'id': '3b7feae3'}, \"", " \"14: {'id': '547b0904'}, 15: {'id': 'c12d4f6b'}, 16: {'id': 'e62f96d8'}, 17: {'id': \"", " \"'f36436e1'}, 1 [\u2026]"], "unified_diff": "@@ -1,12 +1,12 @@\n {\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"90131e3d\",\n+ \"id\": \"b75f4c45\",\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\": \"70e3bd59\",\n+ \"id\": \"69a5d155\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"from mpi4py import MPI\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"f0ba86d6\",\n+ \"id\": \"0639e63c\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"import numpy as np\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"06820f7e\",\n+ \"id\": \"c218cd23\",\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\": \"8f868cca\",\n+ \"id\": \"4383f228\",\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\": \"3c3b7ebf\",\n+ \"id\": \"c6b77459\",\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\": \"fd805e44\",\n+ \"id\": \"b70e4c73\",\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\": \"f7199b5d\",\n+ \"id\": \"28d0718d\",\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\": \"ff892017\",\n+ \"id\": \"77f987e9\",\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\": \"1772ec38\",\n+ \"id\": \"4d953804\",\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\": \"d729bf78\",\n+ \"id\": \"b2fde44b\",\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\": \"61cc96d4\",\n+ \"id\": \"86aab5b3\",\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\": \"f9a976a2\",\n+ \"id\": \"5fd38d9c\",\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\": \"22aa3840\",\n+ \"id\": \"3b7feae3\",\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\": \"44d911cb\",\n+ \"id\": \"547b0904\",\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\": \"6d5201fd\",\n+ \"id\": \"c12d4f6b\",\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\": \"ef60e551\",\n+ \"id\": \"e62f96d8\",\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\": \"1e6852b3\",\n+ \"id\": \"f36436e1\",\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\": \"4334a495\",\n+ \"id\": \"bcf4d24a\",\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\": \"8e67eb09\",\n+ \"id\": \"8f9f4f95\",\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\": \"5efd0b7c\",\n+ \"id\": \"46112776\",\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\": \"b6518ca5\",\n+ \"id\": \"d3667e6f\",\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\": \"d349c36d\",\n+ \"id\": \"26ac7ad2\",\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\": \"ba0ef83c\",\n+ \"id\": \"12aa669d\",\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\": \"f78e52cd\",\n+ \"id\": \"42a902b1\",\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\": \"b68a18fe\",\n+ \"id\": \"6bf5066a\",\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\": \"a6193c86\",\n+ \"id\": \"890e07a5\",\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\": \"ad7cc121\",\n+ \"id\": \"b65f6908\",\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\": \"7da0f4ae\",\n+ \"id\": \"6024decf\",\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': 'e50b217a'}, 1: {'id': 'abc4a017'}, 2: {'id': '4a505c8b'}, 3: {'id': \"", " \"'45e7a3b5'}}\"}"], "unified_diff": "@@ -1,32 +1,32 @@\n {\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"47714c19\",\n+ \"id\": \"e50b217a\",\n \"metadata\": {},\n \"source\": [\n \"# Mixed formulation for the Poisson equation\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"955b52f1\",\n+ \"id\": \"abc4a017\",\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\": \"03431362\",\n+ \"id\": \"4a505c8b\",\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\": \"c2f24914\",\n+ \"id\": \"45e7a3b5\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"\\n\",\n \"try:\\n\",\n \" from petsc4py import PETSc\\n\",\n \"\\n\",\n"}]}]}]}]}]}]}