Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MaterialVariableViews.h
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/*---------------------------------------------------------------------------*/
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 */
42{
43 public:
44 // Pour l'instant n'utilise pas encore les paramètres
46 {
47 }
48 private:
49};
50
51/*---------------------------------------------------------------------------*/
52/*---------------------------------------------------------------------------*/
53/*!
54 * \brief Vue en lecture sur une variable scalaire du maillage.
55 * TODO: Faut-il rajouter la gestion des SIMD comme dans ItemVariableScalarInViewT ?
56 */
57template<typename ItemType,typename DataType>
60{
61 private:
62
63 using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
64
65 public:
66
68 : MatVariableViewBase(cmd, var), m_value(v){}
69
70 //! Opérateur d'accès pour l'entité \a item
71 ARCCORE_HOST_DEVICE const DataType& operator[](ComponentItemLocalId lid) const
72 {
73 return this->m_value[lid.localId().arrayIndex()][lid.localId().valueIndex()];
74 }
75
76 //! Opérateur d'accès pour l'entité \a item
77 ARCCORE_HOST_DEVICE const DataType& operator[](PureMatVarIndex pmvi) const
78 {
79 return this->m_value[0][pmvi.valueIndex()];
80 }
81
82 //! Surcharge pour accéder à la valeure globale à partir du cell id
83 ARCCORE_HOST_DEVICE const DataType& operator[](ItemIndexType item) const
84 {
85 return this->m_value[0][item.localId()];
86 }
87
88 //! Opérateur d'accès pour l'entité \a item
89 ARCCORE_HOST_DEVICE const DataType& value(ComponentItemLocalId mvi) const
90 {
91 return this->m_value[mvi.localId().arrayIndex()][mvi.localId().valueIndex()];
92 }
93
94 ARCCORE_HOST_DEVICE const DataType& value0(PureMatVarIndex idx) const
95 {
96 return this->m_value[0][idx.valueIndex()];
97 }
98
99 private:
100
101 ArrayView<DataType>* m_value;
102};
103
104/*---------------------------------------------------------------------------*/
105/*---------------------------------------------------------------------------*/
106
107/*
108 * TODO: A faire ?
109 *
110template<typename ItemType,typename DataType>
111class MatItemVariableArrayInViewT
112: public MatVariableViewBase
113{
114};
115 */
116
117/*---------------------------------------------------------------------------*/
118/*---------------------------------------------------------------------------*/
119/*!
120 * \brief Vue en écriture sur une variable scalaire du maillage.
121 * TODO: Faut il rajouter la gestion des types SIMD comme dans ItemVariableScalarOutViewT ?
122 */
123template<typename ItemType,typename Accessor>
125: public MatVariableViewBase
126{
127 private:
128
129 using DataType = typename Accessor::ValueType;
130 using DataTypeReturnType = DataType&;
131 using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
132
133 // TODO: faut il rajouter des ARCANE_CHECK_AT(mvi.arrayIndex(), m_value.size()); ? il manquera tjrs le check sur l'autre dimension
134
135 public:
136
138 : MatVariableViewBase(cmd, var), m_value(v){}
139
140 //! Opérateur d'accès pour l'entité \a item
141 ARCCORE_HOST_DEVICE Accessor operator[](ComponentItemLocalId lid) const
142 {
143 return Accessor(this->m_value[lid.localId().arrayIndex()].data()+lid.localId().valueIndex());
144 }
145
146 ARCCORE_HOST_DEVICE Accessor operator[](PureMatVarIndex pmvi) const
147 {
148 return Accessor(this->m_value[0][pmvi.valueIndex()]);
149 }
150
151 //! Surcharge pour accéder à la valeure globale à partir du cell id
152 ARCCORE_HOST_DEVICE Accessor operator[](ItemIndexType item) const
153 {
154 ARCANE_CHECK_AT(item.localId(),this->m_value[0].size());
155 return Accessor(this->m_value[0].data() + item.localId());
156 }
157
158 //! Opérateur d'accès pour l'entité \a item
159 ARCCORE_HOST_DEVICE Accessor value(ComponentItemLocalId lid) const
160 {
161 return Accessor(this->m_value[lid.localId().arrayIndex()].data()+lid.localId().valueIndex());
162 }
163
164 //! Positionne la valeur pour l'entité \a item à \a v
165 ARCCORE_HOST_DEVICE void setValue(ComponentItemLocalId lid,const DataType& v) const
166 {
167 this->m_value[lid.localId().arrayIndex()][lid.localId().valueIndex()] = v;
168 }
169
170 ARCCORE_HOST_DEVICE Accessor value0(PureMatVarIndex idx) const
171 {
172 return Accessor(this->m_value[0][idx.valueIndex()]);
173 }
174
175 private:
176
177 ArrayView<DataType>* m_value;
178};
179
180/*---------------------------------------------------------------------------*/
181/*---------------------------------------------------------------------------*/
182/*!
183 * \brief Vue en écriture pour les variables materiaux scalaire
184 */
185template<typename DataType> auto
187{
188 using Accessor = DataViewSetter<DataType>;
189 return MatItemVariableScalarOutViewT<Cell,Accessor>(cmd, var.materialVariable(),var._internalValue());
190}
191
192/*---------------------------------------------------------------------------*/
193/*---------------------------------------------------------------------------*/
194/*!
195 * \brief Vue en écriture pour les variables materiaux scalaire
196 */
197template<typename DataType> auto
199{
200 using Accessor = DataViewSetter<DataType>;
201 return MatItemVariableScalarOutViewT<Cell,Accessor>(cmd, var.materialVariable(),var._internalValue());
202}
203
204/*---------------------------------------------------------------------------*/
205/*---------------------------------------------------------------------------*/
206/*!
207 * \brief Vue en lecture/écriture pour les variables materiaux scalaire
208 */
209template<typename DataType> auto
215
216/*---------------------------------------------------------------------------*/
217/*---------------------------------------------------------------------------*/
218/*!
219 * \brief Vue en lecture/écriture pour les variables materiaux scalaire
220 */
221template<typename DataType> auto
227
228/*---------------------------------------------------------------------------*/
229/*---------------------------------------------------------------------------*/
230
231/*!
232 * \brief Vue en lecture pour les variables materiaux scalaire
233 */
234template<typename DataType> auto
239
240/*---------------------------------------------------------------------------*/
241/*---------------------------------------------------------------------------*/
242
243/*!
244 * \brief Vue en lecture pour les variables materiaux scalaire
245 */
246template<typename DataType> auto
251
252/*---------------------------------------------------------------------------*/
253/*---------------------------------------------------------------------------*/
254
255}
256
257#endif
Vue en lecture sur une variable scalaire du maillage. TODO: Faut-il rajouter la gestion des SIMD comm...
__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. TODO: Faut il rajouter la gestion des types SI...
__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.
Gestion d'une commande 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 Item matériaux dans 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(RunCommand &cmd, CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture/écriture pour les variables materiaux scalaire.
auto viewIn(RunCommand &cmd, const CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture pour les variables materiaux scalaire.
auto viewOut(RunCommand &cmd, CellMaterialVariableScalarRef< DataType > &var)
Vue en écriture 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 -*-