Arcane  v3.15.3.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
70 , m_value(v)
71 {}
72
73 //! Opérateur d'accès pour l'entité \a item
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
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
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
130 , m_value(v)
131 {}
132
133 //! Opérateur d'accès pour l'entité \a item
135 {
136 return Accessor(this->m_value[lid.localId().arrayIndex()].data() + lid.localId().valueIndex());
137 }
138
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
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
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.
Index d'un ConstituentItem dans une variable.
Interface d'une variable matériau d'un maillage.
Index d'un Item matériaux pure dans une variable.
constexpr const_pointer data() const noexcept
Pointeur sur le début de la vue.
Référence à une instance.
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 -*-