Arcane  v4.1.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
CellConnectivity.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* CellConnectivity.cc (C) 2000-2026 */
9/* */
10/* Informations sur la connectivité d'une maille. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14//#include "arcane/geometric/IGeometric.h"
15#include "arcane/geometry/CellConnectivity.h"
16//#include "arcane/geometric/CellGeom.h"
17//#include "arcane/geometric/CellGeomList.h"
18
19#include "arcane/core/AbstractItemOperationByBasicType.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane::geometric
25{
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32inline void CellConnectivity::
33_setEdgeDirectConnectic()
34{
35 if (m_edge_connectic){
36 // Cas 3D
37 for( Integer i=0, n=nbEdge(); i<n; ++i ){
38 m_edge_direct_connectic[(i*2)] = m_edge_connectic[i].node(0);
39 m_edge_direct_connectic[(i*2)+1] = m_edge_connectic[i].node(1);
40 }
41 }
42 else{
43 // Cas 2D.
44 // Dans ce cas les arêtes sont numérotés en fonction des noeuds.
45 for( Integer i=0, n=nbEdge(); i<n; ++i ){
46 m_edge_direct_connectic[(i*2)] = i;
47 m_edge_direct_connectic[(i*2)+1] = (i+1) % n;
48 }
49 }
50}
51
52/*---------------------------------------------------------------------------*/
53/*---------------------------------------------------------------------------*/
54
55void NullConnectivity::
56_init()
57{
58 _setEdgeDirectConnectic();
59}
60
61void VertexConnectivity::
62_init()
63{
64 _setEdgeDirectConnectic();
65}
66
67void Line2Connectivity::
68_init()
69{
70 _setEdgeDirectConnectic();
71}
72
73void Pentagon5Connectivity::
74_init()
75{
76 _setEdgeDirectConnectic();
77 // TODO
78}
79
80void Hexagon6Connectivity::
81_init()
82{
83 _setEdgeDirectConnectic();
84 // TODO
85}
86
87void Hexaedron8Connectivity::
88_init()
89{
90 using namespace Arcane::geometric;
91
92 m_nb_sub_zone = 8;
93 m_node_connectic = hexa_node_connectic;
94 m_edge_connectic = hexa_edge_connectic;
95 m_face_connectic = hexa_face_connectic;
96 m_node_association = hexa_node_association;
97
98 m_svc_face_connectic = hexa_svc_face_connectic;
99 m_nb_svc_face = sizeof(hexa_svc_face_connectic) / sizeof(hexa_svc_face_connectic[0]);
100
104 m_face_node_sub_zone_id[0] = 2;
105 m_face_node_sub_zone_id[1] = 7;
106 m_face_node_sub_zone_id[2] = 5;
107
108 _setEdgeDirectConnectic();
109}
110
111void Pyramid5Connectivity::
112_init()
113{
114 using namespace Arcane::geometric;
115
116 m_nb_sub_zone = 8;
117 m_node_connectic = pyra_node_connectic;
118 m_edge_connectic = pyra_edge_connectic;
119 m_face_connectic = pyra_face_connectic;
120 m_node_association = pyra_node_association;
121 m_svc_face_connectic = pyra_svc_face_connectic;
122 m_nb_svc_face = sizeof(pyra_svc_face_connectic) / sizeof(pyra_svc_face_connectic[0]);
126 m_face_node_sub_zone_id[0] = 2;
127 m_face_node_sub_zone_id[1] = 7;
128 m_face_node_sub_zone_id[2] = 5;
129
130 _setEdgeDirectConnectic();
131}
132
133void Pentaedron6Connectivity::
134_init()
135{
136 using namespace Arcane::geometric;
137
138 m_nb_sub_zone = 6;
139 m_node_connectic = penta_node_connectic;
140 m_edge_connectic = penta_edge_connectic;
141 m_face_connectic = penta_face_connectic;
142 m_node_association = penta_node_association;
143 m_svc_face_connectic = penta_svc_face_connectic;
144 m_nb_svc_face = sizeof(penta_svc_face_connectic) / sizeof(penta_svc_face_connectic[0]);
148 m_face_node_sub_zone_id[0] = 2;
149 m_face_node_sub_zone_id[1] = 7;
150 m_face_node_sub_zone_id[2] = 5;
151
152 _setEdgeDirectConnectic();
153}
154
155void Tetraedron4Connectivity::
156_init()
157{
158 using namespace Arcane::geometric;
159
160 m_nb_sub_zone = 4;
161 m_node_connectic = tetra_node_connectic;
162 m_edge_connectic = tetra_edge_connectic;
163 m_face_connectic = tetra_face_connectic;
164 m_node_association = tetra_node_association;
165
166 m_svc_face_connectic = tetra_svc_face_connectic;
167 m_nb_svc_face = sizeof(tetra_svc_face_connectic) /sizeof(tetra_svc_face_connectic[0]);
171 m_face_node_sub_zone_id[0] = 2;
172 m_face_node_sub_zone_id[1] = 7;
173 m_face_node_sub_zone_id[2] = 5;
174
175 _setEdgeDirectConnectic();
176}
177
178void Heptaedron10Connectivity::
179_init()
180{
181 using namespace Arcane::geometric;
182
183 m_nb_sub_zone = 10;
184 m_node_connectic = wedge7_node_connectic;
185 m_edge_connectic = wedge7_edge_connectic;
186 m_face_connectic = wedge7_face_connectic;
187 m_node_association = wedge7_node_association;
188
189 m_svc_face_connectic = wedge7_svc_face_connectic;
190 m_nb_svc_face = sizeof(wedge7_svc_face_connectic) / sizeof(wedge7_svc_face_connectic[0]);
194 m_face_node_sub_zone_id[0] = 2;
195 m_face_node_sub_zone_id[1] = 7;
196 m_face_node_sub_zone_id[2] = 5;
197
198 _setEdgeDirectConnectic();
199}
200
201void Octaedron12Connectivity::
202_init()
203{
204 using namespace Arcane::geometric;
205
206 m_nb_sub_zone = 12;
207 m_node_connectic = wedge8_node_connectic;
208 m_edge_connectic = wedge8_edge_connectic;
209 m_face_connectic = wedge8_face_connectic;
210 m_node_association = wedge8_node_association;
211
212 m_svc_face_connectic = wedge8_svc_face_connectic;
213 m_nb_svc_face = sizeof(wedge8_svc_face_connectic) / sizeof(wedge8_svc_face_connectic[0]);
217 m_face_node_sub_zone_id[0] = 2;
218 m_face_node_sub_zone_id[1] = 7;
219 m_face_node_sub_zone_id[2] = 5;
220
221 _setEdgeDirectConnectic();
222}
223
224void Quad4Connectivity::
225_init()
226{
227 using namespace Arcane::geometric;
228
229 m_nb_sub_zone = 4;
230 m_node_connectic = quad_node_connectic;
231 m_edge_connectic = 0;
232 m_face_connectic = quad_face_connectic;
233 m_node_association = quad_node_association;
234
235 m_svc_face_connectic = quad_svc_face_connectic;
236 m_nb_svc_face = sizeof(quad_svc_face_connectic) /sizeof(quad_svc_face_connectic[0]);
240 m_face_node_sub_zone_id[0] = 1;
241 m_face_node_sub_zone_id[1] = 3;
242 m_face_node_sub_zone_id[2] = 0;
243
244 _setEdgeDirectConnectic();
245}
246
247void Triangle3Connectivity::
248_init()
249{
250 using namespace Arcane::geometric;
251
252 m_nb_sub_zone = 4;
253 m_node_connectic = triangle_node_connectic;
254 m_edge_connectic = 0;
255 m_face_connectic = triangle_face_connectic;
256 m_node_association = triangle_node_association;
257
258 m_svc_face_connectic = triangle_svc_face_connectic;
259 m_nb_svc_face = sizeof(triangle_svc_face_connectic)/sizeof(triangle_svc_face_connectic[0]);
263 m_face_node_sub_zone_id[0] = 1;
264 m_face_node_sub_zone_id[1] = 3;
265 m_face_node_sub_zone_id[2] = 0;
266
267 _setEdgeDirectConnectic();
268}
269
270/*---------------------------------------------------------------------------*/
271/*---------------------------------------------------------------------------*/
272
273} // namespace Arcane::geometric
274
275/*---------------------------------------------------------------------------*/
276/*---------------------------------------------------------------------------*/
Integer m_edge_direct_connectic[ItemStaticInfo::MAX_CELL_EDGE *2]
Connectique pour les arêtes.
Integer m_nb_sub_zone
Nombre de sous volume de controle.
const Integer * m_node_association
Numero local du sommet associé au sous volume de controle.
Integer m_edge_node_sub_zone_id[3]
Numéro locaux dans le sous-volumes de contrôle.
Int32 Integer
Type représentant un entier.