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/core/ViewBuildInfo.h"
26#include "arcane/accelerator/AcceleratorGlobal.h"
39template <
typename DataType>
class View1DGetterSetter;
58template <
typename DataType>
66 using ValueType = DataType;
98template <
typename DataType>
106 using ValueType = DataType;
137template <
typename _ItemType,
typename _Accessor,
typename _IndexerType,
bool _HasSimd>
147 using DataType =
typename _Accessor::ValueType;
148 using DataTypeReturnReference = DataType&;
173 ARCANE_CHECK_AT(item.asInt32(), m_size);
174 return Accessor(this->m_values + item.asInt32());
180 ARCANE_CHECK_AT(item.asInt32(), m_size);
181 return Accessor(this->m_values + item.asInt32());
187 ARCANE_CHECK_AT(item.asInt32(), m_size);
188 return Accessor(this->m_values + item.asInt32());
194 ARCANE_CHECK_AT(item.asInt32(), m_size);
195 this->m_values[item.asInt32()] = v;
209template <
typename _ItemType,
typename _Accessor>
215 using DataType =
typename _Accessor::ValueType;
219 using DataTypeReturnReference = DataType&;
244 ARCANE_CHECK_AT(item.asInt32(), m_size);
245 return Accessor(this->m_values + item.asInt32());
251 ARCANE_CHECK_AT(item.asInt32(), m_size);
252 return Accessor(this->m_values + item.asInt32());
258 ARCANE_CHECK_AT(item.asInt32(), m_size);
259 return Accessor(this->m_values + item.asInt32());
263 ARCCORE_HOST_DEVICE
void setValue(IndexerType item,
const DataType& v)
const
265 ARCANE_CHECK_AT(item.asInt32(), m_size);
266 this->m_values[item.asInt32()] = v;
280template <
typename _ItemType,
typename _Accessor>
286 using DataType =
typename _Accessor::ValueType;
290 using DataTypeReturnReference = DataType&;
306 ARCANE_CHECK_AT(item.asInt32(), m_size);
307 return Accessor(this->m_values + item.asInt32());
313 ARCANE_CHECK_AT(item.asInt32(), m_size);
314 return Accessor(this->m_values + item.asInt32());
320 ARCANE_CHECK_AT(item.asInt32(), m_size);
321 return Accessor(this->m_values + item.asInt32());
327 ARCANE_CHECK_AT(item.asInt32(), m_size);
328 this->m_values[item.asInt32()] = v;
336 Int32 index = _toIndex(
lid);
337 ARCANE_CHECK_AT(index, m_size);
344 Int32 index = _toIndex(
lid);
345 ARCANE_CHECK_AT(index, m_size);
352 Int32 index = _toIndex(
lid);
353 ARCANE_CHECK_AT(index, m_size);
358 ARCCORE_HOST_DEVICE
void setValue(ItemLocalIdType
lid,
const DataType& v)
const
360 Int32 index = _toIndex(
lid);
361 ARCANE_CHECK_AT(index, m_size);
362 this->m_values[index] = v;
367 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType
lid)
const
369 return m_table_view[
lid];
387template <
typename _ItemType,
typename _DataType>
426 return this->m_values[item.asInt32()];
432 return this->m_values[item.asInt32()];
438 return this->m_values[item.asInt32()];
451template <
typename _ItemType,
typename _DataType>
476 return m_values[item.asInt32()];
482 return m_values[item.asInt32()];
488 return m_values[item.asInt32()];
494 return m_values[_toIndex(
lid)];
500 return m_values[_toIndex(
lid)];
506 return m_values[_toIndex(
lid)];
511 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType
lid)
const
513 return m_table_view[
lid];
530template <
typename _ItemType,
typename _DataType>
553 return this->m_values[i.asInt32()];
559 return m_values[_toIndex(
lid)];
565 return m_values[item.asInt32()][i];
571 return m_values[_toIndex(
lid)][i];
577 return m_values[i.asInt32()];
583 return m_values[_toIndex(
lid)];
588 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType
lid)
const
590 return m_table_view[
lid];
604template <
typename _ItemType,
typename _DataType>
628 return this->m_values[i.asInt32()];
634 return this->m_values[item.asInt32()][i];
640 return this->m_values[i.asInt32()];
656template <
typename _ItemType,
typename _Accessor,
typename _Indexer>
665 using DataType =
typename Accessor::ValueType;
666 using DataTypeReturnType =
typename Accessor::DataTypeReturnReference;
678 return DataTypeReturnType(this->m_values[item.asInt32()]);
684 return this->m_values[item.asInt32()][i];
690 return DataTypeReturnType(this->m_values[item.asInt32()]);
703template <
typename _ItemType,
typename _Accessor>
712 using DataType =
typename Accessor::ValueType;
713 using DataTypeReturnType =
typename Accessor::DataTypeReturnReference;
723 ARCCORE_HOST_DEVICE DataTypeReturnType
operator[](IndexerType item)
const
725 return DataTypeReturnType(this->m_values[item.asInt32()]);
729 ARCCORE_HOST_DEVICE DataType&
operator()(IndexerType item, Int32 i)
const
731 return this->m_values[item.asInt32()][i];
737 return DataTypeReturnType(this->m_values[item.asInt32()]);
750template <
typename _ItemType,
typename _Accessor>
759 using DataType =
typename Accessor::ValueType;
760 using DataTypeReturnType =
typename Accessor::DataTypeReturnReference;
777 return DataTypeReturnType(m_values[item.asInt32()]);
783 return m_values[item.asInt32()][i];
789 return DataTypeReturnType(m_values[item.asInt32()]);
795 ARCCORE_HOST_DEVICE DataTypeReturnType
operator[](ItemLocalIdType
lid)
const
797 return DataTypeReturnType(m_values[_toIndex(
lid)]);
801 ARCCORE_HOST_DEVICE DataType&
operator()(ItemLocalIdType
lid, Int32 i)
const
803 return m_values[_toIndex(
lid)][i];
809 return DataTypeReturnType(m_values[_toIndex(
lid)]);
814 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType
lid)
const
816 return m_table_view[
lid];
846template <
typename _ItemType,
typename _Accessor>
855 using DataType =
typename _Accessor::ValueType;
856 using DataTypeReturnReference = DataType&;
894 ARCANE_CHECK_AT(item.asInt32(), m_size);
895 return Accessor(m_values + item.asInt32());
901 ARCANE_CHECK_AT(item.asInt32(), m_size);
902 return Accessor(m_values + item.asInt32());
908 ARCANE_CHECK_AT(item.asInt32(), m_size);
909 return Accessor(m_values + item.asInt32());
913 ARCCORE_HOST_DEVICE
void setValue(IndexerType item,
const DataType& v)
const
915 ARCANE_CHECK_AT(item.asInt32(), m_size);
916 this->m_values[item.asInt32()] = v;
928template <
typename _ItemType,
typename _Accessor>
937 using DataType =
typename _Accessor::ValueType;
938 using DataTypeReturnReference = DataType&;
957 ARCANE_CHECK_AT(item.asInt32(), m_size);
958 return Accessor(this->m_values + item.asInt32());
964 ARCANE_CHECK_AT(item.asInt32(), m_size);
965 return Accessor(this->m_values + item.asInt32());
971 ARCANE_CHECK_AT(item.asInt32(), m_size);
972 return Accessor(this->m_values + item.asInt32());
978 ARCANE_CHECK_AT(item.asInt32(), m_size);
979 this->m_values[item.asInt32()] = v;
987 Int32 index = _toIndex(
lid);
988 ARCANE_CHECK_AT(index, m_size);
995 Int32 index = _toIndex(
lid);
996 ARCANE_CHECK_AT(index, m_size);
1003 Int32 index = _toIndex(
lid);
1004 ARCANE_CHECK_AT(index, m_size);
1009 ARCCORE_HOST_DEVICE
void setValue(ItemLocalIdType
lid,
const DataType& v)
const
1011 Int32 index = _toIndex(
lid);
1012 ARCANE_CHECK_AT(index, m_size);
1013 m_values[index] = v;
1018 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType
lid)
const
1020 return m_table_view[
lid];
1025 DataType* m_values =
nullptr;
1038template <
typename ItemType,
typename DataType>
auto
1048template <
typename ItemType,
typename DataType>
auto
1053 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1059template <
typename ItemType>
auto
1069template <
typename ItemType>
auto
1074 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1080template <
typename ItemType>
auto
1090template <
typename ItemType>
auto
1095 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1101template <
typename ItemType,
typename DataType>
auto
1111template <
typename ItemType,
typename DataType>
auto
1116 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1124template <
typename ItemType,
typename DataType>
auto
1134template <
typename ItemType,
typename DataType>
auto
1144template <
typename ItemType>
auto
1154template <
typename ItemType>
auto
1159 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1165template <
typename ItemType>
auto
1175template <
typename ItemType>
auto
1180 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1186template <
typename ItemType,
typename DataType>
auto
1196template <
typename ItemType,
typename DataType>
auto
1201 return ViewType(command,
var.variable(),
var.asArray(),
var.tableView());
1209template <
typename ItemType,
typename DataType>
auto
1218template <
typename ItemType,
typename DataType>
auto
1227template <
typename ItemType,
typename DataType>
auto
1236template <
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(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.