Arcane  4.1.15.0
Developer documentation
Loading...
Searching...
No Matches
VariableViews.h
Go to the documentation of this file.
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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-2026 */
9/* */
10/* Variable view management for accelerators. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_VARIABLEVIEWS_H
13#define ARCANE_ACCELERATOR_VARIABLEVIEWS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
20#include "arcane/core/GroupIndexTable.h"
21
22#include "arcane/accelerator/core/ViewBuildInfo.h"
23#include "arcane/accelerator/AcceleratorGlobal.h"
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29// TODO: Make the views ReadWrite for SIMD accessors
30
31namespace Arcane::Accelerator
32{
33template <typename DataType> class View1DGetterSetter;
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
40class ARCANE_ACCELERATOR_EXPORT VariableViewBase
41{
42 public:
43
44 VariableViewBase(const ViewBuildInfo& command, IVariable* var);
45};
46
47/*---------------------------------------------------------------------------*/
48/*---------------------------------------------------------------------------*/
52template <typename DataType>
53class View1DSetter
54{
55 // For accessing m_data;
56 friend class View1DGetterSetter<DataType>;
57
58 public:
59
60 using ValueType = DataType;
61 using DataTypeReturnReference = View1DSetter<DataType>;
62 explicit ARCCORE_HOST_DEVICE View1DSetter(SmallSpan<DataType> data)
63 : m_data(data)
64 {}
65 ARCCORE_HOST_DEVICE DataViewSetter<DataType> operator[](Int32 index) const
66 {
67 return DataViewSetter<DataType>(m_data.ptrAt(index));
68 }
69 ARCCORE_HOST_DEVICE DataViewSetter<DataType> operator()(Int32 index) const
70 {
71 return DataViewSetter<DataType>(m_data.ptrAt(index));
72 }
73 DataTypeReturnReference& operator=(const View1DSetter<DataType>& rhs) = delete;
74
75 public:
76
77 ARCCORE_HOST_DEVICE void copy(SmallSpan<const DataType> rhs)
78 {
79 m_data.copy(rhs);
80 }
81
82 private:
83
85};
86
87/*---------------------------------------------------------------------------*/
88/*---------------------------------------------------------------------------*/
92template <typename DataType>
93class View1DGetterSetter
94: public View1DSetter<DataType>
95{
96 using View1DSetter<DataType>::m_data;
97
98 public:
99
100 using ValueType = DataType;
101 using DataTypeReturnReference = View1DGetterSetter<DataType>;
102
103 public:
104
105 explicit ARCCORE_HOST_DEVICE View1DGetterSetter(SmallSpan<DataType> data)
106 : View1DSetter<DataType>(data)
107 {}
108 DataTypeReturnReference& operator=(const View1DGetterSetter<DataType>& rhs) = delete;
109
110 public:
111
112 ARCCORE_HOST_DEVICE DataViewGetterSetter<DataType> operator[](Int32 index) const
113 {
114 return DataViewGetterSetter<DataType>(m_data.ptrAt(index));
115 }
116
117 public:
118
119 ARCCORE_HOST_DEVICE SmallSpan<DataType> value() const { return m_data; }
120 ARCCORE_HOST_DEVICE operator SmallSpan<DataType>() { return m_data; }
121 ARCCORE_HOST_DEVICE operator SmallSpan<const DataType>() const { return m_data; }
122 ARCCORE_HOST_DEVICE operator Span<DataType>() { return { m_data.data(), m_data.size() }; }
123 ARCCORE_HOST_DEVICE operator Span<const DataType>() const { return { m_data.data(), m_data.size() }; }
124};
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
131template <typename ItemType_, typename Accessor_, typename IndexerType_, bool HasSimd_>
132class ItemVariableScalarOutViewBaseT
133: public VariableViewBase
134{
135 using Accessor = Accessor_;
136
137 public:
138
139 using ItemType = ItemType_;
140 using IndexerType = IndexerType_;
141 using DataType = Accessor_::ValueType;
142 using DataTypeReturnReference = DataType&;
143
144 public:
145
146 ItemVariableScalarOutViewBaseT(const ViewBuildInfo& command, IVariable* var, SmallSpan<DataType> v)
147 : VariableViewBase(command, var)
148 , m_values(v.data())
149 , m_size(v.size())
150 {}
151
153 SimdSetter<DataType> operator[](SimdItemIndexT<ItemType> simd_item) const requires(HasSimd_)
154 {
155 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
156 }
157
160 {
161 return SimdDirectSetter<DataType>(m_values + simd_item.baseLocalId());
162 }
163
165 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
166 {
167 ARCANE_CHECK_AT(item.asInt32(), m_size);
168 return Accessor(this->m_values + item.asInt32());
169 }
170
172 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
173 {
174 ARCANE_CHECK_AT(item.asInt32(), m_size);
175 return Accessor(this->m_values + item.asInt32());
176 }
177
179 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
180 {
181 ARCANE_CHECK_AT(item.asInt32(), m_size);
182 return Accessor(this->m_values + item.asInt32());
183 }
184
186 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
187 {
188 ARCANE_CHECK_AT(item.asInt32(), m_size);
189 this->m_values[item.asInt32()] = v;
190 }
191
192 private:
193
194 DataType* m_values = nullptr;
195 Int32 m_size = 0;
196};
197
198/*---------------------------------------------------------------------------*/
199/*---------------------------------------------------------------------------*/
203template <typename ItemType_, typename Accessor_>
204class ItemVariableScalarOutViewT
205: public VariableViewBase
206{
207 public:
208
209 using DataType = Accessor_::ValueType;
210 using Accessor = Accessor_;
211 using ItemType = ItemType_;
213 using DataTypeReturnReference = DataType&;
214
215 public:
216
217 ItemVariableScalarOutViewT(const ViewBuildInfo& command, IVariable* var, SmallSpan<DataType> v)
218 : VariableViewBase(command, var)
219 , m_values(v.data())
220 , m_size(v.size())
221 {}
222
225 {
226 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
227 }
228
231 {
232 return SimdDirectSetter<DataType>(m_values + simd_item.baseLocalId());
233 }
234
236 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
237 {
238 ARCANE_CHECK_AT(item.asInt32(), m_size);
239 return Accessor(this->m_values + item.asInt32());
240 }
241
243 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
244 {
245 ARCANE_CHECK_AT(item.asInt32(), m_size);
246 return Accessor(this->m_values + item.asInt32());
247 }
248
250 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
251 {
252 ARCANE_CHECK_AT(item.asInt32(), m_size);
253 return Accessor(this->m_values + item.asInt32());
254 }
255
257 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
258 {
259 ARCANE_CHECK_AT(item.asInt32(), m_size);
260 this->m_values[item.asInt32()] = v;
261 }
262
263 private:
264
265 DataType* m_values = nullptr;
266 Int32 m_size = 0;
267};
268
269/*---------------------------------------------------------------------------*/
270/*---------------------------------------------------------------------------*/
274template <typename ItemType_, typename Accessor_>
275class ItemPartialVariableScalarOutViewT
276: public VariableViewBase
277{
278 public:
279
280 using DataType = Accessor_::ValueType;
281 using Accessor = Accessor_;
282 using ItemType = ItemType_;
283 using IndexerType = ItemEnumeratorIndexT<ItemType_>;
284 using DataTypeReturnReference = DataType&;
285 using ItemLocalIdType = ItemTraitsT<ItemType_>::LocalIdType;
286
287 public:
288
289 ItemPartialVariableScalarOutViewT(const ViewBuildInfo& command, IVariable* var,
291 : VariableViewBase(command, var)
292 , m_values(v.data())
293 , m_size(v.size())
294 , m_table_view(table_view)
295 {}
296
298 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
299 {
300 ARCANE_CHECK_AT(item.asInt32(), m_size);
301 return Accessor(this->m_values + item.asInt32());
302 }
303
305 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
306 {
307 ARCANE_CHECK_AT(item.asInt32(), m_size);
308 return Accessor(this->m_values + item.asInt32());
309 }
310
312 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
313 {
314 ARCANE_CHECK_AT(item.asInt32(), m_size);
315 return Accessor(this->m_values + item.asInt32());
316 }
317
319 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
320 {
321 ARCANE_CHECK_AT(item.asInt32(), m_size);
322 this->m_values[item.asInt32()] = v;
323 }
324
325 public:
326
328 ARCCORE_HOST_DEVICE Accessor operator[](ItemLocalIdType lid) const
329 {
330 Int32 index = _toIndex(lid);
331 ARCANE_CHECK_AT(index, m_size);
332 return Accessor(m_values + index);
333 }
334
336 ARCCORE_HOST_DEVICE Accessor operator()(ItemLocalIdType lid) const
337 {
338 Int32 index = _toIndex(lid);
339 ARCANE_CHECK_AT(index, m_size);
340 return Accessor(m_values + index);
341 }
342
344 ARCCORE_HOST_DEVICE Accessor value(ItemLocalIdType lid) const
345 {
346 Int32 index = _toIndex(lid);
347 ARCANE_CHECK_AT(index, m_size);
348 return Accessor(m_values + index);
349 }
350
352 ARCCORE_HOST_DEVICE void setValue(ItemLocalIdType lid, const DataType& v) const
353 {
354 Int32 index = _toIndex(lid);
355 ARCANE_CHECK_AT(index, m_size);
356 this->m_values[index] = v;
357 }
358
359 private:
360
361 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
362 {
363 return m_table_view[lid];
364 }
365
366 private:
367
368 DataType* m_values = nullptr;
369 Int32 m_size = 0;
370 GroupIndexTableView m_table_view;
371};
372
373/*---------------------------------------------------------------------------*/
374/*---------------------------------------------------------------------------*/
378template <typename ItemType_, typename DataType_>
379class ItemVariableScalarInViewT
380: public VariableViewBase
381{
382 public:
383
384 using ItemType = ItemType_;
385 using DataType = DataType_;
387
388 public:
389
390 ItemVariableScalarInViewT(const ViewBuildInfo& command, IVariable* var, SmallSpan<const DataType> v)
391 : VariableViewBase(command, var)
392 , m_values(v)
393 {
394 }
395
396 public:
397
399 typename SimdTypeTraits<DataType>::SimdType
401 {
402 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
403 return SimdType(m_values.data(), simd_item.simdLocalIds());
404 }
405
407 typename SimdTypeTraits<DataType>::SimdType
409 {
410 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
411 return SimdType(m_values.data() + simd_item.baseLocalId());
412 }
413
415 ARCCORE_HOST_DEVICE const DataType& operator[](IndexerType item) const
416 {
417 return this->m_values[item.asInt32()];
418 }
419
421 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item) const
422 {
423 return this->m_values[item.asInt32()];
424 }
425
427 ARCCORE_HOST_DEVICE const DataType& value(IndexerType item) const
428 {
429 return this->m_values[item.asInt32()];
430 }
431
432 private:
433
435};
436
437/*---------------------------------------------------------------------------*/
438/*---------------------------------------------------------------------------*/
442template <typename ItemType_, typename DataType_>
443class ItemPartialVariableScalarInViewT
444: public VariableViewBase
445{
446 public:
447
448 using ItemType = ItemType_;
449 using DataType = DataType_;
450 using IndexerType = ItemEnumeratorIndexT<ItemType_>;
451 using ItemLocalIdType = ItemTraitsT<ItemType_>::LocalIdType;
452
453 public:
454
455 ItemPartialVariableScalarInViewT(const ViewBuildInfo& command, IVariable* var,
457 : VariableViewBase(command, var)
458 , m_values(v)
459 , m_table_view(table_view)
460 {}
461
462 public:
463
465 ARCCORE_HOST_DEVICE const DataType& operator[](IndexerType item) const
466 {
467 return m_values[item.asInt32()];
468 }
469
471 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item) const
472 {
473 return m_values[item.asInt32()];
474 }
475
477 ARCCORE_HOST_DEVICE const DataType& value(IndexerType item) const
478 {
479 return m_values[item.asInt32()];
480 }
481
483 ARCCORE_HOST_DEVICE const DataType& operator[](ItemLocalIdType lid) const
484 {
485 return m_values[_toIndex(lid)];
486 }
487
489 ARCCORE_HOST_DEVICE const DataType& operator()(ItemLocalIdType lid) const
490 {
491 return m_values[_toIndex(lid)];
492 }
493
495 ARCCORE_HOST_DEVICE const DataType& value(ItemLocalIdType lid) const
496 {
497 return m_values[_toIndex(lid)];
498 }
499
500 private:
501
502 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
503 {
504 return m_table_view[lid];
505 }
506
507 private:
508
510 GroupIndexTableView m_table_view;
511};
512
513/*---------------------------------------------------------------------------*/
514/*---------------------------------------------------------------------------*/
518template <typename ItemType_, typename DataType_>
519class ItemPartialVariableArrayInViewT
520: public VariableViewBase
521{
522 public:
523
524 using ItemType = ItemType_;
525 using DataType = DataType_;
526 using IndexerType = ItemEnumeratorIndexT<ItemType_>;
527 using ItemLocalIdType = typename ItemTraitsT<ItemType_>::LocalIdType;
528
529 public:
530
531 ItemPartialVariableArrayInViewT(const ViewBuildInfo& command, IVariable* var,
533 : VariableViewBase(command, var)
534 , m_values(v)
535 , m_table_view(table_view)
536 {}
537
539 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](IndexerType i) const
540 {
541 return this->m_values[i.asInt32()];
542 }
543
545 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](ItemLocalIdType lid) const
546 {
547 return m_values[_toIndex(lid)];
548 }
549
551 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item, Int32 i) const
552 {
553 return m_values[item.asInt32()][i];
554 }
555
557 ARCCORE_HOST_DEVICE const DataType& operator()(ItemLocalIdType lid, Int32 i) const
558 {
559 return m_values[_toIndex(lid)][i];
560 }
561
563 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> value(IndexerType i) const
564 {
565 return m_values[i.asInt32()];
566 }
567
569 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> value(ItemLocalIdType lid) const
570 {
571 return m_values[_toIndex(lid)];
572 }
573
574 protected:
575
576 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
577 {
578 return m_table_view[lid];
579 }
580
581 private:
582
584 GroupIndexTableView m_table_view;
585};
586
587/*---------------------------------------------------------------------------*/
588/*---------------------------------------------------------------------------*/
592template <typename ItemType_, typename DataType_>
593class ItemVariableArrayInViewT
594: public VariableViewBase
595{
596 private:
597
598 using IndexerType = ItemTraitsT<ItemType_>::LocalIdType;
599
600 public:
601
602 using DataType = DataType_;
603
604 public:
605
606 ItemVariableArrayInViewT(const ViewBuildInfo& command, IVariable* var, SmallSpan2<const DataType> v)
607 : VariableViewBase(command, var)
608 , m_values(v)
609 {}
610
611 public:
612
614 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](IndexerType i) const
615 {
616 return this->m_values[i.asInt32()];
617 }
618
620 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item, Int32 i) const
621 {
622 return this->m_values[item.asInt32()][i];
623 }
624
626 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> value(IndexerType i) const
627 {
628 return this->m_values[i.asInt32()];
629 }
630
631 private:
632
634};
635
636/*---------------------------------------------------------------------------*/
637/*---------------------------------------------------------------------------*/
641template <typename ItemType_, typename Accessor_, typename Indexer_>
642class ItemVariableArrayOutViewBaseT
643: public VariableViewBase
644{
645 private:
646
647 using ItemType = ItemType_;
648 using Accessor = Accessor_;
649 using IndexerType = Indexer_;
650 using DataType = Accessor::ValueType;
651 using DataTypeReturnType = Accessor::DataTypeReturnReference;
652
653 public:
654
655 ItemVariableArrayOutViewBaseT(const ViewBuildInfo& command, IVariable* var, SmallSpan2<DataType> v)
656 : VariableViewBase(command, var)
657 , m_values(v)
658 {}
659
661 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
662 {
663 return DataTypeReturnType(this->m_values[item.asInt32()]);
664 }
665
667 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
668 {
669 return this->m_values[item.asInt32()][i];
670 }
671
673 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(IndexerType item) const
674 {
675 return DataTypeReturnType(this->m_values[item.asInt32()]);
676 }
677
678 private:
679
680 SmallSpan2<DataType> m_values;
681};
682
683/*---------------------------------------------------------------------------*/
684/*---------------------------------------------------------------------------*/
688template <typename ItemType_, typename Accessor_>
689class ItemVariableArrayOutViewT
690: public VariableViewBase
691{
692 public:
693
694 using ItemType = ItemType_;
695 using Accessor = Accessor_;
696 using IndexerType = ItemTraitsT<ItemType_>::LocalIdType;
697 using DataType = Accessor::ValueType;
698 using DataTypeReturnType = Accessor::DataTypeReturnReference;
699
700 public:
701
702 ItemVariableArrayOutViewT(const ViewBuildInfo& command, IVariable* var, SmallSpan2<DataType> v)
703 : VariableViewBase(command, var)
704 , m_values(v)
705 {}
706
708 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
709 {
710 return DataTypeReturnType(this->m_values[item.asInt32()]);
711 }
712
714 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
715 {
716 return this->m_values[item.asInt32()][i];
717 }
718
720 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(IndexerType item) const
721 {
722 return DataTypeReturnType(this->m_values[item.asInt32()]);
723 }
724
725 private:
726
727 SmallSpan2<DataType> m_values;
728};
729
730/*---------------------------------------------------------------------------*/
731/*---------------------------------------------------------------------------*/
732
736template <typename ItemType_, typename Accessor_>
737class ItemPartialVariableArrayOutViewT
738: public VariableViewBase
739{
740 public:
741
742 using ItemType = ItemType_;
743 using Accessor = Accessor_;
744 using IndexerType = ItemEnumeratorIndexT<ItemType_>;
745 using DataType = Accessor::ValueType;
746 using DataTypeReturnType = Accessor::DataTypeReturnReference;
747 using ItemLocalIdType = ItemTraitsT<ItemType_>::LocalIdType;
748
749 public:
750
751 ItemPartialVariableArrayOutViewT(const ViewBuildInfo& command, IVariable* var,
753 : VariableViewBase(command, var)
754 , m_values(v)
755 , m_table_view(table_view)
756 {}
757
758 public:
759
761 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
762 {
763 return DataTypeReturnType(m_values[item.asInt32()]);
764 }
765
767 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
768 {
769 return m_values[item.asInt32()][i];
770 }
771
773 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(IndexerType item) const
774 {
775 return DataTypeReturnType(m_values[item.asInt32()]);
776 }
777
778 public:
779
781 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](ItemLocalIdType lid) const
782 {
783 return DataTypeReturnType(m_values[_toIndex(lid)]);
784 }
785
787 ARCCORE_HOST_DEVICE DataType& operator()(ItemLocalIdType lid, Int32 i) const
788 {
789 return m_values[_toIndex(lid)][i];
790 }
791
793 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(ItemLocalIdType lid) const
794 {
795 return DataTypeReturnType(m_values[_toIndex(lid)]);
796 }
797
798 private:
799
800 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
801 {
802 return m_table_view[lid];
803 }
804
805 private:
806
807 SmallSpan2<DataType> m_values;
808 GroupIndexTableView m_table_view;
809};
810
811/*---------------------------------------------------------------------------*/
812/*---------------------------------------------------------------------------*/
832template <typename ItemType_, typename Accessor_>
834: public VariableViewBase
835{
836 public:
837
838 using ItemType = ItemType_;
839 using Accessor = Accessor_;
840 using IndexerType = ItemTraitsT<ItemType_>::LocalIdType;
841 using DataType = Accessor_::ValueType;
842 using DataTypeReturnReference = DataType&;
843
844 public:
845
848 : VariableViewBase(command, var)
849 , m_values(v.data())
850 , m_size(v.size())
851 {}
852
855 {
856 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
857 }
858
861 {
862 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
863 }
864
867 {
868 return SimdDirectSetter<DataType>(m_values + simd_item.baseLocalId());
869 }
870
873 {
874 return SimdDirectSetter<DataType>(m_values + simd_item.baseLocalId());
875 }
876
878 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
879 {
880 ARCANE_CHECK_AT(item.asInt32(), m_size);
881 return Accessor(m_values + item.asInt32());
882 }
883
885 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
886 {
887 ARCANE_CHECK_AT(item.asInt32(), m_size);
888 return Accessor(m_values + item.asInt32());
889 }
890
892 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
893 {
894 ARCANE_CHECK_AT(item.asInt32(), m_size);
895 return Accessor(m_values + item.asInt32());
896 }
897
899 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
900 {
901 ARCANE_CHECK_AT(item.asInt32(), m_size);
902 this->m_values[item.asInt32()] = v;
903 }
904
905 private:
906
907 DataType* m_values = nullptr;
908 Int32 m_size = 0;
909};
910
911/*---------------------------------------------------------------------------*/
912/*---------------------------------------------------------------------------*/
913
914template <typename ItemType_, typename Accessor_>
916: public VariableViewBase
917{
918 public:
919
920 using ItemType = ItemType_;
921 using Accessor = Accessor_;
922 using IndexerType = ItemEnumeratorIndexT<ItemType_>;
923 using DataType = typename Accessor_::ValueType;
924 using DataTypeReturnReference = DataType&;
925 using ItemLocalIdType = typename ItemTraitsT<ItemType_>::LocalIdType;
926
927 public:
928
932 : VariableViewBase(command, var)
933 , m_values(v.data())
934 , m_size(v.size())
935 , m_table_view(table_view)
936 {}
937
938 public:
939
941 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
942 {
943 ARCANE_CHECK_AT(item.asInt32(), m_size);
944 return Accessor(this->m_values + item.asInt32());
945 }
946
948 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
949 {
950 ARCANE_CHECK_AT(item.asInt32(), m_size);
951 return Accessor(this->m_values + item.asInt32());
952 }
953
955 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
956 {
957 ARCANE_CHECK_AT(item.asInt32(), m_size);
958 return Accessor(this->m_values + item.asInt32());
959 }
960
962 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
963 {
964 ARCANE_CHECK_AT(item.asInt32(), m_size);
965 this->m_values[item.asInt32()] = v;
966 }
967
968 public:
969
971 ARCCORE_HOST_DEVICE Accessor operator[](ItemLocalIdType lid) const
972 {
973 Int32 index = _toIndex(lid);
974 ARCANE_CHECK_AT(index, m_size);
975 return Accessor(m_values + index);
976 }
977
979 ARCCORE_HOST_DEVICE Accessor operator()(ItemLocalIdType lid) const
980 {
981 Int32 index = _toIndex(lid);
982 ARCANE_CHECK_AT(index, m_size);
983 return Accessor(m_values + index);
984 }
985
987 ARCCORE_HOST_DEVICE Accessor value(ItemLocalIdType lid) const
988 {
989 Int32 index = _toIndex(lid);
990 ARCANE_CHECK_AT(index, m_size);
991 return Accessor(m_values + index);
992 }
993
995 ARCCORE_HOST_DEVICE void setValue(ItemLocalIdType lid, const DataType& v) const
996 {
997 Int32 index = _toIndex(lid);
998 ARCANE_CHECK_AT(index, m_size);
999 m_values[index] = v;
1000 }
1001
1002 private:
1003
1004 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
1005 {
1006 return m_table_view[lid];
1007 }
1008
1009 private:
1010
1011 DataType* m_values = nullptr;
1012 Int32 m_size = 0;
1013 GroupIndexTableView m_table_view;
1014};
1015
1016/*---------------------------------------------------------------------------*/
1017/*---------------------------------------------------------------------------*/
1018
1019/*---------------------------------------------------------------------------*/
1020/*---------------------------------------------------------------------------*/
1024template <typename DataType> auto
1026{
1027 using Accessor = DataViewSetter<DataType>;
1028 return ItemVariableScalarOutViewT<Item, Accessor>(command, var.variable(), var.asArray());
1029}
1030
1034template <typename ItemType, typename DataType> auto
1036{
1037 using Accessor = DataViewSetter<DataType>;
1038 return ItemVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1039}
1040
1044template <typename ItemType, typename DataType> auto
1046{
1047 using Accessor = DataViewSetter<DataType>;
1049 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1050}
1051
1055template <typename ItemType> auto
1057{
1058 using Accessor = DataViewSetter<Real3>;
1059 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1060}
1061
1065template <typename ItemType> auto
1067{
1068 using Accessor = DataViewSetter<Real3>;
1070 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1071}
1072
1076template <typename ItemType> auto
1078{
1079 using Accessor = DataViewSetter<Real2>;
1080 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1081}
1082
1086template <typename ItemType> auto
1088{
1089 using Accessor = DataViewSetter<Real2>;
1091 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1092}
1093
1097template <typename ItemType, typename DataType> auto
1099{
1100 using Accessor = View1DSetter<DataType>;
1101 return ItemVariableArrayOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1102}
1103
1107template <typename ItemType, typename DataType> auto
1109{
1110 using Accessor = View1DSetter<DataType>;
1112 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1113}
1114
1115/*---------------------------------------------------------------------------*/
1116/*---------------------------------------------------------------------------*/
1117
1121template <typename DataType> auto
1123{
1124 using Accessor = DataViewGetterSetter<DataType>;
1125 return ItemVariableScalarOutViewT<Item, Accessor>(command, var.variable(), var.asArray());
1126}
1127
1131template <typename ItemType, typename DataType> auto
1133{
1134 using Accessor = DataViewGetterSetter<DataType>;
1135 return ItemVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1136}
1137
1141template <typename ItemType, typename DataType> auto
1143{
1144 using Accessor = DataViewGetterSetter<DataType>;
1145 return ItemPartialVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1146}
1147
1151template <typename ItemType> auto
1153{
1154 using Accessor = DataViewGetterSetter<Real3>;
1155 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1156}
1157
1161template <typename ItemType> auto
1163{
1164 using Accessor = DataViewGetterSetter<Real3>;
1166 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1167}
1168
1172template <typename ItemType> auto
1174{
1175 using Accessor = DataViewGetterSetter<Real2>;
1176 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1177}
1178
1182template <typename ItemType> auto
1184{
1185 using Accessor = DataViewGetterSetter<Real2>;
1187 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1188}
1189
1193template <typename ItemType, typename DataType> auto
1195{
1196 using Accessor = View1DGetterSetter<DataType>;
1197 return ItemVariableArrayOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1198}
1199
1203template <typename ItemType, typename DataType> auto
1205{
1206 using Accessor = View1DGetterSetter<DataType>;
1208 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1209}
1210
1211/*---------------------------------------------------------------------------*/
1212/*---------------------------------------------------------------------------*/
1213
1217template <typename ItemType, typename DataType> auto
1219{
1220 return ItemPartialVariableScalarInViewT<ItemType, DataType>(command, var.variable(), var.asArray(), var.tableView());
1221}
1222
1226template <typename ItemType, typename DataType> auto
1228{
1229 return ItemVariableScalarInViewT<ItemType, DataType>(command, var.variable(), var.asArray());
1230}
1231
1235template <typename DataType> auto
1237{
1238 return ItemVariableScalarInViewT<Item, DataType>(command, var.variable(), var.asArray());
1239}
1240
1244template <typename ItemType, typename DataType> auto
1246{
1247 return ItemPartialVariableArrayInViewT<ItemType, DataType>(command, var.variable(), var.asArray(), var.tableView());
1248}
1249
1253template <typename ItemType, typename DataType> auto
1255{
1256 return ItemVariableArrayInViewT<ItemType, DataType>(command, var.variable(), var.asArray());
1257}
1258
1259/*---------------------------------------------------------------------------*/
1260/*---------------------------------------------------------------------------*/
1261
1262typedef ItemVariableScalarInViewT<Node, Byte> VariableNodeByteInView;
1263typedef ItemVariableScalarInViewT<Edge, Byte> VariableEdgeByteInView;
1264typedef ItemVariableScalarInViewT<Face, Byte> VariableFaceByteInView;
1265typedef ItemVariableScalarInViewT<Cell, Byte> VariableCellByteInView;
1266typedef ItemVariableScalarInViewT<Particle, Byte> VariableParticleByteInView;
1267typedef ItemVariableScalarInViewT<DoF, Byte> VariableDoFByteInView;
1268
1269typedef ItemVariableScalarInViewT<Node, Int16> VariableNodeInt16InView;
1270typedef ItemVariableScalarInViewT<Edge, Int16> VariableEdgeInt16InView;
1271typedef ItemVariableScalarInViewT<Face, Int16> VariableFaceInt16InView;
1272typedef ItemVariableScalarInViewT<Cell, Int16> VariableCellInt16InView;
1273typedef ItemVariableScalarInViewT<Particle, Int16> VariableParticleInt16InView;
1274typedef ItemVariableScalarInViewT<DoF, Int16> VariableDoFInt16InView;
1275
1276typedef ItemVariableScalarInViewT<Node, Int32> VariableNodeInt32InView;
1277typedef ItemVariableScalarInViewT<Edge, Int32> VariableEdgeInt32InView;
1278typedef ItemVariableScalarInViewT<Face, Int32> VariableFaceInt32InView;
1279typedef ItemVariableScalarInViewT<Cell, Int32> VariableCellInt32InView;
1280typedef ItemVariableScalarInViewT<Particle, Int32> VariableParticleInt32InView;
1281typedef ItemVariableScalarInViewT<DoF, Int32> VariableDoFInt32InView;
1282
1283typedef ItemVariableScalarInViewT<Node, Int64> VariableNodeInt64InView;
1284typedef ItemVariableScalarInViewT<Edge, Int64> VariableEdgeInt64InView;
1285typedef ItemVariableScalarInViewT<Face, Int64> VariableFaceInt64InView;
1286typedef ItemVariableScalarInViewT<Cell, Int64> VariableCellInt64InView;
1287typedef ItemVariableScalarInViewT<Particle, Int64> VariableParticleInt64InView;
1288typedef ItemVariableScalarInViewT<DoF, Int64> VariableDoFInt64InView;
1289
1290typedef ItemVariableScalarInViewT<Node, Real> VariableNodeRealInView;
1291typedef ItemVariableScalarInViewT<Edge, Real> VariableEdgeRealInView;
1292typedef ItemVariableScalarInViewT<Face, Real> VariableFaceRealInView;
1293typedef ItemVariableScalarInViewT<Cell, Real> VariableCellRealInView;
1294typedef ItemVariableScalarInViewT<Particle, Real> VariableParticleRealInView;
1295typedef ItemVariableScalarInViewT<DoF, Real> VariableDoFRealInView;
1296
1297typedef ItemVariableScalarInViewT<Node, Real2> VariableNodeReal2InView;
1298typedef ItemVariableScalarInViewT<Edge, Real2> VariableEdgeReal2InView;
1299typedef ItemVariableScalarInViewT<Face, Real2> VariableFaceReal2InView;
1300typedef ItemVariableScalarInViewT<Cell, Real2> VariableCellReal2InView;
1301typedef ItemVariableScalarInViewT<Particle, Real2> VariableParticleReal2InView;
1302typedef ItemVariableScalarInViewT<DoF, Real2> VariableDoFReal2InView;
1303
1304typedef ItemVariableScalarInViewT<Node, Real3> VariableNodeReal3InView;
1305typedef ItemVariableScalarInViewT<Edge, Real3> VariableEdgeReal3InView;
1306typedef ItemVariableScalarInViewT<Face, Real3> VariableFaceReal3InView;
1307typedef ItemVariableScalarInViewT<Cell, Real3> VariableCellReal3InView;
1308typedef ItemVariableScalarInViewT<Particle, Real3> VariableParticleReal3InView;
1309typedef ItemVariableScalarInViewT<DoF, Real3> VariableDoFReal3InView;
1310
1311/*---------------------------------------------------------------------------*/
1312/*---------------------------------------------------------------------------*/
1313
1314typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Byte>> VariableNodeByteOutView;
1315typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Byte>> VariableEdgeByteOutView;
1316typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Byte>> VariableFaceByteOutView;
1317typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Byte>> VariableCellByteOutView;
1318typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Byte>> VariableParticleByteOutView;
1319typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Byte>> VariableDoFByteOutView;
1320
1321typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Int16>> VariableNodeInt16OutView;
1322typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Int16>> VariableEdgeInt16OutView;
1323typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Int16>> VariableFaceInt16OutView;
1324typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Int16>> VariableCellInt16OutView;
1325typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Int16>> VariableParticleInt16OutView;
1326typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Int16>> VariableDoFInt16OutView;
1327
1328typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Int32>> VariableNodeInt32OutView;
1329typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Int32>> VariableEdgeInt32OutView;
1330typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Int32>> VariableFaceInt32OutView;
1331typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Int32>> VariableCellInt32OutView;
1332typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Int32>> VariableParticleInt32OutView;
1333typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Int32>> VariableDoFInt32OutView;
1334
1335typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Int64>> VariableNodeInt64OutView;
1336typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Int64>> VariableEdgeInt64OutView;
1337typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Int64>> VariableFaceInt64OutView;
1338typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Int64>> VariableCellInt64OutView;
1339typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Int64>> VariableParticleInt64OutView;
1340typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Int64>> VariableDoFInt64OutView;
1341
1342typedef ItemVariableScalarOutViewT<Node, DataViewSetter<Real>> VariableNodeRealOutView;
1343typedef ItemVariableScalarOutViewT<Edge, DataViewSetter<Real>> VariableEdgeRealOutView;
1344typedef ItemVariableScalarOutViewT<Face, DataViewSetter<Real>> VariableFaceRealOutView;
1345typedef ItemVariableScalarOutViewT<Cell, DataViewSetter<Real>> VariableCellRealOutView;
1346typedef ItemVariableScalarOutViewT<Particle, DataViewSetter<Real>> VariableParticleRealOutView;
1347typedef ItemVariableScalarOutViewT<DoF, DataViewSetter<Real>> VariableDoFRealOutView;
1348
1349typedef ItemVariableRealNScalarOutViewT<Node, DataViewSetter<Real2>> VariableNodeReal2OutView;
1350typedef ItemVariableRealNScalarOutViewT<Edge, DataViewSetter<Real2>> VariableEdgeReal2OutView;
1351typedef ItemVariableRealNScalarOutViewT<Face, DataViewSetter<Real2>> VariableFaceReal2OutView;
1352typedef ItemVariableRealNScalarOutViewT<Cell, DataViewSetter<Real2>> VariableCellReal2OutView;
1353typedef ItemVariableRealNScalarOutViewT<Particle, DataViewSetter<Real2>> VariableParticleReal2OutView;
1354typedef ItemVariableRealNScalarOutViewT<DoF, DataViewSetter<Real2>> VariableDoFReal2OutView;
1355
1356typedef ItemVariableRealNScalarOutViewT<Node, DataViewSetter<Real3>> VariableNodeReal3OutView;
1357typedef ItemVariableRealNScalarOutViewT<Edge, DataViewSetter<Real3>> VariableEdgeReal3OutView;
1358typedef ItemVariableRealNScalarOutViewT<Face, DataViewSetter<Real3>> VariableFaceReal3OutView;
1359typedef ItemVariableRealNScalarOutViewT<Cell, DataViewSetter<Real3>> VariableCellReal3OutView;
1360typedef ItemVariableRealNScalarOutViewT<Particle, DataViewSetter<Real3>> VariableParticleReal3OutView;
1361typedef ItemVariableRealNScalarOutViewT<DoF, DataViewSetter<Real3>> VariableDoFReal3OutView;
1362
1363/*---------------------------------------------------------------------------*/
1364/*---------------------------------------------------------------------------*/
1365
1366} // End namespace Arcane::Accelerator
1367
1368/*---------------------------------------------------------------------------*/
1369/*---------------------------------------------------------------------------*/
1370
1371#endif
Declarations of types on entities.
Read-only view on a partial array variable of the mesh.
__host__ __device__ const DataType & operator()(IndexerType item, Int32 i) const
Access operator for the i-th value of entity item.
__host__ __device__ const SmallSpan< const DataType > operator[](ItemLocalIdType lid) const
Access operator for entity item.
__host__ __device__ const SmallSpan< const DataType > value(ItemLocalIdType lid) const
Access operator for entity item.
__host__ __device__ const SmallSpan< const DataType > operator[](IndexerType i) const
Access operator for entity item.
__host__ __device__ const SmallSpan< const DataType > value(IndexerType i) const
Access operator for entity item.
__host__ __device__ const DataType & operator()(ItemLocalIdType lid, Int32 i) const
Access operator for the i-th value of entity item.
Write-only view on a partial array variable of the mesh.
__host__ __device__ SmallSpan< DataType > value(IndexerType item) const
Access operator for entity item.
__host__ __device__ SmallSpan< DataType > value(ItemLocalIdType lid) const
Access operator for the i-th value of entity item.
__host__ __device__ DataTypeReturnType operator[](IndexerType item) const
Access operator for entity item.
__host__ __device__ DataType & operator()(ItemLocalIdType lid, Int32 i) const
Access operator for local ID entity lid.
__host__ __device__ DataType & operator()(IndexerType item, Int32 i) const
Access operator for the i-th value of entity item.
__host__ __device__ DataTypeReturnType operator[](ItemLocalIdType lid) const
Access operator for local ID entity lid.
__host__ __device__ Accessor value(ItemLocalIdType lid) const
Access operator for entity item.
__host__ __device__ Accessor operator[](ItemLocalIdType lid) const
Access operator for entity item.
ItemPartialVariableRealNScalarOutViewT(const ViewBuildInfo &command, IVariable *var, SmallSpan< DataType > v, GroupIndexTableView table_view)
Constructs the view.
__host__ __device__ void setValue(ItemLocalIdType lid, const DataType &v) const
Sets the value for entity item at v.
__host__ __device__ Accessor operator[](IndexerType item) const
Access operator for entity item.
__host__ __device__ Accessor value(IndexerType item) const
Access operator for entity item.
__host__ __device__ Accessor operator()(IndexerType item) const
Access operator for entity item.
__host__ __device__ void setValue(IndexerType item, const DataType &v) const
Sets the value for entity item at v.
__host__ __device__ Accessor operator()(ItemLocalIdType lid) const
Access operator for entity item.
Read view on a partial scalar variable of the mesh.
__host__ __device__ const DataType & operator()(IndexerType item) const
Access operator for entity item.
__host__ __device__ const DataType & operator[](ItemLocalIdType lid) const
Access operator for entity item.
__host__ __device__ const DataType & value(ItemLocalIdType lid) const
Access operator for entity item.
__host__ __device__ const DataType & operator()(ItemLocalIdType lid) const
Access operator for entity item.
__host__ __device__ const DataType & value(IndexerType item) const
Access operator for entity item.
__host__ __device__ const DataType & operator[](IndexerType item) const
Access operator for entity item.
Write view on a partial scalar variable of the mesh.
__host__ __device__ void setValue(IndexerType item, const DataType &v) const
Positions the value for the entity item at v.
__host__ __device__ Accessor operator()(IndexerType item) const
Access operator for the entity item.
__host__ __device__ Accessor value(IndexerType item) const
Access operator for the entity item.
__host__ __device__ Accessor operator[](IndexerType item) const
Access operator for the entity item.
__host__ __device__ Accessor value(ItemLocalIdType lid) const
Access operator for the local ID entity lid.
__host__ __device__ void setValue(ItemLocalIdType lid, const DataType &v) const
Positions the value for the local ID entity lid at v.
__host__ __device__ Accessor operator[](ItemLocalIdType lid) const
Access operator for the local ID entity lid.
__host__ __device__ Accessor operator()(ItemLocalIdType lid) const
Access operator for the local ID entity lid.
Read-only view on a mesh array variable.
__host__ __device__ const SmallSpan< const DataType > value(IndexerType i) const
Access operator for entity item.
__host__ __device__ const SmallSpan< const DataType > operator[](IndexerType i) const
Access operator for entity item.
__host__ __device__ const DataType & operator()(IndexerType item, Int32 i) const
Access operator for the i-th value of entity item.
__host__ __device__ DataTypeReturnType operator[](IndexerType item) const
Access operator for entity item.
__host__ __device__ SmallSpan< DataType > value(IndexerType item) const
Access operator for entity item.
__host__ __device__ DataType & operator()(IndexerType item, Int32 i) const
Access operator for the i-th value of entity item.
Write-only view on a mesh array variable.
__host__ __device__ DataTypeReturnType operator[](IndexerType item) const
Access operator for entity item.
__host__ __device__ SmallSpan< DataType > value(IndexerType item) const
Access operator for entity item.
__host__ __device__ DataType & operator()(IndexerType item, Int32 i) const
Access operator for the i-th value of entity item.
Write-only view on a scalar variable of type 'RealN' of the mesh.
__host__ __device__ Accessor operator[](IndexerType item) const
Access operator for entity item.
__host__ __device__ Accessor operator()(IndexerType item) const
Access operator for entity item.
SimdDirectSetter< DataType > operator()(SimdItemDirectIndexT< ItemType > simd_item) const
Vector access operator without indirection.
ItemVariableRealNScalarOutViewT(const ViewBuildInfo &command, IVariable *var, SmallSpan< DataType > v)
Constructs the view.
SimdSetter< DataType > operator()(SimdItemIndexT< ItemType > simd_item) const
Vector access operator with indirection.
__host__ __device__ void setValue(IndexerType item, const DataType &v) const
Positions the value for entity item at v.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Vector access operator without indirection.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Vector access operator with indirection.
__host__ __device__ Accessor value(IndexerType item) const
Access operator for entity item.
Read view on a scalar variable of the mesh.
SimdTypeTraits< DataType >::SimdType operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Vector access operator with indirection.
__host__ __device__ const DataType & operator[](IndexerType item) const
Access operator for the entity item.
__host__ __device__ const DataType & value(IndexerType item) const
Access operator for the entity item.
__host__ __device__ const DataType & operator()(IndexerType item) const
Access operator for the entity item.
SimdTypeTraits< DataType >::SimdType operator[](SimdItemIndexT< ItemType > simd_item) const
Vector access operator with indirection.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Vector access operator with indirection.
__host__ __device__ Accessor value(IndexerType item) const
Access operator for the entity item.
__host__ __device__ void setValue(IndexerType item, const DataType &v) const
Positions the value for the entity item at v.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Vector access operator without indirection.
__host__ __device__ Accessor operator[](IndexerType item) const
Access operator for the entity item.
__host__ __device__ Accessor operator()(IndexerType item) const
Access operator for the entity item.
Write view on a scalar variable of the mesh.
__host__ __device__ Accessor operator()(IndexerType item) const
Access operator for the entity item.
__host__ __device__ Accessor operator[](IndexerType item) const
Access operator for the entity item.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Vector access operator with indirection.
__host__ __device__ void setValue(IndexerType item, const DataType &v) const
Positions the value for the entity item at v.
__host__ __device__ Accessor value(IndexerType item) const
Access operator for the entity item.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Vector access operator without indirection.
Class to access a 1D array of a read/write view.
Class to access a 1D array of a read/write view.
Interface of a variable.
Definition IVariable.h:40
Represents an index of an enumeration over an entity ItemType.
typename ItemTraitsT< ItemType >::LocalIdType LocalIdType
Type of the localId().
Definition ItemTypes.h:825
GroupIndexTableView tableView() const
View of the group indirection table.
GroupIndexTableView tableView() const
View of the group's redirection table.
Characteristics of mesh elements.
Definition ItemTypes.h:625
Scalar variable on a mesh entity type.
Scalar partial variable on a mesh entity type.
Scalar variable on a mesh entity type.
Array variable on a mesh entity type.
Scalar variable on a mesh entity type.
Object allowing positioning of values in a SIMD vector.
Definition SimdItem.h:400
Vector index without indirection for an entity type.
Definition SimdItem.h:214
Vector index with indirection for an entity type. TODO: store the indices in a vector register to be ...
Definition SimdItem.h:182
const SimdIndexType &ARCANE_RESTRICT simdLocalIds() const
List of local IDs of the instance entities.
Definition SimdItem.h:199
Object allowing positioning of values in a SIMD vector.
Definition SimdItem.h:361
View for a 2D array whose size is an 'Int32'.
Definition Span2.h:249
View of an array of elements of type T.
Definition Span.h:805
constexpr __host__ __device__ pointer data() const noexcept
Pointer to the start of the view.
Definition Span.h:539
constexpr __host__ __device__ SizeType size() const noexcept
Returns the size of the array.
Definition Span.h:327
View of an array of elements of type T.
Definition Span.h:635
IVariable * variable() const
Associated variable.
auto viewInOut(const ViewBuildInfo &vbi, CellMaterialVariableScalarRef< DataType > &var)
Read/write view for scalar material variables.
auto viewOut(const ViewBuildInfo &vbi, CellMaterialVariableScalarRef< DataType > &var)
Write view for scalar material variables.
auto viewIn(const ViewBuildInfo &vbi, const CellMaterialVariableScalarRef< DataType > &var)
Read view for scalar material variables.
std::int32_t Int32
Signed integer type of 32 bits.