{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.6fZfswg0/b1/fenics-dolfinx_0.9.0-7_i386.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.6fZfswg0/b2/fenics-dolfinx_0.9.0-7_i386.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,9 +1,9 @@\n \n- 455f1b54744c7ce6aba42ff9f5a05b64 1237300 doc optional dolfinx-doc_0.9.0-7_all.deb\n+ 33e7ef19881a568dd7f9f6a1acd59d52 1237308 doc optional dolfinx-doc_0.9.0-7_all.deb\n 9b56320a45a721881a2f3413bf8e0436 48780 libdevel optional libdolfinx-complex-dev_0.9.0-7_i386.deb\n 87a2b8d7a80c39799505a47d74512b80 10962284 debug optional libdolfinx-complex0.9-dbgsym_0.9.0-7_i386.deb\n acd1080b2d3c5e02ec0e42fda6502d75 596420 libs optional libdolfinx-complex0.9_0.9.0-7_i386.deb\n 3e55ece822c24a5b5696761076088e84 201808 libdevel optional libdolfinx-dev_0.9.0-7_i386.deb\n 5bb2e69dfbece945a579938da85a2b6e 48756 libdevel optional libdolfinx-real-dev_0.9.0-7_i386.deb\n 781a1405e9fb76b4fc17a79ecee42457 10961564 debug optional libdolfinx-real0.9-dbgsym_0.9.0-7_i386.deb\n 02e3290b8cb1741f72077cf8d5231670 596540 libs optional libdolfinx-real0.9_0.9.0-7_i386.deb\n"}, {"source1": "dolfinx-doc_0.9.0-7_all.deb", "source2": "dolfinx-doc_0.9.0-7_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 2025-03-29 15:17:31.000000 debian-binary\n -rw-r--r-- 0 0 0 21932 2025-03-29 15:17:31.000000 control.tar.xz\n--rw-r--r-- 0 0 0 1215176 2025-03-29 15:17:31.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 1215184 2025-03-29 15:17:31.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 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/56ce7e71d8c71b4d8ef7c699176dd4fd/\n -rw-r--r-- 0 root (0) root (0) 19507 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/56ce7e71d8c71b4d8ef7c699176dd4fd/demo_stokes.py\n drwxr-xr-x 0 root (0) root (0) 0 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/67f8546536727bd5386a27073bd16e12/\n -rw-r--r-- 0 root (0) root (0) 8141 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/67f8546536727bd5386a27073bd16e12/demo_elasticity.py\n drwxr-xr-x 0 root (0) root (0) 0 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/6ad57720b461988475bd5c9286e3f111/\n -rw-r--r-- 0 root (0) root (0) 7325 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/6ad57720b461988475bd5c9286e3f111/demo_types.py\n drwxr-xr-x 0 root (0) root (0) 0 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/\n--rw-r--r-- 0 root (0) root (0) 3862 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/demo_poisson_matrix_free.ipynb.gz\n+-rw-r--r-- 0 root (0) root (0) 3865 2025-03-29 15:17:31.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 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/\n--rw-r--r-- 0 root (0) root (0) 2719 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/demo_mixed-poisson.ipynb.gz\n+-rw-r--r-- 0 root (0) root (0) 2718 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/demo_mixed-poisson.ipynb.gz\n drwxr-xr-x 0 root (0) root (0) 0 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/b94ac7be61dc3726ca331afd20f195d2/\n -rw-r--r-- 0 root (0) root (0) 5886 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/b94ac7be61dc3726ca331afd20f195d2/demo_poisson.py\n drwxr-xr-x 0 root (0) root (0) 0 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8140d02a100265518e126a3cfe79d8e/\n -rw-r--r-- 0 root (0) root (0) 3877 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8140d02a100265518e126a3cfe79d8e/demo_interpolation-io.py\n drwxr-xr-x 0 root (0) root (0) 0 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8b180b39a27d7b04c2f666d14475ee3/\n -rw-r--r-- 0 root (0) root (0) 11424 2025-03-29 15:17:31.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8b180b39a27d7b04c2f666d14475ee3/demo_cahn-hilliard.py\n drwxr-xr-x 0 root (0) root (0) 0 2025-03-29 15:17:31.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': '63abf3e9'}, 1: {'id': '5c25f601'}, 2: {'id': '352bcff3'}, 3: {'id': \"", " \"'e1f5fdfb'}, 4: {'id': '5f85779d'}, 5: {'id': '760b3639'}, 6: {'id': '117dbba1'}, 7: \"", " \"{'id': 'f7736ed1'}, 8: {'id': 'dc65f878'}, 9: {'id': '76b17221'}, 10: {'id': \"", " \"'f977018e'}, 11: {'id': '7ff34789'}, 12: {'id': 'b127615b'}, 13: {'id': '39bef84c'}, \"", " \"14: {'id': '72cc44e3'}, 15: {'id': '45b3a7a0'}, 16: {'id': '38e17b5e'}, 17: {'id': \"", " \"'a8da507e'}, 1 [\u2026]"], "unified_diff": "@@ -1,12 +1,12 @@\n {\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"823554d5\",\n+ \"id\": \"63abf3e9\",\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\": \"7a409088\",\n+ \"id\": \"5c25f601\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"from mpi4py import MPI\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"621a9fb6\",\n+ \"id\": \"352bcff3\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"import numpy as np\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"1bbfd5d3\",\n+ \"id\": \"e1f5fdfb\",\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\": \"3f1e80c2\",\n+ \"id\": \"5f85779d\",\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\": \"93aaadb3\",\n+ \"id\": \"760b3639\",\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\": \"7de1ed56\",\n+ \"id\": \"117dbba1\",\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\": \"baccd7eb\",\n+ \"id\": \"f7736ed1\",\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\": \"31845dad\",\n+ \"id\": \"dc65f878\",\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\": \"9159004e\",\n+ \"id\": \"76b17221\",\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\": \"d3633de4\",\n+ \"id\": \"f977018e\",\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\": \"1ec9b88f\",\n+ \"id\": \"7ff34789\",\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\": \"abd751ea\",\n+ \"id\": \"b127615b\",\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\": \"9da0e7ac\",\n+ \"id\": \"39bef84c\",\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\": \"1386dafe\",\n+ \"id\": \"72cc44e3\",\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\": \"8829a5b9\",\n+ \"id\": \"45b3a7a0\",\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\": \"75e05b98\",\n+ \"id\": \"38e17b5e\",\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\": \"4d5a8f5f\",\n+ \"id\": \"a8da507e\",\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\": \"9ce2fbca\",\n+ \"id\": \"ad458aa5\",\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\": \"fda2e742\",\n+ \"id\": \"f2f84609\",\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\": \"eb85e517\",\n+ \"id\": \"14cf59e6\",\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\": \"ee1a7b16\",\n+ \"id\": \"7ae635f2\",\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\": \"32b4160b\",\n+ \"id\": \"c2a6215d\",\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\": \"2605882e\",\n+ \"id\": \"579d3e51\",\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\": \"2da50c11\",\n+ \"id\": \"a3b57c51\",\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\": \"436caebc\",\n+ \"id\": \"f1d8cc70\",\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\": \"aa5d0bab\",\n+ \"id\": \"a9ac04f5\",\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\": \"9d753c17\",\n+ \"id\": \"af414ac1\",\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\": \"2af7584b\",\n+ \"id\": \"bd67b20e\",\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': '0ffc91c7'}, 1: {'id': '40a7c1db'}, 2: {'id': '2f0eba29'}, 3: {'id': \"", " \"'cafdc51d'}}\"}"], "unified_diff": "@@ -1,32 +1,32 @@\n {\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"eb82dc22\",\n+ \"id\": \"0ffc91c7\",\n \"metadata\": {},\n \"source\": [\n \"# Mixed formulation for the Poisson equation\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"8e4cbace\",\n+ \"id\": \"40a7c1db\",\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\": \"69d835b5\",\n+ \"id\": \"2f0eba29\",\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\": \"1a0d619c\",\n+ \"id\": \"cafdc51d\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"\\n\",\n \"try:\\n\",\n \" from petsc4py import PETSc\\n\",\n \"\\n\",\n"}]}]}]}]}]}]}