Arcane  v3.16.3.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MeshMaterialTesterModule_Init.cc
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/* MeshMaterialTesterModule_Init.cc (C) 2000-2025 */
9/* */
10/* Module de test du gestionnaire des matériaux. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/tests/MeshMaterialTesterModule.h"
15
16#include "arcane/utils/ValueChecker.h"
17
18#include "arcane/core/IMesh.h"
19#include "arcane/core/IItemFamily.h"
20#include "arcane/core/ITimeLoopMng.h"
21#include "arcane/core/ITimeLoop.h"
22#include "arcane/core/IParallelMng.h"
23#include "arcane/core/TimeLoopEntryPointInfo.h"
24#include "arcane/core/ItemPrinter.h"
25#include "arcane/core/materials/IMeshBlock.h"
26
27#include "arcane/materials/MeshBlockBuildInfo.h"
28#include "arcane/materials/MeshEnvironmentBuildInfo.h"
29#include "arcane/materials/MeshMaterialInfo.h"
30#include "arcane/materials/MeshMaterialModifier.h"
31#include "arcane/core/materials/CellToAllEnvCellConverter.h"
32
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
37namespace ArcaneTest
38{
39
40/*---------------------------------------------------------------------------*/
41/*---------------------------------------------------------------------------*/
42
43MeshMaterialTesterModule::
44MeshMaterialTesterModule(const ModuleBuildInfo& mbi)
45: ArcaneMeshMaterialTesterObject(mbi)
46, m_material_mng(IMeshMaterialMng::getReference(mbi.meshHandle()))
47, m_density(VariableBuildInfo(this, "Density"))
48, m_pressure(VariableBuildInfo(this, "Pressure"))
49, m_mat_density2(VariableBuildInfo(this, "Density", IVariable::PNoDump))
50, m_mat_nodump_real(VariableBuildInfo(this, "NoDumpReal", IVariable::PNoDump))
51, m_present_material(VariableBuildInfo(this, "PresentMaterial"))
52, m_mat_int32(VariableBuildInfo(this, "PresentMaterial"))
53, m_mat_not_used_real(VariableBuildInfo(this, "NotUsedRealVariable"))
54, m_nb_starting_cell(VariableBuildInfo(this, "NbStartingCell"))
55{
56}
57
58/*---------------------------------------------------------------------------*/
59/*---------------------------------------------------------------------------*/
60
61MeshMaterialTesterModule::
62~MeshMaterialTesterModule()
63{
64 for (VariableCellReal* v : m_density_post_processing)
65 delete v;
66}
67
68/*---------------------------------------------------------------------------*/
69/*---------------------------------------------------------------------------*/
70
71void MeshMaterialTesterModule::
72staticInitialize(ISubDomain* sd)
73{
74 String time_loop_name("MeshMaterialTestLoop");
75
76 ITimeLoopMng* tlm = sd->timeLoopMng();
77 ITimeLoop* time_loop = tlm->createTimeLoop(time_loop_name);
78
79 {
80 List<TimeLoopEntryPointInfo> clist;
81 clist.add(TimeLoopEntryPointInfo("MeshMaterialTester.buildInit"));
82 time_loop->setEntryPoints(ITimeLoop::WBuild, clist);
83 }
84
85 {
86 List<TimeLoopEntryPointInfo> clist;
87 clist.add(TimeLoopEntryPointInfo("MeshMaterialTester.startInit"));
88 clist.add(TimeLoopEntryPointInfo("MeshMaterialTester.continueInit"));
89 time_loop->setEntryPoints(ITimeLoop::WInit, clist);
90 }
91
92 {
93 List<TimeLoopEntryPointInfo> clist;
94 clist.add(TimeLoopEntryPointInfo("MeshMaterialTester.compute"));
95 time_loop->setEntryPoints(ITimeLoop::WComputeLoop, clist);
96 }
97
98 {
99 StringList clist;
100 clist.add("MeshMaterialTester");
101 time_loop->setRequiredModulesName(clist);
102 clist.clear();
103 clist.add("ArcanePostProcessing");
104 clist.add("ArcaneCheckpoint");
105 time_loop->setOptionalModulesName(clist);
106 }
107
108 tlm->registerTimeLoop(time_loop);
109}
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113
114void MeshMaterialTesterModule::
115buildInit()
116{
117 // La création des milieux et des matériaux doit se faire dans un point
118 // d'entrée de type 'build' pour que la liste des variables créées par les
119 // milieux et les matériaux soient accessibles dans le post-traitement.
120 info() << "MESH_MATERIAL_TESTER :: buildInit()";
121
122 Materials::IMeshMaterialMng* mm = IMeshMaterialMng::getReference(defaultMesh());
123
124 m_material_mng->setModificationFlags(options()->modificationFlags());
125
126 m_material_mng->setMeshModificationNotified(true);
127
128 // En parallèle, test la création de variables milieux aussi sur les matériaux
129 if (parallelMng()->isParallel())
130 m_material_mng->setAllocateScalarEnvironmentVariableAsMaterial(true);
131
132 if (subDomain()->isContinue() && options()->recreateFromDump()) {
133 mm->recreateFromDump();
134 }
135 else {
136 UniqueArray<MeshMaterialInfo*> materials_info;
137 // Lit les infos des matériaux du JDD et les enregistre dans le gestionnaire
138 for (Integer i = 0, n = options()->material().size(); i < n; ++i) {
139 String mat_name = options()->material[i].name;
140 info() << "Found material name=" << mat_name;
141 materials_info.add(mm->registerMaterialInfo(mat_name));
142 }
143
144 MeshBlockBuildInfo mbbi("BLOCK1", allCells());
145 UniqueArray<IMeshEnvironment*> saved_envs;
146
147 // Créé les milieux
148 for (Integer i = 0, n = options()->environment().size(); i < n; ++i) {
149 String env_name = options()->environment[i].name;
150 info() << "Found environment name=" << env_name;
151 Materials::MeshEnvironmentBuildInfo env_build(env_name);
152 for (Integer k = 0, kn = options()->environment[i].material.size(); k < kn; ++k) {
153 String mat_name = options()->environment[i].material[k];
154 info() << "Add material " << mat_name << " for environment " << env_name;
155 env_build.addMaterial(mat_name);
156 }
157 IMeshEnvironment* env = mm->createEnvironment(env_build);
158 saved_envs.add(env);
159 // Le bloc ne contient que 2 milieux
160 if (i < 2) {
161 info() << "Add environment " << env_name << " to block1";
162 mbbi.addEnvironment(env);
163 }
164 }
165
166 // Création du bloc BLOCK1 sur le groupe de toutes les mailles
167 // et contenant les milieux ENV1 et ENV2
168 m_block1 = mm->createBlock(mbbi);
169
170 {
171 // Création d'un deuxième bloc de manière incrémentalle.
172 Integer nb_env = saved_envs.size();
173 if (nb_env >= 2) {
174 MeshBlockBuildInfo mbbi2("BLOCK2", allCells());
175 mbbi2.addEnvironment(saved_envs[0]);
176 IMeshBlock* block2 = mm->createBlock(mbbi2);
177 Integer nb_env1 = block2->nbEnvironment();
178 mm->addEnvironmentToBlock(block2, saved_envs[1]);
179 info() << "Finished incremental creation of block";
180 Integer nb_env2 = block2->nbEnvironment();
181 if (nb_env2 != (nb_env1 + 1))
182 ARCANE_FATAL("Bad number of environment");
183 if (block2->environments()[nb_env1] != saved_envs[1])
184 ARCANE_FATAL("Bad last environment");
185 // Supprime le premier milieu du bloc
186 IMeshEnvironment* first_env = block2->environments()[0];
187 IMeshEnvironment* second_env = block2->environments()[1];
188 mm->removeEnvironmentToBlock(block2, first_env);
189 nb_env2 = block2->nbEnvironment();
190 if (nb_env2 != nb_env1)
191 ARCANE_FATAL("Bad number of environment after remove");
192 if (block2->environments()[0] != second_env)
193 ARCANE_FATAL("Bad first environment");
194 }
195 }
196
197 mm->endCreate(subDomain()->isContinue());
198
199 info() << "List of materials:";
200 for (MeshMaterialInfo* m : materials_info) {
201 info() << "MAT=" << m->name();
202 for (String s : m->environmentsName())
203 info() << " In ENV=" << s;
204 }
205 }
206
207 // Récupère deux matériaux de deux milieux différents pour test.
208 ConstArrayView<Materials::IMeshEnvironment*> envs = mm->environments();
209 Integer nb_env = envs.size();
210 m_mat1 = mm->environments()[0]->materials()[0];
211 if (nb_env > 1)
212 m_mat2 = mm->environments()[1]->materials()[0];
213
214 m_global_deltat.assign(1.0);
215
216 for (Integer i = 0, n = m_material_mng->materials().size(); i < n; ++i) {
217 IMeshMaterial* mat = m_material_mng->materials()[i];
218 VariableCellReal* var = new VariableCellReal(VariableBuildInfo(defaultMesh(), String("Density_") + mat->name()));
219 m_density_post_processing.add(var);
220 }
221
222 m_mesh_partitioner = options()->loadBalanceService();
223 if (m_mesh_partitioner)
224 info() << "Activating load balance test";
225}
226
227/*---------------------------------------------------------------------------*/
228/*---------------------------------------------------------------------------*/
229
230void MeshMaterialTesterModule::
231startInit()
232{
233 m_mat_not_used_real.globalVariable().setUsed(false);
234
235 info() << "MESH_MATERIAL_TESTER :: startInit()";
236 m_material_mng->forceRecompute();
237
238 ValueChecker vc(A_FUNCINFO);
239
240 m_nb_starting_cell.assign(parallelMng()->reduce(Parallel::ReduceSum, ownCells().size()));
241
242 Int32UniqueArray env1_indexes;
243 Int32UniqueArray mat2_indexes;
244 Int32UniqueArray sub_group_indexes;
245 Integer nb_cell = ownCells().size();
246 IParallelMng* pm = parallelMng();
247 Int64 total_nb_cell = pm->reduce(Parallel::ReduceMax, nb_cell);
248 ENUMERATE_CELL (icell, allCells()) {
249 Cell cell = *icell;
250 Int64 cell_index = cell.uniqueId();
251 if (cell_index > (total_nb_cell / 2))
252 break;
253 if (cell_index < (total_nb_cell / 5)) {
254 env1_indexes.add(icell.itemLocalId());
255 }
256 if (cell_index < (total_nb_cell / 3) && cell_index > (total_nb_cell / 6)) {
257 mat2_indexes.add(icell.itemLocalId());
258 }
259 if ((cell_index % 2) == 0)
260 sub_group_indexes.add(icell.itemLocalId());
261 }
262
263 // Ajoute les mailles du milieu 1
264 {
265 Materials::MeshMaterialModifier modifier(m_material_mng);
266 modifier.setDoCopyBetweenPartialAndPure(false);
267 modifier.setDoInitNewItems(false);
268 modifier.setPersistantWorkBuffer(false);
269 Materials::IMeshEnvironment* env = m_mat1->environment();
270 // Ajoute les mailles du milieu
271 //modifier.addCells(env,env1_indexes);
272 Int32UniqueArray mat1_indexes;
273 Int32UniqueArray mat2_indexes;
274 Integer nb_cell = env1_indexes.size();
275 for (Integer z = 0; z < nb_cell; ++z) {
276 bool add_to_mat1 = (z < (nb_cell / 2) && z > (nb_cell / 4));
277 bool add_to_mat2 = (z >= (nb_cell / 2) || z < (nb_cell / 3));
278 if (add_to_mat1) {
279 mat1_indexes.add(env1_indexes[z]);
280 }
281 if (add_to_mat2)
282 mat2_indexes.add(env1_indexes[z]);
283 }
284 // Ajoute les mailles du matériau 1
285 modifier.addCells(m_mat1, mat1_indexes);
286 Integer nb_mat = env->nbMaterial();
287 if (nb_mat > 1)
288 // Ajoute les mailles du matériau 2
289 modifier.addCells(env->materials()[1], mat2_indexes);
290 }
291 CellGroup test_group = defaultMesh()->cellFamily()->createGroup("SUB_GROUP_TEST", sub_group_indexes);
292 // Ajoute les mailles du milieu 2
293 if (m_mat2) {
294 Materials::MeshMaterialModifier modifier(m_material_mng);
295 //modifier.addCells(m_mat2->environment(),mat2_indexes);
296 modifier.addCells(m_mat2, mat2_indexes);
297 }
298
299 const Integer spectral_size = 5;
300 m_mat_spectral1.resize(spectral_size);
301 m_mat_spectral2.resize(spectral_size * 2);
302 m_env_spectral1.resize(spectral_size * 3);
303 m_env_spectral2.resize(spectral_size * 4);
304 // NOTE: m_env_empty_int64array ne doit pas avoir de resize
305 // pour pouvoir tester la gestion des variables avec une dim2Size() nulle.
306
307 // TODO tester que les valeurs partielles sont correctes
308 m_mat_density.fillPartialValues(3.0);
309 m_env_int32.fillPartialValues(5);
310 m_mat_int32.fillPartialValues(8);
311
312 info() << "Liste des mailles de test_group";
313 ENUMERATE_CELL (icell, test_group) {
314 info(6) << "Cell=" << ItemPrinter(*icell);
315 }
316
317 ENUMERATE_CELL (icell, allCells()) {
318 m_density[icell] = 1.0;
319 m_mat_density[icell] = 2.0;
320 Integer idx2 = icell.itemLocalId() % spectral_size;
321 m_mat_spectral1[icell][idx2] = 3.0 + (Real)(icell.itemLocalId() * spectral_size);
322 }
323
324 CellGroup mat1_cells = m_mat1->cells();
325 ENUMERATE_CELL (icell, mat1_cells) {
326 m_density[icell] = 2.0;
327 }
328 {
329 VariableCellReal& gvar = m_mat_density.globalVariable();
330 info() << "GVAR_NAME = " << gvar.name();
331 ENUMERATE_CELL (icell, mat1_cells) {
332 if (gvar[icell] != 2.0)
333 fatal() << "Bad value for global variable v=" << gvar[icell];
334 }
335 }
336
337 if (m_mat2) {
338 CellGroup mat2_cells = m_mat2->cells();
339 ENUMERATE_CELL (icell, mat2_cells) {
340 m_density[icell] = 1.5;
341 }
342 }
343
344 _checkTemporaryVectors(test_group);
345 _checkSubViews(test_group);
346
347 {
348 OStringStream oss;
349 m_material_mng->dumpInfos(oss());
350 info() << oss.str();
351 }
352
353 // A supprimer
354 //m_mat_density.updateFromInternal();
355
356 m_present_material.fill(0);
357 m_mat_density.fill(0.0);
358 m_mat_nodump_real.fill(0.0);
359
360 constexpr IMeshMaterial* null_mat = nullptr;
361 constexpr IMeshEnvironment* null_env = nullptr;
362 // Itération sur tous les milieux puis tous les matériaux
363 // et toutes les mailles de ce matériau
364 ENUMERATE_ENV (ienv, m_material_mng) {
365 IMeshEnvironment* env = *ienv;
366 info() << "ENV name=" << env->name();
367 vc.areEqual(env->isEnvironment(), true, "IsEnvEnvOK");
368 vc.areEqual(env->isMaterial(), false, "IsEnvMatOK");
369 vc.areEqual(env->asEnvironment(), env, "ToEnvEnvOK");
370 vc.areEqual(env->asMaterial(), null_mat, "ToEnvMatOK");
371 ENUMERATE_MAT (imat, env) {
372 Materials::IMeshMaterial* mat = *imat;
373 info() << "MAT name=" << mat->name();
374 vc.areEqual(mat->isEnvironment(), false, "IsMatEnvOK");
375 vc.areEqual(mat->isMaterial(), true, "IsMatMatOK");
376 vc.areEqual(mat->asEnvironment(), null_env, "ToMatEnvOK");
377 vc.areEqual(mat->asMaterial(), mat, "ToMatMatOK");
378 ENUMERATE_MATCELL (icell, mat) {
379 MatCell mmcell = *icell;
380 //info() << "Cell name=" << mmcell._varIndex();
381 m_mat_density[mmcell] = 200.0;
382 m_mat_nodump_real[mmcell] = 1.2;
383 ComponentCell x1(mmcell);
384 if (x1._varIndex() != mmcell._varIndex())
385 ARCANE_FATAL("Bad convertsion MatCell -> ComponentCell");
386 MatCell x2(x1);
387 if (x1._varIndex() != x2._varIndex())
388 ARCANE_FATAL("Bad convertsion ComponentCell -> MatCell");
389 }
390 }
391 }
392
393 // Idem mais à partir d'un bloc.
394 ENUMERATE_ENV (ienv, m_block1) {
395 IMeshEnvironment* env = *ienv;
396 info() << "BLOCK_ENV name=" << env->name();
397 ENUMERATE_MAT (imat, env) {
398 Materials::IMeshMaterial* mat = *imat;
399 info() << "BLOCK_MAT name=" << mat->name();
400 }
401 }
402
403 // Idem mais itération sur des milieux sous forme de composants
404 ENUMERATE_COMPONENT (icmp, m_material_mng->environmentsAsComponents()) {
405 IMeshComponent* cmp = *icmp;
406 info() << "ENV COMPONENT name=" << cmp->name();
407 }
408
409 // Itération sur les matériaux sous forme de composant.
410 ENUMERATE_COMPONENT (icmp, m_material_mng->materialsAsComponents()) {
411 IMeshComponent* cmp = *icmp;
412 info() << "MAT COMPONENT name=" << cmp->name();
413 }
414
415 // Itération directement avec tous les matériaux du gestionnaire
416 ENUMERATE_MAT (imat, m_material_mng) {
417 Materials::IMeshMaterial* mat = *imat;
418 info() << "MAT name=" << mat->name()
419 << " density_var_name=" << m_mat_density.materialVariable()->materialVariable(mat)->name();
420 ENUMERATE_MATCELL (icell, mat) {
421 MatCell mmcell = *icell;
422 m_mat_density[mmcell] = 200.0;
423 }
424 }
425
426 if (0) {
427 ENUMERATE_ENV (ienv, m_material_mng) {
428 IMeshEnvironment* env = *ienv;
429 info() << "Env name=" << env->name();
430 ENUMERATE_ENVCELL (ienvcell, env) {
431 EnvCell ev = *ienvcell;
432 info() << "EnvCell nb_mat=" << ev.nbMaterial() << " cell_uid=" << ItemPrinter(ev.globalCell())
433 << " component_uid=" << ev.componentUniqueId()
434 << " var_index=" << ev._varIndex();
435 }
436 }
437 }
438
439 if (1) {
440 CellToAllEnvCellConverter all_env_cell_converter(m_material_mng);
441 ENUMERATE_FACE (iface, allFaces()) {
442 Face face = *iface;
443 Cell back_cell = face.backCell();
444 if (!back_cell.null()) {
445 AllEnvCell all_env_back_cell = all_env_cell_converter[back_cell];
446 info() << "NB_ENV=" << all_env_back_cell.nbEnvironment();
447 ComponentCell x1 = all_env_back_cell;
448 AllEnvCell x2(x1);
449 if (x1._varIndex() != all_env_back_cell._varIndex())
450 ARCANE_FATAL("Bad convertsion AllEnvCell -> ComponentCell");
451 if (x1._varIndex() != x2._varIndex())
452 ARCANE_FATAL("Bad convertsion ComponentCell -> EnvCell");
453 }
454 }
455 }
456
457 // Itération sur tous les milieux et tous les matériaux d'une maille.
458 ENUMERATE_ALLENVCELL (iallenvcell, m_material_mng, allCells()) {
459 AllEnvCell all_env_cell = *iallenvcell;
460 Cell global_cell = all_env_cell.globalCell();
461 ENUMERATE_CELL_ENVCELL (ienvcell, all_env_cell) {
462 Real env_density = 0.0;
463 ENUMERATE_CELL_MATCELL (imatcell, (*ienvcell)) {
464 MatCell mc = *imatcell;
465 env_density += m_mat_density[imatcell];
466 Int32 idx = mc.materialId();
467 m_present_material[global_cell] = m_present_material[global_cell] | (1 << idx);
468 }
469 m_mat_density[ienvcell] = env_density;
470 m_mat_nodump_real[ienvcell] = 3.5;
471 }
472 }
473
474 if (1) {
475 ENUMERATE_ALLENVCELL (iallenvcell, m_material_mng, allCells()) {
476 AllEnvCell all_env_cell = *iallenvcell;
477 info() << "Cell uid=" << ItemPrinter(all_env_cell.globalCell()) << " nb_env=" << all_env_cell.nbEnvironment();
478 ENUMERATE_CELL_ENVCELL (ienvcell, all_env_cell) {
479 EnvCell ec = *ienvcell;
480 info() << "Cell nb_mat=" << ec.nbMaterial()
481 << " env=" << ec.environment()->name()
482 << " (id=" << ec.environmentId() << ")";
483 ENUMERATE_CELL_MATCELL (imatcell, (*ienvcell)) {
484 MatCell mc = *imatcell;
485 info() << "Cell mat=" << mc.material()->name()
486 << " (id=" << mc.materialId() << ")"
487 << " density=" << m_mat_density[imatcell]
488 << " index=" << mc._varIndex()
489 << " component_uid=" << mc.componentUniqueId();
490 //env_density += m_mat_density[imatcell];
491 }
492 for (ComponentCell mc : ec.subItems()) {
493 info() << "Cell mat=" << mc.component()->name()
494 << " (id=" << mc.componentId() << ")"
495 << " density=" << m_mat_density[mc]
496 << " index=" << mc._varIndex()
497 << " component_uid=" << mc.componentUniqueId();
498 //env_density += m_mat_density[imatcell];
499 }
500 //m_mat_density[ienvcell] = env_density;
501 }
502
503 ENUMERATE_CELL_COMPONENTCELL (ienvcell, all_env_cell) {
504 ComponentCell ec = *ienvcell;
505 info() << "Cell nb_mat=" << ec.nbSubItem()
506 << " env=" << ec.component()->name()
507 << " (id=" << ec.componentId() << ")";
508 }
509 }
510
511 const bool test_depend = false;
512 // Ne doit pas être exécuté mais juste compilé pour vérifier la syntaxe
513 if (test_depend) {
514 m_mat_density.addDependCurrentTime(m_density);
515 m_mat_density.addDependCurrentTime(m_mat_density2);
516 m_mat_density.addDependPreviousTime(m_mat_density2);
517 m_mat_density.removeDepend(m_mat_density2);
518 m_mat_density.setComputeFunction(this, &MeshMaterialTesterModule::startInit);
519 }
520 }
521
522 // Teste la récupération de la valeur de la densité partielle par maille et par matériau ou par milieu
523 if (1) {
524 CellToAllEnvCellConverter all_env_cell_converter(m_material_mng);
525
526 ENUMERATE_MAT (imat, m_material_mng) {
527 IMeshMaterial* mm = *imat;
528 Int32 id = mm->id();
529 ENUMERATE_CELL (icell, allCells()) {
530 Cell cell = *icell;
531 AllEnvCell all_env_cell = all_env_cell_converter[cell];
532 Real density = m_mat_density.matValue(all_env_cell, id);
533 info() << "IndirectMatAccess Cell uid=" << cell.uniqueId() << " mat_id=" << id << " density=" << density;
534 }
535 }
536
537 ENUMERATE_ENV (ienv, m_material_mng) {
538 IMeshEnvironment* me = *ienv;
539 Int32 id = me->id();
540 ENUMERATE_CELL (icell, allCells()) {
541 Cell cell = *icell;
542 AllEnvCell all_env_cell = all_env_cell_converter[cell];
543 Real density = m_mat_density.envValue(all_env_cell, id);
544 info() << "IndirectEnvAccess Cell uid=" << cell.uniqueId() << " env_id=" << id << " density=" << density;
545 }
546 }
547 }
548
549 _checkCreation();
550 _setDependencies();
551 _dumpNoDumpRealValues();
552 _initUnitTest();
553 _checkRunQueues();
554
555 _applyEos(true);
556 _testDumpProperties();
557 _checkNullComponentItem();
558}
559
560/*---------------------------------------------------------------------------*/
561/*---------------------------------------------------------------------------*/
562
563ARCANE_REGISTER_MODULE_MESHMATERIALTESTER(MeshMaterialTesterModule);
564
565/*---------------------------------------------------------------------------*/
566/*---------------------------------------------------------------------------*/
567
568} // End namespace ArcaneTest
569
570/*---------------------------------------------------------------------------*/
571/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
#define ENUMERATE_FACE(name, group)
Enumérateur générique d'un groupe de faces.
#define ENUMERATE_CELL(name, group)
Enumérateur générique d'un groupe de mailles.
Interface d'une variable.
Definition IVariable.h:56
__host__ __device__ Int32 nbSubItem() const
Nombre de sous-éléments.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
Informations pour construire un module.
Paramètres nécessaires à la construction d'une variable.
String name() const
Nom de la variable.
#define ENUMERATE_CELL_COMPONENTCELL(iname, component_cell)
Macro pour itérer sur tous les composants d'une maille.
#define ENUMERATE_ENV(ienv, container)
Macro pour itérer sur une liste de milieux.
#define ENUMERATE_ENVCELL(iname, env)
Macro pour itérer sur toutes les mailles d'un milieu.
#define ENUMERATE_CELL_MATCELL(iname, env_cell)
Macro pour itérer sur tous les matériaux d'une maille.
#define ENUMERATE_COMPONENT(icomponent, container)
Macro pour itérer sur une liste de composants.
#define ENUMERATE_CELL_ENVCELL(iname, all_env_cell)
Macro pour itérer sur tous les milieux d'une maille.
#define ENUMERATE_MATCELL(iname, mat)
Macro pour itérer sur toutes les mailles d'un matériau.
#define ENUMERATE_ALLENVCELL(iname,...)
Macro pour itérer sur toutes les mailles AllEnvCell d'un groupe.
#define ENUMERATE_MAT(imat, container)
Macro pour itérer sur une liste de matériaux.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
Definition ItemTypes.h:183
MeshVariableScalarRefT< Cell, Real > VariableCellReal
Grandeur au centre des mailles de type réel.
Int32 Integer
Type représentant un entier.
UniqueArray< Int32 > Int32UniqueArray
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:428
List< String > StringList
Tableau de chaînes de caractères unicode.
Definition UtilsTypes.h:596
@ Cell
Le maillage est AMR par maille.
Definition MeshKind.h:52