Skip to content

Commit 47bd72e

Browse files
committed
Deprecate dlx.fem.Function.vector; replace it with dlx.fem.Function.x.petsc_vec
1 parent b0bb62d commit 47bd72e

15 files changed

+49
-46
lines changed

python/demo/demo_elasticity.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ def σ(v):
218218
# Set a monitor, solve linear system, and display the solver
219219
# configuration
220220
solver.setMonitor(lambda _, its, rnorm: print(f"Iteration: {its}, rel. residual: {rnorm}"))
221-
solver.solve(b, uh.vector)
221+
solver.solve(b, uh.x.petsc_vec)
222222
solver.view()
223223

224224
# Scatter forward the solution vector to update ghost values

python/demo/demo_static-condensation.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def tabulate_A(A_, w_, c_, coords_, entity_local_index, permutation=ffi.NULL):
163163
uc = Function(U)
164164
solver = PETSc.KSP().create(A_cond.getComm()) # type: ignore
165165
solver.setOperators(A_cond)
166-
solver.solve(b, uc.vector)
166+
solver.solve(b, uc.x.petsc_vec)
167167

168168
# Pure displacement based formulation
169169
a = form(-ufl.inner(sigma_u(u), ufl.grad(v)) * ufl.dx)

python/demo/demo_stokes.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ def mixed_direct():
524524
# Compute the solution
525525
U = Function(W)
526526
try:
527-
ksp.solve(b, U.vector)
527+
ksp.solve(b, U.x.petsc_vec)
528528
except PETSc.Error as e:
529529
if e.ierr == 92:
530530
print("The required PETSc solver/preconditioner is not available. Exiting.")

python/demo/demo_waveguide/demo_half_loaded_waveguide.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ def Omega_v(x):
223223
bc_facets = exterior_facet_indices(msh.topology)
224224
bc_dofs = fem.locate_dofs_topological(V, msh.topology.dim - 1, bc_facets)
225225
u_bc = fem.Function(V)
226-
with u_bc.vector.localForm() as loc:
226+
with u_bc.x.petsc_vec.localForm() as loc:
227227
loc.set(0)
228228
bc = fem.dirichletbc(u_bc, bc_dofs)
229229
# -
@@ -343,7 +343,7 @@ def Omega_v(x):
343343

344344
for i, kz in vals:
345345
# Save eigenvector in eh
346-
eps.getEigenpair(i, eh.vector)
346+
eps.getEigenpair(i, eh.x.petsc_vec)
347347

348348
# Compute error for i-th eigenvalue
349349
error = eps.computeError(i, SLEPc.EPS.ErrorType.RELATIVE)

python/dolfinx/fem/function.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,10 @@ def vector(self):
494494
Prefer :func`x` where possible.
495495
496496
"""
497-
return self.x.vector
497+
warnings.warn("dlx.fem.Function.vector is deprecated.\n"
498+
"Please use dlx.fem.Function.x.petsc_vec "
499+
"to access the underlining petsc4py wrapper")
500+
return self.x.petsc_vec
498501

499502
@property
500503
def dtype(self) -> np.dtype:

python/dolfinx/la.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ def array(self) -> np.ndarray:
251251
return self._cpp_object.array
252252

253253
@property
254-
def vector(self):
254+
def petsc_vec(self):
255255
"""PETSc vector holding the entries of the vector.
256256
257257
Upon first call, this function creates a PETSc ``Vec`` object

python/dolfinx/nls/petsc.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def __del__(self):
4444
def solve(self, u: fem.Function):
4545
"""Solve non-linear problem into function u. Returns the number
4646
of iterations and if the solver converged."""
47-
n, converged = super().solve(u.vector)
47+
n, converged = super().solve(u.x.petsc_vec)
4848
u.x.scatter_forward()
4949
return n, converged
5050

python/test/unit/fem/test_custom_assembler.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,8 @@ def test_custom_mesh_loop_rank1(dtype):
262262
# assemble_vector_parallel(b, x_dofs, x, dofmap_t.array, dofmap_t.offsets, num_owned_cells)
263263
# end = time.time()
264264
# print("Time (numba parallel, pass {}): {}".format(i, end - start))
265-
# btmp.vector.ghostUpdate(addv=PETSc.InsertMode.ADD, mode=PETSc.ScatterMode.REVERSE)
266-
# assert (btmp.vector - b0.vector).norm() == pytest.approx(0.0)
265+
# btmp.x.petsc_vec.ghostUpdate(addv=PETSc.InsertMode.ADD, mode=PETSc.ScatterMode.REVERSE)
266+
# assert (btmp.x.petsc_vec - b0.x.petsc_vec).norm() == pytest.approx(0.0)
267267

268268
# Test against generated code and general assembler
269269
v = ufl.TestFunction(V)

python/test/unit/fem/test_custom_basix_element.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def run_scalar_test(V, degree):
7070
solver.setOperators(A)
7171

7272
uh = Function(V)
73-
solver.solve(b, uh.vector)
73+
solver.solve(b, uh.x.petsc_vec)
7474
uh.x.scatter_forward()
7575

7676
M = (u_exact - uh) ** 2 * dx

python/test/unit/fem/test_dof_coordinates.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def test_dof_coords_2d(degree):
1515
u.interpolate(lambda x: x[0])
1616
u.x.scatter_forward()
1717
x = V.tabulate_dof_coordinates()
18-
val = u.vector.array
18+
val = u.x.array
1919
for i in range(len(val)):
2020
assert np.isclose(x[i, 0], val[i], rtol=1e-3)
2121

@@ -28,6 +28,6 @@ def test_dof_coords_3d(degree):
2828
u.interpolate(lambda x: x[0])
2929
u.x.scatter_forward()
3030
x = V.tabulate_dof_coordinates()
31-
val = u.vector.array
31+
val = u.x.array
3232
for i in range(len(val)):
3333
assert np.isclose(x[i, 0], val[i], rtol=1e-3)

python/test/unit/fem/test_fem_pipeline.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def run_scalar_test(mesh, V, degree):
103103
solver.setOperators(A)
104104

105105
uh = Function(V)
106-
solver.solve(b, uh.vector)
106+
solver.solve(b, uh.x.petsc_vec)
107107
uh.x.scatter_forward()
108108

109109
M = (u_exact - uh) ** 2 * dx
@@ -140,7 +140,7 @@ def run_vector_test(mesh, V, degree):
140140

141141
# Solve
142142
uh = Function(V)
143-
solver.solve(b, uh.vector)
143+
solver.solve(b, uh.x.petsc_vec)
144144
uh.x.scatter_forward()
145145

146146
# Calculate error
@@ -225,7 +225,7 @@ def run_dg_test(mesh, V, degree):
225225

226226
# Solve
227227
uh = Function(V)
228-
solver.solve(b, uh.vector)
228+
solver.solve(b, uh.x.petsc_vec)
229229
uh.x.scatter_forward()
230230

231231
# Calculate error
@@ -406,7 +406,7 @@ def b(tau_S, v):
406406
solver.setOperators(A)
407407

408408
x_h = Function(V)
409-
solver.solve(b, x_h.vector)
409+
solver.solve(b, x_h.x.petsc_vec)
410410
x_h.x.scatter_forward()
411411

412412
# Recall that x_h has flattened indices

python/test/unit/fem/test_nonlinear_assembler.py

+16-16
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def blocked():
118118
x = create_vector_block(L_block)
119119
scatter_local_vectors(
120120
x,
121-
[u.vector.array_r, p.vector.array_r],
121+
[u.x.petsc_vec.array_r, p.x.petsc_vec.array_r],
122122
[
123123
(u.function_space.dofmap.index_map, u.function_space.dofmap.index_map_bs),
124124
(p.function_space.dofmap.index_map, p.function_space.dofmap.index_map_bs),
@@ -144,10 +144,10 @@ def nested():
144144
x = create_vector_nest(L_block)
145145
for x1_soln_pair in zip(x.getNestSubVecs(), (u, p)):
146146
x1_sub, soln_sub = x1_soln_pair
147-
soln_sub.vector.ghostUpdate(
147+
soln_sub.x.petsc_vec.ghostUpdate(
148148
addv=PETSc.InsertMode.INSERT, mode=PETSc.ScatterMode.FORWARD
149149
)
150-
soln_sub.vector.copy(result=x1_sub)
150+
soln_sub.x.petsc_vec.copy(result=x1_sub)
151151
x1_sub.ghostUpdate(addv=PETSc.InsertMode.INSERT, mode=PETSc.ScatterMode.FORWARD)
152152

153153
A = assemble_matrix_nest(a_block, bcs=[bc])
@@ -195,9 +195,9 @@ def monolithic():
195195
A = assemble_matrix(J, bcs=[bc])
196196
A.assemble()
197197
b = assemble_vector(F)
198-
apply_lifting(b, [J], bcs=[[bc]], x0=[U.vector], scale=-1.0)
198+
apply_lifting(b, [J], bcs=[[bc]], x0=[U.x.petsc_vec], scale=-1.0)
199199
b.ghostUpdate(addv=PETSc.InsertMode.ADD, mode=PETSc.ScatterMode.REVERSE)
200-
set_bc(b, [bc], x0=U.vector, scale=-1.0)
200+
set_bc(b, [bc], x0=U.x.petsc_vec, scale=-1.0)
201201
assert A.getType() != "nest"
202202
Anorm = A.norm()
203203
bnorm = b.norm()
@@ -253,9 +253,9 @@ def F_block(self, snes, x, F):
253253
offset = 0
254254
x_array = x.getArray(readonly=True)
255255
for var in self.soln_vars:
256-
size_local = var.vector.getLocalSize()
257-
var.vector.array[:] = x_array[offset : offset + size_local]
258-
var.vector.ghostUpdate(addv=PETSc.InsertMode.INSERT, mode=PETSc.ScatterMode.FORWARD)
256+
size_local = var.x.petsc_vec.getLocalSize()
257+
var.x.petsc_vec.array[:] = x_array[offset : offset + size_local]
258+
var.x.petsc_vec.ghostUpdate(addv=PETSc.InsertMode.INSERT, mode=PETSc.ScatterMode.FORWARD)
259259
offset += size_local
260260

261261
assemble_vector_block(F, self.L, self.a, bcs=self.bcs, x0=x, scale=-1.0)
@@ -373,7 +373,7 @@ def blocked_solve():
373373
x = create_vector_block(F)
374374
scatter_local_vectors(
375375
x,
376-
[u.vector.array_r, p.vector.array_r],
376+
[u.x.petsc_vec.array_r, p.x.petsc_vec.array_r],
377377
[
378378
(u.function_space.dofmap.index_map, u.function_space.dofmap.index_map_bs),
379379
(p.function_space.dofmap.index_map, p.function_space.dofmap.index_map_bs),
@@ -415,10 +415,10 @@ def nested_solve():
415415
assert x.getType() == "nest"
416416
for x_soln_pair in zip(x.getNestSubVecs(), (u, p)):
417417
x_sub, soln_sub = x_soln_pair
418-
soln_sub.vector.ghostUpdate(
418+
soln_sub.x.petsc_vec.ghostUpdate(
419419
addv=PETSc.InsertMode.INSERT, mode=PETSc.ScatterMode.FORWARD
420420
)
421-
soln_sub.vector.copy(result=x_sub)
421+
soln_sub.x.petsc_vec.copy(result=x_sub)
422422
x_sub.ghostUpdate(addv=PETSc.InsertMode.INSERT, mode=PETSc.ScatterMode.FORWARD)
423423

424424
snes.solve(None, x)
@@ -471,7 +471,7 @@ def monolithic_solve():
471471
U.sub(1).interpolate(initial_guess_p)
472472

473473
x = create_vector(F)
474-
x.array[:] = U.vector.array_r
474+
x.array[:] = U.x.petsc_vec.array_r
475475

476476
snes.solve(None, x)
477477
assert snes.getKSP().getConvergedReason() > 0
@@ -574,7 +574,7 @@ def blocked():
574574
u.interpolate(initial_guess_u)
575575
p.interpolate(initial_guess_p)
576576
x = create_vector_block(F)
577-
with u.vector.localForm() as _u, p.vector.localForm() as _p:
577+
with u.x.petsc_vec.localForm() as _u, p.x.petsc_vec.localForm() as _p:
578578
scatter_local_vectors(
579579
x,
580580
[_u.array_r, _p.array_r],
@@ -619,10 +619,10 @@ def nested():
619619
x = create_vector_nest(F)
620620
for x1_soln_pair in zip(x.getNestSubVecs(), (u, p)):
621621
x1_sub, soln_sub = x1_soln_pair
622-
soln_sub.vector.ghostUpdate(
622+
soln_sub.x.petsc_vec.ghostUpdate(
623623
addv=PETSc.InsertMode.INSERT, mode=PETSc.ScatterMode.FORWARD
624624
)
625-
soln_sub.vector.copy(result=x1_sub)
625+
soln_sub.x.petsc_vec.copy(result=x1_sub)
626626
x1_sub.ghostUpdate(addv=PETSc.InsertMode.INSERT, mode=PETSc.ScatterMode.FORWARD)
627627

628628
x.set(0.0)
@@ -681,7 +681,7 @@ def monolithic():
681681
U.sub(1).interpolate(initial_guess_p)
682682

683683
x = create_vector(F)
684-
x.array[:] = U.vector.array_r
684+
x.array[:] = U.x.petsc_vec.array_r
685685

686686
snes.solve(None, x)
687687
assert snes.getConvergedReason() > 0

python/test/unit/fem/test_petsc_discrete_operators.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def test_gradient_interpolation_petsc(cell_type, p, q):
9292

9393
# Compute global matrix vector product
9494
w = Function(W)
95-
G.mult(u.vector, w.vector)
95+
G.mult(u.x.petsc_vec, w.x.petsc_vec)
9696
w.x.scatter_forward()
9797

9898
atol = 100 * np.finfo(default_real_type).resolution
@@ -154,7 +154,7 @@ def f(x):
154154

155155
# Compute global matrix vector product
156156
w = Function(W)
157-
G.mult(u.vector, w.vector)
157+
G.mult(u.x.petsc_vec, w.x.petsc_vec)
158158
w.x.scatter_forward()
159159

160160
atol = 100 * np.finfo(default_real_type).resolution
@@ -215,7 +215,7 @@ def test_nonaffine_discrete_operator_petsc():
215215

216216
# Compute global matrix vector product
217217
v_vec = Function(V)
218-
G.mult(w.vector, v_vec.vector)
218+
G.mult(w.x.petsc_vec, v_vec.x.petsc_vec)
219219
v_vec.x.scatter_forward()
220220
atol = 10 * np.finfo(default_real_type).resolution
221221
assert np.allclose(v_vec.x.array, v.x.array, atol=atol)

python/test/unit/la/test_krylov_solver.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def sigma(v):
117117
u = Function(V)
118118

119119
# Create near null space basis and orthonormalize
120-
null_space = build_nullspace(V, u.vector)
120+
null_space = build_nullspace(V, u.x.petsc_vec)
121121

122122
# Attached near-null space to matrix
123123
A.set_near_nullspace(null_space)
@@ -134,7 +134,7 @@ def sigma(v):
134134
solver.setOperators(A)
135135

136136
# Compute solution and return number of iterations
137-
return solver.solve(b, u.vector)
137+
return solver.solve(b, u.x.petsc_vec)
138138

139139
# Set some multigrid smoother parameters
140140
opts = PETSc.Options()

python/test/unit/nls/test_newton.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ def __init__(self, F, u, bc):
7575
def F(self, snes, x, F):
7676
"""Assemble residual vector."""
7777
x.ghostUpdate(addv=PETSc.InsertMode.INSERT, mode=PETSc.ScatterMode.FORWARD)
78-
x.copy(self.u.vector)
79-
self.u.vector.ghostUpdate(addv=PETSc.InsertMode.INSERT, mode=PETSc.ScatterMode.FORWARD)
78+
x.copy(self.u.x.petsc_vec)
79+
self.u.x.petsc_vec.ghostUpdate(addv=PETSc.InsertMode.INSERT, mode=PETSc.ScatterMode.FORWARD)
8080

8181
with F.localForm() as f_local:
8282
f_local.set(0.0)
@@ -123,13 +123,13 @@ def update(solver, dx, x):
123123
solver.set_update(update)
124124
solver.atol = 1.0e-8
125125
solver.rtol = 1.0e2 * np.finfo(default_real_type).eps
126-
n, converged = solver.solve(u.vector)
126+
n, converged = solver.solve(u.x.petsc_vec)
127127
assert converged
128128
assert n == 1
129129

130130
# Increment boundary condition and solve again
131131
bc.g.value[...] = PETSc.ScalarType(2.0)
132-
n, converged = solver.solve(u.vector)
132+
n, converged = solver.solve(u.x.petsc_vec)
133133
assert converged
134134
assert n == 1
135135

@@ -161,13 +161,13 @@ def test_nonlinear_pde():
161161
solver.set_form(problem.form)
162162
solver.atol = 1.0e-8
163163
solver.rtol = 1.0e2 * np.finfo(default_real_type).eps
164-
n, converged = solver.solve(u.vector)
164+
n, converged = solver.solve(u.x.petsc_vec)
165165
assert converged
166166
assert n < 6
167167

168168
# Modify boundary condition and solve again
169169
bc.g.value[...] = 0.5
170-
n, converged = solver.solve(u.vector)
170+
n, converged = solver.solve(u.x.petsc_vec)
171171
assert converged
172172
assert n > 0 and n < 6
173173

@@ -206,13 +206,13 @@ def test_nonlinear_pde_snes():
206206
snes.getKSP().setTolerances(rtol=1.0e-9)
207207
snes.getKSP().getPC().setType("lu")
208208

209-
snes.solve(None, u.vector)
209+
snes.solve(None, u.x.petsc_vec)
210210
assert snes.getConvergedReason() > 0
211211
assert snes.getIterationNumber() < 6
212212

213213
# Modify boundary condition and solve again
214214
u_bc.x.array[:] = 0.6
215-
snes.solve(None, u.vector)
215+
snes.solve(None, u.x.petsc_vec)
216216
assert snes.getConvergedReason() > 0
217217
assert snes.getIterationNumber() < 6
218218
# print(snes.getIterationNumber())

0 commit comments

Comments
 (0)