Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MeshMaterialVariable.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* MeshMaterialVariable.h (C) 2000-2024 */
9/* */
10/* Variable sur un matériau du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MATERIALS_MESHMATERIALVARIABLE_H
13#define ARCANE_MATERIALS_MESHMATERIALVARIABLE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/NotImplementedException.h"
18#include "arcane/utils/Array.h"
19#include "arcane/utils/MemoryView.h"
20
21#include "arcane/core/materials/IMeshMaterialVariable.h"
22#include "arcane/core/materials/MatVarIndex.h"
23
25
26#include "arcane/materials/MeshMaterialVariableFactoryRegisterer.h"
27
28#include "arcane/core/materials/IScalarMeshMaterialVariable.h"
29#include "arcane/core/materials/IArrayMeshMaterialVariable.h"
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34namespace Arcane
35{
36class VariableInfo;
37class VariableRef;
38class VariableBuildInfo;
39template <typename ItemType, typename DataTypeT> class MeshVariableScalarRefT;
40} // namespace Arcane
41
42/*---------------------------------------------------------------------------*/
43/*---------------------------------------------------------------------------*/
44
45namespace Arcane::Materials
46{
47
48/*---------------------------------------------------------------------------*/
49/*---------------------------------------------------------------------------*/
50
51class MaterialVariableBuildInfo;
52class MeshMaterialVariablePrivate;
53class MeshMaterialVariableSynchronizerList;
54class CopyBetweenPartialAndGlobalArgs;
55class ResizeVariableIndexerArgs;
56class InitializeWithZeroArgs;
57
58/*---------------------------------------------------------------------------*/
59/*---------------------------------------------------------------------------*/
60/*!
61 * \internal
62 * \ingroup ArcaneMaterials
63 * \brief Classe de base des variables matériaux.
64 *
65 * Cette classe contient l'implémentation des variables matériaux. Elle
66 * est interne à Arcane. En général, c'est IMeshMaterialVariable qu'il
67 * faut utiliser.
68 */
69class ARCANE_MATERIALS_EXPORT MeshMaterialVariable
71{
72 friend MeshMaterialVariablePrivate;
73 // Pour accès à 'copyToBuffer', 'copyFromBuffer'. A supprimer ensuite
75
76 public:
77
79 ~MeshMaterialVariable() override;
80
81 public:
82
83 String name() const override;
84 void addVariableRef(MeshMaterialVariableRef* var_ref) override;
85 void removeVariableRef(MeshMaterialVariableRef* var_ref) override;
86 MeshMaterialVariableRef* firstReference() const override;
87 IVariable* materialVariable(IMeshMaterial* mat) override;
88
89 void setKeepOnChange(bool v) override;
90 bool keepOnChange() const override;
91
92 MatVarSpace space() const override;
93
94 public:
95
96 //! @name Gestion des dépendances
97 //@{
98 void update(IMeshMaterial* mat) override;
99 void setUpToDate(IMeshMaterial* mat) override;
100 Int64 modifiedTime(IMeshMaterial* mat) override;
101 void addDepend(IMeshMaterialVariable* var) override;
102 void addDepend(IMeshMaterialVariable* var,const TraceInfo& tinfo) override;
103 void addDepend(IVariable* var) override;
104 void addDepend(IVariable* var,const TraceInfo& tinfo) override;
105 void removeDepend(IMeshMaterialVariable* var) override;
106 void removeDepend(IVariable* var) override;
107 void setComputeFunction(IMeshMaterialVariableComputeFunction* v) override;
108 IMeshMaterialVariableComputeFunction* computeFunction() override;
109 void dependInfos(Array<VariableDependInfo>& infos,
110 Array<MeshMaterialVariableDependInfo>& mat_infos) override;
111 //@}
112
113 IMeshMaterialVariableInternal* _internalApi() override;
114
115 public:
116
117 //! @name Fonctions publiques mais réservées à Arcane pour gérer les synchronisations
118 //@{
119 virtual Int32 dataTypeSize() const =0;
120
121 protected:
122
123 // TODO: interface obsolète à supprimer
124 virtual void copyToBuffer(ConstArrayView<MatVarIndex> matvar_indexes,ByteArrayView bytes) const =0;
125 // TODO: interface obsolète à supprimer
126 virtual void copyFromBuffer(ConstArrayView<MatVarIndex> matvar_indexes,ByteConstArrayView bytes) =0;
127 //@}
128
129 public:
130
131 /*!
132 * \internal
133 * Incrémente le compteur de référence.
134 */
135 void incrementReference();
136
137 protected:
138
139 ITraceMng* _traceMng() const;
140
141 protected:
142
143 MeshMaterialVariablePrivate* m_p = nullptr;
144 UniqueArray<Span<std::byte>> m_views_as_bytes;
145
146 protected:
147
148 void _copyToBuffer(SmallSpan<const MatVarIndex> matvar_indexes, Span<std::byte> bytes,RunQueue* queue) const;
149 void _copyFromBuffer(SmallSpan<const MatVarIndex> matvar_indexes, Span<const std::byte> bytes,RunQueue* queue);
150
151 virtual Ref<IData> _internalCreateSaveDataRef(Integer nb_value) =0;
152 virtual void _saveData(IMeshComponent* component,IData* data) =0;
153 virtual void _restoreData(IMeshComponent* component,IData* data,Integer data_index,
154 Int32ConstArrayView ids,bool allow_null_id) =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;
159
160 private:
161
162 static SmallSpan<const Int32> _toInt32Indexes(SmallSpan<const MatVarIndex> indexes);
163
164 public:
165
166 static void _genericCopyTo(Span<const std::byte> input,
167 SmallSpan<const Int32> input_indexes,
168 Span<std::byte> output,
169 SmallSpan<const Int32> output_indexes,
170 const RunQueue& queue, Int32 data_type_size);
171};
172
173/*---------------------------------------------------------------------------*/
174/*---------------------------------------------------------------------------*/
175
176//! Caractéristiques pour une variable matériaux scalaire.
177template<typename DataType>
179{
180 public:
181
182 using ValueType = DataType;
183
184 using SubViewType = DataType;
185 using SubConstViewType = DataType;
186 using SubInputViewType = DataType;
194 using VariableRefType = VariableRefArrayT<DataType>;
195
196 public:
197
198 ARCANE_MATERIALS_EXPORT static void
199 saveData(IMeshComponent* component,IData* data,Array<ContainerViewType>& cviews);
200 ARCANE_MATERIALS_EXPORT static void
201 copyTo(SmallSpan<const DataType> input, SmallSpan<const Int32> input_indexes,
202 SmallSpan<DataType> output, SmallSpan<const Int32> output_indexes,
203 const RunQueue& queue);
204 ARCANE_MATERIALS_EXPORT static void
205 resizeAndFillWithDefault(ValueDataType* data,ContainerType& container,Integer dim1_size);
206
207 static ARCCORE_HOST_DEVICE void setValue(DataType& view,const DataType& v)
208 {
209 view = v;
210 }
211 ARCANE_MATERIALS_EXPORT static void
212 resizeWithReserve(PrivatePartType* var, Int32 new_size, Real reserve_ratio);
213 static Integer dimension() { return 0; }
214 static SmallSpan<std::byte> toBytes(ArrayView<DataType> view)
215 {
216 //SmallSpan<DataType> s(view);
217 return asWritableBytes(view);
218 }
219
220};
221
222/*---------------------------------------------------------------------------*/
223/*---------------------------------------------------------------------------*/
224//! Caractéristiques pour une variable matériaux tableau.
225template<typename DataType>
227{
228 public:
229
230 using ValueType = DataType;
231
241 using UniqueContainerType = UniqueArray2<DataType>;
242 using VariableRefType = VariableRefArray2T<DataType>;
243
244 public:
245
246 ARCANE_MATERIALS_EXPORT
247 static void saveData(IMeshComponent* component, IData* data,
249 ARCANE_MATERIALS_EXPORT
250 static void copyTo(SmallSpan2<const DataType> input, SmallSpan<const Int32> input_indexes,
251 SmallSpan2<DataType> output, SmallSpan<const Int32> output_indexes,
252 const RunQueue& queue);
253 ARCANE_MATERIALS_EXPORT
254 static void resizeAndFillWithDefault(ValueDataType* data, ContainerType& container,
255 Integer dim1_size);
256 static ARCCORE_HOST_DEVICE void setValue(SmallSpan<DataType> view, const DataType& v)
257 {
258 view.fill(v);
259 }
260 static ARCCORE_HOST_DEVICE void setValue(SmallSpan<DataType> view, SmallSpan<const DataType> v)
261 {
262 view.copy(v);
263 }
264 ARCANE_MATERIALS_EXPORT
265 static void resizeWithReserve(PrivatePartType* var, Integer new_size, Real resize_ratio);
266 static SmallSpan<std::byte> toBytes(Array2View<DataType> view)
267 {
268 SmallSpan<DataType> s(view.data(), view.totalNbElement());
269 return asWritableBytes(s);
270 }
271
272 static Integer dimension() { return 0; }
273};
274
275/*---------------------------------------------------------------------------*/
276/*---------------------------------------------------------------------------*/
277/*!
278 * \internal
279 * \brief Classe de base des variables matériaux de avec les
280 * caractéristiques spécifiées par \a Traits.
281 */
282template<typename Traits>
285{
286 public:
287
288 using TraitsType = Traits;
289 using ValueType = typename Traits::ValueType;
290 using DataType = typename Traits::ValueType;
291 using ThatClass = ItemMaterialVariableBase<Traits>;
292
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;
304
305 public:
306
307 ARCANE_MATERIALS_EXPORT
309 PrivatePartType* global_var,
310 VariableRef* global_var_ref,MatVarSpace mvs);
311 ARCANE_MATERIALS_EXPORT ~ItemMaterialVariableBase() override;
312
313 public:
314
315 ARCANE_MATERIALS_EXPORT void syncReferences() override;
316 ARCANE_MATERIALS_EXPORT IVariable* globalVariable() const override;
317 ARCANE_MATERIALS_EXPORT void buildFromManager(bool is_continue) override;
318
319 ARCANE_MATERIALS_EXPORT Ref<IData> _internalCreateSaveDataRef(Integer nb_value) override;
320 ARCANE_MATERIALS_EXPORT void _saveData(IMeshComponent* env,IData* data) override;
321 ARCANE_MATERIALS_EXPORT
322 void _restoreData(IMeshComponent* component,IData* data,Integer data_index,
323 Int32ConstArrayView ids,bool allow_null_id) override;
324 ARCANE_MATERIALS_EXPORT
325 void _copyBetweenPartialAndGlobal(const CopyBetweenPartialAndGlobalArgs& args) override;
326 ARCANE_MATERIALS_EXPORT
327 void _initializeNewItemsWithZero(InitializeWithZeroArgs& args) override;
328
329 ARCANE_MATERIALS_EXPORT void fillPartialValuesWithGlobalValues() override;
330 ARCANE_MATERIALS_EXPORT void
331 fillPartialValuesWithSuperValues(Int32 level) override;
332
333 public:
334
335 void setValue(MatVarIndex mvi, SubInputViewType v)
336 {
337 Traits::setValue(m_host_views[mvi.arrayIndex()][mvi.valueIndex()],v);
338 }
339
340 void setFillValue(MatVarIndex mvi, const DataType& v)
341 {
342 Traits::setValue(m_host_views[mvi.arrayIndex()][mvi.valueIndex()],v);
343 }
344
345 SubConstViewType value(MatVarIndex mvi) const
346 {
347 return m_host_views[mvi.arrayIndex()][mvi.valueIndex()];
348 }
349
350 protected:
351
352 void _syncFromGlobalVariable();
353 PrivatePartType* _trueGlobalVariable()
354 {
355 return m_global_variable;
356 }
357
358 void _init(ArrayView<PrivatePartType*> vars);
359 ARCANE_MATERIALS_EXPORT void
360 _fillPartialValuesWithSuperValues(MeshComponentList components);
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);
364
365 public:
366
367
368 protected:
369
370 PrivatePartType* m_global_variable = nullptr;
371 VariableRef* m_global_variable_ref = nullptr;
372 //! Variables pour les différents matériaux.
374 //! Liste des vues visibles uniquement depuis l'accélérateur
376 //! Liste des vues visibles uniquement depuis l'ĥote
378
379 protected:
380
381 /*!
382 * \brief Positionne les vues à partir du conteneur
383 *
384 * La vue accélérateur n'est pas mise à jour ici mais lors de l'appel
385 * à _copyHostViewsToViews().
386 */
387 void _setView(Int32 index)
388 {
389 ContainerViewType view;
390 if (m_vars[index])
391 view = m_vars[index]->valueView();
392 m_host_views[index] = view;
393 m_views_as_bytes[index] = TraitsType::toBytes(view);
394 }
395
396 private:
397
398 bool _isValidAndUsedAndGlobalUsed(PrivatePartType* partial_var);
399};
400
401/*---------------------------------------------------------------------------*/
402/*---------------------------------------------------------------------------*/
403
404template<typename TrueType>
406{
407 public:
408 static ARCANE_MATERIALS_EXPORT IMeshMaterialVariable*
410 private:
411 static ARCANE_MATERIALS_EXPORT IMeshMaterialVariable* _autoCreate1(const MaterialVariableBuildInfo& vb);
412 static ARCANE_MATERIALS_EXPORT IMeshMaterialVariable* _autoCreate2(const MaterialVariableBuildInfo& vb);
413 static ARCANE_MATERIALS_EXPORT MeshMaterialVariableFactoryRegisterer m_auto_registerer1;
414 static ARCANE_MATERIALS_EXPORT MeshMaterialVariableFactoryRegisterer m_auto_registerer2;
415};
416
417/*---------------------------------------------------------------------------*/
418/*---------------------------------------------------------------------------*/
419/*!
420 * \internal
421 * \ingroup ArcaneMaterials
422 * \brief Variable scalaire sur un matériau du maillage.
423 */
424template<typename DataType>
426: public ItemMaterialVariableBase<MaterialVariableScalarTraits<DataType>>
427{
428 public:
429
432 using ThatClass = ItemMaterialVariableScalar<DataType>;
433
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;
439
440 protected:
441
442 ARCANE_MATERIALS_EXPORT
444 PrivatePartType* global_var,
445 VariableRef* global_var_ref,MatVarSpace mvs);
446
447 public:
448
449 ArrayView<DataType>* views() { return this->m_host_views.data(); }
450
451 protected:
452
453 ArrayView<ArrayView<DataType>> _containerView() { return this->m_host_views; }
454
455 public:
456
457 DataType operator[](MatVarIndex mvi) const
458 {
459 return this->m_host_views[mvi.arrayIndex()][mvi.valueIndex()];
460 }
461
462 using BaseClass::setValue;
463 using BaseClass::value;
464
465 ARCANE_MATERIALS_EXPORT void synchronize() override;
466 ARCANE_MATERIALS_EXPORT void synchronize(MeshMaterialVariableSynchronizerList& sync_list) override;
467 ARCANE_MATERIALS_EXPORT void dumpValues(std::ostream& ostr) override;
468 ARCANE_MATERIALS_EXPORT void dumpValues(std::ostream& ostr,AllEnvCellVectorView view) override;
469 ARCANE_MATERIALS_EXPORT void serialize(ISerializer* sbuffer,Int32ConstArrayView ids) override;
470
471 public:
472
473 ARCANE_MATERIALS_EXPORT
475 ARCANE_MATERIALS_EXPORT
477 Int32ConstArrayView indexes);
478 ARCANE_MATERIALS_EXPORT void fillToArray(IMeshMaterial* mat,ArrayView<DataType> values);
479 ARCANE_MATERIALS_EXPORT void fillToArray(IMeshMaterial* mat,ArrayView<DataType> values,
480 Int32ConstArrayView indexes);
481 ARCANE_MATERIALS_EXPORT void fillPartialValues(const DataType& value);
482
483 private:
484
485 ARCANE_MATERIALS_EXPORT Int32 dataTypeSize() const override;
486 ARCANE_MATERIALS_EXPORT
487 void copyToBuffer(ConstArrayView<MatVarIndex> matvar_indexes,
488 ByteArrayView bytes) const override;
489 ARCANE_MATERIALS_EXPORT
490 void copyFromBuffer(ConstArrayView<MatVarIndex> matvar_indexes,
491 ByteConstArrayView bytes) override;
492
493 protected:
494
495 using BaseClass::m_p;
496
497 private:
498
499 using BaseClass::m_global_variable;
500 using BaseClass::m_global_variable_ref;
501 using BaseClass::m_vars;
503
504 private:
505
506 void _synchronizeV1();
507 void _synchronizeV2();
508 void _synchronizeV5();
509 Int64 _synchronize2();
510
511 private:
512
513 void _copyToBufferLegacy(SmallSpan<const MatVarIndex> matvar_indexes,
514 Span<std::byte> bytes) const;
515 void _copyFromBufferLegacy(SmallSpan<const MatVarIndex> matvar_indexes,
517};
518
519/*---------------------------------------------------------------------------*/
520/*---------------------------------------------------------------------------*/
521/*!
522 * \internal
523 * \ingroup ArcaneMaterials
524 * \brief Variable scalaire sur un matériau du maillage.
525 */
526template<typename ItemType,typename DataType>
528: public ItemMaterialVariableScalar<DataType>
529, public IScalarMeshMaterialVariable<ItemType,DataType>
530{
531 public:
532
535 using BuilderType = typename ThatInterface::BuilderType;
537 using ItemTypeTemplate = ItemType;
538
541 using PrivatePartType = typename BaseClass::PrivatePartType;
542
543 friend StaticImpl;
544
545 protected:
546
547 ARCANE_MATERIALS_EXPORT
549 PrivatePartType* global_var,
550 VariableRefType* global_var_ref,MatVarSpace mvs);
551 ARCANE_MATERIALS_EXPORT
553
554 public:
555
556 VariableRefType* globalVariableReference() const final { return m_true_global_variable_ref; }
557 void incrementReference() final { BaseClass::incrementReference(); }
558 ArrayView<ArrayView<DataType>> _internalFullValuesView() final { return BaseClass::_containerView(); }
559 void fillFromArray(IMeshMaterial* mat, ConstArrayView<DataType> values) final
560 {
561 return BaseClass::fillFromArray(mat,values);
562 }
563 void fillFromArray(IMeshMaterial* mat,ConstArrayView<DataType> values,Int32ConstArrayView indexes) final
564 {
565 BaseClass::fillFromArray(mat,values,indexes);
566 }
567 void fillToArray(IMeshMaterial* mat,ArrayView<DataType> values) final
568 {
569 BaseClass::fillToArray(mat,values);
570 }
571 void fillToArray(IMeshMaterial* mat,ArrayView<DataType> values,Int32ConstArrayView indexes) final
572 {
573 BaseClass::fillToArray(mat,values,indexes);
574 }
575 void fillPartialValues(const DataType& value) final { BaseClass::fillPartialValues(value); }
576 IMeshMaterialVariable* toMeshMaterialVariable() final { return this; }
577
578 private:
579
580 VariableRefType* m_true_global_variable_ref = nullptr;
581};
582
583/*---------------------------------------------------------------------------*/
584/*---------------------------------------------------------------------------*/
585/*!
586 * \internal
587 * \ingroup ArcaneMaterials
588 * \brief Variable tableau sur un matériau du maillage.
589 */
590template<typename DataType>
592: public ItemMaterialVariableBase<MaterialVariableArrayTraits<DataType>>
593{
594 public:
595
598
599 using ThatClass = ItemMaterialVariableArray<DataType>;
600
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;
606
607 protected:
608
609 ARCANE_MATERIALS_EXPORT
611 PrivatePartType* global_var,
612 VariableRef* global_var_ref,MatVarSpace mvs);
613
614 public:
615
616 ARCANE_DEPRECATED_REASON("Y2022: Do not use internal storage accessor")
617 Array2View<DataType>* views() { return m_host_views.data(); }
618
619 public:
620
621 ARCANE_MATERIALS_EXPORT void synchronize() override;
622 ARCANE_MATERIALS_EXPORT void synchronize(MeshMaterialVariableSynchronizerList& sync_list) override;
623 ARCANE_MATERIALS_EXPORT void dumpValues(std::ostream& ostr) override;
624 ARCANE_MATERIALS_EXPORT void dumpValues(std::ostream& ostr,AllEnvCellVectorView view) override;
625 ARCANE_MATERIALS_EXPORT void serialize(ISerializer* sbuffer,Int32ConstArrayView ids) override;
626
627 private:
628
629 ARCANE_MATERIALS_EXPORT Int32 dataTypeSize() const override;
630
631 ARCANE_MATERIALS_EXPORT
632 void copyToBuffer(ConstArrayView<MatVarIndex> matvar_indexes,
633 ByteArrayView bytes) const override;
634
635 ARCANE_MATERIALS_EXPORT
636 void copyFromBuffer(ConstArrayView<MatVarIndex> matvar_indexes,
637 ByteConstArrayView bytes) override;
638
639 public:
640
641 ARCANE_MATERIALS_EXPORT void resize(Integer dim2_size);
642
643 public:
644
645 ConstArrayView<DataType> operator[](MatVarIndex mvi) const
646 {
647 return m_host_views[mvi.arrayIndex()][mvi.valueIndex()];
648 }
649
650 using BaseClass::setValue;
651 using BaseClass::value;
652
653 protected:
654
655 using BaseClass::m_p;
656 ArrayView<Array2View<DataType>> _containerView() { return m_host_views; }
657
658 private:
659
660 using BaseClass::m_global_variable;
661 using BaseClass::m_global_variable_ref;
662 using BaseClass::m_vars;
664
665 void _copyToBufferLegacy(SmallSpan<const MatVarIndex> matvar_indexes,
666 Span<std::byte> bytes) const;
667 void _copyFromBufferLegacy(SmallSpan<const MatVarIndex> matvar_indexes,
669};
670
671/*---------------------------------------------------------------------------*/
672/*---------------------------------------------------------------------------*/
673/*!
674 * \internal
675 * \ingroup ArcaneMaterials
676 * \brief Variable tableau sur un matériau du maillage.
677 */
678template<typename ItemType,typename DataType>
680: public ItemMaterialVariableArray<DataType>
681, public IArrayMeshMaterialVariable<ItemType,DataType>
682{
683 public:
684
687 using BuilderType = typename ThatInterface::BuilderType;
689 using ItemTypeTemplate = ItemType;
690
693 using PrivatePartType = typename BaseClass::PrivatePartType;
694
695 friend StaticImpl;
696
697 protected:
698
699 ARCANE_MATERIALS_EXPORT
701 PrivatePartType* global_var,
702 VariableRefType* global_var_ref,MatVarSpace mvs);
703
704 public:
705
706 void incrementReference() final { BaseClass::incrementReference(); }
707 ArrayView<Array2View<DataType>> _internalFullValuesView() final { return BaseClass::_containerView(); }
708 void resize(Int32 dim2_size) final { BaseClass::resize(dim2_size); }
709 VariableRefType* globalVariableReference() const final { return m_true_global_variable_ref; }
710 IMeshMaterialVariable* toMeshMaterialVariable() final { return this; }
711
712 private:
713
714 VariableRefType* m_true_global_variable_ref = nullptr;
715};
716
717
718/*---------------------------------------------------------------------------*/
719/*---------------------------------------------------------------------------*/
720
721} // End namespace Arcane::Materials
722
723/*---------------------------------------------------------------------------*/
724/*---------------------------------------------------------------------------*/
725
726#endif
File d'exécution pour un accélérateur.
Interface d'une donnée.
Definition IData.h:33
Interface d'un composant (matériau ou milieu) d'un maillage.
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.
Variable scalaire sur un type d'entité du maillage.
Variable tableau bi dimensionnel.
Référence à une variable.
Definition VariableRef.h:56
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 constante d'un tableau de type T.
Interface du gestionnaire de traces.
Vue pour un tableau 2D dont la taille est un 'Int32'.
Definition Span2.h:233
Vue d'un tableau d'éléments de type T.
Definition Span.h:670
__host__ __device__ void fill(T o)
Remplit le tableau avec la valeur o.
Definition Span.h:261
__host__ __device__ void copy(const U &copy_array)
Recopie le tableau copy_array dans l'instance.
Definition Span.h:357
Vue d'un tableau d'éléments de type T.
Definition Span.h:510
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)
Definition DataTypes.cc:109