Fonctions utilitaires sur un maillage. Plus de détails...
#include <arcane/mesh/UnstructuredMeshUtilities.h>
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. | |
![]() | |
TraceAccessor (ITraceMng *m) | |
Construit un accesseur via le gestionnaire de trace m. | |
TraceAccessor (const TraceAccessor &rhs) | |
Constructeur par recopie. | |
TraceAccessor & | operator= (const TraceAccessor &rhs) |
Opérateur de recopie. | |
virtual | ~TraceAccessor () |
Libère les ressources. | |
ITraceMng * | traceMng () 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 |
![]() | |
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 | |
IMesh * | m_mesh = nullptr |
BasicItemPairGroupComputeFunctor * | m_compute_adjacency_functor = nullptr |
Membres hérités additionnels | |
![]() | |
void | _setLocalVerboseLevel (Int32 v) |
Int32 | _localVerboseLevel () const |
Fonctions utilitaires sur un maillage.
Définition à la ligne 40 du fichier UnstructuredMeshUtilities.h.
|
explicit |
Définition à la ligne 68 du fichier UnstructuredMeshUtilities.cc.
|
override |
Libère les ressources.
Définition à la ligne 79 du fichier UnstructuredMeshUtilities.cc.
|
private |
Définition à la ligne 738 du fichier UnstructuredMeshUtilities.cc.
Définition à la ligne 415 du fichier UnstructuredMeshUtilities.cc.
|
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.
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().
|
overridevirtual |
Calcul des adjacences, rangées dans adjacency_array.
Implémente Arcane::IMeshUtilities.
Définition à la ligne 782 du fichier UnstructuredMeshUtilities.cc.
|
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.
|
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.
|
overridevirtual |
L'algorithme utilisé est le suivant:
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.
|
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.
|
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.
items_type | tableau des ItemTypeId des entités |
items_connectivity | tableau contenant les indices uniques des noeuds des entités. |
local_ids | en 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().
|
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.
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().
|
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().
|
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:
Cette méthode est collective sur l'ensemble des réplicas.
partitioner | Instance du partitionneur à utiliser |
initial_partition | Indique 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().
|
overridevirtual |
Recalcule les uniqueId() des arêtes, faces et mailles en fonction des uniqueId() des noeuds.
Implémente Arcane::IMeshUtilities.
Définition à la ligne 936 du fichier UnstructuredMeshUtilities.cc.
Références ARCANE_CHECK_POINTER, et Arcane::ITraceMng::info().
|
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.
true | si le service spécifié n'est pas disponible. |
false | si 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().
|
private |
Définition à la ligne 109 du fichier UnstructuredMeshUtilities.h.
|
private |
Définition à la ligne 108 du fichier UnstructuredMeshUtilities.h.