Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
Référence de la classe Arcane::mesh::TiedInterfaceBuilder

Construction des informations d'une interface semi-conforme. Plus de détails...

+ Graphe d'héritage de Arcane::mesh::TiedInterfaceBuilder:
+ Graphe de collaboration de Arcane::mesh::TiedInterfaceBuilder:

Types publics

typedef HashTableMapT< ItemUniqueId, TiedInterfaceNodeInfoNodeInfoList
 
typedef HashTableMapT< ItemUniqueId, TiedInterfaceFaceTiedInterfaceFaceMap
 
typedef HashTableMapEnumeratorT< ItemUniqueId, TiedInterfaceNodeInfoNodeInfoListEnumerator
 
typedef HashTableMapEnumeratorT< ItemUniqueId, TiedInterfaceFaceTiedInterfaceFaceMapEnumerator
 
typedef std::set< TiedInterfaceSortedNodeInfoSortedNodeInfoSet
 
typedef HashTableMapT< ItemUniqueId, TiedInterfaceStructurationInfoStructurationMap
 
typedef HashTableMapEnumeratorT< ItemUniqueId, TiedInterfaceStructurationInfoStructurationMapEnumerator
 

Fonctions membres publiques

 TiedInterfaceBuilder (IMesh *mesh, const FaceGroup &slave_interface, bool use_own, bool is_debug)
 
void setPlanarTolerance (Real tolerance)
 
void computeInterfaceConnections (bool allow_communication)
 Construit les infos sur une interface liée.
 
void computeInterfaceInfos (TiedInterfaceBuilderInfos &infos, bool is_structured)
 
void changeOwners (Int64Array &linked_cells, Int32Array &linked_owers)
 Positionne les liaisons entre mailles.
 
void changeOwnersOld ()
 Migre les mailles sur les liaisons.
 
const FaceGroupmasterInterface () const
 
- Fonctions membres publiques hérités de Arccore::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 privées

GeometricUtilities::ProjectionInfo _findProjection (const TiedInterfaceFace &face, Real3 point)
 Calcule la projection d'un point sur une face.
 
void _searchMasterFaces (Array< ItemUniqueId > &slave_faces_to_process, Array< ItemUniqueId > &remaining_slave_faces)
 
bool _isInsideFace (const TiedInterfaceFace &face, Real3 point)
 
Real3 _computeNormale (const TiedInterfaceFace &face)
 
void _computeMasterInterface ()
 Détermine la surface maitre de l'interface.
 
void _gatherFaces (ConstArrayView< ItemUniqueId > faces_to_send, TiedInterfaceFaceMap &face_map)
 
void _gatherAllNodesInfo ()
 envoie et récupère les informations sur les noeuds de l'interface.
 
void _printFaces (std::ostream &o, TiedInterfaceFaceMap &face_map)
 
void _computeProjectionInfos (TiedInterfaceBuilderInfos &infos, bool is_structured)
 
void _addFaceToList (const Face &face, TiedInterfaceFaceMap &face_map)
 
void _detectStructuration (const TiedInterfaceMasterFace &master_face, StructurationMap &nodes)
 
void _detectStructurationRecursive (Array< ItemUniqueId > &slave_faces_to_process, Array< ItemUniqueId > &remaining_slave_faces, StructurationMap &slave_nodes)
 
void _removeMasterFacesWithNoSlave ()
 Supprime du groupe des faces maîtres les faces qui ne sont connectées à aucune face esclave.
 

Attributs privés

bool m_is_debug
 
IMeshm_mesh
 
VariableNodeReal3 m_nodes_coord
 
TiedInterfaceFaceInfoMng m_face_info_mng
 
NodeInfoList m_nodes_info
 
TiedInterfaceFaceMap m_slave_faces
 
TiedInterfaceFaceMap m_master_faces
 
String m_slave_interface_name
 
FaceGroup m_slave_interface
 
FaceGroup m_master_interface
 
HashTableMapT< ItemUniqueId, ItemUniqueIdm_slave_faces_master_face_uid
 Table indiquant pour chaque face esclave, le uid de la face maitre correspondante.
 
Real m_planar_tolerance
 

Membres hérités additionnels

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

Description détaillée

Construction des informations d'une interface semi-conforme.

L'algorithme actuel présente les limitations suivantes:

  • il ne s'applique qu'aux surfaces composées uniquement de quadrangles en 3D et aux arêtes en 2D.
  • une interface semi-conforme est composée de deux surfaces, l'une appelée esclave et l'autre maitre. La surface esclave contient l'ensemble des faces qui sont le plus maillées. Cette surface est spécifiée par l'utilisateur. La surface maitre est celle contenant les faces les plus grossièrement maillées.

Le but est de calculer l'ensemble des faces maitres et esclaves, pour chaque face maitre la liste de ses faces esclaves et pour chaque noeud de face esclave ses coordonnées iso-barycentrique dans la face maitre correspondante.

Le fonctionnement de l'algorithme est le suivant:

  • on connait l'ensemble des faces esclaves. Il faut déterminer l'ensemble des faces maitres. Pour cela, on parcours toutes les faces esclaves et on marque leurs noeuds. Il suffit ensuite de parcourir toutes les faces externes du maillage et si une face a tous ses noeuds marqués et qu'elle n'est pas esclave, il s'agit d'une face maitre.
  • TODO CONTINUER.

Définition à la ligne 326 du fichier TiedInterface.cc.

Documentation des définitions de type membres

◆ NodeInfoList

◆ NodeInfoListEnumerator

◆ SortedNodeInfoSet

typedef std::set<TiedInterfaceSortedNodeInfo> Arcane::mesh::TiedInterfaceBuilder::SortedNodeInfoSet

Définition à la ligne 334 du fichier TiedInterface.cc.

◆ StructurationMap

◆ StructurationMapEnumerator

◆ TiedInterfaceFaceMap

◆ TiedInterfaceFaceMapEnumerator

Documentation des constructeurs et destructeur

◆ TiedInterfaceBuilder()

Arcane::mesh::TiedInterfaceBuilder::TiedInterfaceBuilder ( IMesh mesh,
const FaceGroup slave_interface,
bool  use_own,
bool  is_debug 
)

Définition à la ligne 386 du fichier TiedInterface.cc.

Documentation des fonctions membres

◆ _addFaceToList()

void Arcane::mesh::TiedInterfaceBuilder::_addFaceToList ( const Face face,
TiedInterfaceFaceMap face_map 
)
private

Définition à la ligne 774 du fichier TiedInterface.cc.

◆ _computeMasterInterface()

void Arcane::mesh::TiedInterfaceBuilder::_computeMasterInterface ( )
private

Détermine la surface maitre de l'interface.

En considérant que le maillage est semi-conforme, cela signifie que tous les noeuds des faces maîtres de l'interface appartiennent à une face esclave. Il suffit donc pour déterminer ces faces maîtres de parcourir la liste des faces esclaves, de marquer les noeuds les noeuds de ces faces. Une face est alors considérée comme maître si l'ensemble de ses noeuds est marqué.

Note
Cet algorithme peut potentiellement retourner plus de faces maîtres qu'il y en a réellement dans le cas où une maille à des soudures sur plusieurs côtés. Cela n'est pas très grave car aucune face esclave ne sera trouvé pour ces faces maîtres et on les supprimera du groupe de faces maitres.

Définition à la ligne 712 du fichier TiedInterface.cc.

Références ARCANE_FATAL, ENUMERATE_FACE, Arcane::IMeshBase::faceFamily(), Arccore::TraceAccessor::info(), Arcane::Item::localId(), Arcane::HashTableMapT< KeyType, ValueType, KeyTraitsType >::lookup(), Arcane::ItemGroup::name(), Arcane::ItemWithNodes::nbNode(), Arcane::ItemWithNodes::nodes(), Arcane::IMeshBase::outerFaces(), Arcane::HashTableMapT< KeyType, ValueType, KeyTraitsType >::resize(), Arcane::ItemGroup::size(), et Arcane::Item::uniqueId().

Référencé par computeInterfaceConnections().

◆ _computeNormale()

Real3 Arcane::mesh::TiedInterfaceBuilder::_computeNormale ( const TiedInterfaceFace face)
private

Définition à la ligne 632 du fichier TiedInterface.cc.

◆ _computeProjectionInfos()

void Arcane::mesh::TiedInterfaceBuilder::_computeProjectionInfos ( TiedInterfaceBuilderInfos infos,
bool  is_structured 
)
private

Définition à la ligne 836 du fichier TiedInterface.cc.

◆ _detectStructuration()

void Arcane::mesh::TiedInterfaceBuilder::_detectStructuration ( const TiedInterfaceMasterFace master_face,
StructurationMap nodes 
)
private

Définition à la ligne 1089 du fichier TiedInterface.cc.

◆ _detectStructurationRecursive()

void Arcane::mesh::TiedInterfaceBuilder::_detectStructurationRecursive ( Array< ItemUniqueId > &  slave_faces_to_process,
Array< ItemUniqueId > &  remaining_slave_faces,
StructurationMap slave_nodes 
)
private

Définition à la ligne 1125 du fichier TiedInterface.cc.

◆ _findProjection()

GeometricUtilities::ProjectionInfo Arcane::mesh::TiedInterfaceBuilder::_findProjection ( const TiedInterfaceFace face,
Real3  point 
)
private

Calcule la projection d'un point sur une face.

En 2D, la face est une arête et la projection est simple.

En 3D, si la face est un triangle, la projection est aussi simple puisqu'il s'agit de la projection sur un plan. Pour une face comportant plus de 3 noeuds, ses noeuds ne sont pas nécessairement coplanaires. On décompose alors la face en triangles dont un des sommets est le barycentre de la face et on calcule la projection du point point sur chacun de ces triangles. On a donc autant de projetés que de triangles. On conserve celui qui est à l'intérieur d'un de ces triangles. Il peut arriver pour des raisons liées au calcul numérique que le point soit bien à l'intérieur de la face mais dans aucun de ses triangles (par exemple s'il est sur une diagonale). Dans ce cas, on prend comme projeté celui qui est le plus proche du point point.

Définition à la ligne 583 du fichier TiedInterface.cc.

Références Arcane::GeometricUtilities::ProjectionInfo::m_distance, et Arcane::GeometricUtilities::ProjectionInfo::m_region.

◆ _gatherAllNodesInfo()

void Arcane::mesh::TiedInterfaceBuilder::_gatherAllNodesInfo ( )
private

envoie et récupère les informations sur les noeuds de l'interface.

Rassemble en parallèle les noeuds et la liste des faces maitres avec lesquelles ils peuvent être connectectés.

Avertissement
Cette méthode ne doit pas être appelée en séquentiel.

Définition à la ligne 1247 du fichier TiedInterface.cc.

Références Arccore::Array< T >::add(), Arcane::IParallelMng::allGather(), Arcane::IParallelMng::barrier(), Arcane::IParallelMng::commSize(), Arcane::DT_Int64, Arcane::DT_Real, Arccore::BasicSerializer::get(), Arccore::BasicSerializer::getInteger(), Arcane::HashTableMapT< KeyType, ValueType, KeyTraitsType >::lookup(), Arccore::ISerializer::ModeGet, Arccore::ISerializer::ModePut, Arcane::IMesh::parallelMng(), Arccore::Array< T >::resize(), Arccore::BasicSerializer::setMode(), et Arccore::AbstractArray< T >::size().

Référencé par computeInterfaceConnections().

◆ _gatherFaces()

◆ _isInsideFace()

bool Arcane::mesh::TiedInterfaceBuilder::_isInsideFace ( const TiedInterfaceFace face,
Real3  point 
)
private

Définition à la ligne 665 du fichier TiedInterface.cc.

◆ _printFaces()

void Arcane::mesh::TiedInterfaceBuilder::_printFaces ( std::ostream &  o,
TiedInterfaceFaceMap face_map 
)
private

Définition à la ligne 1211 du fichier TiedInterface.cc.

◆ _removeMasterFacesWithNoSlave()

void Arcane::mesh::TiedInterfaceBuilder::_removeMasterFacesWithNoSlave ( )
private

Supprime du groupe des faces maîtres les faces qui ne sont connectées à aucune face esclave.

Définition à la ligne 806 du fichier TiedInterface.cc.

Références ENUMERATE_FACE, Arccore::TraceAccessor::info(), m_slave_faces_master_face_uid, Arcane::ItemGroup::name(), Arcane::ItemGroup::removeItems(), et Arcane::Item::uniqueId().

◆ _searchMasterFaces()

void Arcane::mesh::TiedInterfaceBuilder::_searchMasterFaces ( Array< ItemUniqueId > &  slave_faces_to_process,
Array< ItemUniqueId > &  remaining_slave_faces 
)
private

Définition à la ligne 417 du fichier TiedInterface.cc.

◆ changeOwners()

void Arcane::mesh::TiedInterfaceBuilder::changeOwners ( Int64Array linked_cells,
Int32Array linked_owners 
)

Positionne les liaisons entre mailles.

Change le propriétaire de chaque maille liée à une face esclave pour qu'il soit le même que celui de la maille maître associée.

Si une maille a plusieurs faces esclaves connectées à des maîtres, s'assure que toutes ces maitres sont dans le meme sous-domaine. Ajoute à linked_cells la liste des mailles liées et à linked_owners le propriétaire associé.

Définition à la ligne 1511 du fichier TiedInterface.cc.

Références ARCANE_FATAL, Arcane::Face::cell(), Arcane::IMeshBase::cellFamily(), ENUMERATE_FACE, m_slave_faces_master_face_uid, Arcane::Item::owner(), et Arcane::Item::uniqueId().

Référencé par Arcane::mesh::TiedInterfacePartitionConstraint::addLinkedCells().

◆ changeOwnersOld()

void Arcane::mesh::TiedInterfaceBuilder::changeOwnersOld ( )

Migre les mailles sur les liaisons.

Change le propriétaire de chaque maille liée à une face esclave pour qu'il soit le même que celui de la maille maître associée.

NOTE: que faire si une maille a plusieurs faces esclaves connectées à des maîtres qui ne sont pas dans le même sous-domaine ?

NOTE: version obsolete, car ne fonctionnant pas si une maillage a plusieurs soudures

Définition à la ligne 1473 du fichier TiedInterface.cc.

Références ARCANE_FATAL, Arcane::Face::cell(), Arcane::IMeshBase::cellFamily(), ENUMERATE_FACE, m_slave_faces_master_face_uid, et Arcane::Item::uniqueId().

◆ computeInterfaceConnections()

void Arcane::mesh::TiedInterfaceBuilder::computeInterfaceConnections ( bool  allow_communication)

Construit les infos sur une interface liée.

Cette opération est collective si allow_communication est vrai. Si allow_communication est faux, cela signifie que toutes les faces esclaves d'une face maitre sont dans ce sous-domaine.

Définition à la ligne 1563 du fichier TiedInterface.cc.

Références _computeMasterInterface(), _gatherAllNodesInfo(), _gatherFaces(), ARCANE_FATAL, Arcane::arcaneIsCheck(), Arcane::IParallelMng::commRank(), Arccore::TraceAccessor::info(), Arcane::ItemGroup::name(), Arcane::IMesh::parallelMng(), et Arcane::IParallelMng::reduce().

Référencé par Arcane::mesh::TiedInterfacePartitionConstraint::addLinkedCells().

◆ computeInterfaceInfos()

void Arcane::mesh::TiedInterfaceBuilder::computeInterfaceInfos ( TiedInterfaceBuilderInfos infos,
bool  is_structured 
)

Définition à la ligne 1635 du fichier TiedInterface.cc.

◆ masterInterface()

const FaceGroup & Arcane::mesh::TiedInterfaceBuilder::masterInterface ( ) const
inline

Définition à la ligne 345 du fichier TiedInterface.cc.

◆ setPlanarTolerance()

void Arcane::mesh::TiedInterfaceBuilder::setPlanarTolerance ( Real  tolerance)

Définition à la ligne 408 du fichier TiedInterface.cc.

Documentation des données membres

◆ m_face_info_mng

TiedInterfaceFaceInfoMng Arcane::mesh::TiedInterfaceBuilder::m_face_info_mng
private

Définition à la ligne 350 du fichier TiedInterface.cc.

◆ m_is_debug

bool Arcane::mesh::TiedInterfaceBuilder::m_is_debug
private

Définition à la ligne 347 du fichier TiedInterface.cc.

◆ m_master_faces

TiedInterfaceFaceMap Arcane::mesh::TiedInterfaceBuilder::m_master_faces
private

Définition à la ligne 354 du fichier TiedInterface.cc.

◆ m_master_interface

FaceGroup Arcane::mesh::TiedInterfaceBuilder::m_master_interface
private

Définition à la ligne 357 du fichier TiedInterface.cc.

◆ m_mesh

IMesh* Arcane::mesh::TiedInterfaceBuilder::m_mesh
private

Définition à la ligne 348 du fichier TiedInterface.cc.

◆ m_nodes_coord

VariableNodeReal3 Arcane::mesh::TiedInterfaceBuilder::m_nodes_coord
private

Définition à la ligne 349 du fichier TiedInterface.cc.

◆ m_nodes_info

NodeInfoList Arcane::mesh::TiedInterfaceBuilder::m_nodes_info
private

Définition à la ligne 352 du fichier TiedInterface.cc.

◆ m_planar_tolerance

Real Arcane::mesh::TiedInterfaceBuilder::m_planar_tolerance
private

Définition à la ligne 360 du fichier TiedInterface.cc.

◆ m_slave_faces

TiedInterfaceFaceMap Arcane::mesh::TiedInterfaceBuilder::m_slave_faces
private

Définition à la ligne 353 du fichier TiedInterface.cc.

◆ m_slave_faces_master_face_uid

HashTableMapT<ItemUniqueId,ItemUniqueId> Arcane::mesh::TiedInterfaceBuilder::m_slave_faces_master_face_uid
private

Table indiquant pour chaque face esclave, le uid de la face maitre correspondante.

Définition à la ligne 359 du fichier TiedInterface.cc.

Référencé par _removeMasterFacesWithNoSlave(), changeOwners(), et changeOwnersOld().

◆ m_slave_interface

FaceGroup Arcane::mesh::TiedInterfaceBuilder::m_slave_interface
private

Définition à la ligne 356 du fichier TiedInterface.cc.

◆ m_slave_interface_name

String Arcane::mesh::TiedInterfaceBuilder::m_slave_interface_name
private

Définition à la ligne 355 du fichier TiedInterface.cc.


La documentation de cette classe a été générée à partir du fichier suivant :