14#include "arcane/utils/FatalErrorException.h"
15#include "arcane/utils/TraceInfo.h"
17#include "arcane/ArcaneTypes.h"
18#include "arcane/ItemTypeInfoBuilder.h"
29void ItemTypeInfoBuilder::
30_checkDimension(Int16 dim)
37 ARCANE_FATAL(
"Incoherent dimension for ItemType: current='{0}' new='{1}'",
44void ItemTypeInfoBuilder::
46 Int16 dimension, Integer nb_node, Integer nb_edge, Integer nb_face)
52 m_type_name = type_name;
53 _setNbEdgeAndFace(nb_edge, nb_face);
59void ItemTypeInfoBuilder::
61 Integer nb_node, Integer nb_edge, Integer nb_face)
63 setInfos(mng, type_id, type_name, -1, nb_node, nb_edge, nb_face);
69void ItemTypeInfoBuilder::
70setInfos(ItemTypeMng* mng,
71 Integer type_id, String type_name,
72 Integer nb_node, Integer nb_edge, Integer nb_face)
81addEdge(Integer edge_index,Integer n0,Integer n1,Integer f_left,Integer f_right)
84 buf[m_first_item_index + edge_index] = buf.
size();
99 buf[m_first_item_index + m_nb_edge + face_index] = buf.
size();
100 buf.
add(IT_FaceVertex);
110addFaceLine(Integer face_index, Integer n0, Integer n1)
114 buf[m_first_item_index + m_nb_edge + face_index] = buf.
size();
124addFaceLine3(Integer face_index, Integer n0, Integer n1, Integer n2)
128 buf[m_first_item_index + m_nb_edge + face_index] = buf.
size();
145 buf[m_first_item_index + m_nb_edge + face_index] = buf.
size();
146 buf.
add(IT_Triangle3);
152 for (Integer i = 0; i < 3; ++i)
161 Integer n3, Integer n4, Integer n5)
165 buf[m_first_item_index + m_nb_edge + face_index] = buf.
size();
166 buf.
add(IT_Triangle6);
175 for (Integer i = 0; i < 3; ++i)
183addFaceQuad(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3)
187 buf[m_first_item_index + m_nb_edge + face_index] = buf.
size();
195 for (Integer i = 0; i < 4; ++i)
203addFaceQuad8(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3,
204 Integer n4, Integer n5, Integer n6, Integer n7)
208 buf[m_first_item_index + m_nb_edge + face_index] = buf.
size();
220 for (Integer i = 0; i < 4; ++i)
228addFacePentagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4)
232 buf[m_first_item_index + m_nb_edge + face_index] = buf.
size();
233 buf.
add(IT_Pentagon5);
241 for (Integer i = 0; i < 5; ++i)
249addFaceHexagon(Integer face_index, Integer n0, Integer n1, Integer n2,
250 Integer n3, Integer n4, Integer n5)
254 buf[m_first_item_index + m_nb_edge + face_index] = buf.
size();
255 buf.
add(IT_Hexagon6);
264 for (Integer i = 0; i < 6; ++i)
272addFaceHeptagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3,
273 Integer n4, Integer n5, Integer n6)
277 buf[m_first_item_index + m_nb_edge + face_index] = buf.
size();
278 buf.
add(IT_Heptagon7);
288 for (Integer i = 0; i < 7; ++i)
296addFaceOctogon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3,
297 Integer n4, Integer n5, Integer n6, Integer n7)
301 buf[m_first_item_index + m_nb_edge + face_index] = buf.
size();
302 buf.
add(IT_Octogon8);
313 for (Integer i = 0; i < 8; ++i)
327 buf[m_first_item_index + m_nb_edge + face_index] = buf.
size();
329 Integer face_nb_node = n.
size();
330 buf.
add(face_nb_node);
331 for (Integer i = 0; i < face_nb_node; ++i)
333 buf.
add(face_nb_node);
334 for (Integer i = 0; i < face_nb_node; ++i)
345 for(Integer i_face=0;i_face<
nbLocalFace();++i_face) {
347 Integer fi = buf[m_first_item_index + m_nb_edge + i_face];
348 Integer* index = &buf[fi];
350 Integer face_nb_node = local_face.
nbNode();
351 Integer face_nb_edge = local_face.
nbEdge();
352 for(Integer i_edge=0;i_edge<face_nb_edge;++i_edge) {
354 Integer beginNode = local_face.
node(i_edge);
355 Integer endNode = local_face.
node((i_edge+1)%face_nb_edge);
356 Integer face_edge = -1;
357 for(Integer i=0;i<cell_nb_edge;++i) {
359 if ((local_edge.
beginNode() == beginNode && local_edge.
endNode() == endNode) ||
362 ARCANE_FATAL(
"Conflicting item definition : duplicated edge [{0}:{1}] found as edge {2} and {3} of item {4}({5})",
368 ARCANE_FATAL(
"Undefined edge [{0}:{1}] found as edge of item {2}({3})",
370 index[3+face_nb_node+i_edge] = face_edge;
371 ARCANE_ASSERT((face_edge == local_face.
edge(i_edge)),(
"Inconsitent face-edge allocation"));
379void ItemTypeInfoBuilder::
380_setNbEdgeAndFace(Integer nb_edge,Integer nb_face)
384 Integer total = m_nb_face+m_nb_edge;
387 m_first_item_index = buf.
size();
388 buf.
resize(m_first_item_index + total);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Type d'une entité (Item).
static ItemTypeId fromInteger(Int64 v)
Créé une instance à partir d'un entier.
void addFaceHexagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5)
Ajoute un hexagone à la liste des faces.
void addEdge(Integer edge_index, Integer n0, Integer n1, Integer f_left, Integer f_right)
Ajoute une arête à la liste des arêtes.
void addFacePentagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4)
Ajoute un pentagone à la liste des faces.
void addFaceHeptagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5, Integer n6)
Ajoute un heptagone à la liste des faces.
void addFaceQuad8(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5, Integer n6, Integer n7)
Ajoute un quadrilatère quadratique à la liste des faces.
void addFaceLine3(Integer face_index, Integer n0, Integer n1, Integer n2)
Ajoute une ligne quadratique à la liste des faces (pour les elements 2D)
void addFaceOctogon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5, Integer n6, Integer n7)
Ajoute un heptagone à la liste des faces.
void addFaceGeneric(Integer face_index, Integer type_id, ConstArrayView< Integer > n)
Ajoute une face générique à la liste des faces.
void addFaceVertex(Integer face_index, Integer n0)
Ajoute un sommet à la liste des faces (pour les elements 1D)
void addFaceTriangle(Integer face_index, Integer n0, Integer n1, Integer n2)
Ajoute un triangle à la liste des faces.
void computeFaceEdgeInfos()
Calcule les relations face->arêtes.
void addFaceQuad(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3)
Ajoute un quadrilatère à la liste des faces.
void addFaceLine(Integer face_index, Integer n0, Integer n1)
Ajoute une ligne à la liste des faces (pour les elements 2D)
void addFaceTriangle6(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5)
Ajoute un triangle quadratique à la liste des faces.
Informations locales sur une arête d'une maille.
Integer endNode() const
Indice local à la maille du sommet extrémité de l'arête.
Integer beginNode() const
Indice local à la maille du sommet origine de l'arête.
Informations locales sur une face d'une maille.
Integer node(Integer i) const
Indice locale dans la maille du i-ème noeud de la face.
Integer nbEdge() const
Nombre d'arête de la face.
Integer edge(Integer i) const
Arête de la face.
Integer nbNode() const
Nombre de noeuds de la face.
LocalEdge localEdge(Integer id) const
Connectivité locale de la i-ème arête de la maille.
Int16 m_dimension
Dimension (-1) si pas initialisé.
Integer nbLocalEdge() const
Nombre d'arêtes de l'entité
Int16 dimension() const
Dimension de l'élément (<0 si inconnu)
String typeName() const
Nom du type.
Integer nbLocalFace() const
Nombre de faces de l'entité
Int16 typeId() const
Numéro du type.
Gestionnaire des types d'entités de maillage.
UniqueArray< Integer > m_ids_buffer
Tampon d'allocation des données de type.
Integer size() const
Nombre d'éléments du vecteur.
Classe de base des vecteurs 1D de données.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Vue constante d'un tableau de type T.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-