Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MeshUtils2.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/*---------------------------------------------------------------------------*/
8/* MeshUtils2.cc (C) 2000-2024 */
9/* */
10/* Fonctions utilitaires diverses sur le maillage. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
15
16#include "arcane/utils/SmallArray.h"
17
18#include "arcane/core/IMesh.h"
19#include "arcane/core/IItemFamily.h"
20#include "arcane/core/Item.h"
22#include "arcane/core/ItemGroup.h"
23#include "arcane/core/IIndexedIncrementalItemConnectivityMng.h"
24#include "arcane/core/IIndexedIncrementalItemConnectivity.h"
25#include "arcane/core/IIncrementalItemConnectivity.h"
26
27#include <set>
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32namespace Arcane
33{
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
37
38Ref<IIndexedIncrementalItemConnectivity> MeshUtils::
39computeNodeNodeViaEdgeConnectivity(IMesh* mesh, const String& connectivity_name)
40{
41 IItemFamily* node_family = mesh->nodeFamily();
42 auto connectivity_mng = mesh->indexedConnectivityMng();
43 auto connectivity_ref = connectivity_mng->findOrCreateConnectivity(node_family, node_family, connectivity_name);
44 IIncrementalItemConnectivity* cx = connectivity_ref->connectivity();
45
46 // Ensemble des nœuds connectés à un nœud
47 // On utilise un 'std::set' car on veut trier par localId() croissant
48 // pour avoir toujours le même ordre.
49 std::set<Int32> node_set;
50
51 // Pour créer la connectivité, parcours l'ensemble des mailles connectées
52 // nœud et ensuite l'ensemble des arêtes de cette maille.
53 // Si un des deux nœuds de l'arête est mon nœud, l'ajoute
54 // à la connectivité.
55 SmallArray<Int32> connected_items_ids;
56 ENUMERATE_ (Node, inode, node_family->allItems()) {
57 Node node = *inode;
58 NodeLocalId node_lid(node.localId());
59 node_set.clear();
60 for (Cell cell : node.cells()) {
61 const ItemTypeInfo* t = cell.typeInfo();
62 for (Int32 i = 0, n = t->nbLocalEdge(); i < n; ++i) {
64 NodeLocalId node0_lid = cell.nodeId(e.beginNode());
65 NodeLocalId node1_lid = cell.nodeId(e.endNode());
66 if (node0_lid == node_lid)
67 node_set.insert(node1_lid);
68 if (node1_lid == node_lid)
69 node_set.insert(node0_lid);
70 }
71 }
72 // Ajoute les entités au noeud.
73 {
74 connected_items_ids.resize(node_set.size());
75 Int32 index = 0;
76 for (auto x : node_set) {
77 connected_items_ids[index] = x;
78 ++index;
79 }
80 cx->setConnectedItems(node_lid, connected_items_ids);
81 }
82 }
83
84 return connectivity_ref;
85}
86
87/*---------------------------------------------------------------------------*/
88/*---------------------------------------------------------------------------*/
89
90} // namespace Arcane
91
92/*---------------------------------------------------------------------------*/
93/*---------------------------------------------------------------------------*/
Types et macros pour itérer sur les entités du maillage.
#define ENUMERATE_(type, name, group)
Enumérateur générique d'un groupe d'entité
Fonctions utilitaires sur le maillage.
Maille d'un maillage.
Definition Item.h:1178
Interface pour gérer une connectivité incrémentale.
virtual void setConnectedItems(ItemLocalId source_item, Int32ConstArrayView target_local_ids)
Alloue et positionne les entités connectées à source_item.
virtual Ref< IIndexedIncrementalItemConnectivity > findOrCreateConnectivity(IItemFamily *source, IItemFamily *target, const String &name)=0
Cherche ou créé une connectivité.
Interface d'une famille d'entités.
virtual ItemGroup allItems() const =0
Groupe de toutes les entités.
virtual IItemFamily * nodeFamily()=0
Retourne la famille des noeuds.
virtual IIndexedIncrementalItemConnectivityMng * indexedConnectivityMng()=0
Interface du gestionnaire des connectivités incrémentales indexées.
Informations locales sur une arête d'une maille.
Integer endNode() const
Indice local à la maille du sommet extrémité de l'arête.
Integer beginNode() const
Indice local à la maille du sommet origine de l'arête.
Infos sur un type d'entité du maillage.
LocalEdge localEdge(Integer id) const
Connectivité locale de la i-ème arête de la maille.
Integer nbLocalEdge() const
Nombre d'arêtes de l'entité
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:210
Noeud d'un maillage.
Definition Dom.h:204
CellConnectedListViewType cells() const
Liste des mailles du noeud.
Definition Item.h:670
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-