14#include "arcane/utils/NotSupportedException.h"
16#include "arcane/cartesianmesh/CartesianConnectivity.h"
18#include "arcane/IMesh.h"
19#include "arcane/IItemFamily.h"
20#include "arcane/VariableTypes.h"
37 m_permutation = permutation;
66void CartesianConnectivity::
77 Index& idx =
cc._index(node);
78 idx.fill(NULL_ITEM_LOCAL_ID);
80 for (Integer i = 0; i <
nb_cell; ++i) {
91 if (cell_coord.
x > node_coord.
x)
92 idx.v[P_LowerRight] = cell_lid;
94 idx.v[P_LowerLeft] = cell_lid;
101 Real3 cell_coord = cells_coord[cell];
102 Index& idx = _index(cell);
103 idx.fill(NULL_ITEM_LOCAL_ID);
104 Integer nb_node = cell.nbNode();
105 for (Integer i = 0; i < nb_node; ++i) {
106 Node node = cell.node(i);
107 Int32 node_lid = node.localId();
108 Real3 node_coord = nodes_coord[node];
109 if (node_coord.y > cell_coord.y) {
110 if (node_coord.x > cell_coord.x)
111 idx.v[P_UpperRight] = node_lid;
113 idx.v[P_UpperLeft] = node_lid;
116 if (node_coord.x > cell_coord.x)
117 idx.v[P_LowerRight] = node_lid;
119 idx.v[P_LowerLeft] = node_lid;
128void CartesianConnectivity::
132 CartesianConnectivity& cc = *
this;
133 IItemFamily* node_family = mesh->nodeFamily();
134 IItemFamily* cell_family = mesh->cellFamily();
138 Real3 node_coord = nodes_coord[inode];
139 Index& idx = cc._index(node);
140 idx.fill(NULL_ITEM_LOCAL_ID);
141 Integer nb_cell = node.nbCell();
142 for (Integer i = 0; i < nb_cell; ++i) {
143 Cell cell = node.cell(i);
144 Int32 cell_lid = cell.localId();
145 Real3 cell_coord = cells_coord[cell];
147 if (cell_coord.z > node_coord.z) {
148 if (cell_coord.y > node_coord.y) {
149 if (cell_coord.x > node_coord.x)
150 idx.v[P_TopZUpperRight] = cell_lid;
152 idx.v[P_TopZUpperLeft] = cell_lid;
155 if (cell_coord.x > node_coord.x)
156 idx.v[P_TopZLowerRight] = cell_lid;
158 idx.v[P_TopZLowerLeft] = cell_lid;
162 if (cell_coord.y > node_coord.y) {
163 if (cell_coord.x > node_coord.x)
164 idx.v[P_UpperRight] = cell_lid;
166 idx.v[P_UpperLeft] = cell_lid;
169 if (cell_coord.x > node_coord.x)
170 idx.v[P_LowerRight] = cell_lid;
172 idx.v[P_LowerLeft] = cell_lid;
180 Real3 cell_coord = cells_coord[cell];
181 Index& idx = _index(cell);
182 idx.fill(NULL_ITEM_LOCAL_ID);
183 Integer nb_node = cell.nbNode();
184 for (Integer i = 0; i < nb_node; ++i) {
185 Node node = cell.node(i);
186 Int32 node_lid = node.localId();
187 Real3 node_coord = nodes_coord[node];
189 if (node_coord.z > cell_coord.z) {
190 if (node_coord.y > cell_coord.y) {
191 if (node_coord.x > cell_coord.x)
192 idx.v[P_TopZUpperRight] = node_lid;
194 idx.v[P_TopZUpperLeft] = node_lid;
197 if (node_coord.x > cell_coord.x)
198 idx.v[P_TopZLowerRight] = node_lid;
200 idx.v[P_TopZLowerLeft] = node_lid;
204 if (node_coord.y > cell_coord.y) {
205 if (node_coord.x > cell_coord.x)
206 idx.v[P_UpperRight] = node_lid;
208 idx.v[P_UpperLeft] = node_lid;
211 if (node_coord.x > cell_coord.x)
212 idx.v[P_LowerRight] = node_lid;
214 idx.v[P_LowerLeft] = node_lid;
232 { 0, 1, 2, 3, 4, 5, 6, 7 },
233 { 3, 0, 1, 2, 7, 4, 5, 6 },
234 { 1, 5, 6, 2, 0, 4, 7, 3 }
237 for (Int32 i = 0; i < 3; ++i)
238 for (Int32
j = 0;
j < 8; ++
j)
Informations de connectivité d'un maillage cartésien.
void _computeInfos(IMesh *mesh, VariableNodeReal3 &nodes_coord, VariableCellReal3 &cells_coord)
Calcule les infos de connectivité.
ePosition
Type énuméré indiquant la position.
void _setStorage(ArrayView< Index > nodes_to_cell, ArrayView< Index > cells_to_node, const Permutation *permutation)
Positionne les tableaux contenant les infos de connectivité
Vue sur les informations des mailles.
Interface d'une famille d'entités.
virtual ItemGroup allItems() const =0
Groupe de toutes les entités.
virtual IItemFamily * nodeFamily()=0
Retourne la famille des noeuds.
virtual Integer dimension()=0
Dimension du maillage (1D, 2D ou 3D).
virtual IItemFamily * cellFamily()=0
Retourne la famille des mailles.
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Vue sur les informations des noeuds.
Cell cell(Int32 i) const
i-ème maille du noeud
Int32 nbCell() const
Nombre de mailles connectées au noeud.
Classe gérant un vecteur de réel de dimension 3.
Exception lorsqu'une opération n'est pas supportée.
MeshVariableScalarRefT< Cell, Real3 > VariableCellReal3
Grandeur au centre des mailles de type coordonnées.
MeshVariableScalarRefT< Node, Real3 > VariableNodeReal3
Grandeur au noeud de type coordonnées.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
Permutation dans Index pour chaque direction.
void compute()
Calcule les permutations des 8 ePosition pour chaque direction.
Real x
première composante du triplet