MFEM v4.9.0
Finite element discretization library
Loading...
Searching...
No Matches
ordering.cpp
Go to the documentation of this file.
1#include "ordering.hpp"
2
3namespace mfem
4{
5
6template <>
7void Ordering::DofsToVDofs<Ordering::byNODES>(int ndofs, int vdim,
8 Array<int> &dofs)
9{
10 // static method
11 int size = dofs.Size();
12 dofs.SetSize(size*vdim);
13 for (int vd = 1; vd < vdim; vd++)
14 {
15 for (int i = 0; i < size; i++)
16 {
17 dofs[i+size*vd] = Map<byNODES>(ndofs, vdim, dofs[i], vd);
18 }
19 }
20}
21
22template <>
23void Ordering::DofsToVDofs<Ordering::byVDIM>(int ndofs, int vdim,
24 Array<int> &dofs)
25{
26 // static method
27 int size = dofs.Size();
28 dofs.SetSize(size*vdim);
29 for (int vd = vdim-1; vd >= 0; vd--)
30 {
31 for (int i = 0; i < size; i++)
32 {
33 dofs[i+size*vd] = Map<byVDIM>(ndofs, vdim, dofs[i], vd);
34 }
35 }
36}
37
38void Ordering::Reorder(Vector &v, int vdim, Ordering::Type in_ord,
39 Ordering::Type out_ord)
40{
41 if (in_ord == out_ord)
42 {
43 return;
44 }
45
46 int nvdofs = v.Size();
47 int nldofs = nvdofs/vdim;
48
49 if (out_ord == Ordering::byNODES) // byVDIM -> byNODES
50 {
51 Vector temp = v;
52 for (int d = 0; d < vdim; d++)
53 {
54 int off = d * nldofs;
55 for (int i = 0; i < nldofs; i++)
56 {
57 v[i + off] = temp[Map<byVDIM>(nldofs,vdim,i,d)];
58 }
59 }
60 }
61 else // byNODES -> byVDIM
62 {
63 Vector temp = v;
64 for (int i = 0; i < nldofs; i++)
65 {
66 int off = i*vdim;
67 for (int d = 0; d < vdim; d++)
68 {
69 v[d + off] = temp[Map<byNODES>(nldofs,vdim,i,d)];
70 }
71 }
72 }
73}
74
75} // namespace mfem
void SetSize(int nsize)
Change the logical size of the array, keep existing entries.
Definition array.hpp:840
int Size() const
Return the logical size of the array.
Definition array.hpp:166
static int Map(int ndofs, int vdim, int dof, int vd)
Type
Ordering methods:
Definition ordering.hpp:17
static void Reorder(Vector &v, int vdim, Type in_ord, Type out_ord)
Reorder Vector v from its current ordering in_ord to out_ord.
Definition ordering.cpp:38
Vector data type.
Definition vector.hpp:82
int Size() const
Returns the size of the vector.
Definition vector.hpp:234