Fonctions utilitaires sur le maillage. Plus de détails...
#include "arcane/utils/FunctorUtils.h"
#include "arcane/utils/MemoryUtils.h"
#include "arcane/Item.h"
Aller au code source de ce fichier.
Espaces de nommage | |
namespace | Arcane |
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*- | |
Fonctions utilitaires sur le maillage.
Définition dans le fichier MeshUtils.h.
void Arcane::MeshUtils::checkMeshConnectivity | ( | IMesh * | mesh, |
const String & | file_name, | ||
bool | check_sub_domain | ||
) |
Définition à la ligne 1136 du fichier MeshUtils.cc.
void Arcane::MeshUtils::checkMeshConnectivity | ( | IMesh * | mesh, |
const XmlNode & | root_node, | ||
bool | check_sub_domain | ||
) |
Définition à la ligne 1127 du fichier MeshUtils.cc.
void Arcane::MeshUtils::checkMeshProperties | ( | IMesh * | mesh, |
bool | is_sorted, | ||
bool | has_no_hole, | ||
bool | check_faces | ||
) |
Vérifie que le maillage possède certaines propriétés.
Si is_sorted, vérifie que les entités de maillage sont triées par ordre croissant de leur uniqueId(). Si has_no_hole est vrai, vérifie que si le maillage possède n entité d'un type, leur numéro local varie bien de 0 à n-1. Si check_faces est vrai, on vérifie pour les faces. Cette option n'est utilisable que pour les maillages ancienne génération (MeshV1) et sera supprimée dès que cette option ne sera plus utilisée.
Définition à la ligne 1351 du fichier MeshUtils.cc.
Références ARCANE_FATAL, ENUMERATE_ITEM, Arccore::ITraceMng::error(), Arcane::IK_Face, Arcane::IK_Particle, Arcane::Item::localId(), Arcane::IMeshBase::traceMng(), et Arcane::Item::uniqueId().
|
inline |
Redimensionne un tableau qui est indexé par des 'ItemLocalId'.
Le tableau array est redimensionné uniquement si new_size est supérieure à la taille actuelle du tableau ou si force_resize est vrai.
Si le tableau est redimensionné, on réserve une capacité supplémentaire pour éviter de réallouer à chaque fois.
Cette fonction est appelée en général pour les tableaux indexés par un ItemLocalId et donc cette fonction peut être appelée à chaque fois qu'on ajoute une entité au maillage.
true | si un redimensionnement a eu lieu |
false | sinon |
Définition à la ligne 376 du fichier MeshUtils.h.
Références Arcane::MeshUtils::checkResizeArray().
Référencé par Arcane::MeshUtils::checkResizeArray().
void Arcane::MeshUtils::checkUniqueIdsHashCollective | ( | IItemFamily * | family, |
IHashAlgorithm * | hash_algo, | ||
const String & | expected_hash, | ||
bool | print_hash_value, | ||
bool | include_ghost | ||
) |
Vérifie le hash des uniqueId() des entités d'une famille.
Calcule via l'algo hash_algo un hash des uniqueId() des entités d'une famille. Pour ce calcul, le rang 0 récupère l'ensemble des uniqueId() des entités propres de chaque sous-domaine, les trie et calcul le hash sur le tableau trié.
Comme la majorité du travail est effectuée par le rang 0, cette méthode n'est pas très extensible et ne doit donc être utilisée qu'à des fins de test.
expected_hash est la valeur attendue du hash sous forme de caractères hexadécimaux (obtenu via Convert::toHexaString()). Si expected_hash est non nul, compare le résultat avec cette valeur et si elle est différente, lance une exception FatalErrorException.
Cette opération est collective.
Définition à la ligne 1884 du fichier MeshUtils.cc.
Références Arcane::IParallelMng::allGatherVariable(), Arcane::IItemFamily::allItems(), ARCANE_CHECK_POINTER, ARCANE_FATAL, Arccore::String::empty(), ENUMERATE_, Arcane::IItemFamily::fullName(), Arccore::TraceAccessor::info(), Arcane::IItemFamily::name(), Arcane::IItemFamily::parallelMng(), Arcane::Convert::toHexaString(), et Arcane::IItemFamily::traceMng().
|
inline |
Définition à la ligne 351 du fichier MeshUtils.h.
void Arcane::MeshUtils::computeConnectivityPatternOccurence | ( | IMesh * | mesh | ) |
Calcul et affiche les patterns communs dans les connectivités.
\interne
Définition à la ligne 1784 du fichier MeshUtils.cc.
Références Arcane::IMeshBase::allCells(), Arcane::IMeshBase::allFaces(), Arcane::IMeshBase::allNodes(), et ARCANE_CHECK_POINTER.
Ref< IIndexedIncrementalItemConnectivity > Arcane::MeshUtils::computeNodeNodeViaEdgeConnectivity | ( | IMesh * | mesh, |
const String & | connectivity_name | ||
) |
Créé ou recréé une connectivité noeuds-noeuds via les arêtes.
La connectivité aura pour nom connectivity_name.
Définition à la ligne 38 du fichier MeshUtils2.cc.
Références Arcane::ItemTypeInfo::LocalEdge::beginNode(), Arcane::Node::cells(), Arcane::ItemTypeInfo::LocalEdge::endNode(), ENUMERATE_, Arcane::IMesh::indexedConnectivityMng(), Arcane::Item::localId(), et Arcane::IMeshBase::nodeFamily().
void Arcane::MeshUtils::dumpSynchronizerTopologyJSON | ( | IVariableSynchronizer * | var_syncer, |
const String & | filename | ||
) |
Ecrit dans un fichier les informations sur la topologie d'une synchronisation.
Ecrit dans le fichier filename les informations sur la topologie de var_syncer. Cette méthode est collective. Seul le rang 0 écrit l'information de la topologie.
Définition à la ligne 1678 du fichier MeshUtils.cc.
Références Arcane::IParallelMng::commRank(), Arcane::IParallelMng::commSize(), Arcane::IParallelMng::gather(), Arcane::IParallelMng::gatherVariable(), Arccore::TraceAccessor::info(), Arccore::String::localstr(), et Arcane::IParallelMng::traceMng().
void Arcane::MeshUtils::fillUniqueIds | ( | ItemVectorView | items, |
Array< Int64 > & | uids | ||
) |
Rempli uids avec les uniqueId() des entités de view.
Définition à la ligne 1919 du fichier MeshUtils.cc.
Références ENUMERATE_ITEM, et Arcane::ItemVectorView::size().
impl::ItemBase Arcane::MeshUtils::findOneItem | ( | IItemFamily * | family, |
Int64 | unique_id | ||
) |
Définition à la ligne 1828 du fichier MeshUtils.cc.
impl::ItemBase Arcane::MeshUtils::findOneItem | ( | IItemFamily * | family, |
ItemUniqueId | unique_id | ||
) |
Définition à la ligne 1840 du fichier MeshUtils.cc.
Génère un identifiant unique à partir d'une liste d'identifiants de noeuds.
Définition à la ligne 1931 du fichier MeshUtils.cc.
Face Arcane::MeshUtils::getFaceFromNodesLocal | ( | Node | node, |
Int32ConstArrayView | face_nodes_local_id | ||
) |
Recherche une entité face à partir des numéros locaux de ces noeuds.
Recherche la face donnée par la liste ordonnée des numéros locaux de ces noeuds face_nodes_local_id. node doit être le premier noeud de la face. Les noeuds de la face doivent être correctement orientés, comme après un appel à reorderNodesOfFace().
Définition à la ligne 1558 du fichier MeshUtils.cc.
Références Arcane::Node::face(), Arcane::Item::localId(), Arcane::Node::nbFace(), Arcane::ItemWithNodes::nbNode(), et Arcane::ItemWithNodes::node().
Face Arcane::MeshUtils::getFaceFromNodesUnique | ( | Node | node, |
Int64ConstArrayView | face_nodes_unique_id | ||
) |
Recherche une entité face à partir des numéros uniques de ces noeuds.
Recherche la face donnée par la liste ordonnée des numéros unique de ces noeuds face_nodes_unique_id. node doit être le premier noeud de la face. Les noeuds de la face doivent être correctement orientés, comme après un appel à reorderNodesOfFace().
Définition à la ligne 1582 du fichier MeshUtils.cc.
Références Arcane::Node::face(), Arcane::Node::nbFace(), Arcane::ItemWithNodes::nbNode(), Arcane::ItemWithNodes::node(), et Arcane::Item::uniqueId().
ItemUniqueId Arcane::MeshUtils::getMaxItemUniqueIdCollective | ( | IMesh * | mesh | ) |
Retourne le maximum des uniqueId() des entités standards du maillage.
Les entités standards sont les noeuds, mailles, faces et arêtes. L'opération est collective sur mesh->parallelMng().
Définition à la ligne 1869 du fichier MeshUtils.cc.
Références Arcane::IMeshBase::allCells(), Arcane::IMeshBase::allEdges(), Arcane::IMeshBase::allFaces(), Arcane::IMeshBase::allNodes(), et Arcane::IMesh::parallelMng().
void Arcane::MeshUtils::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.
Cette fonction permet d'indiquer que les connectivitées associées aux entités du maillage (Node, Edge, Face et Cell) sont la plupart du temps en lecture. A noter que cela ne concerne pas les particules.
En cas d'utilisation sur accélérateur, cela permet de dupliquer les informations entre l'accélérateur et l'hôte pour éviter des aller-retour multiples si les connectivités sont utilisées sur les deux à la fois.
Si q est non nul et que do_prefetch vaut true, alors VariableUtils::prefetchVariableAsync() est appelé pour chaque variable gérant la connectivité.
Définition à la ligne 1802 du fichier MeshUtils.cc.
Références Arcane::IVariable::hasTag(), Arcane::IVariable::meshHandle(), Arcane::IVariable::setAllocationInfo(), et Arcane::IMesh::variableMng().
void Arcane::MeshUtils::printItems | ( | std::ostream & | ostr, |
const String & | name, | ||
ItemGroup | item_group | ||
) |
Ecrit dans le flux ostr la description des items du groupe item_group.
Pour l'affichage, un nom name est associé.
Définition à la ligne 1394 du fichier MeshUtils.cc.
Références ENUMERATE_ITEM.
Affiche l'utilisation mémoire des groupes du maillage.
Si print_level vaut 0, affiche uniquement l'usage mémoire total. So print_level vaut 1 ou plus, affiche l'usage pour chaque groupe.
En retour, indique la mémoire consommée en octets.
Définition à la ligne 1649 du fichier MeshUtils.cc.
Références Arccore::TraceAccessor::info(), et Arcane::IMeshBase::traceMng().
void Arcane::MeshUtils::removeItemAndKeepOrder | ( | Int32ArrayView | items, |
Int32 | local_id | ||
) |
Supprime une entité en conservant l'ordre.
Supprime l'entité de numéro local local_id de la liste items. Les entités situées après l'entité supprimée sont décalées pour remplir le trou. Si aucune valeur de items ne vaut local_id, une exception est levée.
Définition à la ligne 1606 du fichier MeshUtils.cc.
Références ARCANE_FATAL, et Arccore::ArrayView< T >::size().
bool Arcane::MeshUtils::reorderNodesOfFace | ( | Int64ConstArrayView | before_ids, |
Int64ArrayView | after_ids | ||
) |
Réordonne les noeuds d'une face.
Cette méthode réordonne la liste des noeuds d'une face pour que les propritétés suivantes soient respectées:
Cela permet:
before_ids et to doivent avoir le même nombre d'éléments
before_ids | numéros globaux des noeuds de la face avant renumérotation. |
after_ids | en sortie, numéros globaux des noeuds de la face après renumérotation |
true | si la face change d'orientation lors de la renumérotation |
false | sinon. |
Définition à la ligne 1406 du fichier MeshUtils.cc.
bool Arcane::MeshUtils::reorderNodesOfFace2 | ( | Int64ConstArrayView | nodes_unique_id, |
IntegerArrayView | new_index | ||
) |
Réordonne les noeuds d'une face.
Cette méthode réordonne la liste des noeuds d'une face pour que les propriétés suivantes soient respectées:
Cela permet:
nodes_unique_id et new_index doivent avoir le même nombre d'éléments
nodes_unique_id | numéros uniques des noeuds de la face. |
new_index | en sortie, position des numéros des noeuds après réorientation. |
Par exemple, si une face possède les 4 noeuds de numéros uniques 7 3 2 5, la réorientation donnera le quadruplet (2 3 7 5), soit le tableau d'index suivant (2,1,0,3).
true | si la face change d'orientation lors de la renumérotation |
false | sinon. |
Définition à la ligne 1482 du fichier MeshUtils.cc.
Références Arccore::ConstArrayView< T >::size().
void Arcane::MeshUtils::shrinkMeshGroups | ( | IMesh * | mesh | ) |
Limite au plus juste l'usage mémoire des groupes.
Définition à la ligne 1637 du fichier MeshUtils.cc.
|
inline |
Visite l'ensemble des groupes de family avec la lambda f.
Cette fonction permet d'appliquer un visiteur pour l'ensemble des groupes de la famille family.
Par exemple:
Définition à la ligne 316 du fichier MeshUtils.h.
Références Arcane::MeshUtils::visitGroups().
void Arcane::MeshUtils::visitGroups | ( | IItemFamily * | family, |
IFunctorWithArgumentT< ItemGroup & > * | functor | ||
) |
Visite l'ensemble des groupes de family avec le functor functor.
Définition à la ligne 31 du fichier MeshVisitor.cc.
Références Arcane::IItemFamily::groups().
Référencé par Arcane::MeshUtils::visitGroups(), et Arcane::MeshUtils::visitGroups().
|
inline |
Visite l'ensemble des groupes de mesh avec la lambda f.
Cette fonction permet d'appliquer un visiteur pour l'ensemble des groupes de l'ensemble des familles du maillage mesh
Elle s'utilise comme suit:
Définition à la ligne 341 du fichier MeshUtils.h.
Références Arcane::MeshUtils::visitGroups().
void Arcane::MeshUtils::visitGroups | ( | IMesh * | mesh, |
IFunctorWithArgumentT< ItemGroup & > * | functor | ||
) |
Visite l'ensemble des groupes de mesh avec le functor functor.
Définition à la ligne 43 du fichier MeshVisitor.cc.
Références Arcane::IItemFamily::groups().
Ecrit sur le fichier file_name la connectivité du maillage mesh.
La connectivité de chaque entité arête, face et maille est sauvée.
Définition à la ligne 827 du fichier MeshUtils.cc.
Références Arcane::arcaneCheckArraySize(), Arcane::Node::cells(), ENUMERATE_, ENUMERATE_FACE, Arcane::IMesh::groups(), Arcane::IK_Cell, Arcane::IK_Edge, Arcane::IK_Face, Arcane::IK_Node, Arccore::ITraceMng::info(), Arcane::ItemGroup::isLocalToSubDomain(), Arcane::itemKindName(), Arcane::ItemGroup::name(), Arcane::ItemBase::owner(), Arcane::IMesh::tiedInterfaces(), Arcane::IMeshBase::traceMng(), Arcane::Item::uniqueId(), et Arcane::ItemBase::uniqueId().
Définition à la ligne 691 du fichier MeshUtils.cc.
Ecrit sur le fichier file_name les infos du maillage mesh.
Les identifiants des entités sont triés pour que le maillage soit identique quel que soit la numérotation initiale.
Définition à la ligne 521 du fichier MeshUtils.cc.
Références Arcane::Face::backCell(), Arcane::Edge::cell(), Arcane::Face::cell(), Arcane::IMeshBase::cellFamily(), Arcane::Face::edge(), Arcane::IMeshBase::edgeFamily(), Arcane::Edge::face(), Arcane::IMeshBase::faceFamily(), Arcane::Face::frontCell(), Arcane::IK_Cell, Arcane::IK_Edge, Arcane::IK_Face, Arcane::Item::localId(), Arcane::Edge::nbCell(), Arcane::Face::nbCell(), Arcane::IMeshBase::nbCell(), Arcane::Face::nbEdge(), Arcane::IMeshBase::nbEdge(), Arcane::Edge::nbFace(), Arcane::IMeshBase::nbFace(), Arcane::ItemWithNodes::nbNode(), Arcane::Edge::nbNode(), Arcane::IMeshBase::nbNode(), Arcane::ItemWithNodes::node(), Arcane::IMeshBase::nodeFamily(), et Arcane::IMesh::sharedNodesCoordinates().
void Arcane::MeshUtils::writeMeshItemInfo | ( | ISubDomain * | sd, |
Cell | cell, | ||
bool | depend_info = true |
||
) |
Définition à la ligne 156 du fichier MeshUtils.cc.
void Arcane::MeshUtils::writeMeshItemInfo | ( | ISubDomain * | sd, |
Edge | edge, | ||
bool | depend_info = true |
||
) |
Définition à la ligne 272 du fichier MeshUtils.cc.
void Arcane::MeshUtils::writeMeshItemInfo | ( | ISubDomain * | sd, |
Face | face, | ||
bool | depend_info = true |
||
) |
Définition à la ligne 326 du fichier MeshUtils.cc.
void Arcane::MeshUtils::writeMeshItemInfo | ( | ISubDomain * | sd, |
Node | node, | ||
bool | depend_info = true |
||
) |
Définition à la ligne 218 du fichier MeshUtils.cc.