12#ifndef ARCANE_CORE_MATERIALS_COMPONENTITEMINTERNAL_H
13#define ARCANE_CORE_MATERIALS_COMPONENTITEMINTERNAL_H
17#include "arcane/core/ItemInternal.h"
18#include "arcane/core/Item.h"
19#include "arcane/core/materials/MatVarIndex.h"
27class MeshComponentData;
30class ComponentItemInternalData;
34 class ConstituentItemBase;
54 ARCCORE_HOST_DEVICE
constexpr Int32 localId()
const {
return m_id; }
58 return a.m_id ==
b.m_id;
63 return a.m_id !=
b.m_id;
65 ARCANE_CORE_EXPORT
friend std::ostream&
68 ARCCORE_HOST_DEVICE
constexpr bool isNull()
const {
return m_id == (-1); }
96 Int32 m_storage_size = 0;
100 Int16* m_component_id_data =
nullptr;
102 Int16* m_nb_sub_constituent_item_data =
nullptr;
104 Int32* m_global_item_local_id_data =
nullptr;
136 static const int MAT_INDEX_OFFSET = 10;
144 static void _setNullInstance();
151 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
152 return m_first_sub_constituent_item_id_data[
id.localId()];
154 inline ARCCORE_HOST_DEVICE
void
157 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
158 m_first_sub_constituent_item_id_data[
id.localId()] =
first_id;
160 inline ARCCORE_HOST_DEVICE
Int16 _nbSubConstituent(ConstituentItemIndex
id)
const
162 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
163 return m_nb_sub_constituent_item_data[
id.localId()];
165 ARCCORE_HOST_DEVICE
inline void _setNbSubConstituent(ConstituentItemIndex
id,
Int16 n)
167 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
168 m_nb_sub_constituent_item_data[
id.localId()] = n;
170 inline ARCCORE_HOST_DEVICE
Int16 _componentId(ConstituentItemIndex
id)
const
172 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
173 return m_component_id_data[
id.localId()];
175 ARCCORE_HOST_DEVICE
inline void _setComponentId(ConstituentItemIndex
id,
Int16 component_id)
177 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
178 m_component_id_data[
id.localId()] = component_id;
180 IMeshComponent* _component(ConstituentItemIndex
id)
const
182 return m_components[_componentId(
id)];
184 impl::ItemBase _globalItemBase(ConstituentItemIndex
id)
const
186 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
187 return impl::ItemBase(m_global_item_local_id_data[
id.localId()], m_item_shared_info);
189 ARCCORE_HOST_DEVICE
Int32 _globalItemId(ConstituentItemIndex
id)
const
191 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
192 return m_global_item_local_id_data[
id.localId()];
194 ARCCORE_HOST_DEVICE
void _setGlobalItem(ConstituentItemIndex
id, ItemLocalId global_item_lid)
196 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
197 m_global_item_local_id_data[
id.localId()] = global_item_lid.localId();
199 ARCCORE_HOST_DEVICE
inline matimpl::ConstituentItemBase _superItemBase(ConstituentItemIndex
id)
const;
201 ARCCORE_HOST_DEVICE
void _setSuperItem(ConstituentItemIndex
id, ConstituentItemIndex super_id)
203 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
204 m_super_component_item_local_id_data[
id.localId()] = super_id;
206 inline ARCCORE_HOST_DEVICE matimpl::ConstituentItemBase _subItemBase(ConstituentItemIndex
id,
Int32 sub_index)
const;
208 ARCCORE_HOST_DEVICE MatVarIndex _varIndex(ConstituentItemIndex
id)
210 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
211 return m_var_index_data[
id.localId()];
213 ARCCORE_HOST_DEVICE
void _setVarIndex(ConstituentItemIndex
id, MatVarIndex mv_index)
215 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
216 m_var_index_data[
id.localId()] = mv_index;
224 return (Int64)m_var_index_data[
id.localId()].arrayIndex() + ((Int64)
item_base.uniqueId() << MAT_INDEX_OFFSET);
229 Int32 local_id =
id.localId();
230 ARCCORE_CHECK_RANGE(local_id, -1, m_storage_size);
232 m_var_index_data[local_id].reset();
233 m_first_sub_constituent_item_id_data[local_id] = {};
234 m_nb_sub_constituent_item_data[local_id] = 0;
235 m_component_id_data[local_id] = -1;
236 m_global_item_local_id_data[local_id] = NULL_ITEM_LOCAL_ID;
237 m_super_component_item_local_id_data[local_id] = {};
245 ItemSharedInfo* m_item_shared_info = ItemSharedInfo::nullInstance();
246 Int16 m_level = (-1);
247 ConstArrayView<IMeshComponent*> m_components;
248 ComponentItemSharedInfo* m_super_component_item_shared_info = null_shared_info_pointer;
249 ComponentItemSharedInfo* m_sub_component_item_shared_info = null_shared_info_pointer;
257namespace Arcane::Materials::matimpl
288 : m_constituent_item_index(
id)
298 return m_shared_info->_varIndex(m_constituent_item_index);
303 return m_constituent_item_index;
309 return m_shared_info->_componentId(m_constituent_item_index);
313 inline ARCCORE_HOST_DEVICE
constexpr bool null()
const
315 return m_constituent_item_index.isNull();
326 return m_shared_info->_component(m_constituent_item_index);
332 return m_shared_info->_nbSubConstituent(m_constituent_item_index);
338 return m_shared_info->_globalItemBase(m_constituent_item_index);
341 inline ARCCORE_HOST_DEVICE
constexpr Int32 level()
const
343 return m_shared_info->m_level;
349 return m_shared_info->_componentUniqueId(m_constituent_item_index);
354 ARCCORE_HOST_DEVICE
constexpr friend bool
357 return ((a.m_constituent_item_index ==
b.m_constituent_item_index) && (a.m_shared_info ==
b.m_shared_info));
359 ARCCORE_HOST_DEVICE
constexpr friend bool
360 operator!=(
const ConstituentItemBase& a,
const ConstituentItemBase&
b)
370 m_shared_info->_setVarIndex(m_constituent_item_index, index);
378 m_shared_info->_setSuperItem(m_constituent_item_index,
cii);
379 m_shared_info->_setGlobalItem(m_constituent_item_index,
ii);
382 ARCCORE_HOST_DEVICE
inline void _setGlobalItem(
ItemLocalId ii)
384 m_shared_info->_setGlobalItem(m_constituent_item_index,
ii);
390 return m_shared_info->_firstSubConstituentLocalId(m_constituent_item_index);
398 m_shared_info->_setNbSubConstituent(m_constituent_item_index,
nb_sub_item);
404 m_shared_info->_setFirstSubConstituentLocalId(m_constituent_item_index,
first_sub_item);
407 ARCCORE_HOST_DEVICE
void _setComponent(Int16
component_id)
409 m_shared_info->_setComponentId(m_constituent_item_index,
component_id);
432inline constexpr matimpl::ConstituentItemBase ComponentItemSharedInfo::
433_item(ConstituentItemIndex
id)
435 return matimpl::ConstituentItemBase(
this,
id);
438ARCCORE_HOST_DEVICE
inline matimpl::ConstituentItemBase ComponentItemSharedInfo::
439_superItemBase(ConstituentItemIndex
id)
const
441 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
443 return m_super_component_item_shared_info->_item(super_local_id);
446inline ARCCORE_HOST_DEVICE matimpl::ConstituentItemBase ComponentItemSharedInfo::
447_subItemBase(ConstituentItemIndex
id,
Int32 sub_index)
const
449 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
451 return m_sub_component_item_shared_info->_item(lid);
460 return m_shared_info->_superItemBase(m_constituent_item_index);
464_subItemBase(Int32 i)
const
466 return m_shared_info->_subItemBase(m_constituent_item_index, i);
506 return m_component_shared_info->_item(m_ids[index]);
510 return m_component_shared_info->_varIndex(m_ids[index]);
514 return { m_component_shared_info, m_ids.subView(begin, size) };
519 return (m_ids.data() ==
rhs.m_ids.data());
524 bool t1 = a.m_component_shared_info ==
b.m_component_shared_info;
525 bool t2 = a.m_ids ==
b.m_ids;
539 ComponentItemSharedInfo* m_component_shared_info =
nullptr;
540 ConstArrayView<ConstituentItemIndex> m_ids;
544 void _checkCoherency()
const;
Classe de base pour les entités du maillage.
Index d'un Item dans une variable.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Vue sur une liste de mailles avec infos sur les milieux.
Maille arcane avec info matériaux et milieux.
Informations sur les valeurs des milieux.
Enumérateur sur les constituants d'une maille.
Conversion de 'Cell' en 'AllEnvCell'.
Enumérateur sur une partie des mailles d'un composant (matériau ou milieu)
Représente un composant d'une maille multi-matériau.
Gestion des listes de 'ComponentItemInternal'.
Conteneur pour les données des constituants.
ConstituentItemIndex * m_first_sub_constituent_item_id_data
Id de la première entité sous-constituant.
ConstituentItemIndex * m_super_component_item_local_id_data
Id de l'entité sous-constituant parente.
Informations partagées sur les 'ComponentItem'.
static ComponentItemSharedInfo null_shared_info
Pour l'entité nulle.
Int64 _componentUniqueId(ConstituentItemIndex id) const
Numéro unique de l'entité component.
Vue sur un vecteur sur les entités d'un composant.
Enumérateur sur une sous-partie (pure ou partielle) d'un sous-ensemble des mailles d'un composant (ma...
Vue sur une partie pure ou partielles des entités d'un composant.
Index d'une entité constituant dans la liste des entités constituants.
Vue sur une instance de ConstituentItemLocalIdList.
bool _isSamePointerData(const ConstituentItemLocalIdListView &rhs) const
Pour les tests, vérifie que les vues pointent vers les mêmes données.
Liste d'indices locaux pour les 'ComponentItemInternal'.
Implémentation de ComponentItemVector.
Maille arcane d'un milieu.
Interface d'un composant (matériau ou milieu) d'un maillage.
Représente un matériau d'une maille multi-matériau.
Représente un index sur les variables matériaux et milieux.
Données d'un constituant (matériau ou milieu) d'un maillage.
Données d'une partie (pure ou partielle) d'un constituant.
Implémentation d'un gestion des matériaux.
Informations générique sur une entité d'un constituant.
ARCCORE_HOST_DEVICE Int32 componentId() const
Identifiant du composant.
IMeshComponent * component() const
Composant associé.
ARCCORE_HOST_DEVICE constexpr bool null() const
Indique s'il s'agit de la maille nulle.
ARCCORE_HOST_DEVICE ConstituentItemIndex _firstSubItemLocalId() const
Première entité sous-composant.
ARCCORE_HOST_DEVICE void _setFirstSubItem(ConstituentItemIndex first_sub_item)
Positionne le premier sous-composant.
ARCCORE_HOST_DEVICE Int32 nbSubItem() const
Nombre de sous-composants.
ARCCORE_HOST_DEVICE void _setVariableIndex(MatVarIndex index)
Positionne l'indexeur dans les variables matériaux.
ARCCORE_HOST_DEVICE matimpl::ConstituentItemBase _superItemBase() const
Composant supérieur (0 si aucun)
ARCCORE_HOST_DEVICE MatVarIndex variableIndex() const
Indexeur dans les variables matériaux.
ARCCORE_HOST_DEVICE void _setNbSubItem(Int16 nb_sub_item)
Positionne le nombre de sous-composants.
Int64 componentUniqueId() const
Numéro unique de l'entité component.
impl::ItemBase globalItemBase() const
Entité globale correspondante.
Active toujours les traces dans les parties Arcane concernant les matériaux.