From 76f9eae437d410489617f46811cb72f12e667be6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20S=2E=20Dokken?= Date: Fri, 5 Jan 2024 15:19:02 +0100 Subject: [PATCH] Update tutorial for dolfinx v0.7.x --- environment.yml | 2 +- notebooks/dolfinx_MPI_tutorial.ipynb | 290 +++++++++++++++++---------- 2 files changed, 180 insertions(+), 112 deletions(-) diff --git a/environment.yml b/environment.yml index c6e9364..09d73b1 100644 --- a/environment.yml +++ b/environment.yml @@ -14,7 +14,7 @@ dependencies: - pyvista>=0.43.* - autopep8 - jupyterlab - - fenics-dolfinx==0.6.* + - fenics-dolfinx==0.7.* - petsc4py - trame - ipywidgets diff --git a/notebooks/dolfinx_MPI_tutorial.ipynb b/notebooks/dolfinx_MPI_tutorial.ipynb index 7aabfa5..1786bc2 100644 --- a/notebooks/dolfinx_MPI_tutorial.ipynb +++ b/notebooks/dolfinx_MPI_tutorial.ipynb @@ -34,6 +34,33 @@ "from mpi4py import MPI" ] }, + { + "cell_type": "markdown", + "id": "df8f2aca-2e60-473f-99aa-618a6e79630c", + "metadata": {}, + "source": [ + "The demo is created for a specific version of DOLFINx, check the `environment.yml` file in the Github repository for compatible versions, or look at the version printed on below (on the web-page)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "edc8f27c-3c81-47ea-a6d7-7a2fc948f5f6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tutorial is compatible with DOLFINx 0.7.2\n" + ] + } + ], + "source": [ + "import dolfinx\n", + "print(f\"Tutorial is compatible with DOLFINx {dolfinx.__version__}\")" + ] + }, { "cell_type": "markdown", "id": "bcfffafd-83ee-4d09-a2db-303070669b0a", @@ -45,7 +72,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "3c140fdc", "metadata": { "tags": [] @@ -58,10 +85,17 @@ "Starting 2 engines with \n" ] }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:ipyparallel.cluster.cluster.1704464205-k453:Starting 2 engines with \n" + ] + }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3824c33e82734ec2a08e71231230b548", + "model_id": "6a82d6153a724497a33106b10d0a51da", "version_major": 2, "version_minor": 0 }, @@ -91,7 +125,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "09fec8d4-2f90-4c5c-89fe-b32e8c78cdf8", "metadata": { "tags": [] @@ -111,7 +145,8 @@ "Nx, Ny = 2, 2 # Mesh size\n", "\n", "# Create a unit square mesh\n", - "mesh = dfx.mesh.create_unit_square(comm, Nx, Ny, ghost_mode = dfx.cpp.mesh.GhostMode.shared_facet)" + "mesh = dfx.mesh.create_unit_square(comm, Nx, Ny, ghost_mode = dfx.cpp.mesh.GhostMode.shared_facet)\n", + "tdim = mesh.topology.dim" ] }, { @@ -124,7 +159,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "6d77bdc4-d4c2-4326-b2ca-ed9b43272229", "metadata": { "tags": [] @@ -133,14 +168,14 @@ { "data": { "text/plain": [ - "[stdout:1] Cell (dim = 2) to facet (dim = 1) connectivity:\n", - "Rank 1: with 6 nodes\n", - " 0: [1 7 0 ]\n", - " 1: [3 2 1 ]\n", - " 2: [5 2 4 ]\n", - " 3: [6 8 3 ]\n", - " 4: [10 7 9 ]\n", - " 5: [12 8 11 ]\n", + "[stdout:0] Cell (dim = 2) to facet (dim = 1) connectivity:\n", + "Rank 0: with 6 nodes\n", + " 0: [0 3 1 ]\n", + " 1: [4 3 8 ]\n", + " 2: [2 6 4 ]\n", + " 3: [5 6 7 ]\n", + " 4: [8 11 10 ]\n", + " 5: [7 9 12 ]\n", "\n" ] }, @@ -150,14 +185,14 @@ { "data": { "text/plain": [ - "[stdout:0] Cell (dim = 2) to facet (dim = 1) connectivity:\n", - "Rank 0: with 6 nodes\n", - " 0: [5 8 4 ]\n", - " 1: [6 0 5 ]\n", - " 2: [2 0 1 ]\n", - " 3: [3 7 6 ]\n", - " 4: [10 8 9 ]\n", - " 5: [11 7 12 ]\n", + "[stdout:1] Cell (dim = 2) to facet (dim = 1) connectivity:\n", + "Rank 1: with 6 nodes\n", + " 0: [7 1 0 ]\n", + " 1: [3 1 2 ]\n", + " 2: [9 5 3 ]\n", + " 3: [6 5 4 ]\n", + " 4: [10 8 7 ]\n", + " 5: [12 11 9 ]\n", "\n" ] }, @@ -167,9 +202,9 @@ ], "source": [ "%%px\n", - "mesh.topology.create_connectivity(2, 1)\n", - "print(\"Cell (dim = 2) to facet (dim = 1) connectivity:\")\n", - "mpi_print(mesh.topology.connectivity(2, 1))" + "mesh.topology.create_connectivity(tdim, tdim-1)\n", + "print(f\"Cell (dim = {tdim}) to facet (dim = {tdim-1}) connectivity:\")\n", + "mpi_print(mesh.topology.connectivity(tdim, tdim-1))" ] }, { @@ -182,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "8d8e71e5-ba72-4aa3-83df-24692e01cab6", "metadata": { "tags": [] @@ -191,7 +226,7 @@ { "data": { "text/plain": [ - "[stdout:0] Rank 0: Ghost cells (global numbering): [4 7]\n" + "[stdout:1] Rank 1: Ghost cells (global numbering): [1 3]\n" ] }, "metadata": {}, @@ -200,7 +235,7 @@ { "data": { "text/plain": [ - "[stdout:1] Rank 1: Ghost cells (global numbering): [0 3]\n" + "[stdout:0] Rank 0: Ghost cells (global numbering): [4 6]\n" ] }, "metadata": {}, @@ -209,7 +244,7 @@ ], "source": [ "%%px\n", - "mpi_print(f\"Ghost cells (global numbering): {mesh.topology.index_map(2).ghosts}\")" + "mpi_print(f\"Ghost cells (global numbering): {mesh.topology.index_map(tdim).ghosts}\")" ] }, { @@ -225,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "ca8b487d-09e4-45c4-bd90-784f511f74d3", "metadata": { "tags": [] @@ -234,9 +269,9 @@ { "data": { "text/plain": [ - "[stdout:0] Rank 0: Global dofmap size: 9\n", - "Rank 0: Local dofmap size: 4\n", - "Rank 0: Ghosts: [4 6 5 7]\n" + "[stdout:1] Rank 1: Global dofmap size: 9\n", + "Rank 1: Local dofmap size: 5\n", + "Rank 1: Ghosts: [3 1 2]\n" ] }, "metadata": {}, @@ -245,9 +280,9 @@ { "data": { "text/plain": [ - "[stdout:1] Rank 1: Global dofmap size: 9\n", - "Rank 1: Local dofmap size: 5\n", - "Rank 1: Ghosts: [3 0 1]\n" + "[stdout:0] Rank 0: Global dofmap size: 9\n", + "Rank 0: Local dofmap size: 4\n", + "Rank 0: Ghosts: [5 6 4 7]\n" ] }, "metadata": {}, @@ -274,7 +309,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "8fa7a806-d9ee-405c-965e-6fec591e028c", "metadata": { "tags": [] @@ -304,8 +339,8 @@ "source": [ "%%px\n", "u = dfx.fem.Function(V)\n", - "mpi_print(f\"Local size of array: {u.x.map.size_local}\")\n", - "mpi_print(f\"Global size of array: {u.x.map.size_global}\")" + "mpi_print(f\"Local size of array: {u.x.index_map.size_local}\")\n", + "mpi_print(f\"Global size of array: {u.x.index_map.size_global}\")" ] }, { @@ -320,7 +355,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "id": "0699659e-9d73-48d2-a0be-36f3288dedea", "metadata": { "tags": [] @@ -329,8 +364,8 @@ { "data": { "text/plain": [ - "[stdout:0] Rank 0: Ghosts: [4 6 5 7]\n", - "Rank 0: Ghost owners: [1 1 1 1]\n" + "[stdout:1] Rank 1: Ghosts: [3 1 2]\n", + "Rank 1: Ghost owners: [0 0 0]\n" ] }, "metadata": {}, @@ -339,8 +374,8 @@ { "data": { "text/plain": [ - "[stdout:1] Rank 1: Ghosts: [3 0 1]\n", - "Rank 1: Ghost owners: [0 0 0]\n" + "[stdout:0] Rank 0: Ghosts: [5 6 4 7]\n", + "Rank 0: Ghost owners: [1 1 1 1]\n" ] }, "metadata": {}, @@ -349,8 +384,8 @@ ], "source": [ "%%px\n", - "mpi_print(f\"Ghosts: {u.x.map.ghosts}\")\n", - "mpi_print(f\"Ghost owners: {u.x.map.owners}\")" + "mpi_print(f\"Ghosts: {u.x.index_map.ghosts}\")\n", + "mpi_print(f\"Ghost owners: {u.x.index_map.owners}\")" ] }, { @@ -364,7 +399,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "id": "230c3bb9-3b52-4450-870a-f2d8541b6457", "metadata": { "tags": [] @@ -392,7 +427,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "id": "3f8dbf3b-12ac-428e-a078-906277074abc", "metadata": { "tags": [] @@ -401,7 +436,7 @@ { "data": { "text/plain": [ - "\u001b[0;31mOut[0:8]: \u001b[0m" + "\u001b[0;31mOut[0:8]: \u001b[0m" ] }, "metadata": { @@ -409,12 +444,12 @@ "completed": null, "data": {}, "engine_id": 0, - "engine_uuid": "a3acd193-f5de95f14ec6420dd3d690db", + "engine_uuid": "1bc9bd39-f4e418ff27d83eda08b4d4fd", "error": null, - "execute_input": "\nimport ufl\n\n# UFL form of right-hand side\nL = ufl.inner(1.0, v) * ufl.dx\nL = dfx.fem.form(L)\n\n# Assemble UFL form into a vector\n_b = dfx.fem.Function(V)\ndfx.fem.petsc.assemble_vector(_b.vector, L)\n", + "execute_input": "\nimport ufl\nimport dolfinx.fem.petsc as dfx_petsc\n\n# UFL form of right-hand side\nL = ufl.inner(1.0, v) * ufl.dx\nL = dfx.fem.form(L)\n\n# Assemble UFL form into a vector\n_b = dfx.fem.Function(V)\ndfx_petsc.assemble_vector(_b.vector, L)\n", "execute_result": { "data": { - "text/plain": "" + "text/plain": "" }, "execution_count": 8, "metadata": {} @@ -427,14 +462,14 @@ "status": null, "stderr": "", "stdout": "", - "submitted": "2024-01-05T13:24:08.239508Z" + "submitted": "2024-01-05T14:16:52.058757Z" }, "output_type": "display_data" }, { "data": { "text/plain": [ - "\u001b[0;31mOut[1:8]: \u001b[0m" + "\u001b[0;31mOut[1:8]: \u001b[0m" ] }, "metadata": { @@ -442,12 +477,12 @@ "completed": null, "data": {}, "engine_id": 1, - "engine_uuid": "a29d2826-5c940569d592fb790538480e", + "engine_uuid": "ec8ea40d-b1909ea8d9ea691459452f72", "error": null, - "execute_input": "\nimport ufl\n\n# UFL form of right-hand side\nL = ufl.inner(1.0, v) * ufl.dx\nL = dfx.fem.form(L)\n\n# Assemble UFL form into a vector\n_b = dfx.fem.Function(V)\ndfx.fem.petsc.assemble_vector(_b.vector, L)\n", + "execute_input": "\nimport ufl\nimport dolfinx.fem.petsc as dfx_petsc\n\n# UFL form of right-hand side\nL = ufl.inner(1.0, v) * ufl.dx\nL = dfx.fem.form(L)\n\n# Assemble UFL form into a vector\n_b = dfx.fem.Function(V)\ndfx_petsc.assemble_vector(_b.vector, L)\n", "execute_result": { "data": { - "text/plain": "" + "text/plain": "" }, "execution_count": 8, "metadata": {} @@ -460,7 +495,7 @@ "status": null, "stderr": "", "stdout": "", - "submitted": "2024-01-05T13:24:08.239653Z" + "submitted": "2024-01-05T14:16:52.058870Z" }, "output_type": "display_data" } @@ -469,6 +504,7 @@ "%%px\n", "\n", "import ufl\n", + "import dolfinx.fem.petsc as dfx_petsc\n", "\n", "# UFL form of right-hand side\n", "L = ufl.inner(1.0, v) * ufl.dx\n", @@ -476,7 +512,7 @@ "\n", "# Assemble UFL form into a vector\n", "_b = dfx.fem.Function(V)\n", - "dfx.fem.petsc.assemble_vector(_b.vector, L)" + "dfx_petsc.assemble_vector(_b.vector, L)" ] }, { @@ -489,7 +525,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "id": "b2a21284-0e1e-4c60-ac48-4018c36e0681", "metadata": { "tags": [] @@ -499,7 +535,7 @@ "data": { "text/plain": [ "[stdout:0] After assembly, prior to communication\n", - "Rank 0: [0.125 0.125 0.04166667 0.04166667 0.04166667 0.125\n", + "Rank 0: [0.04166667 0.125 0.08333333 0.04166667 0.08333333 0.125\n", " 0. 0. ]\n" ] }, @@ -510,7 +546,7 @@ "data": { "text/plain": [ "[stdout:1] After assembly, prior to communication\n", - "Rank 1: [0.04166667 0.125 0.125 0.125 0.04166667 0.04166667\n", + "Rank 1: [0.08333333 0.04166667 0.125 0.125 0.04166667 0.08333333\n", " 0. 0. ]\n" ] }, @@ -529,12 +565,12 @@ "id": "b150a3dd-a283-4230-b9a2-f6309836ecd4", "metadata": {}, "source": [ - "First, we well add values from ghost regions and accumulate them on the owning process. To do this, we use the scatter_reverse function with ScatterMode \"add\":" + "First, we well add values from ghost regions and accumulate them on the owning process. To do this, we use the scatter_reverse function with insertion mode \"add\":" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "id": "e8e1b2fe-944b-4944-970d-908ec9ab068b", "metadata": { "tags": [] @@ -544,7 +580,7 @@ "data": { "text/plain": [ "[stdout:0] After ADD/REVERSE update\n", - "Rank 0: [0.125 0.125 0.04166667 0.08333333 0.04166667 0.125\n", + "Rank 0: [0.04166667 0.125 0.08333333 0.125 0.08333333 0.125\n", " 0. 0. ]\n" ] }, @@ -555,7 +591,7 @@ "data": { "text/plain": [ "[stdout:1] After ADD/REVERSE update\n", - "Rank 1: [0.08333333 0.125 0.25 0.125 0.04166667 0.04166667\n", + "Rank 1: [0.08333333 0.125 0.25 0.125 0.04166667 0.08333333\n", " 0. 0. ]\n" ] }, @@ -567,7 +603,7 @@ "%%px\n", "\n", "# Add values from ghost regions and accumulate them on the owning process\n", - "_b.x.scatter_reverse(dfx.la.ScatterMode.add)\n", + "_b.x.scatter_reverse(dfx.la.InsertMode.add)\n", "\n", "print(\"After ADD/REVERSE update\")\n", "mpi_print(_b.x.array) " @@ -583,7 +619,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "6f7059a8-e73c-49d7-8b0c-417f80a8f065", "metadata": { "tags": [] @@ -593,8 +629,8 @@ "data": { "text/plain": [ "[stdout:1] After INSERT/FORWARD update\n", - "Rank 1: [0.08333333 0.125 0.25 0.125 0.04166667 0.08333333\n", - " 0.125 0.125 ]\n" + "Rank 1: [0.08333333 0.125 0.25 0.125 0.04166667 0.125\n", + " 0.125 0.08333333]\n" ] }, "metadata": {}, @@ -604,8 +640,8 @@ "data": { "text/plain": [ "[stdout:0] After INSERT/FORWARD update\n", - "Rank 0: [0.125 0.125 0.04166667 0.08333333 0.08333333 0.25\n", - " 0.125 0.125 ]\n" + "Rank 0: [0.04166667 0.125 0.08333333 0.125 0.125 0.25\n", + " 0.08333333 0.125 ]\n" ] }, "metadata": {}, @@ -673,7 +709,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "id": "1bd0b245-b1e4-4d1f-9e11-a12e652a4bcb", "metadata": { "tags": [] @@ -682,7 +718,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "88ccb6e2923645158224db0e634205f7", + "model_id": "e34379e2c4da4d57802917ab560a4dc1", "version_major": 2, "version_minor": 0 }, @@ -698,7 +734,6 @@ "%%px\n", "\n", "import ufl\n", - "from petsc4py import PETSc\n", "import pyvista as pv\n", "pv.start_xvfb()\n", "comm = MPI.COMM_WORLD # MPI communicator\n", @@ -719,7 +754,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "id": "c0b6c0e2-c61d-41de-9ac9-cc65c7312eae", "metadata": { "tags": [] @@ -743,7 +778,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "id": "e367aa2a-2470-4e6b-b004-c1cf05ebf44f", "metadata": { "tags": [] @@ -772,7 +807,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "id": "b23e1a12-a624-4fe3-91ea-55ec93be5180", "metadata": { "tags": [] @@ -781,7 +816,7 @@ "source": [ "%%px\n", "\n", - "f = dfx.fem.Constant(mesh, PETSc.ScalarType(1.0)) # Constant source term f = 1\n", + "f = dfx.fem.Constant(mesh, dfx.default_scalar_type(1.0)) # Constant source term f = 1\n", "\n", "# UFL form of the bilinear form\n", "a = ufl.inner(ufl.grad(u), ufl.grad(v)) * ufl.dx\n", @@ -802,7 +837,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "id": "d1578746-f56d-49b0-8c3a-5509e395b54e", "metadata": { "tags": [] @@ -832,7 +867,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "id": "92f21316-ab63-444e-81de-92c16923df8a", "metadata": { "tags": [] @@ -841,7 +876,7 @@ { "data": { "text/plain": [ - "[stdout:0] Rank 0: [0. 0. 0. 0. 0.08333333 0.25 ]\n" + "[stdout:1] Rank 1: [0. 0. 0. 0.25 0. 0.125]\n" ] }, "metadata": {}, @@ -850,7 +885,7 @@ { "data": { "text/plain": [ - "[stdout:1] Rank 1: [0. 0. 0.25 0. 0. 0.08333333]\n" + "[stdout:0] Rank 0: [0. 0. 0. 0. 0.125 0.25 ]\n" ] }, "metadata": {}, @@ -861,16 +896,16 @@ "%%px\n", "\n", "# Assemble matrix from the bilinear form\n", - "A = dfx.fem.petsc.assemble_matrix(bilinear_form, bcs = bcs)\n", + "A = dfx_petsc.assemble_matrix(bilinear_form, bcs = bcs)\n", "A.assemble()\n", "\n", "# Assemble UFL form into a vector\n", "_b = dfx.fem.Function(V) # Dolfinx function of right-hand side\n", - "dfx.fem.petsc.assemble_vector(_b.vector, linear_form)\n", - "dfx.fem.petsc.apply_lifting(_b.vector, [bilinear_form], bcs = [bcs])\n", - "_b.x.scatter_reverse(dfx.la.ScatterMode.add)\n", + "dfx_petsc.assemble_vector(_b.vector, linear_form)\n", + "dfx_petsc.apply_lifting(_b.vector, [bilinear_form], bcs = [bcs])\n", + "_b.x.scatter_reverse(dfx.la.InsertMode.add)\n", "_b.x.scatter_forward()\n", - "dfx.fem.petsc.set_bc(_b.vector, bcs = bcs)\n", + "dfx_petsc.set_bc(_b.vector, bcs = bcs)\n", "mpi_print(_b.x.array)" ] }, @@ -879,14 +914,14 @@ "id": "b5afc3a3-6cc6-476a-8577-c06a7d9e103e", "metadata": {}, "source": [ - "Note the use of apply_lifting and scatter_reverse/scatter_forward before using set_bc. This is important to not lose any information due to lack of communication between the processors running in parallel.\n", + "Note the use of `apply_lifting` and `scatter_reverse`/`scatter_forward` before using `set_bc`. This is important to not lose any information due to lack of communication between the processors running in parallel.\n", "\n", "To solve the problem, we will use a direct Krylov solver with LU decomposition as preconditioner. MUMPS is used as the factor solver type." ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 23, "id": "be89390b-ca0c-4b47-b3d3-bdab4a9f6ec3", "metadata": { "tags": [] @@ -896,7 +931,8 @@ "%%px\n", "\n", "# Create a (direct) linear solver\n", - "solver = PETSc.KSP().create(mesh.comm)\n", + "from petsc4py.PETSc import KSP\n", + "solver = KSP().create(mesh.comm)\n", "solver.setOperators(A)\n", "solver.setType(\"preonly\")\n", "solver.getPC().setType(\"lu\")\n", @@ -913,7 +949,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 24, "id": "65d71d42-60b9-499c-ad92-0554b15f6ed7", "metadata": { "tags": [] @@ -930,12 +966,12 @@ "id": "7009aad7-a6e2-47ee-9b42-330ef893e18c", "metadata": {}, "source": [ - "After solving the system of equations in parallel, it is important to use scatter_forward() to distribute the information from the owning processes to their ghost nodes." + "After solving the system of equations in parallel, it is important to use `scatter_forward()` to distribute the information from the owning processes to their ghost nodes." ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 25, "id": "6fe0266f-7b4f-466f-9350-44c7c54d09d5", "metadata": { "tags": [] @@ -945,9 +981,9 @@ "data": { "text/plain": [ "[stdout:1] Prior to communication\n", - "Rank 1: [0. 0. 0.0625 0. 0. 0. ]\n", + "Rank 1: [0. 0. 0. 0.0625 0. 0. ]\n", "After scatter_forward() update\n", - "Rank: 1: [0. 0. 0.0625 0. 0. 0. ]\n" + "Rank: 1: [0. 0. 0. 0.0625 0. 0. ]\n" ] }, "metadata": {}, @@ -989,7 +1025,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 26, "id": "66f36a31-9ca7-404d-ab08-d0a6cd13a283", "metadata": { "tags": [] @@ -1001,9 +1037,9 @@ "[stderr:1] ERROR:asyncio:Exception in callback Task.task_wakeup(>)\n", "handle: >)>\n", "Traceback (most recent call last):\n", - " File \"/home/dokken/src/mambaforge/envs/mpi-tutorial/lib/python3.10/asyncio/events.py\", line 80, in _run\n", + " File \"/home/dokken/src/mambaforge/envs/mpi-tutorial/lib/python3.12/asyncio/events.py\", line 84, in _run\n", " self._context.run(self._callback, *self._args)\n", - "RuntimeError: Cannot enter into task wait_for=> cb=[_chain_future.._call_set_state() at /home/dokken/src/mambaforge/envs/mpi-tutorial/lib/python3.10/asyncio/futures.py:392]> while another task cb=[IOLoop.add_future..() at /home/dokken/.local/lib/python3.10/site-packages/tornado/ioloop.py:687]> is being executed.\n" + "RuntimeError: Cannot enter into task wait_for=> cb=[_chain_future.._call_set_state() at /home/dokken/src/mambaforge/envs/mpi-tutorial/lib/python3.12/asyncio/futures.py:394]> while another task cb=[IOLoop.add_future..() at /home/dokken/src/mambaforge/envs/mpi-tutorial/lib/python3.12/site-packages/tornado/ioloop.py:685]> is being executed.\n" ] }, "metadata": {}, @@ -1015,9 +1051,9 @@ "[stderr:0] ERROR:asyncio:Exception in callback Task.task_wakeup(>)\n", "handle: >)>\n", "Traceback (most recent call last):\n", - " File \"/home/dokken/src/mambaforge/envs/mpi-tutorial/lib/python3.10/asyncio/events.py\", line 80, in _run\n", + " File \"/home/dokken/src/mambaforge/envs/mpi-tutorial/lib/python3.12/asyncio/events.py\", line 84, in _run\n", " self._context.run(self._callback, *self._args)\n", - "RuntimeError: Cannot enter into task wait_for=> cb=[_chain_future.._call_set_state() at /home/dokken/src/mambaforge/envs/mpi-tutorial/lib/python3.10/asyncio/futures.py:392]> while another task cb=[IOLoop.add_future..() at /home/dokken/.local/lib/python3.10/site-packages/tornado/ioloop.py:687]> is being executed.\n" + "RuntimeError: Cannot enter into task wait_for=> cb=[_chain_future.._call_set_state() at /home/dokken/src/mambaforge/envs/mpi-tutorial/lib/python3.12/asyncio/futures.py:394]> while another task cb=[IOLoop.add_future..() at /home/dokken/src/mambaforge/envs/mpi-tutorial/lib/python3.12/site-packages/tornado/ioloop.py:685]> is being executed.\n" ] }, "metadata": {}, @@ -1035,12 +1071,12 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f68788b8f4624d1eab2ceb9243f3d19e", + "model_id": "974575816e184e82bf17b29e21b58b1c", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "EmbeddableWidget(value='