Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
DynamicMesh.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* DynamicMesh.h (C) 2000-2024 */
9/* */
10/* Classe de gestion d'un maillage évolutif. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MESH_DYNAMICMESH_H
13#define ARCANE_MESH_DYNAMICMESH_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18#include "arcane/utils/PerfCounterMng.h"
19#include "arcane/utils/ArgumentException.h"
20#include "arcane/utils/List.h"
21
22#include "arcane/core/IMeshModifier.h"
23#include "arcane/core/IPrimaryMesh.h"
24#include "arcane/core/IItemFamily.h"
25#include "arcane/core/IItemFamilyModifier.h"
26#include "arcane/core/ObserverPool.h"
27#include "arcane/core/MeshPartInfo.h"
28#include "arcane/core/IItemFamilyNetwork.h"
29#include "arcane/core/MeshHandle.h"
30#include "arcane/core/IMeshInitialAllocator.h"
31#include "arcane/core/MeshKind.h"
32
33#include "arcane/mesh/SubMeshTools.h"
34#include "arcane/mesh/MeshVariables.h"
35#include "arcane/mesh/NewWithLegacyConnectivity.h"
36#include "arcane/mesh/MeshEventsImpl.h"
37
38#include <functional>
39#include <memory>
40
41/*---------------------------------------------------------------------------*/
42/*---------------------------------------------------------------------------*/
43
44namespace Arcane
45{
46class IVariableMng;
47class Properties;
48class IUserDataList;
49class IItemFamilyCompactPolicy;
50class IMeshExchangeMng;
51class IMeshCompactMng;
53class IAMRTransportFunctor;
54}
55
56/*---------------------------------------------------------------------------*/
57/*---------------------------------------------------------------------------*/
58
59namespace Arcane::mesh
60{
61
62/*---------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
64
65class DynamicMeshIncrementalBuilder;
66class DynamicMeshChecker;
67class ItemMemoryReferenceMng;
68class MeshTiedInterface;
69class TiedInterface;
70class MeshPartitionConstraintMng;
71class TiedInterfaceMng;
72class NodeFamily;
73class EdgeFamily;
74class FaceFamily;
75class CellFamily;
76class DulaNodeFamily;
78class MeshRefinement;
79class NewItemOwnerBuilder;
80class ExtraGhostCellsBuilder;
81class ExtraGhostParticlesBuilder;
82
83class DynamicMeshMergerHelper;
84
85/*---------------------------------------------------------------------------*/
86/*---------------------------------------------------------------------------*/
90class ARCANE_MESH_EXPORT DynamicMesh
91: public MeshVariables
92, public TraceAccessor
93, public IPrimaryMesh
94, public IMeshModifier
97{
98 class InternalApi;
99
100 private:
101 // TEMPORAIRE
103 public:
104
107
109 : public IMeshInitialAllocator
110 {
111 public:
112
113 InitialAllocator(DynamicMesh* m) : m_mesh(m){}
115 {
116 return m_mesh;
117 }
119 {
120 return m_mesh;
121 }
122
123 private:
124
125 DynamicMesh* m_mesh;
126 };
127
128#ifdef ACTIVATE_PERF_COUNTER
129 struct PerfCounter
130 {
131 typedef enum {
140 } eType ;
141
142 static const std::string m_names[NbCounters] ;
143 } ;
144#endif
145 public:
146
147 void _checkKindRange(eItemKind ik) const // Il faut rendre fatal pour les particules, les dofs et le graph ??
148 {
149 if (ik==IK_Node ||
150 ik==IK_Edge ||
151 ik==IK_Face ||
152 ik==IK_Cell ||
153 ik==IK_DoF)
154 return;
155 throw ArgumentException(A_FUNCINFO,"Invalid Range");
156 }
157
158 public:
159
160 DynamicMesh(ISubDomain* sd,const MeshBuildInfo& mbi, bool is_submesh);
161 ~DynamicMesh();
162
163 public:
164
165 void build() override;
166
167 public:
168
169 MeshHandle handle() const override { return m_mesh_handle; }
170 String name() const override { return m_name; }
171 String factoryName() const override { return m_factory_name; }
172
173 IMesh* mesh() override { return this; }
174 Integer dimension() override { return m_mesh_dimension(); }
175 void setDimension(Integer dim) override;
176 VariableScalarInteger connectivity() override { return m_mesh_connectivity; }
177 Integer nbNode() override;
178 Integer nbEdge() override;
179 Integer nbFace() override;
180 Integer nbCell() override;
181
182 Integer nbItem(eItemKind ik) override
183 {
184 _checkKindRange(ik);
185 return m_item_families[ik]->nbItem();
186 }
187
189 {
190 _checkKindRange(ik);
191 return m_item_families[ik]->itemsInternal();
192 }
193
194 VariableNodeReal3& nodesCoordinates() override;
195 SharedVariableNodeReal3 sharedNodesCoordinates() override;
196
197 public:
198
199 void setEstimatedCells(Integer nb_cell);
200
201 public:
202
203 void exchangeItems() override;
204 void clearItems() override;
205
210 void updateGhostLayers() override;
211 void updateGhostLayers(bool remove_old_ghost) override;
213 void updateGhostLayerFromParent(Array<Int64>& ghost_cell_to_refine,
215 bool remove_old_ghost) override;
216
218 void mergeMeshes(ConstArrayView<IMesh*> meshes) override;
219
220 void addExtraGhostCellsBuilder(IExtraGhostCellsBuilder* builder) override;
221 void removeExtraGhostCellsBuilder(IExtraGhostCellsBuilder* builder) override;
222 void addExtraGhostParticlesBuilder(IExtraGhostParticlesBuilder* builder) override;
223 void removeExtraGhostParticlesBuilder(IExtraGhostParticlesBuilder* builder) override;
224
225 void serializeCells(ISerializer* buffer,Int32ConstArrayView cells_local_id) override;
226 Int32 meshRank() { return m_mesh_part_info.partRank(); }
227
228 void checkValidMesh() override;
229 void checkValidMeshFull() override;
230 void checkValidConnectivity();
231
232 public:
233
234 bool isAllocated() override { return m_is_allocated; }
235
236 void reloadMesh() override;
237
238 void deallocate() override;
239 void allocateCells(Integer mesh_nb_cell,Int64ConstArrayView cells_info,bool one_alloc) override;
240 void endAllocate() override;
241
242 void addCells(Integer nb_cell,Int64ConstArrayView cell_infos,Int32ArrayView cells) override;
243 void addCells(const MeshModifierAddCellsArgs& args) override;
244 void addCells(ISerializer* buffer) override;
245 void addCells(ISerializer* buffer,Int32Array& cells_local_id) override;
246 void addFaces(Integer nb_face,Int64ConstArrayView face_infos,Int32ArrayView faces) override;
247 void addFaces(const MeshModifierAddFacesArgs& args) override;
248 void addEdges(Integer nb_edge,Int64ConstArrayView edge_infos,Int32ArrayView edges) override;
249 void addNodes(Int64ConstArrayView nodes_uid,Int32ArrayView nodes) override;
250 ARCANE_DEPRECATED ItemInternal *addFace(Int64 a_face_uid, Int64ConstArrayView a_node_list, Integer a_type);
251 void removeCells(Int32ConstArrayView cells_local_id,bool update_graph) override;
253 {
254 removeCells(cells_local_id,true) ;
255 }
256 void detachCells(Int32ConstArrayView cells_local_id) override;
257 void removeDetachedCells(Int32ConstArrayView cells_local_id) override;
259 void flagCellToRefine(Int32ConstArrayView cells_lids) override;
260 void flagCellToCoarsen(Int32ConstArrayView cells_lids) override;
261 void refineItems() override;
262 void coarsenItems() override;
263 void coarsenItemsV2(bool update_parent_flag) override;
264 void compact() ;
265 bool adapt() override;
266 void registerCallBack(IAMRTransportFunctor* f) override;
267 void unRegisterCallBack(IAMRTransportFunctor* f) override;
268 void addHChildrenCells(Cell parent_cell,Integer nb_cell,
270
271 void addParentCellToCell(Cell child, Cell parent) override;
272 void addChildCellToCell(Cell parent, Cell child) override;
273
274 void addParentFaceToFace(Face child, Face parent) override;
275 void addChildFaceToFace(Face parent, Face child) override;
276
277 void addParentNodeToNode(Node child, Node parent) override;
278 void addChildNodeToNode(Node parent, Node child) override;
279
280 void endUpdate() override;
281 Int64 timestamp() override { return m_timestamp; }
282
283 bool isPrimaryMesh() const override;
284 IPrimaryMesh* toPrimaryMesh() override;
285
287 const MeshPartInfo& meshPartInfo() const override { return m_mesh_part_info; }
288 void setMeshPartInfo(const MeshPartInfo& mpi) override;
289 IUserDataList* userDataList() override { return m_mesh_handle.meshUserDataList(); }
290 const IUserDataList* userDataList() const override { return m_mesh_handle.meshUserDataList(); }
291
292 IGhostLayerMng* ghostLayerMng() const override { return m_ghost_layer_mng; }
293 IMeshUniqueIdMng* meshUniqueIdMng() const override { return m_mesh_unique_id_mng; }
294 IMeshChecker* checker() const override;
295
296public:
297
299 {
300 _checkKindRange(ik);
301 return m_item_families[ik]->itemsNewOwner();
302 }
303
304 ItemInternalMap& nodesMap();
305 ItemInternalMap& edgesMap();
306 ItemInternalMap& facesMap();
307 ItemInternalMap& cellsMap();
308
309 void addParentCells(ItemVectorView & items);
310
311 // ItemFamilyNetwork
313
314 private:
315
316 ISubDomain* m_sub_domain;
317 IMeshMng* m_mesh_mng;
318 MeshHandle m_mesh_handle;
319 IParallelMng* m_parallel_mng;
320 MeshItemInternalList m_item_internal_list;
321 IVariableMng* m_variable_mng;
322 Properties* m_properties;
323 Int64 m_timestamp;
324 bool m_is_allocated;
325 Integer m_dimension;
326 String m_name;
327 String m_factory_name;
328 bool m_need_compact;
329 bool m_has_edge;
330
331 public:
332
333 NodeFamily* m_node_family;
334 EdgeFamily* m_edge_family;
335 FaceFamily* m_face_family;
336 CellFamily* m_cell_family;
337
338 private:
339
340 IMesh* m_parent_mesh;
341 ItemGroupImpl* m_parent_group;
342 UniqueArray<DynamicMesh*> m_child_meshes;
343
344 public:
345
346 NodeFamily& trueNodeFamily() { return *m_node_family; }
347 EdgeFamily& trueEdgeFamily() { return *m_edge_family; }
348 FaceFamily& trueFaceFamily() { return *m_face_family; }
349 CellFamily& trueCellFamily() { return *m_cell_family; }
350
351 public:
352
353 NodeGroup allNodes() override { return allItems(IK_Node); }
354 EdgeGroup allEdges() override { return allItems(IK_Edge); }
355 FaceGroup allFaces() override { return allItems(IK_Face); }
356 CellGroup allCells() override { return allItems(IK_Cell); }
357
358 //TODO: supprimer cette méthode
359 ItemGroup allItems(eItemKind kind)
360 {
361 _checkKindRange(kind);
362 return m_item_families[kind]->allItems();
363 }
364
365 NodeGroup ownNodes() override { return ownItems(IK_Node); }
366 EdgeGroup ownEdges() override { return ownItems(IK_Edge); }
367 FaceGroup ownFaces() override { return ownItems(IK_Face); }
368 CellGroup ownCells() override { return ownItems(IK_Cell); }
369
370 //TODO: supprimer cette méthode
371 ItemGroup ownItems(eItemKind kind)
372 {
373 _checkKindRange(kind);
374 return m_item_families[kind]->allItems().own();
375 }
376
377 FaceGroup outerFaces() override;
378
381 CellGroup allActiveCells() override;
382
384 CellGroup ownActiveCells() override;
385
387 CellGroup allLevelCells(const Integer& level) override;
388
390 CellGroup ownLevelCells(const Integer& level) override;
391
393 FaceGroup allActiveFaces() override;
394
396 FaceGroup ownActiveFaces() override;
397
399 FaceGroup innerActiveFaces() override;
400
402 FaceGroup outerActiveFaces() override;
403
404// void readAmrActivator(const XmlNode& mesh_node) override;
405
406 public:
407
408 MeshItemInternalList* meshItemInternalList() override
409 { return &m_item_internal_list; }
410
411 public:
412
413 ISubDomain* subDomain() override { return m_sub_domain; }
414 IParallelMng* parallelMng() override;
415 ITraceMng* traceMng() override { return TraceAccessor::traceMng(); }
416
417 ItemGroupCollection groups() override;
418
419 void prepareForDump() override;
420 void initializeVariables(const XmlNode& init_node) override;
421 ItemGroup findGroup(const String& name) override;
422 ItemGroup findGroup(const String& name,eItemKind ik,bool create_if_needed);
423 void destroyGroups() override;
424
425 NodeGroup findNodeGroup(const String& aname)
426 { return findGroup(aname,IK_Node,false); }
427 EdgeGroup findEdgeGroup(const String& aname)
428 { return findGroup(aname,IK_Edge,false); }
429 FaceGroup findFaceGroup(const String& aname)
430 { return findGroup(aname,IK_Face,false); }
431 CellGroup findCellGroup(const String& aname)
432 { return findGroup(aname,IK_Cell,false); }
433
434 ItemGroup createGroup(const String& aname,const ItemGroup& parent);
435 ItemGroup createGroup(const String& aname,eItemKind ik);
436
438 bool isAmrActivated() const override
439 {
440 return m_is_amr_activated;
441 }
442
443 public:
444
445 IItemFamily* createItemFamily(eItemKind ik,const String& name) override;
446
447 IItemFamily* findItemFamily(eItemKind ik,const String& name,bool create_if_needed,bool register_modifier_if_created) override;
448 IItemFamily* findItemFamily(const String& name,bool throw_exception=true) override;
449 IItemFamilyModifier* findItemFamilyModifier(eItemKind ik,const String& name) override;
450 void addItemFamilyModifier(IItemFamilyModifier*) ;
451
453 {
454 _checkKindRange(ik);
455 return m_item_families[ik];
456 }
457 IItemFamily* nodeFamily() override;
458 IItemFamily* edgeFamily() override;
459 IItemFamily* faceFamily() override;
460 IItemFamily* cellFamily() override;
461
462 IItemFamilyCollection itemFamilies() override
463 {
464 return m_item_families;
465 }
466
467 public:
468
469 bool isDynamic() const override
470 {
471 return m_is_dynamic;
472 }
473
474 void setDynamic(bool v) override
475 {
476 m_is_dynamic = v;
477 }
478
479 void setCheckLevel(Integer level) override;
480
481 Integer checkLevel() const override;
482
483 public:
484
485 void computeTiedInterfaces(const XmlNode& xml_node) override;
486 bool hasTiedInterface() override;
487 TiedInterfaceCollection tiedInterfaces() override;
488 IMeshPartitionConstraintMng* partitionConstraintMng() override;
489 ConstArrayView<TiedInterface*> trueTiedInterfaces();
490
491 public:
492
493 IMeshUtilities* utilities() override;
494 IMeshModifier* modifier() override { return this; }
495 Properties* properties() override { return m_properties; }
496 void synchronizeGroupsAndVariables() override;
497
498 public:
499
500 void defineParentForBuild(IMesh* mesh, ItemGroup group) override;
501 IMesh* parentMesh() const override;
502 ItemGroup parentGroup() const override;
503 void addChildMesh(IMesh* sub_mesh) override;
504 IMeshCollection childMeshes() const override;
505
506 void setOwnersFromCells() override { _setOwnersFromCells(); }
507 IMeshCompactMng* _compactMng() override { return m_mesh_compact_mng; }
509 {
510 return m_connectivity_policy;
511 }
512
513 public:
514
515 DynamicMeshIncrementalBuilder* incrementalBuilder() { return m_mesh_builder; }
516 MeshRefinement* meshRefinement() { return m_mesh_refinement; }
517 void endUpdate(bool update_ghost_layer, bool remove_old_ghost) override;
518
519 public:
520
521 bool useMeshItemFamilyDependencies() const override {return m_use_mesh_item_family_dependencies; }
522 IItemFamilyNetwork* itemFamilyNetwork() override {return m_item_family_network;}
523 IIndexedIncrementalItemConnectivityMng* indexedConnectivityMng() override { return m_indexed_connectivity_mng.get(); }
524
525 public:
526
527 IMeshMng* meshMng() const override { return m_mesh_mng; }
528 IVariableMng* variableMng() const override { return m_variable_mng; }
529 ItemTypeMng* itemTypeMng() const override { return m_item_type_mng; }
530
531 void computeSynchronizeInfos() override;
532
533 public:
534
535 IMeshInitialAllocator* initialAllocator() override { return &m_initial_allocator; }
536 void allocate(UnstructuredMeshAllocateBuildInfo& build_info) override;
537 void allocate(CartesianMeshAllocateBuildInfo& build_info) override;
538
539 public:
540
542 {
543 return m_mesh_events.eventObservable(type);
544 }
545
546 public:
547
548 const MeshKind meshKind() const override { return m_mesh_kind; }
549
550 IMeshInternal* _internalApi() override;
551 IMeshModifierInternal* _modifierInternalApi() override;
552
553 private:
554
555 IMeshUtilities* m_mesh_utilities = nullptr;
556
557 public:
558
559 DynamicMeshIncrementalBuilder* m_mesh_builder = nullptr;
560
561 private:
562
563 DynamicMeshChecker* m_mesh_checker = nullptr;
564 SubMeshTools* m_submesh_tools = nullptr;
566 MeshRefinement* m_mesh_refinement = nullptr;
567 NewItemOwnerBuilder * m_new_item_owner_builder = nullptr;
568 ExtraGhostCellsBuilder* m_extra_ghost_cells_builder = nullptr;
569 ExtraGhostParticlesBuilder* m_extra_ghost_particles_builder = nullptr;
570 InitialAllocator m_initial_allocator;
571 std::unique_ptr<InternalApi> m_internal_api;
572
573 private:
574
576 bool m_is_amr_activated = false;
577 eMeshAMRKind m_amr_type;
578
579 bool m_is_dynamic = false;
580
583
586
589 UniqueArray<IItemFamilyModifier*> m_family_modifiers; // used for item family network
590
591 ObserverPool m_observer_pool;
592 TiedInterfaceMng* m_tied_interface_mng = nullptr;
593 bool m_is_sub_connectivity_set = false;
594 bool m_tied_interface_need_prepare_dump = false;
595
596 MeshPartitionConstraintMng* m_partition_constraint_mng = nullptr;
597 IGhostLayerMng* m_ghost_layer_mng = nullptr;
598 IMeshUniqueIdMng* m_mesh_unique_id_mng = nullptr;
599 IMeshExchangeMng* m_mesh_exchange_mng = nullptr;
600 IMeshCompactMng* m_mesh_compact_mng = nullptr;
601
602#ifdef ACTIVATE_PERF_COUNTER
603 PerfCounterMng<PerfCounter> m_perf_counter;
604#endif
605
606 InternalConnectivityPolicy m_connectivity_policy;
607 MeshPartInfo m_mesh_part_info;
608
609 bool m_use_mesh_item_family_dependencies = false ;
610 IItemFamilyNetwork* m_item_family_network = nullptr;
611 ItemTypeMng* m_item_type_mng = nullptr;
612 std::unique_ptr<IIndexedIncrementalItemConnectivityMng> m_indexed_connectivity_mng;
613 MeshKind m_mesh_kind;
614 bool m_do_not_save_need_compact = false;
615
616 MeshEventsImpl m_mesh_events;
617
618 private:
619
620 void _printMesh(std::ostream& ostr);
621 void _allocateCells(Integer mesh_nb_cell,
624 bool allow_build_face = true);
625
626 const char* _className() const { return "Mesh"; }
627
628 void _allocateCells2(DynamicMeshIncrementalBuilder* mib);
629 void _itemsUniqueIdsToLocalIdsSorted(eItemKind item_kind,ArrayView<Integer> ids);
630 void _prepareForDump();
631 void _prepareForDumpReal();
632 void _readFromDump();
633
634 void _setOwnersFromCells();
635 // Les méthodes _synchronizeXXX ne sont pas récursives sur les sous-maillages
636 void _synchronizeGroupsAndVariables();
637 void _synchronizeGroups();
638 void _synchronizeVariables();
639 void _writeMesh(const String& base_name);
640 void _removeGhostItems() ;
641 // AMR
642 void _removeGhostChildItems();
643 void _removeGhostChildItems2(Array<Int64>& cells_to_coarsen);
644 void _checkAMR() const;
645
646 void _sortInternalReferences();
647 void _finalizeMeshChanged();
648 void _compactItemInternalReferences();
649 void _compactItems(bool do_sort,bool compact_variables_and_groups);
650 void _checkValidItem(ItemInternal* item);
651
652 void _computeSynchronizeInfos();
653 void _computeFamilySynchronizeInfos();
654 void _computeGroupSynchronizeInfos();
655 void _exchangeItems(bool do_compact);
656 void _exchangeItemsNew();
657 void _checkDimension() const;
658 void _checkConnectivity();
659 void _writeCells(const String& filename);
660
661 void _prepareTiedInterfacesForDump();
662 void _readTiedInterfacesFromDump();
663 void _applyTiedInterfaceStructuration(TiedInterface* tied_interface);
664 void _deleteTiedInterfaces();
665
666 void _multipleExchangeItems(Integer nb_exchange,Integer version,bool do_compact);
667 void _addCells(ISerializer* buffer,Int32Array* cells_local_id);
668 void _setSubConnectivity();
669 void _setDimension(Integer dim);
670 void _internalUpdateGhost(bool update_ghost_layer,bool remove_old_ghost);
671 void _internalEndUpdateInit(bool update_sync_info);
672 void _internalEndUpdateResizeVariables();
673 void _internalEndUpdateFinal(bool print_stat);
674
675 void _computeExtraGhostCells();
676 void _computeExtraGhostParticles();
677
678 void _notifyEndUpdateForFamilies();
679 ItemFamily* _createNewFamily(eItemKind kind, const String & name);
680
681 void _saveProperties();
682 void _loadProperties();
683 void _addFamily(ItemFamily* true_family);
684
685 void _buildAndInitFamily(IItemFamily* family);
686 IItemFamilyPolicyMng* _createFamilyPolicyMng(ItemFamily* family);
687 void _applyCompactPolicy(const String& timer_name,
688 std::function<void(IItemFamilyCompactPolicy*)> functor);
689 void _updateGroupsAfterRemove();
690 void _printConnectivityPolicy();
691
692 // Add a dependency (downward adjacencies only) between two family: ie the source family
693 // is built on the target family (ex a cell is build owns its nodes)
694 template <class SourceFamily, class TargetFamily>
696 {
698 String name = String::format("{0}{1}",source_family->name(),target_family->name());
699 auto connectivity = new CType(source_family,target_family,name);
700 m_item_family_network->addDependency(source_family,target_family,connectivity);
701 }
702
703 // Add a relation : source family "sees" target family (ex a face sees its cells). Often upward adjacencies.
704 template <class SourceFamily, class TargetFamily>
706 {
707 typedef typename NewWithLegacyConnectivityType<SourceFamily,TargetFamily>::type CType;
708 String name = String::format("{0}{1}",source_family->name(),target_family->name());
709 auto connectivity = new CType(source_family,target_family,name);
710 m_item_family_network->addRelation(source_family,target_family,connectivity);
711 }
712
713 // Update family dependencies with set connectivities
714 void _updateItemFamilyDependencies(VariableScalarInteger connectivity);
715
716 // Serialize Item
717 void _serializeItems(ISerializer* buffer,Int32ConstArrayView item_local_ids, IItemFamily* item_family);
718 void _deserializeItems(ISerializer* buffer,Int32Array *item_local_ids, IItemFamily* item_family);
719 void _fillSerializer(ISerializer* buffer, std::map<String, Int32UniqueArray>& serializedItems);
720
721};
722
723/*---------------------------------------------------------------------------*/
724/*---------------------------------------------------------------------------*/
725
726} // End namespace Arcane::mesh
727
728/*---------------------------------------------------------------------------*/
729/*---------------------------------------------------------------------------*/
730
731#endif
Tableau d'items de types quelconques.
Informations pour allouer les entités d'un maillage non structuré.
Maille d'un maillage.
Definition Item.h:1178
Face d'une maille.
Definition Item.h:932
Interface d'un fonctor avec argument.
Allocateur pour les maillages cartésiens.
Interface d'un constructeur de mailles fantômes "extraordinaires"
Interface d'un constructeur de mailles fantômes "extraordinaires".
Interface du gestionnaire des connectivités incrémentales indexées sur les entités.
Politique de compactage des entités.
Interface de modification d'une famille.
virtual void addDependency(IItemFamily *master_family, IItemFamily *slave_family, IIncrementalItemConnectivity *slave_to_master_connectivity, bool is_deep_connectivity=true)=0
virtual void addRelation(IItemFamily *source_family, IItemFamily *target_family, IIncrementalItemConnectivity *source_to_target_connectivity)=0
Interface des politiques d'une famille d'entités.
Interface d'une famille d'entités.
Interface de méthodes de vérification d'un maillage.
Interface du gestionnaire des compactages de familles d'un maillage.
Interface du gestionnaire des échanges de maillages entre sous-domaines.
Interface d'allocation des entités du maillage.
Partie interne de IMesh.
Interface du gestionnaire des maillages.
Definition IMeshMng.h:40
Partie interne de IMeshModifier.
Interface de modification du maillage.
Interface d'un gestionnaire de contraintes de partitionnement de maillage.
Interface d'une classe proposant des fonctions utilitaires sur maillage.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Allocateur pour les maillages non structurés.
Interface d'une liste qui gère des données utilisateurs.
Interface du gestionnaire de variables.
Implémentation d'un groupe d'entités de maillage.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Structure interne d'une entité de maillage.
Gestionnaire des types d'entités de maillage.
Definition ItemTypeMng.h:66
Vue sur un vecteur d'entités.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Handle sur un maillage.
Definition MeshHandle.h:47
Tableaux d'indirection sur les entités d'un maillage.
Caractéristiques d'un maillage.
Definition MeshKind.h:59
Arguments pour IMeshModifier::addCells().
Arguments pour IMeshModifier::addFaces().
Informations un maillage partitionné.
Gestionnaire de contraintes de partitionnement de maillage.
Variables contenant les informations de connectivités communes aux maillages 1D, 2D et 3D.
Noeud d'un maillage.
Definition Dom.h:204
Liste d'observateurs.
Liste de propriétés.
Definition Properties.h:64
Implémentation du gestionnaire d'interfaces liées.
Informations sur les semi-conformitées du maillage.
Informations pour allouer les entités d'un maillage non structuré.
Noeud d'un arbre DOM.
Definition XmlNode.h:51
Famille de mailles.
Definition CellFamily.h:46
Construction d'un maillage de manière incrémentale.
ICartesianMeshInitialAllocator * cartesianMeshAllocator() override
Allocateur pour les maillages cartésiens.
IUnstructuredMeshInitialAllocator * unstructuredMeshAllocator() override
Allocateur pour les maillages non structurés.
Implémentation d'un maillage.
Definition DynamicMesh.h:97
bool useMeshItemFamilyDependencies() const override
check if the network itemFamily dependencies is activated
VariableItemInt32 & itemsNewOwner(eItemKind ik) override
Variable contenant l'identifiant du sous-domaine propriétaire.
IMeshCompactMng * _compactMng() override
String factoryName() const override
Nom de la fabrique utilisée pour créer le maillage.
FaceGroup allFaces() override
Groupe de toutes les faces.
bool isDynamic() const override
Indique si le maillage est dynamique (peut évoluer)
UniqueArray< ItemFamily * > m_true_item_families
Liste des implémentations des familles d'entités.
bool isAmrActivated() const override
AMR.
ITraceMng * traceMng() override
Gestionnaire de message associé
IItemFamily * itemFamily(eItemKind ik) override
Retourne la famille d'entité de type ik.
IMesh * mesh() override
Maillage associé
String name() const override
Nom du maillage.
IMeshMng * meshMng() const override
Gestionnaire de maillage associé
NodeGroup ownNodes() override
Groupe de tous les noeuds propres au domaine.
EdgeGroup ownEdges() override
Groupe de toutes les arêtes propres au domaine.
IIndexedIncrementalItemConnectivityMng * indexedConnectivityMng() override
Interface du gestionnaire des connectivités incrémentales indexées.
ItemInternalArrayView itemsInternal(eItemKind ik) override
Tableau interne des éléments du maillage de type type.
Int64 timestamp() override
Compteur indiquant le temps de dernière modification du maillage.
IMeshModifier * modifier() override
Interface de modification associée.
const IUserDataList * userDataList() const override
Gestionnnaire de données utilisateurs associé
VariableScalarInteger connectivity() override
Descripteur de connectivité
Integer dimension() override
Dimension du maillage (1D, 2D ou 3D).
void setDynamic(bool v) override
Positionne la propriété indiquant si le maillage peut évoluer.
ItemFamilyList m_item_families
Liste des interfaces familles d'entités.
EdgeGroup allEdges() override
Groupe de toutes les arêtes.
const MeshPartInfo & meshPartInfo() const override
Informations sur les parties du maillage.
ItemTypeMng * itemTypeMng() const override
Gestionnaire de types d'entités associé
CellGroup allCells() override
Groupe de toutes les mailles.
bool isAllocated() override
Vrai si le maillage est allouée.
IVariableMng * variableMng() const override
Gestionnaire de variable associé
IGhostLayerMng * ghostLayerMng() const override
Gestionnare de couche fantômes associé
InternalConnectivityPolicy _connectivityPolicy() const override
Politique d'utilisation des connectivitées.
void removeCells(Int32ConstArrayView cells_local_id) override
Supprime des mailles.
FaceGroup ownFaces() override
Groupe de toutes les faces propres au domaine.
Integer nbItem(eItemKind ik) override
Nombre d'éléments du genre ik.
IMeshInitialAllocator * initialAllocator() override
Allocateur initial spécifique.
const MeshKind meshKind() const override
Caractéristiques du maillage.
Properties * properties() override
Propriétés associées à ce maillage.
CellGroup ownCells() override
Groupe de toutes les mailles propres au domaine.
IItemFamilyNetwork * itemFamilyNetwork() override
Interface du réseau de familles (familles connectées)
void setOwnersFromCells() override
Positionne les propriétaires des entités à partir du propriétaire des mailles.
IMeshUniqueIdMng * meshUniqueIdMng() const override
Gestionnare de la numérotation des identifiants uniques.
ISubDomain * subDomain() override
Sous-domaine associé
NodeGroup allNodes() override
Groupe de tous les noeuds.
MeshHandle handle() const override
Handle sur ce maillage.
ItemGroupList m_all_groups
Liste des groupes d'entités.
EventObservable< const MeshEventArgs & > & eventObservable(eMeshEventType type) override
Observable pour un évènement.
IUserDataList * userDataList() override
Gestionnnaire de données utilisateurs associé
Famille d'arêtes.
Definition EdgeFamily.h:35
Construction des mailles fantômes supplémentaires.
Construction des mailles fantômes supplémentaires.
Famille de faces.
Definition FaceFamily.h:53
Famille d'entités.
Definition ItemFamily.h:76
Tableau associatif de ItemInternal.
Implémentation des évènements sur le maillage.
Implémentation des algorithmes d'adaptation par raffinement de maillages non-structuré.
Famille de noeuds.
Definition NodeFamily.h:37
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Interface du gestionnaire de traces.
Chaîne de caractères unicode.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
Definition ItemTypes.h:183
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eMeshEventType
Evènements générés par IMesh.
Definition MeshEvents.h:30
eItemKind
Genre d'entité de maillage.
@ IK_Node
Entité de maillage de genre noeud.
@ IK_Cell
Entité de maillage de genre maille.
@ IK_Face
Entité de maillage de genre face.
@ IK_Edge
Entité de maillage de genre arête.
InternalConnectivityPolicy
Politique d'utilisation des connectivités.
Definition ItemTypes.h:516
eMeshAMRKind
Type de maillage AMR.
Definition MeshKind.h:40