Skip to content

Add connectivity computation #197

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
May 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 13 additions & 114 deletions chapter1/complex_mode.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -39,19 +39,10 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": null,
"id": "b52b39d9-260d-4c54-b62a-7440c3b92e5a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"float64\n",
"complex128\n"
]
}
],
"outputs": [],
"source": [
"from mpi4py import MPI\n",
"import dolfinx\n",
Expand Down Expand Up @@ -80,18 +71,10 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": null,
"id": "4d5b03e3-4d7f-45b7-95eb-9130a5141f34",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'numpy.complex128'>\n"
]
}
],
"outputs": [],
"source": [
"from petsc4py import PETSc\n",
"from dolfinx.fem.petsc import assemble_vector\n",
Expand All @@ -110,7 +93,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": null,
"id": "be8461a0-a089-4ff3-8bc8-61b016407e70",
"metadata": {},
"outputs": [],
Expand All @@ -137,19 +120,10 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": null,
"id": "779ab267-4609-4628-9577-a280b9c18b6d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{ c_0 * (conj((v_0))) } * dx(<Mesh #0>[everywhere], {})\n",
"{ c_0 * (conj((v_0))) } * dx(<Mesh #0>[everywhere], {})\n"
]
}
],
"outputs": [],
"source": [
"L2 = f * ufl.conj(v) * ufl.dx\n",
"print(L)\n",
Expand All @@ -166,78 +140,10 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": null,
"id": "d61c477a-d364-4a81-9362-42f1eb4cd8ee",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[4.21666667e-03+3.33333333e-05j 1.58750000e-03+8.33333333e-06j\n",
" 4.68333333e-03+1.00000000e-04j 8.13333333e-03+2.66666667e-04j\n",
" 3.35000000e-03+3.33333333e-05j 4.68333333e-03+3.66666667e-04j\n",
" 6.43333333e-03+2.66666667e-04j 8.13333333e-03+8.66666667e-04j\n",
" 2.58333333e-03+3.33333333e-05j 4.68333333e-03+8.33333333e-04j\n",
" 4.93333333e-03+2.66666667e-04j 6.43333333e-03+8.66666667e-04j\n",
" 8.13333333e-03+1.86666667e-03j 1.91666667e-03+3.33333333e-05j\n",
" 4.68333333e-03+1.50000000e-03j 3.63333333e-03+2.66666667e-04j\n",
" 4.93333333e-03+8.66666667e-04j 6.43333333e-03+1.86666667e-03j\n",
" 8.13333333e-03+3.26666667e-03j 1.35000000e-03+3.33333333e-05j\n",
" 4.68333333e-03+2.36666667e-03j 2.53333333e-03+2.66666667e-04j\n",
" 3.63333333e-03+8.66666667e-04j 4.93333333e-03+1.86666667e-03j\n",
" 6.43333333e-03+3.26666667e-03j 8.13333333e-03+5.06666667e-03j\n",
" 8.83333333e-04+3.33333333e-05j 4.68333333e-03+3.43333333e-03j\n",
" 1.63333333e-03+2.66666667e-04j 2.53333333e-03+8.66666667e-04j\n",
" 3.63333333e-03+1.86666667e-03j 4.93333333e-03+3.26666667e-03j\n",
" 6.43333333e-03+5.06666667e-03j 8.13333333e-03+7.26666667e-03j\n",
" 5.16666667e-04+3.33333333e-05j 4.68333333e-03+4.70000000e-03j\n",
" 9.33333333e-04+2.66666667e-04j 1.63333333e-03+8.66666667e-04j\n",
" 2.53333333e-03+1.86666667e-03j 3.63333333e-03+3.26666667e-03j\n",
" 4.93333333e-03+5.06666667e-03j 6.43333333e-03+7.26666667e-03j\n",
" 8.13333333e-03+9.86666667e-03j 2.50000000e-04+3.33333333e-05j\n",
" 4.68333333e-03+6.16666667e-03j 4.33333333e-04+2.66666667e-04j\n",
" 9.33333333e-04+8.66666667e-04j 1.63333333e-03+1.86666667e-03j\n",
" 2.53333333e-03+3.26666667e-03j 3.63333333e-03+5.06666667e-03j\n",
" 4.93333333e-03+7.26666667e-03j 6.43333333e-03+9.86666667e-03j\n",
" 8.13333333e-03+1.28666667e-02j 8.33333333e-05+3.33333333e-05j\n",
" 4.68333333e-03+7.83333333e-03j 1.33333333e-04+2.66666667e-04j\n",
" 4.33333333e-04+8.66666667e-04j 9.33333333e-04+1.86666667e-03j\n",
" 1.63333333e-03+3.26666667e-03j 2.53333333e-03+5.06666667e-03j\n",
" 3.63333333e-03+7.26666667e-03j 4.93333333e-03+9.86666667e-03j\n",
" 6.43333333e-03+1.28666667e-02j 8.13333333e-03+1.62666667e-02j\n",
" 1.25000000e-05+2.50000000e-05j 3.09583333e-03+6.19166667e-03j\n",
" 1.66666667e-05+1.66666667e-04j 1.33333333e-04+8.66666667e-04j\n",
" 4.33333333e-04+1.86666667e-03j 9.33333333e-04+3.26666667e-03j\n",
" 1.63333333e-03+5.06666667e-03j 2.53333333e-03+7.26666667e-03j\n",
" 3.63333333e-03+9.86666667e-03j 4.93333333e-03+1.28666667e-02j\n",
" 6.43333333e-03+1.62666667e-02j 3.91666667e-03+9.36666667e-03j\n",
" 1.66666667e-05+5.00000000e-04j 1.33333333e-04+1.86666667e-03j\n",
" 4.33333333e-04+3.26666667e-03j 9.33333333e-04+5.06666667e-03j\n",
" 1.63333333e-03+7.26666667e-03j 2.53333333e-03+9.86666667e-03j\n",
" 3.63333333e-03+1.28666667e-02j 4.93333333e-03+1.62666667e-02j\n",
" 3.08333333e-03+9.36666667e-03j 1.66666667e-05+1.03333333e-03j\n",
" 1.33333333e-04+3.26666667e-03j 4.33333333e-04+5.06666667e-03j\n",
" 9.33333333e-04+7.26666667e-03j 1.63333333e-03+9.86666667e-03j\n",
" 2.53333333e-03+1.28666667e-02j 3.63333333e-03+1.62666667e-02j\n",
" 2.35000000e-03+9.36666667e-03j 1.66666667e-05+1.76666667e-03j\n",
" 1.33333333e-04+5.06666667e-03j 4.33333333e-04+7.26666667e-03j\n",
" 9.33333333e-04+9.86666667e-03j 1.63333333e-03+1.28666667e-02j\n",
" 2.53333333e-03+1.62666667e-02j 1.71666667e-03+9.36666667e-03j\n",
" 1.66666667e-05+2.70000000e-03j 1.33333333e-04+7.26666667e-03j\n",
" 4.33333333e-04+9.86666667e-03j 9.33333333e-04+1.28666667e-02j\n",
" 1.63333333e-03+1.62666667e-02j 1.18333333e-03+9.36666667e-03j\n",
" 1.66666667e-05+3.83333333e-03j 1.33333333e-04+9.86666667e-03j\n",
" 4.33333333e-04+1.28666667e-02j 9.33333333e-04+1.62666667e-02j\n",
" 7.50000000e-04+9.36666667e-03j 1.66666667e-05+5.16666667e-03j\n",
" 1.33333333e-04+1.28666667e-02j 4.33333333e-04+1.62666667e-02j\n",
" 4.16666667e-04+9.36666667e-03j 1.66666667e-05+6.70000000e-03j\n",
" 1.33333333e-04+1.62666667e-02j 1.83333333e-04+9.36666667e-03j\n",
" 1.66666667e-05+8.43333333e-03j 5.00000000e-05+9.36666667e-03j\n",
" 4.16666667e-06+3.17500000e-03j]\n"
]
}
],
"outputs": [],
"source": [
"J = u_c**2 * ufl.dx\n",
"F = ufl.derivative(J, u_c, ufl.conj(v))\n",
Expand All @@ -256,7 +162,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": null,
"id": "eb2357ae-ac71-4407-bf37-432f1b1e31d0",
"metadata": {},
"outputs": [],
Expand All @@ -281,18 +187,10 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": null,
"id": "f51d9a7a-2cde-4d0f-8606-91f91c372c4b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(0.0007865435216227239+0.0017660156338113711j) 3.553078358632328e-06\n"
]
}
],
"outputs": [],
"source": [
"x = ufl.SpatialCoordinate(mesh)\n",
"u_ex = 0.5 * x[0]**2 + 1j*x[1]**2\n",
Expand Down Expand Up @@ -322,6 +220,7 @@
"source": [
"import pyvista\n",
"pyvista.start_xvfb()\n",
"mesh.topology.create_connectivity(mesh.topology.dim, mesh.topology.dim)\n",
"p_mesh = pyvista.UnstructuredGrid(*dolfinx.plot.vtk_mesh(mesh, mesh.topology.dim))\n",
"pyvista_cells, cell_types, geometry = dolfinx.plot.vtk_mesh(V)\n",
"grid = pyvista.UnstructuredGrid(pyvista_cells, cell_types, geometry)\n",
Expand Down
3 changes: 2 additions & 1 deletion chapter1/complex_mode.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# extension: .py
# format_name: light
# format_version: '1.5'
# jupytext_version: 1.16.1
# jupytext_version: 1.15.2
# kernelspec:
# display_name: Python 3 (DOLFINx complex)
# language: python
Expand Down Expand Up @@ -126,6 +126,7 @@

import pyvista
pyvista.start_xvfb()
mesh.topology.create_connectivity(mesh.topology.dim, mesh.topology.dim)
p_mesh = pyvista.UnstructuredGrid(*dolfinx.plot.vtk_mesh(mesh, mesh.topology.dim))
pyvista_cells, cell_types, geometry = dolfinx.plot.vtk_mesh(V)
grid = pyvista.UnstructuredGrid(pyvista_cells, cell_types, geometry)
Expand Down
1 change: 1 addition & 0 deletions chapter1/fundamentals_code.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,7 @@
"source": [
"from dolfinx import plot\n",
"pyvista.start_xvfb()\n",
"domain.topology.create_connectivity(tdim, tdim)\n",
"topology, cell_types, geometry = plot.vtk_mesh(domain, tdim)\n",
"grid = pyvista.UnstructuredGrid(topology, cell_types, geometry)"
]
Expand Down
3 changes: 2 additions & 1 deletion chapter1/fundamentals_code.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# extension: .py
# format_name: light
# format_version: '1.5'
# jupytext_version: 1.16.1
# jupytext_version: 1.15.2
# kernelspec:
# display_name: Python 3 (ipykernel)
# language: python
Expand Down Expand Up @@ -232,6 +232,7 @@
# + vscode={"languageId": "python"}
from dolfinx import plot
pyvista.start_xvfb()
domain.topology.create_connectivity(tdim, tdim)
topology, cell_types, geometry = plot.vtk_mesh(domain, tdim)
grid = pyvista.UnstructuredGrid(topology, cell_types, geometry)
# -
Expand Down
1 change: 1 addition & 0 deletions chapter2/ns_code1.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -579,6 +579,7 @@
"glyphs = function_grid.glyph(orient=\"u\", factor=0.2)\n",
"\n",
"# Create a pyvista-grid for the mesh\n",
"mesh.topology.create_connectivity(mesh.topology.dim, mesh.topology.dim)\n",
"grid = pyvista.UnstructuredGrid(*vtk_mesh(mesh, mesh.topology.dim))\n",
"\n",
"# Create plotter\n",
Expand Down
3 changes: 2 additions & 1 deletion chapter2/ns_code1.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# extension: .py
# format_name: light
# format_version: '1.5'
# jupytext_version: 1.16.1
# jupytext_version: 1.15.2
# kernelspec:
# display_name: Python 3 (ipykernel)
# language: python
Expand Down Expand Up @@ -345,6 +345,7 @@ def u_exact(x):
glyphs = function_grid.glyph(orient="u", factor=0.2)

# Create a pyvista-grid for the mesh
mesh.topology.create_connectivity(mesh.topology.dim, mesh.topology.dim)
grid = pyvista.UnstructuredGrid(*vtk_mesh(mesh, mesh.topology.dim))

# Create plotter
Expand Down
7 changes: 5 additions & 2 deletions chapter3/em.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -1077,8 +1077,10 @@
"source": [
"pyvista.start_xvfb()\n",
"plotter = pyvista.Plotter()\n",
"grid = pyvista.UnstructuredGrid(*vtk_mesh(mesh, mesh.topology.dim))\n",
"num_local_cells = mesh.topology.index_map(mesh.topology.dim).size_local\n",
"tdim = mesh.topology.dim\n",
"mesh.topology.create_connectivity(tdim, tdim)\n",
"grid = pyvista.UnstructuredGrid(*vtk_mesh(mesh, tdim))\n",
"num_local_cells = mesh.topology.index_map(tdim).size_local\n",
"grid.cell_data[\"Marker\"] = ct.values[ct.indices < num_local_cells]\n",
"grid.set_active_scalars(\"Marker\")\n",
"actor = plotter.add_mesh(grid, show_edges=True)\n",
Expand Down Expand Up @@ -1288,6 +1290,7 @@
"# We include ghosts cells as we access all degrees of freedom (including ghosts) on each process\n",
"top_imap = mesh.topology.index_map(mesh.topology.dim)\n",
"num_cells = top_imap.size_local + top_imap.num_ghosts\n",
"mesh.topology.create_connectivity(mesh.topology.dim, mesh.topology.dim)\n",
"midpoints = compute_midpoints(mesh, mesh.topology.dim, np.arange(num_cells, dtype=np.int32))\n",
"\n",
"num_dofs = W.dofmap.index_map.size_local + W.dofmap.index_map.num_ghosts\n",
Expand Down
9 changes: 6 additions & 3 deletions chapter3/em.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# extension: .py
# format_name: light
# format_version: '1.5'
# jupytext_version: 1.16.1
# jupytext_version: 1.15.2
# kernelspec:
# display_name: Python 3 (ipykernel)
# language: python
Expand Down Expand Up @@ -212,8 +212,10 @@

pyvista.start_xvfb()
plotter = pyvista.Plotter()
grid = pyvista.UnstructuredGrid(*vtk_mesh(mesh, mesh.topology.dim))
num_local_cells = mesh.topology.index_map(mesh.topology.dim).size_local
tdim = mesh.topology.dim
mesh.topology.create_connectivity(tdim, tdim)
grid = pyvista.UnstructuredGrid(*vtk_mesh(mesh, tdim))
num_local_cells = mesh.topology.index_map(tdim).size_local
grid.cell_data["Marker"] = ct.values[ct.indices < num_local_cells]
grid.set_active_scalars("Marker")
actor = plotter.add_mesh(grid, show_edges=True)
Expand Down Expand Up @@ -312,6 +314,7 @@
# We include ghosts cells as we access all degrees of freedom (including ghosts) on each process
top_imap = mesh.topology.index_map(mesh.topology.dim)
num_cells = top_imap.size_local + top_imap.num_ghosts
mesh.topology.create_connectivity(mesh.topology.dim, mesh.topology.dim)
midpoints = compute_midpoints(mesh, mesh.topology.dim, np.arange(num_cells, dtype=np.int32))

num_dofs = W.dofmap.index_map.size_local + W.dofmap.index_map.num_ghosts
Expand Down
12 changes: 8 additions & 4 deletions chapter3/subdomains.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -169,13 +169,15 @@
"uh = problem.solve()\n",
"\n",
"# Filter out ghosted cells\n",
"num_cells_local = mesh.topology.index_map(mesh.topology.dim).size_local\n",
"tdim = mesh.topology.dim\n",
"num_cells_local = mesh.topology.index_map(tdim).size_local\n",
"marker = np.zeros(num_cells_local, dtype=np.int32)\n",
"cells_0 = cells_0[cells_0 < num_cells_local]\n",
"cells_1 = cells_1[cells_1 < num_cells_local]\n",
"marker[cells_0] = 1\n",
"marker[cells_1] = 2\n",
"topology, cell_types, x = vtk_mesh(mesh, mesh.topology.dim, np.arange(num_cells_local, dtype=np.int32))\n",
"mesh.topology.create_connectivity(tdim, tdim)\n",
"topology, cell_types, x = vtk_mesh(mesh, tdim, np.arange(num_cells_local, dtype=np.int32))\n",
"\n",
"p = pyvista.Plotter(window_size=[800, 800])\n",
"grid = pyvista.UnstructuredGrid(topology, cell_types, x)\n",
Expand Down Expand Up @@ -552,9 +554,11 @@
"# As the dolfinx.MeshTag contains a value for every cell in the\n",
"# geometry, we can attach it directly to the grid\n",
"\n",
"topology, cell_types, x = vtk_mesh(mesh, mesh.topology.dim)\n",
"tdim = mesh.topology.dim\n",
"mesh.topology.create_connectivity(tdim, tdim)\n",
"topology, cell_types, x = vtk_mesh(mesh, tdim)\n",
"grid = pyvista.UnstructuredGrid(topology, cell_types, x)\n",
"num_local_cells = mesh.topology.index_map(mesh.topology.dim).size_local\n",
"num_local_cells = mesh.topology.index_map(tdim).size_local\n",
"grid.cell_data[\"Marker\"] = ct.values[ct.indices < num_local_cells]\n",
"grid.set_active_scalars(\"Marker\")\n",
"\n",
Expand Down
12 changes: 8 additions & 4 deletions chapter3/subdomains.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,15 @@ def Omega_1(x):
uh = problem.solve()

# Filter out ghosted cells
num_cells_local = mesh.topology.index_map(mesh.topology.dim).size_local
tdim = mesh.topology.dim
num_cells_local = mesh.topology.index_map(tdim).size_local
marker = np.zeros(num_cells_local, dtype=np.int32)
cells_0 = cells_0[cells_0 < num_cells_local]
cells_1 = cells_1[cells_1 < num_cells_local]
marker[cells_0] = 1
marker[cells_1] = 2
topology, cell_types, x = vtk_mesh(mesh, mesh.topology.dim, np.arange(num_cells_local, dtype=np.int32))
mesh.topology.create_connectivity(tdim, tdim)
topology, cell_types, x = vtk_mesh(mesh, tdim, np.arange(num_cells_local, dtype=np.int32))

p = pyvista.Plotter(window_size=[800, 800])
grid = pyvista.UnstructuredGrid(topology, cell_types, x)
Expand Down Expand Up @@ -277,9 +279,11 @@ def create_mesh(mesh, cell_type, prune_z=False):
# As the dolfinx.MeshTag contains a value for every cell in the
# geometry, we can attach it directly to the grid

topology, cell_types, x = vtk_mesh(mesh, mesh.topology.dim)
tdim = mesh.topology.dim
mesh.topology.create_connectivity(tdim, tdim)
topology, cell_types, x = vtk_mesh(mesh, tdim)
grid = pyvista.UnstructuredGrid(topology, cell_types, x)
num_local_cells = mesh.topology.index_map(mesh.topology.dim).size_local
num_local_cells = mesh.topology.index_map(tdim).size_local
grid.cell_data["Marker"] = ct.values[ct.indices < num_local_cells]
grid.set_active_scalars("Marker")

Expand Down