Arcane  v3.15.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
AllCellToAllEnvCellConverter.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/* AllCellToAllEnvCellConverter.h (C) 2000-2024 */
9/* */
10/* Conversion de 'Cell' en 'AllEnvCell'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MATERIALS_ALLCELLTOALLENVCELLCONVERTER_H
13#define ARCANE_MATERIALS_ALLCELLTOALLENVCELLCONVERTER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19#include "arcane/core/materials/MatItem.h"
21#include "arcane/core/materials/CellToAllEnvCellConverter.h"
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane::Materials
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
52class ARCANE_MATERIALS_EXPORT AllCellToAllEnvCell
53{
54 friend class CellToAllEnvCellAccessor;
57
58 private:
59
61 ARCCORE_HOST_DEVICE Span<ComponentItemLocalId> operator[](Int32 cell_id) const
62 {
63 return m_allcell_allenvcell_ptr[cell_id];
64 }
65
66 private:
67
68 Span<Span<ComponentItemLocalId>> m_allcell_allenvcell_ptr;
69};
70
71/*---------------------------------------------------------------------------*/
72/*---------------------------------------------------------------------------*/
83class ARCANE_MATERIALS_EXPORT CellToAllEnvCellAccessor
84{
86
87 public:
88
89 using size_type = Span<ComponentItemLocalId>::size_type;
90
91 public:
92
93 CellToAllEnvCellAccessor() = default;
95
96 ARCCORE_HOST_DEVICE size_type nbEnvironment(Int32 cid) const
97 {
98 return m_cell_allenvcell[cid].size();
99 }
100
101 private:
102
103 ARCCORE_HOST_DEVICE AllCellToAllEnvCell _getAllCellToAllEnvCell() const
104 {
105 return m_cell_allenvcell;
106 }
107
108 private:
109
110 AllCellToAllEnvCell m_cell_allenvcell;
111};
112
113/*---------------------------------------------------------------------------*/
114/*---------------------------------------------------------------------------*/
115
116class ARCANE_MATERIALS_EXPORT CellToAllComponentCellEnumerator
117{
118 friend class EnumeratorTracer;
119
120 public:
121
122 using index_type = Span<ComponentItemLocalId>::index_type;
123 using size_type = Span<ComponentItemLocalId>::size_type;
124
125 public:
126
127 // La version CPU permet de vérifier qu'on a bien fait l'init avant l'ENUMERATE
128 ARCCORE_HOST_DEVICE explicit CellToAllComponentCellEnumerator(Int32 cell_id, const CellToAllEnvCellAccessor& acc)
129 {
130 AllCellToAllEnvCell all_env_view = acc._getAllCellToAllEnvCell();
131 m_ptr = all_env_view[cell_id];
132 }
133 ARCCORE_HOST_DEVICE void operator++()
134 {
135 ++m_index;
136 }
137
138 ARCCORE_HOST_DEVICE bool hasNext() const
139 {
140 return m_index < m_ptr.size();
141 }
142
143 ARCCORE_HOST_DEVICE ComponentItemLocalId operator*() const
144 {
145 return m_ptr[m_index];
146 }
147
148 private:
149
150 index_type m_index = 0;
152};
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
166#define RUNCOMMAND_ENUMERATE_CELL_ALLENVCELL(cell_to_allenvcellaccessor, iter_name, cell_group) \
167 A_FUNCINFO << cell_group << [=] ARCCORE_HOST_DEVICE(CellLocalId iter_name)
168
169/*---------------------------------------------------------------------------*/
170/*---------------------------------------------------------------------------*/
171
172// TODO: Très certainement à déplacer ailleurs si on garde ce proto
173#define A_ENUMERATE_CELL_ALLCOMPONENTCELL(_EnumeratorClassName, iname, cid, cell_to_allenvcellaccessor) \
174 for (A_TRACE_COMPONENT(_EnumeratorClassName) iname(::Arcane::Materials::_EnumeratorClassName(cid, cell_to_allenvcellaccessor) A_TRACE_ENUMERATOR_WHERE); iname.hasNext(); ++iname)
175
176/*---------------------------------------------------------------------------*/
177/*---------------------------------------------------------------------------*/
188// TODO: Très certainement à déplacer ailleurs si on garde ce proto
189#define ENUMERATE_CELL_ALLENVCELL(iname, cid, cell_to_allenvcellaccessor) \
190 A_ENUMERATE_CELL_ALLCOMPONENTCELL(CellToAllComponentCellEnumerator, iname, cid, cell_to_allenvcellaccessor)
191
192/*---------------------------------------------------------------------------*/
193/*---------------------------------------------------------------------------*/
194
195} // End namespace Arcane::Materials
196
197/*---------------------------------------------------------------------------*/
198/*---------------------------------------------------------------------------*/
199
200#endif
201
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
Table de connectivité des 'Cell' vers leur(s) 'AllEnvCell' destinée à une utilisation sur accélérateu...
Table de connectivité des 'Cell' vers leur(s) 'AllEnvCell' destinée à une utilisation sur accélérateu...
ARCCORE_HOST_DEVICE Span< ComponentItemLocalId > operator[](Int32 cell_id) const
Méthode d'accès à la table de "connectivité" cell -> all env cells.
Classe d'encapsulation pour accéder à la connectivité équivalente cell -> allenvcell....
Index d'un ConstituentItem dans une variable.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
Active toujours les traces dans les parties Arcane concernant les matériaux.