Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
ItemConnectivityMng.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/* ItemConnectivityMng.h (C) 2000-2023 */
9/* */
10/* Connectivity Manager */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CONNECTIVITYMANAGER_H
13#define ARCANE_CONNECTIVITYMANAGER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/utils/ITraceMng.h"
19#include "arcane/utils/Array.h"
20
21#include "arcane/core/IItemConnectivity.h"
22#include "arcane/core/IItemConnectivityMng.h"
23#include "arcane/core/IItemConnectivitySynchronizer.h"
24#include "arcane/core/IIncrementalItemConnectivity.h"
25#include "arcane/core/IItemFamily.h"
26
27#include <map>
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32namespace Arcane
33{
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
37
39
40/*---------------------------------------------------------------------------*/
41/*---------------------------------------------------------------------------*/
42
43class FamilyState
44{
45 public:
46
47 FamilyState()
48 : m_state(-1)
49 {}
50 FamilyState(const FamilyState&) = default;
51 virtual ~FamilyState() = default;
52
53 public:
54
70};
71
72/*---------------------------------------------------------------------------*/
73/*---------------------------------------------------------------------------*/
74
75class ConnectivityStateData
76{
77 public:
78
79 ConnectivityStateData()
80 : m_last_family_state(-1)
81 , m_last_added_item_index(-1)
82 , m_last_removed_item_index(-1)
83 {}
84 ConnectivityStateData(const ConnectivityStateData&) = default;
85 virtual ~ConnectivityStateData() = default;
86
87 public:
88
89 Integer m_last_family_state;
90 Integer m_last_added_item_index;
91 Integer m_last_removed_item_index;
92};
93
94class ConnectivityState
95{
96 public:
97
98 ConnectivityState() {}
99 ConnectivityState(const ConnectivityState&) = default;
100 virtual ~ConnectivityState() = default;
101
102 public:
103
104 ConnectivityStateData m_state_with_source_family;
105 ConnectivityStateData m_state_with_target_family;
106};
107
108/*---------------------------------------------------------------------------*/
109/*---------------------------------------------------------------------------*/
110
111class ARCANE_MESH_EXPORT ItemConnectivityMng
113{
114 public:
115
118 : m_trace_mng(trace_mng)
119 {}
120
123 {
124 for (const auto& map_element : m_synchronizers) {
125 if (map_element.second)
126 delete map_element.second;
127 }
128 }
129
130 // Save Connectivity
131 void registerConnectivity(IItemConnectivity* connectivity) override
132 {
133 connectivity->sourceFamily()->addSourceConnectivity(connectivity);
134 connectivity->targetFamily()->addTargetConnectivity(connectivity);
135 // refactoring
136 connectivity->sourceFamily()->setConnectivityMng(this);
137 connectivity->targetFamily()->setConnectivityMng(this);
138 _register(connectivity->name(), connectivity->sourceFamily()->fullName(), connectivity->targetFamily()->fullName());
139 }
140
141 void unregisterConnectivity(IItemConnectivity* connectivity) override
142 {
143 connectivity->sourceFamily()->removeSourceConnectivity(connectivity);
144 connectivity->targetFamily()->removeTargetConnectivity(connectivity);
145 }
146
147 // Save Connectivity
148 void registerConnectivity(IIncrementalItemConnectivity* connectivity) override
149 {
150 //connectivity->sourceFamily()->addSourceConnectivity(connectivity);
151 //connectivity->targetFamily()->addTargetConnectivity(connectivity);
152 // refactoring
153 connectivity->sourceFamily()->setConnectivityMng(this);
154 connectivity->targetFamily()->setConnectivityMng(this);
155 _register(connectivity->name(), connectivity->sourceFamily()->fullName(), connectivity->targetFamily()->fullName());
156 }
157
158 void unregisterConnectivity([[maybe_unused]] IIncrementalItemConnectivity* connectivity) override
159 {
160 //connectivity->sourceFamily()->removeSourceConnectivity(connectivity);
161 //connectivity->targetFamily()->removeTargetConnectivity(connectivity);
162 }
163
169 IItemConnectivitySynchronizer* createSynchronizer(IItemConnectivity* connectivity,
170 IItemConnectivityGhostPolicy* connectivity_ghost_policy) override;
171 IItemConnectivitySynchronizer* getSynchronizer(IItemConnectivity* connectivity) override
172 {
173 // TODO handle failure
174 return m_synchronizers[connectivity];
175 }
176
178 void setModifiedItems(IItemFamily* family, Int32ConstArrayView added_items, Int32ConstArrayView removed_items) override;
179
181 void notifyLocalIdChanged(IItemFamily* family, Int32ConstArrayView old_to_new_ids, Integer nb_item) override;
182
184 bool isUpToDate(IItemConnectivity* connectivity) override
185 {
186 return (isUpToDateWithSourceFamily(connectivity) && isUpToDateWithTargetFamily(connectivity));
187 }
189 {
190 return (_lastUpdateSourceFamilyState(connectivity->name()) == _familyState(connectivity->sourceFamily()->fullName()));
191 }
193 {
194 return (_lastUpdateTargetFamilyState(connectivity->name()) == _familyState(connectivity->targetFamily()->fullName()));
195 }
196
198 void setUpToDate(IItemConnectivity* connectivity) override;
199
201 bool isUpToDate(IIncrementalItemConnectivity* connectivity) override
202 {
203 return (isUpToDateWithSourceFamily(connectivity) && isUpToDateWithTargetFamily(connectivity));
204 }
206 {
207 return (_lastUpdateSourceFamilyState(connectivity->name()) == _familyState(connectivity->sourceFamily()->fullName()));
208 }
210 {
211 return (_lastUpdateTargetFamilyState(connectivity->name()) == _familyState(connectivity->targetFamily()->fullName()));
212 }
213
215 void setUpToDate(IIncrementalItemConnectivity* connectivity) override;
216
218 void getSourceFamilyModifiedItems(IItemConnectivity* connectivity, Int32ArrayView& added_items,
219 Int32ArrayView& removed_items) override;
220 void getTargetFamilyModifiedItems(IItemConnectivity* connectivity, Int32ArrayView& added_items,
221 Int32ArrayView& removed_items) override;
222
223 void getSourceFamilyModifiedItems(IIncrementalItemConnectivity* connectivity, Int32ArrayView& added_items,
224 Int32ArrayView& removed_items) override;
225 void getTargetFamilyModifiedItems(IIncrementalItemConnectivity* connectivity, Int32ArrayView& added_items,
226 Int32ArrayView& removed_items) override;
227
228 private:
229
230 void _register(const String& connectivity_name, const String& from_family_name, const String& to_family_name);
231 Integer _lastUpdateSourceFamilyState(const String& connectivity_name);
232 Integer _lastUpdateTargetFamilyState(const String& connectivity_name);
233 Integer _familyState(const String& family_name);
234 ConnectivityState& _findConnectivity(const String& connectivity_name);
235 FamilyState& _findFamily(const String& family_full_name);
236 void _getModifiedItems(ConnectivityStateData& connectivity_state, FamilyState& family_state, Int32ArrayView& added_items, Int32ArrayView& removed_items);
237 void _setUpToDate(ConnectivityStateData& connectivity_state, FamilyState& family_state);
238
239 ITraceMng* m_trace_mng;
240 std::map<IItemConnectivity*, IItemConnectivitySynchronizer*> m_synchronizers;
241 typedef std::map<const String, FamilyState> FamilyStateMap;
242 FamilyStateMap m_family_states;
243 typedef std::map<const String, ConnectivityState> ConnectivityStateMap;
244 ConnectivityStateMap m_connectivity_states;
245};
246
247/*---------------------------------------------------------------------------*/
248/*---------------------------------------------------------------------------*/
249
250} // End namespace Arcane
251
252/*---------------------------------------------------------------------------*/
253/*---------------------------------------------------------------------------*/
254
255#endif
Arcane configuration file.
Int32SharedArray m_removed_items
idem
Int32SharedArray m_added_items
Concatenation of all the family changes during the simulation.
IntegerSharedArray m_state_first_removed_item_index
Int32UniqueArray m_current_added_items
Current added items (no history).
IntegerSharedArray m_state_first_added_item_index
Interface for managing an incremental connectivity.
virtual String name() const =0
Name of the connectivity.
virtual IItemFamily * targetFamily() const =0
Target family.
virtual IItemFamily * sourceFamily() const =0
Source family.
Interface to manage connectivity.
virtual IItemFamily * targetFamily() const =0
Target family.
virtual IItemFamily * sourceFamily() const =0
Source family.
virtual const String & name() const =0
Name of the connectivity.
virtual String fullName() const =0
Full family name (with the mesh's name).
bool isUpToDateWithSourceFamily(IIncrementalItemConnectivity *connectivity) override
relative to the source family and the target family
bool isUpToDateWithSourceFamily(IItemConnectivity *connectivity) override
relative to the source family and the target family
bool isUpToDateWithTargetFamily(IIncrementalItemConnectivity *connectivity) override
relative to the source family
void registerConnectivity(IItemConnectivity *connectivity) override
Registering a connectivity.
ItemConnectivityMng(ITraceMng *trace_mng)
bool isUpToDateWithTargetFamily(IItemConnectivity *connectivity) override
relative to the source family
bool isUpToDate(IItemConnectivity *connectivity) override
Test if the connectivity is up to date compared to the source family and the target family.
bool isUpToDate(IIncrementalItemConnectivity *connectivity) override
Test if the connectivity is up to date compared to the source family and the target family.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Int32 Integer
Type representing an integer.
SharedArray< Int32 > Int32SharedArray
Dynamic 1D array of 32-bit integers.
Definition UtilsTypes.h:381
UniqueArray< Int32 > Int32UniqueArray
Dynamic 1D array of 32-bit integers.
Definition UtilsTypes.h:341
ArrayView< Int32 > Int32ArrayView
C equivalent of a 1D array of 32-bit integers.
Definition UtilsTypes.h:453
SharedArray< Integer > IntegerSharedArray
Dynamic 1D array of integers.
Definition UtilsTypes.h:387