Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ExternalPartitionConstraint.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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-2023 */
9/* */
10/* Informations sur les contraintes pour le partitionnement. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/IMesh.h"
15#include "arcane/utils/ITraceMng.h"
16#include "arcane/utils/NotImplementedException.h"
17#include "arcane/IMeshPartitionConstraint.h"
18#include "arcane/mesh/ExternalPartitionConstraint.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane::mesh
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29
32{
33 m_mesh->traceMng()->info()<<"ExternalPartitionConstraint::addLinkedCells(...)";
34
35 // mise en place d'un filtre sur les cell pour éviter de les mettre plusieurs fois dans le tableau cells
37 filtre_cell.resize(m_mesh->allCells().size());
38 Integer marque = 0;
39 filtre_cell.fill(marque);
40
41 for( ItemGroup& group : m_constraints ){
42 // tableau contenant la liste des mailles à maintenir ensemble
43 // cette liste est distribuée sur les processeurs
44 // et comporte comme éléments communs les mailles fantômes
46 if (group.itemKind() == IK_Cell){
47 ENUMERATE_CELL(icell,group.cellGroup()){
48 cells.add(*icell);
49 }
50 }
51 // cette méthode permet de récupérer les mailles dans le cas d'une semi-conformité
52 // on filtre les cell pour ne les sélectionner qu'une fois
53 else if (group.itemKind() == IK_Face){
54 marque++;
55 ENUMERATE_FACE(iface,group.faceGroup()){
56 for( Node node : iface->nodes()){
57 for( Cell cell : node.cells()){
58 if (filtre_cell[cell.localId()]!=marque){
59 cells.add(cell);
60 filtre_cell[cell.localId()]=marque;
61 }
62 }
63 }
64 }
65 }
66 else if (group.itemKind() == IK_Node){
67 ENUMERATE_NODE(inode,group.nodeGroup()){
68 for( Cell cell : inode->cells()){
69 cells.add(cell);
70 }
71 }
72 }
73
74 if (cells.size()==0)
75 continue;
76
77 // on renseigne les contraintes sous forme de couples de mailles
78 Cell cell0 = cells[0];
79 Int32 owner0 = cell0.owner();
80 ItemUniqueId uid0 = cell0.uniqueId();
81
82 for (Integer i=1; i<cells.size(); ++i){
83 ItemUniqueId uidi = cells[i].uniqueId();
84 if (uid0<uidi){
85 linked_cells.add(uid0);
86 linked_cells.add(uidi);
87 }
88 else {
89 linked_cells.add(uidi);
90 linked_cells.add(uid0);
91 }
93 } // end for i=1; i<cells.size()
94
95 m_mesh->traceMng()->info()<<"cells.size() = "<<cells.size();
96
97
98 } // end for iter=m_constraints.begin()
99}
100
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
104
105}
106
107/*---------------------------------------------------------------------------*/
108/*---------------------------------------------------------------------------*/
#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.
Tableau d'items de types quelconques.
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.
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é.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Noeud d'un maillage.
Definition Dom.h:204
ITraceMng * traceMng() override
Gestionnaire de message associé
CellGroup allCells() override
Groupe de toutes les mailles.
virtual TraceMessage info()=0
Flot pour un message d'information.
@ IK_Node
Entité de maillage de genre noeud.
@ IK_Cell
Entité de maillage de genre maille.
@ IK_Face
Entité de maillage de genre face.