| 65 | virtual const void * GetMesh () const override { return mesh; } |
| 66 | |
| 67 | virtual void GetSort (FlatArray<int> sort) const override |
| 68 | { |
| 69 | int vnums[12]; |
| 70 | |
| 71 | Ngs_Element nel = mesh -> GetElement<DIMS, (DIMS==DIMR)?VOL:BND> (elnr); |
| 72 | for (int j = 0; j < nel.vertices.Size(); j++) |
| 73 | vnums[j] = nel.vertices[j]; |
| 74 | |
| 75 | switch (eltype) |
| 76 | { |
| 77 | case ET_TRIG: |
| 78 | for (int i = 0; i < 3; i++) sort[i] = i; |
| 79 | if (vnums[sort[0]] > vnums[sort[1]]) Swap (sort[0], sort[1]); |
| 80 | if (vnums[sort[1]] > vnums[sort[2]]) Swap (sort[1], sort[2]); |
| 81 | if (vnums[sort[0]] > vnums[sort[1]]) Swap (sort[0], sort[1]); |
| 82 | // vnums[sort[0]] < vnums[sort[1]] < vnums[sort[2]] |
| 83 | break; |
| 84 | |
| 85 | case ET_TET: |
| 86 | for (int i = 0; i < 4; i++) sort[i] = i; |
| 87 | if (vnums[sort[0]] > vnums[sort[1]]) Swap (sort[0], sort[1]); |
| 88 | if (vnums[sort[2]] > vnums[sort[3]]) Swap (sort[2], sort[3]); |
| 89 | if (vnums[sort[0]] > vnums[sort[2]]) Swap (sort[0], sort[2]); |
| 90 | if (vnums[sort[1]] > vnums[sort[3]]) Swap (sort[1], sort[3]); |
| 91 | if (vnums[sort[1]] > vnums[sort[2]]) Swap (sort[1], sort[2]); |
| 92 | |
| 93 | // vnums[sort[0]] < vnums[sort[1]] < vnums[sort[2]] < vnums[sort[3]] |
| 94 | break; |
| 95 | |
| 96 | case ET_PRISM: |
| 97 | for (int i = 0; i < 6; i++) sort[i] = i; |
| 98 | |
| 99 | if (vnums[sort[0]] > vnums[sort[1]]) Swap (sort[0], sort[1]); |
| 100 | if (vnums[sort[1]] > vnums[sort[2]]) Swap (sort[1], sort[2]); |
| 101 | if (vnums[sort[0]] > vnums[sort[1]]) Swap (sort[0], sort[1]); |
| 102 | |
| 103 | if (vnums[sort[3]] > vnums[sort[4]]) Swap (sort[3], sort[4]); |
| 104 | if (vnums[sort[4]] > vnums[sort[5]]) Swap (sort[4], sort[5]); |
| 105 | if (vnums[sort[3]] > vnums[sort[4]]) Swap (sort[3], sort[4]); |
| 106 | break; |
| 107 | |
| 108 | default: |
| 109 | throw Exception ("undefined eltype in ElementTransformation::GetSort()\n"); |
| 110 | } |
| 111 | |
| 112 | } |
| 113 | |
| 114 | |
| 115 | virtual void CalcJacobian (const IntegrationPoint & ip, |
no test coverage detected