Arcane  v3.16.2.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
VariableViews.h
Aller à la documentation de ce fichier.
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/* VariableViews.h (C) 2000-2025 */
9/* */
10/* Gestion des vues sur les variables pour les accélérateurs. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_VARIABLEVIEWS_H
13#define ARCANE_ACCELERATOR_VARIABLEVIEWS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/ArcaneCxx20.h"
18
21#include "arcane/core/ItemLocalId.h"
23#include "arcane/core/GroupIndexTable.h"
24
25#include "arcane/accelerator/core/ViewBuildInfo.h"
26#include "arcane/accelerator/AcceleratorGlobal.h"
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35// TODO: Faire les vues en ReadWrite pour les accesseurs SIMD
36
37namespace Arcane::Accelerator
38{
39template <typename DataType> class View1DGetterSetter;
40
41/*---------------------------------------------------------------------------*/
42/*---------------------------------------------------------------------------*/
43/*!
44 * \brief Classe de base des vues sur les variables.
45 */
46class ARCANE_ACCELERATOR_EXPORT VariableViewBase
47{
48 public:
49
50 VariableViewBase(const ViewBuildInfo& command, IVariable* var);
51};
52
53/*---------------------------------------------------------------------------*/
54/*---------------------------------------------------------------------------*/
55/*!
56 * \brief Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
57 */
58template <typename DataType>
59class View1DSetter
60{
61 // Pour accéder à m_data;
62 friend class View1DGetterSetter<DataType>;
63
64 public:
65
66 using ValueType = DataType;
67 using DataTypeReturnReference = View1DSetter<DataType>;
68 explicit ARCCORE_HOST_DEVICE View1DSetter(SmallSpan<DataType> data)
69 : m_data(data)
70 {}
71 ARCCORE_HOST_DEVICE DataViewSetter<DataType> operator[](Int32 index) const
72 {
73 return DataViewSetter<DataType>(m_data.ptrAt(index));
74 }
75 ARCCORE_HOST_DEVICE DataViewSetter<DataType> operator()(Int32 index) const
76 {
77 return DataViewSetter<DataType>(m_data.ptrAt(index));
78 }
79 DataTypeReturnReference& operator=(const View1DSetter<DataType>& rhs) = delete;
80
81 public:
82
83 ARCCORE_HOST_DEVICE void copy(SmallSpan<const DataType> rhs)
84 {
85 m_data.copy(rhs);
86 }
87
88 private:
89
91};
92
93/*---------------------------------------------------------------------------*/
94/*---------------------------------------------------------------------------*/
95/*!
96 * \brief Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
97 */
98template <typename DataType>
99class View1DGetterSetter
100: public View1DSetter<DataType>
101{
102 using View1DSetter<DataType>::m_data;
103
104 public:
105
106 using ValueType = DataType;
107 using DataTypeReturnReference = View1DGetterSetter<DataType>;
108
109 public:
110
111 explicit ARCCORE_HOST_DEVICE View1DGetterSetter(SmallSpan<DataType> data)
112 : View1DSetter<DataType>(data)
113 {}
114 DataTypeReturnReference& operator=(const View1DGetterSetter<DataType>& rhs) = delete;
115
116 public:
117
118 ARCCORE_HOST_DEVICE DataViewGetterSetter<DataType> operator[](Int32 index) const
119 {
120 return DataViewGetterSetter<DataType>(m_data.ptrAt(index));
121 }
122
123 public:
124
125 ARCCORE_HOST_DEVICE SmallSpan<DataType> value() const { return m_data; }
126 ARCCORE_HOST_DEVICE operator SmallSpan<DataType>() { return m_data; }
127 ARCCORE_HOST_DEVICE operator SmallSpan<const DataType>() const { return m_data; }
128 ARCCORE_HOST_DEVICE operator Span<DataType>() { return { m_data.data(), m_data.size() }; }
129 ARCCORE_HOST_DEVICE operator Span<const DataType>() const { return { m_data.data(), m_data.size() }; }
130};
131
132/*---------------------------------------------------------------------------*/
133/*---------------------------------------------------------------------------*/
134/*!
135 * \brief Vue en écriture sur une variable scalaire du maillage.
136 */
137template <typename _ItemType, typename _Accessor, typename _IndexerType, bool _HasSimd>
138class ItemVariableScalarOutViewBaseT
139: public VariableViewBase
140{
141 using Accessor = _Accessor;
142
143 public:
144
145 using ItemType = _ItemType;
146 using IndexerType = _IndexerType;
147 using DataType = typename _Accessor::ValueType;
148 using DataTypeReturnReference = DataType&;
149
150 public:
151
152 ItemVariableScalarOutViewBaseT(const ViewBuildInfo& command, IVariable* var, SmallSpan<DataType> v)
153 : VariableViewBase(command, var)
154 , m_values(v.data())
155 , m_size(v.size())
156 {}
157
158 //! Opérateur d'accès vectoriel avec indirection.
159 SimdSetter<DataType> operator[](SimdItemIndexT<ItemType> simd_item) const requires(_HasSimd)
160 {
161 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
162 }
163
164 //! Opérateur d'accès vectoriel sans indirection.
166 {
167 return SimdDirectSetter<DataType>(m_values + simd_item.baseLocalId());
168 }
169
170 //! Opérateur d'accès pour l'entité \a item
171 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
172 {
173 ARCANE_CHECK_AT(item.asInt32(), m_size);
174 return Accessor(this->m_values + item.asInt32());
175 }
176
177 //! Opérateur d'accès pour l'entité \a item
178 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
179 {
180 ARCANE_CHECK_AT(item.asInt32(), m_size);
181 return Accessor(this->m_values + item.asInt32());
182 }
183
184 //! Opérateur d'accès pour l'entité \a item
185 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
186 {
187 ARCANE_CHECK_AT(item.asInt32(), m_size);
188 return Accessor(this->m_values + item.asInt32());
189 }
190
191 //! Positionne la valeur pour l'entité \a item à \a v
192 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
193 {
194 ARCANE_CHECK_AT(item.asInt32(), m_size);
195 this->m_values[item.asInt32()] = v;
196 }
197
198 private:
199
200 DataType* m_values;
201 Int32 m_size;
202};
203
204/*---------------------------------------------------------------------------*/
205/*---------------------------------------------------------------------------*/
206/*!
207 * \brief Vue en écriture sur une variable scalaire du maillage.
208 */
209template <typename _ItemType, typename _Accessor>
210class ItemVariableScalarOutViewT
211: public VariableViewBase
212{
213 public:
214
215 using DataType = typename _Accessor::ValueType;
216 using Accessor = _Accessor;
217 using ItemType = _ItemType;
218 using IndexerType = typename ItemLocalIdTraitsT<_ItemType>::LocalIdType;
219 using DataTypeReturnReference = DataType&;
220
221 public:
222
223 ItemVariableScalarOutViewT(const ViewBuildInfo& command, IVariable* var, SmallSpan<DataType> v)
224 : VariableViewBase(command, var)
225 , m_values(v.data())
226 , m_size(v.size())
227 {}
228
229 //! Opérateur d'accès vectoriel avec indirection.
231 {
232 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
233 }
234
235 //! Opérateur d'accès vectoriel sans indirection.
237 {
238 return SimdDirectSetter<DataType>(m_values + simd_item.baseLocalId());
239 }
240
241 //! Opérateur d'accès pour l'entité \a item
242 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
243 {
244 ARCANE_CHECK_AT(item.asInt32(), m_size);
245 return Accessor(this->m_values + item.asInt32());
246 }
247
248 //! Opérateur d'accès pour l'entité \a item
249 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
250 {
251 ARCANE_CHECK_AT(item.asInt32(), m_size);
252 return Accessor(this->m_values + item.asInt32());
253 }
254
255 //! Opérateur d'accès pour l'entité \a item
256 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
257 {
258 ARCANE_CHECK_AT(item.asInt32(), m_size);
259 return Accessor(this->m_values + item.asInt32());
260 }
261
262 //! Positionne la valeur pour l'entité \a item à \a v
263 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
264 {
265 ARCANE_CHECK_AT(item.asInt32(), m_size);
266 this->m_values[item.asInt32()] = v;
267 }
268
269 private:
270
271 DataType* m_values;
272 Int32 m_size;
273};
274
275/*---------------------------------------------------------------------------*/
276/*---------------------------------------------------------------------------*/
277/*!
278 * \brief Vue en écriture sur une variable partielle scalaire du maillage.
279 */
280template <typename _ItemType, typename _Accessor>
281class ItemPartialVariableScalarOutViewT
282: public VariableViewBase
283{
284 public:
285
286 using DataType = typename _Accessor::ValueType;
287 using Accessor = _Accessor;
288 using ItemType = _ItemType;
289 using IndexerType = ItemEnumeratorIndexT<_ItemType>;
290 using DataTypeReturnReference = DataType&;
291 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
292
293 public:
294
295 ItemPartialVariableScalarOutViewT(const ViewBuildInfo& command, IVariable* var,
297 : VariableViewBase(command, var)
298 , m_values(v.data())
299 , m_size(v.size())
300 , m_table_view(table_view)
301 {}
302
303 //! Opérateur d'accès pour l'entité \a item
304 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
305 {
306 ARCANE_CHECK_AT(item.asInt32(), m_size);
307 return Accessor(this->m_values + item.asInt32());
308 }
309
310 //! Opérateur d'accès pour l'entité \a item
311 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
312 {
313 ARCANE_CHECK_AT(item.asInt32(), m_size);
314 return Accessor(this->m_values + item.asInt32());
315 }
316
317 //! Opérateur d'accès pour l'entité \a item
318 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
319 {
320 ARCANE_CHECK_AT(item.asInt32(), m_size);
321 return Accessor(this->m_values + item.asInt32());
322 }
323
324 //! Positionne la valeur pour l'entité \a item à \a v
325 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
326 {
327 ARCANE_CHECK_AT(item.asInt32(), m_size);
328 this->m_values[item.asInt32()] = v;
329 }
330
331 public:
332
333 //! Opérateur d'accès pour l'entité de numéro local \a lid
334 ARCCORE_HOST_DEVICE Accessor operator[](ItemLocalIdType lid) const
335 {
336 Int32 index = _toIndex(lid);
337 ARCANE_CHECK_AT(index, m_size);
338 return Accessor(m_values + index);
339 }
340
341 //! Opérateur d'accès pour l'entité de numéro local \a lid
342 ARCCORE_HOST_DEVICE Accessor operator()(ItemLocalIdType lid) const
343 {
344 Int32 index = _toIndex(lid);
345 ARCANE_CHECK_AT(index, m_size);
346 return Accessor(m_values + index);
347 }
348
349 //! Opérateur d'accès pour l'entité de numéro local \a lid
350 ARCCORE_HOST_DEVICE Accessor value(ItemLocalIdType lid) const
351 {
352 Int32 index = _toIndex(lid);
353 ARCANE_CHECK_AT(index, m_size);
354 return Accessor(m_values + index);
355 }
356
357 //! Positionne la valeur pour l'entité de numéro local \a lid à \a v
358 ARCCORE_HOST_DEVICE void setValue(ItemLocalIdType lid, const DataType& v) const
359 {
360 Int32 index = _toIndex(lid);
361 ARCANE_CHECK_AT(index, m_size);
362 this->m_values[index] = v;
363 }
364
365 private:
366
367 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
368 {
369 return m_table_view[lid];
370 }
371
372 private:
373
374 DataType* m_values;
375 Int32 m_size;
376 GroupIndexTableView m_table_view;
377};
378
379/*---------------------------------------------------------------------------*/
380/*---------------------------------------------------------------------------*/
381
382/*---------------------------------------------------------------------------*/
383/*---------------------------------------------------------------------------*/
384/*!
385 * \brief Vue en lecture sur une variable scalaire du maillage.
386 */
387template <typename _ItemType, typename _DataType>
388class ItemVariableScalarInViewT
389: public VariableViewBase
390{
391 public:
392
393 using ItemType = _ItemType;
394 using DataType = _DataType;
395 using IndexerType = typename ItemLocalIdTraitsT<_ItemType>::LocalIdType;
396
397 public:
398
399 ItemVariableScalarInViewT(const ViewBuildInfo& command, IVariable* var, SmallSpan<const DataType> v)
400 : VariableViewBase(command, var)
401 , m_values(v)
402 {
403 }
404
405 public:
406
407 //! Opérateur d'accès vectoriel avec indirection.
408 typename SimdTypeTraits<DataType>::SimdType
410 {
411 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
412 return SimdType(m_values.data(), simd_item.simdLocalIds());
413 }
414
415 //! Opérateur d'accès vectoriel avec indirection.
416 typename SimdTypeTraits<DataType>::SimdType
418 {
419 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
420 return SimdType(m_values.data() + simd_item.baseLocalId());
421 }
422
423 //! Opérateur d'accès pour l'entité \a item
424 ARCCORE_HOST_DEVICE const DataType& operator[](IndexerType item) const
425 {
426 return this->m_values[item.asInt32()];
427 }
428
429 //! Opérateur d'accès pour l'entité \a item
430 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item) const
431 {
432 return this->m_values[item.asInt32()];
433 }
434
435 //! Opérateur d'accès pour l'entité \a item
436 ARCCORE_HOST_DEVICE const DataType& value(IndexerType item) const
437 {
438 return this->m_values[item.asInt32()];
439 }
440
441 private:
442
444};
445
446/*---------------------------------------------------------------------------*/
447/*---------------------------------------------------------------------------*/
448/*!
449 * \brief Vue en lecture sur une variable partielle scalaire du maillage.
450 */
451template <typename _ItemType, typename _DataType>
452class ItemPartialVariableScalarInViewT
453: public VariableViewBase
454{
455 public:
456
457 using ItemType = _ItemType;
458 using DataType = _DataType;
459 using IndexerType = ItemEnumeratorIndexT<_ItemType>;
460 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
461
462 public:
463
464 ItemPartialVariableScalarInViewT(const ViewBuildInfo& command, IVariable* var,
466 : VariableViewBase(command, var)
467 , m_values(v)
468 , m_table_view(table_view)
469 {}
470
471 public:
472
473 //! Opérateur d'accès pour l'entité \a item
474 ARCCORE_HOST_DEVICE const DataType& operator[](IndexerType item) const
475 {
476 return m_values[item.asInt32()];
477 }
478
479 //! Opérateur d'accès pour l'entité \a item
480 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item) const
481 {
482 return m_values[item.asInt32()];
483 }
484
485 //! Opérateur d'accès pour l'entité \a item
486 ARCCORE_HOST_DEVICE const DataType& value(IndexerType item) const
487 {
488 return m_values[item.asInt32()];
489 }
490
491 //! Opérateur d'accès pour l'entité \a item
492 ARCCORE_HOST_DEVICE const DataType& operator[](ItemLocalIdType lid) const
493 {
494 return m_values[_toIndex(lid)];
495 }
496
497 //! Opérateur d'accès pour l'entité \a item
498 ARCCORE_HOST_DEVICE const DataType& operator()(ItemLocalIdType lid) const
499 {
500 return m_values[_toIndex(lid)];
501 }
502
503 //! Opérateur d'accès pour l'entité \a item
504 ARCCORE_HOST_DEVICE const DataType& value(ItemLocalIdType lid) const
505 {
506 return m_values[_toIndex(lid)];
507 }
508
509 private:
510
511 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
512 {
513 return m_table_view[lid];
514 }
515
516 private:
517
519 GroupIndexTableView m_table_view;
520};
521
522/*---------------------------------------------------------------------------*/
523/*---------------------------------------------------------------------------*/
524
525/*---------------------------------------------------------------------------*/
526/*---------------------------------------------------------------------------*/
527/*!
528 * \brief Vue en lecture sur une variable partielle tableau du maillage.
529 */
530template <typename _ItemType, typename _DataType>
531class ItemPartialVariableArrayInViewT
532: public VariableViewBase
533{
534 public:
535
536 using ItemType = _ItemType;
537 using DataType = _DataType;
538 using IndexerType = ItemEnumeratorIndexT<_ItemType>;
539 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
540
541 public:
542
543 ItemPartialVariableArrayInViewT(const ViewBuildInfo& command, IVariable* var,
545 : VariableViewBase(command, var)
546 , m_values(v)
547 , m_table_view(table_view)
548 {}
549
550 //! Opérateur d'accès pour l'entité \a item
551 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](IndexerType i) const
552 {
553 return this->m_values[i.asInt32()];
554 }
555
556 //! Opérateur d'accès pour l'entité \a item
557 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](ItemLocalIdType lid) const
558 {
559 return m_values[_toIndex(lid)];
560 }
561
562 //! Opérateur d'accès pour la \a i-ème valeur de l'entité \a item
563 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item, Int32 i) const
564 {
565 return m_values[item.asInt32()][i];
566 }
567
568 //! Opérateur d'accès pour la \a i-ème valeur de l'entité \a item
569 ARCCORE_HOST_DEVICE const DataType& operator()(ItemLocalIdType lid, Int32 i) const
570 {
571 return m_values[_toIndex(lid)][i];
572 }
573
574 //! Opérateur d'accès pour l'entité \a item
575 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> value(IndexerType i) const
576 {
577 return m_values[i.asInt32()];
578 }
579
580 //! Opérateur d'accès pour l'entité \a item
581 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> value(ItemLocalIdType lid) const
582 {
583 return m_values[_toIndex(lid)];
584 }
585
586 protected:
587
588 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
589 {
590 return m_table_view[lid];
591 }
592
593 private:
594
596 GroupIndexTableView m_table_view;
597};
598
599/*---------------------------------------------------------------------------*/
600/*---------------------------------------------------------------------------*/
601/*!
602 * \brief Vue en lecture sur une variable tableau du maillage.
603 */
604template <typename _ItemType, typename _DataType>
605class ItemVariableArrayInViewT
606: public VariableViewBase
607{
608 private:
609
610 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
611
612 public:
613
614 using DataType = _DataType;
615
616 public:
617
618 ItemVariableArrayInViewT(const ViewBuildInfo& command, IVariable* var, SmallSpan2<const DataType> v)
619 : VariableViewBase(command, var)
620 , m_values(v)
621 {}
622
623 public:
624
625 //! Opérateur d'accès pour l'entité \a item
626 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](IndexerType i) const
627 {
628 return this->m_values[i.asInt32()];
629 }
630
631 //! Opérateur d'accès pour la \a i-ème valeur de l'entité \a item
632 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item, Int32 i) const
633 {
634 return this->m_values[item.asInt32()][i];
635 }
636
637 //! Opérateur d'accès pour l'entité \a item
638 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> value(IndexerType i) const
639 {
640 return this->m_values[i.asInt32()];
641 }
642
643 private:
644
646};
647
648/*---------------------------------------------------------------------------*/
649/*---------------------------------------------------------------------------*/
650
651/*---------------------------------------------------------------------------*/
652/*---------------------------------------------------------------------------*/
653/*!
654 * \brief Vue en écriture sur une variable tableau du maillage.
655 */
656template <typename _ItemType, typename _Accessor, typename _Indexer>
657class ItemVariableArrayOutViewBaseT
658: public VariableViewBase
659{
660 private:
661
662 using ItemType = _ItemType;
663 using Accessor = _Accessor;
664 using IndexerType = _Indexer;
665 using DataType = typename Accessor::ValueType;
666 using DataTypeReturnType = typename Accessor::DataTypeReturnReference;
667
668 public:
669
670 ItemVariableArrayOutViewBaseT(const ViewBuildInfo& command, IVariable* var, SmallSpan2<DataType> v)
671 : VariableViewBase(command, var)
672 , m_values(v)
673 {}
674
675 //! Opérateur d'accès pour l'entité \a item
676 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
677 {
678 return DataTypeReturnType(this->m_values[item.asInt32()]);
679 }
680
681 //! Opérateur d'accès pour la \a i-ème valeur de l'entité \a item
682 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
683 {
684 return this->m_values[item.asInt32()][i];
685 }
686
687 //! Opérateur d'accès pour l'entité \a item
688 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(IndexerType item) const
689 {
690 return DataTypeReturnType(this->m_values[item.asInt32()]);
691 }
692
693 private:
694
695 SmallSpan2<DataType> m_values;
696};
697
698/*---------------------------------------------------------------------------*/
699/*---------------------------------------------------------------------------*/
700/*!
701 * \brief Vue en écriture sur une variable tableau du maillage.
702 */
703template <typename _ItemType, typename _Accessor>
704class ItemVariableArrayOutViewT
705: public VariableViewBase
706{
707 public:
708
709 using ItemType = _ItemType;
710 using Accessor = _Accessor;
711 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
712 using DataType = typename Accessor::ValueType;
713 using DataTypeReturnType = typename Accessor::DataTypeReturnReference;
714
715 public:
716
717 ItemVariableArrayOutViewT(const ViewBuildInfo& command, IVariable* var, SmallSpan2<DataType> v)
718 : VariableViewBase(command, var)
719 , m_values(v)
720 {}
721
722 //! Opérateur d'accès pour l'entité \a item
723 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
724 {
725 return DataTypeReturnType(this->m_values[item.asInt32()]);
726 }
727
728 //! Opérateur d'accès pour la \a i-ème valeur de l'entité \a item
729 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
730 {
731 return this->m_values[item.asInt32()][i];
732 }
733
734 //! Opérateur d'accès pour l'entité \a item
735 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(IndexerType item) const
736 {
737 return DataTypeReturnType(this->m_values[item.asInt32()]);
738 }
739
740 private:
741
742 SmallSpan2<DataType> m_values;
743};
744
745/*---------------------------------------------------------------------------*/
746/*---------------------------------------------------------------------------*/
747/*!
748 * \brief Vue en écriture sur une variable partielle tableau du maillage.
749 */
750template <typename _ItemType, typename _Accessor>
751class ItemPartialVariableArrayOutViewT
752: public VariableViewBase
753{
754 public:
755
756 using ItemType = _ItemType;
757 using Accessor = _Accessor;
758 using IndexerType = ItemEnumeratorIndexT<_ItemType>;
759 using DataType = typename Accessor::ValueType;
760 using DataTypeReturnType = typename Accessor::DataTypeReturnReference;
761 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
762
763 public:
764
765 ItemPartialVariableArrayOutViewT(const ViewBuildInfo& command, IVariable* var,
767 : VariableViewBase(command, var)
768 , m_values(v)
769 , m_table_view(table_view)
770 {}
771
772 public:
773
774 //! Opérateur d'accès pour l'entité \a item
775 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
776 {
777 return DataTypeReturnType(m_values[item.asInt32()]);
778 }
779
780 //! Opérateur d'accès pour la \a i-ème valeur de l'entité \a item
781 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
782 {
783 return m_values[item.asInt32()][i];
784 }
785
786 //! Opérateur d'accès pour l'entité \a item
787 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(IndexerType item) const
788 {
789 return DataTypeReturnType(m_values[item.asInt32()]);
790 }
791
792 public:
793
794 //! Opérateur d'accès pour l'entité de numéro local \a lid
795 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](ItemLocalIdType lid) const
796 {
797 return DataTypeReturnType(m_values[_toIndex(lid)]);
798 }
799
800 //! Opérateur d'accès pour l'entité de numéro local \a lid
801 ARCCORE_HOST_DEVICE DataType& operator()(ItemLocalIdType lid, Int32 i) const
802 {
803 return m_values[_toIndex(lid)][i];
804 }
805
806 //! Opérateur d'accès pour la \a i-ème valeur de l'entité \a item
807 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(ItemLocalIdType lid) const
808 {
809 return DataTypeReturnType(m_values[_toIndex(lid)]);
810 }
811
812 private:
813
814 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
815 {
816 return m_table_view[lid];
817 }
818
819 private:
820
821 SmallSpan2<DataType> m_values;
822 GroupIndexTableView m_table_view;
823};
824
825/*---------------------------------------------------------------------------*/
826/*---------------------------------------------------------------------------*/
827/*!
828 * \brief Vue en écriture sur une variable scalaire de type 'RealN' du maillage.
829 *
830 * Cette classe spécialise les vues modifiable pour les réels 'Real2', 'Real3',
831 * 'Real2x2' et 'Real3x3'. La spécialisation s'assure qu'on ne puisse pas
832 * modifier uniquement une composante de ces vecteurs de réels. Par exemple:
833 *
834 * \code
835 * VariableNodeReal3View force_view = ...;
836 * Node node = ...;
837 *
838 * // OK:
839 * force_view[node] = Real3(x,y,z);
840 *
841 * // Interdit:
842 * // force_view[node].x = ...;
843 *
844 * \endcode
845 */
846template <typename _ItemType, typename _Accessor>
848: public VariableViewBase
849{
850 public:
851
852 using ItemType = _ItemType;
853 using Accessor = _Accessor;
854 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
855 using DataType = typename _Accessor::ValueType;
856 using DataTypeReturnReference = DataType&;
857
858 public:
859
860 //! Construit la vue
862 : VariableViewBase(command, var)
863 , m_values(v.data())
864 , m_size(v.size())
865 {}
866
867 //! Opérateur d'accès vectoriel avec indirection.
869 {
870 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
871 }
872
873 //! Opérateur d'accès vectoriel avec indirection.
875 {
876 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
877 }
878
879 //! Opérateur d'accès vectoriel sans indirection.
881 {
882 return SimdDirectSetter<DataType>(m_values + simd_item.baseLocalId());
883 }
884
885 //! Opérateur d'accès vectoriel sans indirection.
887 {
888 return SimdDirectSetter<DataType>(m_values + simd_item.baseLocalId());
889 }
890
891 //! Opérateur d'accès pour l'entité \a item
892 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
893 {
894 ARCANE_CHECK_AT(item.asInt32(), m_size);
895 return Accessor(m_values + item.asInt32());
896 }
897
898 //! Opérateur d'accès pour l'entité \a item
899 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
900 {
901 ARCANE_CHECK_AT(item.asInt32(), m_size);
902 return Accessor(m_values + item.asInt32());
903 }
904
905 //! Opérateur d'accès pour l'entité \a item
906 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
907 {
908 ARCANE_CHECK_AT(item.asInt32(), m_size);
909 return Accessor(m_values + item.asInt32());
910 }
911
912 //! Positionne la valeur pour l'entité \a item à \a v
913 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
914 {
915 ARCANE_CHECK_AT(item.asInt32(), m_size);
916 this->m_values[item.asInt32()] = v;
917 }
918
919 private:
920
921 DataType* m_values;
922 Int32 m_size;
923};
924
925/*---------------------------------------------------------------------------*/
926/*---------------------------------------------------------------------------*/
927
928template <typename _ItemType, typename _Accessor>
930: public VariableViewBase
931{
932 public:
933
934 using ItemType = _ItemType;
935 using Accessor = _Accessor;
936 using IndexerType = ItemEnumeratorIndexT<_ItemType>;
937 using DataType = typename _Accessor::ValueType;
938 using DataTypeReturnReference = DataType&;
939 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
940
941 public:
942
943 //! Construit la vue
946 : VariableViewBase(command, var)
947 , m_values(v.data())
948 , m_size(v.size())
949 , m_table_view(table_view)
950 {}
951
952 public:
953
954 //! Opérateur d'accès pour l'entité \a item
955 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
956 {
957 ARCANE_CHECK_AT(item.asInt32(), m_size);
958 return Accessor(this->m_values + item.asInt32());
959 }
960
961 //! Opérateur d'accès pour l'entité \a item
962 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
963 {
964 ARCANE_CHECK_AT(item.asInt32(), m_size);
965 return Accessor(this->m_values + item.asInt32());
966 }
967
968 //! Opérateur d'accès pour l'entité \a item
969 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
970 {
971 ARCANE_CHECK_AT(item.asInt32(), m_size);
972 return Accessor(this->m_values + item.asInt32());
973 }
974
975 //! Positionne la valeur pour l'entité \a item à \a v
976 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
977 {
978 ARCANE_CHECK_AT(item.asInt32(), m_size);
979 this->m_values[item.asInt32()] = v;
980 }
981
982 public:
983
984 //! Opérateur d'accès pour l'entité \a item
985 ARCCORE_HOST_DEVICE Accessor operator[](ItemLocalIdType lid) const
986 {
987 Int32 index = _toIndex(lid);
988 ARCANE_CHECK_AT(index, m_size);
989 return Accessor(m_values + index);
990 }
991
992 //! Opérateur d'accès pour l'entité \a item
993 ARCCORE_HOST_DEVICE Accessor operator()(ItemLocalIdType lid) const
994 {
995 Int32 index = _toIndex(lid);
996 ARCANE_CHECK_AT(index, m_size);
997 return Accessor(m_values + index);
998 }
999
1000 //! Opérateur d'accès pour l'entité \a item
1001 ARCCORE_HOST_DEVICE Accessor value(ItemLocalIdType lid) const
1002 {
1003 Int32 index = _toIndex(lid);
1004 ARCANE_CHECK_AT(index, m_size);
1005 return Accessor(m_values + index);
1006 }
1007
1008 //! Positionne la valeur pour l'entité \a item à \a v
1009 ARCCORE_HOST_DEVICE void setValue(ItemLocalIdType lid, const DataType& v) const
1010 {
1011 Int32 index = _toIndex(lid);
1012 ARCANE_CHECK_AT(index, m_size);
1013 m_values[index] = v;
1014 }
1015
1016 private:
1017
1018 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
1019 {
1020 return m_table_view[lid];
1021 }
1022
1023 private:
1024
1025 DataType* m_values = nullptr;
1026 Int32 m_size = 0;
1027 GroupIndexTableView m_table_view;
1028};
1029
1030/*---------------------------------------------------------------------------*/
1031/*---------------------------------------------------------------------------*/
1032
1033/*---------------------------------------------------------------------------*/
1034/*---------------------------------------------------------------------------*/
1035/*!
1036 * \brief Vue en écriture.
1037 */
1038template <typename DataType> auto
1040{
1041 using Accessor = DataViewSetter<DataType>;
1042 return ItemVariableScalarOutViewT<Item, Accessor>(command, var.variable(), var.asArray());
1043}
1044
1045/*!
1046 * \brief Vue en écriture.
1047 */
1048template <typename ItemType, typename DataType> auto
1050{
1051 using Accessor = DataViewSetter<DataType>;
1052 return ItemVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1053}
1054
1055/*!
1056 * \brief Vue en écriture.
1057 */
1058template <typename ItemType, typename DataType> auto
1060{
1061 using Accessor = DataViewSetter<DataType>;
1063 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1064}
1065
1066/*!
1067 * \brief Vue en écriture.
1068 */
1069template <typename ItemType> auto
1071{
1072 using Accessor = DataViewSetter<Real3>;
1073 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1074}
1075
1076/*!
1077 * \brief Vue en écriture.
1078 */
1079template <typename ItemType> auto
1081{
1082 using Accessor = DataViewSetter<Real3>;
1084 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1085}
1086
1087/*!
1088 * \brief Vue en écriture.
1089 */
1090template <typename ItemType> auto
1092{
1093 using Accessor = DataViewSetter<Real2>;
1094 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1095}
1096
1097/*!
1098 * \brief Vue en écriture.
1099 */
1100template <typename ItemType> auto
1102{
1103 using Accessor = DataViewSetter<Real2>;
1105 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1106}
1107
1108/*!
1109 * \brief Vue en écriture.
1110 */
1111template <typename ItemType, typename DataType> auto
1113{
1114 using Accessor = View1DSetter<DataType>;
1115 return ItemVariableArrayOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1116}
1117
1118/*!
1119 * \brief Vue en écriture.
1120 */
1121template <typename ItemType, typename DataType> auto
1123{
1124 using Accessor = View1DSetter<DataType>;
1126 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1127}
1128
1129/*---------------------------------------------------------------------------*/
1130/*---------------------------------------------------------------------------*/
1131/*!
1132 * \brief Vue en lecture/écriture.
1133 */
1134template <typename DataType> auto
1136{
1137 using Accessor = DataViewGetterSetter<DataType>;
1138 return ItemVariableScalarOutViewT<Item, Accessor>(command, var.variable(), var.asArray());
1139}
1140
1141/*!
1142 * \brief Vue en lecture/écriture.
1143 */
1144template <typename ItemType, typename DataType> auto
1146{
1147 using Accessor = DataViewGetterSetter<DataType>;
1148 return ItemVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1149}
1150
1151/*!
1152 * \brief Vue en lecture/écriture.
1153 */
1154template <typename ItemType, typename DataType> auto
1156{
1157 using Accessor = DataViewGetterSetter<DataType>;
1158 return ItemPartialVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1159}
1160
1161/*!
1162 * \brief Vue en lecture/écriture.
1163 */
1164template <typename ItemType> auto
1166{
1167 using Accessor = DataViewGetterSetter<Real3>;
1168 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1169}
1170
1171/*!
1172 * \brief Vue en lecture/écriture.
1173 */
1174template <typename ItemType> auto
1176{
1177 using Accessor = DataViewGetterSetter<Real3>;
1179 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1180}
1181
1182/*!
1183 * \brief Vue en lecture/écriture.
1184 */
1185template <typename ItemType> auto
1187{
1188 using Accessor = DataViewGetterSetter<Real2>;
1189 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1190}
1191
1192/*!
1193 * \brief Vue en lecture/écriture.
1194 */
1195template <typename ItemType> auto
1197{
1198 using Accessor = DataViewGetterSetter<Real2>;
1200 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1201}
1202
1203/*!
1204 * \brief Vue en lecture/écriture.
1205 */
1206template <typename ItemType, typename DataType> auto
1208{
1209 using Accessor = View1DGetterSetter<DataType>;
1210 return ItemVariableArrayOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1211}
1212
1213/*!
1214 * \brief Vue en lecture/écriture.
1215 */
1216template <typename ItemType, typename DataType> auto
1218{
1219 using Accessor = View1DGetterSetter<DataType>;
1221 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1222}
1223
1224/*---------------------------------------------------------------------------*/
1225/*---------------------------------------------------------------------------*/
1226/*!
1227 * \brief Vue en lecture.
1228 */
1229template <typename ItemType, typename DataType> auto
1231{
1232 return ItemPartialVariableScalarInViewT<ItemType, DataType>(command, var.variable(), var.asArray(), var.tableView());
1233}
1234
1235/*!
1236 * \brief Vue en lecture.
1237 */
1238template <typename ItemType, typename DataType> auto
1240{
1241 return ItemVariableScalarInViewT<ItemType, DataType>(command, var.variable(), var.asArray());
1242}
1243
1244/*!
1245 * \brief Vue en lecture.
1246 */
1247template <typename DataType> auto
1249{
1250 return ItemVariableScalarInViewT<Item, DataType>(command, var.variable(), var.asArray());
1251}
1252
1253/*!
1254 * \brief Vue en lecture.
1255 */
1256template <typename ItemType, typename DataType> auto
1258{
1259 return ItemPartialVariableArrayInViewT<ItemType, DataType>(command, var.variable(), var.asArray(), var.tableView());
1260}
1261
1262/*!
1263 * \brief Vue en lecture.
1264 */
1265template <typename ItemType, typename DataType> auto
1267{
1268 return ItemVariableArrayInViewT<ItemType, DataType>(command, var.variable(), var.asArray());
1269}
1270
1271/*---------------------------------------------------------------------------*/
1272/*---------------------------------------------------------------------------*/
1273
1274typedef ItemVariableScalarInViewT<Node, Byte> VariableNodeByteInView;
1275typedef ItemVariableScalarInViewT<Edge, Byte> VariableEdgeByteInView;
1276typedef ItemVariableScalarInViewT<Face, Byte> VariableFaceByteInView;
1277typedef ItemVariableScalarInViewT<Cell, Byte> VariableCellByteInView;
1278typedef ItemVariableScalarInViewT<Particle, Byte> VariableParticleByteInView;
1279typedef ItemVariableScalarInViewT<DoF, Byte> VariableDoFByteInView;
1280
1281typedef ItemVariableScalarInViewT<Node, Int16> VariableNodeInt16InView;
1282typedef ItemVariableScalarInViewT<Edge, Int16> VariableEdgeInt16InView;
1283typedef ItemVariableScalarInViewT<Face, Int16> VariableFaceInt16InView;
1284typedef ItemVariableScalarInViewT<Cell, Int16> VariableCellInt16InView;
1285typedef ItemVariableScalarInViewT<Particle, Int16> VariableParticleInt16InView;
1286typedef ItemVariableScalarInViewT<DoF, Int16> VariableDoFInt16InView;
1287
1288typedef ItemVariableScalarInViewT<Node, Int32> VariableNodeInt32InView;
1289typedef ItemVariableScalarInViewT<Edge, Int32> VariableEdgeInt32InView;
1290typedef ItemVariableScalarInViewT<Face, Int32> VariableFaceInt32InView;
1291typedef ItemVariableScalarInViewT<Cell, Int32> VariableCellInt32InView;
1292typedef ItemVariableScalarInViewT<Particle, Int32> VariableParticleInt32InView;
1293typedef ItemVariableScalarInViewT<DoF, Int32> VariableDoFInt32InView;
1294
1295typedef ItemVariableScalarInViewT<Node, Int64> VariableNodeInt64InView;
1296typedef ItemVariableScalarInViewT<Edge, Int64> VariableEdgeInt64InView;
1297typedef ItemVariableScalarInViewT<Face, Int64> VariableFaceInt64InView;
1298typedef ItemVariableScalarInViewT<Cell, Int64> VariableCellInt64InView;
1299typedef ItemVariableScalarInViewT<Particle, Int64> VariableParticleInt64InView;
1300typedef ItemVariableScalarInViewT<DoF, Int64> VariableDoFInt64InView;
1301
1302typedef ItemVariableScalarInViewT<Node, Real> VariableNodeRealInView;
1303typedef ItemVariableScalarInViewT<Edge, Real> VariableEdgeRealInView;
1304typedef ItemVariableScalarInViewT<Face, Real> VariableFaceRealInView;
1305typedef ItemVariableScalarInViewT<Cell, Real> VariableCellRealInView;
1306typedef ItemVariableScalarInViewT<Particle, Real> VariableParticleRealInView;
1307typedef ItemVariableScalarInViewT<DoF, Real> VariableDoFRealInView;
1308
1309typedef ItemVariableScalarInViewT<Node, Real2> VariableNodeReal2InView;
1310typedef ItemVariableScalarInViewT<Edge, Real2> VariableEdgeReal2InView;
1311typedef ItemVariableScalarInViewT<Face, Real2> VariableFaceReal2InView;
1312typedef ItemVariableScalarInViewT<Cell, Real2> VariableCellReal2InView;
1313typedef ItemVariableScalarInViewT<Particle, Real2> VariableParticleReal2InView;
1314typedef ItemVariableScalarInViewT<DoF, Real2> VariableDoFReal2InView;
1315
1316typedef ItemVariableScalarInViewT<Node, Real3> VariableNodeReal3InView;
1317typedef ItemVariableScalarInViewT<Edge, Real3> VariableEdgeReal3InView;
1318typedef ItemVariableScalarInViewT<Face, Real3> VariableFaceReal3InView;
1319typedef ItemVariableScalarInViewT<Cell, Real3> VariableCellReal3InView;
1320typedef ItemVariableScalarInViewT<Particle, Real3> VariableParticleReal3InView;
1321typedef ItemVariableScalarInViewT<DoF, Real3> VariableDoFReal3InView;
1322
1323/*---------------------------------------------------------------------------*/
1324/*---------------------------------------------------------------------------*/
1325
1326typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Byte>> VariableNodeByteOutView;
1327typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Byte>> VariableEdgeByteOutView;
1328typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Byte>> VariableFaceByteOutView;
1329typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Byte>> VariableCellByteOutView;
1330typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Byte>> VariableParticleByteOutView;
1331typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Byte>> VariableDoFByteOutView;
1332
1333typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Int16>> VariableNodeInt16OutView;
1334typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Int16>> VariableEdgeInt16OutView;
1335typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Int16>> VariableFaceInt16OutView;
1336typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Int16>> VariableCellInt16OutView;
1337typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Int16>> VariableParticleInt16OutView;
1338typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Int16>> VariableDoFInt16OutView;
1339
1340typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Int32>> VariableNodeInt32OutView;
1341typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Int32>> VariableEdgeInt32OutView;
1342typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Int32>> VariableFaceInt32OutView;
1343typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Int32>> VariableCellInt32OutView;
1344typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Int32>> VariableParticleInt32OutView;
1345typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Int32>> VariableDoFInt32OutView;
1346
1347typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Int64>> VariableNodeInt64OutView;
1348typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Int64>> VariableEdgeInt64OutView;
1349typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Int64>> VariableFaceInt64OutView;
1350typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Int64>> VariableCellInt64OutView;
1351typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Int64>> VariableParticleInt64OutView;
1352typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Int64>> VariableDoFInt64OutView;
1353
1354typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Real>> VariableNodeRealOutView;
1355typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Real>> VariableEdgeRealOutView;
1356typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Real>> VariableFaceRealOutView;
1357typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Real>> VariableCellRealOutView;
1358typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Real>> VariableParticleRealOutView;
1359typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Real>> VariableDoFRealOutView;
1360
1361typedef ItemVariableRealNScalarOutViewT<Node, DataViewSetter<Real2>> VariableNodeReal2OutView;
1362typedef ItemVariableRealNScalarOutViewT<Edge, DataViewSetter<Real2>> VariableEdgeReal2OutView;
1363typedef ItemVariableRealNScalarOutViewT<Face, DataViewSetter<Real2>> VariableFaceReal2OutView;
1364typedef ItemVariableRealNScalarOutViewT<Cell, DataViewSetter<Real2>> VariableCellReal2OutView;
1365typedef ItemVariableRealNScalarOutViewT<Particle, DataViewSetter<Real2>> VariableParticleReal2OutView;
1366typedef ItemVariableRealNScalarOutViewT<DoF, DataViewSetter<Real2>> VariableDoFReal2OutView;
1367
1368typedef ItemVariableRealNScalarOutViewT<Node, DataViewSetter<Real3>> VariableNodeReal3OutView;
1369typedef ItemVariableRealNScalarOutViewT<Edge, DataViewSetter<Real3>> VariableEdgeReal3OutView;
1370typedef ItemVariableRealNScalarOutViewT<Face, DataViewSetter<Real3>> VariableFaceReal3OutView;
1371typedef ItemVariableRealNScalarOutViewT<Cell, DataViewSetter<Real3>> VariableCellReal3OutView;
1372typedef ItemVariableRealNScalarOutViewT<Particle, DataViewSetter<Real3>> VariableParticleReal3OutView;
1373typedef ItemVariableRealNScalarOutViewT<DoF, DataViewSetter<Real3>> VariableDoFReal3OutView;
1374
1375/*---------------------------------------------------------------------------*/
1376/*---------------------------------------------------------------------------*/
1377
1378} // End namespace Arcane::Accelerator
1379
1380/*---------------------------------------------------------------------------*/
1381/*---------------------------------------------------------------------------*/
1382
1383#endif
Déclarations de types sur les entités.
Vue en lecture sur une variable partielle tableau du maillage.
__host__ __device__ const DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
__host__ __device__ const SmallSpan< const DataType > operator[](IndexerType i) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const SmallSpan< const DataType > operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const SmallSpan< const DataType > value(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const DataType & operator()(ItemLocalIdType lid, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
__host__ __device__ const SmallSpan< const DataType > value(IndexerType i) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable partielle tableau du maillage.
__host__ __device__ DataTypeReturnType operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
__host__ __device__ DataTypeReturnType operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ SmallSpan< DataType > value(IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ SmallSpan< DataType > value(ItemLocalIdType lid) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
__host__ __device__ DataType & operator()(ItemLocalIdType lid, Int32 i) const
Opérateur d'accès pour l'entité de numéro local lid.
__host__ __device__ DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
__host__ __device__ void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
__host__ __device__ Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ void setValue(ItemLocalIdType lid, const DataType &v) const
Positionne la valeur pour l'entité item à v.
__host__ __device__ Accessor value(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
__host__ __device__ Accessor operator()(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
__host__ __device__ Accessor operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
ItemPartialVariableRealNScalarOutViewT(const ViewBuildInfo &command, IVariable *var, SmallSpan< DataType > v, GroupIndexTableView table_view)
Construit la vue.
__host__ __device__ Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en lecture sur une variable partielle scalaire du maillage.
__host__ __device__ const DataType & operator()(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const DataType & operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const DataType & value(IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const DataType & value(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const DataType & operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const DataType & operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable partielle scalaire du maillage.
__host__ __device__ Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ void setValue(ItemLocalIdType lid, const DataType &v) const
Positionne la valeur pour l'entité de numéro local lid à v.
__host__ __device__ Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ Accessor value(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
__host__ __device__ Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
__host__ __device__ Accessor operator()(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
__host__ __device__ Accessor operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
Vue en lecture sur une variable tableau du maillage.
__host__ __device__ const SmallSpan< const DataType > operator[](IndexerType i) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const SmallSpan< const DataType > value(IndexerType i) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
__host__ __device__ DataTypeReturnType operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ SmallSpan< DataType > value(IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
Vue en écriture sur une variable tableau du maillage.
__host__ __device__ DataTypeReturnType operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ SmallSpan< DataType > value(IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
Vue en écriture sur une variable scalaire de type 'RealN' du maillage.
ItemVariableRealNScalarOutViewT(const ViewBuildInfo &command, IVariable *var, SmallSpan< DataType > v)
Construit la vue.
SimdDirectSetter< DataType > operator()(SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
__host__ __device__ Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdSetter< DataType > operator()(SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
__host__ __device__ Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
Vue en lecture sur une variable scalaire du maillage.
SimdTypeTraits< DataType >::SimdType operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
__host__ __device__ const DataType & operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ const DataType & operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdTypeTraits< DataType >::SimdType operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
__host__ __device__ const DataType & value(IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
__host__ __device__ Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
__host__ __device__ Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable scalaire du maillage.
__host__ __device__ Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
__host__ __device__ void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
__host__ __device__ Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
Informations pour construire une vue pour les données sur accélérateur.
Représente un index d'une énumération sur une entité ItemType.
typename ItemTraitsT< ItemType >::LocalIdType LocalIdType
Type du localId()
Definition ItemTypes.h:814
GroupIndexTableView tableView() const
Vue sur table d'indirection du groupe.
GroupIndexTableView tableView() const
Vue sur table d'indirection du groupe.
Vue en écriture sur une variable scalaire de type 'RealN' du maillage.
Vue en lecture sur une variable scalaire du maillage.
Vue en écriture sur une variable scalaire du maillage.
Variable scalaire sur un type d'entité du maillage.
Variable scalaire sur un type d'entité du maillage.
Variable scalaire sur un type d'entité du maillage.
Variable tableau sur un type d'entité du maillage.
Variable scalaire sur un type d'entité du maillage.
Objet permettant de positionner les valeurs d'un vecteur SIMD.
Definition SimdItem.h:351
Index vectoriel sans indirection pour un type d'entité
Definition SimdItem.h:188
Index vectoriel avec indirection pour un type d'entité. TODO: stocker les index dans un registre vect...
Definition SimdItem.h:166
const SimdIndexType &ARCANE_RESTRICT simdLocalIds() const
Liste des numéros locaux des entités de l'instance.
Definition SimdItem.h:176
Vue pour un tableau 2D dont la taille est un 'Int32'.
Definition Span2.h:233
Vue d'un tableau d'éléments de type T.
Definition Span.h:673
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Definition Span.h:212
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
Definition Span.h:422
Vue d'un tableau d'éléments de type T.
Definition Span.h:513
IVariable * variable() const
Variable associée.
Espace de nom pour l'utilisation des accélérateurs.
auto viewInOut(const ViewBuildInfo &vbi, CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture/écriture pour les variables materiaux scalaire.
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.
std::int32_t Int32
Type entier signé sur 32 bits.