Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ItemGroupDynamicMeshObserver.cc
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#include "arcane/mesh/ItemGroupDynamicMeshObserver.h"
8
9/*---------------------------------------------------------------------------*/
10/*---------------------------------------------------------------------------*/
11
12#include "arcane/mesh/DynamicMesh.h"
13#include "arcane/mesh/DynamicMeshIncrementalBuilder.h"
14#include "arcane/mesh/ItemFamily.h"
15
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/ArgumentException.h"
18
19#include "arcane/ItemPrinter.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane::mesh
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
32{
34
35 // Les familles parents ont déjà été branchées.
36 ARCANE_ASSERT((m_mesh->cellFamily()->parentFamily()->itemKind() == parent_family->itemKind()),
37 ("Bad Face parent family %s",m_mesh->cellFamily()->parentFamily()->name().localstr()));
38
40
41 m_mesh->incrementalBuilder()->addParentItems(all_group,IK_Cell);
42}
43
44/*---------------------------------------------------------------------------*/
45
48{
49 IItemFamily * family = m_mesh->cellFamily();
52
53 // info contient les localIds supprimés de l'ancien groupe,
55
56 // Les uniqueIds des Cell est identique au parent donc on cherche dans la famille locale
58 parent_uids.reserve(parent_deleted_lids.size());
59 for(Integer i=0;i<parent_deleted_lids.size();++i)
60 {
61 Int64 parent_uid = parent_internals[parent_deleted_lids[i]].uniqueId();
62 if (parent_uid != NULL_ITEM_UNIQUE_ID) // prevent from completly detached items
63 {
65 }
66 }
67
68
69 Int32UniqueArray to_delete_lids(parent_uids.size(),NULL_ITEM_LOCAL_ID);
72 true); // Fatal si non trouvé
73
74#ifdef ARCANE_DEBUG
75 ITraceMng * traceMng = m_mesh->traceMng();
77 for(Integer i=0;i<parent_uids.size();++i) {
78 traceMng->debug(Trace::High) << "Reduce with item "
80 << " parent item " << parent_uids[i];
81 }
82#endif /* ARCANE_DEBUG */
83
84 m_mesh->removeCells(to_delete_lids);
85}
86
87/*---------------------------------------------------------------------------*/
88
91{
92 if (!pinfo)
93 throw ArgumentException(A_FUNCINFO,"Compact info required");
94
95 // Le compactage est traité dans ItemFamily::_compactFromParentFamily
96 // afin de procéder de manière consistante famille par famille
97 if (arcaneIsDebug()){
98 ITraceMng* trace_mng = m_mesh->traceMng();
99 const Int32ConstArrayView& old_to_new_ids = *pinfo;
100 IItemFamily* family = m_mesh->cellFamily();
101 ItemFamily* parent_family = ARCANE_CHECK_POINTER(dynamic_cast<ItemFamily*>(family->parentFamily()));
102 for(Integer i=0; i<old_to_new_ids.size() ; ++i ) {
103 trace_mng->debug(Trace::Highest) << "OldToNew " << parent_family->name() << " " << i << " " << old_to_new_ids[i];
104 }
105 }
106}
107
108/*---------------------------------------------------------------------------*/
109
112{
113 ARCANE_FATAL("Not implemented");
114}
115
116/*---------------------------------------------------------------------------*/
117/*---------------------------------------------------------------------------*/
118
119} // End namespace Arcane::mesh
120
121/*---------------------------------------------------------------------------*/
122/*---------------------------------------------------------------------------*/
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Interface d'une famille d'entités.
virtual IItemFamily * parentFamily() const =0
IItemFamily parent.
virtual void itemsUniqueIdToLocalId(Int32ArrayView local_ids, Int64ConstArrayView unique_ids, bool do_fatal=true) const =0
Converti un tableau de numéros uniques en numéros locaux.
void executeReduce(const Int32ConstArrayView *info)
Execute l'action associée à l'extension.
void executeExtend(const Int32ConstArrayView *new_items_info)
Execute l'action associée à l'extension.
void executeInvalidate()
Execute l'action associée à l'invalidation.
void executeCompact(const Int32ConstArrayView *pinfo)
Execute l'action associée au compactage.
IItemFamily * itemFamily() const
Famille d'entité à laquelle appartient ce groupe (0 pour le group nul)
Definition ItemGroup.h:123
Vue sur une liste pour obtenir des informations sur les entités.
Classe utilitaire pour imprimer les infos sur une entité.
Definition ItemPrinter.h:35
Vue sur un vecteur d'entités.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
void addParentItems(const ItemVectorView &items, const eItemKind submesh_kind)
Ajout au maillage courant d'item venant d'un maillage parent.
IItemFamily * cellFamily() override
Retourne la famille des mailles.
ITraceMng * traceMng() override
Gestionnaire de message associé
ItemGroup parentGroup() const override
Groupe parent.
Exception lorsqu'un argument est invalide.
Vue constante d'un tableau de type T.
Interface du gestionnaire de traces.
virtual TraceMessageDbg debug(Trace::eDebugLevel=Trace::Medium)=0
Flot pour un message de debug.
Vecteur 1D de données avec sémantique par valeur (style STL).
bool arcaneIsDebug()
Vrai si la macro ARCANE_DEBUG est définie.
Definition Misc.cc:163
@ IK_Cell
Entité de maillage de genre maille.