Arcane  v3.15.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-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/*---------------------------------------------------------------------------*/
43class ARCANE_ACCELERATOR_EXPORT MatVariableViewBase
44{
45 public:
46
47 // Pour l'instant n'utilise pas encore les paramètres
49};
50
51/*---------------------------------------------------------------------------*/
52/*---------------------------------------------------------------------------*/
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
74 ARCCORE_HOST_DEVICE const DataType& operator[](ComponentItemLocalId lid) const
75 {
76 return this->m_value[lid.localId().arrayIndex()][lid.localId().valueIndex()];
77 }
78
80 ARCCORE_HOST_DEVICE const DataType& operator[](PureMatVarIndex pmvi) const
81 {
82 return this->m_value[0][pmvi.valueIndex()];
83 }
84
86 ARCCORE_HOST_DEVICE const DataType& operator[](ItemIndexType item) const
87 {
88 return this->m_value[0][item.localId()];
89 }
90
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/*---------------------------------------------------------------------------*/
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
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
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
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
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/*---------------------------------------------------------------------------*/
178template <typename DataType> auto
180{
181 using Accessor = DataViewSetter<DataType>;
182 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
183}
184
185/*---------------------------------------------------------------------------*/
186/*---------------------------------------------------------------------------*/
190template <typename DataType> auto
192{
193 using Accessor = DataViewSetter<DataType>;
194 return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
195}
196
197/*---------------------------------------------------------------------------*/
198/*---------------------------------------------------------------------------*/
202template <typename DataType> auto
208
209/*---------------------------------------------------------------------------*/
210/*---------------------------------------------------------------------------*/
214template <typename DataType> auto
220
221/*---------------------------------------------------------------------------*/
222/*---------------------------------------------------------------------------*/
223
227template <typename DataType> auto
229{
230 return MatItemVariableScalarInViewT<Cell, DataType>(vbi, var.materialVariable(), var._internalValue());
231}
232
233/*---------------------------------------------------------------------------*/
234/*---------------------------------------------------------------------------*/
235
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.
ARCCORE_HOST_DEVICE const DataType & operator[](ComponentItemLocalId lid) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator[](ItemIndexType item) const
Surcharge pour accéder à la valeure globale à partir du cell id.
ARCCORE_HOST_DEVICE const DataType & value(ComponentItemLocalId mvi) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator[](PureMatVarIndex pmvi) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable scalaire du maillage.
ARCCORE_HOST_DEVICE Accessor operator[](ComponentItemLocalId lid) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator[](ItemIndexType item) const
Surcharge pour accéder à la valeure globale à partir du cell id.
ARCCORE_HOST_DEVICE Accessor value(ComponentItemLocalId lid) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE void setValue(ComponentItemLocalId lid, const DataType &v) const
Positionne la valeur pour l'entité item à v.
Classe de base des vues sur les variables matériaux.
Informations pour construire une vue pour les données sur accélérateur.
Caractéristiques des éléments du maillage.
Definition ItemTypes.h:621
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
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.
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 -*-