Arcane  v3.14.10.0
Documentation développeur
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/*---------------------------------------------------------------------------*/
42{
43 public:
44 // Pour l'instant n'utilise pas encore les paramètres
46 {
47 }
48 private:
49};
50
51/*---------------------------------------------------------------------------*/
52/*---------------------------------------------------------------------------*/
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
71 ARCCORE_HOST_DEVICE const DataType& operator[](ComponentItemLocalId lid) const
72 {
73 return this->m_value[lid.localId().arrayIndex()][lid.localId().valueIndex()];
74 }
75
77 ARCCORE_HOST_DEVICE const DataType& operator[](PureMatVarIndex pmvi) const
78 {
79 return this->m_value[0][pmvi.valueIndex()];
80 }
81
83 ARCCORE_HOST_DEVICE const DataType& operator[](ItemIndexType item) const
84 {
85 return this->m_value[0][item.localId()];
86 }
87
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/*---------------------------------------------------------------------------*/
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
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
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
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
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/*---------------------------------------------------------------------------*/
185template<typename DataType> auto
187{
188 using Accessor = DataViewSetter<DataType>;
189 return MatItemVariableScalarOutViewT<Cell,Accessor>(cmd, var.materialVariable(),var._internalValue());
190}
191
192/*---------------------------------------------------------------------------*/
193/*---------------------------------------------------------------------------*/
197template<typename DataType> auto
199{
200 using Accessor = DataViewSetter<DataType>;
201 return MatItemVariableScalarOutViewT<Cell,Accessor>(cmd, var.materialVariable(),var._internalValue());
202}
203
204/*---------------------------------------------------------------------------*/
205/*---------------------------------------------------------------------------*/
209template<typename DataType> auto
211{
212 using Accessor = DataViewGetterSetter<DataType>;
213 return MatItemVariableScalarOutViewT<Cell,Accessor>(cmd, var.materialVariable(),var._internalValue());
214}
215
216/*---------------------------------------------------------------------------*/
217/*---------------------------------------------------------------------------*/
221template<typename DataType> auto
223{
224 using Accessor = DataViewGetterSetter<DataType>;
225 return MatItemVariableScalarOutViewT<Cell,Accessor>(cmd, var.materialVariable(),var._internalValue());
226}
227
228/*---------------------------------------------------------------------------*/
229/*---------------------------------------------------------------------------*/
230
234template<typename DataType> auto
236{
237 return MatItemVariableScalarInViewT<Cell,DataType>(cmd, var.materialVariable(),var._internalValue());
238}
239
240/*---------------------------------------------------------------------------*/
241/*---------------------------------------------------------------------------*/
242
246template<typename DataType> auto
248{
249 return MatItemVariableScalarInViewT<Cell,DataType>(cmd, var.materialVariable(),var._internalValue());
250}
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...
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. TODO: Faut il rajouter la gestion des types SI...
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.
Gestion d'une commande 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:120
Index d'un Item matériaux 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(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 -*-