Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IItemFamily.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* IItemFamily.h (C) 2000-2024 */
9/* */
10/* Interface d'une famille d'entités. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_IITEMFAMILY_H
13#define ARCANE_IITEMFAMILY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ArcaneTypes.h"
18#include "arcane/ItemTypes.h"
19#include "arcane/VariableTypedef.h"
20#include "arcane/Parallel.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31class IParallelMng;
32class IDataOperation;
33class ItemUniqueId;
34class IItemInternalSortFunction;
35class IVariableSynchronizer;
36class IParticleFamily;
37class GroupIndexTable;
38class IItemConnectivityInfo;
39class IItemConnectivityMng;
40class IItemConnectivity;
41class IExtraGhostItemsBuilder;
42class IIncrementalItemConnectivity;
43class IItemFamilyPolicyMng;
44class IItemFamilyTopologyModifier;
45class ItemInternalConnectivityList;
46class Properties;
47
48namespace mesh
49{
50 class ItemDataList;
51 class DynamicMesh;
52 class ItemFamily;
53}
54
55/*---------------------------------------------------------------------------*/
56/*---------------------------------------------------------------------------*/
57/*!
58 * \ingroup Mesh
59 * \brief Interface d'une famille d'entités.
60 *
61 * Une famille d'entité gère toutes les entités de même genre (Item::kind())
62 * et est attachée à un maillage (IMesh).
63 *
64 * Pour tout maillage, il existe une et une seule famille de
65 * noeuds (Node), arêtes (Edge), faces (Face) et mailles (Cell).
66 * Ces entités sont appelées des entités de \b base du maillage et les
67 * familles associées les familles de base du maillage.
68 *
69 * Suivant l'implémentation, il peut aussi y avoir des familles
70 * de particules (Particle), de noeuds duaux (DualNode) ou de liens (Link).
71 * Suivant la connectivité demandée, une famille peut ne pas avoir d'éléments.
72 * Par exemple, par défaut en 3D, les arêtes (Edge) ne sont pas créées.
73 *
74 * Chaque entité de la famille possède un identifiant local dans la
75 * famille, donnée par Item::localId(). Lorsqu'une famille évolue, cet identifiant
76 * peut être modifié. Les Item::localId() des entités d'une famille ne sont
77 * pas nécessairement contigus. La méthode maxLocalId() permet de connaître
78 * le maximum de ces valeurs. Le compactage permet
79 * de garantir que les localId() sont renumérotés de 0 à (nbItem()-1). Pour les entités
80 * de base du maillage, le compactage est automatique si le maillage
81 * à la propriété \a "sort" à vrai. Pour les autres, il faut appeler
82 * compactItems().
83 *
84 * Par défaut, une famille possède une table de conversion des
85 * uniqueId() vers les localId(). Cette table doit exister pour
86 * permettre les opérations suivantes:
87 * - le uniqueId() est garanti unique sur le sous-domaine et doit
88 * l'être par construction sur tous les sous-domaines.
89 * - faire appel aux méthodes itemsUniqueIdToLocalId().
90 * - les entités de la famille peuvent être présentes dans plusieurs
91 * sous-domaines.
92 * - faire des synchronisations.
93 * - avoir des variables partielles sur cette famille
94 *
95 * Il est possible d'activer ou désactiver cette table de conversion
96 * via la méthode setHasUniqueIdMap() uniquement si aucune entité
97 * n'a été créée. Cette opération n'est pas possible sur
98 * les familles de noeuds, arêtes, faces et mailles.
99
100 * Lorsqu'on modifie une famille par ajout ou suppression d'entités, les
101 * variables et les groupes qui reposent sur cette famille ne sont plus utilisables
102 * tant qu'on a pas fait d'appel à endUpdate(). Il est possible pour des raisons
103 * d'optimisation de faire des mise à jour de certaines variables ou groupes via
104 * partialEndUpdateVariable() ou partialEndUpdateGroup(). ATTENTION, un appel
105 * à l'une de ces 3 méthodes de mise à jour invalide les instances des entités (Item).
106 * Pour conserver une référence sur une entité, il faut soit utiliser un groupe (ItemGroup),
107 * soit conserver son numéro unique et utiliser itemsUniqueIdToLocalId().
108 *
109 */
110class ARCANE_CORE_EXPORT IItemFamily
111{
112 friend class mesh::DynamicMesh;
113 friend class mesh::ItemFamily;
114
115 public:
116
117 virtual ~IItemFamily() {} //<! Libère les ressources
118
119 public:
120
121 virtual void build() =0;
122
123 public:
124
125 //! Nom de la famille
126 virtual String name() const =0;
127
128 //! Nom complet de la famille (avec celui du maillage)
129 virtual String fullName() const =0;
130
131 //! Genre des entités
132 virtual eItemKind itemKind() const =0;
133
134 //! Nombre d'entités
135 virtual Integer nbItem() const =0;
136
137 /*!
138 * Taille nécessaire pour dimensionner les variables sur ces entités.
139 *
140 * Il s'agit du maximum des Item::localId() des entités de cette famille plus 1.
141 */
142 virtual Int32 maxLocalId() const =0;
143
144 public:
145
146 // TODO: a supprimer. Utiliser itemInfoListView à la place
147 //! Tableau interne des entités
149
150 public:
151
152 //! Vue sur la liste d'informations sur les entités
154
155 /*!
156 * \brief IItemFamily parent
157 *
158 * Issue des imbrications de sous-maillages
159 * \return nullptr si n'a pas de famille parente
160 */
161 virtual IItemFamily* parentFamily() const = 0;
162
163 /*!
164 * \internal
165 * \brief Positionne l'IItemFamily parent.
166 *
167 * A utiliser avant build() pour les sous-maillages construit dynamiquement
168 * (i.e. pas depuis un reprise).
169 *
170 * TODO: A mettre dans l'API interne
171 */
172 virtual void setParentFamily(IItemFamily* parent) = 0;
173
174 //! Donne la profondeur d'imbrication du maillage courant
175 virtual Integer parentFamilyDepth() const = 0;
176
177 /*!
178 * \internal
179 * \brief Ajoute d'une famile en dépendance
180 *
181 * Opération en symétrie de setParentFamily
182 *
183 * TODO: A mettre dans l'API interne
184 */
185 virtual void addChildFamily(IItemFamily* family) = 0;
186
187 //! Familles enfantes de cette famille
189
190 /*!
191 * \brief Variable contenant le numéro du nouveau sous-domaine
192 * propriétaire de l'entité.
193 *
194 * Cette variable n'est utilisée que pour un repartitionnement du maillage.
195 */
197
198 //! Vérification de la validité des structures internes (interne)
199 virtual void checkValid() =0;
200
201 /*!
202 * \brief Vérification de la validité des structures internes concernant
203 * la connectivité.
204 */
205 virtual void checkValidConnectivity() =0;
206
207 /*!
208 * \brief Vérifie que les identifiants \a unique_ids sont bien uniques
209 * pour tous les sous-domaines.
210 *
211 * Cette méthode NE vérifie PAS que les \a unique_ids sont identiques
212 * à ceux des entités déjà créées. Elle vérifie uniquement l'ensemble des
213 * \a unique_ids passés en argument par tous les sous-domaines.
214 *
215 * Cette opération est collective et doit être appelée par tous les sous-domaines.
216 */
217 virtual void checkUniqueIds(Int64ConstArrayView unique_ids) =0;
218
219 public:
220
221 /*!
222 * \brief Vue sur les entités.
223 *
224 * Retourne une vue sur les entités de numéro locaux \a local_ids.
225 * \warning Cette vue n'est valide que tant que la famille n'évolue pas.
226 * En particulier, l'ajout, la suppression ou le compactage invalide la vue.
227 * Si vous souhaitez conserver une liste même après modification, il faut
228 * utiliser les groupes (ItemGroup).
229 */
231
232 /*!
233 * \brief Vue sur toutes les entités de la famille.
234 */
235 virtual ItemVectorView view() =0;
236
237 /*!
238 * \brief Supprime des entités.
239 *
240 * Utilise le graphe (Familles, Connectivités) ItemFamilyNetwork
241 *
242 * TODO: A mettre dans l'API interne
243 */
244 virtual void removeItems2(mesh::ItemDataList& item_data_list) =0;
245
246 /*!
247 * \internal
248 * \brief Supprime des entités et met a jour les connectivites.
249 *
250 * Ne supprime pas d'eventuels sous items orphelins.
251 *
252 * Contexte d'utilisation avec un graphe des familles. Les sous items
253 * orphelins ont du eux aussi etre marque NeedRemove.
254 * Il n'y a donc pas besoin de les gerer dans les familles parentes.
255 *
256 * TODO: A mettre dans l'API interne
257 */
258 virtual void removeNeedRemoveMarkedItems() =0;
259
260 /*!
261 * \brief Entité de numéro unique \a unique_id.
262 *
263 * Si aucune entité avec cet \a unique_id n'est trouvé, retourne \a nullptr.
264 *
265 * \pre hasUniqueIdMap()
266 */
267 ARCANE_DEPRECATED_REASON("Use MeshUtils::findOneItem() instead")
268 virtual ItemInternal* findOneItem(Int64 unique_id) =0;
269
270 /*! \brief Notifie la fin de modification de la liste des entités.
271 *
272 * Cette méthode doit être appelée après modification de la liste des
273 * entités (après ajout ou suppression). Elle met à jour les groupes
274 * et redimensionne les variables sur cette famille.
275 */
276 virtual void endUpdate() =0;
277
278 /*!
279 * \brief Mise à jour partielle.
280 *
281 * Met à jour les structures internes après une modification de la famille.
282 * Il s'agit d'une version optimisée de endUpdate() lorsqu'on souhaite
283 * faire de multiples modifications de maillage. Cette méthode NE met PAS
284 * à jour les groupes ni les variables associées à cette famille. Seul le
285 * groupe allItems() est disponible. Il est possible de mettre à jour
286 * un groupe via partialEndUpdateGroup() et une variable via partialEndUpdateVariable().
287 *
288 * Cette méthode est réservée aux utilisateurs expérimentés. Pour les autres,
289 * il vaut mieux utiliser endUpdate().
290 */
291 virtual void partialEndUpdate() =0;
292
293 /*!
294 * \brief Met à jour un groupe.
295 *
296 * Met à jour le groupe \a group après une modification de la famille.
297 * La mise à jour consiste à supprimer du groupe les entités de la famille
298 * éventuellement détruites lors de la modification.
299 *
300 * \sa partialEndUpdate().
301 */
302 virtual void partialEndUpdateGroup(const ItemGroup& group) =0;
303
304 /*!
305 * \brief Met à jour une variable.
306 *
307 * Met à jour la variable \a variable après une modification de la famille.
308 * La mise à jour consiste à redimensionner la variable après un éventuel
309 * ajout d'entités.
310 *
311 * \sa partialEndUpdate().
312 */
313 virtual void partialEndUpdateVariable(IVariable* variable) =0;
314
315 //! Notifie que les entités propres au sous-domaine de la famille ont été modifiées
316 virtual void notifyItemsOwnerChanged() =0;
317
318 //! Notifie que les numéros uniques des entités ont été modifiées
319 virtual void notifyItemsUniqueIdChanged() =0;
320
321 public:
322
323 //! Informations sur la connectivité locale au sous-domaine pour à cette famille
324 virtual IItemConnectivityInfo* localConnectivityInfos() const =0;
325
326 //! Informations sur la connectivité globales à tous les sous-domaines.
327 virtual IItemConnectivityInfo* globalConnectivityInfos() const =0;
328
329 public:
330
331 /*!
332 * \brief Indique si la famille possède une table de conversion
333 * uniqueId vers localId.
334 *
335 * La table de conversion permet d'utiliser les méthodes
336 * itemsUniqueIdToLocalId() ou findOneItem().
337 *
338 * Cette méthode ne peut être appelée que lorsqu'il n'y a aucune
339 * entité de la famille.
340 *
341 * Les familles de noeuds, arêtes, faces et mailles du maillage
342 * ont obligatoirement une table de conversion.
343 */
344 virtual void setHasUniqueIdMap(bool v) =0;
345
346 //! Indique si la famille possède une table de conversion uniqueId vers localId.
347 virtual bool hasUniqueIdMap() const =0;
348
349 public:
350
351 /*!
352 * \brief Converti un tableau de numéros uniques en numéros locaux.
353 *
354 * Cette opération prend en entrée le tableau \a unique_ids contenant les
355 * numéros uniques des entités du type \a item_kind et retourne dans
356 * \a local_ids le numéro local à ce sous-domaine correspondant.
357 *
358 * La complexité de cette opération dépend de l'implémentation.
359 * L'implémentation par défaut utilise une table de hachage. La complexité
360 * moyenne est donc constante.
361 *
362 * Si \a do_fatal est vrai, une erreur fatale est générée si une entité n'est
363 * pas n'est trouvée, sinon l'élément non trouvé a pour valeur NULL_ITEM_ID.
364 *
365 * \pre hasUniqueIdMap()
366 */
367 virtual void itemsUniqueIdToLocalId(Int32ArrayView local_ids,
368 Int64ConstArrayView unique_ids,
369 bool do_fatal=true) const =0;
370
371 /*!
372 * \brief Converti un tableau de numéros uniques en numéros locaux.
373 *
374 * Cette opération prend en entrée le tableau \a unique_ids contenant les
375 * numéros uniques des entités du type \a item_kind et retourne dans
376 * \a local_ids le numéro local à ce sous-domaine correspondant.
377 *
378 * La complexité de cette opération dépend de l'implémentation.
379 * L'implémentation par défaut utilise une table de hachage. La complexité
380 * moyenne est donc constante.
381 *
382 * Si \a do_fatal est vrai, une erreur fatale est générée si une entité n'est
383 * pas n'est trouvée, sinon l'élément non trouvé a pour valeur NULL_ITEM_ID.
384 */
385 virtual void itemsUniqueIdToLocalId(Int32ArrayView local_ids,
386 ConstArrayView<ItemUniqueId> unique_ids,
387 bool do_fatal=true) const =0;
388
389 public:
390
391 /*!
392 * \brief Positionne la fonction de tri des entités.
393 *
394 * La méthode par défaut est de trier les entités par uniqueId() croissant.
395 * Si \a sort_function est nul, c'est la méthode par défaut qui sera utilisée.
396 * Sinon, \a sort_function remplace la fonction précédente qui est détruite
397 * (via delete).
398 * Le tri est effectué via l'appel à compactItems().
399 * \sa itemSortFunction()
400 */
401 virtual void setItemSortFunction(IItemInternalSortFunction* sort_function) =0;
402
403 /*!
404 * \brief Fonction de tri des entités.
405 *
406 * L'instance de cette classe reste propriétaire de l'objet retournée
407 * qui ne doit pas être détruit ni modifié.
408 * \sa setItemSortFunction()
409 */
410 virtual IItemInternalSortFunction* itemSortFunction() const =0;
411
412 public:
413
414 //! Sous-domaine associé
415 ARCCORE_DEPRECATED_2020("Do not use this method. Try to get 'ISubDomain' from another way")
416 virtual ISubDomain* subDomain() const =0;
417
418 //! Gestionnaire de trace associé
419 virtual ITraceMng* traceMng() const =0;
420
421 //! Maillage associé
422 virtual IMesh* mesh() const =0;
423
424 //! Gestionnaire de parallélisme associé
425 virtual IParallelMng* parallelMng() const =0;
426
427 public:
428
429 //! Groupe de toutes les entités
430 virtual ItemGroup allItems() const =0;
431
432 //! Liste des groupes de cette famille
433 virtual ItemGroupCollection groups() const =0;
434
435 public:
436
437 //! @name opérations sur des groupes
438 //@{
439 /*!
440 \brief Recherche un groupe.
441 \param name nom du groupe à rechercher
442 \return le groupe de nom \a name ou le groupe nul s'il n'y en a pas.
443 */
444 virtual ItemGroup findGroup(const String& name) const =0;
445
446 /*!
447 * \brief Recherche un groupe
448 *
449 * \param name nom du groupe à rechercher
450 *
451 * \return le groupe trouvé ou le groupe nul si aucun groupe de nom
452 * \a name et de type \a type n'existe et si \a create_if_needed vaut \e false.
453 * Si \a create_if_needed vaux \e vrai, un groupe vide de nom \a name est créé et retourné.
454 */
455 virtual ItemGroup findGroup(const String& name,bool create_if_needed) =0;
456
457
458 /*!
459 * \brief Créé un groupe d'entités de nom \a name contenant les entités \a local_ids.
460 *
461 * \param name nom du groupe
462 * \param local_ids liste des localId() des entités composant le groupe.
463 * \param do_override si \e true et q'un groupe de même nom existe déjà,
464 * ses éléments sont remplacés par ceux donnés dans \a local_ids. Si \e false,
465 * alors une exception est levée.
466 * \return le groupe créé
467 */
468 virtual ItemGroup createGroup(const String& name,Int32ConstArrayView local_ids,bool do_override=false) =0;
469
470 /*!
471 * \brief Créé un groupe d'entités de nom \a name
472 *
473 * Le groupe ne doit pas déjà exister sinon une exception est levée.
474 *
475 * \param name nom du groupe
476 * \return le groupe créé
477 */
478 virtual ItemGroup createGroup(const String& name) =0;
479
480 /*!
481 * \brief Supprime tous les groupes de cette famille.
482 */
483 virtual void destroyGroups() =0;
484
485 /*!
486 * \internal
487 * For Internal Use Only
488 */
489 virtual ItemGroup createGroup(const String& name,const ItemGroup& parent,bool do_override=false) =0;
490
491 //@}
492
493 /*!
494 * \brief Recherche la variable de nom \a name associée à cette famille.
495 *
496 * Si aucune variable de nom \a name n'existe, si \a throw_exception vaut
497 * \a false, retourne 0, sinon lève une exception.
498 */
499 virtual IVariable* findVariable(const String& name,bool throw_exception=false) =0;
500
501 /*!
502 * \brief Ajoute à la collection \a collection la liste des variables
503 * utilisés de cette famille.
504 */
505 virtual void usedVariables(VariableCollection collection) =0;
506
507 public:
508
509 //! Prépare les données pour une protection
510 virtual void prepareForDump() =0;
511
512 //! Relit les données à partir d'une protection
513 virtual void readFromDump() =0;
514
515 /**
516 * Copie les valeurs des entités numéros @a source dans les entités
517 * numéros @a destination
518 *
519 * @param source liste des @b localId source
520 * @param destination liste des @b localId destination
521 */
522 virtual void copyItemsValues(Int32ConstArrayView source, Int32ConstArrayView destination) =0;
523
524 /**
525 * Copie les moyennes des valeurs des entités numéros
526 * @a first_source et @a second_source dans les entités numéros
527 * @a destination
528 *
529 * @param first_source liste des @b localId de la 1ère source
530 * @param second_source liste des @b localId de la 2ème source
531 * @param destination liste des @b localId destination
532 */
533 virtual void copyItemsMeanValues(Int32ConstArrayView first_source,
534 Int32ConstArrayView second_source,
535 Int32ConstArrayView destination) = 0;
536
537 /*!
538 * \brief Supprime toutes les entités de la famille.
539 * \warning attention à ne pas détruire des entités qui sont utilisées dans
540 * par une autre famille. En général, il est plus prudent d'utiliser IMesh::clearItems()
541 * si on souhaite supprimer tous les éléments du maillage.
542 */
543 virtual void clearItems() =0;
544
545 //! Compacte les entités.
546 virtual void compactItems(bool do_sort) =0;
547
548 public:
549
550 /*!
551 * \brief Construit les structures nécessaires à la synchronisation.
552 *
553 Cette opération doit être effectuée à chaque fois que les entités
554 du maillage changent de propriétaire (par exemple lors d'un équilibrage de
555 charge).
556
557 Cette opération est collective.
558 */
559 virtual void computeSynchronizeInfos() =0;
560
561 //! Liste des sous-domaines communiquants pour les entités.
562 virtual void getCommunicatingSubDomains(Int32Array& sub_domains) const =0;
563
564 //! @name opérations de synchronisation d'une variable
565 //@{
566
567 //! Synchroniseur sur toutes les entités de la famille
568 virtual IVariableSynchronizer* allItemsSynchronizer() =0;
569
570 /*!
571 * \brief Synchronise les variables \a variables.
572 *
573 * Les variables \a variables doivent être toutes être issues
574 * de cette famille et ne pas être partielles.
575 */
576 virtual void synchronize(VariableCollection variables) =0;
577
578 // TODO: à rendre virtuelle pure (décembre 2024)
579 /*!
580 * \brief Synchronise les variables \a variables sur une liste d'entités.
581 *
582 * Les variables \a variables doivent être toutes être issues
583 * de cette famille et ne pas être partielles.
584 *
585 * Seules les entités listées dans \a local_ids seront synchronisées. Attention :
586 * une entité présente dans cette liste sur un sous-domaine doit être présente
587 * dans cette liste pour tout autre sous-domaine qui possède cette entité.
588 */
589 virtual void synchronize(VariableCollection variables, Int32ConstArrayView local_ids);
590 //@}
591
592 /*!
593 * \brief Applique une opération de réduction depuis les entités fantômes.
594 *
595 * Cette opération est l'opération inverse de la synchronisation.
596 *
597 * Le sous-domaine récupère les valeurs de la variable \a v sur les entités
598 * qu'il partage avec d'autres sous-domaines et l'opération de réduction
599 * \a operation est appliquée sur cette variable.
600 */
601 virtual void reduceFromGhostItems(IVariable* v,IDataOperation* operation) =0;
602 /*!
603 * \brief Applique une opération de réduction depuis les entités fantômes.
604 *
605 * Cette opération est l'opération inverse de la synchronisation.
606 *
607 * Le sous-domaine récupère les valeurs de la variable \a v sur les entités
608 * qu'il partage avec d'autres sous-domaines et l'opération de réduction
609 * \a operation est appliquée sur cette variable.
610 */
611 virtual void reduceFromGhostItems(IVariable* v,Parallel::eReduceType operation) =0;
612
613 /*!
614 * \brief Cherche une liste d'adjacence.
615 *
616 * Cherche la liste d'entités de type \a sub_kind, liées par
617 * le type d'entité \a link_kind du groupe \a group,
618 * sur un nombre de couche \a nb_layer.
619 *
620 * Si \a group et \a sub_group sont de même genre, une entité est toujours
621 * dans sa liste d'adjacence, en tant que premier élément.
622 *
623 * Si la liste n'existe pas, elle est créée.
624 *
625 * \note pour l'instant une seule couche est autorisée.
626 */
627 virtual ItemPairGroup findAdjencyItems(const ItemGroup& group,
628 const ItemGroup& sub_group,
629 eItemKind link_kind,
630 Integer nb_layer) =0;
631
632 /*!
633 * \brief Retourne l'interface de la famille de particule de cette famille.
634 *
635 * L'interface IParticleFamily n'existe que si cette famille est
636 * une famille de particules (itemKind()==IK_Particle). Pour les
637 * autres genres de famille, 0 est retourné.
638 */
639 virtual IParticleFamily* toParticleFamily() =0;
640
641 /*!
642 * \brief Retourne l'interface de la famille de particule de cette famille.
643 *
644 * L'interface IParticleFamily n'existe que si cette famille est
645 * une famille de particules (itemKind()==IK_Particle). Pour les
646 * autres genres de famille, 0 est retourné.
647 */
648 virtual IDoFFamily* toDoFFamily() { return nullptr; }
649
650 /*!
651 * \internal
652 * \brief Supprime les entités donnés par \a local_ids.
653 *
654 * Pour usage interne uniquement. Si on souhaite supprimer des entités
655 * du maillage, il faut passer par IMeshModifier via l'appel à IMesh::modifier().
656 */
657 virtual void internalRemoveItems(Int32ConstArrayView local_ids,bool keep_ghost=false) =0;
658
659
660 /*!
661 * \name Enregistre/Supprime un gestionnaire de connectivité.
662 *
663 * Permet de répercuter les évolutions de la famille dans les
664 * connectivites "externes" ou elle est impliquée.
665 * Ces connectivites "externes" sont aujourd'hui les connectivités
666 * utilisant les degres de liberté.
667 *
668 * \note Ces méthodes sont internes à %Arcane.
669 */
670 //@{
671 virtual void addSourceConnectivity(IItemConnectivity* connectivity) =0;
672 virtual void addTargetConnectivity(IItemConnectivity* connectivity) =0;
673 virtual void removeSourceConnectivity(IItemConnectivity* connectivity) =0;
674 virtual void removeTargetConnectivity(IItemConnectivity* connectivity) =0;
675 virtual void setConnectivityMng(IItemConnectivityMng* connectivity_mng) =0;
676 //@}
677
678 /*!
679 * \brief Alloue des entités fantômes.
680 *
681 * Après appel à cette opération, il faut appeler endUpdate() pour
682 * notifier à l'instance la fin des modifications. Il est possible
683 * d'enchaîner plusieurs allocations avant d'appeler
684 * endUpdate().
685 *
686 * Les \a unique_ids sont ceux d'items présents sur un autre
687 * sous-domaine, dont le numéro est dans le tableau owners (de même
688 * taille que le tableau unique_ids). \a items doit avoir le même
689 * nombre d'éléments que \a unique_ids et sera remplit en retour
690 * avec les numéros locaux des entités créées.
691 */
692 virtual void addGhostItems(Int64ConstArrayView unique_ids, Int32ArrayView items,
693 Int32ConstArrayView owners) =0;
694
695 public:
696
697 //! Interface des comportements/politiques associées à cette famille.
699
700 //! Propriétés associées à cette famille.
701 virtual Properties* properties() =0;
702
703 public:
704
705 /*!
706 * \brief Redimensionne les variables de cette famille.
707 *
708 * Cette méthode est interne à Arcane.
709 */
710 virtual void resizeVariables(bool force_resize) = 0;
711
712 public:
713
714 //! Interface du modificateur de topologie.
716
717 public:
718
719 //! API interne à Arcane
720 virtual IItemFamilyInternal* _internalApi() =0;
721};
722
723/*---------------------------------------------------------------------------*/
724/*---------------------------------------------------------------------------*/
725
726} // End namespace Arcane
727
728/*---------------------------------------------------------------------------*/
729/*---------------------------------------------------------------------------*/
730
731#endif
Interface d'une famille de DoF.
Definition IDoFFamily.h:33
Interface des informations sur la connectivité par type d'entité.
Interface pour gérer une connectivité.
Interface des politiques d'une famille d'entités.
Interface de modification de la topologie des entités d'une famille.
Interface d'une famille d'entités.
virtual Integer parentFamilyDepth() const =0
Donne la profondeur d'imbrication du maillage courant.
virtual IItemFamilyTopologyModifier * _topologyModifier()=0
Interface du modificateur de topologie.
virtual void checkUniqueIds(Int64ConstArrayView unique_ids)=0
Vérifie que les identifiants unique_ids sont bien uniques pour tous les sous-domaines.
virtual IItemFamilyPolicyMng * policyMng()=0
Interface des comportements/politiques associées à cette famille.
virtual ItemInternalArrayView itemsInternal()=0
Tableau interne des entités.
virtual Int32 maxLocalId() const =0
virtual void checkValid()=0
Vérification de la validité des structures internes (interne)
virtual IItemFamilyCollection childFamilies()=0
Familles enfantes de cette famille.
virtual String name() const =0
Nom de la famille.
virtual ItemInfoListView itemInfoListView()=0
Vue sur la liste d'informations sur les entités.
virtual IItemFamily * parentFamily() const =0
IItemFamily parent.
virtual eItemKind itemKind() const =0
Genre des entités.
virtual void checkValidConnectivity()=0
Vérification de la validité des structures internes concernant la connectivité.
virtual String fullName() const =0
Nom complet de la famille (avec celui du maillage)
virtual ItemVectorView view(Int32ConstArrayView local_ids)=0
Vue sur les entités.
virtual IItemFamilyInternal * _internalApi()=0
API interne à Arcane.
virtual void removeItems2(mesh::ItemDataList &item_data_list)=0
Supprime des entités.
virtual void resizeVariables(bool force_resize)=0
Redimensionne les variables de cette famille.
virtual Properties * properties()=0
Propriétés associées à cette famille.
virtual Integer nbItem() const =0
Nombre d'entités.
virtual VariableItemInt32 & itemsNewOwner()=0
Variable contenant le numéro du nouveau sous-domaine propriétaire de l'entité.
virtual void addGhostItems(Int64ConstArrayView unique_ids, Int32ArrayView items, Int32ConstArrayView owners)=0
Alloue des entités fantômes.
virtual ItemVectorView view()=0
Vue sur toutes les entités de la famille.
Interface d'une fonction de tri des entités.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface d'une famille de particules.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Interface d'un service de synchronisation de variable.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Vue sur une liste pour obtenir des informations sur les entités.
Tableau de listes d'entités.
Identifiant unique d'une entité.
Variable scalaire sur un type d'entité du maillage.
Vue sur un vecteur d'entités.
Liste de propriétés.
Definition Properties.h:64
Collection de variables.
Vue modifiable d'un tableau d'un type T.
Classe de base des vecteurs 1D de données.
Vue constante d'un tableau de type T.
Interface du gestionnaire de traces.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Collection< IItemFamily * > IItemFamilyCollection
Collection de familles d'entités.
eItemKind
Genre d'entité de maillage.
eReduceType
Types des réductions supportées.