Arcane  v3.16.2.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
Référence de la classe Arcane::UnstructuredMeshUtilities

Fonctions utilitaires sur un maillage. Plus de détails...

#include <arcane/mesh/UnstructuredMeshUtilities.h>

+ Graphe d'héritage de Arcane::UnstructuredMeshUtilities:
+ Graphe de collaboration de Arcane::UnstructuredMeshUtilities:

Fonctions membres publiques

 UnstructuredMeshUtilities (IMesh *mesh)
 
 ~UnstructuredMeshUtilities () override
 Libère les ressources.
 
void changeOwnersFromCells () override
 Positionne les nouveaux propriétaires des noeuds, arêtes et faces à partir des mailles.
 
void localIdsFromConnectivity (eItemKind item_kind, IntegerConstArrayView items_nb_node, Int64ConstArrayView items_connectivity, Int32ArrayView local_ids, bool allow_null) override
 Recherche les identifiants locaux des entités à partir de leur connectivité.
 
void getFacesLocalIdFromConnectivity (ConstArrayView< ItemTypeId > items_type, ConstArrayView< Int64 > items_connectivity, ArrayView< Int32 > local_ids, bool allow_null) override
 Recherche les identifiants locaux des faces à partir de leur connectivité.
 
Real3 computeNormal (const FaceGroup &face_group, const VariableNodeReal3 &nodes_coord) override
 Calcule la normale d'un groupe de face.
 
Real3 computeDirection (const NodeGroup &node_group, const VariableNodeReal3 &nodes_coord, Real3 *n1, Real3 *n2) override
 
void computeAdjency (ItemPairGroup adjency_array, eItemKind link_kind, Integer nb_layer) override
 Calcul des adjacences, rangées dans adjacency_array.
 
bool writeToFile (const String &file_name, const String &service_name) override
 Ecrit le maillage dans un fichier.
 
void partitionAndExchangeMeshWithReplication (IMeshPartitionerBase *partitioner, bool initial_partition) override
 Repartitionne et échange le maillage en gérant la réplication.
 
void mergeNodes (Int32ConstArrayView nodes_local_id, Int32ConstArrayView nodes_to_merge_local_id, bool allow_non_corresponding_face) override
 Fusionne des nœuds.
 
void computeAndSetOwnersForNodes () override
 Détermine les propriétaires des noeuds.
 
void computeAndSetOwnersForFaces () override
 Détermine les propriétaires des faces.
 
void recomputeItemsUniqueIdFromNodesUniqueId () override
 Recalcule les uniqueId() des arêtes, faces et mailles en fonction des uniqueId() des noeuds.
 
- Fonctions membres publiques hérités de Arcane::TraceAccessor
 TraceAccessor (ITraceMng *m)
 Construit un accesseur via le gestionnaire de trace m.
 
 TraceAccessor (const TraceAccessor &rhs)
 Constructeur par recopie.
 
TraceAccessoroperator= (const TraceAccessor &rhs)
 Opérateur de recopie.
 
virtual ~TraceAccessor ()
 Libère les ressources.
 
ITraceMngtraceMng () const
 Gestionnaire de trace.
 
TraceMessage info () const
 Flot pour un message d'information.
 
TraceMessage pinfo () const
 Flot pour un message d'information en parallèle.
 
TraceMessage info (char category) const
 Flot pour un message d'information d'une catégorie donnée.
 
TraceMessage pinfo (char category) const
 Flot pour un message d'information parallèle d'une catégorie donnée.
 
TraceMessage info (bool v) const
 Flot pour un message d'information.
 
TraceMessage warning () const
 Flot pour un message d'avertissement.
 
TraceMessage pwarning () const
 
TraceMessage error () const
 Flot pour un message d'erreur.
 
TraceMessage perror () const
 
TraceMessage log () const
 Flot pour un message de log.
 
TraceMessage plog () const
 Flot pour un message de log.
 
TraceMessage logdate () const
 Flot pour un message de log précédé de la date.
 
TraceMessage fatal () const
 Flot pour un message d'erreur fatale.
 
TraceMessage pfatal () const
 Flot pour un message d'erreur fatale en parallèle.
 
TraceMessageDbg debug (Trace::eDebugLevel=Trace::Medium) const
 Flot pour un message de debug.
 
Trace::eDebugLevel configDbgLevel () const
 Niveau debug du fichier de configuration.
 
TraceMessage info (Int32 verbose_level) const
 Flot pour un message d'information d'un niveau donné
 
TraceMessage linfo () const
 Flot pour un message d'information avec le niveau d'information local à cette instance.
 
TraceMessage linfo (Int32 relative_level) const
 Flot pour un message d'information avec le niveau d'information local à cette instance.
 
void fatalMessage (const StandaloneTraceMessage &o) const
 
- Fonctions membres publiques hérités de Arcane::IMeshUtilities
virtual ~IMeshUtilities ()=default
 Libère les ressources.
 
virtual void computeAdjacency (const ItemPairGroup &adjacency_array, eItemKind link_kind, Integer nb_layer)
 Calcul des adjacences, rangées dans adjacency_array.
 
virtual void mergeNodes (Int32ConstArrayView nodes_local_id, Int32ConstArrayView nodes_to_merge_local_id)
 Fusionne des nœuds.
 

Fonctions membres privées

Real3 _round (Real3 value)
 
Real3 _broadcastFarthestNode (Real distance, const Node &node, const VariableNodeReal3 &nodes_coord)
 

Attributs privés

IMeshm_mesh = nullptr
 
BasicItemPairGroupComputeFunctorm_compute_adjacency_functor = nullptr
 

Membres hérités additionnels

- Fonctions membres protégées hérités de Arcane::TraceAccessor
void _setLocalVerboseLevel (Int32 v)
 
Int32 _localVerboseLevel () const
 

Description détaillée

Fonctions utilitaires sur un maillage.

Définition à la ligne 40 du fichier UnstructuredMeshUtilities.h.

Documentation des constructeurs et destructeur

◆ UnstructuredMeshUtilities()

Arcane::UnstructuredMeshUtilities::UnstructuredMeshUtilities ( IMesh * mesh)
explicit

Définition à la ligne 68 du fichier UnstructuredMeshUtilities.cc.

◆ ~UnstructuredMeshUtilities()

Arcane::UnstructuredMeshUtilities::~UnstructuredMeshUtilities ( )
override

Libère les ressources.

Définition à la ligne 79 du fichier UnstructuredMeshUtilities.cc.

Documentation des fonctions membres

◆ _broadcastFarthestNode()

Real3 Arcane::UnstructuredMeshUtilities::_broadcastFarthestNode ( Real distance,
const Node & node,
const VariableNodeReal3 & nodes_coord )
private

Définition à la ligne 738 du fichier UnstructuredMeshUtilities.cc.

◆ _round()

Real3 Arcane::UnstructuredMeshUtilities::_round ( Real3 value)
private

Définition à la ligne 415 du fichier UnstructuredMeshUtilities.cc.

◆ changeOwnersFromCells()

void Arcane::UnstructuredMeshUtilities::changeOwnersFromCells ( )
overridevirtual

Positionne les nouveaux propriétaires des noeuds, arêtes et faces à partir des mailles.

En considérant que les nouveaux propriétaires des mailles sont connus (et synchronisés), détermine les nouveaux propriétaires des autres entités et les synchronise.

Cette méthode est collective.

Note
Cette méthode nécessite que les informations de synchronisations soient valides. Si on souhaite déterminer les propriétaires des entités sans information préalable, il faut utiliser computeAndSetOwnersForNodes() ou computeAndSetOwnersForFaces().

Implémente Arcane::IMeshUtilities.

Définition à la ligne 88 du fichier UnstructuredMeshUtilities.cc.

Références Arcane::IItemFamily::allItems(), Arcane::Particle::cell(), Arcane::ConnectivityItemVector::connectedItems(), ENUMERATE_EDGE, ENUMERATE_FACE, ENUMERATE_ITEM, ENUMERATE_NODE, ENUMERATE_PARTICLE, Arcane::IK_Cell, Arcane::IK_DoF, Arcane::IK_Edge, Arcane::IK_Face, Arcane::IK_Node, Arcane::IK_Particle, Arcane::TraceAccessor::info(), Arcane::IItemFamily::itemsNewOwner(), Arcane::ItemGroup::own(), et Arcane::Item::owner().

Référencé par partitionAndExchangeMeshWithReplication().

+ Voici le graphe d'appel pour cette fonction :
+ Voici le graphe des appelants de cette fonction :

◆ computeAdjency()

void Arcane::UnstructuredMeshUtilities::computeAdjency ( ItemPairGroup adjacency_array,
eItemKind link_kind,
Integer nb_layer )
overridevirtual

Calcul des adjacences, rangées dans adjacency_array.

Implémente Arcane::IMeshUtilities.

Définition à la ligne 782 du fichier UnstructuredMeshUtilities.cc.

◆ computeAndSetOwnersForFaces()

void Arcane::UnstructuredMeshUtilities::computeAndSetOwnersForFaces ( )
overridevirtual

Détermine les propriétaires des faces.

La détermination se fait en fonction des propriétaires des mailles. Il ne doit pas y avoir de couches de mailles fantômes.

Cette opération est collective.

Implémente Arcane::IMeshUtilities.

Définition à la ligne 903 du fichier UnstructuredMeshUtilities.cc.

◆ computeAndSetOwnersForNodes()

void Arcane::UnstructuredMeshUtilities::computeAndSetOwnersForNodes ( )
overridevirtual

Détermine les propriétaires des noeuds.

La détermination se fait en fonction des propriétaires des mailles. Il ne doit pas y avoir de couches de mailles fantômes.

Cette opération est collective.

Implémente Arcane::IMeshUtilities.

Définition à la ligne 893 du fichier UnstructuredMeshUtilities.cc.

◆ computeDirection()

Real3 Arcane::UnstructuredMeshUtilities::computeDirection ( const NodeGroup & node_group,
const VariableNodeReal3 & nodes_coord,
Real3 * n1,
Real3 * n2 )
overridevirtual

L'algorithme utilisé est le suivant:

  1. calcule le barycentre de l'ensemble des noeuds.
  2. détermine le noeud le plus éloigné de ce barycentre, noté n1
  3. détermine le noeud le plus éloigné de n1, noté n2.
  4. détermine la direction à partir des coordonnées de n1 et n2.

Implémente Arcane::IMeshUtilities.

Définition à la ligne 667 du fichier UnstructuredMeshUtilities.cc.

Références ARCANE_FATAL, Arcane::IParallelMng::barrier(), Arcane::TraceAccessor::debug(), ENUMERATE_NODE, Arcane::math::isZero(), Arcane::ItemGroup::name(), Arcane::Real3::normL2(), Arcane::IParallelMng::reduce(), Arcane::MessagePassing::ReduceSum, Arcane::Real3POD::x, Arcane::Real3POD::y, et Arcane::Real3POD::z.

+ Voici le graphe d'appel pour cette fonction :

◆ computeNormal()

Real3 Arcane::UnstructuredMeshUtilities::computeNormal ( const FaceGroup & face_group,
const VariableNodeReal3 & nodes_coord )
overridevirtual

Calcule la normale d'un groupe de face.

Cette méthode calcule la normale à un groupe de face en considérant que cette surface est un plan. Pour le calcul, l'algorithme essaie de déterminer les noeuds aux extrémités de cette surface, et calcule une normale à partir de ces noeuds. L'orientation de la normale est indéfinie.

Si la surface n'est pas plane, le résultat est indéfini.

L'algorithme actuel ne fonctionne pas toujours sur une surface composée uniquement de triangles.

Cette méthode est collective. L'algorithme utilisé garantit les mêmes résultats en séquentiel et en parallèle.

La variable nodes_coord est utilisée comme coordonnées pour les noeuds. En général, il s'agit de IMesh::nodesCoordinates().

Implémente Arcane::IMeshUtilities.

Définition à la ligne 447 du fichier UnstructuredMeshUtilities.cc.

Références Arcane::Array< DataType >::add(), Arcane::IParallelMng::allGatherVariable(), ARCANE_FATAL, Arcane::Face::boundaryCell(), Arcane::IParallelMng::commRank(), Arcane::IParallelMng::computeMinMaxSum(), Arcane::math::cross(), ENUMERATE_FACE, Arcane::Face::frontCell(), Arcane::TraceAccessor::info(), Arcane::math::isNearlyEqual(), Arcane::Item::isOwn(), Arcane::Face::isSubDomainBoundary(), Arcane::math::isZero(), Arcane::ItemGroup::name(), Arcane::ItemWithNodes::nbNode(), Arcane::ItemWithNodes::node(), Arcane::ItemWithNodes::nodeIds(), Arcane::Real3::normL2(), Arcane::Item::null(), Arcane::Item::owner(), Arcane::IParallelMng::reduce(), Arcane::MessagePassing::ReduceSum, Arcane::math::scaMul(), Arcane::AbstractArray< T >::size(), Arcane::Real3::squareNormL2(), Arcane::math::vecMul(), Arcane::Real3POD::x, Arcane::Real3POD::y, et Arcane::Real3POD::z.

+ Voici le graphe d'appel pour cette fonction :

◆ getFacesLocalIdFromConnectivity()

void Arcane::UnstructuredMeshUtilities::getFacesLocalIdFromConnectivity ( ConstArrayView< ItemTypeId > items_type,
ConstArrayView< Int64 > items_connectivity,
ArrayView< Int32 > local_ids,
bool allow_null )
overridevirtual

Recherche les identifiants locaux des faces à partir de leur connectivité.

Prend en entrée une liste d'entités décrite par les identifiants uniques (Item::uniqueId()) de leurs noeuds et recherche les identifiants locaux (Item::localId()) de ces entités.

Paramètres
items_typetableau des ItemTypeId des entités
items_connectivitytableau contenant les indices uniques des noeuds des entités.
local_idsen retour, contient les identifiants locaux des entités. Le nombre d'éléments de local_ids doit être égal à celui de items_nb_node.

Le tableau items_connectivity contient les identifiants des noeuds des faces, rangés consécutivement. Par exemple, si items_type[0]==IT_Triangle3 et items_type[1]==IT_Quad4, alors items_connectivity[0..2] contiendra les noeuds de l'entité 0, et items_connectivity[3..6] ceux de l'entité 1.

Si allow_null est faux, une erreur fatale est générée si une entité n'est pas trouvée, sinon NULL_ITEM_LOCAL_ID est retourné pour l'entité correspondante.

Implémente Arcane::IMeshUtilities.

Définition à la ligne 343 du fichier UnstructuredMeshUtilities.cc.

Références ARCANE_FATAL, Arcane::ConstArrayView< T >::data(), Arcane::IK_Node, Arcane::Item::localId(), Arcane::ItemTypeInfo::nbLocalNode(), Arcane::Item::null(), Arcane::ArrayView< T >::size(), Arcane::ConstArrayView< T >::size(), Arcane::CheckedConvert::toInt32(), Arcane::StringBuilder::toString(), et Arcane::ItemTypeMng::typeFromId().

+ Voici le graphe d'appel pour cette fonction :

◆ localIdsFromConnectivity()

void Arcane::UnstructuredMeshUtilities::localIdsFromConnectivity ( eItemKind item_kind,
IntegerConstArrayView items_nb_node,
Int64ConstArrayView items_connectivity,
Int32ArrayView local_ids,
bool allow_null )
overridevirtual

Recherche les identifiants locaux des entités à partir de leur connectivité.

Cette méthode n'est implémentée que pour les faces d'ordre 1.

Obsolète
Utiliser getFacesLocalIdFromConnectivity() à la place.

Implémente Arcane::IMeshUtilities.

Définition à la ligne 264 du fichier UnstructuredMeshUtilities.cc.

Références ARCANE_FATAL, Arcane::ConstArrayView< T >::data(), Arcane::IK_Cell, Arcane::IK_Face, Arcane::IK_Node, Arcane::Item::localId(), Arcane::Item::null(), Arcane::Array< DataType >::reserve(), Arcane::Array< DataType >::resize(), Arcane::ArrayView< T >::size(), Arcane::ConstArrayView< T >::size(), Arcane::CheckedConvert::toInt32(), et Arcane::StringBuilder::toString().

+ Voici le graphe d'appel pour cette fonction :

◆ mergeNodes()

void Arcane::UnstructuredMeshUtilities::mergeNodes ( Int32ConstArrayView nodes_local_id,
Int32ConstArrayView nodes_to_merge_local_id,
bool allow_non_corresponding_face )
overridevirtual

Fusionne des nœuds.

Fusionne deux à deux les nœuds de nodes_to_merge_local_id avec ceux de nodes_local_id. Chaque nœud nodes_to_merge_local_id[i] est fusionné avec nodes_local_id[i].

Les nœuds nodes_to_merge_local_id sont détruits après fusion. Les entités reposant entièrement sur ces nœuds fusionnés sont aussi détruites.

Il est interdit de fusionner deux nœuds d'une même maille ou d'une même face (après fusion, une face ou une maille ne peut pas avoir deux fois le même nœud).

Une fois la fusion effectuée, les faces contenant les nœuds fusionnés (nodes_to_merge_local_id) sont détruites. Si allow_non_corresponding_face est faux, alors pour chaque face détruite doit correspondre une face existante avec les nœuds fusionnés (nodes_local_id).

Implémente Arcane::IMeshUtilities.

Définition à la ligne 881 du fichier UnstructuredMeshUtilities.cc.

Références Arcane::mesh::MeshNodeMerger::mergeNodes().

+ Voici le graphe d'appel pour cette fonction :

◆ partitionAndExchangeMeshWithReplication()

void Arcane::UnstructuredMeshUtilities::partitionAndExchangeMeshWithReplication ( IMeshPartitionerBase * partitioner,
bool initial_partition )
overridevirtual

Repartitionne et échange le maillage en gérant la réplication.

Cette méthode effectue un repartitionnement du maillage via l'appel à IMeshPartitioner::partitionMesh(bool) et procède à l'échange des entités via IPrimaryMesh::exchangeItems().

Elle mais gère aussi la réplication en s'assurant que tous les réplica ont le même maillage. Le principe est le suivant:

  • seul le réplica maître effectue le repartitionnement en appelant IMeshPartitioner::partitionMesh() avec partitioner comme partitionneur
  • les valeurs des IItemFamily::itemsNewOwner() sont ensuite synchronisées avec les autres réplicas.
  • les échanges d'entités sont effectués via IPrimaryMesh::exchangeItems().

Cette méthode est collective sur l'ensemble des réplicas.

Précondition
Tous les réplicas doivent avoir le même maillage, c'est à dire que toutes les familles d'entités doivent être identiques à l'exception des familles de particules qui ne sont pas concernées.
Le maillage doit être une instance de IPrimaryMesh.
Postcondition
Tous les réplicas ont le même maillage à l'exception des familles de particules.
Paramètres
partitionerInstance du partitionneur à utiliser
initial_partitionIndique s'il s'agit du partitionnement initial.

Implémente Arcane::IMeshUtilities.

Définition à la ligne 811 du fichier UnstructuredMeshUtilities.cc.

Références Arcane::IParallelMng::barrier(), changeOwnersFromCells(), Arcane::IPrimaryMesh::exchangeItems(), Arcane::platform::getCurrentDateTime(), Arcane::IParallelReplication::hasReplication(), Arcane::TraceAccessor::info(), Arcane::IParallelReplication::isMasterRank(), Arcane::IParallelReplication::masterReplicationRank(), Arcane::IMeshPartitionerBase::notifyEndPartition(), Arcane::IMeshPartitionerBase::partitionMesh(), Arcane::IMeshPartitionerBase::primaryMesh(), Arcane::IParallelReplication::replicaParallelMng(), Arcane::IParallelMng::replication(), et Arcane::IParallelMng::timeStats().

+ Voici le graphe d'appel pour cette fonction :

◆ recomputeItemsUniqueIdFromNodesUniqueId()

void Arcane::UnstructuredMeshUtilities::recomputeItemsUniqueIdFromNodesUniqueId ( )
overridevirtual

Recalcule les uniqueId() des arêtes, faces et mailles en fonction des uniqueId() des noeuds.

Avertissement
Cette méthode est expérimentale et ne doit être utilisée que dans Arcane. Elle suppose que les uniqueId() des entités sont construit à partir de generateHashUniqueId().

Implémente Arcane::IMeshUtilities.

Définition à la ligne 936 du fichier UnstructuredMeshUtilities.cc.

Références ARCANE_CHECK_POINTER, et Arcane::ITraceMng::info().

+ Voici le graphe d'appel pour cette fonction :

◆ writeToFile()

bool Arcane::UnstructuredMeshUtilities::writeToFile ( const String & file_name,
const String & service_name )
overridevirtual

Ecrit le maillage dans un fichier.

Ecrit le maillage dans le fichier file_name en utilisant le service implémentant l'interface 'IMeshWriter' et de nom service_name.

Valeurs retournées
truesi le service spécifié n'est pas disponible.
falsesi tout est ok.

Implémente Arcane::IMeshUtilities.

Définition à la ligne 791 du fichier UnstructuredMeshUtilities.cc.

Références Arcane::ServiceBuilder< InterfaceType >::createReference(), Arcane::ServiceBuilder< InterfaceType >::getServicesNames(), Arcane::SB_AllowNull, et Arcane::TraceAccessor::warning().

+ Voici le graphe d'appel pour cette fonction :

Documentation des données membres

◆ m_compute_adjacency_functor

BasicItemPairGroupComputeFunctor* Arcane::UnstructuredMeshUtilities::m_compute_adjacency_functor = nullptr
private

Définition à la ligne 109 du fichier UnstructuredMeshUtilities.h.

◆ m_mesh

IMesh* Arcane::UnstructuredMeshUtilities::m_mesh = nullptr
private

Définition à la ligne 108 du fichier UnstructuredMeshUtilities.h.


La documentation de cette classe a été générée à partir des fichiers suivants :