14#include "arcane/mesh/DoFFamily.h"
16#include "arcane/core/IMesh.h"
17#include "arcane/core/ItemTypeMng.h"
18#include "arcane/core/ItemTypeInfo.h"
19#include "arcane/core/IExtraGhostItemsBuilder.h"
21#include "arcane/mesh/ExtraGhostItemsManager.h"
30getMaxItemUid(IItemFamily* family)
36 item_family->itemsMap().eachItem([&](Item item) {
37 if (max_uid < item.uniqueId().asInt64())
38 max_uid = item.uniqueId().asInt64();
50, m_shared_info(nullptr)
63 m_shared_info = _findSharedInfo(dof_type_info);
73 ARCANE_ASSERT((dof_uids.
size() == dof_lids.
size()),(
"in addDofs(uids,lids) given uids and lids array must have same size"))
75 return view(dof_lids);
85 ARCANE_ASSERT((dof_uids.
size() == dof_lids.
size() && (dof_uids.
size() == owners.
size())),(
"in addGhostDofs given uids, lids and owners array must have same size"))
87 return view(dof_lids);
100 for(
Integer i=0; i<nb_item; ++i ){
101 Int64 uid = unique_ids[i];
106 m_need_prepare_dump =
true;
118 preAllocate(nb_item);
119 for(
Integer i=0; i<nb_item; ++i ){
120 Int64 uid = unique_ids[i];
121 Int32 owner = owners[i];
126 m_need_prepare_dump =
true;
135 ARCANE_UNUSED(keep_ghost);
136 _removeMany(local_ids);
138 m_need_prepare_dump =
true;
159 debug() <<
"Creating the list of ghosts dofs";
171 info() <<
"DoFFamily: added=" << nb_added
174 <<
" map_nb_bucket=" << itemsMap().
nbBucket()
175 <<
" map_size=" << nb_in_map;
187 if (nb_hash<wanted_size)
188 itemsMap().
resize(wanted_size,
true);
194ItemInternal* DoFFamily::
195_allocDoF(
const Int64 uid)
199 ItemInternal* item_internal = ItemFamily::_findOrAllocOne(uid,need_alloc);
201 item_internal->setUniqueId(uid);
203 _allocateInfos(item_internal,uid,m_shared_info);
206 item_internal->setOwner(m_sub_domain_id,m_sub_domain_id);
207 return item_internal;
213ItemInternal* DoFFamily::
214_allocDoFGhost(
const Int64 uid,
const Int32 owner)
218 ItemInternal* item_internal = ItemFamily::_findOrAllocOne(uid,need_alloc);
221 item_internal->setUniqueId(uid);
223 _allocateInfos(item_internal,uid,m_shared_info);
226 item_internal->setOwner(owner,m_sub_domain_id);
227 return item_internal;
230ItemInternal* DoFFamily::
231_findOrAllocDoF(
const Int64 uid,
bool& is_alloc)
233 ItemInternal* item_internal = ItemFamily::_findOrAllocOne(uid,is_alloc);
235 item_internal->setUniqueId(uid);
238 _allocateInfos(item_internal,uid,m_shared_info);
240 item_internal->setOwner(m_sub_domain_id,m_sub_domain_id);
242 return item_internal;
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
Integer size() const
Nombre d'éléments du vecteur.
constexpr Integer size() const noexcept
Retourne la taille du tableau.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
virtual ItemTypeMng * itemTypeMng() const =0
Gestionnaire de types d'entités associé
virtual Int32 subDomainId() const =0
Numéro du sous-domaine associé à ce gestionnaire.
Int32 localId() const
Numéro local (au sous-domaine) de l'entité
Structure interne d'une entité de maillage.
Infos sur un type d'entité du maillage.
Gestionnaire des types d'entités de maillage.
ItemTypeInfo * typeFromId(Integer id) const
Type correspondant au numéro id.
Chaîne de caractères unicode.
TraceMessageDbg debug(Trace::eDebugLevel=Trace::Medium) const
Flot pour un message de debug.
TraceMessage info() const
Flot pour un message d'information.
DoFVectorView addGhostDoFs(Int64ConstArrayView dof_uids, Int32ArrayView dof_lids, Int32ConstArrayView owners) override
L'ajout de fantomes doit etre suivi d'un appel de computeSynchronizeInfos.
void computeSynchronizeInfos() override
Operation collective.
DoFFamily(IMesh *mesh, const String &name)
La famille ne peut pas etre cree directement, il faut utiliser le DoFManager.
DoFVectorView addDoFs(Int64ConstArrayView dof_uids, Int32ArrayView dof_lids) override
En entree les uids des dofs et on recupere leurs lids.
void internalRemoveItems(Int32ConstArrayView local_ids, bool keep_ghost=false) override
Supprime les entités donnés par local_ids.
void addGhostItems(Int64ConstArrayView unique_ids, Int32ArrayView items, Int32ConstArrayView owners) override
Alloue des entités fantômes.
Integer nbItem() const override
Nombre d'entités.
void _addItems(Int64ConstArrayView unique_ids, Int32ArrayView items)
Construction de l'item Family. C'est le DoFManager qui en a la responsabilite.
String name() const override
Nom de la famille.
UniqueArray< ItemInternal * > m_internals
ItemInternal des entités.
Int32UniqueArray m_free_internals
Liste des ItemInternal de m_item_internals_buffer libres.
IMesh * mesh() const override
Maillage associé
ItemVectorView view() override
Vue sur toutes les entités de la famille.
void computeSynchronizeInfos() override
Construit les structures nécessaires à la synchronisation.
ISubDomain * subDomain() const override
Sous-domaine associé
Int32 nbBucket() const
Nombre de buckets.
void resize(Int32 new_size, bool use_prime=false)
Redimensionne la table de hachage.
Int32 count() const
Nombre d'éléments de la table.
ItemVectorViewT< DoF > DoFVectorView
Vue sur un vecteur de degre de liberte.
@ ReduceMax
Maximum des valeurs.
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
@ IK_DoF
Entité de maillage de genre degre de liberte.
std::int32_t Int32
Type entier signé sur 32 bits.