Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ItemPrinter.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* ItemPrinter.cc (C) 2000-2024 */
9/* */
10/* Ecriture d'Item sur flux. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/String.h"
15
16#include "arcane/ItemPrinter.h"
17#include "arcane/ItemInternalEnumerator.h"
18#include "arcane/IItemFamily.h"
19#include "arcane/IMesh.h"
20#include "arcane/MeshPartInfo.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25/*
26 * TODO: Il faudrait gérer l'affichage de l'entité via IItemFamily.
27 *
28 * Cela permettrait de spécialiser l'affichage par famille.
29 */
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34namespace Arcane
35{
36using impl::ItemBase;
37
38/*---------------------------------------------------------------------------*/
39/*---------------------------------------------------------------------------*/
40
41struct ARCANE_CORE_EXPORT ItemPrinter::Internal
42{
44 static void _printBasics(std::ostream& o, ItemBase item);
46 static void _printFlags(std::ostream& o, Integer flags);
48 static void _printParents(std::ostream& o, ItemBase item);
50 static void _printErrors(std::ostream& o, ItemBase item);
52 static void _printItemSubItems(std::ostream& ostr, String name, const ItemVectorView& enumerator);
53};
54
55/*---------------------------------------------------------------------------*/
56/*---------------------------------------------------------------------------*/
57
59print(std::ostream& o) const
60{
61 if (m_item.null()) {
62 if (m_has_item_kind) {
63 o << "(null " << itemKindName(m_item_kind) << ")";
64 }
65 else {
66 o << "(null Item)";
67 }
68 }
69 else {
70 o << "(";
75 o << ")";
76 }
77}
78
79/*---------------------------------------------------------------------------*/
80/*---------------------------------------------------------------------------*/
81
83print(std::ostream& ostr) const
84{
85 if (m_item.null()) {
86 ostr << "(null Item)";
87 }
88 else {
89 eItemKind ik = m_item.kind();
90 ostr << "(";
95 ostr << ")";
96 ostr << "\n\t";
97 if (ik != IK_Node)
98 if (m_item.nbNode() != 0)
100 ostr << "\n\t";
101 if (ik != IK_Edge)
102 if (m_item.nbEdge() != 0)
103 ItemPrinter::Internal::_printItemSubItems(ostr, "Edges", m_item.edgeList());
104 ostr << "\n\t";
105 if (m_item.nbFace() != 0)
106 ItemPrinter::Internal::_printItemSubItems(ostr, "Faces", m_item.faceList());
107 ostr << "\n\t";
108 if (ik != IK_Cell)
109 if (m_item.nbCell() != 0)
110 ItemPrinter::Internal::_printItemSubItems(ostr, "Cells", m_item.cellList());
111 }
112}
113
114/*---------------------------------------------------------------------------*/
115/*---------------------------------------------------------------------------*/
116
117void NeighborItemPrinter::
118_printSubItems(std::ostream& ostr, Integer level, Integer levelmax,
119 ItemVectorView sub_items, const char* name)
120{
121 indent(ostr, levelmax - level) << String::plural(sub_items.size(), name) << ":\n";
122 for (Item sub_item : sub_items) {
123 indent(ostr, levelmax - level) << "\t" << name;
124 print(ostr, sub_item, level - 1, levelmax);
125 ostr << "\n";
126 }
127}
128
129/*---------------------------------------------------------------------------*/
130/*---------------------------------------------------------------------------*/
131
133print(std::ostream& ostr, Item xitem, Integer level, Integer levelmax)
134{
135 impl::ItemBase item = xitem.itemBase();
136 if (xitem.null()) {
137 ostr << "(null Item)";
138 }
139 else {
140 eItemKind ik = item.kind();
141 ostr << "(";
143 ItemPrinter::Internal::_printFlags(ostr, item.flags());
146 ostr << ")";
147 if (level > 0) {
148 ostr << "\n";
149 if (ik != IK_Node)
150 if (item.nbNode() != 0)
151 _printSubItems(ostr, level, levelmax, item.nodeList(), "node");
152 if (item.nbEdge() != 0)
153 _printSubItems(ostr, level, levelmax, item.edgeList(), "edge");
154 if (item.nbFace() != 0)
155 _printSubItems(ostr, level, levelmax, item.faceList(), "face");
156 if (ik != IK_Cell)
157 if (item.nbCell() != 0)
158 _printSubItems(ostr, level, levelmax, item.cellList(), "cell");
159 }
160 }
161}
162
163std::ostream& NeighborItemPrinter::
164indent(std::ostream& ostr, Integer level)
165{
166 for (Integer l = 0; l < level; ++l)
167 ostr << "\t";
168 return ostr;
169}
170
171/*---------------------------------------------------------------------------*/
172/*---------------------------------------------------------------------------*/
173
174/*---------------------------------------------------------------------------*/
175/*---------------------------------------------------------------------------*/
176
178_printBasics(std::ostream& o, impl::ItemBase item)
179{
180 o << "uid=" << item.uniqueId()
181 << ",lid=" << item.localId()
182 << ",owner=" << item.owner()
183 << ",type=" << item.typeInfo()->typeName()
184 << ",kind=" << itemKindName(item.kind());
185}
186
187/*---------------------------------------------------------------------------*/
188/*---------------------------------------------------------------------------*/
189
191_printFlags(std::ostream& o, Integer flags)
192{
193 Integer position = 0;
194 o << ",flags=";
195 if (flags & ItemFlags::II_Boundary)
196 o << ((position++) ? "|" : "") << "Boundary";
197 if (flags & ItemFlags::II_HasFrontCell)
198 o << ((position++) ? "|" : "") << "HasFrontCell";
199 if (flags & ItemFlags::II_HasBackCell)
200 o << ((position++) ? "|" : "") << "HasBackCell";
202 o << ((position++) ? "|" : "") << "FrontCellIsFirst";
204 o << ((position++) ? "|" : "") << "BackCellIsFirst";
205 if (flags & ItemFlags::II_Own)
206 o << ((position++) ? "|" : "") << "Own";
207 if (flags & ItemFlags::II_Added)
208 o << ((position++) ? "|" : "") << "Added";
209 if (flags & ItemFlags::II_Suppressed)
210 o << ((position++) ? "|" : "") << "Suppressed";
211 if (flags & ItemFlags::II_Shared)
212 o << ((position++) ? "|" : "") << "Shared";
214 o << ((position++) ? "|" : "") << "SubDomainBoundary";
215 // if (flags & ItemFlags::II_JustRemoved)
216 // o << ((position++)?"|":"") << "JustRemoved";
217 if (flags & ItemFlags::II_JustAdded)
218 o << ((position++) ? "|" : "") << "JustAdded";
219 if (flags & ItemFlags::II_NeedRemove)
220 o << ((position++) ? "|" : "") << "NeedRemove";
221 if (flags & ItemFlags::II_SlaveFace)
222 o << ((position++) ? "|" : "") << "SlaveFace";
223 if (flags & ItemFlags::II_MasterFace)
224 o << ((position++) ? "|" : "") << "MasterFace";
225 if (flags & ItemFlags::II_Detached)
226 o << ((position++) ? "|" : "") << "Detached";
227 if (flags & ItemFlags::II_HasTrace)
228 o << ((position++) ? "|" : "") << "HasTrace";
229 if (flags & ItemFlags::II_Coarsen)
230 o << ((position++) ? "|" : "") << "Coarsen";
231 if (flags & ItemFlags::II_DoNothing)
232 o << ((position++) ? "|" : "") << "DoNothing";
233 if (flags & ItemFlags::II_Refine)
234 o << ((position++) ? "|" : "") << "Refine";
235 if (flags & ItemFlags::II_JustRefined)
236 o << ((position++) ? "|" : "") << "JustRefined";
237 if (flags & ItemFlags::II_JustCoarsened)
238 o << ((position++) ? "|" : "") << "JustCoarsened";
239 if (flags & ItemFlags::II_Inactive)
240 o << ((position++) ? "|" : "") << "Inactive";
242 o << ((position++) ? "|" : "") << "CoarsenInactive";
243 if (flags & ItemFlags::II_UserMark1)
244 o << ((position++) ? "|" : "") << "UserMark1";
245 if (flags & ItemFlags::II_UserMark2)
246 o << ((position++) ? "|" : "") << "UserMark2";
247 if (position == 0)
248 o << "0";
249}
250
251/*---------------------------------------------------------------------------*/
252/*---------------------------------------------------------------------------*/
253
255_printParents(std::ostream& o, ItemBase item)
256{
257 if (item.nbParent() > 0) {
258 ItemBase parent = item.parentBase(0);
259 o << ",parent uid/lid="
260 << parent.uniqueId()
261 << "/"
262 << parent.localId();
263 }
264}
265
266/*---------------------------------------------------------------------------*/
267/*---------------------------------------------------------------------------*/
268
270_printErrors(std::ostream& o, ItemBase item)
271{
272 if (item.isSuppressed())
273 return;
274 const char* str = ", error=";
275 Integer nerror = 0;
276 Int32 mesh_rank = item.family()->mesh()->meshPartInfo().partRank();
277 if (item.isOwn() != (mesh_rank == item.owner()))
278 o << ((nerror++ == 0) ? str : "|") << "WRONG ISOWN";
279 if (item.nbParent() > 0) {
280 // Les erreurs sont ici exclusives car invalidantes pour l'item
281 ItemBase parent = item.parentBase(0);
282 if (parent.uniqueId() != item.uniqueId())
283 o << ((nerror++ == 0) ? str : "|") << "PARENT UID MISMATCH";
284 else if (parent.isSuppressed())
285 o << ((nerror++ == 0) ? str : "|") << "SUPPRESSED PARENT";
286 else if (parent.owner() != item.owner())
287 o << ((nerror++ == 0) ? str : "|") << "PARENT OWNER MISMATCH";
288 }
289}
290
291/*---------------------------------------------------------------------------*/
292/*---------------------------------------------------------------------------*/
293
295_printItemSubItems(std::ostream& ostr, String name, const ItemVectorView& enumerator)
296{
297 ostr << " " << name << " count=" << enumerator.size();
298 ostr << " (uids=";
299 for (Item item : enumerator) {
300 if (item.localId() != NULL_ITEM_ID) {
301 if (!item.null())
302 ostr << " " << item.uniqueId();
303 else
304 ostr << " (null)";
305 }
306 else
307 ostr << " (null)";
308 }
309 ostr << ", lids=";
310 for (Item item : enumerator) {
311 if (item.localId() != NULL_ITEM_ID) {
312 if (!item.null())
313 ostr << " " << item.localId();
314 else
315 ostr << " (null)";
316 }
317 else
318 ostr << " (null)";
319 }
320 ostr << ")";
321}
322
323/*---------------------------------------------------------------------------*/
324/*---------------------------------------------------------------------------*/
325
326} // End namespace Arcane
327
328/*---------------------------------------------------------------------------*/
329/*---------------------------------------------------------------------------*/
void print(std::ostream &o) const
Ecriture sur flux de l'Item courant et de ses sous-items.
virtual IMesh * mesh() const =0
Maillage associé
Classe de base pour les entités du maillage.
Integer nbEdge() const
Nombre d'arêtes de l'entité ou nombre d'arêtes connectés à l'entités (pour les noeuds)
bool isSuppressed() const
Vrai si l'entité est supprimée.
ItemUniqueId uniqueId() const
Numéro unique de l'entité
eItemKind kind() const
Genre de l'entité
Integer nbCell() const
Nombre de mailles connectées à l'entité (pour les noeuds, arêtes et faces)
IItemFamily * family() const
Famille dont est issue l'entité
Int32 owner() const
Numéro du sous-domaine propriétaire de l'entité
Int32 flags() const
Flags de l'entité
Integer nbFace() const
Nombre de faces de l'entité ou nombre de faces connectés à l'entités (pour les noeuds et arêtes)
impl::ItemIndexedListView< DynExtent > nodeList() const
Méthodes utilisant les nouvelles connectivités pour accéder aux informations de connectivité....
ItemTypeInfo * typeInfo() const
Type de l'entité.
bool isOwn() const
Vrai si l'entité appartient au sous-domaine.
Integer nbNode() const
Nombre de noeuds de l'entité
Integer nbParent() const
Nombre de parent pour les sous-maillages.
bool null() const
Vrai si l'entité est l'entité nulle.
Int32 localId() const
Numéro local (au sous-domaine) de l'entité
@ II_FrontCellIsFirst
La première maille de l'entité est la maille devant.
Definition ItemFlags.h:46
@ II_NeedRemove
L'entité doit être supprimé
Definition ItemFlags.h:55
@ II_MasterFace
L'entité est une face maître d'une interface.
Definition ItemFlags.h:57
@ II_Inactive
L'entité est inactive //COARSEN_INACTIVE,.
Definition ItemFlags.h:66
@ II_Refine
L'entité est marquée pour raffinement.
Definition ItemFlags.h:63
@ II_JustAdded
L'entité vient d'être ajoutée.
Definition ItemFlags.h:54
@ II_Shared
L'entité est partagée par un autre sous-domaine.
Definition ItemFlags.h:51
@ II_HasBackCell
L'entité a une maille derrière.
Definition ItemFlags.h:45
@ II_SubDomainBoundary
L'entité est à la frontière de deux sous-domaines.
Definition ItemFlags.h:52
@ II_JustRefined
L'entité vient d'être raffinée.
Definition ItemFlags.h:64
@ II_Own
L'entité est une entité propre au sous-domaine.
Definition ItemFlags.h:48
@ II_Suppressed
L'entité vient d'être supprimée.
Definition ItemFlags.h:50
@ II_Detached
L'entité est détachée du maillage.
Definition ItemFlags.h:58
@ II_Boundary
L'entité est sur la frontière.
Definition ItemFlags.h:43
@ II_HasTrace
L'entité est marquée pour trace (pour débug)
Definition ItemFlags.h:59
@ II_Added
L'entité vient d'être ajoutée.
Definition ItemFlags.h:49
@ II_SlaveFace
L'entité est une face esclave d'une interface.
Definition ItemFlags.h:56
@ II_CoarsenInactive
L'entité est inactive et a des enfants tagués pour déraffinement.
Definition ItemFlags.h:67
@ II_UserMark2
Marque utilisateur old_value 1<<25.
Definition ItemFlags.h:70
@ II_HasFrontCell
L'entité a une maille devant.
Definition ItemFlags.h:44
@ II_DoNothing
L'entité est bloquée.
Definition ItemFlags.h:62
@ II_BackCellIsFirst
La première maille de l'entité est la maille derrière.
Definition ItemFlags.h:47
@ II_Coarsen
L'entité est marquée pour déraffinement.
Definition ItemFlags.h:61
@ II_JustCoarsened
L'entité vient d'être déraffiné
Definition ItemFlags.h:65
@ II_UserMark1
Marque utilisateur old_value 1<<24.
Definition ItemFlags.h:69
Classe utilitaire pour imprimer les infos sur une entité.
Definition ItemPrinter.h:35
void print(std::ostream &o) const
Ecriture sur flux de l'Item courant.
String typeName() const
Nom du type.
Vue sur un vecteur d'entités.
Int32 size() const
Nombre d'éléments du vecteur.
Classe de base d'un élément de maillage.
Definition Item.h:83
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
void print(std::ostream &o) const
Ecriture sur flux de l'Item courant et de ses sous-items.
Chaîne de caractères unicode.
static String plural(const Integer n, const String &str, const bool with_number=true)
Forme standard du pluriel par ajout d'un 's'.
Definition String.cc:1040
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.
@ IK_Node
Entité de maillage de genre noeud.
@ IK_Cell
Entité de maillage de genre maille.
@ IK_Edge
Entité de maillage de genre arête.
const char * itemKindName(eItemKind kind)
Nom du genre d'entité.
static void _printParents(std::ostream &o, ItemBase item)
Ecrit les infos sur les parents.
static void _printBasics(std::ostream &o, ItemBase item)
Ecrit les informations basiques de l'item.
static void _printFlags(std::ostream &o, Integer flags)
Ecrit les flags de l'item de manière explicite.
static void _printErrors(std::ostream &o, ItemBase item)
Ecrit les infos sur les parents.
static void _printItemSubItems(std::ostream &ostr, String name, const ItemVectorView &enumerator)
Ecrit les informations d'une énumération d'items.