Hello,
the setting of my problem is the following:
I have a finite element space V_base
defined on the whole mesh and a compressed space V_comp = Compress(V_base, active_dofs)
on some DOFs given by the Bitarray active_dofs
. On the base space, there is a gridfunction gf_base
and I need it to be defined on the compressed space. Thus, I only want to delete some of the entries in the coefficient vector (the ones not marked by active_dofs
).
Is there an efficient way for doing this?
At the moment I use the workaround of taking the numpy vector and creating a masked vector with the Bitarray:
gf_comp.vec.FV().NumPy()[:] = gf_base.vec.FV().NumPy()[active_dofs]
But this seems to be inefficient since the vector is copied everytime. I need this feature several times in each time step in my example. That’s why I’am looking for a more efficient way to solve it.
I also tried the ConvertOperator
but since my space changes in each time step, I would have to create the ConvertMatrix in each time step (I havn’t found an Update functionallity) and this is also time and memory expensive.
Thanks for your help!
Paul