Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
ItemFamilyNetwork.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* ItemFamilyNetwork.h (C) 2000-2024 */
9/* */
10/* ItemFamily relations through their connectivities. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MESH_ITEMFAMILYNETWORK_H
13#define ARCANE_MESH_ITEMFAMILYNETWORK_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include <map>
18#include <set>
19
21#include "arcane/utils/ITraceMng.h"
22#include "arcane/utils/DirectedGraphT.h"
23#include "arcane/utils/DirectedAcyclicGraphT.h"
24#include "arcane/utils/List.h"
25#include "arcane/core/IItemFamily.h"
26#include "arcane/core/IIncrementalItemConnectivity.h"
27#include "arcane/mesh/MeshGlobal.h"
28
29#include "arcane/core/IGraph2.h"
30#include "arcane/core/IGraphModifier2.h"
31#include "arcane/core/IItemFamilyNetwork.h"
32#include "arcane/utils/NotImplementedException.h" //tmp !
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
37namespace Arcane::mesh
38{
39
40/*---------------------------------------------------------------------------*/
41/*---------------------------------------------------------------------------*/
42
43class ARCANE_MESH_EXPORT ItemFamilyNetwork
44: public IItemFamilyNetwork
45{
46 public:
47
50 : m_relation_graph(trace_mng)
51 , m_dependency_graph(trace_mng)
52 {}
53
56 {
57 for (auto connectivity : m_connectivity_list) {
58 delete connectivity;
59 }
60 }
61
62 public:
63
64 bool isActivated() const override
65 {
66 return m_is_activated;
67 }
68
72 void addDependency(IItemFamily* master_family, IItemFamily* slave_family, IIncrementalItemConnectivity* master_to_slave_connectivity, bool is_deep_connectivity) override;
73
77 void addRelation(IItemFamily* source_family, IItemFamily* target_family, IIncrementalItemConnectivity* source_to_target_connectivity) override;
78
79 IIncrementalItemConnectivity* getDependency(IItemFamily* source_family, IItemFamily* target_family) override;
80 IIncrementalItemConnectivity* getRelation(IItemFamily* source_family, IItemFamily* target_family) override;
81
83 IIncrementalItemConnectivity* getConnectivity(IItemFamily* source_family, IItemFamily* target_family, const String& name) override;
84 IIncrementalItemConnectivity* getConnectivity(IItemFamily* source_family, IItemFamily* target_family, const String& name, bool& is_dependency) override;
85
87 IIncrementalItemConnectivity* getStoredConnectivity(IItemFamily* source_family, IItemFamily* target_family, const String& name) override;
88 IIncrementalItemConnectivity* getStoredConnectivity(IItemFamily* source_family, IItemFamily* target_family, const String& name, bool& is_dependency) override;
89
91 List<IIncrementalItemConnectivity*> getConnectivities() override;
92
94 SharedArray<IIncrementalItemConnectivity*> getChildConnectivities(IItemFamily* source_family) override;
95 SharedArray<IIncrementalItemConnectivity*> getParentConnectivities(IItemFamily* target_family) override;
96
98 SharedArray<IIncrementalItemConnectivity*> getChildDependencies(IItemFamily* source_family) override;
99 SharedArray<IIncrementalItemConnectivity*> getParentDependencies(IItemFamily* target_family) override;
100
102 SharedArray<IIncrementalItemConnectivity*> getChildRelations(IItemFamily* source_family) override;
103 SharedArray<IIncrementalItemConnectivity*> getParentRelations(IItemFamily* target_family) override;
104
106 const std::set<IItemFamily*>& getFamilies() const override { return m_families; }
107
108 SharedArray<IItemFamily*> getFamilies(eSchedulingOrder order) const override;
109
111 void schedule(IItemFamilyNetworkTask task, eSchedulingOrder order = TopologicalOrder) override;
112
114 void setIsStored(IIncrementalItemConnectivity* connectivity) override;
115
117 bool isStored(IIncrementalItemConnectivity* connectivity) override;
118
119 bool isDeep(IIncrementalItemConnectivity* connectivity) override;
120
121 Integer registerConnectedGraph(IGraph2* graph) override;
122
123 void releaseConnectedGraph(Integer graph_id) override;
124
125 void removeConnectedDoFsFromCells(Int32ConstArrayView local_ids) override;
126
127 private:
128
129 bool m_is_activated = false;
133
134 // NOTE GG: It would be necessary to use List<Ref<IIncrementalItemConnectivity>>
135 // but this changes the interface of this class because of the method
136 // getConnectivities(). To check with Stéphane regarding the modification
137 List<IIncrementalItemConnectivity*> m_connectivity_list;
138
139 std::map<IIncrementalItemConnectivity*, std::pair<bool, bool>> m_connectivity_status; // bool = is_stored
140 std::set<IItemFamily*> m_families;
141
142 UniqueArray<IGraph2*> m_registred_graphs;
143
144 private:
145
146 void _checkConnectivityName(IIncrementalItemConnectivity* connectivity, const String& name);
147 std::pair<IIncrementalItemConnectivity* const, std::pair<bool, bool>>& _getConnectivityStatus(IIncrementalItemConnectivity* connectivity);
148 SharedArray<IIncrementalItemConnectivity*> _getConnectivitiesFromGraph(const ConnectivityGraph::ConnectedEdgeSet& connectivity_edges);
149 SharedArray<IIncrementalItemConnectivity*> _getConnectivitiesFromGraph(const ConnectivityGraph::ConnectedEdgeSet& connectivity_edges1, const ConnectivityGraph::ConnectedEdgeSet& connectivity_edges2);
150};
151
152/*---------------------------------------------------------------------------*/
153/*---------------------------------------------------------------------------*/
154
155} // End namespace Arcane::mesh
156
157/*---------------------------------------------------------------------------*/
158/*---------------------------------------------------------------------------*/
159
160#endif
Arcane configuration file.
Mesh graph interface.
Definition IGraph2.h:106
Interface for managing an incremental connectivity.
Interface of an entity family.
Definition IItemFamily.h:83
Implementation of a collection of elements in vector form.
1D vector of data with reference semantics.
1D data vector with value semantics (STL style).
const std::set< IItemFamily * > & getFamilies() const override
Get the list of all families.
ItemFamilyNetwork(ITraceMng *trace_mng)
Int32 Integer
Type representing an integer.
ConstArrayView< Int32 > Int32ConstArrayView
C equivalent of a 1D array of 32-bit integers.
Definition UtilsTypes.h:482