@@ -550,7 +550,7 @@ _switchMshType(Int64 mshElemType, Int32& nNodes) const
550
550
return IT_HemiHexa7;
551
551
default :
552
552
info () << " Could not decode IT_NullType with nNodes=" << nNodes;
553
- throw IOException (" _switchMshType " , " Could not decode IT_NullType with nNodes" );
553
+ throw IOException (" _convertToMshType " , " Could not decode IT_NullType with nNodes" );
554
554
}
555
555
break ;
556
556
case MSH_PNT:
@@ -1050,22 +1050,44 @@ _readElementsFromFile()
1050
1050
if (auto v = Convert::Type<Int32>::tryParseFromEnvironment (" ARCANE_USE_EXPERIMENTAL_CELL_TYPE" , true ))
1051
1051
use_experimental_type_for_cell = (v.value () != 0 );
1052
1052
}
1053
- info () << " Use experiemental cell type?=" << use_experimental_type_for_cell;
1053
+ info () << " Use experimental cell type?=" << use_experimental_type_for_cell;
1054
+ ItemTypeMng* item_type_mng = m_mesh->itemTypeMng ();
1054
1055
for (MeshV4ElementsBlock& block : blocks) {
1055
1056
const Int32 block_dim = block.dimension ;
1057
+ String item_type_name = item_type_mng->typeFromId (block.item_type )->typeName ();
1058
+ info () << " Reading block dim=" << block_dim << " type_name=" << item_type_name;
1056
1059
if (block_dim == mesh_dimension)
1057
1060
_computeOwnItems (block, m_mesh_info.cells_infos , false );
1058
1061
else if (allow_multi_dim_cell) {
1059
- if (block_dim == (mesh_dimension - 1 )) {
1060
- if (use_experimental_type_for_cell) {
1061
- // Ici on va créer des mailles 2D dans un maillage 3D.
1062
- // On converti le type de base en un type équivalent pour les mailles.
1062
+ // Regarde si on peut créé des mailles de dimension inférieures à celles
1063
+ // du maillage.
1064
+ bool use_sub_dim_cell = false ;
1065
+ if (mesh_dimension == 3 && (block_dim == 2 || block_dim == 1 ))
1066
+ // Maille 1D ou 2D dans un maillage 3D
1067
+ use_sub_dim_cell = true ;
1068
+ else if (mesh_dimension == 2 && block_dim == 1 )
1069
+ // Maille 1D dans un maillage 2D
1070
+ use_sub_dim_cell = true ;
1071
+ if (!use_experimental_type_for_cell)
1072
+ use_sub_dim_cell = false ;
1073
+ if (use_sub_dim_cell) {
1074
+ // Ici on va créer des mailles 2D dans un maillage 3D.
1075
+ // On converti le type de base en un type équivalent pour les mailles.
1076
+ if (mesh_dimension == 3 ) {
1063
1077
if (block.item_type == IT_Triangle3)
1064
1078
block.item_type = ItemTypeId (IT_Cell3D_Triangle3);
1065
1079
else if (block.item_type == IT_Quad4)
1066
1080
block.item_type = ItemTypeId (IT_Cell3D_Quad4);
1081
+ else if (block.item_type == IT_Line2)
1082
+ block.item_type = ItemTypeId (IT_Cell3D_Line2);
1067
1083
else
1068
- ARCANE_FATAL (" Not supported sub dimension cell type={0}" , block.item_type );
1084
+ ARCANE_FATAL (" Not supported sub dimension cell type={0} for 3D mesh" , item_type_name);
1085
+ }
1086
+ else if (mesh_dimension == 2 ) {
1087
+ if (block.item_type == IT_Line2)
1088
+ block.item_type = ItemTypeId (IT_CellLine2);
1089
+ else
1090
+ ARCANE_FATAL (" Not supported sub dimension cell type={0} for 2D mesh" , item_type_name);
1069
1091
}
1070
1092
block.is_built_as_cells = true ;
1071
1093
_computeOwnItems (block, m_mesh_info.cells_infos , false );
0 commit comments