Arcane  v3.15.0.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/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>
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>
100: public View1DSetter<DataType>
101{
102 using View1DSetter<DataType>::m_data;
103
104 public:
105
106 using ValueType = DataType;
108
109 public:
110
111 explicit ARCCORE_HOST_DEVICE View1DGetterSetter(SmallSpan<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>
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
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>
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 ItemTraitsT<_ItemType>::LocalIdType;
219 using DataTypeReturnReference = DataType&;
220
221 public:
222
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>
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
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>
389: public VariableViewBase
390{
391 public:
392
393 using ItemType = _ItemType;
394 using DataType = _DataType;
395 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
396
397 public:
398
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>
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
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>
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
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>
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
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>
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
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>
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
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>
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
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 ItemType, typename DataType> auto
1040{
1041 using Accessor = DataViewSetter<DataType>;
1042 return ItemVariableScalarOutViewT<ItemType, 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>;
1053 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1054}
1055
1056/*!
1057 * \brief Vue en écriture.
1058 */
1059template <typename ItemType> auto
1061{
1062 using Accessor = DataViewSetter<Real3>;
1063 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1064}
1065
1066/*!
1067 * \brief Vue en écriture.
1068 */
1069template <typename ItemType> auto
1071{
1072 using Accessor = DataViewSetter<Real3>;
1074 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1075}
1076
1077/*!
1078 * \brief Vue en écriture.
1079 */
1080template <typename ItemType> auto
1082{
1083 using Accessor = DataViewSetter<Real2>;
1084 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1085}
1086
1087/*!
1088 * \brief Vue en écriture.
1089 */
1090template <typename ItemType> auto
1092{
1093 using Accessor = DataViewSetter<Real2>;
1095 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1096}
1097
1098/*!
1099 * \brief Vue en écriture.
1100 */
1101template <typename ItemType, typename DataType> auto
1103{
1104 using Accessor = View1DSetter<DataType>;
1105 return ItemVariableArrayOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1106}
1107
1108/*!
1109 * \brief Vue en écriture.
1110 */
1111template <typename ItemType, typename DataType> auto
1113{
1114 using Accessor = View1DSetter<DataType>;
1116 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1117}
1118
1119/*---------------------------------------------------------------------------*/
1120/*---------------------------------------------------------------------------*/
1121/*!
1122 * \brief Vue en lecture/écriture.
1123 */
1124template <typename ItemType, typename DataType> auto
1126{
1127 using Accessor = DataViewGetterSetter<DataType>;
1128 return ItemVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1129}
1130
1131/*!
1132 * \brief Vue en lecture/écriture.
1133 */
1134template <typename ItemType, typename DataType> auto
1140
1141/*!
1142 * \brief Vue en lecture/écriture.
1143 */
1144template <typename ItemType> auto
1146{
1147 using Accessor = DataViewGetterSetter<Real3>;
1148 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1149}
1150
1151/*!
1152 * \brief Vue en lecture/écriture.
1153 */
1154template <typename ItemType> auto
1156{
1157 using Accessor = DataViewGetterSetter<Real3>;
1159 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1160}
1161
1162/*!
1163 * \brief Vue en lecture/écriture.
1164 */
1165template <typename ItemType> auto
1167{
1168 using Accessor = DataViewGetterSetter<Real2>;
1169 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1170}
1171
1172/*!
1173 * \brief Vue en lecture/écriture.
1174 */
1175template <typename ItemType> auto
1177{
1178 using Accessor = DataViewGetterSetter<Real2>;
1180 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1181}
1182
1183/*!
1184 * \brief Vue en lecture/écriture.
1185 */
1186template <typename ItemType, typename DataType> auto
1188{
1189 using Accessor = View1DGetterSetter<DataType>;
1190 return ItemVariableArrayOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1191}
1192
1193/*!
1194 * \brief Vue en lecture/écriture.
1195 */
1196template <typename ItemType, typename DataType> auto
1198{
1199 using Accessor = View1DGetterSetter<DataType>;
1201 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1202}
1203
1204/*---------------------------------------------------------------------------*/
1205/*---------------------------------------------------------------------------*/
1206/*!
1207 * \brief Vue en lecture.
1208 */
1209template <typename ItemType, typename DataType> auto
1211{
1212 return ItemPartialVariableScalarInViewT<ItemType, DataType>(command, var.variable(), var.asArray(), var.tableView());
1213}
1214
1215/*!
1216 * \brief Vue en lecture.
1217 */
1218template <typename ItemType, typename DataType> auto
1220{
1221 return ItemVariableScalarInViewT<ItemType, DataType>(command, var.variable(), var.asArray());
1222}
1223
1224/*!
1225 * \brief Vue en lecture.
1226 */
1227template <typename ItemType, typename DataType> auto
1229{
1230 return ItemPartialVariableArrayInViewT<ItemType, DataType>(command, var.variable(), var.asArray(), var.tableView());
1231}
1232
1233/*!
1234 * \brief Vue en lecture.
1235 */
1236template <typename ItemType, typename DataType> auto
1238{
1239 return ItemVariableArrayInViewT<ItemType, DataType>(command, var.variable(), var.asArray());
1240}
1241
1242/*---------------------------------------------------------------------------*/
1243/*---------------------------------------------------------------------------*/
1244
1245typedef ItemVariableScalarInViewT<Node, Byte> VariableNodeByteInView;
1246typedef ItemVariableScalarInViewT<Edge, Byte> VariableEdgeByteInView;
1247typedef ItemVariableScalarInViewT<Face, Byte> VariableFaceByteInView;
1248typedef ItemVariableScalarInViewT<Cell, Byte> VariableCellByteInView;
1249typedef ItemVariableScalarInViewT<Particle, Byte> VariableParticleByteInView;
1250typedef ItemVariableScalarInViewT<DoF, Byte> VariableDoFByteInView;
1251
1252typedef ItemVariableScalarInViewT<Node, Int16> VariableNodeInt16InView;
1253typedef ItemVariableScalarInViewT<Edge, Int16> VariableEdgeInt16InView;
1254typedef ItemVariableScalarInViewT<Face, Int16> VariableFaceInt16InView;
1255typedef ItemVariableScalarInViewT<Cell, Int16> VariableCellInt16InView;
1256typedef ItemVariableScalarInViewT<Particle, Int16> VariableParticleInt16InView;
1257typedef ItemVariableScalarInViewT<DoF, Int16> VariableDoFInt16InView;
1258
1259typedef ItemVariableScalarInViewT<Node, Int32> VariableNodeInt32InView;
1260typedef ItemVariableScalarInViewT<Edge, Int32> VariableEdgeInt32InView;
1261typedef ItemVariableScalarInViewT<Face, Int32> VariableFaceInt32InView;
1262typedef ItemVariableScalarInViewT<Cell, Int32> VariableCellInt32InView;
1263typedef ItemVariableScalarInViewT<Particle, Int32> VariableParticleInt32InView;
1264typedef ItemVariableScalarInViewT<DoF, Int32> VariableDoFInt32InView;
1265
1266typedef ItemVariableScalarInViewT<Node, Int64> VariableNodeInt64InView;
1267typedef ItemVariableScalarInViewT<Edge, Int64> VariableEdgeInt64InView;
1268typedef ItemVariableScalarInViewT<Face, Int64> VariableFaceInt64InView;
1269typedef ItemVariableScalarInViewT<Cell, Int64> VariableCellInt64InView;
1270typedef ItemVariableScalarInViewT<Particle, Int64> VariableParticleInt64InView;
1271typedef ItemVariableScalarInViewT<DoF, Int64> VariableDoFInt64InView;
1272
1273typedef ItemVariableScalarInViewT<Node, Real> VariableNodeRealInView;
1274typedef ItemVariableScalarInViewT<Edge, Real> VariableEdgeRealInView;
1275typedef ItemVariableScalarInViewT<Face, Real> VariableFaceRealInView;
1276typedef ItemVariableScalarInViewT<Cell, Real> VariableCellRealInView;
1277typedef ItemVariableScalarInViewT<Particle, Real> VariableParticleRealInView;
1278typedef ItemVariableScalarInViewT<DoF, Real> VariableDoFRealInView;
1279
1280typedef ItemVariableScalarInViewT<Node, Real2> VariableNodeReal2InView;
1281typedef ItemVariableScalarInViewT<Edge, Real2> VariableEdgeReal2InView;
1282typedef ItemVariableScalarInViewT<Face, Real2> VariableFaceReal2InView;
1283typedef ItemVariableScalarInViewT<Cell, Real2> VariableCellReal2InView;
1284typedef ItemVariableScalarInViewT<Particle, Real2> VariableParticleReal2InView;
1285typedef ItemVariableScalarInViewT<DoF, Real2> VariableDoFReal2InView;
1286
1287typedef ItemVariableScalarInViewT<Node, Real3> VariableNodeReal3InView;
1288typedef ItemVariableScalarInViewT<Edge, Real3> VariableEdgeReal3InView;
1289typedef ItemVariableScalarInViewT<Face, Real3> VariableFaceReal3InView;
1290typedef ItemVariableScalarInViewT<Cell, Real3> VariableCellReal3InView;
1291typedef ItemVariableScalarInViewT<Particle, Real3> VariableParticleReal3InView;
1292typedef ItemVariableScalarInViewT<DoF, Real3> VariableDoFReal3InView;
1293
1294/*---------------------------------------------------------------------------*/
1295/*---------------------------------------------------------------------------*/
1296
1297typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Byte>> VariableNodeByteOutView;
1298typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Byte>> VariableEdgeByteOutView;
1299typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Byte>> VariableFaceByteOutView;
1300typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Byte>> VariableCellByteOutView;
1301typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Byte>> VariableParticleByteOutView;
1302typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Byte>> VariableDoFByteOutView;
1303
1304typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Int16>> VariableNodeInt16OutView;
1305typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Int16>> VariableEdgeInt16OutView;
1306typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Int16>> VariableFaceInt16OutView;
1307typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Int16>> VariableCellInt16OutView;
1308typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Int16>> VariableParticleInt16OutView;
1309typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Int16>> VariableDoFInt16OutView;
1310
1311typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Int32>> VariableNodeInt32OutView;
1312typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Int32>> VariableEdgeInt32OutView;
1313typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Int32>> VariableFaceInt32OutView;
1314typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Int32>> VariableCellInt32OutView;
1315typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Int32>> VariableParticleInt32OutView;
1316typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Int32>> VariableDoFInt32OutView;
1317
1318typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Int64>> VariableNodeInt64OutView;
1319typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Int64>> VariableEdgeInt64OutView;
1320typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Int64>> VariableFaceInt64OutView;
1321typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Int64>> VariableCellInt64OutView;
1322typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Int64>> VariableParticleInt64OutView;
1323typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Int64>> VariableDoFInt64OutView;
1324
1325typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Real>> VariableNodeRealOutView;
1326typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Real>> VariableEdgeRealOutView;
1327typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Real>> VariableFaceRealOutView;
1328typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Real>> VariableCellRealOutView;
1329typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Real>> VariableParticleRealOutView;
1330typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Real>> VariableDoFRealOutView;
1331
1332typedef ItemVariableRealNScalarOutViewT<Node, DataViewSetter<Real2>> VariableNodeReal2OutView;
1333typedef ItemVariableRealNScalarOutViewT<Edge, DataViewSetter<Real2>> VariableEdgeReal2OutView;
1334typedef ItemVariableRealNScalarOutViewT<Face, DataViewSetter<Real2>> VariableFaceReal2OutView;
1335typedef ItemVariableRealNScalarOutViewT<Cell, DataViewSetter<Real2>> VariableCellReal2OutView;
1336typedef ItemVariableRealNScalarOutViewT<Particle, DataViewSetter<Real2>> VariableParticleReal2OutView;
1337typedef ItemVariableRealNScalarOutViewT<DoF, DataViewSetter<Real2>> VariableDoFReal2OutView;
1338
1339typedef ItemVariableRealNScalarOutViewT<Node, DataViewSetter<Real3>> VariableNodeReal3OutView;
1340typedef ItemVariableRealNScalarOutViewT<Edge, DataViewSetter<Real3>> VariableEdgeReal3OutView;
1341typedef ItemVariableRealNScalarOutViewT<Face, DataViewSetter<Real3>> VariableFaceReal3OutView;
1342typedef ItemVariableRealNScalarOutViewT<Cell, DataViewSetter<Real3>> VariableCellReal3OutView;
1343typedef ItemVariableRealNScalarOutViewT<Particle, DataViewSetter<Real3>> VariableParticleReal3OutView;
1344typedef ItemVariableRealNScalarOutViewT<DoF, DataViewSetter<Real3>> VariableDoFReal3OutView;
1345
1346/*---------------------------------------------------------------------------*/
1347/*---------------------------------------------------------------------------*/
1348
1349} // End namespace Arcane::Accelerator
1350
1351/*---------------------------------------------------------------------------*/
1352/*---------------------------------------------------------------------------*/
1353
1354#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(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.