12#ifndef ARCANE_ACCELERATOR_VARIABLEVIEWS_H
13#define ARCANE_ACCELERATOR_VARIABLEVIEWS_H
17#include "arcane/utils/ArcaneCxx20.h"
21#include "arcane/core/ItemLocalId.h"
23#include "arcane/core/GroupIndexTable.h"
25#include "arcane/accelerator/AcceleratorGlobal.h"
38template <
typename DataType>
class View1DGetterSetter;
57template <
typename DataType>
65 using ValueType = DataType;
97template <
typename DataType>
105 using ValueType = DataType;
136template <
typename _ItemType,
typename _Accessor,
typename _IndexerType,
bool _HasSimd>
146 using DataType =
typename _Accessor::ValueType;
147 using DataTypeReturnReference = DataType&;
172 ARCANE_CHECK_AT(item.asInt32(), m_size);
173 return Accessor(this->m_values + item.asInt32());
179 ARCANE_CHECK_AT(item.asInt32(), m_size);
180 return Accessor(this->m_values + item.asInt32());
186 ARCANE_CHECK_AT(item.asInt32(), m_size);
187 return Accessor(this->m_values + item.asInt32());
193 ARCANE_CHECK_AT(item.asInt32(), m_size);
194 this->m_values[item.asInt32()] = v;
208template <
typename _ItemType,
typename _Accessor>
214 using DataType =
typename _Accessor::ValueType;
218 using DataTypeReturnReference = DataType&;
243 ARCANE_CHECK_AT(item.asInt32(), m_size);
244 return Accessor(this->m_values + item.asInt32());
250 ARCANE_CHECK_AT(item.asInt32(), m_size);
251 return Accessor(this->m_values + item.asInt32());
257 ARCANE_CHECK_AT(item.asInt32(), m_size);
258 return Accessor(this->m_values + item.asInt32());
262 ARCCORE_HOST_DEVICE
void setValue(IndexerType item,
const DataType& v)
const
264 ARCANE_CHECK_AT(item.asInt32(), m_size);
265 this->m_values[item.asInt32()] = v;
279template <
typename _ItemType,
typename _Accessor>
285 using DataType =
typename _Accessor::ValueType;
289 using DataTypeReturnReference = DataType&;
305 ARCANE_CHECK_AT(item.asInt32(), m_size);
306 return Accessor(this->m_values + item.asInt32());
312 ARCANE_CHECK_AT(item.asInt32(), m_size);
313 return Accessor(this->m_values + item.asInt32());
319 ARCANE_CHECK_AT(item.asInt32(), m_size);
320 return Accessor(this->m_values + item.asInt32());
326 ARCANE_CHECK_AT(item.asInt32(), m_size);
327 this->m_values[item.asInt32()] = v;
335 Int32 index = _toIndex(
lid);
336 ARCANE_CHECK_AT(index, m_size);
343 Int32 index = _toIndex(
lid);
344 ARCANE_CHECK_AT(index, m_size);
351 Int32 index = _toIndex(
lid);
352 ARCANE_CHECK_AT(index, m_size);
357 ARCCORE_HOST_DEVICE
void setValue(ItemLocalIdType
lid,
const DataType& v)
const
359 Int32 index = _toIndex(
lid);
360 ARCANE_CHECK_AT(index, m_size);
361 this->m_values[index] = v;
366 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType
lid)
const
368 return m_table_view[
lid];
386template <
typename _ItemType,
typename _DataType>
425 return this->m_values[item.asInt32()];
431 return this->m_values[item.asInt32()];
437 return this->m_values[item.asInt32()];
450template <
typename _ItemType,
typename _DataType>
475 return m_values[item.asInt32()];
481 return m_values[item.asInt32()];
487 return m_values[item.asInt32()];
493 return m_values[_toIndex(
lid)];
499 return m_values[_toIndex(
lid)];
505 return m_values[_toIndex(
lid)];
510 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType
lid)
const
512 return m_table_view[
lid];
529template <
typename _ItemType,
typename _DataType>
552 return this->m_values[i.asInt32()];
558 return m_values[_toIndex(
lid)];
564 return m_values[item.asInt32()][i];
570 return m_values[_toIndex(
lid)][i];
576 return m_values[i.asInt32()];
582 return m_values[_toIndex(
lid)];
587 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType
lid)
const
589 return m_table_view[
lid];
603template <
typename _ItemType,
typename _DataType>
627 return this->m_values[i.asInt32()];
633 return this->m_values[item.asInt32()][i];
639 return this->m_values[i.asInt32()];
655template <
typename _ItemType,
typename _Accessor,
typename _Indexer>
664 using DataType =
typename Accessor::ValueType;
665 using DataTypeReturnType =
typename Accessor::DataTypeReturnReference;
677 return DataTypeReturnType(this->m_values[item.asInt32()]);
683 return this->m_values[item.asInt32()][i];
689 return DataTypeReturnType(this->m_values[item.asInt32()]);
702template <
typename _ItemType,
typename _Accessor>
711 using DataType =
typename Accessor::ValueType;
712 using DataTypeReturnType =
typename Accessor::DataTypeReturnReference;
722 ARCCORE_HOST_DEVICE DataTypeReturnType
operator[](IndexerType item)
const
724 return DataTypeReturnType(this->m_values[item.asInt32()]);
728 ARCCORE_HOST_DEVICE DataType&
operator()(IndexerType item, Int32 i)
const
730 return this->m_values[item.asInt32()][i];
736 return DataTypeReturnType(this->m_values[item.asInt32()]);
749template <
typename _ItemType,
typename _Accessor>
758 using DataType =
typename Accessor::ValueType;
759 using DataTypeReturnType =
typename Accessor::DataTypeReturnReference;
776 return DataTypeReturnType(m_values[item.asInt32()]);
782 return m_values[item.asInt32()][i];
788 return DataTypeReturnType(m_values[item.asInt32()]);
794 ARCCORE_HOST_DEVICE DataTypeReturnType
operator[](ItemLocalIdType
lid)
const
796 return DataTypeReturnType(m_values[_toIndex(
lid)]);
800 ARCCORE_HOST_DEVICE DataType&
operator()(ItemLocalIdType
lid, Int32 i)
const
802 return m_values[_toIndex(
lid)][i];
808 return DataTypeReturnType(m_values[_toIndex(
lid)]);
813 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType
lid)
const
815 return m_table_view[
lid];
845template <
typename _ItemType,
typename _Accessor>
854 using DataType =
typename _Accessor::ValueType;
855 using DataTypeReturnReference = DataType&;
893 ARCANE_CHECK_AT(item.asInt32(), m_size);
894 return Accessor(m_values + item.asInt32());
900 ARCANE_CHECK_AT(item.asInt32(), m_size);
901 return Accessor(m_values + item.asInt32());
907 ARCANE_CHECK_AT(item.asInt32(), m_size);
908 return Accessor(m_values + item.asInt32());
912 ARCCORE_HOST_DEVICE
void setValue(IndexerType item,
const DataType& v)
const
914 ARCANE_CHECK_AT(item.asInt32(), m_size);
915 this->m_values[item.asInt32()] = v;
927template <
typename _ItemType,
typename _Accessor>
936 using DataType =
typename _Accessor::ValueType;
937 using DataTypeReturnReference = DataType&;
956 ARCANE_CHECK_AT(item.asInt32(), m_size);
957 return Accessor(this->m_values + item.asInt32());
963 ARCANE_CHECK_AT(item.asInt32(), m_size);
964 return Accessor(this->m_values + item.asInt32());
970 ARCANE_CHECK_AT(item.asInt32(), m_size);
971 return Accessor(this->m_values + item.asInt32());
977 ARCANE_CHECK_AT(item.asInt32(), m_size);
978 this->m_values[item.asInt32()] = v;
986 Int32 index = _toIndex(
lid);
987 ARCANE_CHECK_AT(index, m_size);
994 Int32 index = _toIndex(
lid);
995 ARCANE_CHECK_AT(index, m_size);
1002 Int32 index = _toIndex(
lid);
1003 ARCANE_CHECK_AT(index, m_size);
1008 ARCCORE_HOST_DEVICE
void setValue(ItemLocalIdType
lid,
const DataType& v)
const
1010 Int32 index = _toIndex(
lid);
1011 ARCANE_CHECK_AT(index, m_size);
1012 m_values[index] = v;
1017 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType
lid)
const
1019 return m_table_view[
lid];
1024 DataType* m_values =
nullptr;
1037template <
typename ItemType,
typename DataType>
auto
1047template <
typename ItemType,
typename DataType>
auto
1052 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1058template <
typename ItemType>
auto
1068template <
typename ItemType>
auto
1073 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1079template <
typename ItemType>
auto
1089template <
typename ItemType>
auto
1094 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1100template <
typename ItemType,
typename DataType>
auto
1110template <
typename ItemType,
typename DataType>
auto
1115 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1123template <
typename ItemType,
typename DataType>
auto
1133template <
typename ItemType,
typename DataType>
auto
1143template <
typename ItemType>
auto
1153template <
typename ItemType>
auto
1158 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1164template <
typename ItemType>
auto
1174template <
typename ItemType>
auto
1179 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1185template <
typename ItemType,
typename DataType>
auto
1195template <
typename ItemType,
typename DataType>
auto
1200 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1208template <
typename ItemType,
typename DataType>
auto
1217template <
typename ItemType,
typename DataType>
auto
1226template <
typename ItemType,
typename DataType>
auto
1235template <
typename ItemType,
typename DataType>
auto
Déclarations de types sur les entités.
Vue en lecture sur une variable partielle tableau du maillage.
ARCCORE_HOST_DEVICE const SmallSpan< const DataType > operator[](IndexerType i) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const SmallSpan< const DataType > operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
ARCCORE_HOST_DEVICE const SmallSpan< const DataType > value(IndexerType i) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator()(ItemLocalIdType lid, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
ARCCORE_HOST_DEVICE const SmallSpan< const DataType > value(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable partielle tableau du maillage.
ARCCORE_HOST_DEVICE DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
ARCCORE_HOST_DEVICE DataTypeReturnType operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE SmallSpan< DataType > value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE DataType & operator()(ItemLocalIdType lid, Int32 i) const
Opérateur d'accès pour l'entité de numéro local lid.
ARCCORE_HOST_DEVICE SmallSpan< DataType > value(ItemLocalIdType lid) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
ARCCORE_HOST_DEVICE Accessor operator()(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
ItemPartialVariableRealNScalarOutViewT(const ViewBuildInfo &command, IVariable *var, SmallSpan< DataType > v, GroupIndexTableView table_view)
Construit la vue.
ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
ARCCORE_HOST_DEVICE void setValue(ItemLocalIdType lid, const DataType &v) const
Positionne la valeur pour l'entité item à v.
ARCCORE_HOST_DEVICE Accessor value(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en lecture sur une variable partielle scalaire du maillage.
ARCCORE_HOST_DEVICE const DataType & value(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator()(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable partielle scalaire du maillage.
ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator()(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
ARCCORE_HOST_DEVICE Accessor operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
ARCCORE_HOST_DEVICE Accessor value(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
ARCCORE_HOST_DEVICE void setValue(ItemLocalIdType lid, const DataType &v) const
Positionne la valeur pour l'entité de numéro local lid à v.
Vue en lecture sur une variable tableau du maillage.
ARCCORE_HOST_DEVICE const SmallSpan< const DataType > value(IndexerType i) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const SmallSpan< const DataType > operator[](IndexerType i) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
Vue en écriture sur une variable tableau du maillage.
ARCCORE_HOST_DEVICE SmallSpan< DataType > value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable tableau du maillage.
ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
ARCCORE_HOST_DEVICE SmallSpan< DataType > value(IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable scalaire de type 'RealN' du maillage.
ItemVariableRealNScalarOutViewT(const ViewBuildInfo &command, IVariable *var, SmallSpan< DataType > v)
Construit la vue.
SimdDirectSetter< DataType > operator()(SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdSetter< DataType > operator()(SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
Vue en lecture sur une variable scalaire du maillage.
SimdTypeTraits< DataType >::SimdType operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
SimdTypeTraits< DataType >::SimdType operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
ARCCORE_HOST_DEVICE const DataType & operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable scalaire du maillage.
ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable scalaire du maillage.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
Classe de base des vues sur les variables.
Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
Informations pour construire une vue pour les données sur accélérateur.
Interface d'une variable.
Caractéristiques des éléments du maillage.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
constexpr ARCCORE_HOST_DEVICE pointer ptrAt(SizeType index) const
Addresse du index-ème élément.
ARCCORE_HOST_DEVICE void copy(const U ©_array)
Recopie le tableau copy_array dans l'instance.
constexpr ARCCORE_HOST_DEVICE pointer data() const noexcept
Pointeur sur le début de la vue.
constexpr ARCCORE_HOST_DEVICE SizeType size() const noexcept
Retourne la taille du tableau.
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.