1- import firedrake as fd
21from firedrake .preconditioners .base import PCBase
32from firedrake .petsc import PETSc
43from firedrake .functionspace import FunctionSpace , VectorFunctionSpace
54from firedrake .ufl_expr import TestFunction
65from firedrake .dmhooks import get_function_space
76from firedrake .utils import complex_mode
7+ from firedrake .interpolation import interpolate
8+ from firedrake import grad , SpatialCoordinate
89from firedrake_citations import Citations
910from pyop2 .utils import as_tuple
1011
@@ -28,6 +29,8 @@ def chop(A, tol=1E-10):
2829
2930class HypreAMS (PCBase ):
3031 def initialize (self , obj ):
32+ from firedrake .assemble import assemble
33+
3134 if complex_mode :
3235 raise NotImplementedError ("HypreAMS preconditioner not yet implemented in complex mode" )
3336
@@ -47,7 +50,7 @@ def initialize(self, obj):
4750 P1 = FunctionSpace (mesh , "Lagrange" , 1 )
4851 G_callback = appctx .get ("get_gradient" , None )
4952 if G_callback is None :
50- G = chop (fd . assemble (fd . interpolate (fd . grad (TestFunction (P1 )), V )).petscmat )
53+ G = chop (assemble (interpolate (grad (TestFunction (P1 )), V )).petscmat )
5154 else :
5255 G = G_callback (P1 , V )
5356
@@ -65,8 +68,8 @@ def initialize(self, obj):
6568 pc .setHYPRESetBetaPoissonMatrix (None )
6669
6770 VectorP1 = VectorFunctionSpace (mesh , "Lagrange" , 1 )
68- interp = fd . interpolate (fd . SpatialCoordinate (mesh ), VectorP1 )
69- pc .setCoordinates (fd . assemble (interp ).dat .data_ro .copy ())
71+ interp = interpolate (SpatialCoordinate (mesh ), VectorP1 )
72+ pc .setCoordinates (assemble (interp ).dat .data_ro .copy ())
7073 pc .setFromOptions ()
7174 self .pc = pc
7275
0 commit comments