Arcane  v4.1.0.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-2025 */
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};
48
49/*---------------------------------------------------------------------------*/
50/*---------------------------------------------------------------------------*/
51/*!
52 * \brief Vue en lecture sur une variable scalaire du maillage.
53 */
54template <typename ItemType, typename DataType>
55class MatItemVariableScalarInViewT
56: public MatVariableViewBase
57{
58 // TODO: Faut-il rajouter la gestion des SIMD comme dans ItemVariableScalarInViewT ?
59
60 private:
61
62 using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
63
64 public:
65
66 MatItemVariableScalarInViewT(const ViewBuildInfo& vbi, IMeshMaterialVariable* var, ArrayView<DataType>* v)
67 : MatVariableViewBase(vbi, var)
68 , m_value(v)
69 {}
70
71 //! Opérateur d'accès pour l'entité \a item
72 ARCCORE_HOST_DEVICE const DataType& operator[](ComponentItemLocalId lid) const
73 {
74 return this->m_value[lid.localId().arrayIndex()][lid.localId().valueIndex()];
75 }
76
77 //! Opérateur d'accès pour l'entité \a item
78 ARCCORE_HOST_DEVICE const DataType& operator[](PureMatVarIndex pmvi) const
79 {
80 return this->m_value[0][pmvi.valueIndex()];
81 }
82
83 //! Surcharge pour accéder à la valeure globale à partir du cell id
84 ARCCORE_HOST_DEVICE const DataType& operator[](ItemIndexType item) const
85 {
86 return this->m_value[0][item.localId()];
87 }
88
89 //! Opérateur d'accès pour l'entité \a item
90 ARCCORE_HOST_DEVICE const DataType& value(ComponentItemLocalId mvi) const
91 {
92 return this->m_value[mvi.localId().arrayIndex()][mvi.localId().valueIndex()];
93 }
94
95 ARCCORE_HOST_DEVICE const DataType& value0(PureMatVarIndex idx) const
96 {
97 return this->m_value[0][idx.valueIndex()];
98 }
99
100 private:
101
102 ArrayView<DataType>* m_value;
103};
104
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
107/*!
108 * \brief Vue en écriture sur une variable scalaire du maillage.
109 */
110template <typename ItemType, typename Accessor>
111class MatItemVariableScalarOutViewT
112: public MatVariableViewBase
113{
114 private:
115
116 using DataType = typename Accessor::ValueType;
117 using DataTypeReturnType = DataType&;
118 using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
119
120 // TODO: faut il rajouter des ARCANE_CHECK_AT(mvi.arrayIndex(), m_value.size());
121 // il manquera tjrs le check sur l'autre dimension
122 // TODO: Faut il rajouter la gestion des types SIMD comme dans ItemVariableScalarOutViewT ?
123
124 public:
125
126 MatItemVariableScalarOutViewT(const ViewBuildInfo& vbi, IMeshMaterialVariable* var, ArrayView<DataType>* v)
127 : MatVariableViewBase(vbi, var)
128 , m_value(v)
129 {}
130
131 //! Opérateur d'accès pour l'entité \a item
132 ARCCORE_HOST_DEVICE Accessor operator[](ComponentItemLocalId lid) const
133 {
134 return Accessor(this->m_value[lid.localId().arrayIndex()].data() + lid.localId().valueIndex());
135 }
136
137 ARCCORE_HOST_DEVICE Accessor operator[](PureMatVarIndex pmvi) const
138 {
139 return Accessor(this->m_value[0][pmvi.valueIndex()]);
140 }
141
142 //! Surcharge pour accéder à la valeure globale à partir du cell id
143 ARCCORE_HOST_DEVICE Accessor operator[](ItemIndexType item) const
144 {
145 ARCANE_CHECK_AT(item.localId(), this->m_value[0].size());
146 return Accessor(this->m_value[0].data() + item.localId());
147 }
148
149 //! Opérateur d'accès pour l'entité \a item
150 ARCCORE_HOST_DEVICE Accessor value(ComponentItemLocalId lid) const
151 {
152 return Accessor(this->m_value[lid.localId().arrayIndex()].data() + lid.localId().valueIndex());
153 }
154
155 //! Positionne la valeur pour l'entité \a item à \a v
156 ARCCORE_HOST_DEVICE void setValue(ComponentItemLocalId lid, const DataType& v) const
157 {
158 this->m_value[lid.localId().arrayIndex()][lid.localId().valueIndex()] = v;
159 }
160
161 ARCCORE_HOST_DEVICE Accessor value0(PureMatVarIndex idx) const
162 {
163 return Accessor(this->m_value[0][idx.valueIndex()]);
164 }
165
166 private:
167
168 ArrayView<DataType>* m_value;
169};
170
171/*---------------------------------------------------------------------------*/
172/*---------------------------------------------------------------------------*/
173/*!
174 * \brief Vue en écriture pour les variables materiaux scalaire
175 */
176template <typename DataType> auto
178{
179 using Accessor = DataViewSetter<DataType>;
180 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
181}
182
183/*---------------------------------------------------------------------------*/
184/*---------------------------------------------------------------------------*/
185/*!
186 * \brief Vue en écriture pour les variables materiaux scalaire
187 */
188template <typename DataType> auto
190{
191 using Accessor = DataViewSetter<DataType>;
192 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
193}
194
195/*---------------------------------------------------------------------------*/
196/*---------------------------------------------------------------------------*/
197/*!
198 * \brief Vue en lecture/écriture pour les variables materiaux scalaire
199 */
200template <typename DataType> auto
202{
203 using Accessor = DataViewGetterSetter<DataType>;
204 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
205}
206
207/*---------------------------------------------------------------------------*/
208/*---------------------------------------------------------------------------*/
209/*!
210 * \brief Vue en lecture/écriture pour les variables materiaux scalaire
211 */
212template <typename DataType> auto
214{
215 using Accessor = DataViewGetterSetter<DataType>;
216 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
217}
218
219/*---------------------------------------------------------------------------*/
220/*---------------------------------------------------------------------------*/
221
222/*!
223 * \brief Vue en lecture pour les variables materiaux scalaire
224 */
225template <typename DataType> auto
227{
228 return MatItemVariableScalarInViewT<Cell, DataType>(vbi, var.materialVariable(), var._internalValue());
229}
230
231/*---------------------------------------------------------------------------*/
232/*---------------------------------------------------------------------------*/
233
234/*!
235 * \brief Vue en lecture pour les variables materiaux scalaire
236 */
237template <typename DataType> auto
239{
240 return MatItemVariableScalarInViewT<Cell, DataType>(vbi, var.materialVariable(), var._internalValue());
241}
242
243/*---------------------------------------------------------------------------*/
244/*---------------------------------------------------------------------------*/
245
246} // namespace Arcane::Accelerator
247
248#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 -*-