Arcane  v3.14.10.0
Documentation développeur
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/*---------------------------------------------------------------------------*/
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/*---------------------------------------------------------------------------*/
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/*---------------------------------------------------------------------------*/
69template<typename DataType>
71{
72 public:
73 using ValueType = DataType;
75};
76
77/*---------------------------------------------------------------------------*/
78/*---------------------------------------------------------------------------*/
82template<typename DataType>
84{
85 public:
86 using ValueType = 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/*---------------------------------------------------------------------------*/
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
123
129
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
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
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/*---------------------------------------------------------------------------*/
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
177 {
178 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
179 return SimdType(m_values.data(),simd_item.simdLocalIds());
180 }
181
185 {
186 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
187 return SimdType(m_values.data()+simd_item.baseLocalId());
188 }
189
191 const DataType& operator[](ItemIndexType i) const
192 {
193 return this->m_values[i.localId()];
194 }
195
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/*---------------------------------------------------------------------------*/
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
225 Span<const DataType> operator[](ItemIndexType i) const
226 {
227 return this->m_values[i.localId()];
228 }
229
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/*---------------------------------------------------------------------------*/
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
261 DataTypeReturnType operator[](ItemIndexType i) const
262 {
263 return DataTypeReturnType(this->m_values[i.localId()]);
264 }
265
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/*---------------------------------------------------------------------------*/
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
311 : VariableViewBase(var), m_values(v.data()), m_size(v.size()){}
312
318
324
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
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
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/*---------------------------------------------------------------------------*/
356template<typename ItemType,typename DataType> auto
362
366template<typename ItemType> auto
372
376template<typename ItemType> auto
382
386template<typename ItemType,typename DataType> auto
392
393/*---------------------------------------------------------------------------*/
394/*---------------------------------------------------------------------------*/
398template<typename ItemType,typename DataType> auto
404
408template<typename ItemType> auto
414
418template<typename ItemType> auto
424
428template<typename ItemType,typename DataType> auto
434
435/*---------------------------------------------------------------------------*/
436/*---------------------------------------------------------------------------*/
440template<typename ItemType,typename DataType> auto
445
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.
Vue en lecture sur une variable tableau du maillage.
Vue en écriture sur une variable tableau du maillage.
Vue en écriture sur une variable scalaire de type 'RealN' du maillage.
Vue en lecture sur une variable scalaire du maillage.
Vue en écriture sur une variable scalaire du maillage.
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.
Interface d'une variable.
Definition IVariable.h:54
Caractéristiques des éléments du maillage.
Definition ItemTypes.h:621
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.
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.
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.
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.
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.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
constexpr ARCCORE_HOST_DEVICE pointer ptrAt(SizeType index) const
Addresse du index-ème élément.
Definition Span.h:240
constexpr ARCCORE_HOST_DEVICE pointer data() const noexcept
Pointeur sur le début de la vue.
Definition Span.h:419
Vue d'un tableau d'éléments de type T.
Definition Span.h:510
auto viewInOut(RunCommand &cmd, CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture/écriture pour les variables materiaux scalaire.
auto viewIn(RunCommand &cmd, const CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture pour les variables materiaux scalaire.
auto viewOut(RunCommand &cmd, CellMaterialVariableScalarRef< DataType > &var)
Vue en écriture pour les variables materiaux scalaire.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-