Arcane  v3.16.3.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MeshEnvironment.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* MeshEnvironment.h (C) 2000-2025 */
9/* */
10/* Milieu d'un maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MATERIALS_INTERNAL_MESHENVIRONMENT_H
13#define ARCANE_MATERIALS_INTERNAL_MESHENVIRONMENT_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18
19#include "arcane/core/ItemGroup.h"
20#include "arcane/core/MeshVariableScalarRef.h"
22#include "arcane/core/materials/IMeshEnvironment.h"
23#include "arcane/core/materials/ComponentItemInternal.h"
24#include "arcane/core/materials/internal/IMeshComponentInternal.h"
25
26#include "arcane/materials/internal/ComponentItemInternalData.h"
27#include "arcane/materials/internal/MeshComponentData.h"
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32namespace Arcane::Materials
33{
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
37
39class MeshMaterial;
41
42/*---------------------------------------------------------------------------*/
43/*---------------------------------------------------------------------------*/
51class MeshEnvironment
52: public TraceAccessor
53, public IMeshEnvironment
54{
55 class InternalApi
57 {
58 public:
59 InternalApi(MeshEnvironment* env) : m_environment(env){}
60 public:
62 {
63 return m_environment->variableIndexer();
64 }
66 {
67 return m_environment->constituentItemListView();
68 }
69 Int32 variableIndexerIndex() const override;
72
73 private:
74
75 MeshEnvironment* m_environment;
76 };
77
78 public:
79
81
82 public:
83
85 ITraceMng* traceMng() override { return TraceAccessor::traceMng(); }
86 String name() const override { return m_data.name(); }
87 CellGroup cells() const override { return m_data.items(); }
89 {
90 return m_materials;
91 }
92 Integer nbMaterial() const override
93 {
94 return m_materials.size();
95 }
96 MeshMaterialVariableIndexer* variableIndexer() const
97 {
98 return m_data.variableIndexer();
99 }
100 ConstituentItemLocalIdListView constituentItemListView() const
101 {
102 return m_data.constituentItemListView();
103 }
104 Int32 id() const override
105 {
106 return m_data.componentId();
107 }
108
109 IUserMeshEnvironment* userEnvironment() const override { return m_user_environment; }
110 void setUserEnvironment(IUserMeshEnvironment* umm) override { m_user_environment = umm; }
111
112 ComponentCell findComponentCell(AllEnvCell c) const override;
113 EnvCell findEnvCell(AllEnvCell c) const override;
114
115 ComponentItemVectorView view() const override;
116 EnvItemVectorView envView() const override;
117
118 void checkValid() override;
119
120 bool isMaterial() const override { return false; }
121 bool isEnvironment() const override { return true; }
122 bool hasSpace(MatVarSpace space) const override
123 {
125 }
126 IMeshMaterial* asMaterial() override { return nullptr; }
127 IMeshEnvironment* asEnvironment() override { return this; }
128
132
135 EnvPartItemVectorView partEnvItems(eMatPart part) const override;
136
138 bool isMonoMaterial() const;
139
141 {
142 m_data.setSpecificExecutionPolicy(policy);
143 }
145 {
146 return m_data.specificExecutionPolicy();
147 }
148
149 public:
150
151 IMeshComponentInternal* _internalApi() override { return &m_internal_api; }
152
153 public:
154
155 void setConstituentItem(Int32 index, ConstituentItemIndex id)
156 {
157 m_data._setConstituentItem(index,id);
158 }
159 Int16 componentId() const { return m_data.componentId(); }
160
161 public:
162
164
165 void build();
166 void addMaterial(MeshMaterial* mm);
167 void setVariableIndexer(MeshMaterialVariableIndexer* idx);
169 void computeNbMatPerCell();
170
171 void computeItemListForMaterials(const ConstituentConnectivityList& connectivity_list);
172
175 void addToTotalNbCellMat(Int32 v) { m_total_nb_cell_mat += v; }
176
177 void resizeItemsInternal(Integer nb_item);
178 void computeMaterialIndexes(ComponentItemInternalData* item_internal_data, RunQueue& queue);
179 void notifyLocalIdsChanged(Int32ConstArrayView old_to_new_ids);
180 MeshComponentData* componentData() { return &m_data; }
181
182 ConstArrayView<MeshMaterial*> trueMaterials()
183 {
184 return m_true_materials;
185 }
186 void setMatInternalDataRange(ComponentItemInternalRange v) { m_mat_internal_data_range = v; }
188
189 private:
190
193
194 IUserMeshEnvironment* m_user_environment = nullptr;
195
196 UniqueArray<IMeshMaterial*> m_materials;
197 UniqueArray<MeshMaterial*> m_true_materials;
198
201 IItemGroupObserver* m_group_observer = nullptr;
202 MeshComponentData m_data;
203 MeshEnvironment* m_non_const_this = nullptr;
204 InternalApi m_internal_api;
205 ComponentItemInternalRange m_mat_internal_data_range;
206
207 public:
208
209 void _computeMaterialIndexes(ComponentItemInternalData* item_internal_data, RunQueue& queue);
210 void _computeMaterialIndexesMonoMat(ComponentItemInternalData* item_internal_data, RunQueue& queue);
211
212 private:
213
214 void _changeIds(MeshComponentData* component_data,Int32ConstArrayView old_to_new_ids);
215};
216
217/*---------------------------------------------------------------------------*/
218/*---------------------------------------------------------------------------*/
219
220} // End namespace Arcane::Materials
221
222/*---------------------------------------------------------------------------*/
223/*---------------------------------------------------------------------------*/
224
225#endif
File d'exécution pour un accélérateur.
Vue constante d'un tableau de type T.
Interface du gestionnaire de traces.
Maille arcane avec info matériaux et milieux.
Gestion des listes de 'ComponentItemInternal'.
Interval des identifiants des constituants dans la liste des ComponentItemInternal.
Vue sur un vecteur sur les entités d'un composant.
Vue sur une partie pure ou partielles des entités d'un composant.
Index d'une entité constituant dans la liste des entités constituants.
Vue sur une instance de ConstituentItemLocalIdList.
Maille arcane d'un milieu.
Vue sur un vecteur sur les entités d'un milieu.
Vue sur une partie pure ou partielles des entités d'un milieu.
API interne Arcane de 'IMeshComponent'.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
Interface d'un matériau d'un maillage.
Données d'un constituant (matériau ou milieu) d'un maillage.
MeshMaterialVariableIndexer * variableIndexer() const override
Indexeur pour accéder aux variables partielles.
Ref< IConstituentItemVectorImpl > createItemVectorImpl() const override
Créé une instance de l'implémentation de 'ConstituentItemVectorImpl'.
ConstituentItemLocalIdListView constituentItemListView() const override
Vue sur les mailles du constituant.
Int32 variableIndexerIndex() const override
Index pour accéder aux variables partielles.
bool isEnvironment() const override
Vrai si le composant est un milieu.
void _computeMaterialIndexesMonoMat(ComponentItemInternalData *item_internal_data, RunQueue &queue)
Calcul les infos sur les matériaux en mono-matériaux.
IMeshMaterialMng * m_material_mng
Gestionnaire de matériaux.
void checkValid() override
Vérifie que le composant est valide.
void build()
Fonctions publiques mais réservées au IMeshMaterialMng.
void setSpecificExecutionPolicy(Accelerator::eExecutionPolicy policy) override
Positionne une politique d'exécution pour ce constituant.
ComponentItemVectorView view() const override
Vue associée à ce composant.
IMeshMaterial * asMaterial() override
Retourne le composant sous la forme d'un IMeshMaterial.
ComponentPartItemVectorView partItems(eMatPart part) const override
Vue sur la partie pure ou impure des entités du composant.
IMeshEnvironment * asEnvironment() override
Retourne le composant sous la forme d'un IMeshMaterial.
bool hasSpace(MatVarSpace space) const override
Indique si le composant est défini pour l'espace space.
ComponentImpurePartItemVectorView impureItems() const override
Vue sur la liste des entités impures (partielles) partielles du composant.
EnvImpurePartItemVectorView impureEnvItems() const override
Vue sur la liste des entités impures (partielles) partielles du milieu.
EnvPartItemVectorView partEnvItems(eMatPart part) const override
Vue sur la partie pure ou impure des entités du milieu.
void computeItemListForMaterials(const ConstituentConnectivityList &connectivity_list)
Calcul pour les mailles des matériaux du milieu leur emplacement dans le tableau d'indexation des var...
ConstArrayView< IMeshMaterial * > materials() override
Liste des matériaux de ce milieu.
void computeMaterialIndexes(ComponentItemInternalData *item_internal_data, RunQueue &queue)
Calcul les infos sur les matériaux.
Int32 id() const override
Identifiant du composant.
IUserMeshEnvironment * userEnvironment() const override
Identifiant du milieu. Il s'agit aussi de l'indice (en commencant par 0) de ce milieu dans la liste d...
ComponentCell findComponentCell(AllEnvCell c) const override
Maille de ce composant pour la maille c.
Integer totalNbCellMat() const
Nombre total de mailles pour tous les matériaux.
Accelerator::eExecutionPolicy specificExecutionPolicy() const override
Politique d'exécution spécifique.
EnvCell findEnvCell(AllEnvCell c) const override
Maille de ce milieu pour la maille c.
CellGroup cells() const override
Groupe des mailles de ce matériau.
void computeNbMatPerCell()
Recalcule le nombre de mailles par matériau et de mailles totales.
ComponentPurePartItemVectorView pureItems() const override
Vue sur la liste des entités pures (associées à la maille globale) du composant.
IMeshMaterialMng * materialMng() override
Gestionnaire associé.
Integer nbMaterial() const override
Nombre de matériaux dans le milieu.
EnvPurePartItemVectorView pureEnvItems() const override
Vue sur la liste des entités pures (associées à la maille globale) du milieu.
void setUserEnvironment(IUserMeshEnvironment *umm) override
Positionne le milieu utilisateur associé
IMeshComponentInternal * _internalApi() override
API interne.
EnvItemVectorView envView() const override
Vue associée à ce milieu.
Integer m_total_nb_cell_mat
Nombre total de mailles pour tous les matériaux.
ITraceMng * traceMng() override
Gestionnaire de trace associé.
bool isMonoMaterial() const
Indique si le milieu est mono-matériau.
bool isMaterial() const override
Vrai si le composant est un matériau.
String name() const override
Nom du composant.
Matériau d'un maillage.
Référence à une instance.
Chaîne de caractères unicode.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
ITraceMng * traceMng() const
Gestionnaire de trace.
Vecteur 1D de données avec sémantique par valeur (style STL).
ItemGroupT< Cell > CellGroup
Groupe de mailles.
Definition ItemTypes.h:183
eExecutionPolicy
Politique d'exécution pour un Runner.
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.
@ MaterialAndEnvironment
Variable ayant des valeurs sur les milieux et matériaux.
eMatPart
Partie d'un composant.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
std::int16_t Int16
Type entier signé sur 16 bits.
std::int32_t Int32
Type entier signé sur 32 bits.