14#include "ItemFamilyNetwork.h"
31 m_dependency_graph.addEdge(master_family,slave_family,master_to_slave_connectivity);
32 if(master_to_slave_connectivity) {
33 m_connectivity_list.add(master_to_slave_connectivity);
34 m_connectivity_status[master_to_slave_connectivity] = std::make_pair(
false,is_deep_connectivity);
36 m_families.insert(master_family);
37 m_families.insert(slave_family);
39 m_is_activated = true ;
48 m_relation_graph.addEdge(source_family,target_family,source_to_target_connectivity);
49 m_connectivity_list.add(source_to_target_connectivity);
50 if(m_connectivity_status.find(source_to_target_connectivity)==m_connectivity_status.end())
51 m_connectivity_status[source_to_target_connectivity] = std::make_pair(
false,
true);
52 m_families.insert(source_family);
53 m_families.insert(target_family);
54 m_is_activated = true ;
73 auto* dependency = m_dependency_graph.getEdge(source_family,target_family);
74 if (dependency)
return *dependency;
84 auto* relation = m_relation_graph.getEdge(source_family,target_family);
85 if (relation)
return *relation;
97 auto* connectivity = m_dependency_graph.getEdge(source_family,target_family);
98 is_dependency =
false;
101 _checkConnectivityName(*connectivity,name);
102 is_dependency =
true;
103 return *connectivity;
105 connectivity = m_relation_graph.getEdge(source_family,target_family);
108 _checkConnectivityName(*connectivity,name);
109 return *connectivity;
142 return m_connectivity_list;
151 return _getConnectivitiesFromGraph(m_dependency_graph.outEdges(source_family));
160 return _getConnectivitiesFromGraph(m_dependency_graph.inEdges(target_family));
169 return _getConnectivitiesFromGraph(m_relation_graph.outEdges(source_family));
178 return _getConnectivitiesFromGraph(m_relation_graph.inEdges(target_family));
187 return _getConnectivitiesFromGraph(m_relation_graph.outEdges(source_family), m_dependency_graph.outEdges(source_family));
196 return _getConnectivitiesFromGraph(m_relation_graph.inEdges(target_family), m_dependency_graph.inEdges(target_family));
203_getConnectivitiesFromGraph(
const ConnectivityGraph::ConnectedEdgeSet& connectivity_edges)
207 for (
const auto& connectivity_edge : connectivity_edges){
208 connectivities[index++] = connectivity_edge;
210 return connectivities;
216SharedArray<IIncrementalItemConnectivity*> ItemFamilyNetwork::
217_getConnectivitiesFromGraph(
const ConnectivityGraph::ConnectedEdgeSet& connectivity_edges1,
const ConnectivityGraph::ConnectedEdgeSet& connectivity_edges2)
219 SharedArray<IIncrementalItemConnectivity*> connectivities(connectivity_edges1.size()+connectivity_edges2.size());
221 for (
const auto& connectivity_edge : connectivity_edges1){
222 connectivities[index++] = connectivity_edge;
224 for (
const auto& connectivity_edge : connectivity_edges2){
225 connectivities[index++] = connectivity_edge;
227 return connectivities;
236 _getConnectivityStatus(connectivity).second.first =
true;
245 return _getConnectivityStatus(connectivity).second.first;
251 return _getConnectivityStatus(connectivity).second.second;
256void ItemFamilyNetwork::
259 if (connectivity->
name() != name)
throw FatalErrorException(String::format(
"Found connectivity ({0}) has not the expected name ({1}) ",connectivity->
name(),name));
272 case TopologicalOrder:
273 for (
const auto& family : m_dependency_graph.topologicalSort())
274 families.
add(family);
276 case InverseTopologicalOrder:
277 for (
const auto& family : m_dependency_graph.topologicalSort().reverseOrder())
278 families.
add(family);
281 ARCANE_FATAL(
"Cannot schedule task, scheduling order is unkwnown. Set Scheduling order");
288schedule(IItemFamilyNetworkTask task, eSchedulingOrder scheduling_order)
290 switch (scheduling_order) {
291 case TopologicalOrder:
292 for (
const auto& family : m_dependency_graph.topologicalSort())
295 case InverseTopologicalOrder:
296 for (
const auto& family : m_dependency_graph.topologicalSort().reverseOrder())
300 ARCANE_FATAL(
"Cannot schedule task, scheduling order is unkwnown. Set Scheduling order");
308std::pair<IIncrementalItemConnectivity* const,std::pair<bool,bool>>& ItemFamilyNetwork::
311 auto connectivity_iterator = m_connectivity_status.find(connectivity);
312 if (connectivity_iterator == m_connectivity_status.end())
313 ARCANE_FATAL(
"Cannot find connectivity {0} between families {1} and {2}",
315 return *(connectivity_iterator);
323 Integer graph_id = m_registred_graphs.size() ;
324 m_registred_graphs.add(graph) ;
330 m_registred_graphs[graph_id] = nullptr ;
335 for(
auto graph : m_registred_graphs)
337 graph->modifier()->removeConnectedItemsFromCells(local_ids) ;
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Exception lorsqu'une erreur fatale est survenue.
Interface d'un graphe du maillage.
Interface pour gérer une connectivité incrémentale.
virtual String name() const =0
Nom de la connectivité
virtual IItemFamily * targetFamily() const =0
Famille cible.
virtual IItemFamily * sourceFamily() const =0
Famille source.
Interface d'une famille d'entités.
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.
void setIsStored(IIncrementalItemConnectivity *connectivity) override
Positionne une connectivité comme étant stockée. A l'ajout les connectivités sont décrites comme non ...
List< IIncrementalItemConnectivity * > getConnectivities() override
Obtenir la liste de toutes les connectivités, qu'elles soient relation ou dépendance.
void addRelation(IItemFamily *source_family, IItemFamily *target_family, IIncrementalItemConnectivity *source_to_target_connectivity) override
SharedArray< IIncrementalItemConnectivity * > getChildRelations(IItemFamily *source_family) override
Obtenir la liste de toutes les relations, filles d'une famille source_family ou parentes d'une famill...
SharedArray< IIncrementalItemConnectivity * > getChildConnectivities(IItemFamily *source_family) override
Obtenir la liste de toutes les connectivités (dépendances ou relations), filles d'une famille source_...
bool isStored(IIncrementalItemConnectivity *connectivity) override
Récupère l'information relative au stockage de la connectivité
Integer registerConnectedGraph(IGraph2 *graph) override
enregistre un graphe gérant des DoFs connectés au maillage
const std::set< IItemFamily * > & getFamilies() const override
Obtenir la liste de toutes les familles.
void addDependency(IItemFamily *master_family, IItemFamily *slave_family, IIncrementalItemConnectivity *master_to_slave_connectivity, bool is_deep_connectivity) override
SharedArray< IIncrementalItemConnectivity * > getChildDependencies(IItemFamily *source_family) override
Obtenir la liste de toutes les dépendances, filles d'une famille source_family ou parentes d'une fami...
bool isDeep(IIncrementalItemConnectivity *connectivity) override
Récupère l'information relative au stockage de la connectivité
void removeConnectedDoFsFromCells(Int32ConstArrayView local_ids) override
supprime les DoFs et les liens entre DoFs connectés aux mailles supprimées
IIncrementalItemConnectivity * getConnectivity(IItemFamily *source_family, IItemFamily *target_family, const String &name) override
Obtenir une connectivité entre les familles source_family et target_family de nom name,...
IIncrementalItemConnectivity * getStoredConnectivity(IItemFamily *source_family, IItemFamily *target_family, const String &name) override
Retourne, si elle es associée à un stockage, la connectivité entre les familles source_family et targ...
void releaseConnectedGraph(Integer graph_id) override
dé enregistre un graphe gérant des DoFs connectés au maillage
IIncrementalItemConnectivity * getDependency(IItemFamily *source_family, IItemFamily *target_family) override
Retourne la connectivité de dépendance entre la famille source_family et target_family.
void schedule(IItemFamilyNetworkTask task, eSchedulingOrder order=TopologicalOrder) override
Ordonnance l'exécution d'une tâche, dans l'ordre topologique ou topologique inverse du graphe de dépe...
@ Unknown
Accessibilité inconnue.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.