Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
core/materials/MatItem.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* MatItem.h (C) 2000-2024 */
9/* */
10/* Entités matériau et milieux. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MATERIALS_MATITEM_H
13#define ARCANE_CORE_MATERIALS_MATITEM_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/Item.h"
18
19#include "arcane/core/materials/ComponentItem.h"
20#include "arcane/core/materials/ComponentItemInternal.h"
21#include "arcane/core/materials/IMeshMaterial.h"
22#include "arcane/core/materials/IMeshEnvironment.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane::Materials
28{
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32/*!
33 * \ingroup ArcaneMaterials
34 * \brief Représente un matériau d'une maille multi-matériau.
35 *
36 * Cette objet représente un matériau d'une maille multi-matériau.
37 *
38 * Il existe une maille spéciale, appelée maille nulle, pour laquelle
39 * null() est vrai et qui représente une maille invalide. Dans le
40 * cas de la maille invalide, il ne faut appeler aucune des autres
41 * méthode de la classe sous peine de provoquer un plantage.
42 *
43 * \warning Ces mailles sont invalidées dès que la liste des mailles d'un
44 * matériau ou d'un milieux change. Il ne faut donc pas
45 * conservér une maille de ce type entre deux changements de cette liste.
46 */
48: public ComponentCell
49{
50 public:
51
52 ARCCORE_HOST_DEVICE MatCell(const matimpl::ConstituentItemBase& item_base)
53 : ComponentCell(item_base)
54 {
55#ifdef ARCANE_CHECK
56 _checkLevel(item_base,LEVEL_MATERIAL);
57#endif
58 }
59
60 explicit ARCCORE_HOST_DEVICE MatCell(const ComponentCell& item)
61 : MatCell(item.constituentItemBase())
62 {
63 }
64
65 MatCell() = default;
66
67 public:
68
69 //! Maille milieu auquel cette maille matériau appartient.
70 ARCCORE_HOST_DEVICE inline EnvCell envCell() const;
71
72 //! Materiau associé
73 IMeshMaterial* material() const { return _material(); }
74
75 //! Materiau utilisateur associé
76 IUserMeshMaterial* userMaterial() const { return _material()->userMaterial(); }
77
78 //! Identifiant du matériau
79 ARCCORE_HOST_DEVICE Int32 materialId() const { return componentId(); }
80
81 private:
82
83 IMeshMaterial* _material() const { return static_cast<IMeshMaterial*>(component()); }
84};
85
86/*---------------------------------------------------------------------------*/
87/*---------------------------------------------------------------------------*/
88/*!
89 * \ingroup ArcaneMaterials
90 * \brief Maille arcane d'un milieu.
91 *
92 * Une telle maille contient les informations sur les matériaux
93 * d'un milieu pour une maille donnée.
94 *
95 * Il existe une maille spéciale, appelée maille nulle, pour laquelle
96 * null() est vrai et qui représente une maille invalide. Dans le
97 * cas de la maille invalide, il ne faut appeler aucune des autres
98 * méthode de la classe sous peine de provoquer un plantage.
99 *
100 * \warning Ces mailles sont invalidées dès que la liste des mailles d'un
101 * matériau ou d'un milieux change. Il ne faut donc pas
102 * conserver une maille de ce type entre deux changements de cette liste.
103 */
105: public ComponentCell
106{
107 public:
108
109 explicit ARCCORE_HOST_DEVICE EnvCell(const matimpl::ConstituentItemBase& item_base)
110 : ComponentCell(item_base)
111 {
112#ifdef ARCANE_CHECK
113 _checkLevel(item_base,LEVEL_ENVIRONMENT);
114#endif
115 }
116 explicit ARCCORE_HOST_DEVICE EnvCell(const ComponentCell& item)
117 : EnvCell(item.constituentItemBase())
118 {
119 }
120 EnvCell() = default;
121
122 public:
123
124 // Nombre de matériaux du milieu présents dans la maille
125 ARCCORE_HOST_DEVICE Int32 nbMaterial() const { return nbSubItem(); }
126
127 //! Maille contenant les infos sur tous les milieux
128 ARCCORE_HOST_DEVICE inline AllEnvCell allEnvCell() const;
129
130 //! i-ème maille matériau de cette maille
131 ARCCORE_HOST_DEVICE inline MatCell cell(Integer i) const { return _subItemBase(i); }
132
133 //! Milieu associé
134 IMeshEnvironment* environment() const { return _environment(); }
135
136 //! Identifiant du milieu
137 ARCCORE_HOST_DEVICE Int32 environmentId() const { return componentId(); }
138
139 //! Enumérateur sur les mailles matériaux de cette maille
140 ARCCORE_HOST_DEVICE CellMatCellEnumerator subMatItems() const
141 {
142 return CellMatCellEnumerator(*this);
143 }
144
145 private:
146
147 IMeshEnvironment* _environment() const { return static_cast<IMeshEnvironment*>(component()); }
148};
149
150/*---------------------------------------------------------------------------*/
151/*---------------------------------------------------------------------------*/
152/*!
153 * \ingroup ArcaneMaterials
154 * \brief Maille arcane avec info matériaux et milieux.
155 *
156 * Une telle maille contient les informations sur les milieux
157 * pour une maille donnée. Elle permet par exemple de connaitre le nombre
158 * de milieux et pour chacun la liste des matériaux.
159 *
160 * \warning Ces mailles sont invalidées dès que la liste des mailles d'un
161 * matériau ou d'un milieux change. Il ne faut donc pas
162 * conservér une maille de ce type entre deux changements de cette liste.
163 */
165: public ComponentCell
166{
167 public:
168
169 explicit ARCCORE_HOST_DEVICE AllEnvCell(const matimpl::ConstituentItemBase& item_base)
170 : ComponentCell(item_base)
171 {
172#if defined(ARCANE_CHECK)
173 _checkLevel(item_base,LEVEL_ALLENVIRONMENT);
174#endif
175 }
176
177 explicit ARCCORE_HOST_DEVICE AllEnvCell(const ComponentCell& item)
178 : AllEnvCell(item.constituentItemBase())
179 {
180 }
181
182 AllEnvCell() = default;
183
184 public:
185
186 //! Nombre de milieux présents dans la maille
187 ARCCORE_HOST_DEVICE Int32 nbEnvironment() const { return nbSubItem(); }
188
189 //! i-ème maille milieu
190 EnvCell cell(Int32 i) const { return EnvCell(_subItemBase(i)); }
191
192 //! Enumérateur sur les mailles milieux de cette maille
193 ARCCORE_HOST_DEVICE CellEnvCellEnumerator subEnvItems() const
194 {
195 return CellEnvCellEnumerator(*this);
196 }
197};
198
199/*---------------------------------------------------------------------------*/
200/*---------------------------------------------------------------------------*/
201
202ARCCORE_HOST_DEVICE inline EnvCell MatCell::
203envCell() const
204{
205 return EnvCell(_superItemBase());
206}
207
208/*---------------------------------------------------------------------------*/
209/*---------------------------------------------------------------------------*/
210
211ARCCORE_HOST_DEVICE inline AllEnvCell EnvCell::
212allEnvCell() const
213{
214 return AllEnvCell(_superItemBase());
215}
216
217/*---------------------------------------------------------------------------*/
218/*---------------------------------------------------------------------------*/
219
220} // End namespace Arcane::Materials
221
222/*---------------------------------------------------------------------------*/
223/*---------------------------------------------------------------------------*/
224
225#endif
Maille arcane avec info matériaux et milieux.
__host__ __device__ CellEnvCellEnumerator subEnvItems() const
Enumérateur sur les mailles milieux de cette maille.
__host__ __device__ Int32 nbEnvironment() const
Nombre de milieux présents dans la maille.
EnvCell cell(Int32 i) const
i-ème maille milieu
Représente un composant d'une maille multi-matériau.
IMeshComponent * component() const
Constituant associé.
__host__ __device__ Int32 componentId() const
Identifiant du composant dans la liste des composants de ce type.
__host__ __device__ Int32 nbSubItem() const
Nombre de sous-éléments.
Maille arcane d'un milieu.
IMeshEnvironment * environment() const
Milieu associé
__host__ __device__ AllEnvCell allEnvCell() const
Maille contenant les infos sur tous les milieux.
__host__ __device__ MatCell cell(Integer i) const
i-ème maille matériau de cette maille
__host__ __device__ Int32 environmentId() const
Identifiant du milieu.
__host__ __device__ CellMatCellEnumerator subMatItems() const
Enumérateur sur les mailles matériaux de cette maille.
Interface d'un matériau d'un maillage.
virtual IUserMeshMaterial * userMaterial() const =0
Matériau utilisateur associé
Interface d'un matériau utilisateur.
Représente un matériau d'une maille multi-matériau.
IUserMeshMaterial * userMaterial() const
Materiau utilisateur associé
__host__ __device__ Int32 materialId() const
Identifiant du matériau.
__host__ __device__ EnvCell envCell() const
Maille milieu auquel cette maille matériau appartient.
IMeshMaterial * material() const
Materiau associé
Active toujours les traces dans les parties Arcane concernant les matériaux.
CellComponentCellEnumeratorT< EnvCell > CellEnvCellEnumerator
Enumérateur sur les mailles milieux d'une maille.
CellComponentCellEnumeratorT< MatCell > CellMatCellEnumerator
Enumérateur sur les mailles matériaux d'une maille.