Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
VariableView.h
Aller à la documentation de ce fichier.
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/* VariableView.h (C) 2000-2023 */
9/* */
10/* Classes gérant les vues sur les variables. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_VARIABLEVIEW_H
13#define ARCANE_VARIABLEVIEW_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
20#include "arcane/core/ItemLocalId.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24/*!
25 * \file VariableView.h
26 *
27 * Ce fichier contient les déclarations des types pour gérer
28 * les vues sur les variables du maillage.
29 *
30 * Les types et méthodes de ce fichier sont obsolètes. La nouvelle version
31 * des vues avec support des accélérateurs est dans le fichier
32 * 'accelerator/Views.h'.
33 */
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
37// TODO: Faire les vues en ReadWrite pour les accesseurs SIMD
38
39namespace Arcane
40{
41
42/*---------------------------------------------------------------------------*/
43/*---------------------------------------------------------------------------*/
44
45// Pour compatibilité avec le code existant
46template<typename DataType>
47using ViewSetter ARCANE_DEPRECATED_REASON("Use 'DataViewSetter' type instead") = DataViewSetter<DataType>;
48template<typename DataType>
49using ViewGetterSetter ARCANE_DEPRECATED_REASON("Use 'DataViewGetterSetter' type instead") = DataViewGetterSetter<DataType>;
50
51/*---------------------------------------------------------------------------*/
52/*---------------------------------------------------------------------------*/
53/*!
54 * \brief Classe de base des vues sur les variables.
55 */
57{
58 public:
59 // Pour l'instant n'utilise pas encore \a var
60 // mais il ne faut pas le supprimer
62};
63
64/*---------------------------------------------------------------------------*/
65/*---------------------------------------------------------------------------*/
66/*!
67 * \brief Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
68 */
69template<typename DataType>
71{
72 public:
73 using ValueType = DataType;
75};
76
77/*---------------------------------------------------------------------------*/
78/*---------------------------------------------------------------------------*/
79/*!
80 * \brief Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
81 */
82template<typename DataType>
84{
85 public:
86 using ValueType = DataType;
87 using DataTypeReturnReference = View1DSetter<DataType>;
88 View1DSetter(Span<DataType> data) : m_data(data){}
89 DataViewSetter<DataType> operator[](Int64 index) const
90 {
91 return DataViewSetter<DataType>(m_data.ptrAt(index));
92 }
93 private:
94 Span<DataType> m_data;
95};
96
97/*---------------------------------------------------------------------------*/
98/*---------------------------------------------------------------------------*/
99/*!
100 * \brief Vue en écriture sur une variable scalaire du maillage.
101 */
102template<typename ItemType, typename Accessor>
104: public VariableViewBase
105{
106 public:
107
108 using DataType = typename Accessor::ValueType;
109 using DataTypeReturnReference = DataType&;
110 using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
111
112 public:
113
115 : VariableViewBase(var), m_values(v.data()),
116 m_size(v.size()){}
117
118 //! Opérateur d'accès vectoriel avec indirection.
120 {
121 return SimdSetter<DataType>(m_values,simd_item.simdLocalIds());
122 }
123
124 //! Opérateur d'accès vectoriel sans indirection.
126 {
127 return SimdDirectSetter<DataType>(m_values+simd_item.baseLocalId());
128 }
129
130 //! Opérateur d'accès pour l'entité \a item
131 Accessor operator[](ItemIndexType i) const
132 {
133 ARCANE_CHECK_AT(i.localId(),m_size);
134 return Accessor(this->m_values + i.localId());
135 }
136
137 //! Opérateur d'accès pour l'entité \a item
138 Accessor value(ItemIndexType i) const
139 {
140 ARCANE_CHECK_AT(i.localId(),m_size);
141 return Accessor(this->m_values + i.localId());
142 }
143
144 //! Positionne la valeur pour l'entité \a item à \a v
145 void setValue(ItemIndexType i,const DataType& v) const
146 {
147 ARCANE_CHECK_AT(i.localId(),m_size);
148 this->m_values[i.localId()] = v;
149 }
150
151 private:
152 DataType* m_values;
153 Int64 m_size;
154};
155
156/*---------------------------------------------------------------------------*/
157/*---------------------------------------------------------------------------*/
158/*!
159 * \brief Vue en lecture sur une variable scalaire du maillage.
160 */
161template<typename ItemType,typename DataType>
163: public VariableViewBase
164{
165 private:
166
167 typedef typename ItemTraitsT<ItemType>::LocalIdType ItemIndexType;
168
169 public:
170
172 : VariableViewBase(var), m_values(v){}
173
174 //! Opérateur d'accès vectoriel avec indirection.
175 typename SimdTypeTraits<DataType>::SimdType
177 {
178 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
179 return SimdType(m_values.data(),simd_item.simdLocalIds());
180 }
181
182 //! Opérateur d'accès vectoriel avec indirection.
183 typename SimdTypeTraits<DataType>::SimdType
185 {
186 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
187 return SimdType(m_values.data()+simd_item.baseLocalId());
188 }
189
190 //! Opérateur d'accès pour l'entité \a item
191 const DataType& operator[](ItemIndexType i) const
192 {
193 return this->m_values[i.localId()];
194 }
195
196 //! Opérateur d'accès pour l'entité \a item
197 const DataType& value(ItemIndexType i) const
198 {
199 return this->m_values[i.localId()];
200 }
201
202 private:
203 Span<const DataType> m_values;
204};
205
206/*---------------------------------------------------------------------------*/
207/*---------------------------------------------------------------------------*/
208/*!
209 * \brief Vue en lecture sur une variable tableau du maillage.
210 */
211template<typename ItemType,typename DataType>
213: public VariableViewBase
214{
215 private:
216
217 typedef typename ItemTraitsT<ItemType>::LocalIdType ItemIndexType;
218
219 public:
220
222 : VariableViewBase(var), m_values(v){}
223
224 //! Opérateur d'accès pour l'entité \a item
225 Span<const DataType> operator[](ItemIndexType i) const
226 {
227 return this->m_values[i.localId()];
228 }
229
230 //! Opérateur d'accès pour l'entité \a item
231 Span<const DataType> value(ItemIndexType i) const
232 {
233 return this->m_values[i.localId()];
234 }
235
236 private:
237 Span2<const DataType> m_values;
238};
239
240/*---------------------------------------------------------------------------*/
241/*---------------------------------------------------------------------------*/
242/*!
243 * \brief Vue en écriture sur une variable tableau du maillage.
244 */
245template<typename ItemType,typename Accessor>
247: public VariableViewBase
248{
249 private:
250
251 using DataType = typename Accessor::ValueType;
252 using DataTypeReturnType = typename Accessor::DataTypeReturnReference;
253 using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
254
255 public:
256
258 : VariableViewBase(var), m_values(v){}
259
260 //! Opérateur d'accès pour l'entité \a item
261 DataTypeReturnType operator[](ItemIndexType i) const
262 {
263 return DataTypeReturnType(this->m_values[i.localId()]);
264 }
265
266 //! Opérateur d'accès pour l'entité \a item
267 Span<DataType> value(ItemIndexType i) const
268 {
269 return DataTypeReturnType(this->m_values[i.localId()]);
270 }
271
272 private:
273 Span2<DataType> m_values;
274};
275
276/*---------------------------------------------------------------------------*/
277/*---------------------------------------------------------------------------*/
278/*!
279 * \brief Vue en écriture sur une variable scalaire de type 'RealN' du maillage.
280
281 Cette classe spécialise les vues modifiable pour les réels 'Real2', 'Real3',
282 'Real2x2' et 'Real3x3'. La spécialisation s'assure qu'on ne puisse pas
283 modifier uniquement une composante de ces vecteurs de réels. Par exemple:
284
285 \code
286 VariableNodeReal3View force_view = ...;
287 Node node = ...;
288
289 // OK:
290 force_view[node] = Real3(x,y,z);
291
292 // Interdit:
293 // force_view[node].x = ...;
294
295 \endcode
296*/
297template<typename ItemType,typename Accessor>
299: public VariableViewBase
300{
301 public:
302
303 using DataType = typename Accessor::ValueType;
304 using DataTypeReturnReference = DataType&;
305 using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
306
307 public:
308
309 //! Construit la vue
311 : VariableViewBase(var), m_values(v.data()), m_size(v.size()){}
312
313 //! Opérateur d'accès vectoriel avec indirection.
315 {
316 return SimdSetter<DataType>(m_values,simd_item.simdLocalIds());
317 }
318
319 //! Opérateur d'accès vectoriel sans indirection.
321 {
322 return SimdDirectSetter<DataType>(m_values+simd_item.baseLocalId());
323 }
324
325 //! Opérateur d'accès pour l'entité \a item
326 Accessor operator[](ItemIndexType item) const
327 {
328 ARCANE_CHECK_AT(item.localId(),m_size);
329 return Accessor(this->m_values+item.localId());
330 }
331
332 //! Opérateur d'accès pour l'entité \a item
333 Accessor value(ItemIndexType item) const
334 {
335 ARCANE_CHECK_AT(item.localId(),m_size);
336 return Accessor(this->m_values+item.localId());
337 }
338
339 //! Positionne la valeur pour l'entité \a item à \a v
340 void setValue(ItemIndexType item,const DataType& v) const
341 {
342 ARCANE_CHECK_AT(item.localId(),m_size);
343 this->m_values[item.localId()] = v;
344 }
345
346 private:
347 DataType* m_values;
348 Int64 m_size;
349};
350
351/*---------------------------------------------------------------------------*/
352/*---------------------------------------------------------------------------*/
353/*!
354 * \brief Vue en écriture.
355 */
356template<typename ItemType,typename DataType> auto
362
363/*!
364 * \brief Vue en écriture.
365 */
366template<typename ItemType> auto
372
373/*!
374 * \brief Vue en écriture.
375 */
376template<typename ItemType> auto
382
383/*!
384 * \brief Vue en écriture.
385 */
386template<typename ItemType,typename DataType> auto
392
393/*---------------------------------------------------------------------------*/
394/*---------------------------------------------------------------------------*/
395/*!
396 * \brief Vue en lecture/écriture.
397 */
398template<typename ItemType,typename DataType> auto
404
405/*!
406 * \brief Vue en lecture/écriture.
407 */
408template<typename ItemType> auto
414
415/*!
416 * \brief Vue en lecture/écriture.
417 */
418template<typename ItemType> auto
424
425/*!
426 * \brief Vue en lecture/écriture.
427 */
428template<typename ItemType,typename DataType> auto
434
435/*---------------------------------------------------------------------------*/
436/*---------------------------------------------------------------------------*/
437/*!
438 * \brief Vue en lecture.
439 */
440template<typename ItemType,typename DataType> auto
445
446/*!
447 * \brief Vue en lecture.
448 */
449template<typename ItemType,typename DataType> auto
454
455/*---------------------------------------------------------------------------*/
456/*---------------------------------------------------------------------------*/
457
458typedef ItemVariableScalarInViewT<Node,Byte> VariableNodeByteInView;
459typedef ItemVariableScalarInViewT<Edge,Byte> VariableEdgeByteInView;
460typedef ItemVariableScalarInViewT<Face,Byte> VariableFaceByteInView;
461typedef ItemVariableScalarInViewT<Cell,Byte> VariableCellByteInView;
462typedef ItemVariableScalarInViewT<Particle,Byte> VariableParticleByteInView;
463
464typedef ItemVariableScalarInViewT<Node,Int16> VariableNodeInt16InView;
465typedef ItemVariableScalarInViewT<Edge,Int16> VariableEdgeInt16InView;
466typedef ItemVariableScalarInViewT<Face,Int16> VariableFaceInt16InView;
467typedef ItemVariableScalarInViewT<Cell,Int16> VariableCellInt16InView;
468typedef ItemVariableScalarInViewT<Particle,Int16> VariableParticleInt16InView;
469
470typedef ItemVariableScalarInViewT<Node,Int32> VariableNodeInt32InView;
471typedef ItemVariableScalarInViewT<Edge,Int32> VariableEdgeInt32InView;
472typedef ItemVariableScalarInViewT<Face,Int32> VariableFaceInt32InView;
473typedef ItemVariableScalarInViewT<Cell,Int32> VariableCellInt32InView;
474typedef ItemVariableScalarInViewT<Particle,Int32> VariableParticleInt32InView;
475
476typedef ItemVariableScalarInViewT<Node,Int64> VariableNodeInt64InView;
477typedef ItemVariableScalarInViewT<Edge,Int64> VariableEdgeInt64InView;
478typedef ItemVariableScalarInViewT<Face,Int64> VariableFaceInt64InView;
479typedef ItemVariableScalarInViewT<Cell,Int64> VariableCellInt64InView;
480typedef ItemVariableScalarInViewT<Particle,Int64> VariableParticleInt64InView;
481
482typedef ItemVariableScalarInViewT<Node,Real> VariableNodeRealInView;
483typedef ItemVariableScalarInViewT<Edge,Real> VariableEdgeRealInView;
484typedef ItemVariableScalarInViewT<Face,Real> VariableFaceRealInView;
485typedef ItemVariableScalarInViewT<Cell,Real> VariableCellRealInView;
486typedef ItemVariableScalarInViewT<Particle,Real> VariableParticleRealInView;
487
488typedef ItemVariableScalarInViewT<Node,Real2> VariableNodeReal2InView;
489typedef ItemVariableScalarInViewT<Edge,Real2> VariableEdgeReal2InView;
490typedef ItemVariableScalarInViewT<Face,Real2> VariableFaceReal2InView;
491typedef ItemVariableScalarInViewT<Cell,Real2> VariableCellReal2InView;
492typedef ItemVariableScalarInViewT<Particle,Real2> VariableParticleReal2InView;
493
494typedef ItemVariableScalarInViewT<Node,Real3> VariableNodeReal3InView;
495typedef ItemVariableScalarInViewT<Edge,Real3> VariableEdgeReal3InView;
496typedef ItemVariableScalarInViewT<Face,Real3> VariableFaceReal3InView;
497typedef ItemVariableScalarInViewT<Cell,Real3> VariableCellReal3InView;
498typedef ItemVariableScalarInViewT<Particle,Real3> VariableParticleReal3InView;
499
500/*---------------------------------------------------------------------------*/
501/*---------------------------------------------------------------------------*/
502
503typedef ItemVariableScalarOutViewT<Node,DataViewSetter<Byte>> VariableNodeByteOutView;
504typedef ItemVariableScalarOutViewT<Edge,DataViewSetter<Byte>> VariableEdgeByteOutView;
505typedef ItemVariableScalarOutViewT<Face,DataViewSetter<Byte>> VariableFaceByteOutView;
506typedef ItemVariableScalarOutViewT<Cell,DataViewSetter<Byte>> VariableCellByteOutView;
507typedef ItemVariableScalarOutViewT<Particle,DataViewSetter<Byte>> VariableParticleByteOutView;
508
509typedef ItemVariableScalarOutViewT<Node,DataViewSetter<Int16>> VariableNodeInt16OutView;
510typedef ItemVariableScalarOutViewT<Edge,DataViewSetter<Int16>> VariableEdgeInt16OutView;
511typedef ItemVariableScalarOutViewT<Face,DataViewSetter<Int16>> VariableFaceInt16OutView;
512typedef ItemVariableScalarOutViewT<Cell,DataViewSetter<Int16>> VariableCellInt16OutView;
513typedef ItemVariableScalarOutViewT<Particle,DataViewSetter<Int16>> VariableParticleInt16OutView;
514
515typedef ItemVariableScalarOutViewT<Node,DataViewSetter<Int32>> VariableNodeInt32OutView;
516typedef ItemVariableScalarOutViewT<Edge,DataViewSetter<Int32>> VariableEdgeInt32OutView;
517typedef ItemVariableScalarOutViewT<Face,DataViewSetter<Int32>> VariableFaceInt32OutView;
518typedef ItemVariableScalarOutViewT<Cell,DataViewSetter<Int32>> VariableCellInt32OutView;
519typedef ItemVariableScalarOutViewT<Particle,DataViewSetter<Int32>> VariableParticleInt32OutView;
520
521typedef ItemVariableScalarOutViewT<Node,DataViewSetter<Int64>> VariableNodeInt64OutView;
522typedef ItemVariableScalarOutViewT<Edge,DataViewSetter<Int64>> VariableEdgeInt64OutView;
523typedef ItemVariableScalarOutViewT<Face,DataViewSetter<Int64>> VariableFaceInt64OutView;
524typedef ItemVariableScalarOutViewT<Cell,DataViewSetter<Int64>> VariableCellInt64OutView;
525typedef ItemVariableScalarOutViewT<Particle,DataViewSetter<Int64>> VariableParticleInt64OutView;
526
527typedef ItemVariableScalarOutViewT<Node,DataViewSetter<Real>> VariableNodeRealOutView;
528typedef ItemVariableScalarOutViewT<Edge,DataViewSetter<Real>> VariableEdgeRealOutView;
529typedef ItemVariableScalarOutViewT<Face,DataViewSetter<Real>> VariableFaceRealOutView;
530typedef ItemVariableScalarOutViewT<Cell,DataViewSetter<Real>> VariableCellRealOutView;
531typedef ItemVariableScalarOutViewT<Particle,DataViewSetter<Real>> VariableParticleRealOutView;
532
533typedef ItemVariableRealNScalarOutViewT<Node,DataViewSetter<Real2>> VariableNodeReal2OutView;
534typedef ItemVariableRealNScalarOutViewT<Edge,DataViewSetter<Real2>> VariableEdgeReal2OutView;
535typedef ItemVariableRealNScalarOutViewT<Face,DataViewSetter<Real2>> VariableFaceReal2OutView;
536typedef ItemVariableRealNScalarOutViewT<Cell,DataViewSetter<Real2>> VariableCellReal2OutView;
537typedef ItemVariableRealNScalarOutViewT<Particle,DataViewSetter<Real2>> VariableParticleReal2OutView;
538
539typedef ItemVariableRealNScalarOutViewT<Node,DataViewSetter<Real3>> VariableNodeReal3OutView;
540typedef ItemVariableRealNScalarOutViewT<Edge,DataViewSetter<Real3>> VariableEdgeReal3OutView;
541typedef ItemVariableRealNScalarOutViewT<Face,DataViewSetter<Real3>> VariableFaceReal3OutView;
542typedef ItemVariableRealNScalarOutViewT<Cell,DataViewSetter<Real3>> VariableCellReal3OutView;
543typedef ItemVariableRealNScalarOutViewT<Particle,DataViewSetter<Real3>> VariableParticleReal3OutView;
544
545/*---------------------------------------------------------------------------*/
546/*---------------------------------------------------------------------------*/
547
548} // End namespace Arcane
549
550/*---------------------------------------------------------------------------*/
551/*---------------------------------------------------------------------------*/
552
553#endif
554
Déclarations de types sur les entités.
Classe pour accéder à un élément d'une vue en lecture/écriture.
Definition DataView.h:245
Classe pour accéder à un élément d'une vue en écriture.
Definition DataView.h:62
Vue en lecture sur une variable tableau du maillage.
Span< const DataType > value(ItemIndexType i) const
Opérateur d'accès pour l'entité item.
Span< const DataType > operator[](ItemIndexType i) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable tableau du maillage.
Span< DataType > value(ItemIndexType i) const
Opérateur d'accès pour l'entité item.
DataTypeReturnType operator[](ItemIndexType i) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable scalaire de type 'RealN' du maillage.
ItemVariableRealNScalarOutViewT(IVariable *var, Span< DataType > v)
Construit la vue.
void setValue(ItemIndexType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
Accessor operator[](ItemIndexType item) const
Opérateur d'accès pour l'entité item.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
Accessor value(ItemIndexType item) const
Opérateur d'accès pour l'entité item.
Vue en lecture sur une variable scalaire du maillage.
SimdTypeTraits< DataType >::SimdType operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
const DataType & value(ItemIndexType i) const
Opérateur d'accès pour l'entité item.
const DataType & operator[](ItemIndexType i) const
Opérateur d'accès pour l'entité item.
SimdTypeTraits< DataType >::SimdType operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
Vue en écriture sur une variable scalaire du maillage.
void setValue(ItemIndexType i, const DataType &v) const
Positionne la valeur pour l'entité item à v.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
Accessor operator[](ItemIndexType i) const
Opérateur d'accès pour l'entité item.
Accessor value(ItemIndexType i) const
Opérateur d'accès pour l'entité item.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
Variable tableau sur un type d'entité du maillage.
Variable scalaire sur un type d'entité du maillage.
Objet permettant de positionner les valeurs d'un vecteur SIMD.
Definition SimdItem.h:351
Index vectoriel sans indirection pour un type d'entité
Definition SimdItem.h:188
Index vectoriel avec indirection pour un type d'entité. TODO: stocker les index dans un registre vect...
Definition SimdItem.h:166
const SimdIndexType &ARCANE_RESTRICT simdLocalIds() const
Liste des numéros locaux des entités de l'instance.
Definition SimdItem.h:176
IVariable * variable() const
Variable associée.
Classe de base des vues sur les variables.
Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
Vue pour un tableau 2D dont la taille est un 'Int64'.
Definition Span2.h:301
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Definition Span.h:209
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
Definition Span.h:419
constexpr __host__ __device__ pointer ptrAt(SizeType index) const
Addresse du index-ème élément.
Definition Span.h:240
Vue d'un tableau d'éléments de type T.
Definition Span.h:510
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
auto viewOut(MeshVariableScalarRefT< ItemType, DataType > &var)
Vue en écriture.
auto viewIn(const MeshVariableScalarRefT< ItemType, DataType > &var)
Vue en lecture.
auto viewInOut(MeshVariableScalarRefT< ItemType, DataType > &var)
Vue en lecture/écriture.