Arcane  4.1.11.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
core/materials/MatItemEnumerator.h
Aller à la documentation de ce fichier.
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* MatItemEnumerator.h (C) 2000-2026 */
9/* */
10/* Enumérateurs sur les mailles materiaux. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MATERIALS_MATITEMENUMERATOR_H
13#define ARCANE_CORE_MATERIALS_MATITEMENUMERATOR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16/*!
17 * \file MatItemEnumerator.h
18 *
19 * Ce fichier contient les différents types d'itérateur et macros
20 * pour itérer sur les mailles matériaux et milieux.
21 */
22#include "arcane/utils/FatalErrorException.h"
23
24#include "arcane/core/materials/MatItem.h"
25#include "arcane/core/materials/IEnumeratorTracer.h"
26
27#include "arcane/core/EnumeratorTraceWrapper.h"
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31//! Active toujours les traces dans les parties Arcane concernant les matériaux.
32#ifdef ARCANE_COMPONENT_arcane_materials
33#ifndef ARCANE_TRACE_ENUMERATOR
34#define ARCANE_TRACE_ENUMERATOR
35#endif
36#endif
37
38/*---------------------------------------------------------------------------*/
39/*---------------------------------------------------------------------------*/
40
41namespace Arcane::Materials
42{
43
44/*---------------------------------------------------------------------------*/
45/*---------------------------------------------------------------------------*/
46
47class MatCellVector;
48class EnvCellVector;
54
55// Les 4 classes suivantes servent uniquement pour spécialiser
56// ComponentItemEnumeratorTraitsT
57class MatPartCell {};
58class EnvPartCell {};
61
62template<typename T> class ComponentItemEnumeratorTraitsT;
63
64/*---------------------------------------------------------------------------*/
65/*---------------------------------------------------------------------------*/
66/*!
67 * \internal
68 * \brief Vue sur une liste de mailles avec infos sur les milieux.
69 *
70 * Comme toute vue, cet objet n'est valide que tant que le conteneur
71 * associé (en général un CellGroup) n'est pas modifié.
72 */
73class ARCANE_CORE_EXPORT AllEnvCellVectorView
74{
75 friend class MeshMaterialMng;
76
77 protected:
78
79 AllEnvCellVectorView(Int32ConstArrayView local_ids,
80 ComponentItemSharedInfo* shared_info)
81 : m_local_ids(local_ids)
82 , m_shared_info(shared_info)
83 {
84 }
85
86 public:
87
88 //! Nombre d'éléments.
89 constexpr ARCCORE_HOST_DEVICE Integer size() const { return m_local_ids.size(); }
90
91 // \i ème maille du vecteur
92 ARCCORE_HOST_DEVICE AllEnvCell operator[](Integer index) const
93 {
94 return AllEnvCell(m_shared_info->_item(ConstituentItemIndex(m_local_ids[index])));
95 }
96
97 // localId() de la \i ème maille du vecteur
98 ARCCORE_HOST_DEVICE Int32 localId(Integer index) const { return m_local_ids[index]; }
99
100 private:
101
102 Int32ConstArrayView m_local_ids;
103 ComponentItemSharedInfo* m_shared_info = nullptr;
104};
105
106/*---------------------------------------------------------------------------*/
107/*---------------------------------------------------------------------------*/
108/*!
109 * \brief Enumérateur sur une partie des mailles d'un composant (matériau ou milieu)
110 */
111class ARCANE_CORE_EXPORT ComponentCellEnumerator
112{
113 friend class EnumeratorTracer;
114
115 protected:
116
117 explicit ComponentCellEnumerator(const ComponentItemVectorView& v);
118
119 public:
120
121 static ComponentCellEnumerator create(IMeshComponent* component);
122 static ComponentCellEnumerator create(const ComponentItemVector& v);
123 static ComponentCellEnumerator create(ComponentItemVectorView v);
124
125 public:
126
127 void operator++()
128 {
129 ++m_index;
130#ifdef ARCANE_CHECK
131 if (m_index<m_size)
132 _check();
133#endif
134 }
135 bool hasNext() const { return m_index<m_size; }
136
137 ComponentCell operator*() const
138 {
139 return ComponentCell(m_constituent_list_view._constituenItemBase(m_index));
140 }
141
142 Integer index() const { return m_index; }
143 MatVarIndex _varIndex() const { return m_matvar_indexes[m_index]; }
144
145 operator ComponentItemLocalId() const
146 {
147 return ComponentItemLocalId(m_matvar_indexes[m_index]);
148 }
149
150 protected:
151
152 Int32 _varArrayIndex() const { return m_matvar_indexes[m_index].arrayIndex(); }
153 Int32 _varValueIndex() const { return m_matvar_indexes[m_index].valueIndex(); }
154
155 protected:
156
157 void _check() const
158 {
159 MatVarIndex mvi = m_constituent_list_view._matVarIndex(m_index);
160 Int32 i_var_array_index = mvi.arrayIndex();
161 Int32 mv_array_index = _varArrayIndex();
162 if (i_var_array_index!=mv_array_index)
163 ARCANE_FATAL("Bad 'var_array_index' in ComponentCell matvar='{0}' registered='{1}' index={2}",
164 mvi,m_matvar_indexes[m_index],m_index);
165 Int32 i_var_value_index = mvi.valueIndex();
166 Int32 mv_value_index = _varValueIndex();
167 if (i_var_value_index!=mv_value_index)
168 ARCANE_FATAL("Bad 'var_value_index' for ComponentCell matvar='{0}' registered='{1}' index={2}",
169 mvi,m_matvar_indexes[m_index],m_index);
170 }
171
172 protected:
173
174 Int32 m_index;
175 Int32 m_size;
176 ConstituentItemLocalIdListView m_constituent_list_view;
177 ConstArrayView<MatVarIndex> m_matvar_indexes;
178 IMeshComponent* m_component;
179
180 protected:
181
182 matimpl::ConstituentItemBase _currentConstituentItemBase() const
183 {
184 return m_constituent_list_view._constituenItemBase(m_index);
185 }
186};
187
188/*---------------------------------------------------------------------------*/
189/*---------------------------------------------------------------------------*/
190/*!
191 * \brief Enumérateur sur une partie des mailles d'un seul matériau.
192 */
193class ARCANE_CORE_EXPORT MatCellEnumerator
194: public ComponentCellEnumerator
195{
196 protected:
197
198 explicit MatCellEnumerator(const ComponentItemVectorView& v)
199 : ComponentCellEnumerator(v)
200 {
201 }
202
203 public:
204
205 static MatCellEnumerator create(IMeshMaterial* mat);
206 static MatCellEnumerator create(const MatCellVector& miv);
207 static MatCellEnumerator create(MatItemVectorView v);
208
209 public:
210
211 MatCell operator*() const
212 {
213#ifdef ARCANE_CHECK
214 _check();
215#endif
216 return MatCell(_currentConstituentItemBase());
217 }
218
219 private:
220};
221
222/*---------------------------------------------------------------------------*/
223/*---------------------------------------------------------------------------*/
224/*!
225 * \brief Enumérateur sur les mailles d'un milieu
226 */
227class ARCANE_CORE_EXPORT EnvCellEnumerator
228: public ComponentCellEnumerator
229{
230 protected:
231
232 explicit EnvCellEnumerator(const ComponentItemVectorView& v)
233 : ComponentCellEnumerator(v)
234 {
235 }
236
237 public:
238
239 static EnvCellEnumerator create(IMeshEnvironment* mat);
240 static EnvCellEnumerator create(const EnvCellVector& miv);
241 static EnvCellEnumerator create(EnvItemVectorView v);
242
243 public:
244
245 EnvCell operator*() const
246 {
247#ifdef ARCANE_CHECK
248 _check();
249#endif
250 return EnvCell(_currentConstituentItemBase());
251 }
252};
253
254/*---------------------------------------------------------------------------*/
255/*---------------------------------------------------------------------------*/
256/*!
257 * \brief Enumérateur sur une sous-partie (pure ou partielle) d'un
258 * sous-ensemble des mailles d'un composant (matériau ou milieu)
259 */
260class ARCANE_CORE_EXPORT ComponentPartCellEnumerator
261{
262 protected:
263
264 ComponentPartCellEnumerator(const ComponentPartItemVectorView& view,Integer base_index);
265
266 public:
267
268 static ComponentPartCellEnumerator create(ComponentPartItemVectorView v);
269 static ComponentPartCellEnumerator create(IMeshComponent* c,eMatPart part);
270
271 public:
272
273 void operator++()
274 {
275 ++m_index;
276 }
277 bool hasNext() const { return m_index<m_size; }
278
279 MatVarIndex _varIndex() const { return MatVarIndex(m_var_idx,m_value_indexes[m_index]); }
280
281 operator ComponentItemLocalId() const
282 {
283 return ComponentItemLocalId(_varIndex());
284 }
285
286 ComponentCell operator*() const
287 {
288 return ComponentCell(m_constituent_list_view._constituenItemBase(m_item_indexes[m_index]));
289 }
290
291 protected:
292
293 Integer m_index;
294 Integer m_size;
295 Integer m_var_idx;
296 Integer m_base_index;
297 Int32ConstArrayView m_value_indexes;
298 Int32ConstArrayView m_item_indexes;
299 ConstituentItemLocalIdListView m_constituent_list_view;
300 IMeshComponent* m_component;
301
302 protected:
303
304 matimpl::ConstituentItemBase _currentConstituentItemBase() const
305 {
306 return m_constituent_list_view._constituenItemBase(m_item_indexes[m_index]);
307 }
308};
309
310/*---------------------------------------------------------------------------*/
311/*---------------------------------------------------------------------------*/
312/*!
313 * \brief Enumérateur les entités pures ou impures d'un matériau.
314 */
315class ARCANE_CORE_EXPORT MatPartCellEnumerator
316: public ComponentPartCellEnumerator
317{
318 public:
319 explicit MatPartCellEnumerator(const MatPartItemVectorView& v);
320 public:
321 static MatPartCellEnumerator create(MatPartItemVectorView v);
322 static MatPartCellEnumerator create(IMeshMaterial* mat,eMatPart part);
323 public:
324
325 MatCell operator*() const
326 {
327 return MatCell(_currentConstituentItemBase());
328 }
329};
330
331/*---------------------------------------------------------------------------*/
332/*---------------------------------------------------------------------------*/
333/*!
334 * \brief Enumérateur sur les entités pures ou impures d'un milieu.
335 */
336class ARCANE_CORE_EXPORT EnvPartCellEnumerator
337: public ComponentPartCellEnumerator
338{
339 public:
340 explicit EnvPartCellEnumerator(const EnvPartItemVectorView& v);
341 public:
342 static EnvPartCellEnumerator create(EnvPartItemVectorView v);
343 static EnvPartCellEnumerator create(IMeshEnvironment* env,eMatPart part);
344 public:
345
346 EnvCell operator*() const
347 {
348 return EnvCell(_currentConstituentItemBase());
349 }
350};
351
352/*---------------------------------------------------------------------------*/
353/*---------------------------------------------------------------------------*/
354/*!
355 * \brief Enumérateur sur les mailles d'un milieu
356 */
357class ARCANE_CORE_EXPORT CellGenericEnumerator
358{
359 public:
360 static EnvCellEnumerator create(IMeshEnvironment* env);
361 static EnvCellEnumerator create(const EnvCellVector& ecv);
362 static EnvCellEnumerator create(EnvItemVectorView v);
363
364 static MatCellEnumerator create(IMeshMaterial* mat);
365 static MatCellEnumerator create(const MatCellVector& miv);
366 static MatCellEnumerator create(MatItemVectorView v);
367
368 static CellEnumerator create(CellVectorView v);
369 static CellEnumerator create(const CellGroup& v);
370};
371
372/*---------------------------------------------------------------------------*/
373/*---------------------------------------------------------------------------*/
374/*!
375 * \brief Enumérateur sur les mailles milieux
376 */
377class ARCANE_CORE_EXPORT AllEnvCellEnumerator
378{
379 friend class EnumeratorTracer;
380 protected:
381 explicit AllEnvCellEnumerator(AllEnvCellVectorView items)
382 : m_index(0), m_size(items.size()), m_items(items) { }
383 public:
384 static AllEnvCellEnumerator create(AllEnvCellVectorView items);
385 static AllEnvCellEnumerator create(IMeshMaterialMng* mng,const CellGroup& group);
386 static AllEnvCellEnumerator create(IMeshMaterialMng* mng,const CellVectorView& view);
387 static AllEnvCellEnumerator create(IMeshBlock* block);
388 public:
389 void operator++() { ++m_index; }
390 bool hasNext() const { return m_index<m_size; }
391 AllEnvCell operator*() { return m_items[m_index]; }
392 Integer index() const { return m_index; }
393 public:
394 Integer m_index;
395 Integer m_size;
396 AllEnvCellVectorView m_items;
397};
398
399/*---------------------------------------------------------------------------*/
400/*---------------------------------------------------------------------------*/
401/*!
402 * \brief Enumérateur sur des composants
403 */
404class ARCANE_CORE_EXPORT ComponentEnumerator
405{
406 friend class EnumeratorTracer;
407
408 public:
409
410 explicit ComponentEnumerator(ConstArrayView<IMeshComponent*> components);
411
412 public:
413
414 bool hasNext() const { return m_index<m_size; }
415 void operator++() { ++m_index; }
416 IMeshComponent* operator*() const { return m_components[m_index]; }
417
418 private:
419
421 Integer m_index;
422 Integer m_size;
423};
424
425/*---------------------------------------------------------------------------*/
426/*---------------------------------------------------------------------------*/
427/*!
428 * \brief Enumérateur sur des matériaux
429 */
430class ARCANE_CORE_EXPORT MatEnumerator
431{
432 public:
433
434 explicit MatEnumerator(IMeshMaterialMng* mng);
435 explicit MatEnumerator(IMeshEnvironment* env);
436 explicit MatEnumerator(ConstArrayView<IMeshMaterial*> mats);
437
438 public:
439
440 bool hasNext() const { return m_index<m_size; }
441 void operator++() { ++m_index; }
442 IMeshMaterial* operator*() const { return m_mats[m_index]; }
443
444 private:
445
447 Integer m_index;
448 Integer m_size;
449};
450
451/*---------------------------------------------------------------------------*/
452/*---------------------------------------------------------------------------*/
453/*!
454 * \brief Enumérateur sur des milieux
455 */
456class ARCANE_CORE_EXPORT EnvEnumerator
457{
458 public:
459
460 EnvEnumerator(IMeshMaterialMng* mng);
461 EnvEnumerator(IMeshBlock* block);
462 EnvEnumerator(ConstArrayView<IMeshEnvironment*> envs);
463
464 public:
465
466 bool hasNext() const { return m_index<m_size; }
467 void operator++() { ++m_index; }
468 IMeshEnvironment* operator*() const { return m_envs[m_index]; }
469
470 private:
471
473 Integer m_index;
474 Integer m_size;
475};
476
477/*---------------------------------------------------------------------------*/
478/*---------------------------------------------------------------------------*/
479
480template<>
482{
483 public:
484 using EnumeratorType = ComponentCellEnumerator;
485};
486template<>
488{
489 public:
490 using EnumeratorType = MatCellEnumerator;
491};
492template<>
494{
495 public:
496 using EnumeratorType = MatPartCellEnumerator;
497};
498template<>
500{
501 public:
502 using EnumeratorType = EnvPartCellEnumerator;
503};
504template<>
506{
507 public:
508 using EnumeratorType = EnvCellEnumerator;
509};
510template<>
512{
513 public:
514 using EnumeratorType = ComponentPartCellEnumerator;
515};
516template<>
518{
519 public:
520 using EnumeratorType = ComponentPartSimdCellEnumerator;
521};
522
523/*---------------------------------------------------------------------------*/
524/*---------------------------------------------------------------------------*/
525
526#if defined(ARCANE_TRACE_ENUMERATOR)
527#define A_TRACE_COMPONENT(_EnumeratorClassName) \
528 ::Arcane::EnumeratorTraceWrapper< ::Arcane::Materials::_EnumeratorClassName, ::Arcane::Materials::IEnumeratorTracer >
529#define A_TRACE_COMPONENT_DIRECT_CLASS(_EnumeratorClassName) \
530 ::Arcane::EnumeratorTraceWrapper< _EnumeratorClassName, ::Arcane::Materials::IEnumeratorTracer >
531#else
532#define A_TRACE_COMPONENT(_EnumeratorClassName) \
533 ::Arcane::Materials::_EnumeratorClassName
534#define A_TRACE_COMPONENT_DIRECT_CLASS(_EnumeratorClassName) \
535 _EnumeratorClassName
536#endif
537
538#define A_ENUMERATE_COMPONENTCELL(_EnumeratorClassName,iname,...) \
539 for( A_TRACE_COMPONENT(_EnumeratorClassName) iname(Arcane::Materials::_EnumeratorClassName::create(__VA_ARGS__) A_TRACE_ENUMERATOR_WHERE); iname.hasNext(); ++iname )
540
541#define A_ENUMERATE_COMPONENT(_EnumeratorClassName,iname,container) \
542 for( A_TRACE_COMPONENT(_EnumeratorClassName) iname((::Arcane::Materials::_EnumeratorClassName)(container) A_TRACE_ENUMERATOR_WHERE); iname.hasNext(); ++iname )
543
544#define A_ENUMERATE_CELL_COMPONENTCELL(_EnumeratorClassName,iname,component_cell) \
545 for( ::Arcane::Materials::_EnumeratorClassName iname((::Arcane::Materials::_EnumeratorClassName)(component_cell)); iname.hasNext(); ++iname )
546
547#define A_ENUMERATEBUILDER_HELPER(ClassName_, ...) \
548 ::Arcane::Materials::EnumeratorBuilder<::Arcane::Materials::ClassName_>::create(__VA_ARGS__)
549
550/*---------------------------------------------------------------------------*/
551/*---------------------------------------------------------------------------*/
552
553/*!
554 * \brief Macro générique pour itérer sur les entités d'un matériau ou d'un milieu.
555 *
556 * \param enumerate_class_name nom de la classe de l'énumérateur
557 * \param iname nom de la variable contenant l'itérateur
558 * \param ... Les arguments supplémentaires sont passés à la méthode statique create() de
559 * la classe de l'énumérateur.
560 */
561#define ENUMERATE_COMPONENTITEM(enumerator_class_name,iname,...) \
562 A_ENUMERATE_COMPONENTCELL(ComponentItemEnumeratorTraitsT<enumerator_class_name>::EnumeratorType,iname,__VA_ARGS__)
563
564/*---------------------------------------------------------------------------*/
565/*---------------------------------------------------------------------------*/
566
567/*!
568 * \brief Macro pour itérer sur toutes les mailles AllEnvCell d'un groupe.
569 *
570 * Il existe deux possibilités pour utiliser cette macro. La première
571 * est obsolète et utilise la méthode IMeshMaterialMng::view(). La seconde
572 * utilise trois arguments:
573 * \param iname nom de l'itérateur, de type \a AllEnvCellEnumerator.
574 * \param matmng gestionnaire de materiaux de type \a IMeshMaterialMng.
575 * \param igroup groupe de maille, de type \a CellGroup.
576 */
577#define ENUMERATE_ALLENVCELL(iname,...) \
578 for( A_TRACE_COMPONENT(AllEnvCellEnumerator) iname( ::Arcane::Materials::AllEnvCellEnumerator::create(__VA_ARGS__) ); iname.hasNext(); ++iname )
579
580/*!
581 * \brief Macro pour itérer sur toutes les mailles d'un matériau.
582 *
583 * \param iname nom de l'itérateur, de type MatCellEnumerator.
584 * \param mat matériau, de type IMeshMaterial*
585 */
586#define ENUMERATE_MATCELL(iname,mat) \
587 A_ENUMERATE_COMPONENTCELL(MatCellEnumerator,iname,mat)
588
589/*!
590 * \brief Macro pour itérer sur toutes les mailles d'un milieu.
591 *
592 * \param iname nom de l'itérateur, de type EnvCellEnumerator.
593 * \param env milieu, de type IMeshEnvironment*
594 */
595#define ENUMERATE_ENVCELL(iname,env) \
596 A_ENUMERATE_COMPONENTCELL(EnvCellEnumerator,iname,env)
597
598/*!
599 * \brief Macro pour itérer sur toutes les mailles d'un composant.
600 *
601 * \param iname nom de l'itérateur, de type EnvCellEnumerator.
602 * \param component composant, de type IMeshComponent*
603 */
604#define ENUMERATE_COMPONENTCELL(iname,component) \
605 A_ENUMERATE_COMPONENTCELL(ComponentCellEnumerator,iname,component)
606
607/*!
608 * \brief Macro pour itérer sur une liste de composants
609 *
610 * \a icomponent nom de l'itérateur.
611 * \a container peut être un objet du type suivant:
612 * - ConstArrayView<IMeshComponent*> pour itérer sur une liste spécifique de composants
613 */
614#define ENUMERATE_COMPONENT(icomponent,container) \
615 A_ENUMERATE_COMPONENT(ComponentEnumerator,icomponent,container)
616
617/*!
618 * \brief Macro pour itérer sur une liste de matériaux
619 *
620 * \a imat nom de l'itérateur.
621 * \a container peut être un objet du type suivant:
622 * - IMeshMaterialMng* pour itérer sur tous les matériaux
623 * - IMeshEnvironment* pour itérer sur tous les matériaux d'un milieu
624 * - ConstArrayView<IMeshMaterial*> pour itérer sur une liste spécifique de matériaux
625 */
626#define ENUMERATE_MAT(imat,container) \
627 A_ENUMERATE_COMPONENT(MatEnumerator,imat,container)
628
629/*!
630 * \brief Macro pour itérer sur une liste de milieux.
631 *
632 * \a ienv est le nom de l'énumérateur.
633 * \a container peut être un objet du type suivant:
634 * - IMeshMaterialMng* pour itérer sur tous les milieux
635 * - IMeshBlock* pour itérer sur tous les milieux du bloc
636 * - ConstArrayView<IMeshEnvironment*> pour itérer sur une liste spécifique de milieux.
637 */
638#define ENUMERATE_ENV(ienv,container) \
639 A_ENUMERATE_COMPONENT(EnvEnumerator,ienv,container)
640
641/*!
642 * \brief Macro pour itérer sur tous les composants d'une maille.
643 *
644 * \param iname nom de l'itérateur, de type CellComponentCellEnumerator.
645 * \param component_cell maille composant, de type ComponentCell.
646 */
647#define ENUMERATE_CELL_COMPONENTCELL(iname,component_cell) \
648 A_ENUMERATE_CELL_COMPONENTCELL(CellComponentCellEnumerator,iname,component_cell)
649
650/*!
651 * \brief Macro pour itérer sur tous les matériaux d'une maille.
652 *
653 * \param iname nom de l'itérateur, de type CellMatCellEnumerator.
654 * \param env_cell maille milieu, de type EnvCell.
655 */
656#define ENUMERATE_CELL_MATCELL(iname,env_cell) \
657 A_ENUMERATE_CELL_COMPONENTCELL(CellMatCellEnumerator,iname,env_cell)
658
659/*!
660 * \brief Macro pour itérer sur tous les milieux d'une maille.
661 *
662 * \param iname nom de l'itérateur, de type CellEnvCellEnumerator.
663 * \param all_env_cell maille avec infos sur les milieux, de type AllEnvCell.
664 */
665#define ENUMERATE_CELL_ENVCELL(iname,all_env_cell) \
666 A_ENUMERATE_CELL_COMPONENTCELL(CellEnvCellEnumerator,iname,all_env_cell)
667
668/*---------------------------------------------------------------------------*/
669/*---------------------------------------------------------------------------*/
670
671/*!
672 * \brief Macro pour itérer de manière générique sur les matériaux,
673 * milieux ou les mailles
674 *
675 * \param iname nom de l'itérateur, de type CellEnvCellEnumerator.
676 * \param mat_or_env_or_group un objet qui peut être passé en argument de
677 * ENUMERATE_CELL, ENUMERATE_MATCELL ou ENUMERATE_ENVCELL.
678 */
679#define ENUMERATE_GENERIC_CELL(iname,mat_or_env_or_group) \
680 for( auto iname = ::Arcane::Materials::CellGenericEnumerator::create(mat_or_env_or_group); iname.hasNext(); ++iname )
681
682/*---------------------------------------------------------------------------*/
683/*---------------------------------------------------------------------------*/
684/*!
685 * \brief Macro générique pour itérer sur les entités d'un matériau ou d'un milieu.
686 *
687 * \warning Cette macro est expérimentale.
688 *
689 * \param ClassName_ nom de la classe du constituant (ConstituentCell, MatCell ou EnvCell)
690 * \param iname nom de la variable contenant l'itérateur
691 * \param container conteneur sur lequel on souhaite itérer.
692 *
693 * Utiliser cette macro support qu'il existe une méthode dans la
694 * classe Arcane::Materials::EnumeratorBuilder<ClassName_> une méthode
695 * create() qui prenne en argument un objet de type \a container. Le type
696 * de l'énumérateur sera le type de retour de cette méthode.
697 */
698#define ENUMERATE_CONSTITUENTITEM(ClassName_, iname, container) \
699 for (A_TRACE_COMPONENT_DIRECT_CLASS(decltype(A_ENUMERATEBUILDER_HELPER(ClassName_, container))) \
700 iname(A_ENUMERATEBUILDER_HELPER(ClassName_, container) A_TRACE_ENUMERATOR_WHERE); \
701 iname.hasNext(); ++iname)
702
703/*---------------------------------------------------------------------------*/
704/*---------------------------------------------------------------------------*/
705
706} // End namespace Arcane::Materials
707
708/*---------------------------------------------------------------------------*/
709/*---------------------------------------------------------------------------*/
710
711#endif
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Enumérateur SIMD sur une sous-partie (pure ou partielle) d'un sous-ensemble des mailles d'un composan...
Vue constante d'un tableau de type T.
constexpr __host__ __device__ Integer size() const
Nombre d'éléments.
Maille arcane avec info matériaux et milieux.
Enumérateur sur les mailles d'un milieu.
Enumérateur sur une partie des mailles d'un composant (matériau ou milieu)
Vue sur un vecteur sur les entités d'un composant.
Vecteur sur les entités d'un constituant.
Enumérateur sur une sous-partie (pure ou partielle) d'un sous-ensemble des mailles d'un composant (ma...
Vue sur une partie pure ou partielles des entités d'un composant.
Enumérateur sur les mailles d'un milieu.
Vecteur sur les entités d'un milieu.
Maille arcane d'un milieu.
Vue sur un vecteur sur les entités d'un milieu.
Enumérateur sur les entités pures ou impures d'un milieu.
Vue sur une partie pure ou partielles des entités d'un milieu.
Interface d'un bloc d'un maillage.
Interface d'un composant (matériau ou milieu) d'un maillage.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
Interface d'un matériau d'un maillage.
Enumérateur sur une partie des mailles d'un seul matériau.
Vecteur sur les entités d'un matériau.
Représente un matériau d'une maille multi-matériau.
Vue sur un vecteur sur les entités d'un matériau.
Enumérateur les entités pures ou impures d'un matériau.
Vue sur une partie pure ou partielles des entités d'un matériau.
Représente un index sur les variables matériaux et milieux.
constexpr __host__ __device__ Int32 arrayIndex() const
Retourne l'indice du tableau de valeur dans la liste des variables.
constexpr __host__ __device__ Int32 valueIndex() const
Retourne l'indice dans le tableau de valeur.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
Definition ItemTypes.h:183
ItemVectorViewT< Cell > CellVectorView
Vue sur un vecteur de mailles.
Definition ItemTypes.h:304
ItemEnumeratorT< Cell > CellEnumerator
Enumérateurs sur des mailles.
Definition ItemTypes.h:271
Active toujours les traces dans les parties Arcane concernant les 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:482
std::int32_t Int32
Type entier signé sur 32 bits.