How to assemble matrix and vector without node reordering

10 months ago by

It came to my attention that, the FEniCS assembly and solve routines are optimized for speed by changing the nodes ordering. After solving, the solution vector is changed to the original node ordering for visualization.
For example: Printed soution after solving Poisson's problem for a small mesh:
U = [ 0.  0.  -0.24479167  0. -0.47916667   -0.27604167   0.  -0.24479167  0. -0.27604167  0. 0. 0.]

And when I open "poisson000000.vtu" it is reordered to assign outputs to appropriate nodes:
U = [ 0. 0. 0. 0. 0. 0. 0. 0. -0.47916667  -0.27604167  -0.24479167  -0.24479167  -0.27604167].

Is there a way to get the assembly matrix and vector without node reordering, even if it is slow?
Or a way to reorder the assembled matrix and vector to the original nodal orders? 

I am interested in calling assembly routines from FEniCS and then use the in-house domain decomposition methods (DDM solver) to solve the system. To do that, I need to export the assembly matrix and vector in its original nodal order.

Community: FEniCS Project

2 Answers

10 months ago by
Adding "parameters['reorder_dofs_serial'] = False" seems to do the tric. 

10 months ago by
I would use "vertex_to_dof_map" to get the ordering indices. For example:

mesh = UnitSquareMesh(2**5, 2**5)
V = FunctionSpace(mesh, 'CG', 1)

order = vertex_to_dof_map(V)​
Please login to add an answer/comment or follow this question.

Similar posts:
Search »