# Error with pyvista in new fenicsx version

**URL:** <https://fenicsproject.discourse.group/t/error-with-pyvista-in-new-fenicsx-version/12021>\
**Category:** I/O\
**Created:** [August 24, 2023, 12:30pm UTC](https://fenicsproject.discourse.group/t/error-with-pyvista-in-new-fenicsx-version/12021 "2023-08-24T12:30:50Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![lclaire](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/lclaire/32/1615_2.png) [@lclaire](https://fenicsproject.discourse.group/u/lclaire)\
**Post date:** [August 24, 2023, 12:30pm UTC](https://fenicsproject.discourse.group/t/error-with-pyvista-in-new-fenicsx-version/12021/1 "2023-08-24T12:30:50Z")

</div>

Hello,

I am trying to run a fenicsx code from last year but the pyvista interface seems outdated. Here is the code I am running

```auto
import dolfinx 
import pyvista

L = 1. # total length
d = L/10. # thickness
h = d/6. # size of a cell

my_domain = dolfinx.mesh.create_rectangle(comm=MPI.COMM_WORLD,
                            points=((0.0, -0.5*d), (L, 0.5*d)), n=(int(L/h), int(d/h)),
                            cell_type=dolfinx.mesh.CellType.triangle)

topology, cell_types, geometry_for_plotting = dolfinx.plot.create_vtk_mesh(my_domain, 2)
grid = pyvista.UnstructuredGrid(topology, cell_types, geometry_for_plotting)

pyvista.set_jupyter_backend("none")
plotter = pyvista.Plotter()
plotter.add_mesh(grid, show_edges=True)

if not pyvista.OFF_SCREEN:
    plotter.show()
else:
    pyvista.start_xvfb()
    figure = plotter.screenshot("fundamentals_mesh.png")

```

I get the following error message:

```auto
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[8], line 22
     19 plotter.add_mesh(grid, show_edges=True)
     21 if not pyvista.OFF_SCREEN:
---> 22 plotter.show()
     23 else:
     24 pyvista.start_xvfb()

File ~/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/pyvista/plotting/plotter.py:6673, in Plotter.show(self, title, window_size, interactive, auto_close, interactive_update, full_screen, screenshot, return_img, cpos, jupyter_backend, return_viewer, return_cpos, before_close_callback, **kwargs)
   6670 if jupyter_backend is None:
   6671 jupyter_backend = self._theme.jupyter_backend
-> 6673 if jupyter_backend.lower() != 'none':
   6674 jupyter_disp = handle_plotter(self, backend=jupyter_backend, **jupyter_kwargs)
   6676 self.render()

AttributeError: 'NoneType' object has no attribute 'lower'

```

Many thanks in advance for your help!

Claire

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [August 24, 2023, 1:34pm UTC](https://fenicsproject.discourse.group/t/error-with-pyvista-in-new-fenicsx-version/12021/2 "2023-08-24T13:34:21Z")

</div>

To me this seems like an issue with `pyvista`, as DOLFINx only provides pure numpy arrays to pyvista to generate an unstructured grid, and does not modify wrap any pyvista code. Can you try using a simple unstructured mesh like:

```python
cells = [4, 0, 1, 2, 3]
celltypes = [pyvista.CellType.TETRA]
points = [
    [1.0, 1.0, 1.0],
    [1.0, -1.0, -1.0],
    [-1.0, 1.0, -1.0],
    [-1.0, -1.0, 1.0],
]
grid = pyvista.UnstructuredGrid(cells, celltypes, points)
grid.plot(show_edges=True)

```

from  
[https://docs.pyvista.org/version/stable/api/core/\_autosummary/pyvista.UnstructuredGrid.html#pyvista.UnstructuredGrid](https://docs.pyvista.org/version/stable/api/core/_autosummary/pyvista.UnstructuredGrid.html#pyvista.UnstructuredGrid)

---

<div class="post-metadata">

**Author:** ![lclaire](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/lclaire/32/1615_2.png) [@lclaire](https://fenicsproject.discourse.group/u/lclaire)\
**Post date:** [August 31, 2023, 6:11am UTC](https://fenicsproject.discourse.group/t/error-with-pyvista-in-new-fenicsx-version/12021/3 "2023-08-31T06:11:23Z")

</div>

> [@dokken](#):
>
> ```auto
> cells = [4, 0, 1, 2, 3]
> celltypes = [pyvista.CellType.TETRA]
> points = [
> [1.0, 1.0, 1.0],
> [1.0, -1.0, -1.0],
> [-1.0, 1.0, -1.0],
> [-1.0, -1.0, 1.0],
> ]
> grid = pyvista.UnstructuredGrid(cells, celltypes, points)
> grid.plot(show_edges=True)
> 
> ```

Yes this works! I just get a warning message.

```auto
hwloc/linux: Ignoring PCI device with non-16bit domain.
Pass --enable-32bits-pci-domain to configure to support such devices
(warning: it would break the library ABI, don't enable unless really needed).
WARNING:py.warnings:/home/claire/anaconda3/envs/fenicsx-env/lib/python3.10/site-packages/pyvista/jupyter/notebook.py:58: UserWarning: Failed to use notebook backend: 

No module named 'trame'

Falling back to a static output.
  warnings.warn(
```

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [August 31, 2023, 6:46am UTC](https://fenicsproject.discourse.group/t/error-with-pyvista-in-new-fenicsx-version/12021/4 "2023-08-31T06:46:43Z")

</div>

That is very strange, as the pyvista unstructured grid from dolfinx is made in the exact same way.

---

<div class="post-metadata">

**Author:** ![lclaire](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/lclaire/32/1615_2.png) [@lclaire](https://fenicsproject.discourse.group/u/lclaire)\
**Post date:** [August 31, 2023, 7:08am UTC](https://fenicsproject.discourse.group/t/error-with-pyvista-in-new-fenicsx-version/12021/5 "2023-08-31T07:08:04Z")

</div>

This works:

```auto
import dolfinx 
import pyvista
from mpi4py import MPI

L = 1. # total length
d = L/10. # thickness
h = d/6. # size of a cell

my_domain = dolfinx.mesh.create_rectangle(comm=MPI.COMM_WORLD,
                            points=((0.0, -0.5*d), (L, 0.5*d)), n=(int(L/h), int(d/h)),
                            cell_type=dolfinx.mesh.CellType.triangle)

topology, cell_types, geometry_for_plotting = dolfinx.plot.create_vtk_mesh(my_domain, 2)
grid = pyvista.UnstructuredGrid(topology, cell_types, geometry_for_plotting)
grid.plot(show_edges=True)
```

---

<div class="post-metadata">

**Author:** ![lclaire](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/lclaire/32/1615_2.png) [@lclaire](https://fenicsproject.discourse.group/u/lclaire)\
**Post date:** [August 31, 2023, 7:08am UTC](https://fenicsproject.discourse.group/t/error-with-pyvista-in-new-fenicsx-version/12021/6 "2023-08-31T07:08:39Z")

</div>

This doesn’t:

```auto
import dolfinx 
import pyvista
from mpi4py import MPI

L = 1. # total length
d = L/10. # thickness
h = d/6. # size of a cell

my_domain = dolfinx.mesh.create_rectangle(comm=MPI.COMM_WORLD,
                            points=((0.0, -0.5*d), (L, 0.5*d)), n=(int(L/h), int(d/h)),
                            cell_type=dolfinx.mesh.CellType.triangle)

topology, cell_types, geometry_for_plotting = dolfinx.plot.create_vtk_mesh(my_domain, 2)
grid = pyvista.UnstructuredGrid(topology, cell_types, geometry_for_plotting)

pyvista.set_jupyter_backend("none")

plotter = pyvista.Plotter()
plotter.add_mesh(grid, show_edges=True)

if not pyvista.OFF_SCREEN:
    plotter.show()
else:
    pyvista.start_xvfb()
    figure = plotter.screenshot("fundamentals_mesh.png")
```

---

<div class="post-metadata">

**Author:** ![lclaire](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/lclaire/32/1615_2.png) [@lclaire](https://fenicsproject.discourse.group/u/lclaire)\
**Post date:** [August 31, 2023, 7:10am UTC](https://fenicsproject.discourse.group/t/error-with-pyvista-in-new-fenicsx-version/12021/7 "2023-08-31T07:10:54Z")

</div>

This works:

```auto
import dolfinx 
import pyvista
from mpi4py import MPI

L = 1. # total length
d = L/10. # thickness
h = d/6. # size of a cell

my_domain = dolfinx.mesh.create_rectangle(comm=MPI.COMM_WORLD,
                            points=((0.0, -0.5*d), (L, 0.5*d)), n=(int(L/h), int(d/h)),
                            cell_type=dolfinx.mesh.CellType.triangle)

topology, cell_types, geometry_for_plotting = dolfinx.plot.create_vtk_mesh(my_domain, 2)
grid = pyvista.UnstructuredGrid(topology, cell_types, geometry_for_plotting)

plotter = pyvista.Plotter()
plotter.add_mesh(grid, show_edges=True)
plotter.show()
```

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [August 31, 2023, 7:18am UTC](https://fenicsproject.discourse.group/t/error-with-pyvista-in-new-fenicsx-version/12021/8 "2023-08-31T07:18:33Z")

</div>

As you can see, it has nothing to do with dolfinx, but how you interact with pyvista.
