12#ifndef ARCANE_MATERIALS_INTERNAL_MESHMATERIALMNG_H
13#define ARCANE_MATERIALS_INTERNAL_MESHMATERIALMNG_H
17#include "arcane/utils/TraceAccessor.h"
18#include "arcane/utils/Array.h"
19#include "arcane/utils/Mutex.h"
21#include "arcane/core/MeshHandle.h"
23#include "arcane/core/materials/IMeshMaterialMng.h"
25#include "arcane/core/materials/internal/IMeshMaterialMngInternal.h"
27#include "arcane/accelerator/core/Runner.h"
28#include "arcane/accelerator/core/RunQueuePool.h"
30#include "arcane/materials/MeshBlock.h"
31#include "arcane/materials/AllCellToAllEnvCellConverter.h"
32#include "arcane/materials/internal/MeshMaterial.h"
33#include "arcane/materials/internal/MeshEnvironment.h"
34#include "arcane/materials/internal/MeshMaterialSynchronizer.h"
79 void initializeAsyncPool(Int32
nb_queue);
101 return m_material_mng->getAllCellToAllEnvCell();
105 return m_material_mng->createAllCellToAllEnvCell();
109 return m_material_mng->_variablesIndexer();
113 return m_material_mng->_addVariable(
var);
117 return m_material_mng->_removeVariable(
var);
121 return m_material_mng->_modifier();
133 return m_material_mng->componentItemSharedInfo(level);
137 return m_material_mng->runQueue();
141 return m_material_mng->asyncRunQueuePool();
145 return m_material_mng->additionalCapacityRatio();
149 return m_material_mng->m_is_use_accelerator_for_constituent_item_vector;
196 return m_is_allocate_scalar_environment_variable_as_material;
218 void dumpInfos(std::ostream& o)
override;
227 return &m_variable_lock;
237 Int32 nbVariable()
const {
return static_cast<Int32>(m_full_name_variable_map.size()); }
241 AllEnvCellVectorView _view(SmallSpan<const Int32> cells_local_id);
245 return this->_view(cells.view().localIds());
250 return this->_view(cells.localIds());
266 m_synchronize_variable_version = version;
271 return m_synchronize_variable_version;
278 return m_variable_factory_mng;
283 m_is_use_material_value_when_removing_partial_value = v;
285 bool isUseMaterialValueWhenRemovingPartialValue()
const override
287 return m_is_use_material_value_when_removing_partial_value;
292 AllEnvData* allEnvData() {
return m_all_env_data.get(); }
293 ComponentItemSharedInfo* componentItemSharedInfo(
Int32 level)
const;
297 void dumpInfos2(std::ostream& o);
299 const MeshHandle& meshHandle()
const {
return m_mesh_handle; }
305 createAllCellToAllEnvCell();
307 bool isCellToAllEnvCellForRunCommand()
const override {
return m_is_allcell_2_allenvcell; }
314 Runner& runner()
const {
return m_runner_info->m_runner; }
315 RunQueue& runQueue()
const {
return m_runner_info->m_run_queue; }
316 Accelerator::RunQueuePool& asyncRunQueuePool()
const {
return m_runner_info->m_async_queue_pool; }
317 Real additionalCapacityRatio()
const {
return m_additional_capacity_ratio; }
322 AllCellToAllEnvCell* getAllCellToAllEnvCell()
const {
return m_allcell_2_allenvcell; }
323 void createAllCellToAllEnvCell();
332 using VariableToMaterialVariableMap = std::map<IVariable*,IMeshMaterialVariable*>;
333 using VariableToMaterialVariablePair = VariableToMaterialVariableMap::value_type;
338 std::unique_ptr<InternalApi> m_internal_api;
341 bool m_is_end_create =
false;
342 bool m_is_verbose =
false;
343 bool m_keep_values_after_change =
true;
344 bool m_is_data_initialisation_with_zero =
false;
345 bool m_is_mesh_modification_notified =
false;
346 bool m_is_allocate_scalar_environment_variable_as_material =
false;
347 bool m_is_use_material_value_when_removing_partial_value =
false;
348 int m_modification_flags = 0;
349 Real m_additional_capacity_ratio = 0.05;
351 Mutex m_variable_lock;
353 std::unique_ptr<MeshMaterialModifierImpl> m_modifier;
368 VariableToMaterialVariableMap m_var_to_mat_var_map;
370 std::unique_ptr<Properties> m_properties;
371 std::unique_ptr<AllEnvData> m_all_env_data;
373 std::unique_ptr<IMeshMaterialVariableSynchronizer> m_all_cells_mat_env_synchronizer;
374 std::unique_ptr<IMeshMaterialVariableSynchronizer> m_all_cells_env_only_synchronizer;
375 Integer m_synchronize_variable_version = 1;
376 std::unique_ptr<MeshMaterialExchangeMng> m_exchange_mng;
378 std::unique_ptr<ObserverPool> m_observer_pool;
379 String m_data_compressor_service_name;
382 std::unique_ptr<RunnerInfo> m_runner_info;
391 bool m_is_allcell_2_allenvcell =
false;
393 bool m_is_use_accelerator_for_constituent_item_vector =
true;
404 void _checkEndCreate();
406 void _saveInfosInProperties();
407 void _checkCreateProperties();
408 void _onMeshDestroyed();
409 void _unregisterAllVariables();
415 return m_variables_indexer;
419 return m_all_cells_mat_env_synchronizer.get();
423 return m_all_cells_env_only_synchronizer.get();
File d'exécution pour un accélérateur.
Gestionnaire d'exécution pour accélérateur.
Interface du gestionnaire de variables.
Interface d'une variable.
Vue sur un tableau typé d'entités.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Table de connectivité des 'Cell' vers leur(s) 'AllEnvCell' destinée à une utilisation sur accélérateu...
Vue sur une liste de mailles avec infos sur les milieux.
Informations sur les valeurs des milieux.
Conversion de 'Cell' en 'AllEnvCell'.
Informations partagées sur les 'ComponentItem'.
Interface d'un bloc d'un maillage.
Interface d'un milieu d'un maillage.
API interne Arcane de 'IMeshMaterialMng'.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
Interface du gestionnaire de fabrique de variables matériaux.
Interface du synchroniseur de variables matériaux.
Interface d'une variable matériau d'un maillage.
Informations pour la création d'un milieu.
Sauvegarde/restoration des valeurs des matériaux et milieux.
Infos d'un matériau d'un maillage.
bool isUseAcceleratorForConstituentItemVector() const override
Indique si on utilise l'API accélérateur pour positionner les valeurs de ConstituentItemVectorImpl.
Real additionalCapacityRatio() const override
Ratio pour la capacité additionnelle à allouer lors du redimensionnement des variables.
AllCellToAllEnvCell * getAllCellToAllEnvCell() const override
Renvoie la table de "connectivité" CellLocalId -> AllEnvCell destinée à être utilisée dans un RUNCOMM...
ComponentItemSharedInfo * componentItemSharedInfo(Int32 level) const override
MeshMaterialModifierImpl * modifier() override
Implémentation du modificateur.
IMeshMaterialVariableSynchronizer * allCellsEnvOnlySynchronizer() override
Synchronizeur pour les variables uniquement milieux sur toutes les mailles.
void removeVariable(IMeshMaterialVariable *var) override
Supprime la variable var.
void createAllCellToAllEnvCell() override
Construit la table de "connectivité" CellLocalId -> AllEnvCell destinée à être utilisée dans un RUNCO...
void addVariable(IMeshMaterialVariable *var) override
Ajoute la variable var.
RunQueue & runQueue() const override
File d'exécution associée.
Accelerator::RunQueuePool & asyncRunQueuePool() const override
Liste de files asynchrones.
IMeshMaterialVariableSynchronizer * allCellsMatEnvSynchronizer() override
Synchronizeur pour les variables matériaux et milieux sur toutes les mailles.
ConstArrayView< MeshMaterialVariableIndexer * > variablesIndexer() override
Liste des infos pour indexer les variables matériaux.
Informations sur la file d'exécution utilisée.
Implémentation d'un gestion des matériaux.
bool isInMeshMaterialExchange() const override
Vrai si on est en train de faire un échange de maillage avec gestion des matériaux.
void removeEnvironmentToBlock(IMeshBlock *block, IMeshEnvironment *env) override
Supprime un milieu à un bloc existant.
IMeshMaterialVariableFactoryMng * variableFactoryMng() const override
Interface de la fabrique de variables.
String dataCompressorServiceName() const override
virtual Nom du service utilisé pour compresser les données
AllEnvCellVectorView view(const CellGroup &cells) final
Vue sur les mailles milieux correspondant au groupe cells.
Int64 m_timestamp
Compteur du nombre de modifications des matériaux.
void setDataCompressorServiceName(const String &name) override
void visitVariables(IFunctorWithArgumentT< IMeshMaterialVariable * > *functor) override
Applique le fonctor functor sur l'ensemble des variables matériaux.
void endCreate(bool is_continue) override
Indique qu'on a fini de créer les milieux.
IMeshBlock * createBlock(const MeshBlockBuildInfo &infos) override
Créé un bloc.
Integer synchronizeVariableVersion() const override
Version de l'implémentation pour la synchronisation des variables matériaux.
bool isKeepValuesAfterChange() const override
Indique si les valeurs des variables sont conservées entre les modifications.
UniqueArray< AllCellToAllEnvCell > m_all_cell_to_all_env_cell
Contient une instance de AllCellToAllEnvCell.
ITraceMng * traceMng() override
Gestionnaire de traces.
FullNameVariableMap::value_type FullNameVariablePair
Paire de la liste des variables par nom complet.
Int64 timestamp() const override
Compteur du nombre de modifications de la liste des matériaux et des milieux.
IMesh * mesh() override
Maillage associé.
IMeshMaterialVariableSynchronizer * _allCellsEnvOnlySynchronizer() override
Synchronizeur pour les variables uniquement milieux sur toutes les mailles.
CellToAllEnvCellConverter cellToAllEnvCellConverter() override
Créée une instance pour convertir de 'Cell' en 'AllEnvCell'.
void addEnvironmentToBlock(IMeshBlock *block, IMeshEnvironment *env) override
Ajoute un milieu à un bloc existant.
void dumpInfos(std::ostream &o) override
Ecrit les infos des matériaux et milieux sur le flot o.
IMeshMaterialVariableSynchronizer * _allCellsMatEnvSynchronizer() override
Synchronizeur pour les variables matériaux et milieux sur toutes les mailles.
MeshMaterialInfo * registerMaterialInfo(const String &name) override
Enregistre les infos du matériau de nom name.
void setMeshModificationNotified(bool v) override
Indique si les milieux et matériaux suivent les changements de topologie dans le maillage.
ConstArrayView< IMeshComponent * > components() const override
Liste de tous les composants.
void setAllocateScalarEnvironmentVariableAsMaterial(bool v) override
Positionne l'option indiquant si les variables scalaires milieux sont allouées sur les matériaux.
ConstArrayView< IMeshMaterial * > materials() const override
Liste des matériaux.
IMeshEnvironment * createEnvironment(const MeshEnvironmentBuildInfo &infos) override
Création d'un milieu.
void recreateFromDump() override
Recréé les infos des matériaux et milieux à partir des infos de la protection.
void enableCellToAllEnvCellForRunCommand(bool is_enable, bool force_create=false) override
Active ou désactive la construction et la mise à jour de la table de "connectivité" CellLocalId -> Al...
int modificationFlags() const override
Flags pour paramêtrer les modifications.
void fillWithUsedVariables(Array< IMeshMaterialVariable * > &variables) override
Remplit le tableau variables avec la liste des variables matériaux utilisés.
ConstArrayView< IMeshComponent * > environmentsAsComponents() const override
Liste des milieux vus comme composants.
ConstArrayView< IMeshEnvironment * > environments() const override
Liste des milieux.
IMeshMaterialVariable * checkVariable(IVariable *global_var) override
Variable aux matériaux associé à la variable global global_var (nullptr si aucune)
void forceRecompute() override
Force le recalcul des informations des matériaux.
void _endUpdate()
Remise à jour des structures suite à une modification des mailles de matériaux ou de milieux.
void setDataInitialisationWithZero(bool v) override
Indique comment initialiser les nouvelles valeurs dans les mailles matériaux et milieux.
void setKeepValuesAfterChange(bool v) override
Positionne la sauvegarde des valeurs entre deux modifications des matériaux.
AllEnvCellVectorView view(CellVectorView cells) final
Vue sur les mailles milieux correspondant au groupe cells.
bool isMeshModificationNotified() const override
Indique si les milieux et matériaux suivent les changements de topologie dans le maillage.
IMeshMaterialMngInternal * _internalApi() const override
API interne à Arcane.
void checkMaterialsInCells(Integer max_print) override
Vérifie que les mailles des matériaux sont cohérentes entre les sous-domaines.
IMeshEnvironment * findEnvironment(const String &name, bool throw_exception=true) override
Retourne le milieux de nom name.
bool isDataInitialisationWithZero() const override
Indique comment initialiser les nouvelles valeurs dans les mailles matériaux et milieux.
Mutex * variableLock() override
Verrou utilisé pour le multi-threading.
void setSynchronizeVariableVersion(Integer version) override
Positionne la version de l'implémentation pour la synchronisation des variables matériaux.
bool synchronizeMaterialsInCells() override
Synchronise les mailles des matériaux.
std::map< String, IMeshMaterialVariable * > FullNameVariableMap
Type de la liste des variables par nom complet.
ConstArrayView< IMeshComponent * > materialsAsComponents() const override
Liste des matériaux vus comme composants.
IMeshMaterialVariable * findVariable(const String &name) override
Variable de nom name ou nullptr si aucune de ce nom existe.
void setUseMaterialValueWhenRemovingPartialValue(bool v) override
Indique si on utilise la valeur matériau ou milieu lorsqu'on transforme une maille partielle en maill...
void dumpCellInfos(Cell cell, std::ostream &o) override
Ecrit les infos de la maille cell sur le flot o.
ConstArrayView< IMeshBlock * > blocks() const override
Liste des blocs.
void checkValid() override
Vérifie la validité des structures internes.
void syncVariablesReferences(bool check_resize)
Met à jour les références des variables.
MeshMaterial * _createMaterial(MeshEnvironment *env, MeshMaterialInfo *infos, const String &name)
Création d'un matériau.
AllEnvCellVectorView view(SmallSpan< const Int32 > cells_local_id) final
Vue sur les mailles milieux correspondant aux mailles de numéro locaux cells_local_id.
bool isAllocateScalarEnvironmentVariableAsMaterial() const override
Indique si les variables scalaires milieux sont allouées sur les matériaux.
String name() const override
Nom du gestionnaire.
IMeshBlock * findBlock(const String &name, bool throw_exception=true) override
Retourne le bloc de nom name.
void setModificationFlags(int v) override
Positionner les flags pour paramêtrer les modifications de matériaux/milieux.
Synchronisation de la liste des matériaux/milieux des entités.
Indexer pour les variables materiaux.
Informations pour la création d'un bloc.
IMesh * mesh() const
Maillage associé.
Interface du gestionnaire de traces.
Chaîne de caractères unicode.
Classe d'accès aux traces.
ITraceMng * traceMng() const
Gestionnaire de trace.
Active toujours les traces dans les parties Arcane concernant les matériaux.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-