Arcane  v3.15.3.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MeshUtils.h
Aller à la documentation de ce fichier.
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/* MeshUtils.h (C) 2000-2025 */
9/* */
10/* Fonctions utilitaires diverses sur le maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MESHUTILS_H
13#define ARCANE_CORE_MESHUTILS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/FunctorUtils.h"
19
20#include "arcane/Item.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32namespace Arcane
33{
34class XmlNode;
35class IVariableSynchronizer;
36} // namespace Arcane
37
38/*---------------------------------------------------------------------------*/
39/*---------------------------------------------------------------------------*/
40
41namespace Arcane::MeshUtils
42{
43extern "C++" ARCANE_CORE_EXPORT void
44writeMeshItemInfo(ISubDomain*, Cell cell, bool depend_info = true);
45extern "C++" ARCANE_CORE_EXPORT void
46writeMeshItemInfo(ISubDomain*, Node node, bool depend_info = true);
47extern "C++" ARCANE_CORE_EXPORT void
48writeMeshItemInfo(ISubDomain*, Edge edge, bool depend_info = true);
49extern "C++" ARCANE_CORE_EXPORT void
50writeMeshItemInfo(ISubDomain*, Face face, bool depend_info = true);
51
52/*---------------------------------------------------------------------------*/
53/*---------------------------------------------------------------------------*/
74extern "C++" ARCANE_CORE_EXPORT bool
76
77/*---------------------------------------------------------------------------*/
78/*---------------------------------------------------------------------------*/
103extern "C++" ARCANE_CORE_EXPORT bool
105
106/*---------------------------------------------------------------------------*/
107/*---------------------------------------------------------------------------*/
118extern "C++" ARCANE_CORE_EXPORT Face
119getFaceFromNodesLocalId(Node node, Int32ConstArrayView face_nodes_local_id);
120
121ARCANE_DEPRECATED_REASON("Y2025: Use getFaceFromNodesLocalId() instead")
122inline Face
123getFaceFromNodesLocal(Node node, Int32ConstArrayView face_nodes_local_id)
124{
125 return getFaceFromNodesLocalId(node, face_nodes_local_id);
126}
127
128/*---------------------------------------------------------------------------*/
129/*---------------------------------------------------------------------------*/
140extern "C++" ARCANE_CORE_EXPORT Face
141getFaceFromNodesUniqueId(Node node, Int64ConstArrayView face_nodes_unique_id);
142
143ARCANE_DEPRECATED_REASON("Y2025: Use getFaceFromNodesUniqueId() instead")
144inline Face
145getFaceFromNodesUnique(Node node, Int64ConstArrayView face_nodes_unique_id)
146{
147 return getFaceFromNodesUniqueId(node, face_nodes_unique_id);
148}
149
150/*---------------------------------------------------------------------------*/
151/*---------------------------------------------------------------------------*/
155extern "C++" ARCANE_CORE_EXPORT Int64
156generateHashUniqueId(SmallSpan<const Int64> nodes_unique_id);
157
158/*---------------------------------------------------------------------------*/
159/*---------------------------------------------------------------------------*/
160
168extern "C++" ARCANE_CORE_EXPORT void
170
171/*---------------------------------------------------------------------------*/
172/*---------------------------------------------------------------------------*/
184extern "C++" ARCANE_CORE_EXPORT void
185checkMeshProperties(IMesh* mesh, bool is_sorted, bool has_no_hole, bool check_faces);
186
193extern "C++" ARCANE_CORE_EXPORT void
194writeMeshInfosSorted(IMesh* mesh, const String& file_name);
195
196extern "C++" ARCANE_CORE_EXPORT void
197writeMeshInfos(IMesh* mesh, const String& file_name);
198
204extern "C++" ARCANE_CORE_EXPORT void
205writeMeshConnectivity(IMesh* mesh, const String& file_name);
206
207extern "C++" ARCANE_CORE_EXPORT void
208checkMeshConnectivity(IMesh* mesh, const XmlNode& root_node, bool check_sub_domain);
209
210extern "C++" ARCANE_CORE_EXPORT void
211checkMeshConnectivity(IMesh* mesh, const String& file_name, bool check_sub_domain);
212
218extern "C++" ARCANE_CORE_EXPORT void
219printItems(std::ostream& ostr, const String& name, ItemGroup item_group);
220
229extern "C++" ARCANE_CORE_EXPORT Int64
230printMeshGroupsMemoryUsage(IMesh* mesh, Int32 print_level);
231
233extern "C++" ARCANE_CORE_EXPORT void
234shrinkMeshGroups(IMesh* mesh);
235
242extern "C++" ARCANE_CORE_EXPORT void
243dumpSynchronizerTopologyJSON(IVariableSynchronizer* var_syncer, const String& filename);
244
249extern "C++" ARCANE_CORE_EXPORT void
251
252/*---------------------------------------------------------------------------*/
253/*---------------------------------------------------------------------------*/
270extern "C++" ARCANE_CORE_EXPORT void
271markMeshConnectivitiesAsMostlyReadOnly(IMesh* mesh, RunQueue* q = nullptr,
272 bool do_prefetch = false);
273
274/*---------------------------------------------------------------------------*/
275/*---------------------------------------------------------------------------*/
276/*
277 * \brief Retourne l'entité de la famille \a family de numéro unique \a unique_id.
278 *
279 * Si aucune entité avec cet \a unique_id n'est trouvé, retourne l'entité nulle.
280 *
281 * \pre family->hasUniqueIdMap() == true
282 */
283extern "C++" ARCANE_CORE_EXPORT ItemBase
284findOneItem(IItemFamily* family, Int64 unique_id);
285
286/*---------------------------------------------------------------------------*/
287/*---------------------------------------------------------------------------*/
288/*
289 * \brief Retourne l'entité de la famille \a family de numéro unique \a unique_id.
290 *
291 * Si aucune entité avec cet \a unique_id n'est trouvé, retourne l'entité nulle.
292 *
293 * \pre family->hasUniqueIdMap() == true
294 */
295extern "C++" ARCANE_CORE_EXPORT ItemBase
296findOneItem(IItemFamily* family, ItemUniqueId unique_id);
297
298/*---------------------------------------------------------------------------*/
299/*---------------------------------------------------------------------------*/
303extern "C++" ARCANE_CORE_EXPORT void
304visitGroups(IItemFamily* family, IFunctorWithArgumentT<ItemGroup&>* functor);
305
306/*---------------------------------------------------------------------------*/
307/*---------------------------------------------------------------------------*/
311extern "C++" ARCANE_CORE_EXPORT void
312visitGroups(IMesh* mesh, IFunctorWithArgumentT<ItemGroup&>* functor);
313
314/*---------------------------------------------------------------------------*/
315/*---------------------------------------------------------------------------*/
330template <typename LambdaType> inline void
332{
334 // Il faut caster en le bon type pour que le compilateur utilise la bonne surcharge.
336 visitGroups(family, sf_addr);
337}
338
339/*---------------------------------------------------------------------------*/
340/*---------------------------------------------------------------------------*/
355template <typename LambdaType> inline void
357{
359 // Il faut caster en le bon pour que le compilateur utilise la bonne surcharge.
361 visitGroups(mesh, sf_addr);
362}
363
364namespace impl
365{
366 inline Int64 computeCapacity(Int64 size)
367 {
368 return Arcane::MemoryUtils::impl::computeCapacity(size);
369 }
370} // namespace impl
371
372/*---------------------------------------------------------------------------*/
373/*---------------------------------------------------------------------------*/
390template <typename DataType> inline bool
395
396/*---------------------------------------------------------------------------*/
397/*---------------------------------------------------------------------------*/
404extern "C++" ARCANE_CORE_EXPORT ItemUniqueId
405getMaxItemUniqueIdCollective(IMesh* mesh);
406
407/*---------------------------------------------------------------------------*/
408/*---------------------------------------------------------------------------*/
428extern "C++" ARCANE_CORE_EXPORT void
429checkUniqueIdsHashCollective(IItemFamily* family, IHashAlgorithm* hash_algo,
430 const String& expected_hash, bool print_hash_value,
431 bool include_ghost);
432
433/*---------------------------------------------------------------------------*/
434/*---------------------------------------------------------------------------*/
438extern "C++" ARCANE_CORE_EXPORT void
439fillUniqueIds(ItemVectorView items,Array<Int64>& uids);
440
441/*---------------------------------------------------------------------------*/
442/*---------------------------------------------------------------------------*/
443
449extern "C++" ARCANE_CORE_EXPORT Ref<IIndexedIncrementalItemConnectivity>
450computeNodeNodeViaEdgeConnectivity(IMesh* mesh, const String& connectivity_name);
451
452/*---------------------------------------------------------------------------*/
453/*---------------------------------------------------------------------------*/
454
455} // namespace Arcane::MeshUtils
456
457/*---------------------------------------------------------------------------*/
458/*---------------------------------------------------------------------------*/
459
460namespace Arcane::mesh_utils
461{
462// Using pour compatibilité avec l'existant.
463// Ces using ont été ajoutés pour la version 3.10 de Arcane (juin 2023).
464// On pourra les rendre obsolètes début 2024.
465using MeshUtils::checkMeshConnectivity;
466using MeshUtils::checkMeshProperties;
467using MeshUtils::computeConnectivityPatternOccurence;
468using MeshUtils::dumpSynchronizerTopologyJSON;
469using MeshUtils::getFaceFromNodesLocal;
470using MeshUtils::getFaceFromNodesUnique;
471using MeshUtils::printItems;
472using MeshUtils::printMeshGroupsMemoryUsage;
473using MeshUtils::removeItemAndKeepOrder;
474using MeshUtils::reorderNodesOfFace;
475using MeshUtils::reorderNodesOfFace2;
476using MeshUtils::shrinkMeshGroups;
477using MeshUtils::writeMeshConnectivity;
478using MeshUtils::writeMeshInfos;
479using MeshUtils::writeMeshInfosSorted;
480using MeshUtils::writeMeshItemInfo;
481
482/*---------------------------------------------------------------------------*/
483/*---------------------------------------------------------------------------*/
484
485} // namespace Arcane::mesh_utils
486
487/*---------------------------------------------------------------------------*/
488/*---------------------------------------------------------------------------*/
489
490#endif
Fonctions de gestion mémoire et des allocateurs.
void shrinkMeshGroups(IMesh *mesh)
Limite au plus juste l'usage mémoire des groupes.
void dumpSynchronizerTopologyJSON(IVariableSynchronizer *var_syncer, const String &filename)
Ecrit dans un fichier les informations sur la topologie d'une synchronisation.
bool checkResizeArray(Array< DataType > &array, Int64 new_size, bool force_resize)
Redimensionne un tableau qui est indexé par des 'ItemLocalId'.
Definition MeshUtils.h:391
void writeMeshInfosSorted(IMesh *mesh, const String &file_name)
Ecrit sur le fichier file_name les infos du maillage mesh.
Definition MeshUtils.cc:522
void writeMeshConnectivity(IMesh *mesh, const String &file_name)
Ecrit sur le fichier file_name la connectivité du maillage mesh.
Definition MeshUtils.cc:828
void printItems(std::ostream &ostr, const String &name, ItemGroup item_group)
Ecrit dans le flux ostr la description des items du groupe item_group.
bool reorderNodesOfFace(Int64ConstArrayView before_ids, Int64ArrayView after_ids)
Réordonne les noeuds d'une face.
Int64 generateHashUniqueId(SmallSpan< const Int64 > nodes_unique_id)
Génère un identifiant unique à partir d'une liste d'identifiants de noeuds.
Int64 printMeshGroupsMemoryUsage(IMesh *mesh, Int32 print_level)
Affiche l'utilisation mémoire des groupes du maillage.
void visitGroups(IItemFamily *family, IFunctorWithArgumentT< ItemGroup & > *functor)
Visite l'ensemble des groupes de family avec le functor functor.
void removeItemAndKeepOrder(Int32ArrayView items, Int32 local_id)
Supprime une entité en conservant l'ordre.
void checkMeshProperties(IMesh *mesh, bool is_sorted, bool has_no_hole, bool check_faces)
Vérifie que le maillage possède certaines propriétés.
Face getFaceFromNodesUniqueId(Node node, Int64ConstArrayView face_nodes_unique_id)
Recherche une entité face à partir des numéros uniques de ces noeuds.
void markMeshConnectivitiesAsMostlyReadOnly(IMesh *mesh, RunQueue *q=nullptr, bool do_prefetch=false)
Indique que les connectivités du maillages ne seront pas régulièrement modifiées.
void computeConnectivityPatternOccurence(IMesh *mesh)
Calcul et affiche les patterns communs dans les connectivités.
bool reorderNodesOfFace2(Int64ConstArrayView nodes_unique_id, IntegerArrayView new_index)
Réordonne les noeuds d'une face.
Face getFaceFromNodesLocalId(Node node, Int32ConstArrayView face_nodes_local_id)
Recherche une entité face à partir des numéros locaux de ces noeuds.
Interface d'un algorithme de hashage.
Interface d'une famille d'entités.
Identifiant unique d'une entité.
Vue sur un vecteur d'entités.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
Chaîne de caractères unicode.
Int32 checkResizeArrayWithCapacity(Array< DataType > &array, Int64 new_size, bool force_resize)
Redimensionne un tableau en ajoutant une réserve de mémoire.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ArrayView< Integer > IntegerArrayView
Equivalent C d'un tableau à une dimension d'entiers.
Definition UtilsTypes.h:547
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:572
ArrayView< Int64 > Int64ArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:541
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:570
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:543