Are there only two allowed orders of degrees of freedom, that depend on parameters.reorder_serial_dofs=True/False
, in the case of a three-dimensional vector function space?
More precisely, for a three-dimensional vector field m (with components mx1, my1, and mz1 at mesh node 1, components mx2, my2, and mz2 at mesh node 2, etc.) with parameters.reorder_serial_dofs=True
, the order of degrees of freedom m.vector().array()
is:
[mx1, my1, mz1, mx2, my2, mz2, mx3, my3, mz3, ….],
where vector components at every mesh node are grouped together. On the other hand, if parameters.reorder_serial_dofs=False
, the order does not assume that vector components at every node are grouped together, but it becomes:
[mx1, mx2, mx3, … my1, my2, my3, … mz1, mz2, mz3, …]
where values of a single vector component at all mesh nodes are grouped together.
These two orders can be seen by changing the parameters.reorder_serial_dofs=True/False
in the following code:
import dolfin as df
df.parameters.reorder_dofs_serial = True
mesh = df.IntervalMesh(4, 1, 5)
fspace = df.VectorFunctionSpace(mesh, 'CG', 1, 3)
expression = df.Expression(['x[0]+0.1', 'x[0]+0.2', 'x[0]+0.3'])
f = df.interpolate(expression, fspace)
print f.vector().array()
The expression in this code is chosen so that the number before the decimal point denotes the mesh node and a number after the decimal point determines the component of a vector field.
For reorder_dofs_serial=True
, I get:
[ 5.1 5.2 5.3 4.1 4.2 4.3 3.1 3.2 3.3 2.1 2.2 2.3 1.1 1.2 1.3]
and for reorder_dofs_serial=False
, I obtain:
[ 1.1 2.1 3.1 4.1 5.1 1.2 2.2 3.2 4.2 5.2 1.3 2.3 3.3 4.3 5.3]
The question is: Are there any cases with neither of these two orders?