Arcane  v4.1.2.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ItemFamilyNetwork.h
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/* 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/IItemFamily.h"
26#include "arcane/IIncrementalItemConnectivity.h"
27#include "arcane/mesh/MeshGlobal.h"
28
29#include "arcane/IGraph2.h"
30#include "arcane/IGraphModifier2.h"
31#include "arcane/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 for (auto connectivity : m_connectivity_list)
57 {
58 delete connectivity;
59 }
60 }
61
62public:
63
64 bool isActivated() const override {
65 return m_is_activated ;
66 }
67
71 void addDependency(IItemFamily* master_family, IItemFamily* slave_family, IIncrementalItemConnectivity* master_to_slave_connectivity, bool is_deep_connectivity) override;
72
76 void addRelation(IItemFamily* source_family, IItemFamily* target_family, IIncrementalItemConnectivity* source_to_target_connectivity) override;
77
78 IIncrementalItemConnectivity* getDependency(IItemFamily* source_family, IItemFamily* target_family) override;
79 IIncrementalItemConnectivity* getRelation(IItemFamily* source_family, IItemFamily* target_family) override;
80
82 IIncrementalItemConnectivity* getConnectivity(IItemFamily* source_family, IItemFamily* target_family, const String& name) override;
83 IIncrementalItemConnectivity* getConnectivity(IItemFamily* source_family, IItemFamily* target_family, const String& name, bool& is_dependency) override;
84
86 IIncrementalItemConnectivity* getStoredConnectivity(IItemFamily* source_family, IItemFamily* target_family, const String& name) override;
87 IIncrementalItemConnectivity* getStoredConnectivity(IItemFamily* source_family, IItemFamily* target_family, const String& name, bool& is_dependency) override;
88
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
122 Integer registerConnectedGraph(IGraph2* graph) override;
123
124 void releaseConnectedGraph(Integer graph_id) override;
125
126 void removeConnectedDoFsFromCells(Int32ConstArrayView local_ids) override;
127 private:
128
129 bool m_is_activated = false ;
133
134 // NOTE GG: Il faudrait utiliser List<Ref<IIncrementalItemConnectivity>>
135 // mais cela change l'interface de cette classe à cause de la méthode
136 // getConnectivities(). A voir avec Stéphane pour la 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 /* ITEMFAMILYNETWORK_H_ */
Fichier de configuration d'Arcane.
Interface d'un graphe du maillage.
Definition IGraph2.h:103
Interface pour gérer une connectivité incrémentale.
Interface d'une famille d'entités.
Definition IItemFamily.h:84
Interface du gestionnaire de traces.
Implémentation d'une collection d'éléments sous forme de vecteur.
Vecteur 1D de données avec sémantique par référence.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
const std::set< IItemFamily * > & getFamilies() const override
Obtenir la liste de toutes les familles.
ItemFamilyNetwork(ITraceMng *trace_mng)
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:486