14#include "arcane/materials/internal/MeshMaterialMng.h"
16#include "arcane/utils/TraceAccessor.h"
17#include "arcane/utils/NotImplementedException.h"
18#include "arcane/utils/AutoDestroyUserData.h"
19#include "arcane/utils/IUserDataList.h"
20#include "arcane/utils/OStringStream.h"
21#include "arcane/utils/PlatformUtils.h"
22#include "arcane/utils/ValueConvert.h"
23#include "arcane/utils/CheckedConvert.h"
24#include "arcane/utils/MemoryUtils.h"
26#include "arcane/core/IMesh.h"
27#include "arcane/core/IItemFamily.h"
28#include "arcane/core/VariableTypes.h"
29#include "arcane/core/ItemPrinter.h"
30#include "arcane/core/IVariableMng.h"
31#include "arcane/core/Properties.h"
32#include "arcane/core/ObserverPool.h"
33#include "arcane/core/materials/IMeshMaterialVariableFactoryMng.h"
34#include "arcane/core/materials/IMeshMaterialVariable.h"
36#include "arcane/core/materials/internal/IMeshMaterialVariableInternal.h"
37#include "arcane/core/internal/IVariableMngInternal.h"
39#include "arcane/accelerator/core/IAcceleratorMng.h"
41#include "arcane/materials/MeshMaterialInfo.h"
42#include "arcane/materials/MeshEnvironmentBuildInfo.h"
43#include "arcane/materials/CellToAllEnvCellConverter.h"
44#include "arcane/materials/MeshMaterialExchangeMng.h"
45#include "arcane/materials/EnumeratorTracer.h"
46#include "arcane/materials/MeshMaterialVariableFactoryRegisterer.h"
47#include "arcane/materials/internal/AllEnvData.h"
48#include "arcane/materials/internal/MeshMaterialModifierImpl.h"
49#include "arcane/materials/internal/MeshMaterialSynchronizer.h"
50#include "arcane/materials/internal/MeshMaterialVariableSynchronizer.h"
51#include "arcane/materials/internal/ConstituentConnectivityList.h"
76extern "C++" IMeshMaterialVariableFactoryMng*
77arcaneCreateMeshMaterialVariableFactoryMng(IMeshMaterialMng* mm);
85arcaneCreateMeshMaterialMng(
const MeshHandle& mesh_handle,
const String& name)
87 MeshMaterialMng* mmm =
new MeshMaterialMng(mesh_handle,name);
98MeshMaterialMng::RunnerInfo::
99RunnerInfo(Runner& runner)
108void MeshMaterialMng::RunnerInfo::
109initializeAsyncPool(
Int32 nb_queue)
115 m_async_queue_pool.initialize(m_runner,nb_queue);
117 m_async_queue_pool.setAsync(
true);
127MeshMaterialMng(
const MeshHandle& mesh_handle,
const String& name)
129: TraceAccessor(mesh_handle.traceMng())
130, m_mesh_handle(mesh_handle)
131, m_internal_api(std::make_unique<InternalApi>(this))
132, m_variable_mng(mesh_handle.variableMng())
134, m_all_cell_to_all_env_cell(MemoryUtils::getDefaultDataAllocator())
136 m_all_env_data = std::make_unique<AllEnvData>(
this);
137 m_exchange_mng = std::make_unique<MeshMaterialExchangeMng>(
this);
138 m_variable_factory_mng = arcaneCreateMeshMaterialVariableFactoryMng(
this);
139 m_observer_pool = std::make_unique<ObserverPool>();
140 m_observer_pool->addObserver(
this,&MeshMaterialMng::_onMeshDestroyed,mesh_handle.onDestroyObservable());
142 String s = platform::getEnvironmentVariable(
"ARCANE_ALLENVCELL_FOR_RUNCOMMAND");
144 m_is_allcell_2_allenvcell =
true;
145 m_mms =
new MeshMaterialSynchronizer(
this);
158 delete m_variable_factory_mng;
159 m_exchange_mng.reset();
160 m_all_cells_env_only_synchronizer.reset();
161 m_all_cells_mat_env_synchronizer.reset();
162 m_all_env_data.reset();
163 m_properties.reset();
165 for( MeshMaterial* m : m_true_materials )
167 m_true_materials.clear();
169 for( MeshEnvironment* e : m_true_environments )
171 m_true_environments.clear();
173 for (IMeshBlock* b : m_true_blocks)
176 for (MeshMaterialInfo* mmi : m_materials_info)
179 for (MeshMaterialVariableIndexer* mvi : m_variables_indexer_to_destroy)
183 m_internal_api.reset();
185 if (m_allcell_2_allenvcell){
186 m_all_cell_to_all_env_cell.clear();
187 m_allcell_2_allenvcell =
nullptr;
192 m_runner_info.reset();
201void MeshMaterialMng::
206 auto* x = MeshMaterialVariableFactoryRegisterer::firstRegisterer();
208 m_variable_factory_mng->registerFactory(x->createFactory());
209 x = x->nextRegisterer();
215 IAcceleratorMng* acc_mng = m_variable_mng->_internalApi()->acceleratorMng();
218 Runner* default_runner = acc_mng->defaultRunner();
220 bool use_accelerator_runner =
true;
221 if (
auto v = Convert::Type<Int32>::tryParseFromEnvironment(
"ARCANE_MATERIALMNG_USE_QUEUE",
true))
222 use_accelerator_runner = (v.value()!=0);
223 if (use_accelerator_runner && default_runner)
224 runner = *default_runner;
227 if (!runner.isInitialized())
228 runner.initialize(Accelerator::eExecutionPolicy::Sequential);
229 m_runner_info = std::make_unique<RunnerInfo>(runner);
231 info() <<
"Use runner '" << this->runner().executionPolicy() <<
"' for MeshMaterialMng name=" << name()
232 <<
" async_queue_size=" << nb_queue;
233 m_runner_info->initializeAsyncPool(nb_queue);
240 RunQueue& q = runQueue();
242 q.setMemoryRessource(eMemoryRessource::Device);
247 int default_flags = 0;
253 int opt_flag_value = 0;
254 String env_name =
"ARCANE_MATERIAL_MODIFICATION_FLAGS";
255 String opt_flag_str = platform::getEnvironmentVariable(env_name);
256 if (!opt_flag_str.null()){
257 if (builtInGetValue(opt_flag_value,opt_flag_str)){
258 pwarning() <<
"Invalid value '" << opt_flag_str
259 <<
" 'for environment variable '" << env_name
261 opt_flag_value = default_flags;
265 opt_flag_value = default_flags;
267 m_modification_flags = opt_flag_value;
272 String env_name =
"ARCANE_MATSYNCHRONIZE_VERSION";
273 String env_value = platform::getEnvironmentVariable(env_name);
274 info() <<
"ENV_VALUE=" << env_value;
275 Integer version = m_synchronize_variable_version;
276 if (!env_value.null()){
277 if (builtInGetValue(version,env_value)){
278 pwarning() <<
"Invalid value '" << env_value
279 <<
" 'for environment variable '" << env_name
283 m_synchronize_variable_version = version;
285 info() <<
"Set material variable synchronize version to "
286 <<
"'" << m_synchronize_variable_version <<
"'";
291 String env_name =
"ARCANE_MATERIAL_DATA_COMPRESSOR_NAME";
292 String env_value = platform::getEnvironmentVariable(env_name);
293 if (!env_value.null()){
294 info() <<
"Use service '" << env_value <<
"' for material data compression";
295 m_data_compressor_service_name = env_value;
301 if (
auto v = Convert::Type<Real>::tryParseFromEnvironment(
"ARCANE_MATERIALMNG_ADDITIONAL_CAPACITY_RATIO",
true)){
303 m_additional_capacity_ratio = v.value();
304 info() <<
"Set additional capacity ratio to " << m_additional_capacity_ratio;
312 if (
auto v = Convert::Type<Real>::tryParseFromEnvironment(
"ARCANE_MATERIALMNG_USE_ACCELERATOR_FOR_CONSTITUENTITEMVECTOR",
true)){
313 m_is_use_accelerator_for_constituent_item_vector = (v.value()!=0);
314 info() <<
"Use accelerator APU for 'ConstituentItemVectorImpl' = " << m_is_use_accelerator_for_constituent_item_vector;
318 m_exchange_mng->build();
323 IItemEnumeratorTracer* item_tracer = IItemEnumeratorTracer::singleton();
325 info() <<
"Adding material enumerator tracing";
326 EnumeratorTracer::_setSingleton(
new EnumeratorTracer(traceMng(),item_tracer->perfCounterRef()));
333void MeshMaterialMng::
334_addVariableIndexer(MeshMaterialVariableIndexer* var_idx)
336 var_idx->setIndex(m_variables_indexer.size());
337 m_variables_indexer.add(var_idx);
353 ARCANE_FATAL(
"Invalid materialMng() for material info");
354 if (
env->materialMng()!=
this)
356 Integer
var_index = m_variables_indexer.size();
357 Int16
mat_id = CheckedConvert::toInt16(m_materials.size());
359 info() <<
"Create material name=" << name <<
"mat_id=" <<
mat_id <<
" var_index=" <<
var_index;
361 m_materials.add(
mat);
362 m_materials_as_components.add(
mat);
363 m_true_materials.add(
mat);
365 _addVariableIndexer(
mat->variableIndexer());
373registerMaterialInfo(
const String& name)
379 ARCANE_FATAL(
"Un matériau de nom '{0}' est déjà enregistré",name);
382 m_materials_info.add(
mmi);
399 Int16
env_index = CheckedConvert::toInt16(m_environments.size());
410 m_true_environments.add(me);
411 m_environments.add(me);
412 m_environments_as_components.add(me);
416 for( Integer i=0; i<
nb_mat; ++i ){
439 m_variables_indexer_to_destroy.add(
var_idx);
441 me->setVariableIndexer(
var_idx);
459 ARCANE_FATAL(
"Un bloc de nom '{0}' est déjà enregistré",name);
461 info() <<
"Creating block name=" << name <<
" index=" <<
block_index
464 for( Integer i=0; i<
nb_env; ++i )
465 info() <<
" Adding environment name=" << infos.
environments()[i]->name() <<
" to block";
470 m_true_blocks.add(
mb);
479void MeshMaterialMng::
483 mb->addEnvironment(
env);
489void MeshMaterialMng::
493 mb->removeEnvironment(
env);
499void MeshMaterialMng::
505 _saveInfosInProperties();
507 info() <<
"END CREATE MATERIAL_MNG is_continue=" <<
is_continue;
509 m_modifier = std::make_unique<MeshMaterialModifierImpl>(
this);
510 m_modifier->initOptimizationFlags();
514 auto synchronizer = mesh()->cellFamily()->allItemsSynchronizer();
515 m_all_cells_mat_env_synchronizer = std::make_unique<MeshMaterialVariableSynchronizer>(
this,synchronizer,MatVarSpace::MaterialAndEnvironment);
516 m_all_cells_env_only_synchronizer = std::make_unique<MeshMaterialVariableSynchronizer>(
this,synchronizer,MatVarSpace::Environment);
520 Integer
nb_component = m_environments_as_components.size() + m_materials_as_components.size();
522 m_components.addRange(m_environments_as_components);
523 m_components.addRange(m_materials_as_components);
528 for(
const auto& i : m_full_name_variable_map ){
530 info(4) <<
"BUILD FROM MANAGER name=" <<
mv->name() <<
" this=" <<
this;
535 m_is_end_create =
true;
549 m_exchange_mng->registerFactory();
555void MeshMaterialMng::
556setModificationFlags(
int v)
559 m_modification_flags = v;
560 info() <<
"Setting ModificationFlags to v=" << v;
566void MeshMaterialMng::
567setAllocateScalarEnvironmentVariableAsMaterial(
bool v)
570 m_is_allocate_scalar_environment_variable_as_material = v;
571 info() <<
"Setting AllocateScalarEnvironmentVariableAsMaterial to v=" << v;
577void MeshMaterialMng::
578setDataCompressorServiceName(
const String& name)
580 m_data_compressor_service_name = name;
589 return m_modifier.get();
596_findMaterialInfo(
const String& name)
599 if (
mmi->name()==name)
608findEnvironment(
const String& name,
bool throw_exception)
622_findEnvironment(
const String& name)
625 if (
env->name()==name)
634findBlock(
const String& name,
bool throw_exception)
648_findBlock(
const String& name)
659void MeshMaterialMng::
671void MeshMaterialMng::
674 m_all_env_data->forceRecompute(
true);
686void MeshMaterialMng::
689 for(
const auto& i : m_full_name_variable_map ){
691 info(4) <<
"SYNC REFERENCES FROM MANAGER name=" <<
mv->name();
699void MeshMaterialMng::
704 for(
const auto& i : m_full_name_variable_map ){
706 functor->executeFunctor(
mv);
713void MeshMaterialMng::
728 ARCANE_FATAL(
"Bad corresponding globalCell() in all_env_item");
730 ARCANE_FATAL(
"Bad value for nb_env direct='{0}' var='{1}'",
737 ARCANE_FATAL(
"Bad corresponding allEnvItem() in env_item uid={0}",cell_uid);
738 if (
eii.globalItemBase()!=cell)
739 ARCANE_FATAL(
"Bad corresponding globalItem() in env_item");
740 if (
eii.level()!=LEVEL_ENVIRONMENT)
750 if (
eii!=
mci._superItemBase())
752 if (
mci.globalItemBase()!=cell)
753 ARCANE_FATAL(
"Bad corresponding globalItem() in mat_item");
754 if (
mci.level()!=LEVEL_MATERIAL)
759 ARCANE_FATAL(
"Global index for a partial cell matitem={0} name={1} nb_mat={2} nb_env={3}",
775findVariable(
const String& name)
786 v = _findVariableFullyQualified(
global_var->fullName());
798_findVariableFullyQualified(
const String& name)
800 auto i = m_full_name_variable_map.find(name);
801 if (i!=m_full_name_variable_map.end())
812 auto i = m_var_to_mat_var_map.find(
global_var);
813 if (i!=m_var_to_mat_var_map.end())
821void MeshMaterialMng::
828 for(
const auto& i : m_full_name_variable_map ){
830 if (
ivar->globalVariable()->isUsed())
838void MeshMaterialMng::
843 info(4) <<
"MAT_ADD_VAR global_var=" <<
gvar <<
" var=" <<
var <<
" this=" <<
this;
844 m_var_to_mat_var_map.insert(std::make_pair(
gvar,
var));
845 m_full_name_variable_map.insert(std::make_pair(
gvar->fullName(),
var));
851void MeshMaterialMng::
856 info(4) <<
"MAT:Remove variable global_var=" <<
gvar <<
" var=" <<
var;
857 m_var_to_mat_var_map.erase(
gvar);
858 m_full_name_variable_map.erase(
gvar->fullName());
864void MeshMaterialMng::
865dumpInfos(std::ostream& o)
867 Integer
nb_mat = m_materials.size();
868 Integer
nb_env = m_environments.size();
869 Integer
nb_var_idx = m_variables_indexer.size();
870 o <<
"-- Infos sur les milieux et matériaux\n";
871 o <<
"-- Nb Materiaux: " <<
nb_mat <<
'\n';
872 o <<
"-- Nb Milieux: " <<
nb_env <<
'\n';
873 o <<
"-- Nb Variables partielles: " <<
nb_var_idx <<
'\n';
875 o <<
"-- Liste des matériaux\n";
877 o <<
"-- Materiau name=" <<
mat->name() <<
'\n';
880 o <<
"-- Liste des milieux\n";
885 o <<
"-- Milieu name=" << me->name()
887 <<
" nb_cell=" << me->cells().size()
893 o <<
"-- Materiau\n";
894 o <<
"-- name = " <<
mm->name() <<
"\n";
895 o <<
"-- nb_cell = " <<
mm->cells().size() <<
"\n";
896 o <<
"-- var_idx = " << idx->index() <<
"\n";
904void MeshMaterialMng::
905dumpInfos2(std::ostream& o)
909 Integer
nb_mat = m_materials.size();
910 Integer
nb_env = m_environments.size();
911 Integer
nb_var_idx = m_variables_indexer.size();
912 o <<
"-- Material and Environment infos: nb_env=" <<
nb_env
913 <<
" nb_mat=" <<
nb_mat <<
" timestamp=" << m_timestamp
916 Integer
nb_cell = mesh()->allCells().size();
929 o <<
"-- Liste des milieux\n";
930 for( MeshEnvironment* me : m_true_environments ){
931 ConstArrayView<IMeshMaterial*> env_materials = me->materials();
932 const MeshMaterialVariableIndexer* env_var_idx = me->variableIndexer();
933 const Int16 env_id = me->componentId();
934 Integer nb_env_mat = env_materials.size();
935 Integer nb_env_cell = me->cells().size();
936 Integer nb_pure_mat = 0;
944 nb_pure_mat = nb_env_cell;
945 o <<
"-- Env name=" << me->name()
946 <<
" nb_mat=" << nb_env_mat
947 <<
" var_idx=" << env_var_idx->index()
948 <<
" nb_cell=" << nb_env_cell
949 <<
" nb_pure_mat=" << nb_pure_mat;
951 o <<
" percent=" << (nb_pure_mat*100)/nb_env_cell;
953 for( Integer j=0; j<nb_env_mat; ++j ){
954 IMeshMaterial* mm = env_materials[j];
955 const MeshMaterialVariableIndexer* idx = mm->_internalApi()->variableIndexer();
956 o <<
"-- Mat name=" << mm->name()
957 <<
" nb_cell=" << mm->cells().size()
958 <<
" var_idx=" << idx->index()
967bool MeshMaterialMng::
968synchronizeMaterialsInCells()
970 return m_mms->synchronizeMaterialsInCells();
976void MeshMaterialMng::
985void MeshMaterialMng::
986dumpCellInfos(
Cell cell,std::ostream& o)
993 o <<
"ENV name=" << (*ienvcell).environment()->name()
996 o <<
"MAT name=" << (*imatcell).material()->name()
1006cellToAllEnvCellConverter()
1014void MeshMaterialMng::
1017 if (m_is_end_create)
1018 ARCANE_FATAL(
"Invalid method call because endCreate() has already been called");
1039 IMeshMaterialMng::_internalSetFactory(
this);
1043 IMeshMaterialMng::_internalSetFactory(
nullptr);
1062 const char* name =
"MeshMaterialMng_StdMat";
1069 IMeshMaterialMng* mm = arcaneCreateMeshMaterialMng(mesh_handle,
"StdMat");
1070 Ref<IMeshMaterialMng> mm_ref = makeRef(mm);
1071 udlist->
setData(name,
new UserDataType(
new Ref<IMeshMaterialMng>(mm_ref)));
1074 auto adud =
dynamic_cast<UserDataType*
>(ud);
1077 return *(adud->data());
1083bool MeshMaterialMng::
1084isInMeshMaterialExchange()
const
1086 return m_exchange_mng->isInMeshMaterialExchange();
1092void MeshMaterialMng::
1093_checkCreateProperties()
1097 m_properties = std::make_unique<Properties>(*(mesh()->properties()),
String(
"MeshMaterialMng_")+name());
1104const Int32 SERIALIZE_VERSION = 1;
1106void MeshMaterialMng::
1107_saveInfosInProperties()
1109 _checkCreateProperties();
1112 m_properties->set(
"Version",SERIALIZE_VERSION);
1116 UniqueArray<String> material_info_names;
1117 for( MeshMaterialInfo* mat_info : m_materials_info ){
1118 material_info_names.add(mat_info->name());
1120 m_properties->set(
"MaterialInfoNames",material_info_names);
1122 UniqueArray<String> env_names;
1123 UniqueArray<Int32> env_nb_mat;
1124 UniqueArray<String> env_mat_names;
1126 IMeshEnvironment* env = *ienv;
1127 env_names.add(env->name());
1128 info(5) <<
"SAVE ENV_NAME name=" << env->name() <<
" nb_mat=" << env->nbMaterial();
1129 env_nb_mat.add(env->nbMaterial());
1131 const String& name = (*imat)->infos()->name();
1132 info(5) <<
"SAVE MAT_NAME name=" << name;
1133 env_mat_names.add(name);
1136 m_properties->set(
"EnvNames",env_names);
1137 m_properties->set(
"EnvNbMat",env_nb_mat);
1138 m_properties->set(
"EnvMatNames",env_mat_names);
1142 UniqueArray<String> block_names;
1143 UniqueArray<String> block_cell_group_names;
1144 UniqueArray<Int32> block_nb_env;
1145 UniqueArray<String> block_env_names;
1146 for( IMeshBlock* block : m_blocks ){
1147 block_names.add(block->name());
1148 block_cell_group_names.add(block->cells().name());
1149 block_nb_env.add(block->nbEnvironment());
1151 const String& name = (*ienv)->name();
1152 info(5) <<
"SAVE BLOCK ENV_NAME name=" << name;
1153 block_env_names.add(name);
1156 m_properties->set(
"BlockNames",block_names);
1157 m_properties->set(
"BlockCellGroupNames",block_cell_group_names);
1158 m_properties->set(
"BlockNbEnv",block_nb_env);
1159 m_properties->set(
"BlockEnvNames",block_env_names);
1165void MeshMaterialMng::
1168 if (m_is_end_create)
1171 _checkCreateProperties();
1173 info() <<
"Creating material infos from dump";
1176 Int32 v = m_properties->getInt32(
"Version");
1177 if (v!=SERIALIZE_VERSION)
1178 ARCANE_FATAL(
"Bad serializer version: trying to read from incompatible checkpoint v={0} expected={1}",
1179 v,SERIALIZE_VERSION);
1184 this->registerMaterialInfo(
mat_name);
1189 m_properties->get(
"EnvNames",
env_names);
1216 for( Integer i=0, n=
block_names.size(); i<n; ++i ){
1221 ARCANE_FATAL(
"Can not find cell group '{0}' for block creation",
1235 this->createBlock(
mbbi);
1244void MeshMaterialMng::
1251 m_exchange_mng.reset();
1253 _unregisterAllVariables();
1259void MeshMaterialMng::
1260_unregisterAllVariables()
1267 for(
const auto& i : m_full_name_variable_map ){
1276 for( MeshMaterialVariableRef* ref : m_all_refs )
1277 ref->unregisterVariable();
1283ComponentItemSharedInfo* MeshMaterialMng::
1284componentItemSharedInfo(
Int32 level)
const
1286 ComponentItemInternalData* data = m_all_env_data->componentItemInternalData();
1287 ComponentItemSharedInfo* shared_info =
nullptr;
1288 if (level == LEVEL_MATERIAL)
1289 shared_info = data->matSharedInfo();
1290 else if (level == LEVEL_ENVIRONMENT)
1291 shared_info = data->envSharedInfo();
1292 else if (level==LEVEL_ALLENVIRONMENT)
1293 shared_info = data->allEnvSharedInfo();
1303void MeshMaterialMng::
1306 IEnumeratorTracer* tracer = IEnumeratorTracer::singleton();
1308 tracer->dumpStats();
1311 m_modifier->dumpStats();
1313 for (IMeshEnvironment* env : m_environments) {
1317 if (env->nbMaterial() > 1)
1318 env->_internalApi()->variableIndexer()->dumpStats();
1320 for (IMeshMaterial* mat : m_materials) {
1321 mat->_internalApi()->variableIndexer()->dumpStats();
1328void MeshMaterialMng::
1329createAllCellToAllEnvCell()
1331 if (!m_allcell_2_allenvcell){
1332 m_all_cell_to_all_env_cell.reserve(1);
1333 m_all_cell_to_all_env_cell.add(AllCellToAllEnvCell(
this));
1334 m_allcell_2_allenvcell = m_all_cell_to_all_env_cell.view().ptrAt(0);
1335 m_allcell_2_allenvcell->initialize();
#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_FATAL(...)
Macro envoyant une exception FatalErrorException.
Interface d'une famille d'entités.
Interface d'une liste qui gère des données utilisateurs.
virtual void setData(const String &name, IUserData *ud)=0
Positionne le user-data associé au nom name.
Interface pour une donnée utilisateur attachée à un autre objet.
Interface d'une variable.
Groupe d'entités de maillage.
bool null() const
true is le groupe est le groupe nul
Classe utilitaire pour imprimer les infos sur une entité.
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Vue sur une liste de mailles avec infos sur les milieux.
Maille arcane avec info matériaux et milieux.
Conversion de 'Cell' en 'AllEnvCell'.
Index d'un Item matériaux dans une variable.
Gestion des listes de connectivité des constituants.
Int16 cellNbMaterial(CellLocalId cell_id, Int16 env_id)
Nombre de matériaux de la maille cell_id pour le milieu d'indice env_id.
Maille arcane d'un milieu.
Interface d'un bloc d'un maillage.
Interface d'un milieu d'un maillage.
Interface d'une variable matériau d'un maillage.
Interface d'un matériau d'un maillage.
Représente un matériau d'une maille multi-matériau.
Informations pour la création d'un milieu.
ConstArrayView< MatInfo > materials() const
const String & name() const
Nom du milieu.
void build()
Fonctions publiques mais réservées au IMeshMaterialMng.
ConstArrayView< IMeshMaterial * > materials() override
Liste des matériaux de ce milieu.
String name() const override
Nom du composant.
Infos d'un matériau d'un maillage.
IMeshMaterialMng * materialMng()
Gestionnaire associé.
Indexer pour les variables materiaux.
Classe de base des références aux variables matériaux.
Informations générique sur une entité d'un constituant.
Informations pour la création d'un bloc.
ConstArrayView< IMeshEnvironment * > environments() const
Liste des milieux du bloc.
const String & name() const
Nom du bloc.
Chaîne de caractères unicode.
RunQueue makeQueue(const Runner &runner)
Créé une file associée à runner.
bool isAcceleratorPolicy(eExecutionPolicy exec_policy)
Indique si exec_policy correspond à un accélérateur.
Active toujours les traces dans les parties Arcane concernant les matériaux.
bool arcaneIsCheck()
Vrai si on est en mode vérification.
Int32 Integer
Type représentant un entier.