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