Arcane  v3.16.4.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Connectivity.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* Connectivity.h (C) 2000-2025 */
9/* */
10/* Descripteur de connectivité. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_CONNECTIVITY_H
13#define ARCANE_CORE_CONNECTIVITY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/core/MeshVariable.h"
19#include "arcane/core/VariableTypes.h"
20
21#include <iostream>
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32class ARCANE_CORE_EXPORT Connectivity
33{
34 public:
35
36 //! Flags de connectivité
37 /*!
38 * Toutes les connectivités ne sont pas débrayables.
39 * La numérotation jusqu'à CellToCell est faite pour la traduction avec _kindsToConnectivity
40 */
42 {
43 CT_Null = 0,
44 // From Node
45 // CT_NodeToNode = 1<<1,
46 CT_NodeToEdge = 1 << 2,
47 CT_NodeToFace = 1 << 3, // Utilisé dans UnstructuredMeshUtilities::localIdsFromConnectivity
48 CT_NodeToCell = 1 << 4,
49 // From Edge
50 CT_EdgeToNode = 1 << 5,
51 // CT_EdgeToEdge = 1<<6,
52 CT_EdgeToFace = 1 << 7,
53 CT_EdgeToCell = 1 << 8,
54 // From Face
55 CT_FaceToNode = 1 << 9,
56 CT_FaceToEdge = 1 << 10,
57 CT_FaceToFace = 1 << 11,
58 CT_FaceToCell = 1 << 12,
59 // From Cell
60 CT_CellToNode = 1 << 13,
61 CT_CellToEdge = 1 << 14,
62 CT_CellToFace = 1 << 15,
63 // CT_CellToCell = 1<<16,
64 CT_DoFToNode = 1 << 17,
65 CT_DoFToEdge = 1 << 18,
66 CT_DoFToFace = 1 << 19,
67 CT_DoFToCell = 1 << 20,
68 CT_DoFToDoF = 1 << 21,
69 CT_DoFToParticle = 1 << 22,
70
71 // Existing kind
72 CT_HasNode = 1 << 23,
73 CT_HasEdge = 1 << 24,
74 CT_HasFace = 1 << 25,
75 CT_HasCell = 1 << 26,
76
77 // Frozen mark
78 CT_Frozen = 1 << 27,
79
80 // Dimension mark
81 CT_Dim1D = 1 << 28,
82 CT_Dim2D = 1 << 29,
83 CT_Dim3D = 1 << 30,
84
85 // Types composés
86 // Connectivité par défaut
87 CT_Default = CT_NodeToCell + CT_NodeToFace + CT_FaceToNode + CT_FaceToCell + CT_CellToNode + CT_CellToFace + CT_HasNode + CT_HasFace + CT_HasCell,
88
89 CT_Default1D = CT_NodeToCell // minimum en 1D
90 + CT_FaceToNode + CT_FaceToCell + CT_CellToNode + CT_CellToFace + CT_HasNode + CT_HasFace + CT_HasCell,
91
92 CT_Default2D = CT_NodeToCell // minimum en 2D
93 + CT_FaceToNode + CT_FaceToCell + CT_CellToNode + CT_CellToFace + CT_HasNode + CT_HasFace + CT_HasCell,
94
95 CT_Default3D = CT_NodeToCell // minimum en 3D
96 + CT_FaceToNode + CT_FaceToCell + CT_CellToNode + CT_CellToFace + CT_HasNode + CT_HasFace + CT_HasCell,
97
98 CT_FullConnectivity2D = CT_NodeToFace + CT_NodeToCell + CT_FaceToNode + CT_FaceToCell + CT_CellToNode + CT_CellToFace + CT_HasNode + CT_HasFace + CT_HasCell,
99
100 CT_FullConnectivity3D = CT_NodeToEdge + CT_NodeToFace + CT_NodeToCell + CT_EdgeToNode + CT_EdgeToFace + CT_EdgeToCell + CT_FaceToNode + CT_FaceToEdge + CT_FaceToCell + CT_FaceToFace + CT_CellToNode + CT_CellToEdge + CT_CellToFace +
101 +CT_HasNode + CT_HasEdge + CT_HasFace + CT_HasCell,
102
103 CT_EdgeConnectivity = CT_HasEdge + CT_NodeToEdge + CT_FaceToEdge + CT_CellToEdge +
104 +CT_EdgeToNode + CT_EdgeToFace + CT_EdgeToCell,
105
106 CT_GraphConnectivity = CT_DoFToNode + CT_DoFToEdge + CT_DoFToFace + CT_DoFToCell + CT_DoFToDoF + CT_DoFToParticle
107 };
108
109 public:
110
111 //! Classe d'écriture d'un marqueur de connectivité
112 class Printer
113 {
114 public:
115
116 explicit Printer(const Integer connectivity)
117 : m_connectivity(connectivity)
118 {}
119
120 public:
121
122 void print(std::ostream& o) const;
123
124 private:
125
126 const Integer m_connectivity = 0;
127 };
128
129 public:
130
131 /** Constructeur de la classe */
132 explicit Connectivity(VariableScalarInteger connectivity);
133
134 public:
135
136 bool hasFace() const { return hasConnectivity(CT_HasFace); }
137 bool hasEdge() const { return hasConnectivity(CT_HasEdge); }
138
139 void enableConnectivity(Integer c);
140 void disableConnectivity(Integer c);
141
142 bool hasConnectivity(Integer c) const;
143 static bool hasConnectivity(Integer connectivity, Integer c)
144 {
145 return _hasConnectivity(connectivity, c);
146 }
147
148 bool isFrozen() const;
149 void freeze(IMesh* mesh);
150
151 static Integer getPrealloc(Integer connectivity, eItemKind kindA, eItemKind kindB);
152
153 //! Fonction d'écriture sur un flux
154 static void print(std::ostream& o, Integer connectivity);
155
156 //! Conversion de type en connectivité
157 static Integer kindsToConnectivity(eItemKind kindA, eItemKind kindB);
158
159 private:
160
161 VariableScalarInteger m_connectivity;
162
163 private:
164
165 void _enableConnectivity(Integer c);
166 void _disableConnectivity(Integer c);
167 static inline bool _hasConnectivity(Integer connectivity, Integer c)
168 {
169 return ((connectivity & c) != 0);
170 }
171
172 static void _checkValid(Integer c);
173 void _checkFrozen() const;
174};
175
176/*---------------------------------------------------------------------------*/
177/*---------------------------------------------------------------------------*/
178
179extern "C++" ARCANE_CORE_EXPORT std::ostream&
180operator<<(std::ostream& o, const Connectivity::Printer& p);
181
182/*---------------------------------------------------------------------------*/
183/*---------------------------------------------------------------------------*/
184
185} // namespace Arcane
186
187/*---------------------------------------------------------------------------*/
188/*---------------------------------------------------------------------------*/
189
190#endif /* ARCANE_CONNECTIVITY_H */
Déclarations des types généraux de Arcane.
Classe d'écriture d'un marqueur de connectivité
eConnectivityType
Flags de connectivité
Connectivity(VariableScalarInteger connectivity)
VariableRefScalarT< Integer > VariableScalarInteger
Variable scalaire de type entier.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
std::ostream & operator<<(std::ostream &ostr, eItemKind item_kind)
Opérateur de sortie sur un flot.