Arcane  v3.15.3.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
39computeNodeNodeViaEdgeConnectivity(IMesh* mesh, const String& connectivity_name)
40{
43 auto connectivity_ref = connectivity_mng->findOrCreateConnectivity(node_family, node_family, connectivity_name);
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é.
56 ENUMERATE_ (Node, inode, node_family->allItems()) {
57 Node node = *inode;
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) {
63 ItemTypeInfo::LocalEdge e = t->localEdge(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:1191
Interface pour gérer une connectivité incrémentale.
Interface d'une famille d'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.
Infos sur un type d'entité du maillage.
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:219
Noeud d'un maillage.
Definition Item.h:573
CellConnectedListViewType cells() const
Liste des mailles du noeud.
Definition Item.h:680
Référence à une instance.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-