Disclaimer: This is something I tested quite sometime back with dolfinx-2019.2.9.99 so no guarantees that will work as is, but should be a good starting point in case if it doesn’t too
import numpy as np
import matplotlib.pyplot as plt
from mpi4py import MPI
from dolfinx import Function, FunctionSpace, UnitSquareMesh
from dolfinx.fem import assemble_matrix, Form
from dolfinx.plotting import plot
from ufl import TrialFunction, TestFunction, grad, dx, dot
from slepc4py import SLEPc
mesh = UnitSquareMesh(MPI.COMM_WORLD, 10, 10)
V = FunctionSpace(mesh, ("CG", 1))
u = TrialFunction(V)
v = TestFunction(V)
a = dot(grad(u), grad(v))*dx
# form = Form(a)
# Assemble stiffness tensor
A = assemble_matrix(a, [])
A.assemble()
eigensolver = SLEPc.EPS().create(MPI.COMM_WORLD)
eigensolver.setOperators(A)
eigensolver.solve()
vr, vi = A.getVecs()
lmbda = eigensolver.getEigenpair(0, vr, vi)
u = Function(V)
u.vector.setArray(vr.array)
# Plot eigenfunction (0-th)
plt.figure(figsize=(8,8))
eig1 = plot(u, cmap=plt.cm.jet)
plot(mesh)
plt.colorbar(eig1)
translated from
import numpy as np
import matplotlib.pyplot as plt
from dolfin import *
mesh = UnitSquareMesh(10, 10)
V = FunctionSpace(mesh, "CG", 1)
# Define basis and bilinear form
u = TrialFunction(V)
v = TestFunction(V)
a = dot(grad(u), grad(v))*dx
# Assemble stiffness form
A = PETScMatrix()
assemble(a, tensor=A)
eigensolver = SLEPcEigenSolver(A)
eigensolver.solve()
r, c, rx, cx = eigensolver.get_eigenpair(0)
u = Function(V)
u.vector()[:] = rx
# Plot eigenfunction
plt.figure(figsize=(8,8))
eig1 = plot(u, cmap=plt.cm.jet)
plot(mesh)
plt.colorbar(eig1)

