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"
38class VariableBuildInfo;
39template <
typename ItemType,
typename DataTypeT>
class MeshVariableScalarRefT;
51class MaterialVariableBuildInfo;
52class MeshMaterialVariablePrivate;
53class MeshMaterialVariableSynchronizerList;
54class CopyBetweenPartialAndGlobalArgs;
55class ResizeVariableIndexerArgs;
56class InitializeWithZeroArgs;
72 friend MeshMaterialVariablePrivate;
83 String name()
const override;
89 void setKeepOnChange(
bool v)
override;
90 bool keepOnChange()
const override;
106 void removeDepend(
IVariable* var)
override;
113 IMeshMaterialVariableInternal* _internalApi()
override;
135 void incrementReference();
143 MeshMaterialVariablePrivate* m_p =
nullptr;
151 virtual Ref<IData> _internalCreateSaveDataRef(Integer nb_value) =0;
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;
170 const RunQueue& queue, Int32 data_type_size);
177template<
typename DataType>
182 using ValueType = DataType;
184 using SubViewType = DataType;
185 using SubConstViewType = DataType;
186 using SubInputViewType = DataType;
198 ARCANE_MATERIALS_EXPORT
static void
200 ARCANE_MATERIALS_EXPORT
static void
204 ARCANE_MATERIALS_EXPORT
static void
207 static ARCCORE_HOST_DEVICE
void setValue(DataType& view,
const DataType& v)
211 ARCANE_MATERIALS_EXPORT
static void
212 resizeWithReserve(
PrivatePartType* var, Int32 new_size, Real reserve_ratio);
213 static Integer dimension() {
return 0; }
217 return asWritableBytes(view);
225template<
typename DataType>
230 using ValueType = DataType;
246 ARCANE_MATERIALS_EXPORT
249 ARCANE_MATERIALS_EXPORT
253 ARCANE_MATERIALS_EXPORT
264 ARCANE_MATERIALS_EXPORT
265 static void resizeWithReserve(
PrivatePartType* var, Integer new_size, Real resize_ratio);
269 return asWritableBytes(s);
272 static Integer dimension() {
return 0; }
282template<
typename Traits>
288 using TraitsType = Traits;
289 using ValueType =
typename Traits::ValueType;
290 using DataType =
typename Traits::ValueType;
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;
307 ARCANE_MATERIALS_EXPORT
309 PrivatePartType* global_var,
317 ARCANE_MATERIALS_EXPORT
void buildFromManager(
bool is_continue)
override;
319 ARCANE_MATERIALS_EXPORT Ref<IData> _internalCreateSaveDataRef(Integer nb_value)
override;
321 ARCANE_MATERIALS_EXPORT
324 ARCANE_MATERIALS_EXPORT
325 void _copyBetweenPartialAndGlobal(
const CopyBetweenPartialAndGlobalArgs& args)
override;
326 ARCANE_MATERIALS_EXPORT
327 void _initializeNewItemsWithZero(InitializeWithZeroArgs& args)
override;
330 ARCANE_MATERIALS_EXPORT
void
340 void setFillValue(
MatVarIndex mvi,
const DataType& v)
352 void _syncFromGlobalVariable();
353 PrivatePartType* _trueGlobalVariable()
355 return m_global_variable;
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;
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>
438 using VariableRefType =
typename Traits::VariableRefType;
442 ARCANE_MATERIALS_EXPORT
444 PrivatePartType* global_var,
462 using BaseClass::setValue;
463 using BaseClass::value;
465 ARCANE_MATERIALS_EXPORT
void synchronize()
override;
467 ARCANE_MATERIALS_EXPORT
void dumpValues(std::ostream& ostr)
override;
473 ARCANE_MATERIALS_EXPORT
475 ARCANE_MATERIALS_EXPORT
485 ARCANE_MATERIALS_EXPORT Int32 dataTypeSize()
const override;
486 ARCANE_MATERIALS_EXPORT
489 ARCANE_MATERIALS_EXPORT
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>
535 using BuilderType =
typename ThatInterface::BuilderType;
537 using ItemTypeTemplate = ItemType;
541 using PrivatePartType =
typename BaseClass::PrivatePartType;
547 ARCANE_MATERIALS_EXPORT
549 PrivatePartType* global_var,
551 ARCANE_MATERIALS_EXPORT
556 VariableRefType* globalVariableReference()
const final {
return m_true_global_variable_ref; }
557 void incrementReference()
final { BaseClass::incrementReference(); }
590template<
typename DataType>
605 using VariableRefType =
typename Traits::VariableRefType;
609 ARCANE_MATERIALS_EXPORT
611 PrivatePartType* global_var,
616 ARCANE_DEPRECATED_REASON(
"Y2022: Do not use internal storage accessor")
621 ARCANE_MATERIALS_EXPORT
void synchronize()
override;
623 ARCANE_MATERIALS_EXPORT
void dumpValues(std::ostream& ostr)
override;
629 ARCANE_MATERIALS_EXPORT Int32 dataTypeSize()
const override;
631 ARCANE_MATERIALS_EXPORT
635 ARCANE_MATERIALS_EXPORT
641 ARCANE_MATERIALS_EXPORT
void resize(Integer dim2_size);
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>
687 using BuilderType =
typename ThatInterface::BuilderType;
689 using ItemTypeTemplate = ItemType;
693 using PrivatePartType =
typename BaseClass::PrivatePartType;
699 ARCANE_MATERIALS_EXPORT
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; }
File d'exécution pour un accélérateur.
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
Liste des vues visibles uniquement depuis l'ĥote.
UniqueArray< PrivatePartType * > m_vars
Variables pour les différents matériaux.
UniqueArray< ContainerViewType > m_device_views
Liste des vues visibles uniquement depuis l'accélérateur.
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.
Variable scalaire sur un type d'entité du maillage.
Variable tableau bi dimensionnel.
Référence à une variable.
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.
Classe de base des vecteurs 1D de données.
const T * data() const
Accès à la racine du tableau hors toute protection.
Vue pour un tableau 2D constant.
Vue constante d'un tableau de type T.
Interface d'un sérialiseur.
Interface du gestionnaire de traces.
Vue pour un tableau 2D dont la taille est un 'Int32'.
Vue d'un tableau d'éléments de type T.
__host__ __device__ void fill(T o)
Remplit le tableau avec la valeur o.
__host__ __device__ void copy(const U ©_array)
Recopie le tableau copy_array dans l'instance.
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).
Active toujours les traces dans les parties Arcane concernant les matériaux.
MatVarSpace
Espace de définition d'une variable matériau.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ARCANE_DATATYPE_EXPORT Integer dataTypeSize(eDataType type)
Taille du type de donnée type (qui doit être différent de DT_String)