diff --git a/arcane/src/arcane/core/ItemTypeInfo.h b/arcane/src/arcane/core/ItemTypeInfo.h index 0378fc3f9..0f35e1310 100644 --- a/arcane/src/arcane/core/ItemTypeInfo.h +++ b/arcane/src/arcane/core/ItemTypeInfo.h @@ -15,15 +15,18 @@ /*---------------------------------------------------------------------------*/ #include "arcane/utils/String.h" +#include "arcane/utils/Array.h" -#include "arcane/core/ItemTypeMng.h" #include "arcane/core/ItemTypeId.h" +// No longer used but keep for compatibility +#include "arcane/core/ItemTypeMng.h" /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ namespace Arcane { +class ItemTypeMng; /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ @@ -44,6 +47,8 @@ namespace Arcane */ class ItemTypeInfo { + friend class ItemTypeInfoBuilder; + public: /*! @@ -135,7 +140,7 @@ class ItemTypeInfo //! Type of the corresponding linear element ItemTypeId linearItemTypeId() const { return m_linear_type_id; } //! Type of the corresponding linear element - const ItemTypeInfo* linearTypeInfo() const { return m_mng->typeFromId(m_linear_type_id); } + const ItemTypeInfo* linearTypeInfo() const { return m_linear_type; } //! Indicates if the type has a center node bool hasCenterNode() const { return m_has_center_node; } /*! @@ -143,16 +148,16 @@ class ItemTypeInfo * * A polygon is a 2D element of order 1 containing at least 5 nodes. */ - bool isPolygon() const { return m_is_poly && m_dimension==2; } + bool isPolygon() const { return m_is_poly && m_dimension == 2; } //! Indicates if the type is a polyhedron - bool isPolyhedron() const { return m_is_poly && m_dimension==3; } + bool isPolyhedron() const { return m_is_poly && m_dimension == 3; } public: //! Local connectivity of the i-th edge of the cell LocalEdge localEdge(Integer id) const { - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; Integer fi = buf[m_first_item_index + id]; return LocalEdge(&buf[fi]); } @@ -160,14 +165,13 @@ class ItemTypeInfo //! Local connectivity of the i-th face of the cell LocalFace localFace(Integer id) const { - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; Integer fi = buf[m_first_item_index + m_nb_edge + id]; return LocalFace(&buf[fi]); } - protected: + private: - ItemTypeMng* m_mng = nullptr; ItemTypeId m_type_id{ IT_NullType }; ItemTypeId m_linear_type_id{ IT_NullType }; //! Dimension (-1) if not initialized. @@ -185,6 +189,9 @@ class ItemTypeInfo //! Index of this type in the list of indices of \a m_mng. Integer m_first_item_index = 0; String m_type_name; + const ItemTypeInfo* m_linear_type = this; + ItemTypeMng* m_mng = nullptr; + Array* m_ids_buffer = nullptr; }; /*---------------------------------------------------------------------------*/ diff --git a/arcane/src/arcane/core/ItemTypeInfoBuilder.cc b/arcane/src/arcane/core/ItemTypeInfoBuilder.cc index e87d02047..538124ae2 100644 --- a/arcane/src/arcane/core/ItemTypeInfoBuilder.cc +++ b/arcane/src/arcane/core/ItemTypeInfoBuilder.cc @@ -46,6 +46,7 @@ setInfos(ItemTypeMng* mng, ItemTypeId type_id, String type_name, Dimension dimension, Int32 nb_node, Int32 nb_edge, Int32 nb_face) { m_mng = mng; + m_ids_buffer = &mng->m_ids_buffer; m_type_id = type_id; m_linear_type_id = type_id; m_dimension = static_cast(dimension); @@ -89,10 +90,13 @@ setInfos(ItemTypeMng* mng, Int16 type_id, String type_name, Dimension dimension, /*---------------------------------------------------------------------------*/ void ItemTypeInfoBuilder:: -setOrder(Int16 order, ItemTypeId linear_type_id) +setOrder(Int16 order, ItemTypeInfo* linear_type) { + if (!linear_type) + ARCANE_FATAL("Null linear type for type '{0}'", m_type_name); m_order = order; - m_linear_type_id = linear_type_id; + m_linear_type = linear_type; + m_linear_type_id = linear_type->itemTypeId(); _checkSetIsPolygon(); } @@ -102,7 +106,7 @@ setOrder(Int16 order, ItemTypeId linear_type_id) void ItemTypeInfoBuilder:: addEdge(Int32 edge_index, Int32 n0, Int32 n1, Int32 f_left, Int32 f_right) { - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + edge_index] = buf.size(); buf.add(n0); buf.add(n1); @@ -116,7 +120,7 @@ addEdge(Int32 edge_index, Int32 n0, Int32 n1, Int32 f_left, Int32 f_right) void ItemTypeInfoBuilder:: addEdge2D(Integer edge_index, Integer n0, Integer n1) { - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + edge_index] = buf.size(); buf.add(n0); buf.add(n1); @@ -131,7 +135,7 @@ void ItemTypeInfoBuilder:: addFaceVertex(Integer face_index, Integer n0) { _checkDimension(1); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(IT_FaceVertex); buf.add(1); @@ -146,7 +150,7 @@ void ItemTypeInfoBuilder:: addFaceLine(Integer face_index, Integer n0, Integer n1) { _checkDimension(2); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(IT_Line2); buf.add(2); @@ -177,7 +181,7 @@ void ItemTypeInfoBuilder:: addFaceLine3(Integer face_index, Integer n0, Integer n1, Integer n2) { _checkDimension(2); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(IT_Line3); buf.add(3); @@ -195,7 +199,7 @@ void ItemTypeInfoBuilder:: addFaceLine4(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3) { _checkDimension(2); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(IT_Line4); buf.add(4); @@ -213,7 +217,7 @@ void ItemTypeInfoBuilder:: addFaceTriangle(Integer face_index, Integer n0, Integer n1, Integer n2) { _checkDimension(3); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(IT_Triangle3); buf.add(3); @@ -233,7 +237,7 @@ addFaceTriangle6(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5) { _checkDimension(3); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(IT_Triangle6); buf.add(6); @@ -255,7 +259,7 @@ void ItemTypeInfoBuilder:: addFaceQuad(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3) { _checkDimension(3); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(IT_Quad4); buf.add(4); @@ -276,7 +280,7 @@ addFaceQuad8(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5, Integer n6, Integer n7) { _checkDimension(3); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(IT_Quad8); buf.add(8); @@ -301,7 +305,7 @@ addFaceQuad9(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5, Integer n6, Integer n7, Integer n8) { _checkDimension(3); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(IT_Quad9); buf.add(9); @@ -326,7 +330,7 @@ void ItemTypeInfoBuilder:: addFacePentagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4) { _checkDimension(3); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(IT_Pentagon5); buf.add(5); @@ -348,7 +352,7 @@ addFaceHexagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5) { _checkDimension(3); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(IT_Hexagon6); buf.add(6); @@ -371,7 +375,7 @@ addFaceHeptagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer Integer n4, Integer n5, Integer n6) { _checkDimension(3); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(IT_Heptagon7); buf.add(7); @@ -395,7 +399,7 @@ addFaceOctogon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n Integer n4, Integer n5, Integer n6, Integer n7) { _checkDimension(3); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(IT_Octogon8); buf.add(8); @@ -421,7 +425,7 @@ addFaceGeneric(Integer face_index, Integer type_id, ConstArrayView n) // Currently, this method is only called for 2D faces, so // the current element must be of dimension 3. _checkDimension(3); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(type_id); Integer face_nb_node = n.size(); @@ -443,7 +447,7 @@ addFaceGeneric(Int32 face_index, ItemTypeId type_id, ConstArrayView nodes // Currently, this method is only called for 2D faces, so // the current element must be of dimension 3. _checkDimension(3); - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; buf[m_first_item_index + m_nb_edge + face_index] = buf.size(); buf.add(type_id); Integer face_nb_node = nodes.size(); @@ -463,7 +467,7 @@ computeFaceEdgeInfos() { Integer cell_nb_edge = nbLocalEdge(); for (Integer i_face = 0; i_face < nbLocalFace(); ++i_face) { - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; Integer fi = buf[m_first_item_index + m_nb_edge + i_face]; Integer* index = &buf[fi]; LocalFace local_face(index); @@ -503,7 +507,7 @@ _setNbEdgeAndFace(Integer nb_edge, Integer nb_face) m_nb_edge = nb_edge; Integer total = m_nb_face + m_nb_edge; if (total != 0) { - Array& buf = m_mng->m_ids_buffer; + Array& buf = *m_ids_buffer; m_first_item_index = buf.size(); buf.resize(m_first_item_index + total); } diff --git a/arcane/src/arcane/core/ItemTypeInfoBuilder.h b/arcane/src/arcane/core/ItemTypeInfoBuilder.h index 625e3dbb2..3b5d24796 100644 --- a/arcane/src/arcane/core/ItemTypeInfoBuilder.h +++ b/arcane/src/arcane/core/ItemTypeInfoBuilder.h @@ -26,7 +26,6 @@ namespace Arcane /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ - /*! * \internal * \brief Construction of the information for a mesh entity type. @@ -95,12 +94,13 @@ class ItemTypeInfoBuilder Int32 nb_node, Int32 nb_edge, Int32 nb_face); /*! - * \brief Positions the order of the type. + * \brief Set the order of the type. * * If not called, the type is considered to be for order 1 entities. * The first argument is the entity order and the second is the corresponding order 1 element. + * You have to call setInfos() before calling this method. */ - void setOrder(Int16 order, ItemTypeId linear_type); + void setOrder(Int16 order, ItemTypeInfo* linear_type); /*! * \brief Adds an edge to the list of edges diff --git a/arcane/src/arcane/core/ItemTypeMng.cc b/arcane/src/arcane/core/ItemTypeMng.cc index 26beca60d..9ec77f0d8 100644 --- a/arcane/src/arcane/core/ItemTypeMng.cc +++ b/arcane/src/arcane/core/ItemTypeMng.cc @@ -206,7 +206,7 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) m_types[IT_Line3] = type; type->setInfos(this, IT_Line3, "Line3", Dimension::Dim1, 3, 0, 0); - type->setOrder(2, ITI_Line2); + type->setOrder(2, m_types[ITI_Line2]); type->setIsValidForCell(false); } @@ -216,7 +216,7 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) m_types[IT_Line4] = type; type->setInfos(this, IT_Line4, "Line4", Dimension::Dim1, 4, 0, 0); - type->setOrder(3, ITI_Line2); + type->setOrder(3, m_types[ITI_Line2]); type->setIsValidForCell(false); } @@ -257,7 +257,7 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) m_types[IT_Triangle6] = type; type->setInfos(this, IT_Triangle6, "Triangle6", Dimension::Dim2, 6, 3, 3); - type->setOrder(2, ITI_Triangle3); + type->setOrder(2, m_types[ITI_Triangle3]); type->addFaceLine3(0, 0, 1, 3); type->addFaceLine3(1, 1, 2, 4); @@ -275,7 +275,7 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) m_types[IT_Triangle10] = type; type->setInfos(this, IT_Triangle10, "Triangle10", Dimension::Dim2, 10, 3, 3); - type->setOrder(3, ITI_Triangle3); + type->setOrder(3, m_types[ITI_Triangle3]); type->setHasCenterNode(true); type->addFaceLine4(0, 0, 1, 3, 4); @@ -287,30 +287,6 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) type->addEdge(2, 2, 0, 0, 1); } - // Cell3D_Triangle10 - { - ItemTypeInfoBuilder* type = m_types_buffer->allocOne(); - m_types[IT_Cell3D_Triangle10] = type; - Int32 nb_face = 3; - Int32 nb_edge = 0; - if (is_non_manifold) - std::swap(nb_face, nb_edge); - - type->setInfos(this, IT_Cell3D_Triangle6, "Cell3D_Triangle10", Dimension::Dim2, 6, nb_edge, nb_face); - type->setOrder(2, ITI_Cell3D_Triangle3); - - if (is_non_manifold) { - type->addEdge2D(0, 0, 1); - type->addEdge2D(1, 1, 2); - type->addEdge2D(2, 2, 0); - } - else { - type->addFaceLine4(0, 0, 1, 3, 4); - type->addFaceLine4(1, 1, 2, 5, 6); - type->addFaceLine4(2, 2, 0, 7, 8); - } - } - // Quad4 { _addPolygonType(IT_Quad4, 4, "Quad4"); @@ -322,7 +298,7 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) m_types[IT_Quad8] = type; type->setInfos(this, IT_Quad8, "Quad8", Dimension::Dim2, 8, 4, 4); - type->setOrder(2, ITI_Quad4); + type->setOrder(2, m_types[ITI_Quad4]); type->addFaceLine3(0, 0, 1, 4); type->addFaceLine3(1, 1, 2, 5); @@ -342,7 +318,7 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) m_types[IT_Quad9] = type; type->setInfos(this, IT_Quad9, "Quad9", Dimension::Dim2, 9, 4, 4); - type->setOrder(2, ITI_Quad4); + type->setOrder(2, m_types[ITI_Quad4]); type->setHasCenterNode(true); type->addFaceLine3(0, 0, 1, 4); @@ -401,7 +377,7 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) m_types[IT_Hexaedron20] = type; type->setInfos(this, IT_Hexaedron20, "Hexaedron20", Dimension::Dim3, 20, 12, 6); - type->setOrder(2, ITI_Hexaedron8); + type->setOrder(2, m_types[ITI_Hexaedron8]); type->addFaceQuad8(0, 0, 4, 7, 3, 16, 15, 19, 11); type->addFaceQuad8(1, 1, 2, 6, 5, 9, 18, 13, 17); @@ -431,7 +407,7 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) m_types[IT_Hexaedron27] = type; type->setInfos(this, IT_Hexaedron27, "Hexaedron27", Dimension::Dim3, 27, 12, 6); - type->setOrder(2, ITI_Hexaedron8); + type->setOrder(2, m_types[ITI_Hexaedron8]); type->setHasCenterNode(true); type->addFaceQuad9(0, 0, 4, 7, 3, 16, 15, 19, 11, 20); @@ -482,8 +458,8 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) { ItemTypeInfoBuilder* type = m_types_buffer->allocOne(); m_types[IT_Pyramid13] = type; - type->setOrder(2, ITI_Pyramid5); type->setInfos(this, IT_Pyramid13, "Pyramid13", Dimension::Dim3, 13, 8, 5); + type->setOrder(2, m_types[ITI_Pyramid5]); type->addFaceQuad8(0, 0, 3, 2, 1, 5, 6, 7, 8); type->addFaceTriangle6(1, 0, 4, 3, 9, 12, 8); @@ -529,9 +505,9 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) { ItemTypeInfoBuilder* type = m_types_buffer->allocOne(); m_types[IT_Pentaedron15] = type; - type->setOrder(2, ITI_Pentaedron15); type->setInfos(this, IT_Pentaedron15, "Pentaedron15", Dimension::Dim3, 15, 9, 5); + type->setOrder(2, m_types[ITI_Pentaedron6]); type->addFaceTriangle6(0, 0, 2, 1, 6, 7, 8); type->addFaceQuad8(1, 0, 3, 5, 2, 12, 11, 14, 8); @@ -577,7 +553,7 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) m_types[IT_Tetraedron10] = type; type->setInfos(this, IT_Tetraedron10, "Tetraedron10", Dimension::Dim3, 10, 6, 4); - type->setOrder(2, ITI_Tetraedron4); + type->setOrder(2, m_types[ITI_Tetraedron4]); type->addFaceTriangle6(0, 0, 2, 1, 6, 5, 4); type->addFaceTriangle6(1, 0, 3, 2, 7, 9, 6); @@ -959,9 +935,9 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) { ItemTypeInfoBuilder* type = m_types_buffer->allocOne(); m_types[IT_CellLine3] = type; - type->setOrder(2, ITI_CellLine2); type->setInfos(this, IT_CellLine3, "CellLine3", Dimension::Dim1, 3, 0, 2); + type->setOrder(2, m_types[ITI_CellLine2]); type->addFaceVertex(0, 0); type->addFaceVertex(1, 1); @@ -971,9 +947,9 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) { ItemTypeInfoBuilder* type = m_types_buffer->allocOne(); m_types[IT_CellLine4] = type; - type->setOrder(3, ITI_CellLine2); type->setInfos(this, IT_CellLine4, "CellLine4", Dimension::Dim1, 4, 0, 2); + type->setOrder(3, m_types[ITI_CellLine2]); type->addFaceVertex(0, 0); type->addFaceVertex(1, 1); @@ -983,18 +959,18 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) { ItemTypeInfoBuilder* type = m_types_buffer->allocOne(); m_types[IT_Cell3D_Line3] = type; - type->setOrder(2, ITI_Cell3D_Line2); type->setInfos(this, IT_Cell3D_Line3, "Cell3D_Line3", Dimension::Dim1, 3, 0, 0); + type->setOrder(2, m_types[ITI_Cell3D_Line2]); } // Cell3D_Line4 { ItemTypeInfoBuilder* type = m_types_buffer->allocOne(); m_types[IT_Cell3D_Line4] = type; - type->setOrder(3, ITI_Cell3D_Line2); type->setInfos(this, IT_Cell3D_Line4, "Cell3D_Line4", Dimension::Dim1, 4, 0, 0); + type->setOrder(3, m_types[ITI_Cell3D_Line2]); } // Cell3D_Triangle3 @@ -1030,7 +1006,7 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) std::swap(nb_face, nb_edge); type->setInfos(this, IT_Cell3D_Triangle6, "Cell3D_Triangle6", Dimension::Dim2, 6, nb_edge, nb_face); - type->setOrder(2, ITI_Cell3D_Triangle3); + type->setOrder(2, m_types[ITI_Cell3D_Triangle3]); if (is_non_manifold) { type->addEdge2D(0, 0, 1); @@ -1044,6 +1020,30 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) } } + // Cell3D_Triangle10 + { + ItemTypeInfoBuilder* type = m_types_buffer->allocOne(); + m_types[IT_Cell3D_Triangle10] = type; + Int32 nb_face = 3; + Int32 nb_edge = 0; + if (is_non_manifold) + std::swap(nb_face, nb_edge); + + type->setInfos(this, IT_Cell3D_Triangle6, "Cell3D_Triangle10", Dimension::Dim2, 6, nb_edge, nb_face); + type->setOrder(2, m_types[ITI_Cell3D_Triangle3]); + + if (is_non_manifold) { + type->addEdge2D(0, 0, 1); + type->addEdge2D(1, 1, 2); + type->addEdge2D(2, 2, 0); + } + else { + type->addFaceLine4(0, 0, 1, 3, 4); + type->addFaceLine4(1, 1, 2, 5, 6); + type->addFaceLine4(2, 2, 0, 7, 8); + } + } + // Cell3D_Quad4 { ItemTypeInfoBuilder* type = m_types_buffer->allocOne(); @@ -1079,7 +1079,7 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) std::swap(nb_face, nb_edge); type->setInfos(this, IT_Cell3D_Quad8, "Cell3D_Quad8", Dimension::Dim2, 8, nb_edge, nb_face); - type->setOrder(2, ITI_Cell3D_Quad4); + type->setOrder(2, m_types[ITI_Cell3D_Quad4]); if (is_non_manifold) { type->addEdge2D(0, 0, 1); @@ -1106,7 +1106,7 @@ _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace) std::swap(nb_face, nb_edge); type->setInfos(this, IT_Cell3D_Quad9, "Cell3D_Quad9", Dimension::Dim2, 9, nb_edge, nb_face); - type->setOrder(2, ITI_Cell3D_Quad4); + type->setOrder(2, m_types[ITI_Cell3D_Quad4]); if (is_non_manifold) { type->addEdge2D(0, 0, 1);