14#include "arcane/ItemTypeMng.h"
16#include "arcane/utils/Iostream.h"
17#include "arcane/utils/String.h"
18#include "arcane/utils/PlatformUtils.h"
19#include "arcane/utils/ITraceMng.h"
20#include "arcane/utils/TraceAccessor.h"
21#include "arcane/utils/IStackTraceService.h"
22#include "arcane/utils/IOException.h"
23#include "arcane/utils/FatalErrorException.h"
24#include "arcane/utils/Array.h"
25#include "arcane/utils/MultiBuffer.h"
27#include "arcane/ItemTypeInfoBuilder.h"
28#include "arcane/IParallelSuperMng.h"
29#include "arcane/ItemTypeInfoBuilder.h"
32#include "arcane/ItemRefinementPattern.h"
56 m_initialized_counter = 0;
114 type->setInfos(
this, IT_NullType,
"NullType", 0, 0, 0);
122 type->setInfos(
this, IT_Vertex,
"Vertex", 0, 0, 0);
133 type->setInfos(
this, IT_FaceVertex,
"FaceVertex", 1, 0, 0);
134 type->setIsValidForCell(
false);
142 type->setInfos(
this, IT_Line2,
"Line2", 2, 0, 0);
143 type->setIsValidForCell(
false);
151 type->setInfos(
this, IT_Line3,
"Line3", 3, 0, 0);
152 type->setIsValidForCell(
false);
160 type->setInfos(
this, IT_CellLine2,
"CellLine2", 2, 0, 2);
178 type->setInfos(
this, IT_Triangle3,
"Triangle3", 3, 3, 3);
195 type->setInfos(
this, IT_Triangle6,
"Triangle6", 6, 3, 3);
211 type->setInfos(
this, IT_Quad4,
"Quad4", 4, 4, 4);
230 type->setInfos(
this, IT_Quad8,
"Quad8", 8, 4, 4);
248 type->setInfos(
this, IT_Pentagon5,
"Pentagon5", 5, 5, 5);
268 type->setInfos(
this, IT_Hexagon6,
"Hexagon6", 6, 6, 6);
290 type->setInfos(
this, IT_Hexaedron8,
"Hexaedron8", 8, 12, 6);
317 m_types[IT_Hexaedron20] = type;
319 type->setInfos(
this, IT_Hexaedron20,
"Hexaedron20", 20, 12, 6);
347 type->setInfos(
this, IT_Pyramid5,
"Pyramid5", 5, 8, 5);
368 m_types[IT_Pentaedron6] = type;
370 type->setInfos(
this, IT_Pentaedron6,
"Pentaedron6", 6, 9, 5);
392 m_types[IT_Tetraedron4] = type;
394 type->setInfos(
this, IT_Tetraedron4,
"Tetraedron4", 4, 6, 4);
413 m_types[IT_Tetraedron10] = type;
415 type->setInfos(
this, IT_Tetraedron10,
"Tetraedron10", 10, 6, 4);
433 m_types[IT_Heptaedron10] = type;
435 type->setInfos(
this, IT_Heptaedron10,
"Heptaedron10", 10, 15, 7);
465 m_types[IT_Octaedron12] = type;
467 type->setInfos(
this, IT_Octaedron12,
"Octaedron12", 12, 18, 8);
488 type->
addEdge(10, 10, 11, 1, 6);
489 type->
addEdge(11, 11, 6, 1, 7);
494 type->
addEdge(16, 4, 10, 5, 6);
495 type->
addEdge(17, 5, 11, 6, 7);
503 type->setInfos(
this, IT_HemiHexa7,
"HemiHexa7", 7, 11, 6);
530 type->setInfos(
this, IT_HemiHexa6,
"HemiHexa6", 6, 10, 6);
556 type->setInfos(
this, IT_HemiHexa5,
"HemiHexa5", 5, 7, 4);
575 m_types[IT_AntiWedgeLeft6] = type;
577 type->setInfos(
this, IT_AntiWedgeLeft6,
"AntiWedgeLeft6", 6, 10, 6);
601 m_types[IT_AntiWedgeRight6] = type;
603 type->setInfos(
this, IT_AntiWedgeRight6,
"AntiWedgeRight6", 6, 10, 6);
629 type->setInfos(
this, IT_DiTetra5,
"DiTetra5", 5, 9, 6);
654 type->setInfos(
this, IT_DualNode,
"DualNode", 1, 0, 0);
661 type->setInfos(
this, IT_DualEdge,
"DualEdge", 1, 0, 0);
668 type->setInfos(
this, IT_DualFace,
"DualFace", 1, 0, 0);
675 type->setInfos(
this, IT_DualCell,
"DualCell", 1, 0, 0);
680 m_types[IT_DualParticle] = type;
682 type->setInfos(
this, IT_DualParticle,
"DualParticle", 1, 0, 0);
689 type->setInfos(
this, IT_Link,
"Link", 0, 0, 0);
695 m_types[IT_Enneedron14] = type;
697 type->setInfos(
this, IT_Enneedron14,
"IT_Enneedron14", 14, 21, 9);
719 type->
addEdge(10, 10, 11, 1, 5);
720 type->
addEdge(11, 11, 12, 1, 6);
721 type->
addEdge(12, 12, 13, 1, 7);
722 type->
addEdge(13, 13, 7, 1, 8);
726 type->
addEdge(17, 3, 10, 3, 4);
727 type->
addEdge(18, 4, 11, 4, 5);
728 type->
addEdge(19, 5, 12, 5, 6);
729 type->
addEdge(20, 6, 13, 6, 7);
734 m_types[IT_Decaedron16] = type;
736 type->setInfos(
this, IT_Decaedron16,
"IT_Decaedron16", 16, 24, 10);
759 type->
addEdge(10, 10, 11, 1, 4);
760 type->
addEdge(11, 11, 12, 1, 5);
761 type->
addEdge(12, 12, 13, 1, 6);
762 type->
addEdge(13, 13, 14, 1, 7);
763 type->
addEdge(14, 14, 15, 1, 8);
764 type->
addEdge(15, 15, 8, 1, 9);
767 type->
addEdge(18, 2, 10, 3, 4);
768 type->
addEdge(19, 3, 11, 4, 5);
769 type->
addEdge(20, 4, 12, 5, 6);
770 type->
addEdge(21, 5, 13, 6, 7);
771 type->
addEdge(22, 6, 14, 7, 8);
772 type->
addEdge(23, 7, 15, 8, 9);
780 type->setInfos(
this, IT_Heptagon7,
"Heptagon7", 7, 7, 7);
804 type->setInfos(
this, IT_Octogon8,
"Octogon8", 8, 8, 8);
835 for (Integer i = 0; i <
m_types.size(); ++i) {
849 ARCANE_ASSERT((
m_initialized), (
"Cannot use not built ItemTypeMng"));
852 for (Integer i = 0; i <
nb_type; ++i) {
860 ostr <<
" - - Face " << z <<
":";
899 m_trace->
info() <<
"Reading additional item types from file '" << filename <<
"'";
906 long unsigned int file_length = platform::getFileLength(filename);
908 throw IOException(A_FUNCINFO,
"ARCANE_ITEM_TYPE_FILE is an empty file");
912 throw IOException(A_FUNCINFO,
"Cannot open ARCANE_ITEM_TYPE_FILE item type file");
917 throw IOException(A_FUNCINFO,
"Cannot read ARCANE_ITEM_TYPE_FILE item type file");
922 pm->broadcast(
bs, 0);
926 pm->broadcast(bytes, 0);
949 std::istringstream
ifile((
char*)bytes.unguardedBasePointer(), std::istringstream::in);
955 for (Integer i = 0; i <
nb_type; ++i) {
958 if (typeId >=
nb_type || typeId < 0)
959 throw IOException(A_FUNCINFO, String::format(
"Polyhedron reader cannot allow typeId {0}", typeId));
962 throw FatalErrorException(A_FUNCINFO, String::format(
"Already existing typeId {0}", typeId));
971 type->setInfos(
this, typeId, String::format(
"Polyhedron{0}_{1}-{2}-{3}", typeId,
nbN,
nbE,
nbF),
nbN,
nbE,
nbF);
974 <<
nbE <<
" edges, " <<
nbF <<
" faces.";
987 <<
" for face " <<
iface <<
" with " <<
nbN <<
" nodes";
997 for (Integer
j = 0;
j <
nbN; ++
j)
1000 for (Integer
j = 0;
j <
nbN; ++
j)
1003 <<
" for face " <<
iface <<
" with " <<
nbN <<
" nodes";
1049 case IT_Tetraedron4:
1053 case IT_Pentaedron6:
1057 case IT_Heptaedron10:
1058 case IT_Octaedron12:
1062 case IT_AntiWedgeLeft6:
1063 case IT_AntiWedgeRight6:
1088#ifndef ARCANE_OS_WIN32
1100 ARCANE_ASSERT((
m_initialized), (
"Cannot use not built ItemTypeMng"));
1110 ARCANE_ASSERT((
m_initialized), (
"Cannot use not built ItemTypeMng"));
1120 ARCANE_ASSERT((
m_initialized), (
"Cannot use not built ItemTypeMng"));
1147_legacyTypeName(Integer
t)
1151 return "InvalidType";
1171 ARCANE_ASSERT(mesh, (
"Trying to indicate a null mesh contains general cells."));
1172 m_mesh_with_general_cells.insert(mesh);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Exception lorsqu'une erreur d'entrée/sortie est détectée.
virtual Int32 commRank() const =0
Rang de cette instance dans le communicateur.
Classe abstraite du superviseur de parallélisme.
Type d'une entité (Item).
Construction des infos d'un type d'entité du maillage.
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 face d'une maille.
Infos sur un type d'entité du maillage.
LocalFace localFace(Integer id) const
Connectivité locale de la i-ème face de la maille.
Integer nbLocalNode() const
Nombre de noeuds de l'entité
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.
void readTypes(IParallelSuperMng *parallel_mng, const String &filename)
Lecture des types a partir d'un fichier de nom filename.
static void _destroySingleton()
Détruit le singleton.
void setMeshWithGeneralCells(IMesh *mesh) noexcept
Permet au maillage d'indiquer à l'ItemTypeMng s'il a des mailles génériques.
bool hasGeneralCells(IMesh *mesh) const
Indique si le maillage mesh contient des mailles génériques (en dehors des types intégrés ou addition...
ItemTypeMng()
Constructeur vide (non initialisé)
static Int32 nbHChildrenByItemType(Integer type)
AMR.
ITraceMng * m_trace
Gestionnaire de traces.
std::set< IMesh * > m_mesh_with_general_cells
Ensemble des maillages contenant des mailles générales (sans type défini)
static Integer nbBasicItemType()
nombre de types disponibles
ItemTypeInfo * typeFromId(Integer id) const
Type correspondant au numéro id.
bool m_initialized
Flag d'initialisation.
void build(IParallelSuperMng *parallel_mng, ITraceMng *trace)
Constructeur effectif.
UniqueArray< ItemTypeInfo * > m_types
Liste des types.
static ItemTypeMng * singleton_instance
Instance singleton.
ConstArrayView< ItemTypeInfo * > types() const
Liste des types disponibles.
MultiBufferT< ItemTypeInfoBuilder > * m_types_buffer
Allocations des objets de type (il faut un pointeur pour eviter inclusion multiple)
static Integer nbBuiltInItemType()
nombre de types intégrés (hors types additionnels)
void printTypes(std::ostream &ostr)
Affiche les infos sur les types disponibles sur le flot ostr.
static ItemTypeMng * _singleton()
Instance singleton du type.
String typeName(Integer id) const
Nom du type correspondant au numéro id.
static const Integer m_nb_builtin_item_type
Nombre de types intégrés (hors types additionnels)
void _build(IParallelSuperMng *parallel_mng, ITraceMng *trace)
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Vue modifiable d'un tableau d'un type T.
Exception lorsqu'une erreur fatale est survenue.
Interface du gestionnaire de traces.
virtual TraceMessageDbg debug(Trace::eDebugLevel=Trace::Medium)=0
Flot pour un message de debug.
virtual TraceMessage info()=0
Flot pour un message d'information.
Chaîne de caractères unicode.
const char * localstr() const
Retourne la conversion de l'instance dans l'encodage UTF-8.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Integer arcaneCheckArraySize(unsigned long long size)
Vérifie que size peut être converti dans un 'Integer' pour servir de taille à un tableau....
Int32 Integer
Type représentant un entier.