12#ifndef ARCANE_MATERIALS_COMPONENTSIMD_H
13#define ARCANE_MATERIALS_COMPONENTSIMD_H
23#include "arcane/ArcaneTypes.h"
24#include "arcane/SimdItem.h"
26#include "arcane/materials/MatItem.h"
27#include "arcane/materials/MatItemEnumerator.h"
28#include "arcane/materials/ComponentPartItemVectorView.h"
33#ifdef __INTEL_COMPILER
34# define A_ALIGNED_64 __attribute__((align_value(64)))
43MATERIALS_BEGIN_NAMESPACE
72 SimdIndexType m_value_index;
106 Integer m_component_part_index;
113#define ENUMERATE_SIMD_COMPONENTCELL(iname,env) \
114 A_ENUMERATE_COMPONENTCELL(ComponentPartSimdCellEnumerator,iname,env)
119template<
typename Lambda>
void
127 ENUMERATE_SIMD_COMPONENTCELL(mvi,impure_items){
147 template<
typename Lambda>
150 simple_simd_env_loop(m_pure_items,m_impure_items,
lambda);
179#define ENUMERATE_COMPONENTITEM_LAMBDA(iter_type,iter,container)\
180 Arcane::Materials:: LoopFunctor ## iter_type :: create ( (container) ) << [=]( Arcane::Materials:: LoopFunctor ## iter_type :: IterType iter)
204template<
typename ItemType,
typename DataType>
223 return SimdType(m_value[
mvi.arrayIndex()].data(),
mvi.valueIndex());
229 return this->m_value[
mvi.arrayIndex()][
mvi.valueIndex()];
235 return this->m_value[
lid.localId().arrayIndex()][
lid.localId().valueIndex()];
241 return this->m_value0[
pmvi.valueIndex()];
247 return this->m_value[
mvi.arrayIndex()][
mvi.valueIndex()];
252 return this->m_value0[idx.valueIndex()];
258 return this->operator[](
mc._varIndex());
264 return this->operator[](
mc._varIndex());
269 DataTypeAlignedPtr m_value0;
277template<
typename ItemType,
typename DataType>
300 return this->m_value[
mvi.arrayIndex()][
mvi.valueIndex()];
306 return this->m_value[
lid.localId().arrayIndex()][
lid.localId().valueIndex()];
311 return this->m_value0[
pmvi.valueIndex()];
317 return this->m_value[
mvi.arrayIndex()][
mvi.valueIndex()];
322 return this->m_value0[idx.valueIndex()];
328 return this->operator[](
mc._varIndex());
334 return this->operator[](
mc._varIndex());
339 DataTypeAlignedPtr m_value0;
347template<
typename DataType>
348MatItemVariableScalarInViewT<Cell,DataType>
359template<
typename DataType>
360MatItemVariableScalarOutViewT<Cell,DataType>
369MATERIALS_END_NAMESPACE
#define ARCANE_ALIGNAS(value)
Macro pour garantir l'alignement d'une classe sur value octets.
Vue en lecture sur une variable scalaire du maillage. TODO: Faut-il rajouter la gestion des SIMD comm...
Vue en écriture sur une variable scalaire du maillage. TODO: Faut il rajouter la gestion des types SI...
Classe de base des vues sur les variables matériaux.
Enumérateur SIMD sur une sous-partie (pure ou partielle) d'un sous-ensemble des mailles d'un composan...
Vectorisation des entiers en utilisant une émulation.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
DataType operator[](ItemIndexType mvi) const
Opérateur d'accès pour l'entité item.
DataType value(ItemIndexType mvi) const
Opérateur d'accès pour l'entité item.
DataType operator[](EnvCellEnumerator mc) const
Valeur partielle de la variable pour l'itérateur mc.
DataType operator[](PureMatVarIndex pmvi) const
Opérateur d'accès pour l'entité item.
DataType operator[](ComponentItemLocalId lid) const
Opérateur d'accès pour l'entité item.
SimdTypeTraits< DataType >::SimdType operator[](const SimdMatVarIndex &mvi) const
Opérateur d'accès vectoriel avec indirection.
DataType operator[](CellComponentCellEnumerator mc) const
Valeur partielle de la variable pour l'itérateur mc.
DataType & value(ItemIndexType mvi) const
Opérateur d'accès pour l'entité item.
DataType & operator[](EnvCellEnumerator mc) const
Valeur partielle de la variable pour l'itérateur mc.
DataType & operator[](ItemIndexType mvi) const
Opérateur d'accès pour l'entité item.
DataType & operator[](CellComponentCellEnumerator mc) const
Valeur partielle de la variable pour l'itérateur mc.
DataType & operator[](ComponentItemLocalId lid) const
Opérateur d'accès pour l'entité item.
SimdSetter< DataType > operator[](const SimdMatVarIndex &mvi) const
Opérateur d'accès vectoriel avec indirection.
Enumérateur sur les constituants d'une maille.
Index d'un Item matériaux dans une variable.
Vue sur une partie pure ou partielles des entités d'un composant.
IMeshComponent * component() const
Composant associé
Int32ConstArrayView valueIndexes() const
Liste des valueIndex() de la partie.
Enumérateur sur les mailles d'un milieu.
Vecteur sur les entités d'un milieu.
Interface d'un composant (matériau ou milieu) d'un maillage.
Interface d'un milieu d'un maillage.
Interface d'une variable matériau d'un maillage.
Représente un index sur les variables matériaux et milieux.
Index d'un Item matériaux pure dans une variable.
Classe de base des énumérateurs vectoriels avec indirection.
Indexeur SIMD sur un composant.
Int32 arrayIndex() const
Retourne l'indice du tableau de valeur dans la liste des variables.
const SimdIndexType & valueIndex() const
Retourne l'indice dans le tableau de valeur.
Vue constante d'un tableau de type T.
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.