Arcane  v3.16.3.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MeshMaterialTesterModule_Samples.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_Samples.cc (C) 2000-2025 */
9/* */
10/* Module de test du gestionnaire des matériaux. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/SimdOperation.h"
15
16#include "arcane/core/BasicModule.h"
17#include "arcane/core/IMesh.h"
18#include "arcane/core/ITimeLoopMng.h"
19#include "arcane/core/materials/MaterialVariableBuildInfo.h"
20#include "arcane/core/materials/IMeshBlock.h"
23
24#include "arcane/materials/MeshBlockBuildInfo.h"
25#include "arcane/materials/MeshEnvironmentBuildInfo.h"
26#include "arcane/materials/MatCellVector.h"
27#include "arcane/materials/EnvCellVector.h"
28#include "arcane/materials/MeshMaterialModifier.h"
29#include "arcane/materials/MatConcurrency.h"
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35namespace
36{
37
38/*---------------------------------------------------------------------------*/
39/*---------------------------------------------------------------------------*/
40
41// Exemple pour la documentation. Doit compiler, mais ne sera pas exécuté.
42class Sample
44{
45 public:
46
47 explicit Sample(const Arcane::ModuleBuildInfo& mbi)
48 : BasicModule(mbi)
49 , m_mat_density(Arcane::MaterialVariableBuildInfo(0, "TestDensity"))
50 {}
52
54 void _computeDensity(Arcane::Materials::IMeshMaterial* mat)
55 {
56 ENUMERATE_MATCELL (imc, mat) {
57 Arcane::MatCell mc = *imc;
58 m_mat_density[mc] = 1.0;
59 }
60
61 // Indique que la variable est à jour.
62 m_mat_density.setUpToDate(mat);
63 }
65
66 void _sample()
67 {
70 // Création ou récupération du gestionnaire depuis un maillage.
71 Arcane::Materials::IMeshMaterialMng* material_mng = nullptr;
72 material_mng = Arcane::Materials::IMeshMaterialMng::getReference(defaultMesh());
74
76 // Exemple de création de 3 matériaux:
77 material_mng->registerMaterialInfo("MAT1");
78 material_mng->registerMaterialInfo("MAT2");
79 material_mng->registerMaterialInfo("MAT3");
81
83 // Création du milieu ENV1 contenant les matériaux MAT1 et MAT2
84 Arcane::Materials::MeshEnvironmentBuildInfo ebi1("ENV1");
85 ebi1.addMaterial("MAT1");
86 ebi1.addMaterial("MAT2");
87 Arcane::Materials::IMeshEnvironment* env1 = material_mng->createEnvironment(ebi1);
88
89 // Création du milieu ENV2 contenant le matériau MAT2
90 Arcane::Materials::MeshEnvironmentBuildInfo ebi2("ENV2");
91 ebi2.addMaterial("MAT2");
92 Arcane::Materials::IMeshEnvironment* env2 = material_mng->createEnvironment(ebi2);
93
94 // Création du milieu ENV3 contenant les matériaux MAT3 et MAT1
95 Arcane::Materials::MeshEnvironmentBuildInfo ebi3("ENV3");
96 ebi3.addMaterial("MAT3");
97 ebi3.addMaterial("MAT1");
98 Arcane::Materials::IMeshEnvironment* env3 = material_mng->createEnvironment(ebi3);
99
100 // Création du bloc BLOCK1 sur le groupe de toutes les mailles
101 // et contenant les milieux ENV1 et ENV2
102 Arcane::Materials::MeshBlockBuildInfo mb1("BLOCK1", allCells());
103 mb1.addEnvironment(env1);
104 mb1.addEnvironment(env2);
105 Arcane::Materials::IMeshBlock* block = material_mng->createBlock(mb1);
106
107 // Indique au gestionnaire que l'initialisation est terminée
108 material_mng->endCreate();
110
112 info() << env1->id(); // Affiche '0'
113 info() << env1->materials()[0]->id(); // Affiche '0'
114 info() << env1->materials()[1]->id(); // Affiche '1'
115 info() << env2->id(); // Affiche '1'
116 info() << env2->materials()[0]->id(); // Affiche '2'
117 info() << env3->id(); // Affiche '2'
118 info() << env3->materials()[0]->id(); // Affiche '3'
119 info() << env3->materials()[1]->id(); // Affiche '4'
120 info() << block->id(); // Affiche '0'
122
124 {
125 // Créé l'instance de modification. Les modifications
126 // seront effectives lors de l'appel au destructeur de
127 // cette classe.
128 Arcane::Materials::MeshMaterialModifier modifier(material_mng);
129 // Ajoute les mailles du matériau 1 ou 2 en fonction
130 // de leur localId()
131 Arcane::UniqueArray<Arcane::Int32> mat1_indexes;
132 Arcane::UniqueArray<Arcane::Int32> mat2_indexes;
133 const Arcane::Int32 nb_cell = allCells().size();
134 ENUMERATE_CELL (icell, allCells()) {
135 Arcane::Int32 local_id = icell.itemLocalId();
136 Arcane::Int32 z = icell.index();
137 bool add_to_mat1 = (z < (nb_cell / 2) && z > (nb_cell / 4));
138 bool add_to_mat2 = (z >= (nb_cell / 2) || z < (nb_cell / 3));
139 if (add_to_mat1)
140 mat1_indexes.add(local_id);
141 if (add_to_mat2)
142 mat2_indexes.add(local_id);
143 }
144 // Ajoute les mailles du matériau 1
145 modifier.addCells(env1->materials()[0], mat1_indexes);
146 // Ajoute les mailles du matériau 2
147 modifier.addCells(env1->materials()[1], mat2_indexes);
148 }
149 // A partir d'ici, les matériaux sont mis à jour.
150 info() << env1->materials()[0]->cells().size(); // Nombre de mailles du matériau
152
154 Arcane::IMesh* mesh = defaultMesh();
155 Arcane::Materials::MaterialVariableBuildInfo mvbinfo(material_mng, "Density");
157 Arcane::Materials::MaterialVariableCellReal mat_pressure(Arcane::VariableBuildInfo(mesh, "Pressure"));
159
161 // Itération sur tous les milieux, puis tous les matériaux et
162 // toutes les mailles de ce matériau
163 ENUMERATE_ENV (ienv, material_mng) {
164 Arcane::Materials::IMeshEnvironment* env = *ienv;
165 ENUMERATE_MAT (imat, env) {
166 Arcane::Materials::IMeshMaterial* mat = *imat;
167 ENUMERATE_MATCELL (imatcell, mat) {
168 Arcane::Materials::MatCell mc = *imatcell;
169 info() << "Cell mat=" << mc.materialId();
170 }
171 }
172 ENUMERATE_ENVCELL (ienvcell, env) {
173 Arcane::Materials::EnvCell mmcell = *ienvcell;
174 info() << "Cell env=" << mmcell.environmentId();
175 }
176 }
178
180 // Itération sur tous les mailles des matériaux des milieux d'un bloc.
181 ENUMERATE_ENV (ienv, block) {
182 Arcane::Materials::IMeshEnvironment* env = *ienv;
183 ENUMERATE_MAT (imat, env) {
184 Arcane::Materials::IMeshMaterial* mat = *imat;
185 ENUMERATE_MATCELL (imatcell, mat) {
186 Arcane::Materials::MatCell mc = *imatcell;
187 info() << "Cell mat=" << mc.materialId();
188 }
189 }
190 }
192
194 // Itération sur tous les milieux et tous les matériaux d'une maille.
195 ENUMERATE_ALLENVCELL (iallenvcell, material_mng, allCells()) {
196 Arcane::Materials::AllEnvCell all_env_cell = *iallenvcell;
197 ENUMERATE_CELL_ENVCELL (ienvcell, all_env_cell) {
198 Arcane::Materials::EnvCell env_cell = *ienvcell;
199 info() << "Cell env=" << env_cell.environmentId();
200 ENUMERATE_CELL_MATCELL (imatcell, env_cell) {
201 Arcane::Materials::MatCell mc = *imatcell;
202 info() << "Cell mat=" << mc.materialId();
203 }
204 }
205 }
207
209 // Itération sur tous les milieux et tous les matériaux d'une maille.
210 ENUMERATE_ALLENVCELL (iallenvcell, block) {
211 Arcane::AllEnvCell all_env_cell = *iallenvcell;
212 ENUMERATE_CELL_ENVCELL (ienvcell, all_env_cell) {
213 Arcane::EnvCell env_cell = *ienvcell;
214 info() << "Cell env=" << env_cell.environmentId();
215 ENUMERATE_CELL_MATCELL (imatcell, env_cell) {
216 Arcane::MatCell mc = *imatcell;
217 info() << "Cell mat=" << mc.materialId();
218 }
219 }
220 }
222
224 Arcane::CellGroup cells;
225 Arcane::Materials::IMeshMaterial* mat = env1->materials()[0];
226 Arcane::Materials::MatCellVector mat_cells(cells, mat);
227 ENUMERATE_MATCELL (imatcell, mat_cells) {
228 mat_density[imatcell] = 2.3;
229 }
230 Arcane::Materials::IMeshEnvironment* env = env1;
231 Arcane::Materials::EnvCellVector env_cells(cells, env);
232 ENUMERATE_ENVCELL (imatcell, env_cells) {
233 mat_density[imatcell] = 3.1;
234 }
236
238
240 // Itération sur tous les milieux, puis tous les matériaux et
241 // toutes les mailles de ce matériau via la ComponentCell
242 ENUMERATE_ENV (ienv, material_mng) {
243 Arcane::Materials::IMeshEnvironment* env = *ienv;
244 ENUMERATE_MAT (imat, env) {
245 Arcane::Materials::IMeshMaterial* mat = *imat;
246 ENUMERATE_COMPONENTCELL (iccell, mat) {
247 Arcane::Materials::ComponentCell cc = *iccell;
248 info() << "Cell mat=" << cc.componentId();
249 mat_density[cc] = 3.1; // Met à jour la densité du matériau
250 }
251 }
252 ENUMERATE_COMPONENTCELL (iccell, env) {
253 Arcane::Materials::ComponentCell cc = *iccell;
254 info() << "Cell env=" << cc.componentId();
255 mat_density[cc] = 2.5; // Met à jour la densité du milieu
256 }
257 }
259
260 {
262 Arcane::Materials::MatCell mc;
263 Arcane::Materials::ComponentCell cc = mc;
264 // Retourne la maille milieu (EnvCell) du matériau:
265 Arcane::Materials::ComponentCell cc2 = cc.superCell();
266 // Itère sur les mailles matériaux du milieu
268 }
269
270 // Retourne la maille AllEnvCell du milieu:
271 Arcane::Materials::ComponentCell cc3 = cc2.superCell();
272 // Itère sur les mailles milieu de la maille.
274 }
276 }
277
278 {
279 Arcane::Real init_val = 0.0;
281 // Initialise la valeur globale
282 var.globalVariable().fill(init_val);
283 ENUMERATE_ENV (ienv, material_mng) {
284 // Initialise les valeurs milieux
285 ENUMERATE_ENVCELL (ienvcell, (*ienv)) {
286 var[ienvcell] = init_val;
287 }
288 // Initialise les valeurs matériaux
289 ENUMERATE_MAT (imat, (*ienv)) {
290 ENUMERATE_MATCELL (imatcell, (*imat)) {
291 var[imatcell] = init_val;
292 }
293 }
294 }
295 }
296
297 {
299 // Positionne la méthode de calcul.
300 mat_density.setMaterialComputeFunction(this, &Sample::_computeDensity);
301 // Ajoute dépendance sur une variable matériau
302 mat_density.addMaterialDepend(mat_pressure);
303 // Ajoute dépendance sur variables globales
304 mat_density.addMaterialDepend(defaultMesh()->nodesCoordinates());
305 mat_density.addMaterialDepend(m_global_time);
306
307 ENUMERATE_MAT (imat, material_mng) {
308 Arcane::Materials::IMeshMaterial* mat = *imat;
309 // Met à jour la variable sur le matériau \a mat si besoin.
310 mat_density.update(mat);
311 }
313 }
314
315 {
317 // Boucle parallèle sur les mailles du milieu env1
318 Arcane::Materials::IMeshEnvironment* env = env1;
319 Arcane::Parallel::Foreach(env->envView(), [&](Arcane::Materials::EnvItemVectorView view) {
320 ENUMERATE_ENVCELL (ienvcell, view) {
321 mat_density[ienvcell] = 2.5;
322 }
323 });
324
325 // Boucle parallèle sur les mailles du premier matériaux de env1
326 Arcane::Materials::IMeshMaterial* mat = env1->materials()[0];
327 Arcane::Parallel::Foreach(mat->matView(), [&](Arcane::Materials::MatItemVectorView view) {
328 ENUMERATE_MATCELL (imatcell, view) {
329 mat_density[imatcell] = 2.5;
330 }
331 });
332
333 // Functor générique sur un matériau ou milieu.
334 auto func = [&](Arcane::Materials::ComponentItemVectorView view) {
335 ENUMERATE_COMPONENTCELL (iccell, view) {
336 mat_density[iccell] = 2.5;
337 }
338 };
339 // Application en parallèle de \a func sur le matériau
340 Arcane::Parallel::Foreach(mat->view(), func);
341 // Application en parallèle de \a func sur le milieu
342 Arcane::Parallel::Foreach(env->view(), func);
343
344 // Application en parallèle de \a func sur le milieu avec options
345 Arcane::ParallelLoopOptions options;
346 Arcane::Parallel::Foreach(env->view(), options, func);
348 }
349
350 {
356
358 Arcane::Real nr = 1.0;
359 // Température et volume en lecture seule
360 auto in_volume = viewIn(mat_volume);
361 auto in_temperature = viewIn(mat_temperature);
362 // Pression en écriture
363 auto out_pressure = viewOut(mat_pressure);
364
365 ENUMERATE_COMPONENTITEM_LAMBDA(EnvPartSimdCell, scell, env)
366 {
367 out_pressure[scell] = nr * in_temperature[scell] / in_volume[scell];
368 };
370
372 Arcane::CellGroup test_env_group;
374 Arcane::Materials::EnvCellVector env_vector(test_env_group, env);
375
376 // Boucle sur les mailles du milieu \a env
378 Arcane::Materials::EnvCell c = *ienvcell;
379 mat_pressure[c] = mat_temperature[ienvcell];
380 }
381
382 // Boucle sur les mailles du milieu \a env_vector
384 Arcane::Materials::EnvCell c = *ienvcell;
385 mat_pressure[c] = mat_temperature[ienvcell];
386 }
387
388 // Boucle sur les mailles pures du milieu \a env
390 Arcane::Materials::EnvCell c = *ienvcell;
391 mat_pressure[c] = mat_temperature[ienvcell];
392 }
393
394 // Boucle sur les mailles pures du milieu \a env
395 ENUMERATE_COMPONENTITEM (Arcane::Materials::EnvPartCell, ienvcell, env, Arcane::Materials::eMatPart::Pure) {
396 Arcane::Materials::EnvCell c = *ienvcell;
397 mat_pressure[c] = mat_temperature[ienvcell];
398 }
399
400 // Boucle sur les mailles impures du milieu \a env
402 Arcane::Materials::EnvCell c = *ienvcell;
403 mat_pressure[c] = mat_temperature[ienvcell];
404 }
405
406 // Boucle sur les mailles impures du milieu \a env
407 ENUMERATE_COMPONENTITEM (Arcane::Materials::EnvPartCell, ienvcell, env, Arcane::Materials::eMatPart::Impure) {
408 Arcane::Materials::EnvCell c = *ienvcell;
409 mat_pressure[c] = mat_temperature[ienvcell];
410 }
411
413
415 Arcane::CellGroup test_mat_group;
417 Arcane::Materials::MatCellVector mat_vector(test_mat_group, mat);
418
419 // Boucle sur les mailles du matériau \a mat
421 Arcane::Materials::MatCell c = *imatcell;
422 mat_pressure[c] = mat_temperature[imatcell];
423 }
424
425 // Boucle sur les mailles du matériau \a mat_vector
427 Arcane::Materials::MatCell c = *imatcell;
428 mat_pressure[c] = mat_temperature[imatcell];
429 }
430
431 // Boucle sur les mailles pures du matériau \a mat
433 Arcane::Materials::MatCell c = *imatcell;
434 mat_pressure[c] = mat_temperature[imatcell];
435 }
436
437 // Boucle sur les mailles pures du matériau \a mat
438 ENUMERATE_COMPONENTITEM (Arcane::MatPartCell, imatcell, mat, Arcane::Materials::eMatPart::Pure) {
439 Arcane::MatCell c = *imatcell;
440 mat_pressure[c] = mat_temperature[imatcell];
441 }
442
443 // Boucle sur les mailles impures du matériau \a mat
445 Arcane::Materials::MatCell c = *imatcell;
446 mat_pressure[c] = mat_temperature[imatcell];
447 }
448
449 // Boucle sur les mailles impures du matériau \a mat
450 ENUMERATE_COMPONENTITEM (Arcane::Materials::MatPartCell, imatcell, mat, Arcane::Materials::eMatPart::Impure) {
451 Arcane::Materials::MatCell c = *imatcell;
452 mat_pressure[c] = mat_temperature[imatcell];
453 }
455
457 // Boucle générique sur les mailles du matériau \a mat
458 ENUMERATE_COMPONENTITEM (Arcane::Materials::ComponentCell, iccell, mat) {
459 Arcane::Materials::ComponentCell c = *iccell;
460 mat_pressure[c] = mat_temperature[iccell];
461 }
462
463 // Boucle générique sur les mailles du matériau \a mat_vector
464 ENUMERATE_COMPONENTITEM (Arcane::Materials::ComponentCell, iccell, mat_vector) {
465 Arcane::Materials::ComponentCell c = *iccell;
466 mat_pressure[c] = mat_temperature[iccell];
467 }
468
469 // Boucle générique sur les mailles pures du matériau \a mat
471 Arcane::Materials::ComponentCell c = *iccell;
472 mat_pressure[c] = mat_temperature[iccell];
473 }
474
475 // Boucle générique sur les mailles pures du matériau \a mat
476 ENUMERATE_COMPONENTITEM (Arcane::Materials::ComponentPartCell, iccell, mat, Arcane::eMatPart::Pure) {
477 Arcane::Materials::ComponentCell c = *iccell;
478 mat_pressure[c] = mat_temperature[iccell];
479 }
480
481 // Boucle générique sur les mailles impures du matériau \a mat
483 Arcane::Materials::ComponentCell c = *iccell;
484 mat_pressure[c] = mat_temperature[iccell];
485 }
486
487 // Boucle générique sur les mailles impures du matériau \a mat
488 ENUMERATE_COMPONENTITEM (Arcane::Materials::ComponentPartCell, iccell, mat, Arcane::eMatPart::Impure) {
489 Arcane::Materials::ComponentCell c = *iccell;
490 mat_pressure[c] = mat_temperature[iccell];
491 }
493 }
494 }
495};
496
497/*---------------------------------------------------------------------------*/
498/*---------------------------------------------------------------------------*/
499
500} // namespace
501
502/*---------------------------------------------------------------------------*/
503/*---------------------------------------------------------------------------*/
#define ENUMERATE_COMPONENTITEM_LAMBDA(iter_type, iter, container)
Macro pour itérer sur les entités d'un composant via une fonction lambda du C++11.
#define ENUMERATE_CELL(name, group)
Enumérateur générique d'un groupe de mailles.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Module basique.
Definition BasicModule.h:45
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
GlobalVariableRefType & globalVariable()
Variable globale associée à cette variable matériau.
__host__ __device__ Int32 componentId() const
Identifiant du composant dans la liste des composants de ce type.
__host__ __device__ ComponentCell superCell() const
Maille de niveau supérieur dans la hiérarchie.
Vecteur sur les entités d'un milieu.
Maille arcane d'un milieu.
__host__ __device__ Int32 environmentId() const
Identifiant du milieu.
virtual Int32 id() const =0
Identifiant du bloc. Il s'agit aussi de l'indice (en commencant par 0) de ce bloc dans la liste des b...
virtual Int32 id() const =0
Identifiant du composant.
virtual ComponentImpurePartItemVectorView impureItems() const =0
Vue sur la liste des entités impures (partielles) partielles du composant.
virtual ComponentItemVectorView view() const =0
Vue associée à ce composant.
virtual ComponentPurePartItemVectorView pureItems() const =0
Vue sur la liste des entités pures (associées à la maille globale) du composant.
virtual EnvImpurePartItemVectorView impureEnvItems() const =0
Vue sur la liste des entités impures (partielles) partielles du milieu.
virtual ConstArrayView< IMeshMaterial * > materials()=0
Liste des matériaux de ce milieu.
virtual EnvItemVectorView envView() const =0
Vue associée à ce milieu.
virtual EnvPurePartItemVectorView pureEnvItems() const =0
Vue sur la liste des entités pures (associées à la maille globale) du milieu.
virtual MeshMaterialInfo * registerMaterialInfo(const String &name)=0
Enregistre les infos du matériau de nom name.
virtual void endCreate(bool is_continue=false)=0
Indique qu'on a fini de créer les milieux.
virtual IMeshBlock * createBlock(const MeshBlockBuildInfo &infos)=0
Créé un bloc.
virtual IMeshEnvironment * createEnvironment(const MeshEnvironmentBuildInfo &infos)=0
Créé un milieu avec les infos infos.
static IMeshMaterialMng * getReference(const MeshHandleOrMesh &mesh_handle, bool create=true)
Récupère ou créé la référence associée à mesh.
Interface d'un matériau d'un maillage.
virtual MatImpurePartItemVectorView impureMatItems() const =0
Vue sur la liste des entités impures (partielles) partielles du matériau.
virtual MatItemVectorView matView() const =0
Vue associée à ce matériau.
virtual MatPurePartItemVectorView pureMatItems() const =0
Vue sur la liste des entités pures (associées à la maille globale) du matériau.
Vecteur sur les entités d'un matériau.
Représente un matériau d'une maille multi-matériau.
__host__ __device__ Int32 materialId() const
Identifiant du matériau.
Paramètres nécessaires à la construction d'une 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_COMPONENTITEM(enumerator_class_name, iname,...)
Macro générique pour itérer sur les entités d'un matériau ou d'un milieu.
#define ENUMERATE_CELL_MATCELL(iname, env_cell)
Macro pour itérer sur tous les matériaux d'une maille.
#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_COMPONENTCELL(iname, component)
Macro pour itérer sur toutes les mailles d'un composant.
#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
auto viewOut(const ViewBuildInfo &vbi, CellMaterialVariableScalarRef< DataType > &var)
Vue en écriture pour les variables materiaux scalaire.
auto viewIn(const ViewBuildInfo &vbi, const CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture pour les variables materiaux scalaire.
CellMaterialVariableScalarRef< Real > MaterialVariableCellReal
Variable matériau de type Real
void Foreach(const ItemVectorView &items_view, const ParallelLoopOptions &options, InstanceType *instance, void(InstanceType::*function)(ItemVectorViewT< ItemType > items))
double Real
Type représentant un réel.
std::int32_t Int32
Type entier signé sur 32 bits.