Arcane  v3.16.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ConstituentItemVectorImpl.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/* ConstituentItemVectorImpl.h (C) 2000-2024 */
9/* */
10/* Implémentation de 'IConstituentItemVectorImpl'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MATERIALS_INTERNAL_CONSTITUENTITEMVECTORIMPL_H
13#define ARCANE_MATERIALS_INTERNAL_CONSTITUENTITEMVECTORIMPL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19#include "arcane/utils/TraceAccessor.h"
20#include "arcane/utils/Functor.h"
21
22#include "arcane/core/materials/ComponentItemVector.h"
23#include "arcane/core/materials/internal/ConstituentItemLocalIdList.h"
24
25#include "arcane/materials/internal/MeshComponentPartData.h"
26
27#include <tuple>
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32namespace Arcane::Materials
33{
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
40class ConstituentItemVectorImpl
43{
44 ARCCORE_DEFINE_REFERENCE_COUNTED_INCLASS_METHODS();
45
46 public:
47
48 explicit ConstituentItemVectorImpl(IMeshComponent* component);
49 explicit ConstituentItemVectorImpl(const ComponentItemVectorView& rhs);
50
51 public:
52
53 ConstituentItemVectorImpl(const ConstituentItemVectorImpl& rhs) = delete;
54 ConstituentItemVectorImpl(ConstituentItemVectorImpl&& rhs) = delete;
55 ConstituentItemVectorImpl& operator=(const ConstituentItemVectorImpl& rhs) = delete;
56
57 private:
58
59 ComponentItemVectorView _view() const override;
60 ComponentPurePartItemVectorView _pureItems() const override
61 {
62 return m_part_data->pureView();
63 }
64
65 ComponentImpurePartItemVectorView _impureItems() const override
66 {
67 return m_part_data->impureView();
68 }
69 ConstArrayView<Int32> _localIds() const override { return m_items_local_id.constView(); }
70 IMeshMaterialMng* _materialMng() const override { return m_material_mng; }
71 IMeshComponent* _component() const override { return m_component; }
72 ConstituentItemLocalIdListView _constituentItemListView() const override
73 {
74 return m_constituent_list->view();
75 }
76 ConstArrayView<MatVarIndex> _matvarIndexes() const override
77 {
78 return m_matvar_indexes;
79 }
80
81 public:
82
83 class SetItemHelper;
84 // Méthodes devant être publiques pour compilation avec NVCC.
85 void _setItems(SmallSpan<const Int32> local_ids) override;
86 void _computeNbPureAndImpure(SmallSpan<const Int32> local_ids, RunQueue& queue);
87
88 private:
89
91 void _recomputePartData();
92
93 public:
94
95 IMeshMaterialMng* m_material_mng = nullptr;
96 IMeshComponent* m_component = nullptr;
97 UniqueArray<MatVarIndex> m_matvar_indexes;
98 UniqueArray<Int32> m_items_local_id;
99 std::unique_ptr<MeshComponentPartData> m_part_data;
100 std::unique_ptr<ConstituentItemLocalIdList> m_constituent_list;
101 ComponentItemSharedInfo* m_component_shared_info = nullptr;
102
103 FunctorT<ConstituentItemVectorImpl> m_recompute_part_data_functor;
104 // Seulement utile pour le re-calcul à la volée
105 Int32 m_nb_pure = 0;
106 // Seulement utile pour le re-calcul à la volée
107 Int32 m_nb_impure = 0;
108};
109
110/*---------------------------------------------------------------------------*/
111/*---------------------------------------------------------------------------*/
112
113} // End namespace Arcane::Materials
114
115/*---------------------------------------------------------------------------*/
116/*---------------------------------------------------------------------------*/
117
118#endif
119
File d'exécution pour un accélérateur.
Vue constante d'un tableau de type T.
Functor associé à une méthode d'une classe T.
Vue sur un vecteur sur les entités d'un composant.
Vue sur une instance de ConstituentItemLocalIdList.
void _computeNbPureAndImpureLegacy(SmallSpan< const Int32 > local_ids)
Calcul du nombre de mailles pures et impures sans API accélérateur.
void _setItems(SmallSpan< const Int32 > local_ids) override
Positionne les entités du vecteur.
Interface pour l'implémentation de ComponentItemVector.
Interface d'un composant (matériau ou milieu) d'un maillage.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
Implémentation thread-safe d'un compteur de référence.
Vue d'un tableau d'éléments de type T.
Definition Span.h:673
Vecteur 1D de données avec sémantique par valeur (style STL).
Active toujours les traces dans les parties Arcane concernant les matériaux.
std::int32_t Int32
Type entier signé sur 32 bits.