Arcane  v3.14.10.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-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/* MeshUtils.h (C) 2000-2024 */
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"
18#include "arcane/utils/MemoryUtils.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
119getFaceFromNodesLocal(Node node, Int32ConstArrayView face_nodes_local_id);
120
121/*---------------------------------------------------------------------------*/
122/*---------------------------------------------------------------------------*/
133extern "C++" ARCANE_CORE_EXPORT Face
134getFaceFromNodesUnique(Node node, Int64ConstArrayView face_nodes_unique_id);
135
136/*---------------------------------------------------------------------------*/
137/*---------------------------------------------------------------------------*/
141extern "C++" ARCANE_CORE_EXPORT Int64
142generateHashUniqueId(SmallSpan<const Int64> nodes_unique_id);
143
144/*---------------------------------------------------------------------------*/
145/*---------------------------------------------------------------------------*/
146
154extern "C++" ARCANE_CORE_EXPORT void
156
157/*---------------------------------------------------------------------------*/
158/*---------------------------------------------------------------------------*/
169extern "C++" ARCANE_CORE_EXPORT void
170checkMeshProperties(IMesh* mesh, bool is_sorted, bool has_no_hole, bool check_faces);
171
178extern "C++" ARCANE_CORE_EXPORT void
179writeMeshInfosSorted(IMesh* mesh, const String& file_name);
180
181extern "C++" ARCANE_CORE_EXPORT void
182writeMeshInfos(IMesh* mesh, const String& file_name);
183
189extern "C++" ARCANE_CORE_EXPORT void
190writeMeshConnectivity(IMesh* mesh, const String& file_name);
191
192extern "C++" ARCANE_CORE_EXPORT void
193checkMeshConnectivity(IMesh* mesh, const XmlNode& root_node, bool check_sub_domain);
194
195extern "C++" ARCANE_CORE_EXPORT void
196checkMeshConnectivity(IMesh* mesh, const String& file_name, bool check_sub_domain);
197
203extern "C++" ARCANE_CORE_EXPORT void
204printItems(std::ostream& ostr, const String& name, ItemGroup item_group);
205
214extern "C++" ARCANE_CORE_EXPORT Int64
215printMeshGroupsMemoryUsage(IMesh* mesh, Int32 print_level);
216
218extern "C++" ARCANE_CORE_EXPORT void
219shrinkMeshGroups(IMesh* mesh);
220
227extern "C++" ARCANE_CORE_EXPORT void
228dumpSynchronizerTopologyJSON(IVariableSynchronizer* var_syncer, const String& filename);
229
234extern "C++" ARCANE_CORE_EXPORT void
236
237/*---------------------------------------------------------------------------*/
238/*---------------------------------------------------------------------------*/
255extern "C++" ARCANE_CORE_EXPORT void
256markMeshConnectivitiesAsMostlyReadOnly(IMesh* mesh,RunQueue* q = nullptr,
257 bool do_prefetch = false);
258
259/*---------------------------------------------------------------------------*/
260/*---------------------------------------------------------------------------*/
261/*
262 * \brief Retourne l'entité de la famille \a family de numéro unique \a unique_id.
263 *
264 * Si aucune entité avec cet \a unique_id n'est trouvé, retourne l'entité nulle.
265 *
266 * \pre family->hasUniqueIdMap() == true
267 */
268extern "C++" ARCANE_CORE_EXPORT impl::ItemBase
269findOneItem(IItemFamily* family, Int64 unique_id);
270
271/*---------------------------------------------------------------------------*/
272/*---------------------------------------------------------------------------*/
273/*
274 * \brief Retourne l'entité de la famille \a family de numéro unique \a unique_id.
275 *
276 * Si aucune entité avec cet \a unique_id n'est trouvé, retourne l'entité nulle.
277 *
278 * \pre family->hasUniqueIdMap() == true
279 */
280extern "C++" ARCANE_CORE_EXPORT impl::ItemBase
281findOneItem(IItemFamily* family, ItemUniqueId unique_id);
282
283/*---------------------------------------------------------------------------*/
284/*---------------------------------------------------------------------------*/
288extern "C++" ARCANE_CORE_EXPORT void
289visitGroups(IItemFamily* family, IFunctorWithArgumentT<ItemGroup&>* functor);
290
291/*---------------------------------------------------------------------------*/
292/*---------------------------------------------------------------------------*/
296extern "C++" ARCANE_CORE_EXPORT void
297visitGroups(IMesh* mesh, IFunctorWithArgumentT<ItemGroup&>* functor);
298
299/*---------------------------------------------------------------------------*/
300/*---------------------------------------------------------------------------*/
315template <typename LambdaType> inline void
317{
319 // Il faut caster en le bon type pour que le compilateur utilise la bonne surcharge.
321 visitGroups(family, sf_addr);
322}
323
324/*---------------------------------------------------------------------------*/
325/*---------------------------------------------------------------------------*/
340template <typename LambdaType> inline void
342{
344 // Il faut caster en le bon pour que le compilateur utilise la bonne surcharge.
346 visitGroups(mesh, sf_addr);
347}
348
349namespace impl
350{
351 inline Int64 computeCapacity(Int64 size)
352 {
353 return Arcane::MemoryUtils::impl::computeCapacity(size);
354 }
355} // namespace impl
356
357/*---------------------------------------------------------------------------*/
358/*---------------------------------------------------------------------------*/
375template <typename DataType> inline bool
377{
378 return Arcane::MemoryUtils::checkResizeArrayWithCapacity(array, new_size, force_resize);
379}
380
381/*---------------------------------------------------------------------------*/
382/*---------------------------------------------------------------------------*/
389extern "C++" ARCANE_CORE_EXPORT ItemUniqueId
390getMaxItemUniqueIdCollective(IMesh* mesh);
391
392/*---------------------------------------------------------------------------*/
393/*---------------------------------------------------------------------------*/
413extern "C++" ARCANE_CORE_EXPORT void
414checkUniqueIdsHashCollective(IItemFamily* family, IHashAlgorithm* hash_algo,
415 const String& expected_hash, bool print_hash_value,
416 bool include_ghost);
417
418/*---------------------------------------------------------------------------*/
419/*---------------------------------------------------------------------------*/
423extern "C++" ARCANE_CORE_EXPORT void
424fillUniqueIds(ItemVectorView items,Array<Int64>& uids);
425
426/*---------------------------------------------------------------------------*/
427/*---------------------------------------------------------------------------*/
428
434extern "C++" ARCANE_CORE_EXPORT Ref<IIndexedIncrementalItemConnectivity>
435computeNodeNodeViaEdgeConnectivity(IMesh* mesh, const String& connectivity_name);
436
437/*---------------------------------------------------------------------------*/
438/*---------------------------------------------------------------------------*/
439
440} // namespace Arcane::MeshUtils
441
442/*---------------------------------------------------------------------------*/
443/*---------------------------------------------------------------------------*/
444
445namespace Arcane::mesh_utils
446{
447// Using pour compatibilité avec l'existant.
448// Ces using ont été ajoutés pour la version 3.10 de Arcane (juin 2023).
449// On pourra les rendre obsolètes début 2024.
450using MeshUtils::checkMeshConnectivity;
451using MeshUtils::checkMeshProperties;
452using MeshUtils::computeConnectivityPatternOccurence;
453using MeshUtils::dumpSynchronizerTopologyJSON;
454using MeshUtils::getFaceFromNodesLocal;
455using MeshUtils::getFaceFromNodesUnique;
456using MeshUtils::printItems;
457using MeshUtils::printMeshGroupsMemoryUsage;
458using MeshUtils::removeItemAndKeepOrder;
459using MeshUtils::reorderNodesOfFace;
460using MeshUtils::reorderNodesOfFace2;
461using MeshUtils::shrinkMeshGroups;
462using MeshUtils::writeMeshConnectivity;
463using MeshUtils::writeMeshInfos;
464using MeshUtils::writeMeshInfosSorted;
465using MeshUtils::writeMeshItemInfo;
466
467/*---------------------------------------------------------------------------*/
468/*---------------------------------------------------------------------------*/
469
470} // namespace Arcane::mesh_utils
471
472/*---------------------------------------------------------------------------*/
473/*---------------------------------------------------------------------------*/
474
475#endif
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:376
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 getFaceFromNodesLocal(Node node, Int32ConstArrayView face_nodes_local_id)
Recherche une entité face à partir des numéros locaux 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.
Face getFaceFromNodesUnique(Node node, Int64ConstArrayView face_nodes_unique_id)
Recherche une entité face à partir des numéros uniques de ces noeuds.
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.
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:120
Chaîne de caractères unicode.
-*- 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:615
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:640
ArrayView< Int64 > Int64ArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:609
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:638
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:611