12#ifndef ARCANE_MESH_ITEMCONNECTIVITY_H
13#define ARCANE_MESH_ITEMCONNECTIVITY_H
17#include "arcane/utils/FatalErrorException.h"
18#include "arcane/utils/ITraceMng.h"
20#include "arcane/IItemFamily.h"
21#include "arcane/ItemVector.h"
22#include "arcane/VariableTypes.h"
23#include "arcane/ItemInternal.h"
24#include "arcane/IItemConnectivity.h"
25#include "arcane/ConnectivityItemVector.h"
27#include "arcane/mesh/DoFFamily.h"
28#include "arcane/mesh/ItemProperty.h"
44class ARCANE_MESH_EXPORT AbstractConnectivity
49 : m_source_family(source_family)
50 , m_target_family(target_family)
51 , m_name(connectivity_name)
53 m_families.add(m_source_family);
54 m_families.add(m_target_family);
79 IItemFamily* _sourceFamily()
const {
return m_source_family;}
80 IItemFamily* _targetFamily()
const {
return m_target_family;}
84 IItemFamily* m_source_family;
85 IItemFamily* m_target_family;
86 SharedArray<IItemFamily*> m_families;
95class ARCANE_MESH_EXPORT ItemConnectivity
96:
public AbstractConnectivity
103 : AbstractConnectivity(source_family,target_family,aname)
109 : AbstractConnectivity(source_family,target_family,aname)
111 m_item_property.copy(item_property);
118 ARCANE_ASSERT((con_items.
accessor()==
this),(
"Bad connectivity"));
119 return con_items.
setItem(m_item_property[item]);
125 auto apply = [
this,item](ConnectivityItemVector& civ){this->_connectedItems(item,civ);};
129 virtual void updateConnectivity(Int32ConstArrayView from_items, Int32ConstArrayView to_items);
133 const Item operator() (ItemLocalId item)
const
142 if (m_item_property[item] != NULL_ITEM_LOCAL_ID)
143 return _targetFamily()->itemInfoListView()[m_item_property[item]];
147 ItemScalarProperty<Int32>& itemProperty() {
return m_item_property;}
149 void updateItemProperty(
const ItemScalarProperty<Int32>& item_property) {m_item_property.copy(item_property);}
159 ARCANE_ASSERT((index==0),(
"Invalid value for index"))
160 return m_item_property[lid];
166 m_item_property.updateSupport(new_to_old_ids);
185template <
class FromItemType,
class ToItemType>
186class ItemConnectivityT
187:
public ItemConnectivity
191 typedef typename FromItemType::LocalIdType FromLocalIdType;
196 : ItemConnectivity(source_family,target_family,connectivity_name){}
198 ItemConnectivityT(
IItemFamily* source_family,
IItemFamily* target_family,
const ItemPropertyType& item_property,
const String& connectivity_name)
199 : ItemConnectivity(source_family,target_family,item_property, connectivity_name){}
203 const ToItemType operator()(FromLocalIdType item)
const
205 return ItemConnectivity::operator ()(item).itemBase();
212class ARCANE_MESH_EXPORT ItemArrayConnectivity
213:
public AbstractConnectivity
220 : AbstractConnectivity(source_family,target_family,
name)
221 , m_nb_dof_per_item(nb_dof_per_item)
227 : AbstractConnectivity(source_family,target_family,
name)
228 , m_nb_dof_per_item(item_property.dim2Size())
230 m_item_property.copy(item_property);
237 return this->operator()(item,con_items);
242 return this->operator ()(item);
245 virtual void updateConnectivity(Int32ConstArrayView from_items, Int32ConstArrayView to_items);
249 ItemArrayProperty<Int32>& itemProperty() {
return m_item_property; }
251 void updateItemProperty(
const ItemArrayProperty<Int32>& item_property) {m_item_property.copy(item_property);}
253 ItemVectorView operator() (ItemLocalId item,ConnectivityItemVector& con_items)
const
255 ARCANE_ASSERT((con_items.accessor()==
this),(
"Bad connectivity"));
256 return con_items.resizeAndCopy(m_item_property[item]);
259 ConnectivityItemVectorCatalyst operator()(ItemLocalId item)
const
261 auto set = [
this](ConnectivityItemVector& civ)
mutable{civ = ConnectivityItemVector((ItemConnectivity*)
this);};
262 auto apply = [
this,item](ConnectivityItemVector& civ){this->operator ()(item,civ);};
269 return m_nb_dof_per_item;
274 return m_item_property[lid][index];
280 m_item_property.updateSupport(new_to_old_ids);
299template<
class FromItemType,
class ToItemType>
300class ItemArrayConnectivityT
301:
public ItemArrayConnectivity
305 typedef typename FromItemType::LocalIdType FromLocalIdType;
310 : ItemArrayConnectivity(source_family,target_family,nb_dof_per_item,connectivity_name){}
312 ItemArrayConnectivityT(
IItemFamily* source_family,
IItemFamily* target_family,
const ItemPropertyType& item_property,
const String& connectivity_name)
313 : ItemArrayConnectivity(source_family,target_family,item_property,connectivity_name){}
317 return ItemArrayConnectivity::operator()(item,con_items);
322 return ItemArrayConnectivity::operator()(item);
329class ARCANE_MESH_EXPORT ItemMultiArrayConnectivity
330:
public AbstractConnectivity
337 : AbstractConnectivity(source_family,target_family,
name)
339 compute(nb_dof_per_item);
343 : AbstractConnectivity(source_family,target_family,
name)
345 m_item_property.copy(item_property);
352 return this->operator()(item,con_items);
357 return this->operator ()(item);
360 virtual void updateConnectivity(Int32ConstArrayView from_items, Int32ConstArrayView to_items);
364 ItemMultiArrayProperty<Int32>& itemProperty() {
return m_item_property;}
366 void updateItemProperty(ItemMultiArrayProperty<Int32>& item_property) {m_item_property.copy(item_property);}
368 ItemVectorView operator() (ItemLocalId item,ConnectivityItemVector& con_items)
const
370 ARCANE_ASSERT((con_items.accessor()==
this),(
"Bad connectivity"));
371 return con_items.resizeAndCopy(m_item_property[item]);
374 ConnectivityItemVectorCatalyst operator()(ItemLocalId item)
const
376 auto set = [
this](ConnectivityItemVector& civ)
mutable{civ = ConnectivityItemVector((ItemConnectivity*)
this);};
377 auto apply = [
this,item](ConnectivityItemVector& civ){this->operator ()(item,civ);};
384 return m_item_property[lid].size();
389 return m_item_property[lid][index];
395 m_item_property.updateSupport(new_to_old_ids);
413template<
class FromItemType,
class ToItemType>
414class ItemMultiArrayConnectivityT
415:
public ItemMultiArrayConnectivity
419 typedef typename FromItemType::LocalIdType FromLocalIdType;
424 : ItemMultiArrayConnectivity(source_family,target_family,nb_dof_per_item,connectivity_name){}
426 ItemMultiArrayConnectivityT(
IItemFamily* source_family,
IItemFamily* target_family,
const ItemPropertyType& item_property,
const String& connectivity_name)
427 : ItemMultiArrayConnectivity(source_family,target_family,item_property,connectivity_name){}
433 return ItemMultiArrayConnectivity::operator() (item,con_items);
438 return ItemMultiArrayConnectivity::operator() (item);
virtual ConstArrayView< IItemFamily * > families() const
Liste des familles (sourceFamily() + targetFamily())
virtual void _initializeStorage(ConnectivityItemVector *)
Implémente l'initialisation de civ pour cette connectivitée.
virtual IItemFamily * sourceFamily() const
Famille source.
virtual const String & name() const
Nom de la connectivité
virtual IItemFamily * targetFamily() const
Famille cible.
Gère la récupération des informations de connectivité.
ItemVectorView setItem(Int32 id)
Positionne la liste de connectivité avec l'entité de localId() id.
IItemConnectivityAccessor * accessor() const
Connectivité associée.
Vue constante d'un tableau de type T.
Interface pour gérer une connectivité.
Interface d'une famille d'entités.
virtual void notifySourceFamilyLocalIdChanged(Int32ConstArrayView new_to_old_ids)
Notifie la connectivité que la famille source est compactée.
virtual Int32 connectedItemLocalId(ItemLocalId lid, Integer index) const
localId() de la index-ième entitée connectées à l'entité source de numéro local lid
virtual Integer nbConnectedItem(ItemLocalId lid) const
Nombre d'entité connectées à l'entité source de numéro local lid.
virtual ItemVectorView _connectedItems(ItemLocalId item, ConnectivityItemVector &con_items) const
Remplit con_items avec les entités connectées à item.
Connectivite item->item, exactement 1 item connecté par item (0 non admis).
virtual void notifySourceFamilyLocalIdChanged(Int32ConstArrayView new_to_old_ids)
Notifie la connectivité que la famille source est compactée.
virtual Integer nbConnectedItem(ItemLocalId lid) const
Nombre d'entité connectées à l'entité source de numéro local lid.
virtual Int32 connectedItemLocalId(ItemLocalId lid, Integer index) const
localId() de la index-ième entitée connectées à l'entité source de numéro local lid
virtual ItemVectorView _connectedItems(ItemLocalId item, ConnectivityItemVector &con_items) const
Remplit con_items avec les entités connectées à item.
Index d'un Item dans une variable.
virtual Int32 connectedItemLocalId(ItemLocalId lid, Integer index) const
localId() de la index-ième entitée connectées à l'entité source de numéro local lid
virtual ItemVectorView _connectedItems(ItemLocalId item, ConnectivityItemVector &con_items) const
Remplit con_items avec les entités connectées à item.
virtual Integer nbConnectedItem(ItemLocalId lid) const
Nombre d'entité connectées à l'entité source de numéro local lid.
virtual void notifySourceFamilyLocalIdChanged(Int32ConstArrayView new_to_old_ids)
Notifie la connectivité que la famille source est compactée.
Vue sur un tableau typé d'entités.
Vue sur un vecteur d'entités.
Vecteur 1D de données avec sémantique par référence.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
ConstArrayView< Integer > IntegerConstArrayView
Equivalent C d'un tableau à une dimension d'entiers.
std::int32_t Int32
Type entier signé sur 32 bits.
Type temporaire automatiquement casté en ConnectivityItemVector.