@@ -52,3 +52,31 @@ def evals(n, degree=1, mesh=None):
5252def test_evals_1d (n , degree , tolerance ):
5353 true_values , estimates = evals (n , degree = degree )
5454 assert np .allclose (true_values , estimates , rtol = tolerance )
55+
56+
57+ def poisson_eigenvalue_2d (i ):
58+ mesh = RectangleMesh (10 * 2 ** i , 10 * 2 ** i , pi , pi )
59+ V = FunctionSpace (mesh , "CG" , 1 )
60+ u = TrialFunction (V )
61+ v = TestFunction (V )
62+
63+ bc = DirichletBC (V , 0.0 , "on_boundary" )
64+
65+ ep = LinearEigenproblem (inner (grad (u ), grad (v )) * dx ,
66+ bcs = bc , bc_shift = 666.0 )
67+
68+ es = LinearEigensolver (ep , 1 , solver_parameters = {"eps_gen_hermitian" : None ,
69+ "eps_largest_real" : None })
70+
71+ es .solve ()
72+ return es .eigenvalue (0 )- 2.0
73+
74+
75+ def test_evals_2d ():
76+ """2D Eigenvalue convergence test. As with Boffi, we observe that the
77+ convergence rate convergest to 2 from above."""
78+ errors = np .array ([poisson_eigenvalue_2d (i ) for i in range (5 )])
79+
80+ convergence = np .log (errors [:- 1 ]/ errors [1 :])/ np .log (2.0 )
81+
82+ assert all (convergence > 2.0 )
0 commit comments