Arcane  v3.15.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-2024 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-2024 */
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/utils/ArcaneCxx20.h"
18
19#include "arcane/core/materials/IMeshMaterialVariable.h"
22#include "arcane/core/materials/MatItem.h"
23
24#include "arcane/accelerator/AcceleratorGlobal.h"
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29using namespace Arcane;
30using namespace Arcane::Materials;
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35namespace Arcane::Accelerator
36{
37
38/*---------------------------------------------------------------------------*/
39/*---------------------------------------------------------------------------*/
40/*!
41 * \brief Classe de base des vues sur les variables matériaux.
42 */
43class ARCANE_ACCELERATOR_EXPORT MatVariableViewBase
44{
45 public:
46
47 // Pour l'instant n'utilise pas encore les paramètres
49};
50
51/*---------------------------------------------------------------------------*/
52/*---------------------------------------------------------------------------*/
53/*!
54 * \brief Vue en lecture sur une variable scalaire du maillage.
55 */
56template <typename ItemType, typename DataType>
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
69 : MatVariableViewBase(vbi, var)
70 , m_value(v)
71 {}
72
73 //! Opérateur d'accès pour l'entité \a item
74 ARCCORE_HOST_DEVICE const DataType& operator[](ComponentItemLocalId lid) const
75 {
76 return this->m_value[lid.localId().arrayIndex()][lid.localId().valueIndex()];
77 }
78
79 //! Opérateur d'accès pour l'entité \a item
80 ARCCORE_HOST_DEVICE const DataType& operator[](PureMatVarIndex pmvi) const
81 {
82 return this->m_value[0][pmvi.valueIndex()];
83 }
84
85 //! Surcharge pour accéder à la valeure globale à partir du cell id
86 ARCCORE_HOST_DEVICE const DataType& operator[](ItemIndexType item) const
87 {
88 return this->m_value[0][item.localId()];
89 }
90
91 //! Opérateur d'accès pour l'entité \a item
92 ARCCORE_HOST_DEVICE const DataType& value(ComponentItemLocalId mvi) const
93 {
94 return this->m_value[mvi.localId().arrayIndex()][mvi.localId().valueIndex()];
95 }
96
97 ARCCORE_HOST_DEVICE const DataType& value0(PureMatVarIndex idx) const
98 {
99 return this->m_value[0][idx.valueIndex()];
100 }
101
102 private:
103
104 ArrayView<DataType>* m_value;
105};
106
107/*---------------------------------------------------------------------------*/
108/*---------------------------------------------------------------------------*/
109/*!
110 * \brief Vue en écriture sur une variable scalaire du maillage.
111 */
112template <typename ItemType, typename Accessor>
114: public MatVariableViewBase
115{
116 private:
117
118 using DataType = typename Accessor::ValueType;
119 using DataTypeReturnType = DataType&;
120 using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
121
122 // TODO: faut il rajouter des ARCANE_CHECK_AT(mvi.arrayIndex(), m_value.size());
123 // il manquera tjrs le check sur l'autre dimension
124 // TODO: Faut il rajouter la gestion des types SIMD comme dans ItemVariableScalarOutViewT ?
125
126 public:
127
129 : MatVariableViewBase(vbi, var)
130 , m_value(v)
131 {}
132
133 //! Opérateur d'accès pour l'entité \a item
134 ARCCORE_HOST_DEVICE Accessor operator[](ComponentItemLocalId lid) const
135 {
136 return Accessor(this->m_value[lid.localId().arrayIndex()].data() + lid.localId().valueIndex());
137 }
138
139 ARCCORE_HOST_DEVICE Accessor operator[](PureMatVarIndex pmvi) const
140 {
141 return Accessor(this->m_value[0][pmvi.valueIndex()]);
142 }
143
144 //! Surcharge pour accéder à la valeure globale à partir du cell id
145 ARCCORE_HOST_DEVICE Accessor operator[](ItemIndexType item) const
146 {
147 ARCANE_CHECK_AT(item.localId(), this->m_value[0].size());
148 return Accessor(this->m_value[0].data() + item.localId());
149 }
150
151 //! Opérateur d'accès pour l'entité \a item
152 ARCCORE_HOST_DEVICE Accessor value(ComponentItemLocalId lid) const
153 {
154 return Accessor(this->m_value[lid.localId().arrayIndex()].data() + lid.localId().valueIndex());
155 }
156
157 //! Positionne la valeur pour l'entité \a item à \a v
158 ARCCORE_HOST_DEVICE void setValue(ComponentItemLocalId lid, const DataType& v) const
159 {
160 this->m_value[lid.localId().arrayIndex()][lid.localId().valueIndex()] = v;
161 }
162
163 ARCCORE_HOST_DEVICE Accessor value0(PureMatVarIndex idx) const
164 {
165 return Accessor(this->m_value[0][idx.valueIndex()]);
166 }
167
168 private:
169
170 ArrayView<DataType>* m_value;
171};
172
173/*---------------------------------------------------------------------------*/
174/*---------------------------------------------------------------------------*/
175/*!
176 * \brief Vue en écriture pour les variables materiaux scalaire
177 */
178template <typename DataType> auto
180{
181 using Accessor = DataViewSetter<DataType>;
182 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
183}
184
185/*---------------------------------------------------------------------------*/
186/*---------------------------------------------------------------------------*/
187/*!
188 * \brief Vue en écriture pour les variables materiaux scalaire
189 */
190template <typename DataType> auto
192{
193 using Accessor = DataViewSetter<DataType>;
194 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
195}
196
197/*---------------------------------------------------------------------------*/
198/*---------------------------------------------------------------------------*/
199/*!
200 * \brief Vue en lecture/écriture pour les variables materiaux scalaire
201 */
202template <typename DataType> auto
208
209/*---------------------------------------------------------------------------*/
210/*---------------------------------------------------------------------------*/
211/*!
212 * \brief Vue en lecture/écriture pour les variables materiaux scalaire
213 */
214template <typename DataType> auto
220
221/*---------------------------------------------------------------------------*/
222/*---------------------------------------------------------------------------*/
223
224/*!
225 * \brief Vue en lecture pour les variables materiaux scalaire
226 */
227template <typename DataType> auto
229{
230 return MatItemVariableScalarInViewT<Cell, DataType>(vbi, var.materialVariable(), var._internalValue());
231}
232
233/*---------------------------------------------------------------------------*/
234/*---------------------------------------------------------------------------*/
235
236/*!
237 * \brief Vue en lecture pour les variables materiaux scalaire
238 */
239template <typename DataType> auto
241{
242 return MatItemVariableScalarInViewT<Cell, DataType>(vbi, var.materialVariable(), var._internalValue());
243}
244
245/*---------------------------------------------------------------------------*/
246/*---------------------------------------------------------------------------*/
247
248} // namespace Arcane::Accelerator
249
250#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.
Classe de base des vues sur les variables matériaux.
Informations pour construire une vue pour les données sur accélérateur.
Classe pour accéder à un élément d'une vue en lecture/écriture.
Definition DataView.h:245
Variable scalaire sur les mailles d'un milieu du maillage.
Variable scalaire sur les mailles d'un matériau du maillage. Pour l'instant, cette classe n'est insta...
Index d'un ConstituentItem dans une variable.
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.
Vue modifiable d'un tableau d'un type T.
constexpr const_pointer data() const noexcept
Pointeur sur le début de la vue.
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 -*-