Arcane  v4.1.0.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-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/*---------------------------------------------------------------------------*/
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/*---------------------------------------------------------------------------*/
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
72 ARCCORE_HOST_DEVICE const DataType& operator[](ComponentItemLocalId lid) const
73 {
74 return this->m_value[lid.localId().arrayIndex()][lid.localId().valueIndex()];
75 }
76
78 ARCCORE_HOST_DEVICE const DataType& operator[](PureMatVarIndex pmvi) const
79 {
80 return this->m_value[0][pmvi.valueIndex()];
81 }
82
84 ARCCORE_HOST_DEVICE const DataType& operator[](ItemIndexType item) const
85 {
86 return this->m_value[0][item.localId()];
87 }
88
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/*---------------------------------------------------------------------------*/
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
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
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
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
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/*---------------------------------------------------------------------------*/
176template <typename DataType> auto
178{
179 using Accessor = DataViewSetter<DataType>;
180 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
181}
182
183/*---------------------------------------------------------------------------*/
184/*---------------------------------------------------------------------------*/
188template <typename DataType> auto
190{
191 using Accessor = DataViewSetter<DataType>;
192 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
193}
194
195/*---------------------------------------------------------------------------*/
196/*---------------------------------------------------------------------------*/
200template <typename DataType> auto
202{
203 using Accessor = DataViewGetterSetter<DataType>;
204 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
205}
206
207/*---------------------------------------------------------------------------*/
208/*---------------------------------------------------------------------------*/
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
225template <typename DataType> auto
227{
228 return MatItemVariableScalarInViewT<Cell, DataType>(vbi, var.materialVariable(), var._internalValue());
229}
230
231/*---------------------------------------------------------------------------*/
232/*---------------------------------------------------------------------------*/
233
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.
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 -*-