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
50MaterialVariableArrayTraits<DataType>::
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
74MaterialVariableArrayTraits<DataType>::
75resizeAndFillWithDefault(ValueDataType* data,ContainerType& container,Integer dim1_size)
77 ContainerType& values = data->_internal()->_internalDeprecatedValue();
78 Integer dim2_size = values.dim2Size();
82 container.resize(dim1_size,dim2_size);
88template<
typename DataType>
void
89MaterialVariableArrayTraits<DataType>::
90resizeWithReserve(PrivatePartType* var, Integer dim1_size,
Real reserve_ratio)
95 Int32 nb_add =
static_cast<Int32>(dim1_size * reserve_ratio);
96 var->_internalApi()->resizeWithReserve(dim1_size, nb_add);
102template<
typename DataType>
void
103MaterialVariableArrayTraits<DataType>::
104saveData(IMeshComponent* component,IData* data,
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();
116 ComponentItemVectorView component_view = component->view();
118 Integer dim2_size = views[0].dim2Size();
119 Integer current_dim1_size = values.dim1Size();
120 Integer added_dim1_size = component_view.nbItem();
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 ){
125 MatVarIndex mvi = mvi_indexes[i];
126 values[i+current_dim1_size].copy(views[mvi.arrayIndex()][mvi.valueIndex()]);
133template<
typename DataType> ItemMaterialVariableArray<DataType>::
134ItemMaterialVariableArray(
const MaterialVariableBuildInfo& v,PrivatePartType* global_var,
136: BaseClass(v,global_var,global_var_ref,mvs)
143template<
typename DataType>
void
154template<
typename DataType>
void
166template<
typename DataType>
void
171 IItemFamily* family = m_global_variable->itemFamily();
179 Int32 dim2_size = m_global_variable->valueView().dim2Size();
180 bool has_mat = this->space()!=MatVarSpace::Environment;
181 switch(
sbuf->mode()){
182 case ISerializer::ModeReserve:
193 sbuf->reserve(m_global_variable->fullName());
199 case ISerializer::ModePut:
204 values.addRange(value(
ienvcell._varIndex()));
207 values.addRange(value(
imatcell._varIndex()));
212 Int64
nb_value = values.largeSize();
214 sbuf->put(m_global_variable->fullName());
219 case ISerializer::ModeGet:
224 if (m_global_variable->fullName()!=
ref_name)
225 ARCANE_FATAL(
"Bad serialization expected={0} found={1}",m_global_variable->fullName(),
ref_name);
226 Int32
nb_value = CheckedConvert::toInt32(
sbuf->getInt64());
257template<
typename DataType>
void
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>>
394ARCANE_INSTANTIATE_MAT(
Byte);
395ARCANE_INSTANTIATE_MAT(
Int16);
396ARCANE_INSTANTIATE_MAT(
Int32);
397ARCANE_INSTANTIATE_MAT(
Int64);
398ARCANE_INSTANTIATE_MAT(
Real);
399ARCANE_INSTANTIATE_MAT(Real2);
400ARCANE_INSTANTIATE_MAT(Real3);
401ARCANE_INSTANTIATE_MAT(Real2x2);
402ARCANE_INSTANTIATE_MAT(Real3x3);
#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.
Interface d'une famille d'entités.
virtual ItemVectorView view(Int32ConstArrayView local_ids)=0
Vue sur les entités.
Vue sur un vecteur d'entités.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Vue sur une liste de mailles avec infos sur les milieux.
Maille arcane d'un milieu.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
Variable tableau sur un matériau du maillage.
Synchronisation d'une liste de variables matériaux.
Vue constante d'un tableau de type T.
Interface d'un sérialiseur.
Exception lorsqu'une fonction n'est pas implémentée.
Exception lorsqu'une opération n'est pas supportée.
Chaîne de caractères unicode.
RunCommand makeCommand(const RunQueue &run_queue)
Créé une commande associée à la file run_queue.
Active toujours les traces dans les parties Arcane concernant les matériaux.
MatVarSpace
Espace de définition d'une variable matériau.
ARCANE_DATATYPE_EXPORT Integer dataTypeSize(eDataType type)
Taille du type de donnée type (qui doit être différent de DT_String)
unsigned char Byte
Type d'un octet.
eDataType
Type d'une donnée.
@ DT_Int64
Donnée de type entier 64 bits.
Int32 Integer
Type représentant un entier.