Arcane  v4.1.4.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-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/*---------------------------------------------------------------------------*/
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 DataType> auto
182{
183 using Accessor = DataViewSetter<DataType>;
184 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
185}
186
187/*---------------------------------------------------------------------------*/
188/*---------------------------------------------------------------------------*/
192template <typename DataType> auto
194{
195 using Accessor = DataViewSetter<DataType>;
196 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
197}
198
199/*---------------------------------------------------------------------------*/
200/*---------------------------------------------------------------------------*/
204template <typename DataType> auto
206{
207 using Accessor = DataViewGetterSetter<DataType>;
208 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
209}
210
211/*---------------------------------------------------------------------------*/
212/*---------------------------------------------------------------------------*/
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
229template <typename DataType> auto
231{
232 return MatItemVariableScalarInViewT<Cell, DataType>(vbi, var.materialVariable(), var._internalValue());
233}
234
235/*---------------------------------------------------------------------------*/
236/*---------------------------------------------------------------------------*/
237
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.
Caractéristiques des éléments du maillage.
Definition ItemTypes.h:621
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 -*-