Skip to content

Commit 28cd6f4

Browse files
Merge pull request #2026 from arcaneframework/dev/gg-add-support-for-1d-cell-in-3d-mesh-for-msh-reader
Add support in 'MSH' reader for 1D cell in 3D mesh
2 parents c5c902c + 18a44e1 commit 28cd6f4

File tree

2 files changed

+31
-9
lines changed

2 files changed

+31
-9
lines changed

arcane/src/arcane/core/VtkCellTypes.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,11 @@ arcaneToVtkCellType(Int16 arcane_type)
9090
case IT_FaceVertex:
9191
return VTK_VERTEX;
9292
case IT_Line2:
93+
case IT_CellLine2:
94+
case IT_Cell3D_Line2:
9395
return VTK_LINE;
9496
case IT_Line3:
9597
return VTK_QUADRATIC_EDGE;
96-
case IT_CellLine2:
97-
return VTK_LINE;
9898
case IT_Triangle3:
9999
case IT_Cell3D_Triangle3:
100100
return VTK_TRIANGLE;

arcane/src/arcane/std/MshParallelMeshReader.cc

+29-7
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ _switchMshType(Int64 mshElemType, Int32& nNodes) const
550550
return IT_HemiHexa7;
551551
default:
552552
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");
554554
}
555555
break;
556556
case MSH_PNT:
@@ -1050,22 +1050,44 @@ _readElementsFromFile()
10501050
if (auto v = Convert::Type<Int32>::tryParseFromEnvironment("ARCANE_USE_EXPERIMENTAL_CELL_TYPE", true))
10511051
use_experimental_type_for_cell = (v.value() != 0);
10521052
}
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();
10541055
for (MeshV4ElementsBlock& block : blocks) {
10551056
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;
10561059
if (block_dim == mesh_dimension)
10571060
_computeOwnItems(block, m_mesh_info.cells_infos, false);
10581061
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) {
10631077
if (block.item_type == IT_Triangle3)
10641078
block.item_type = ItemTypeId(IT_Cell3D_Triangle3);
10651079
else if (block.item_type == IT_Quad4)
10661080
block.item_type = ItemTypeId(IT_Cell3D_Quad4);
1081+
else if (block.item_type == IT_Line2)
1082+
block.item_type = ItemTypeId(IT_Cell3D_Line2);
10671083
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);
10691091
}
10701092
block.is_built_as_cells = true;
10711093
_computeOwnItems(block, m_mesh_info.cells_infos, false);

0 commit comments

Comments
 (0)