I switched to conda and installed fenicsx. However, orthonormalize is giving error of not compatible with input arguments. I am giving nullspace basis as list.
The MWE is:
import dolfinx
from mpi4py import MPI
import numpy as np
# Create a mesh and a function space
mesh = dolfinx.mesh.create_unit_square(MPI.COMM_WORLD, 8, 8)
V_l = dolfinx.fem.functionspace(mesh, basix.ufl.element(
"CG", mesh.topology.cell_name(), 1, shape=(3, )))
# Create list of vectors for null space---------------------------------------------
index_map = V_l.dofmap.index_map
nullspace_basis = [dolfinx.la.create_petsc_vector(index_map, V_l.dofmap.index_map_bs) for i in range(3)]
with ExitStack() as stack:
vec_local = [stack.enter_context(x.localForm()) for x in nullspace_basis]
for i, local_array in enumerate(vec_local):
np_array = np.asarray(local_array)
dof_indices = V_l.sub(i).dofmap.list # Get dof indices for x, y, z
np_array[dof_indices] = 1.0 # Set relevant dofs to 1.0
dolfinx.la.orthonormalize(nullspace_basis)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[29], line 21
18 dof_indices = V_l.sub(i).dofmap.list # Get dof indices for x, y, z
19 np_array[dof_indices] = 1.0 # Set relevant dofs to 1.0
---> 21 dolfinx.la.orthonormalize(nullspace_basis)
File ~/miniconda3/envs/fenicsx-env/lib/python3.10/site-packages/dolfinx/la.py:372, in orthonormalize(basis)
370 def orthonormalize(basis: list[Vector]):
371 """Orthogonalise set of PETSc vectors in-place."""
--> 372 _cpp.la.orthonormalize([x._cpp_object for x in basis])
File ~/miniconda3/envs/fenicsx-env/lib/python3.10/site-packages/dolfinx/la.py:372, in <listcomp>(.0)
370 def orthonormalize(basis: list[Vector]):
371 """Orthogonalise set of PETSc vectors in-place."""
--> 372 _cpp.la.orthonormalize([x._cpp_object for x in basis])
AttributeError: 'petsc4py.PETSc.Vec' object has no attribute '_cpp_object'
I am stuck now and tried a lot by changing input, but it looks doflinx and petsc are incompatible. What should I make nullspace basis to make orthonormalize work.
Any help is greatly appreciated.