14#include "arcane/utils/NotImplementedException.h"
15#include "arcane/utils/Real2.h"
16#include "arcane/utils/Real3.h"
17#include "arcane/utils/Real2x2.h"
18#include "arcane/utils/Real3x3.h"
19#include "arcane/utils/ITraceMng.h"
20#include "arcane/utils/CheckedConvert.h"
22#include "arcane/materials/MeshMaterialVariable.h"
23#include "arcane/materials/MaterialVariableBuildInfo.h"
24#include "arcane/materials/MeshMaterialVariableSynchronizerList.h"
25#include "arcane/materials/MatItemEnumerator.h"
26#include "arcane/materials/ComponentItemVectorView.h"
27#include "arcane/materials/internal/MeshMaterialVariablePrivate.h"
29#include "arcane/core/Array2Variable.h"
30#include "arcane/core/VariableRefArray2.h"
31#include "arcane/core/MeshVariable.h"
32#include "arcane/core/ISerializer.h"
33#include "arcane/core/internal/IVariableInternal.h"
35#include "arcane/materials/ItemMaterialVariableBaseT.H"
37#include "arcane/datatype/DataTypeTraits.h"
38#include "arcane/datatype/DataStorageBuildInfo.h"
49template<
typename DataType>
void
51copyTo(SmallSpan2<const DataType> input, SmallSpan<const Int32> input_indexes,
52 SmallSpan2<DataType> output, SmallSpan<const Int32> output_indexes,
53 const RunQueue& queue)
56 Integer nb_value = input_indexes.size();
57 Integer dim2_size = input.dim2Size();
63 auto xo = output[output_indexes[i]];
64 auto xi = input[ input_indexes[i] ];
65 for(
Integer j=0; j<dim2_size; ++j )
73template<
typename DataType>
void
77 ContainerType& values = data->_internal()->_internalDeprecatedValue();
78 Integer dim2_size = values.dim2Size();
82 container.resize(dim1_size,dim2_size);
88template<
typename DataType>
void
95 Int32 nb_add =
static_cast<Int32>(dim1_size * reserve_ratio);
96 var->_internalApi()->resize(VariableResizeArgs(dim1_size, nb_add,
true));
102template<
typename DataType>
void
105 Array<ContainerViewType>& cviews)
110 ConstArrayView<Array2View<DataType>> views = cviews;
113 auto* true_data =
dynamic_cast<ValueDataType*
>(data);
115 ContainerType& values = true_data->_internal()->_internalDeprecatedValue();
118 Integer dim2_size = views[0].dim2Size();
119 Integer current_dim1_size = values.dim1Size();
121 values.resizeNoInit(current_dim1_size+added_dim1_size,dim2_size);
122 ConstArrayView<MatVarIndex> mvi_indexes = component_view._matvarIndexes();
124 for(
Integer i=0, n=mvi_indexes.size(); i<n; ++i ){
126 values[i+current_dim1_size].copy(views[mvi.arrayIndex()][mvi.valueIndex()]);
136: BaseClass(v,global_var,global_var_ref,mvs)
143template<
typename DataType>
void
144ItemMaterialVariableArray<DataType>::
145dumpValues(std::ostream& ostr)
154template<
typename DataType>
void
155ItemMaterialVariableArray<DataType>::
166template<
typename DataType>
void
167ItemMaterialVariableArray<DataType>::
171 IItemFamily* family = m_global_variable->itemFamily();
179 Int32 dim2_size = m_global_variable->valueView().dim2Size();
181 switch(sbuf->
mode()){
182 case ISerializer::ModeReserve:
190 nb_val += envcell.nbMaterial();
193 sbuf->
reserve(m_global_variable->fullName());
195 Int64 nb_basic_value = nb_val * nb_count * dim2_size;
204 values.
addRange(value(ienvcell._varIndex()));
207 values.
addRange(value(imatcell._varIndex()));
214 sbuf->
put(m_global_variable->fullName());
224 if (m_global_variable->fullName()!=ref_name)
225 ARCANE_FATAL(
"Bad serialization expected={0} found={1}",m_global_variable->fullName(),ref_name);
227 Int32 nb_basic_value = nb_value * nb_count;
228 basic_values.
resize(nb_basic_value);
236 setValue(ienvcell._varIndex(),data_values[index]);
240 setValue(imatcell._varIndex(),data_values[index]);
257template<
typename DataType>
void
258ItemMaterialVariableArray<DataType>::
269template<
typename DataType>
void
279template<
typename DataType>
void
283 for( PrivatePartType* pvar : m_vars ){
285 Integer dim1_size = pvar->valueView().dim1Size();
286 pvar->directResize(dim1_size,dim2_size);
296 this->syncReferences();
302template<
typename DataType> Int32
303ItemMaterialVariableArray<DataType>::
306 Int32 dim2_size = m_vars[0]->valueView().dim2Size();
307 return (Int32)
sizeof(DataType) * dim2_size;
313template<
typename DataType>
void
314ItemMaterialVariableArray<DataType>::
315_copyToBufferLegacy(SmallSpan<const MatVarIndex> matvar_indexes,Span<std::byte> bytes)
const
318 Integer dim2_size = m_vars[0]->valueView().dim2Size();
322 const Int32 value_size = CheckedConvert::toInt32(bytes.size() / one_data_size);
323 Array2View<DataType> values(
reinterpret_cast<DataType*
>(bytes.data()),value_size,dim2_size);
324 for( Integer z=0; z<value_size; ++z ){
325 values[z].copy(value(matvar_indexes[z]));
332template<
typename DataType>
void
333ItemMaterialVariableArray<DataType>::
334copyToBuffer(ConstArrayView<MatVarIndex> matvar_indexes,ByteArrayView bytes)
const
336 auto* ptr =
reinterpret_cast<std::byte*
>(bytes.data());
337 return _copyToBufferLegacy(matvar_indexes,{ptr,bytes.size()});
343template<
typename DataType>
void
344ItemMaterialVariableArray<DataType>::
345_copyFromBufferLegacy(SmallSpan<const MatVarIndex> matvar_indexes,Span<const std::byte> bytes)
348 Integer dim2_size = m_vars[0]->valueView().dim2Size();
352 const Integer value_size = CheckedConvert::toInt32(bytes.size() / one_data_size);
353 ConstArray2View<DataType> values(
reinterpret_cast<const DataType*
>(bytes.data()),value_size,dim2_size);
354 for( Integer z=0; z<value_size; ++z ){
355 setValue(matvar_indexes[z],values[z]);
362template<
typename DataType>
void
363ItemMaterialVariableArray<DataType>::
364copyFromBuffer(ConstArrayView<MatVarIndex> matvar_indexes,ByteConstArrayView bytes)
366 auto* ptr =
reinterpret_cast<const std::byte*
>(bytes.data());
367 return _copyFromBufferLegacy(matvar_indexes,{ptr,bytes.size()});
376template<
typename ItemType,
typename DataType>
377MeshMaterialVariableArray<ItemType,DataType>::
378MeshMaterialVariableArray(
const MaterialVariableBuildInfo& v,PrivatePartType* global_var,
379 VariableRefType* global_var_ref,MatVarSpace mvs)
380: ItemMaterialVariableArray<DataType>(v,global_var,global_var_ref,mvs)
381, m_true_global_variable_ref(global_var_ref)
388#define ARCANE_INSTANTIATE_MAT(type) \
389 template class ItemMaterialVariableBase<MaterialVariableArrayTraits<type>>; \
390 template class ItemMaterialVariableArray<type>; \
391 template class MeshMaterialVariableArray<Cell, type>; \
392 template class MeshMaterialVariableCommonStaticImpl<MeshMaterialVariableArray<Cell, type>>
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
#define RUNCOMMAND_LOOP1(iter_name, x1,...)
Boucle sur accélérateur avec arguments supplémentaires pour les réductions.
Int64 largeSize() const
Nombre d'éléments du vecteur (en 64 bits)
void addRange(ConstReferenceType val, Int64 n)
Ajoute n élément de valeur val à la fin du tableau.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
const T * data() const
Accès à la racine du tableau hors toute protection.
Interface d'une famille d'entités.
virtual ItemVectorView view(Int32ConstArrayView local_ids)=0
Vue sur les entités.
Interface d'un sérialiseur.
void reserveInt64(Int64 n)
Réserve pour n Int64.
virtual void reserve(eBasicDataType dt, Int64 n)=0
Réserve de la mémoire pour n objets de type dt.
@ ModePut
Le sérialiseur attend des reserve()
@ ModeGet
Le sérialiseur attend des get()
virtual Int64 getInt64()=0
Récupère une taille.
virtual void put(Span< const Real > values)=0
Ajoute le tableau values.
virtual void putSpan(Span< const Real > values)
Ajoute le tableau values.
virtual eMode mode() const =0
Mode de fonctionnement actuel.
virtual void getSpan(Span< Real > values)
Récupère le tableau values.
virtual void get(ArrayView< Real > values)=0
Récupère le tableau values.
virtual void reserveSpan(eBasicDataType dt, Int64 n)=0
Réserve de la mémoire pour n valeurs de dt.
virtual void putInt64(Int64 value)=0
Ajoute l'entier value.
Vue sur un vecteur d'entités.
Vue sur un vecteur sur les entités d'un composant.
Integer nbItem() const
Nombre d'entités dans la vue.
Maille arcane d'un milieu.
Interface d'un composant (matériau ou milieu) d'un maillage.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
Représente un index sur les variables matériaux et milieux.
Caractéristiques pour une variable matériaux tableau.
Synchronisation d'une liste de variables matériaux.
void apply()
Effectue la synchronisation.
void add(MeshMaterialVariable *var)
Ajoute la variable var à la liste des variables à synchroniser.
MatVarSpace space() const override
Espace de définition de la variable (matériau+milieu ou milieu uniquement)
Vue pour un tableau 2D dont la taille est un 'Int32'.
Vue d'un tableau d'éléments de type T.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
RunCommand makeCommand(const RunQueue &run_queue)
Créé une commande associée à la file run_queue.
Int32 toInt32(Int64 v)
Converti un Int64 en un Int32.
Active toujours les traces dans les parties Arcane concernant les matériaux.
MatVarSpace
Espace de définition d'une variable matériau.
@ Environment
Variable ayant des valeurs uniquement sur les milieux.
ARCANE_DATATYPE_EXPORT Integer dataTypeSize(eDataType type)
Taille du type de donnée type (qui doit être différent de DT_String)
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.
eBasicDataType
Type d'une donnée de base.
double Real
Type représentant un réel.
std::int32_t Int32
Type entier signé sur 32 bits.