Skip to content

Commit 8f40c8c

Browse files
authored
Merge pull request #1538 from arcaneframework/dev/sdc-make-dof-connectivity-mng-unique
Dev/sdc make dof connectivity mng unique
2 parents d32b19f + 299e96b commit 8f40c8c

File tree

9 files changed

+108
-53
lines changed

9 files changed

+108
-53
lines changed

arcane/src/arcane/core/internal/IMeshInternal.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
namespace Arcane
2323
{
2424

25+
class IItemConnectivityMng;
26+
2527
/*---------------------------------------------------------------------------*/
2628
/*---------------------------------------------------------------------------*/
2729
/*!
@@ -43,6 +45,15 @@ class ARCANE_CORE_EXPORT IMeshInternal
4345
* la structure du maillage (eMeshStructure).
4446
*/
4547
virtual void setMeshKind(const MeshKind& v) = 0;
48+
49+
/*!
50+
* \brief Renvoie le gestionnaire de connectivités des dofs.
51+
*
52+
* Cette méthode est temporaire car ce gestionnaire de connectivités des dofs
53+
* à vocation à disparaître, l'évolution des connectivités des dofs étant maintenant gérée
54+
* automatiquement. A usage interne uniquement en attendant la suppression.
55+
*/
56+
virtual IItemConnectivityMng* dofConnectivityMng() const noexcept = 0;
4657
};
4758

4859
/*---------------------------------------------------------------------------*/

arcane/src/arcane/mesh/DoFManager.cc

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2+
//-----------------------------------------------------------------------------
3+
// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4+
// See the top-level COPYRIGHT file for details.
5+
// SPDX-License-Identifier: Apache-2.0
6+
//-----------------------------------------------------------------------------
7+
/*---------------------------------------------------------------------------*/
8+
/* DoFManager.cc (C) 2000-2024 */
9+
/* */
10+
/* Class to handle dof families and connectivities. */
11+
/*---------------------------------------------------------------------------*/
12+
/*---------------------------------------------------------------------------*/
13+
14+
#include "arcane/mesh/DoFManager.h"
15+
#include "arcane/core/internal/IMeshInternal.h"
16+
17+
/*---------------------------------------------------------------------------*/
18+
/*---------------------------------------------------------------------------*/
19+
20+
namespace Arcane
21+
{
22+
23+
/*---------------------------------------------------------------------------*/
24+
/*---------------------------------------------------------------------------*/
25+
26+
//! Constructeur de la classe
27+
DoFManager::
28+
DoFManager(IMesh* mesh)
29+
: m_mesh(mesh)
30+
, m_connectivity_mng(mesh->_internalApi()->dofConnectivityMng())
31+
{}
32+
33+
/*---------------------------------------------------------------------------*/
34+
/*---------------------------------------------------------------------------*/
35+
36+
} // namespace Arcane
37+
38+
/*---------------------------------------------------------------------------*/
39+
/*---------------------------------------------------------------------------*/

arcane/src/arcane/mesh/DoFManager.h

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
22
//-----------------------------------------------------------------------------
3-
// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
3+
// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
44
// See the top-level COPYRIGHT file for details.
55
// SPDX-License-Identifier: Apache-2.0
66
//-----------------------------------------------------------------------------
77
/*---------------------------------------------------------------------------*/
8-
/* DoFManager.h (C) 2000-2022 */
8+
/* DoFManager.h (C) 2000-2024 */
99
/* */
10-
/* Comment on file content. */
10+
/* Class to handle dof families and connectivities. */
1111
/*---------------------------------------------------------------------------*/
1212
#ifndef ARCANE_MESH_DOFMANAGER_H
1313
#define ARCANE_MESH_DOFMANAGER_H
1414
/*---------------------------------------------------------------------------*/
1515
/*---------------------------------------------------------------------------*/
1616

17-
#include "arcane/IMesh.h"
17+
#include "arcane/core/IMesh.h"
18+
#include "arcane/core/IItemConnectivityMng.h"
1819
#include "arcane/mesh/DoFFamily.h"
1920

2021
/*---------------------------------------------------------------------------*/
@@ -28,15 +29,12 @@ namespace Arcane
2829
/*---------------------------------------------------------------------------*/
2930

3031
//TODO: renommer en DofMng
31-
class DoFManager
32+
class ARCANE_MESH_EXPORT DoFManager
3233
{
3334
public:
3435

3536
//! Constructeur de la classe
36-
DoFManager(IMesh* mesh, IItemConnectivityMng* connectivity_mng)
37-
: m_mesh(mesh)
38-
, m_connectivity_mng(connectivity_mng)
39-
{}
37+
explicit DoFManager(IMesh* mesh);
4038

4139
public:
4240

arcane/src/arcane/mesh/DynamicMesh.cc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,10 @@
9494
#include "arcane/mesh/NewItemOwnerBuilder.h"
9595

9696
#include "arcane/mesh/IncrementalItemConnectivity.h"
97+
#include "arcane/mesh/ItemConnectivityMng.h"
9798

9899
#include <functional>
100+
#include <memory>
99101

100102
/*---------------------------------------------------------------------------*/
101103
/*---------------------------------------------------------------------------*/
@@ -163,18 +165,25 @@ class DynamicMesh::InternalApi
163165
explicit InternalApi(DynamicMesh* mesh)
164166
: m_mesh(mesh)
165167
{
168+
m_connectivity_mng = std::make_unique<ItemConnectivityMng>(mesh->traceMng());
166169
}
167170

168171
public:
169172

170-
void setMeshKind(const MeshKind& v)
173+
void setMeshKind(const MeshKind& v) override
171174
{
172175
m_mesh->m_mesh_kind = v;
173176
}
174177

178+
IItemConnectivityMng* dofConnectivityMng() const noexcept override
179+
{
180+
return m_connectivity_mng.get();
181+
}
182+
175183
private:
176184

177185
DynamicMesh* m_mesh = nullptr;
186+
std::unique_ptr<IItemConnectivityMng> m_connectivity_mng = nullptr;
178187
};
179188

180189
/*---------------------------------------------------------------------------*/

arcane/src/arcane/mesh/GraphDoFs.cc

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ GraphDoFs::
4747
GraphDoFs(IMesh* mesh, String particle_family_name)
4848
: TraceAccessor(mesh->traceMng())
4949
, m_mesh(mesh)
50-
, m_connectivity_mng(mesh->traceMng())
51-
, m_dof_mng(mesh, &m_connectivity_mng)
50+
, m_dof_mng(mesh)
51+
, m_connectivity_mng(m_dof_mng.connectivityMng())
5252
, m_dual_node_family(m_dof_mng.family(GraphDoFs::dualNodeFamilyName(), true))
5353
, m_link_family(m_dof_mng.family(GraphDoFs::linkFamilyName(), true))
5454
, m_update_sync_info(false)
@@ -81,7 +81,7 @@ _allocateGraph()
8181
linkFamily(),
8282
mesh::connectivityName(dualNodeFamily(), linkFamily()));
8383

84-
m_connectivity_mng.registerConnectivity(m_dualnodes_incremental_connectivity);
84+
m_connectivity_mng->registerConnectivity(m_dualnodes_incremental_connectivity);
8585

8686
if (m_item_family_network)
8787
m_item_family_network->addRelation(dualNodeFamily(), linkFamily(), m_dualnodes_incremental_connectivity);
@@ -90,7 +90,7 @@ _allocateGraph()
9090
new IncrementalItemConnectivity(linkFamily(),
9191
dualNodeFamily(),
9292
mesh::connectivityName(linkFamily(), dualNodeFamily()));
93-
m_connectivity_mng.registerConnectivity(m_links_incremental_connectivity);
93+
m_connectivity_mng->registerConnectivity(m_links_incremental_connectivity);
9494

9595
if (m_item_family_network)
9696
//m_item_family_network->addRelation(linkFamily(),dualNodeFamily(),m_links_incremental_connectivity);
@@ -106,7 +106,7 @@ _allocateGraph()
106106
dual_item_family,
107107
mesh::connectivityName(dualNodeFamily(), dual_item_family));
108108

109-
m_connectivity_mng.registerConnectivity(dof2dual_incremental_connectivity);
109+
m_connectivity_mng->registerConnectivity(dof2dual_incremental_connectivity);
110110
m_incremental_connectivities[_connectivityIndex(dual_node_kind)] = dof2dual_incremental_connectivity;
111111
if (m_item_family_network)
112112
m_item_family_network->addDependency(dualNodeFamily(), dual_item_family, dof2dual_incremental_connectivity, false);
@@ -174,8 +174,8 @@ addLinks(Integer nb_link,
174174
}
175175
link_index += nb_dual_nodes_per_link;
176176
}
177-
m_connectivity_mng.setUpToDate(m_links_incremental_connectivity);
178-
m_connectivity_mng.setUpToDate(m_dualnodes_incremental_connectivity);
177+
m_connectivity_mng->setUpToDate(m_links_incremental_connectivity);
178+
m_connectivity_mng->setUpToDate(m_dualnodes_incremental_connectivity);
179179

180180
m_update_sync_info = false;
181181
}
@@ -217,7 +217,7 @@ addDualNodes(Integer graph_nb_dual_node,
217217
dual_item_family,
218218
mesh::connectivityName(dualNodeFamily(), dual_item_family));
219219

220-
m_connectivity_mng.registerConnectivity(incremental_dual_item_connectivity);
220+
m_connectivity_mng->registerConnectivity(incremental_dual_item_connectivity);
221221
m_incremental_connectivities[_connectivityIndex(dual_node_kind)] = incremental_dual_item_connectivity;
222222
if (m_item_family_network)
223223
m_item_family_network->addDependency(dualNodeFamily(), dual_item_family, incremental_dual_item_connectivity, false);
@@ -229,7 +229,7 @@ addDualNodes(Integer graph_nb_dual_node,
229229
incremental_dual_item_connectivity->notifySourceItemAdded(ItemLocalId(*idual_node));
230230
incremental_dual_item_connectivity->addConnectedItem(ItemLocalId(*idual_node), ItemLocalId(dual_item_lids[idual_node.index()]));
231231
}
232-
m_connectivity_mng.setUpToDate(incremental_dual_item_connectivity);
232+
m_connectivity_mng->setUpToDate(incremental_dual_item_connectivity);
233233

234234
m_update_sync_info = false;
235235
//m_dual_node_to_connectivity_index.resize(&dual_node_family, _connectivityIndex(dual_node_kind));
@@ -338,7 +338,7 @@ addDualNodes(Integer graph_nb_dual_node,
338338
dual_item_family,
339339
mesh::connectivityName(dualNodeFamily(), dual_item_family));
340340

341-
m_connectivity_mng.registerConnectivity(incremental_dual_item_connectivity);
341+
m_connectivity_mng->registerConnectivity(incremental_dual_item_connectivity);
342342
m_incremental_connectivities[index] = incremental_dual_item_connectivity;
343343
if (m_item_family_network)
344344
m_item_family_network->addDependency(dualNodeFamily(), dual_item_family, incremental_dual_item_connectivity, false);
@@ -353,7 +353,7 @@ addDualNodes(Integer graph_nb_dual_node,
353353

354354
//m_dual_node_to_connectivity_index.resize(&dual_node_family, _connectivityIndex(dual_node_kind));
355355

356-
m_connectivity_mng.setUpToDate(incremental_dual_item_connectivity);
356+
m_connectivity_mng->setUpToDate(incremental_dual_item_connectivity);
357357
}
358358
}
359359

@@ -518,13 +518,13 @@ isUpdated()
518518
Integer dual_node_kind = m_dualnode_kinds[index];
519519
auto dof2dual_incremental_connectivity = m_incremental_connectivities[_connectivityIndex(dual_node_kind)];
520520

521-
if (dof2dual_incremental_connectivity && !m_connectivity_mng.isUpToDate(dof2dual_incremental_connectivity))
521+
if (dof2dual_incremental_connectivity && !m_connectivity_mng->isUpToDate(dof2dual_incremental_connectivity))
522522
m_update_sync_info = false;
523523

524-
if (!m_connectivity_mng.isUpToDate(m_dualnodes_incremental_connectivity))
524+
if (!m_connectivity_mng->isUpToDate(m_dualnodes_incremental_connectivity))
525525
m_update_sync_info = false;
526526

527-
if (!m_connectivity_mng.isUpToDate(m_links_incremental_connectivity))
527+
if (!m_connectivity_mng->isUpToDate(m_links_incremental_connectivity))
528528
m_update_sync_info = false;
529529
}
530530

@@ -554,12 +554,12 @@ endUpdate()
554554
continue;
555555

556556
auto dof2dual_incremental_connectivity = m_incremental_connectivities[_connectivityIndex(dual_node_kind)];
557-
if (dof2dual_incremental_connectivity && !m_connectivity_mng.isUpToDate(dof2dual_incremental_connectivity)) {
557+
if (dof2dual_incremental_connectivity && !m_connectivity_mng->isUpToDate(dof2dual_incremental_connectivity)) {
558558
//info() << "UPDATE DUALNODE CONNECTIVITY KIND " << index << " " << dual_node_kind << " " << dual_item_kind;
559559
// Handle added nodes : create a dof for each own node added
560560
Int32ArrayView source_family_added_items_lids;
561561
Int32ArrayView source_family_removed_items_lids;
562-
m_connectivity_mng.getSourceFamilyModifiedItems(dof2dual_incremental_connectivity, source_family_added_items_lids, source_family_removed_items_lids);
562+
m_connectivity_mng->getSourceFamilyModifiedItems(dof2dual_incremental_connectivity, source_family_added_items_lids, source_family_removed_items_lids);
563563

564564
info() << " NUMBER OF REMOVE ITEMS : " << source_family_removed_items_lids.size();
565565
info() << " NUMBER OF ADDED ITEMS : " << source_family_added_items_lids.size();
@@ -594,23 +594,23 @@ endUpdate()
594594

595595
// For test purpose only : try getSourceFamilyModifiedItem (must give back the new dofs created)
596596
//Int32ArrayView target_family_added_item_lids, target_family_removed_item_lids;
597-
//m_connectivity_mng.getTargetFamilyModifiedItems(dof2dual_incremental_connectivity,target_family_added_item_lids,target_family_removed_item_lids);
597+
//m_connectivity_mng->getTargetFamilyModifiedItems(dof2dual_incremental_connectivity,target_family_added_item_lids,target_family_removed_item_lids);
598598
//_checkTargetFamilyInfo(dualnode_family.view(target_family_added_item_lids),lids);
599599

600600
//m_dual_node_to_connectivity_index.resize(dualnode_family, _connectivityIndex(dual_node_kind));
601601

602602
// Finalize connectivity update
603-
m_connectivity_mng.setUpToDate(dof2dual_incremental_connectivity);
603+
m_connectivity_mng->setUpToDate(dof2dual_incremental_connectivity);
604604
}
605605
}
606606

607-
if (!m_connectivity_mng.isUpToDate(m_links_incremental_connectivity)) {
607+
if (!m_connectivity_mng->isUpToDate(m_links_incremental_connectivity)) {
608608

609609
//info()<<"UPDATE LINK TO DUALNODE CONNECTIVITY" ;
610610
// Handle added nodes : create a dof for each own node added
611611
Int32ArrayView source_family_added_items_lids;
612612
Int32ArrayView source_family_removed_items_lids;
613-
m_connectivity_mng.getSourceFamilyModifiedItems(m_links_incremental_connectivity, source_family_added_items_lids, source_family_removed_items_lids);
613+
m_connectivity_mng->getSourceFamilyModifiedItems(m_links_incremental_connectivity, source_family_added_items_lids, source_family_removed_items_lids);
614614

615615
info() << " NUMBER OF REMOVE ITEMS : " << source_family_removed_items_lids.size();
616616
info() << " NUMBER OF ADDED ITEMS : " << source_family_added_items_lids.size();
@@ -654,8 +654,8 @@ endUpdate()
654654
}
655655

656656
// Finalize connectivity update
657-
m_connectivity_mng.setUpToDate(m_links_incremental_connectivity);
658-
m_connectivity_mng.setUpToDate(m_dualnodes_incremental_connectivity);
657+
m_connectivity_mng->setUpToDate(m_links_incremental_connectivity);
658+
m_connectivity_mng->setUpToDate(m_dualnodes_incremental_connectivity);
659659
}
660660

661661
dualnode_family->computeSynchronizeInfos();

arcane/src/arcane/mesh/GraphDoFs.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,17 @@
1313
/*---------------------------------------------------------------------------*/
1414
/*---------------------------------------------------------------------------*/
1515

16-
#include "arcane/IGraph2.h"
17-
#include "arcane/IGraphModifier2.h"
16+
#include "arcane/core/IGraph2.h"
17+
#include "arcane/core/IGraphModifier2.h"
18+
#include "arcane/core/IItemConnectivityMng.h"
1819

1920
#include "arcane/utils/TraceAccessor.h"
2021
#include "arcane/utils/Convert.h"
2122

2223
#include "arcane/mesh/ItemFamily.h"
23-
2424
#include "arcane/mesh/DoFManager.h"
2525
#include "arcane/mesh/DoFFamily.h"
2626
#include "arcane/mesh/ItemConnectivity.h"
27-
#include "arcane/mesh/ItemConnectivityMng.h"
2827
#include "arcane/mesh/IncrementalItemConnectivity.h"
2928
#include "arcane/mesh/GhostLayerFromConnectivityComputer.h"
3029
#include "arcane/mesh/DualUniqueIdMng.h"
@@ -283,8 +282,8 @@ class ARCANE_MESH_EXPORT GraphDoFs
283282
bool m_graph_allocated = false;
284283
Integer m_graph_id = -1;
285284

286-
ItemConnectivityMng m_connectivity_mng;
287285
DoFManager m_dof_mng;
286+
IItemConnectivityMng* m_connectivity_mng;
288287
DoFFamily& m_dual_node_family;
289288
DoFFamily& m_link_family;
290289

arcane/src/arcane/mesh/srcs.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ set( ARCANE_SOURCES
230230
ItemConnectivitySynchronizer.h
231231
MeshGlobal.h
232232
DoFManager.h
233+
DoFManager.cc
233234
ItemProperty.h
234235
IItemConnectivityGhostPolicy.h
235236
NewItemOwnerBuilder.h

arcane/src/arcane/tests/dof/DoFTester.cc

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
22
//-----------------------------------------------------------------------------
3-
// Copyright 2000-2023 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
3+
// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
44
// See the top-level COPYRIGHT file for details.
55
// SPDX-License-Identifier: Apache-2.0
66
//-----------------------------------------------------------------------------
77
/*---------------------------------------------------------------------------*/
8-
/* DoFTester.cc (C) 2000-2023 */
8+
/* DoFTester.cc (C) 2000-2024 */
99
/* */
1010
/* Comment on file content */
1111
/*---------------------------------------------------------------------------*/
@@ -62,8 +62,7 @@ class DoFTester
6262

6363
DoFTester(const ServiceBuildInfo& sbi)
6464
: ArcaneDoFTesterObject(sbi)
65-
, m_connectivity_mng(sbi.subDomain()->traceMng())
66-
, m_dof_mng(sbi.mesh(),&m_connectivity_mng)
65+
, m_dof_mng(sbi.mesh())
6766
, m_dof_family_name("DoFFamily")
6867
, m_dof_on_cell_family_name("DoFOnCell")
6968
, m_dofs_on_cell_family_name("DoFsOnCell")
@@ -129,15 +128,14 @@ class DoFTester
129128

130129

131130
private:
132-
ItemConnectivityMng m_connectivity_mng;
133-
DoFManager m_dof_mng;
134-
String m_dof_family_name;
135-
String m_dof_on_cell_family_name; // One dof per cell
136-
String m_dofs_on_cell_family_name; // Several dofs per cell
137-
String m_dof_on_node_family_name; // One dof per node
138-
String m_dofs_on_node_family_name; // Several dofs per node
139-
String m_dofs_multi_on_face_family_name; // Several dofs per face (non constant size)
140-
String m_dofs_multi_on_node_family_name; // Several dofs per node (non constant size)
131+
DoFManager m_dof_mng;
132+
String m_dof_family_name;
133+
String m_dof_on_cell_family_name; // One dof per cell
134+
String m_dofs_on_cell_family_name; // Several dofs per cell
135+
String m_dof_on_node_family_name; // One dof per node
136+
String m_dofs_on_node_family_name; // Several dofs per node
137+
String m_dofs_multi_on_face_family_name; // Several dofs per face (non constant size)
138+
String m_dofs_multi_on_node_family_name; // Several dofs per node (non constant size)
141139

142140
};
143141

0 commit comments

Comments
 (0)