Arcane  v4.1.4.0
Documentation utilisateur
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-2025 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#include "arcane/core/materials/MatItem.h"
21
22#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/*---------------------------------------------------------------------------*/
38/*!
39 * \brief Classe de base des vues sur les variables matériaux.
40 */
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/*---------------------------------------------------------------------------*/
53/*!
54 * \brief Vue en lecture sur une variable scalaire du maillage.
55 */
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
74 //! Opérateur d'accès pour l'entité \a item
75 ARCCORE_HOST_DEVICE const DataType& operator[](ComponentItemLocalId lid) const
76 {
77 return this->m_value[lid.localId().arrayIndex()][lid.localId().valueIndex()];
78 }
79
80 //! Opérateur d'accès pour l'entité \a item
81 ARCCORE_HOST_DEVICE const DataType& operator[](PureMatVarIndex pmvi) const
82 {
83 return this->m_value[0][pmvi.valueIndex()];
84 }
85
86 //! Surcharge pour accéder à la valeure globale à partir du cell id
87 ARCCORE_HOST_DEVICE const DataType& operator[](ItemIndexType item) const
88 {
89 return this->m_value[0][item.localId()];
90 }
91
92 //! Opérateur d'accès pour l'entité \a item
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/*---------------------------------------------------------------------------*/
110/*!
111 * \brief Vue en écriture sur une variable scalaire du maillage.
112 */
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
135 //! Opérateur d'accès pour l'entité \a item
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
146 //! Surcharge pour accéder à la valeure globale à partir du cell id
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
153 //! Opérateur d'accès pour l'entité \a item
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
159 //! Positionne la valeur pour l'entité \a item à \a v
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/*---------------------------------------------------------------------------*/
177/*!
178 * \brief Vue en écriture pour les variables materiaux scalaire.
179 */
180template <typename DataType> auto
182{
183 using Accessor = DataViewSetter<DataType>;
184 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
185}
186
187/*---------------------------------------------------------------------------*/
188/*---------------------------------------------------------------------------*/
189/*!
190 * \brief Vue en écriture pour les variables materiaux scalaire
191 */
192template <typename DataType> auto
194{
195 using Accessor = DataViewSetter<DataType>;
196 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
197}
198
199/*---------------------------------------------------------------------------*/
200/*---------------------------------------------------------------------------*/
201/*!
202 * \brief Vue en lecture/écriture pour les variables materiaux scalaire
203 */
204template <typename DataType> auto
206{
207 using Accessor = DataViewGetterSetter<DataType>;
208 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
209}
210
211/*---------------------------------------------------------------------------*/
212/*---------------------------------------------------------------------------*/
213/*!
214 * \brief Vue en lecture/écriture pour les variables materiaux scalaire
215 */
216template <typename DataType> auto
218{
219 using Accessor = DataViewGetterSetter<DataType>;
220 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
221}
222
223/*---------------------------------------------------------------------------*/
224/*---------------------------------------------------------------------------*/
225
226/*!
227 * \brief Vue en lecture pour les variables materiaux scalaire
228 */
229template <typename DataType> auto
231{
232 return MatItemVariableScalarInViewT<Cell, DataType>(vbi, var.materialVariable(), var._internalValue());
233}
234
235/*---------------------------------------------------------------------------*/
236/*---------------------------------------------------------------------------*/
237
238/*!
239 * \brief Vue en lecture pour les variables materiaux scalaire
240 */
241template <typename DataType> auto
243{
244 return MatItemVariableScalarInViewT<Cell, DataType>(vbi, var.materialVariable(), var._internalValue());
245}
246
247/*---------------------------------------------------------------------------*/
248/*---------------------------------------------------------------------------*/
249
250} // namespace Arcane::Accelerator
251
252#endif
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.
Informations pour construire une vue pour les données sur accélérateur.
Vue modifiable d'un tableau d'un type T.
Variable scalaire sur les mailles d'un milieu du maillage.
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.
IMeshMaterialVariable * materialVariable() const
Variable matériau associée.
Index d'un Item matériaux pure dans une variable.
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 scalaire.
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 -*-