Arcane  v3.15.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ExternalPartitionConstraint.cc
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/* ExternalPartitionConstraint.cc (C) 2000-2024 */
9/* */
10/* Informations sur les contraintes pour le partitionnement. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/core/ExternalPartitionConstraint.h"
15
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/NotImplementedException.h"
18
19#include "arcane/core/IMesh.h"
20#include "arcane/core/IMeshPartitionConstraint.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
32addLinkedCells(Int64Array& linked_cells,Int32Array& linked_owners)
33{
34 m_mesh->traceMng()->info()<<"ExternalPartitionConstraint::addLinkedCells(...)";
35
36 // mise en place d'un filtre sur les cell pour éviter de les mettre plusieurs fois dans le tableau cells
37 UniqueArray<Integer> filtre_cell;
38 filtre_cell.resize(m_mesh->allCells().size());
39 Integer marque = 0;
40 filtre_cell.fill(marque);
41
42 for( ItemGroup& group : m_constraints ){
43 // tableau contenant la liste des mailles à maintenir ensemble
44 // cette liste est distribuée sur les processeurs
45 // et comporte comme éléments communs les mailles fantômes
47 if (group.itemKind() == IK_Cell){
48 ENUMERATE_CELL(icell,group.cellGroup()){
49 cells.add(*icell);
50 }
51 }
52 // cette méthode permet de récupérer les mailles dans le cas d'une semi-conformité
53 // on filtre les cell pour ne les sélectionner qu'une fois
54 else if (group.itemKind() == IK_Face){
55 marque++;
56 ENUMERATE_FACE(iface,group.faceGroup()){
57 for( Node node : iface->nodes()){
58 for( Cell cell : node.cells()){
59 if (filtre_cell[cell.localId()]!=marque){
60 cells.add(cell);
61 filtre_cell[cell.localId()]=marque;
62 }
63 }
64 }
65 }
66 }
67 else if (group.itemKind() == IK_Node){
68 ENUMERATE_NODE(inode,group.nodeGroup()){
69 for( Cell cell : inode->cells()){
70 cells.add(cell);
71 }
72 }
73 }
74
75 if (cells.size()==0)
76 continue;
77
78 // on renseigne les contraintes sous forme de couples de mailles
79 Cell cell0 = cells[0];
80 Int32 owner0 = cell0.owner();
81 ItemUniqueId uid0 = cell0.uniqueId();
82
83 for (Integer i=1; i<cells.size(); ++i){
84 ItemUniqueId uidi = cells[i].uniqueId();
85 if (uid0<uidi){
86 linked_cells.add(uid0);
87 linked_cells.add(uidi);
88 }
89 else {
90 linked_cells.add(uidi);
91 linked_cells.add(uid0);
92 }
93 linked_owners.add(owner0);
94 } // end for i=1; i<cells.size()
95
96 m_mesh->traceMng()->info()<<"cells.size() = "<<cells.size();
97
98
99 } // end for iter=m_constraints.begin()
100}
101
102
103/*---------------------------------------------------------------------------*/
104/*---------------------------------------------------------------------------*/
105
106}
107
108/*---------------------------------------------------------------------------*/
109/*---------------------------------------------------------------------------*/
#define ENUMERATE_FACE(name, group)
Enumérateur générique d'un groupe de faces.
#define ENUMERATE_CELL(name, group)
Enumérateur générique d'un groupe de mailles.
#define ENUMERATE_NODE(name, group)
Enumérateur générique d'un groupe de noeuds.
Maille d'un maillage.
Definition Item.h:1178
virtual void addLinkedCells(Int64Array &linked_cells, Int32Array &linked_owners)
Ajoute un ensemble de contraintes sur les mailles.
virtual ITraceMng * traceMng()=0
Gestionnaire de message associé
virtual CellGroup allCells()=0
Groupe de toutes les mailles.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Integer size() const
Nombre d'éléments du groupe.
Definition ItemGroup.h:88
Identifiant unique d'une entité.
Int32 owner() const
Numéro du sous-domaine propriétaire de l'entité
Definition Item.h:229
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
Definition Item.h:216
Noeud d'un maillage.
Definition Item.h:564
Integer size() const
Nombre d'éléments du vecteur.
Classe de base des vecteurs 1D de données.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
void fill(ConstReferenceType value)
Remplit le tableau avec la valeur value.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
virtual TraceMessage info()=0
Flot pour un message d'information.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
@ IK_Node
Entité de maillage de genre noeud.
@ IK_Cell
Entité de maillage de genre maille.
@ IK_Face
Entité de maillage de genre face.