12#ifndef ARCANE_MATERIALS_MESHMATERIALVARIABLE_H
13#define ARCANE_MATERIALS_MESHMATERIALVARIABLE_H
17#include "arcane/utils/NotImplementedException.h"
18#include "arcane/utils/Array.h"
19#include "arcane/utils/MemoryView.h"
21#include "arcane/core/materials/IMeshMaterialVariable.h"
22#include "arcane/core/materials/MatVarIndex.h"
26#include "arcane/materials/MeshMaterialVariableFactoryRegisterer.h"
28#include "arcane/core/materials/IScalarMeshMaterialVariable.h"
29#include "arcane/core/materials/IArrayMeshMaterialVariable.h"
52class MeshMaterialVariablePrivate;
54class CopyBetweenPartialAndGlobalArgs;
55class ResizeVariableIndexerArgs;
56class InitializeWithZeroArgs;
72 friend MeshMaterialVariablePrivate;
74 friend MeshMaterialVariableSynchronizerList;
79 ~MeshMaterialVariable()
override;
113 IMeshMaterialVariableInternal* _internalApi()
override;
119 virtual Int32 dataTypeSize()
const =0;
135 void incrementReference();
143 MeshMaterialVariablePrivate* m_p =
nullptr;
155 virtual void _copyBetweenPartialAndGlobal(
const CopyBetweenPartialAndGlobalArgs& args) = 0;
156 virtual void _initializeNewItemsWithZero(InitializeWithZeroArgs& args) = 0;
157 virtual void _syncReferences(
bool update_views) = 0;
158 virtual void _resizeForIndexer(ResizeVariableIndexerArgs& args) = 0;
177template<
typename DataType>
182 using ValueType = DataType;
184 using SubViewType = DataType;
185 using SubConstViewType = DataType;
186 using SubInputViewType = DataType;
205 resizeAndFillWithDefault(ValueDataType* data,ContainerType& container,
Integer dim1_size);
207 static ARCCORE_HOST_DEVICE
void setValue(DataType& view,
const DataType& v)
212 resizeWithReserve(PrivatePartType* var,
Int32 new_size,
Real reserve_ratio);
213 static Integer dimension() {
return 0; }
225template<
typename DataType>
230 using ValueType = DataType;
254 static void resizeAndFillWithDefault(ValueDataType* data, ContainerType& container,
265 static void resizeWithReserve(PrivatePartType* var,
Integer new_size,
Real resize_ratio);
272 static Integer dimension() {
return 0; }
282template<
typename Traits>
283class ItemMaterialVariableBase
284:
public MeshMaterialVariable
288 using TraitsType = Traits;
289 using ValueType =
typename Traits::ValueType;
290 using DataType =
typename Traits::ValueType;
291 using ThatClass = ItemMaterialVariableBase<Traits>;
293 using SubViewType =
typename Traits::SubViewType;
294 using SubConstViewType =
typename Traits::SubConstViewType;
295 using SubInputViewType =
typename Traits::SubInputViewType;
296 using ContainerSpanType =
typename Traits::ContainerSpanType;
297 using ContainerViewType =
typename Traits::ContainerViewType;
298 using ContainerConstViewType =
typename Traits::ContainerConstViewType;
299 using PrivatePartType =
typename Traits::PrivatePartType;
300 using ValueDataType =
typename Traits::ValueDataType;
301 using ContainerType =
typename Traits::ContainerType;
302 using UniqueContainerType =
typename Traits::UniqueContainerType;
303 using VariableRefType =
typename Traits::VariableRefType;
309 PrivatePartType* global_var,
325 void _copyBetweenPartialAndGlobal(
const CopyBetweenPartialAndGlobalArgs& args)
override;
327 void _initializeNewItemsWithZero(InitializeWithZeroArgs& args)
override;
340 void setFillValue(
MatVarIndex mvi,
const DataType& v)
352 void _syncFromGlobalVariable();
353 PrivatePartType* _trueGlobalVariable()
355 return m_global_variable;
358 void _init(ArrayView<PrivatePartType*> vars);
359 ARCANE_MATERIALS_EXPORT
void
361 ARCANE_MATERIALS_EXPORT
void _syncReferences(
bool check_resize)
override;
362 ARCANE_MATERIALS_EXPORT
void _resizeForIndexer(ResizeVariableIndexerArgs& args)
override;
363 ARCANE_MATERIALS_EXPORT
void _copyHostViewsToViews(RunQueue* queue);
370 PrivatePartType* m_global_variable =
nullptr;
371 VariableRef* m_global_variable_ref =
nullptr;
389 ContainerViewType view;
391 view =
m_vars[index]->valueView();
393 m_views_as_bytes[index] = TraitsType::toBytes(view);
398 bool _isValidAndUsedAndGlobalUsed(PrivatePartType* partial_var);
404template<
typename TrueType>
424template<
typename DataType>
425class ItemMaterialVariableScalar
426:
public ItemMaterialVariableBase<MaterialVariableScalarTraits<DataType>>
430 using BaseClass = ItemMaterialVariableBase<MaterialVariableScalarTraits<DataType>>;
432 using ThatClass = ItemMaterialVariableScalar<DataType>;
434 using ContainerViewType =
typename Traits::ContainerViewType;
435 using PrivatePartType =
typename Traits::PrivatePartType;
436 using ValueDataType =
typename Traits::ValueDataType;
437 using ContainerType =
typename Traits::ContainerType;
438 using VariableRefType =
typename Traits::VariableRefType;
444 PrivatePartType* global_var,
462 using BaseClass::setValue;
463 using BaseClass::value;
495 using BaseClass::m_p;
499 using BaseClass::m_global_variable;
500 using BaseClass::m_global_variable_ref;
506 void _synchronizeV1();
507 void _synchronizeV2();
508 void _synchronizeV5();
509 Int64 _synchronize2();
526template<
typename ItemType,
typename DataType>
527class MeshMaterialVariableScalar
528:
public ItemMaterialVariableScalar<DataType>
533 using ThatClass = MeshMaterialVariableScalar<ItemType,DataType>;
535 using BuilderType =
typename ThatInterface::BuilderType;
537 using ItemTypeTemplate = ItemType;
539 using BaseClass = ItemMaterialVariableScalar<DataType>;
541 using PrivatePartType =
typename BaseClass::PrivatePartType;
549 PrivatePartType* global_var,
552 ~MeshMaterialVariableScalar();
556 VariableRefType* globalVariableReference()
const final {
return m_true_global_variable_ref; }
557 void incrementReference()
final { BaseClass::incrementReference(); }
580 VariableRefType* m_true_global_variable_ref =
nullptr;
590template<
typename DataType>
591class ItemMaterialVariableArray
592:
public ItemMaterialVariableBase<MaterialVariableArrayTraits<DataType>>
596 using BaseClass = ItemMaterialVariableBase<MaterialVariableArrayTraits<DataType>>;
599 using ThatClass = ItemMaterialVariableArray<DataType>;
601 using ContainerViewType =
typename Traits::ContainerViewType;
602 using PrivatePartType =
typename Traits::PrivatePartType;
603 using ValueDataType =
typename Traits::ValueDataType;
604 using ContainerType =
typename Traits::ContainerType;
605 using VariableRefType =
typename Traits::VariableRefType;
611 PrivatePartType* global_var,
616 ARCANE_DEPRECATED_REASON(
"Y2022: Do not use internal storage accessor")
650 using BaseClass::setValue;
651 using BaseClass::value;
655 using BaseClass::m_p;
660 using BaseClass::m_global_variable;
661 using BaseClass::m_global_variable_ref;
678template<
typename ItemType,
typename DataType>
679class MeshMaterialVariableArray
680:
public ItemMaterialVariableArray<DataType>
685 using ThatClass = MeshMaterialVariableArray<ItemType,DataType>;
687 using BuilderType =
typename ThatInterface::BuilderType;
689 using ItemTypeTemplate = ItemType;
691 using BaseClass = ItemMaterialVariableArray<DataType>;
693 using PrivatePartType =
typename BaseClass::PrivatePartType;
701 PrivatePartType* global_var,
706 void incrementReference()
final { BaseClass::incrementReference(); }
708 void resize(
Int32 dim2_size)
final { BaseClass::resize(dim2_size); }
709 VariableRefType* globalVariableReference()
const final {
return m_true_global_variable_ref; }
714 VariableRefType* m_true_global_variable_ref =
nullptr;
File d'exécution pour un accélérateur.
Vue modifiable pour un tableau 2D.
constexpr DataType * data()
Pointeur sur la mémoire allouée.
constexpr Integer totalNbElement() const
Nombre total d'éléments.
Classe représentant un tableau 2D classique.
Vue modifiable d'un tableau d'un type T.
constexpr const_pointer data() const noexcept
Pointeur sur le début de la vue.
Classe de base des vecteurs 1D de données.
Vue pour un tableau 2D constant.
Vue constante d'un tableau de type T.
Interface d'un sérialiseur.
Interface du gestionnaire de traces.
Interface d'un composant (matériau ou milieu) d'un maillage.
Interface de la classe fonctor de recalcul d'une variable.
Interface d'une variable matériau d'un maillage.
Interface d'un matériau d'un maillage.
ARCANE_MATERIALS_EXPORT void synchronize() override
Synchronise la variable.
ARCANE_MATERIALS_EXPORT void serialize(ISerializer *sbuffer, Int32ConstArrayView ids) override
Sérialise la variable pour les entités de numéro local ids.
ARCANE_MATERIALS_EXPORT void dumpValues(std::ostream &ostr) override
Affiche les valeurs de la variable sur le flot ostr.
ARCANE_MATERIALS_EXPORT void syncReferences() override
Synchronise les références.
ARCANE_MATERIALS_EXPORT IVariable * globalVariable() const override
Variable globale sur le maillage associée.
UniqueArray< ContainerViewType > m_host_views
UniqueArray< PrivatePartType * > m_vars
UniqueArray< ContainerViewType > m_device_views
ARCANE_MATERIALS_EXPORT void fillPartialValuesWithGlobalValues() override
Remplit les valeurs partielles avec la valeur de la maille globale associée.
void _setView(Int32 index)
Positionne les vues à partir du conteneur.
ARCANE_MATERIALS_EXPORT void fillPartialValuesWithSuperValues(Int32 level) override
Remplit les valeurs partielles avec la valeur de la maille du dessus. Si level vaut LEVEL_MATERIAL,...
ARCANE_MATERIALS_EXPORT void fillPartialValues(const DataType &value)
Remplit les valeurs partielles avec la valeur value.
ARCANE_MATERIALS_EXPORT void synchronize() override
Synchronise la variable.
ARCANE_MATERIALS_EXPORT void fillToArray(IMeshMaterial *mat, ArrayView< DataType > values)
Remplit un tableau à partir des valeurs de la variable pour un matériau.
ARCANE_MATERIALS_EXPORT void serialize(ISerializer *sbuffer, Int32ConstArrayView ids) override
Sérialise la variable pour les entités de numéro local ids.
ARCANE_MATERIALS_EXPORT void dumpValues(std::ostream &ostr) override
Affiche les valeurs de la variable sur le flot ostr.
ARCANE_MATERIALS_EXPORT void fillFromArray(IMeshMaterial *mat, ConstArrayView< DataType > values)
Remplit les valeurs de la variable pour un matériau à partir d'un tableau.
Représente un index sur les variables matériaux et milieux.
constexpr __host__ __device__ Int32 arrayIndex() const
Retourne l'indice du tableau de valeur dans la liste des variables.
constexpr __host__ __device__ Int32 valueIndex() const
Retourne l'indice dans le tableau de valeur.
Caractéristiques pour une variable matériaux tableau.
Caractéristiques pour une variable matériaux scalaire.
static ARCANE_MATERIALS_EXPORT IMeshMaterialVariable * getReference(const MaterialVariableBuildInfo &v, MatVarSpace mvs)
Récupère ou construit une variable.
Classe de base des références aux variables matériaux.
Synchronisation d'une liste de variables matériaux.
void setUpToDate(IMeshMaterial *mat) override
Indique que la variable vient d'être mise à jour.
Int64 modifiedTime(IMeshMaterial *mat) override
Temps auquel la variable a été mise à jour.
void removeVariableRef(MeshMaterialVariableRef *var_ref) override
Supprime une référence à cette variable.
void update(IMeshMaterial *mat) override
Recalcule la variable pour le matériau mat si nécessaire.
void dependInfos(Array< VariableDependInfo > &infos, Array< MeshMaterialVariableDependInfo > &mat_infos) override
Infos de dépendances.
void addVariableRef(MeshMaterialVariableRef *var_ref) override
Ajoute une référence à cette variable.
IMeshMaterialVariableComputeFunction * computeFunction() override
Fonction utilisée pour mettre à jour la variable.
void setKeepOnChange(bool v) override
Indique si on souhaite conserver la valeur de la variable apres un changement de la liste des matéria...
void addDepend(IMeshMaterialVariable *var) override
Ajoute var à la liste des dépendances.
void removeDepend(IMeshMaterialVariable *var) override
Supprime var de la liste des dépendances.
void setComputeFunction(IMeshMaterialVariableComputeFunction *v) override
Positionne la fonction de recalcule de la variable.
String name() const override
Nom de la variable.
MatVarSpace space() const override
Espace de définition de la variable (matériau+milieu ou milieu uniquement)
bool keepOnChange() const override
Indique si on souhaite conserver la valeur de la variable apres un changement de la liste des matéria...
Variable tableau sur un type d'entité du maillage.
Variable scalaire sur un type d'entité du maillage.
Référence à une instance.
Vue pour un tableau 2D dont la taille est un 'Int32'.
Vue d'un tableau d'éléments de type T.
__host__ __device__ void copy(const U ©_array)
Recopie le tableau copy_array dans l'instance.
__host__ __device__ void fill(T o)
Remplit le tableau avec la valeur o.
Vue d'un tableau d'éléments de type T.
Chaîne de caractères unicode.
Vecteur de données 2D avec sémantique par valeur (style STL).
Vecteur 1D de données avec sémantique par valeur (style STL).
Paramètres nécessaires à la construction d'une variable.
Infos caractérisant une variable.
Variable tableau bi dimensionnel.
Référence à une variable.
Active toujours les traces dans les parties Arcane concernant les matériaux.
ConstArrayView< IMeshComponent * > MeshComponentList
Liste de composants multi-matériaux du maillage.
MatVarSpace
Espace de définition d'une variable matériau.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
impl::SpanTypeFromSize< std::byte, SizeType >::SpanType asWritableBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets modifiables.
ArrayView< Byte > ByteArrayView
Equivalent C d'un tableau à une dimension de caractères.
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
MATERIALS_BEGIN_NAMESPACE class ARCANE_MATERIALS_EXPORT(64) SimdMatVarIndex
Indexeur SIMD sur un composant.
double Real
Type représentant un réel.
ConstArrayView< Byte > ByteConstArrayView
Equivalent C d'un tableau à une dimension de caractères.
std::int32_t Int32
Type entier signé sur 32 bits.