Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
src/arcane/cartesianmesh/FaceDirectionMng.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* FaceDirectionMng.cc (C) 2000-2022 */
9/* */
10/* Infos sur les faces d'une direction X Y ou Z d'un maillage structuré. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CARTESIANMESH_FACEDIRECTIONMNG_H
13#define ARCANE_CARTESIANMESH_FACEDIRECTIONMNG_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ArcaneTypes.h"
18#include "arcane/Item.h"
19#include "arcane/VariableTypedef.h"
20#include "arcane/ItemEnumerator.h"
21
22#include "arcane/cartesianmesh/CartesianMeshGlobal.h"
23#include "arcane/cartesianmesh/CartesianItemDirectionInfo.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33/*!
34 * \ingroup ArcaneCartesianMesh
35 * \brief Infos sur maille avant et après une face suivant une direction.
36 *
37 * Les instances de cette classe sont temporaires et construites via
38 * FaceDirectionMng::face().
39 */
40class ARCANE_CARTESIANMESH_EXPORT DirFace
41{
42 friend FaceDirectionMng;
43
44 private:
45
46 DirFace(Cell n,Cell p) : m_previous(p), m_next(n){}
47
48 public:
49
50 //! Maille avant
51 Cell previousCell() const { return m_previous; }
52 //! Maille avant
53 CellLocalId previousCellId() const { return m_previous.itemLocalId(); }
54 //! Maille après
55 Cell nextCell() const { return m_next; }
56 //! Maille après
57 CellLocalId nextCellId() const { return m_next.itemLocalId(); }
58
59 private:
60
61 Cell m_previous;
62 Cell m_next;
63};
64
65/*---------------------------------------------------------------------------*/
66/*---------------------------------------------------------------------------*/
67/*!
68 * \ingroup ArcaneCartesianMesh
69 * \brief Infos sur maille avant et après une face suivant une direction.
70 *
71 * Les instances de cette classe sont temporaires et construites via
72 * FaceDirectionMng::dirFaceId().
73 */
74class ARCANE_CARTESIANMESH_EXPORT DirFaceLocalId
75{
76 friend FaceDirectionMng;
77
78 private:
79
80 ARCCORE_HOST_DEVICE DirFaceLocalId(CellLocalId n, CellLocalId p)
81 : m_previous(p)
82 , m_next(n)
83 {}
84
85 public:
86
87 //! Maille avant
88 ARCCORE_HOST_DEVICE CellLocalId previousCell() const { return m_previous; }
89 //! Maille avant
90 ARCCORE_HOST_DEVICE CellLocalId previousCellId() const { return m_previous; }
91 //! Maille après
92 ARCCORE_HOST_DEVICE CellLocalId nextCell() const { return m_next; }
93 //! Maille après
94 ARCCORE_HOST_DEVICE CellLocalId nextCellId() const { return m_next; }
95
96 private:
97
98 CellLocalId m_previous;
99 CellLocalId m_next;
100};
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
104/*!
105 * \ingroup ArcaneCartesianMesh
106 * \brief Infos sur les face d'une direction spécifique X,Y ou Z
107 * d'un maillage structuré.
108 */
109class ARCANE_CARTESIANMESH_EXPORT FaceDirectionMng
110{
111 friend CartesianMeshImpl;
112 friend CartesianMeshPatch;
113 class Impl;
114
115 private:
116
118
119 public:
120
121 /*!
122 * \brief Créé une instance vide.
123 *
124 * L'instance n'est pas valide tant que _internalInit() n'a pas été appelé.
125 */
127
128 public:
129
130 //! Face direction correspondant à la face \a f.
132 {
133 return _face(f.localId());
134 }
135 //! Face direction correspondant à la face \a f.
136 DirFace face(FaceLocalId f) const
137 {
138 return _face(f.localId());
139 }
140
141 //! Face direction correspondant à la face \a f.
142 ARCCORE_HOST_DEVICE DirFaceLocalId dirFaceId(FaceLocalId f) const
143 {
144 return _dirFaceId(f);
145 }
146
147 //! Groupe de toutes les faces dans la direction.
148 FaceGroup allFaces() const;
149
150 /*!
151 * \brief Groupe de toutes les faces internes dans la direction.
152 *
153 * Une face est considérée comme interne si sa maille
154 * devant et derrière n'est pas nulle.
155 */
156
157 FaceGroup innerFaces() const;
158
159 /*!
160 * \brief Groupe de toutes les faces externes dans la direction.
161 *
162 * Une face est considérée comme externe si sa maille
163 * devant ou derrière est nulle.
164 */
165 FaceGroup outerFaces() const;
166
167 //! Face direction correspondant à la face \a f.
169 {
170 return _face(f.localId());
171 }
172
173 //! Face direction correspondant à la face \a f.
174 DirFace operator[](FaceLocalId f) const
175 {
176 return _face(f.localId());
177 }
178
179 //! Face direction correspondant à l'itérateur de la face \a iface
181 {
182 return _face(iface.itemLocalId());
183 }
184
185 //! Valeur de la direction
187 {
188 return m_direction;
189 }
190
191 private:
192
193 //! Face direction correspondant à la face de numéro local \a local_id
194 DirFace _face(Int32 local_id) const
195 {
196 ItemDirectionInfo d = m_infos_view[local_id];
197 return DirFace(m_cells[d.m_next_lid], m_cells[d.m_previous_lid]);
198 }
199
200 //! Face direction correspondant à la face de numéro local \a local_id
201 ARCCORE_HOST_DEVICE DirFaceLocalId _dirFaceId(FaceLocalId local_id) const
202 {
203 ItemDirectionInfo d = m_infos_view[local_id];
204 return DirFaceLocalId(CellLocalId(d.m_next_lid), CellLocalId(d.m_previous_lid));
205 }
206
207 private:
208
209 /*!
210 * \internal
211 * \brief Calcule les informations sur les faces associées aux mailles de
212 * la direction \a cell_dm.
213 * Suppose que _internalInit() a été appelé.
214 */
215 void _internalComputeInfos(const CellDirectionMng& cell_dm,
216 const VariableCellReal3& cells_center,
217 const VariableFaceReal3& faces_center);
218
219 /*!
220 * \internal
221 * Initialise l'instance.
222 */
223 void _internalInit(ICartesianMesh* cm, eMeshDirection dir, Integer patch_index);
224
225 /*!
226 * \internal
227 * Détruit les ressources associées à l'instance.
228 */
229 void _internalDestroy();
230
231 /*!
232 * \brief Redimensionne le conteneur contenant les \a ItemDirectionInfo.
233 *
234 * Cela invalide les instances courantes de FaceDirectionMng.
235 */
236 void _internalResizeInfos(Int32 new_size);
237
238 private:
239
240 SmallSpan<ItemDirectionInfo> m_infos_view;
241 CellInfoListView m_cells;
242 eMeshDirection m_direction;
243 Impl* m_p;
244
245 void _computeCellInfos(const CellDirectionMng& cell_dm,
246 const VariableCellReal3& cells_center,
247 const VariableFaceReal3& faces_center);
248 bool _hasFace(Cell cell, Int32 face_local_id) const;
249};
250
251/*---------------------------------------------------------------------------*/
252/*---------------------------------------------------------------------------*/
253
254} // End namespace Arcane
255
256/*---------------------------------------------------------------------------*/
257/*---------------------------------------------------------------------------*/
258
259#endif
260
Infos spécifiques à un maillage cartésien.
Maille d'un maillage.
Definition Item.h:1178
Infos sur maille avant et après une face suivant une direction.
__host__ __device__ CellLocalId previousCellId() const
Maille avant.
__host__ __device__ CellLocalId nextCell() const
Maille après.
__host__ __device__ CellLocalId previousCell() const
Maille avant.
__host__ __device__ CellLocalId nextCellId() const
Maille après.
Infos sur maille avant et après une face suivant une direction.
CellLocalId previousCellId() const
Maille avant.
CellLocalId nextCellId() const
Maille après.
Infos sur les face d'une direction spécifique X,Y ou Z d'un maillage structuré.
DirFace face(Face f) const
Face direction correspondant à la face f.
__host__ __device__ DirFaceLocalId dirFaceId(FaceLocalId f) const
Face direction correspondant à la face f.
DirFace operator[](FaceLocalId f) const
Face direction correspondant à la face f.
DirFace face(FaceLocalId f) const
Face direction correspondant à la face f.
DirFace operator[](Face f) const
Face direction correspondant à la face f.
DirFace operator[](FaceEnumerator iface) const
Face direction correspondant à l'itérateur de la face iface.
eMeshDirection direction() const
Valeur de la direction.
Face d'une maille.
Definition Item.h:932
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:210
Structure interne contenant l'entité devant et derriére dans une direction.
ItemEnumeratorT< Face > FaceEnumerator
Enumérateurs sur des faces.
Definition ItemTypes.h:265
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eMeshDirection
Type de la direction pour un maillage structuré