Arcane  4.1.13.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MaterialVariableViews.h
Aller à la documentation de ce fichier.
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* MaterialVariableViews.h (C) 2000-2026 */
9/* */
10/* Gestion des vues sur les variables matériaux pour les accélérateurs. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_MATERIALVARIABLEVIEWS_H
13#define ARCANE_ACCELERATOR_MATERIALVARIABLEVIEWS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/materials/IMeshMaterialVariable.h"
20
21#include "arcane/accelerator/AcceleratorGlobal.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27using namespace Arcane;
28using namespace Arcane::Materials;
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
33namespace Arcane::Accelerator
34{
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
41class ARCANE_ACCELERATOR_EXPORT MatVariableViewBase
42{
43 public:
44
45 // Pour l'instant n'utilise pas encore les paramètres
46 MatVariableViewBase(const ViewBuildInfo&, IMeshMaterialVariable*);
47 // Pour l'instant n'utilise pas encore les paramètres
48 MatVariableViewBase() = default;
49};
50
51/*---------------------------------------------------------------------------*/
52/*---------------------------------------------------------------------------*/
56template <typename ItemType, typename DataType>
57class MatItemVariableScalarInViewT
58: public MatVariableViewBase
59{
60 // TODO: Faut-il rajouter la gestion des SIMD comme dans ItemVariableScalarInViewT ?
61
62 private:
63
64 using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
65
66 public:
67
68 MatItemVariableScalarInViewT(const ViewBuildInfo& vbi, IMeshMaterialVariable* var, ArrayView<DataType>* v)
69 : MatVariableViewBase(vbi, var)
70 , m_value(v)
71 {}
72 MatItemVariableScalarInViewT() = default;
73
75 ARCCORE_HOST_DEVICE const DataType& operator[](ComponentItemLocalId lid) const
76 {
77 return this->m_value[lid.localId().arrayIndex()][lid.localId().valueIndex()];
78 }
79
81 ARCCORE_HOST_DEVICE const DataType& operator[](PureMatVarIndex pmvi) const
82 {
83 return this->m_value[0][pmvi.valueIndex()];
84 }
85
87 ARCCORE_HOST_DEVICE const DataType& operator[](ItemIndexType item) const
88 {
89 return this->m_value[0][item.localId()];
90 }
91
93 ARCCORE_HOST_DEVICE const DataType& value(ComponentItemLocalId mvi) const
94 {
95 return this->m_value[mvi.localId().arrayIndex()][mvi.localId().valueIndex()];
96 }
97
98 ARCCORE_HOST_DEVICE const DataType& value0(PureMatVarIndex idx) const
99 {
100 return this->m_value[0][idx.valueIndex()];
101 }
102
103 private:
104
105 ArrayView<DataType>* m_value = nullptr;
106};
107
108/*---------------------------------------------------------------------------*/
109/*---------------------------------------------------------------------------*/
113template <typename ItemType, typename Accessor>
114class MatItemVariableScalarOutViewT
115: public MatVariableViewBase
116{
117 private:
118
119 using DataType = typename Accessor::ValueType;
120 using DataTypeReturnType = DataType&;
121 using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
122
123 // TODO: faut il rajouter des ARCANE_CHECK_AT(mvi.arrayIndex(), m_value.size());
124 // il manquera tjrs le check sur l'autre dimension
125 // TODO: Faut il rajouter la gestion des types SIMD comme dans ItemVariableScalarOutViewT ?
126
127 public:
128
129 MatItemVariableScalarOutViewT(const ViewBuildInfo& vbi, IMeshMaterialVariable* var, ArrayView<DataType>* v)
130 : MatVariableViewBase(vbi, var)
131 , m_value(v)
132 {}
133 MatItemVariableScalarOutViewT() = default;
134
136 ARCCORE_HOST_DEVICE Accessor operator[](ComponentItemLocalId lid) const
137 {
138 return Accessor(this->m_value[lid.localId().arrayIndex()].data() + lid.localId().valueIndex());
139 }
140
141 ARCCORE_HOST_DEVICE Accessor operator[](PureMatVarIndex pmvi) const
142 {
143 return Accessor(this->m_value[0][pmvi.valueIndex()]);
144 }
145
147 ARCCORE_HOST_DEVICE Accessor operator[](ItemIndexType item) const
148 {
149 ARCANE_CHECK_AT(item.localId(), this->m_value[0].size());
150 return Accessor(this->m_value[0].data() + item.localId());
151 }
152
154 ARCCORE_HOST_DEVICE Accessor value(ComponentItemLocalId lid) const
155 {
156 return Accessor(this->m_value[lid.localId().arrayIndex()].data() + lid.localId().valueIndex());
157 }
158
160 ARCCORE_HOST_DEVICE void setValue(ComponentItemLocalId lid, const DataType& v) const
161 {
162 this->m_value[lid.localId().arrayIndex()][lid.localId().valueIndex()] = v;
163 }
164
165 ARCCORE_HOST_DEVICE Accessor value0(PureMatVarIndex idx) const
166 {
167 return Accessor(this->m_value[0][idx.valueIndex()]);
168 }
169
170 private:
171
172 ArrayView<DataType>* m_value = nullptr;
173};
174
175/*---------------------------------------------------------------------------*/
176/*---------------------------------------------------------------------------*/
180template <typename ItemType, typename DataType>
181class MatItemVariableArrayInViewT
182: public MatVariableViewBase
183{
184 private:
185
186 using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
187
188 public:
189
191
192 public:
193
194 MatItemVariableArrayInViewT(const ViewBuildInfo& vbi, IMeshMaterialVariable* var,
195 const ContainerViewType& v)
196 : MatVariableViewBase(vbi, var)
197 , m_value(v)
198 {}
199 MatItemVariableArrayInViewT() = default;
200
202 ARCCORE_HOST_DEVICE SmallSpan<const DataType> operator[](ComponentItemLocalId lid) const
203 {
204 return m_value[lid];
205 }
206
209 {
210 return m_value[pmvi];
211 }
212
214 ARCCORE_HOST_DEVICE SmallSpan<const DataType> operator[](ItemIndexType item) const
215 {
216 return m_value[item];
217 }
218
220 ARCCORE_HOST_DEVICE SmallSpan<const DataType> value(ComponentItemLocalId mvi) const
221 {
222 return m_value[mvi];
223 }
224
226 ARCCORE_HOST_DEVICE SmallSpan<const DataType> value(ItemIndexType item) const
227 {
228 return m_value[item];
229 }
230
231 private:
232
233 ContainerViewType m_value;
234};
235
236/*---------------------------------------------------------------------------*/
237/*---------------------------------------------------------------------------*/
241template <typename ItemType, typename Accessor>
242class MatItemVariableArrayOutViewT
243: public MatVariableViewBase
244{
245 private:
246
247 using DataType = typename Accessor::ValueType;
248 using DataTypeReturnType = DataType&;
249 using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
250 using ContainerViewType = MeshMaterialVariableArrayContainerView<DataType>;
251
252 public:
253
254 MatItemVariableArrayOutViewT(const ViewBuildInfo& vbi, IMeshMaterialVariable* var, const ContainerViewType& v)
255 : MatVariableViewBase(vbi, var)
256 , m_value(v)
257 {}
258 MatItemVariableArrayOutViewT() = default;
259
261 ARCCORE_HOST_DEVICE Accessor operator[](ComponentItemLocalId lid) const
262 {
263 return Accessor(m_value[lid]);
264 }
265
266 ARCCORE_HOST_DEVICE Accessor operator[](PureMatVarIndex pmvi) const
267 {
268 return Accessor(m_value[pmvi]);
269 }
270
272 ARCCORE_HOST_DEVICE Accessor operator[](ItemIndexType item) const
273 {
274 return Accessor(m_value[item]);
275 }
276
278 ARCCORE_HOST_DEVICE Accessor value(ComponentItemLocalId lid) const
279 {
280 return Accessor(m_value[lid]);
281 }
282
283 private:
284
285 ContainerViewType m_value;
286};
287
288/*---------------------------------------------------------------------------*/
289/*---------------------------------------------------------------------------*/
293template <typename DataType> auto
295{
296 using Accessor = DataViewSetter<DataType>;
297 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
298}
299
300/*---------------------------------------------------------------------------*/
301/*---------------------------------------------------------------------------*/
305template <typename DataType> auto
307{
308 using Accessor = View1DSetter<DataType>;
310 return ViewType(vbi, var.materialVariable(), var.containerView());
311}
312
313/*---------------------------------------------------------------------------*/
314/*---------------------------------------------------------------------------*/
318template <typename DataType> auto
320{
321 using Accessor = DataViewSetter<DataType>;
322 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
323}
324
325/*---------------------------------------------------------------------------*/
326/*---------------------------------------------------------------------------*/
330template <typename DataType> auto
332{
333 using Accessor = View1DSetter<DataType>;
335 return ViewType(vbi, var.materialVariable(), var.containerView());
336}
337
338/*---------------------------------------------------------------------------*/
339/*---------------------------------------------------------------------------*/
340
341/*---------------------------------------------------------------------------*/
342/*---------------------------------------------------------------------------*/
346template <typename DataType> auto
348{
349 using Accessor = DataViewGetterSetter<DataType>;
350 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
351}
352
353/*---------------------------------------------------------------------------*/
354/*---------------------------------------------------------------------------*/
358template <typename DataType> auto
360{
361 using Accessor = View1DGetterSetter<DataType>;
363 return ViewType(vbi, var.materialVariable(), var.containerView());
364}
365
366/*---------------------------------------------------------------------------*/
367/*---------------------------------------------------------------------------*/
371template <typename DataType> auto
373{
374 using Accessor = DataViewGetterSetter<DataType>;
375 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
376}
377
378/*---------------------------------------------------------------------------*/
379/*---------------------------------------------------------------------------*/
383template <typename DataType> auto
385{
386 using Accessor = View1DGetterSetter<DataType>;
388 return ViewType(vbi, var.materialVariable(), var.containerView());
389}
390
391/*---------------------------------------------------------------------------*/
392/*---------------------------------------------------------------------------*/
393
394/*---------------------------------------------------------------------------*/
395/*---------------------------------------------------------------------------*/
399template <typename DataType> auto
401{
402 return MatItemVariableScalarInViewT<Cell, DataType>(vbi, var.materialVariable(), var._internalValue());
403}
404
405/*---------------------------------------------------------------------------*/
406/*---------------------------------------------------------------------------*/
410template <typename DataType> auto
412{
413 return MatItemVariableArrayInViewT<Cell, DataType>(vbi, var.materialVariable(), var.constContainerView());
414}
415
416/*---------------------------------------------------------------------------*/
417/*---------------------------------------------------------------------------*/
421template <typename DataType> auto
423{
424 return MatItemVariableScalarInViewT<Cell, DataType>(vbi, var.materialVariable(), var._internalValue());
425}
426
427/*---------------------------------------------------------------------------*/
428/*---------------------------------------------------------------------------*/
432template <typename DataType> auto
434{
435 return MatItemVariableArrayInViewT<Cell, DataType>(vbi, var.materialVariable(), var.constContainerView());
436}
437
438/*---------------------------------------------------------------------------*/
439/*---------------------------------------------------------------------------*/
440
441} // namespace Arcane::Accelerator
442
443/*---------------------------------------------------------------------------*/
444/*---------------------------------------------------------------------------*/
445
446#endif
Vue en lecture seule sur une variable constituante de tableau 1D.
__host__ __device__ SmallSpan< const DataType > value(ComponentItemLocalId mvi) const
Opérateur d'accès pour l'entité item.
__host__ __device__ SmallSpan< const DataType > value(ItemIndexType item) const
Surcharge pour accéder à la valeur globale à partir de l'identifiant de cellule.
__host__ __device__ SmallSpan< const DataType > operator[](ItemIndexType item) const
Surcharge pour accéder à la valeur globale à partir de l'identifiant de cellule.
__host__ __device__ SmallSpan< const DataType > operator[](ComponentItemLocalId lid) const
Opérateur d'accès pour l'entité item.
__host__ __device__ SmallSpan< const DataType > operator[](PureMatVarIndex pmvi) const
Opérateur d'accès pour l'entité item.
Vue d'écriture sur une variable constituante de tableau 1D.
__host__ __device__ Accessor operator[](ComponentItemLocalId lid) const
Opérateur d'accès pour l'entité item.
__host__ __device__ Accessor value(ComponentItemLocalId lid) const
Opérateur d'accès pour l'entité item.
__host__ __device__ Accessor operator[](ItemIndexType item) const
Surcharge pour accéder à la valeur globale à partir de l'identifiant de cellule.
Vue en lecture sur une variable scalaire du maillage.
__host__ __device__ const DataType & operator[](ComponentItemLocalId lid) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const DataType & value(ComponentItemLocalId mvi) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const DataType & operator[](PureMatVarIndex pmvi) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const DataType & operator[](ItemIndexType item) const
Surcharge pour accéder à la valeure globale à partir du cell id.
Vue en écriture sur une variable scalaire du maillage.
__host__ __device__ Accessor operator[](ComponentItemLocalId lid) const
Opérateur d'accès pour l'entité item.
__host__ __device__ Accessor value(ComponentItemLocalId lid) const
Opérateur d'accès pour l'entité item.
__host__ __device__ void setValue(ComponentItemLocalId lid, const DataType &v) const
Positionne la valeur pour l'entité item à v.
__host__ __device__ Accessor operator[](ItemIndexType item) const
Surcharge pour accéder à la valeure globale à partir du cell id.
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.
Informations pour construire une vue pour les données sur accélérateur.
Vue modifiable d'un tableau d'un type T.
Caractéristiques des éléments du maillage.
Definition ItemTypes.h:621
Variable tableau sur les mailles d'un matériau du maillage. Pour l'instant, cette classe n'est instan...
Variable scalaire sur les mailles d'un milieu du maillage.
Variable tableau sur les mailles d'un matériau du maillage. Pour l'instant, cette classe n'est instan...
Variable scalaire sur les mailles d'un matériau du maillage.
constexpr __host__ __device__ MatVarIndex localId() const
Index générique pour accéder aux valeurs d'une variable.
Interface d'une variable matériau d'un maillage.
constexpr __host__ __device__ Int32 arrayIndex() const
Retourne l'indice du tableau de valeur dans la liste des variables.
constexpr __host__ __device__ Int32 valueIndex() const
Retourne l'indice dans le tableau de valeur.
Vue du conteneur des variables constitutives de tableau 1D.
IMeshMaterialVariable * materialVariable() const
Variable matériau associée.
Index d'un Item matériaux pure dans une variable.
Vue d'un tableau d'éléments de type T.
Definition Span.h:801
Espace de nom pour l'utilisation des accélérateurs.
auto viewInOut(const ViewBuildInfo &vbi, CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture/écriture pour les variables materiaux scalaire.
auto viewOut(const ViewBuildInfo &vbi, CellMaterialVariableScalarRef< DataType > &var)
Vue en écriture pour les variables materiaux scalaires.
auto viewIn(const ViewBuildInfo &vbi, const CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture pour les variables materiaux scalaire.
Active toujours les traces dans les parties Arcane concernant les matériaux.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --