Arcane  v3.15.3.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-2025 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-2025 */
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 void removeCells(Int32ConstArrayView cells_local_id,bool update_graph) override;
252 {
253 removeCells(cells_local_id,true) ;
254 }
255 void detachCells(Int32ConstArrayView cells_local_id) override;
256 void removeDetachedCells(Int32ConstArrayView cells_local_id) override;
258 void flagCellToRefine(Int32ConstArrayView cells_lids) override;
259 void flagCellToCoarsen(Int32ConstArrayView cells_lids) override;
260 void refineItems() override;
261 void coarsenItems() override;
262 void coarsenItemsV2(bool update_parent_flag) override;
263 void compact() ;
264 bool adapt() override;
265 void registerCallBack(IAMRTransportFunctor* f) override;
266 void unRegisterCallBack(IAMRTransportFunctor* f) override;
267 void addHChildrenCells(Cell parent_cell,Integer nb_cell,
268 Int64ConstArrayView cells_infos,Int32ArrayView cells) override;
269
270 void addParentCellToCell(Cell child, Cell parent) override;
271 void addChildCellToCell(Cell parent, Cell child) override;
272
273 void addParentFaceToFace(Face child, Face parent) override;
274 void addChildFaceToFace(Face parent, Face child) override;
275
276 void addParentNodeToNode(Node child, Node parent) override;
277 void addChildNodeToNode(Node parent, Node child) override;
278
279 void endUpdate() override;
280 Int64 timestamp() override { return m_timestamp; }
281
282 bool isPrimaryMesh() const override;
283 IPrimaryMesh* toPrimaryMesh() override;
284
286 const MeshPartInfo& meshPartInfo() const override { return m_mesh_part_info; }
287 void setMeshPartInfo(const MeshPartInfo& mpi) override;
288 IUserDataList* userDataList() override { return m_mesh_handle.meshUserDataList(); }
289 const IUserDataList* userDataList() const override { return m_mesh_handle.meshUserDataList(); }
290
291 IGhostLayerMng* ghostLayerMng() const override { return m_ghost_layer_mng; }
292 IMeshUniqueIdMng* meshUniqueIdMng() const override { return m_mesh_unique_id_mng; }
293 IMeshChecker* checker() const override;
294
295public:
296
298 {
299 _checkKindRange(ik);
300 return m_item_families[ik]->itemsNewOwner();
301 }
302
303 ItemInternalMap& nodesMap();
304 ItemInternalMap& edgesMap();
305 ItemInternalMap& facesMap();
306 ItemInternalMap& cellsMap();
307
308 void addParentCells(ItemVectorView & items);
309
310 // ItemFamilyNetwork
312
313 private:
314
315 ISubDomain* m_sub_domain;
316 IMeshMng* m_mesh_mng;
317 MeshHandle m_mesh_handle;
318 IParallelMng* m_parallel_mng;
319 MeshItemInternalList m_item_internal_list;
320 IVariableMng* m_variable_mng;
321 Properties* m_properties;
322 Int64 m_timestamp;
323 bool m_is_allocated;
324 Integer m_dimension;
325 String m_name;
326 String m_factory_name;
327 bool m_need_compact;
328 bool m_has_edge;
329
330 public:
331
332 NodeFamily* m_node_family;
333 EdgeFamily* m_edge_family;
334 FaceFamily* m_face_family;
335 CellFamily* m_cell_family;
336
337 private:
338
339 IMesh* m_parent_mesh;
340 ItemGroupImpl* m_parent_group;
341 UniqueArray<DynamicMesh*> m_child_meshes;
342
343 public:
344
345 NodeFamily& trueNodeFamily() { return *m_node_family; }
346 EdgeFamily& trueEdgeFamily() { return *m_edge_family; }
347 FaceFamily& trueFaceFamily() { return *m_face_family; }
348 CellFamily& trueCellFamily() { return *m_cell_family; }
349
350 public:
351
352 NodeGroup allNodes() override { return allItems(IK_Node); }
353 EdgeGroup allEdges() override { return allItems(IK_Edge); }
354 FaceGroup allFaces() override { return allItems(IK_Face); }
355 CellGroup allCells() override { return allItems(IK_Cell); }
356
357 //TODO: supprimer cette méthode
358 ItemGroup allItems(eItemKind kind)
359 {
360 _checkKindRange(kind);
361 return m_item_families[kind]->allItems();
362 }
363
364 NodeGroup ownNodes() override { return ownItems(IK_Node); }
365 EdgeGroup ownEdges() override { return ownItems(IK_Edge); }
366 FaceGroup ownFaces() override { return ownItems(IK_Face); }
367 CellGroup ownCells() override { return ownItems(IK_Cell); }
368
369 //TODO: supprimer cette méthode
370 ItemGroup ownItems(eItemKind kind)
371 {
372 _checkKindRange(kind);
373 return m_item_families[kind]->allItems().own();
374 }
375
376 FaceGroup outerFaces() override;
377
380 CellGroup allActiveCells() override;
381
383 CellGroup ownActiveCells() override;
384
386 CellGroup allLevelCells(const Integer& level) override;
387
389 CellGroup ownLevelCells(const Integer& level) override;
390
392 FaceGroup allActiveFaces() override;
393
395 FaceGroup ownActiveFaces() override;
396
398 FaceGroup innerActiveFaces() override;
399
401 FaceGroup outerActiveFaces() override;
402
403// void readAmrActivator(const XmlNode& mesh_node) override;
404
405 public:
406
407 MeshItemInternalList* meshItemInternalList() override
408 { return &m_item_internal_list; }
409
410 public:
411
412 ISubDomain* subDomain() override { return m_sub_domain; }
413 IParallelMng* parallelMng() override;
414 ITraceMng* traceMng() override { return TraceAccessor::traceMng(); }
415
416 ItemGroupCollection groups() override;
417
418 void prepareForDump() override;
419 void initializeVariables(const XmlNode& init_node) override;
420 ItemGroup findGroup(const String& name) override;
421 ItemGroup findGroup(const String& name,eItemKind ik,bool create_if_needed);
422 void destroyGroups() override;
423
424 NodeGroup findNodeGroup(const String& aname)
425 { return findGroup(aname,IK_Node,false); }
426 EdgeGroup findEdgeGroup(const String& aname)
427 { return findGroup(aname,IK_Edge,false); }
428 FaceGroup findFaceGroup(const String& aname)
429 { return findGroup(aname,IK_Face,false); }
430 CellGroup findCellGroup(const String& aname)
431 { return findGroup(aname,IK_Cell,false); }
432
433 ItemGroup createGroup(const String& aname,const ItemGroup& parent);
434 ItemGroup createGroup(const String& aname,eItemKind ik);
435
437 bool isAmrActivated() const override
438 {
439 return m_is_amr_activated;
440 }
441
442 public:
443
444 IItemFamily* createItemFamily(eItemKind ik,const String& name) override;
445
446 IItemFamily* findItemFamily(eItemKind ik,const String& name,bool create_if_needed,bool register_modifier_if_created) override;
447 IItemFamily* findItemFamily(const String& name,bool throw_exception=true) override;
448 IItemFamilyModifier* findItemFamilyModifier(eItemKind ik,const String& name) override;
449 void addItemFamilyModifier(IItemFamilyModifier*) ;
450
452 {
453 _checkKindRange(ik);
454 return m_item_families[ik];
455 }
456 IItemFamily* nodeFamily() override;
457 IItemFamily* edgeFamily() override;
458 IItemFamily* faceFamily() override;
459 IItemFamily* cellFamily() override;
460
461 IItemFamilyCollection itemFamilies() override
462 {
463 return m_item_families;
464 }
465
466 public:
467
468 bool isDynamic() const override
469 {
470 return m_is_dynamic;
471 }
472
473 void setDynamic(bool v) override
474 {
475 m_is_dynamic = v;
476 }
477
478 void setCheckLevel(Integer level) override;
479
480 Integer checkLevel() const override;
481
482 public:
483
484 void computeTiedInterfaces(const XmlNode& xml_node) override;
485 bool hasTiedInterface() override;
486 TiedInterfaceCollection tiedInterfaces() override;
487 IMeshPartitionConstraintMng* partitionConstraintMng() override;
488 ConstArrayView<TiedInterface*> trueTiedInterfaces();
489
490 public:
491
492 IMeshUtilities* utilities() override;
493 IMeshModifier* modifier() override { return this; }
494 Properties* properties() override { return m_properties; }
495 void synchronizeGroupsAndVariables() override;
496
497 public:
498
499 void defineParentForBuild(IMesh* mesh, ItemGroup group) override;
500 IMesh* parentMesh() const override;
501 ItemGroup parentGroup() const override;
502 void addChildMesh(IMesh* sub_mesh) override;
503 IMeshCollection childMeshes() const override;
504
505 void setOwnersFromCells() override { _setOwnersFromCells(); }
506 IMeshCompactMng* _compactMng() override { return m_mesh_compact_mng; }
508 {
509 return m_connectivity_policy;
510 }
511
512 public:
513
514 DynamicMeshIncrementalBuilder* incrementalBuilder() { return m_mesh_builder; }
515 MeshRefinement* meshRefinement() { return m_mesh_refinement; }
516 void endUpdate(bool update_ghost_layer, bool remove_old_ghost) override;
517
518 public:
519
520 bool useMeshItemFamilyDependencies() const override {return m_use_mesh_item_family_dependencies; }
521 IItemFamilyNetwork* itemFamilyNetwork() override {return m_item_family_network;}
522 IIndexedIncrementalItemConnectivityMng* indexedConnectivityMng() override { return m_indexed_connectivity_mng.get(); }
523
524 public:
525
526 IMeshMng* meshMng() const override { return m_mesh_mng; }
527 IVariableMng* variableMng() const override { return m_variable_mng; }
528 ItemTypeMng* itemTypeMng() const override { return m_item_type_mng; }
529
530 void computeSynchronizeInfos() override;
531
532 public:
533
534 IMeshInitialAllocator* initialAllocator() override { return &m_initial_allocator; }
535 void allocate(UnstructuredMeshAllocateBuildInfo& build_info) override;
536 void allocate(CartesianMeshAllocateBuildInfo& build_info) override;
537
538 public:
539
541 {
542 return m_mesh_events.eventObservable(type);
543 }
544
545 public:
546
547 const MeshKind meshKind() const override { return m_mesh_kind; }
548
549 IMeshInternal* _internalApi() override;
550 IMeshModifierInternal* _modifierInternalApi() override;
551
552 private:
553
554 IMeshUtilities* m_mesh_utilities = nullptr;
555
556 public:
557
558 DynamicMeshIncrementalBuilder* m_mesh_builder = nullptr;
559
560 private:
561
562 DynamicMeshChecker* m_mesh_checker = nullptr;
563 SubMeshTools* m_submesh_tools = nullptr;
565 MeshRefinement* m_mesh_refinement = nullptr;
566 NewItemOwnerBuilder * m_new_item_owner_builder = nullptr;
567 ExtraGhostCellsBuilder* m_extra_ghost_cells_builder = nullptr;
568 ExtraGhostParticlesBuilder* m_extra_ghost_particles_builder = nullptr;
569 InitialAllocator m_initial_allocator;
570 std::unique_ptr<InternalApi> m_internal_api;
571
572 private:
573
575 bool m_is_amr_activated = false;
576 eMeshAMRKind m_amr_type;
577
578 bool m_is_dynamic = false;
579
582
585
588 UniqueArray<IItemFamilyModifier*> m_family_modifiers; // used for item family network
589
590 ObserverPool m_observer_pool;
591 TiedInterfaceMng* m_tied_interface_mng = nullptr;
592 bool m_is_sub_connectivity_set = false;
593 bool m_tied_interface_need_prepare_dump = false;
594
595 MeshPartitionConstraintMng* m_partition_constraint_mng = nullptr;
596 IGhostLayerMng* m_ghost_layer_mng = nullptr;
597 IMeshUniqueIdMng* m_mesh_unique_id_mng = nullptr;
598 IMeshExchangeMng* m_mesh_exchange_mng = nullptr;
599 IMeshCompactMng* m_mesh_compact_mng = nullptr;
600
601#ifdef ACTIVATE_PERF_COUNTER
602 PerfCounterMng<PerfCounter> m_perf_counter;
603#endif
604
605 InternalConnectivityPolicy m_connectivity_policy;
606 MeshPartInfo m_mesh_part_info;
607
608 bool m_use_mesh_item_family_dependencies = false ;
609 IItemFamilyNetwork* m_item_family_network = nullptr;
610 ItemTypeMng* m_item_type_mng = nullptr;
611 std::unique_ptr<IIndexedIncrementalItemConnectivityMng> m_indexed_connectivity_mng;
612 MeshKind m_mesh_kind;
613 bool m_do_not_save_need_compact = false;
614
615 MeshEventsImpl m_mesh_events;
616
617 private:
618
619 void _printMesh(std::ostream& ostr);
620 void _allocateCells(Integer mesh_nb_cell,
623 bool allow_build_face = true);
624
625 const char* _className() const { return "Mesh"; }
626
627 void _allocateCells2(DynamicMeshIncrementalBuilder* mib);
628 void _itemsUniqueIdsToLocalIdsSorted(eItemKind item_kind,ArrayView<Integer> ids);
629 void _prepareForDump();
630 void _prepareForDumpReal();
631 void _readFromDump();
632
633 void _setOwnersFromCells();
634 // Les méthodes _synchronizeXXX ne sont pas récursives sur les sous-maillages
635 void _synchronizeGroupsAndVariables();
636 void _synchronizeGroups();
637 void _synchronizeVariables();
638 void _writeMesh(const String& base_name);
639 void _removeGhostItems() ;
640 // AMR
641 void _removeGhostChildItems();
642 void _removeGhostChildItems2(Array<Int64>& cells_to_coarsen);
643 void _checkAMR() const;
644
645 void _sortInternalReferences();
646 void _finalizeMeshChanged();
647 void _compactItemInternalReferences();
648 void _compactItems(bool do_sort,bool compact_variables_and_groups);
649 void _checkValidItem(ItemInternal* item);
650
651 void _computeSynchronizeInfos();
652 void _computeFamilySynchronizeInfos();
653 void _computeGroupSynchronizeInfos();
654 void _exchangeItems(bool do_compact);
655 void _exchangeItemsNew();
656 void _checkDimension() const;
657 void _checkConnectivity();
658 void _writeCells(const String& filename);
659
660 void _prepareTiedInterfacesForDump();
661 void _readTiedInterfacesFromDump();
662 void _applyTiedInterfaceStructuration(TiedInterface* tied_interface);
663 void _deleteTiedInterfaces();
664
665 void _multipleExchangeItems(Integer nb_exchange,Integer version,bool do_compact);
666 void _addCells(ISerializer* buffer,Int32Array* cells_local_id);
667 void _setSubConnectivity();
668 void _setDimension(Integer dim);
669 void _internalUpdateGhost(bool update_ghost_layer,bool remove_old_ghost);
670 void _internalEndUpdateInit(bool update_sync_info);
671 void _internalEndUpdateResizeVariables();
672 void _internalEndUpdateFinal(bool print_stat);
673
674 void _computeExtraGhostCells();
675 void _computeExtraGhostParticles();
676
677 void _notifyEndUpdateForFamilies();
678 ItemFamily* _createNewFamily(eItemKind kind, const String & name);
679
680 void _saveProperties();
681 void _loadProperties();
682 void _addFamily(ItemFamily* true_family);
683
684 void _buildAndInitFamily(IItemFamily* family);
685 IItemFamilyPolicyMng* _createFamilyPolicyMng(ItemFamily* family);
686 void _applyCompactPolicy(const String& timer_name,
687 std::function<void(IItemFamilyCompactPolicy*)> functor);
688 void _updateGroupsAfterRemove();
689 void _printConnectivityPolicy();
690
691 // Add a dependency (downward adjacencies only) between two family: ie the source family
692 // is built on the target family (ex a cell is build owns its nodes)
693 template <class SourceFamily, class TargetFamily>
695 {
697 String name = String::format("{0}{1}",source_family->name(),target_family->name());
698 auto connectivity = new CType(source_family,target_family,name);
699 m_item_family_network->addDependency(source_family,target_family,connectivity);
700 }
701
702 // Add a relation : source family "sees" target family (ex a face sees its cells). Often upward adjacencies.
703 template <class SourceFamily, class TargetFamily>
705 {
706 typedef typename NewWithLegacyConnectivityType<SourceFamily,TargetFamily>::type CType;
707 String name = String::format("{0}{1}",source_family->name(),target_family->name());
708 auto connectivity = new CType(source_family,target_family,name);
709 m_item_family_network->addRelation(source_family,target_family,connectivity);
710 }
711
712 // Update family dependencies with set connectivities
713 void _updateItemFamilyDependencies(VariableScalarInteger connectivity);
714
715 // Serialize Item
716 void _serializeItems(ISerializer* buffer,Int32ConstArrayView item_local_ids, IItemFamily* item_family);
717 void _deserializeItems(ISerializer* buffer,Int32Array *item_local_ids, IItemFamily* item_family);
718 void _fillSerializer(ISerializer* buffer, std::map<String, Int32UniqueArray>& serializedItems);
719
720};
721
722/*---------------------------------------------------------------------------*/
723/*---------------------------------------------------------------------------*/
724
725} // End namespace Arcane::mesh
726
727/*---------------------------------------------------------------------------*/
728/*---------------------------------------------------------------------------*/
729
730#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:1191
Face d'une maille.
Definition Item.h:944
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:149
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:64
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 Item.h:573
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:41