Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
FaceFamily.h
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/* FaceFamily.h (C) 2000-2024 */
9/* */
10/* Famille de faces. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MESH_FACEFAMILY_H
13#define ARCANE_MESH_FACEFAMILY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/FatalErrorException.h"
18
19#include "arcane/IItemFamilyModifier.h"
20
21#include "arcane/mesh/ItemFamily.h"
22#include "arcane/mesh/ItemInternalConnectivityIndex.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane::mesh
28{
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
33class EdgeFamily;
34class NodeFamily;
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
50class ARCANE_MESH_EXPORT FaceFamily
51: public ItemFamily
53{
54 class TopologyModifier;
61
62 public:
63
64 FaceFamily(IMesh* mesh,const String& name);
65 virtual ~FaceFamily(); //<! Libère les ressources
66
67 public:
68
69 void build() override;
70 virtual void preAllocate(Integer nb_item);
71
72 public:
73
74 // IItemFamilyModifier Interface
75 Item allocOne(Int64 uid,ItemTypeId type_id, MeshInfos& mesh_info) override;
76 Item findOrAllocOne(Int64 uid,ItemTypeId type_id,MeshInfos& mesh_info, bool& is_alloc) override;
77 IItemFamily* family() override { return this; }
78
79 // TODO: DEPRECATED
80 ItemInternal* allocOne(Int64 uid,ItemTypeInfo* type);
81 // TODO: DEPRECATED
82 ItemInternal* findOrAllocOne(Int64 uid,ItemTypeInfo* type,bool& is_alloc);
83
84 Face allocOne(Int64 uid,ItemTypeId type);
85 Face findOrAllocOne(Int64 uid,ItemTypeId type,bool& is_alloc);
86
87 public:
88
90 void addBackCellToFace(Face face,Cell new_cell);
92 void addFrontCellToFace(Face face,Cell new_cell);
94 void removeCellFromFace(Face face,ItemLocalId cell_to_remove_lid);
96 void addEdgeToFace(Face face,Edge new_edge);
98
99 void removeEdgeFromFace(Face face,Edge edge_to_remove);
101 void removeFaceIfNotConnected(Face face);
102
103 void replaceNode(ItemLocalId face,Integer index,ItemLocalId node);
104 void replaceEdge(ItemLocalId face,Integer index,ItemLocalId edge);
105 void replaceFace(ItemLocalId face,Integer index,ItemLocalId face2);
106 void replaceCell(ItemLocalId face,Integer index,ItemLocalId cell);
107
108 void setBackAndFrontCells(Face face,Int32 back_cell_lid,Int32 front_cell_lid);
109
111 void replaceBackCellToFace(Face face,ItemLocalId new_cell);
112 void replaceFrontCellToFace(Face face,ItemLocalId new_cell);
113 void addBackFrontCellsFromParentFace(Face subface,Face face);
114 void replaceBackFrontCellsFromParentFace(Cell subcell,Face subface,Cell cell,Face face);
115 bool isSubFaceInFace(Face subface,Face face) const;
116 bool isChildOnFace(ItemWithNodes child,Face face) const;
117 void subFaces(Face face,Array<ItemInternal*>& subfaces);
118 void allSubFaces(Face face,Array<ItemInternal*>& subfaces);
119 void activeSubFaces(Face face,Array<ItemInternal*>& subfaces);
120 void familyTree (Array<ItemInternal*>& family,Cell item, const bool reset=true) const;
121 void activeFamilyTree (Array<ItemInternal*>& family,Cell item, const bool reset=true) const;
122 void _addChildFaceToFace(Face parent_face, Face child_face);
123 void _addParentFaceToFace(Face parent_face, Face child_face);
124 // OFF AMR
125
134 void setCheckOrientation(bool is_check) { m_check_orientation = is_check; }
135
137 void applyTiedInterface(ITiedInterface* interface);
138
140 void removeTiedInterface(ITiedInterface* interface);
141
142 void setConnectivity(const Integer c);
143
144 void reorientFacesIfNeeded();
145
146 public:
147
148 virtual void computeSynchronizeInfos() override;
149
150 private:
151
152 Integer m_node_prealloc = 0;
153 Integer m_edge_prealloc = 0;
154 Integer m_cell_prealloc = 0;
155 Integer m_mesh_connectivity = 0;
156
158 NodeFamily* m_node_family = nullptr;
159
161 EdgeFamily* m_edge_family = nullptr;
162
164 bool m_check_orientation = true;
165
166 NodeConnectivity* m_node_connectivity = nullptr;
167 EdgeConnectivity* m_edge_connectivity = nullptr;
168 FaceConnectivity* m_face_connectivity = nullptr;
169 CellConnectivity* m_cell_connectivity = nullptr;
170 HParentConnectivity* m_hparent_connectivity = nullptr;
171 HChildConnectivity* m_hchild_connectivity = nullptr;
172
173 bool m_has_face = true;
174
175 private:
176
177 void _addMasterFaceToFace(Face face,Face master_face);
178 void _addSlaveFacesToFace(Face face,Int32ConstArrayView slave_faces_lid);
179 void _removeMasterFaceToFace(Face face);
180 void _removeSlaveFacesToFace(Face face);
181
182 inline void _removeFace(Face face);
183 Real3 _computeFaceNormal(Face face, const SharedVariableNodeReal3& nodes_coord) const;
184 inline void _createOne(ItemInternal* item,Int64 uid,ItemTypeInfo* type);
185 inline void _createOne(ItemInternal* item,Int64 uid,ItemTypeId type_id);
186};
187
188/*---------------------------------------------------------------------------*/
189/*---------------------------------------------------------------------------*/
190
191} // End namespace Arcane::mesh
192
193/*---------------------------------------------------------------------------*/
194/*---------------------------------------------------------------------------*/
195
196#endif
Maille d'un maillage.
Definition Item.h:1178
Arête d'une maille.
Definition Item.h:798
Face d'une maille.
Definition Item.h:932
Interface de modification d'une famille.
Interface d'une famille d'entités.
Interface d'un classe gérant une semi-conformité du maillage.
Structure interne d'une entité de maillage.
Index d'un Item dans une variable.
Definition ItemLocalId.h:40
Type d'une entité (Item).
Definition ItemTypeId.h:32
Infos sur un type d'entité du maillage.
Elément de maillage s'appuyant sur des noeuds (Edge,Face,Cell).
Definition Item.h:714
Classe de base d'un élément de maillage.
Definition Item.h:83
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Famille d'arêtes.
Definition EdgeFamily.h:35
Famille de faces.
Definition FaceFamily.h:53
void setCheckOrientation(bool is_check)
Indique s'il faut vérifier l'orientation des mailles et des faces.
Definition FaceFamily.h:134
Famille d'entités.
Definition ItemFamily.h:76
Classe factorisant des informations sur le maillage.
Definition MeshInfos.h:36
Famille de noeuds.
Definition NodeFamily.h:37
Vue constante d'un tableau de type T.
Chaîne de caractères unicode.