Arcane  4.1.13.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-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/* 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
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: Faire les vues en ReadWrite pour les accesseurs SIMD
30
31namespace Arcane::Accelerator
32{
33template <typename DataType> class View1DGetterSetter;
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
37/*!
38 * \brief Classe de base des vues sur les variables.
39 */
40class ARCANE_ACCELERATOR_EXPORT VariableViewBase
41{
42 public:
43
44 VariableViewBase(const ViewBuildInfo& command, IVariable* var);
45};
46
47/*---------------------------------------------------------------------------*/
48/*---------------------------------------------------------------------------*/
49/*!
50 * \brief Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
51 */
52template <typename DataType>
53class View1DSetter
54{
55 // Pour accéder à 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/*---------------------------------------------------------------------------*/
89/*!
90 * \brief Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
91 */
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/*---------------------------------------------------------------------------*/
128/*!
129 * \brief Vue en écriture sur une variable scalaire du maillage.
130 */
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
152 //! Opérateur d'accès vectoriel avec indirection.
153 SimdSetter<DataType> operator[](SimdItemIndexT<ItemType> simd_item) const requires(HasSimd_)
154 {
155 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
156 }
157
158 //! Opérateur d'accès vectoriel sans indirection.
160 {
161 return SimdDirectSetter<DataType>(m_values + simd_item.baseLocalId());
162 }
163
164 //! Opérateur d'accès pour l'entité \a item
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
171 //! Opérateur d'accès pour l'entité \a item
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
178 //! Opérateur d'accès pour l'entité \a item
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
185 //! Positionne la valeur pour l'entité \a item à \a v
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/*---------------------------------------------------------------------------*/
200/*!
201 * \brief Vue en écriture sur une variable scalaire du maillage.
202 */
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
223 //! Opérateur d'accès vectoriel avec indirection.
225 {
226 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
227 }
228
229 //! Opérateur d'accès vectoriel sans indirection.
231 {
232 return SimdDirectSetter<DataType>(m_values + simd_item.baseLocalId());
233 }
234
235 //! Opérateur d'accès pour l'entité \a item
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
242 //! Opérateur d'accès pour l'entité \a item
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
249 //! Opérateur d'accès pour l'entité \a item
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
256 //! Positionne la valeur pour l'entité \a item à \a v
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/*---------------------------------------------------------------------------*/
271/*!
272 * \brief Vue en écriture sur une variable partielle scalaire du maillage.
273 */
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
297 //! Opérateur d'accès pour l'entité \a item
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
304 //! Opérateur d'accès pour l'entité \a item
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
311 //! Opérateur d'accès pour l'entité \a item
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
318 //! Positionne la valeur pour l'entité \a item à \a v
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
327 //! Opérateur d'accès pour l'entité de numéro local \a lid
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
335 //! Opérateur d'accès pour l'entité de numéro local \a lid
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
343 //! Opérateur d'accès pour l'entité de numéro local \a lid
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
351 //! Positionne la valeur pour l'entité de numéro local \a lid à \a v
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/*---------------------------------------------------------------------------*/
375/*!
376 * \brief Vue en lecture sur une variable scalaire du maillage.
377 */
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
398 //! Opérateur d'accès vectoriel avec indirection.
399 typename SimdTypeTraits<DataType>::SimdType
401 {
402 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
403 return SimdType(m_values.data(), simd_item.simdLocalIds());
404 }
405
406 //! Opérateur d'accès vectoriel avec indirection.
407 typename SimdTypeTraits<DataType>::SimdType
409 {
410 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
411 return SimdType(m_values.data() + simd_item.baseLocalId());
412 }
413
414 //! Opérateur d'accès pour l'entité \a item
415 ARCCORE_HOST_DEVICE const DataType& operator[](IndexerType item) const
416 {
417 return this->m_values[item.asInt32()];
418 }
419
420 //! Opérateur d'accès pour l'entité \a item
421 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item) const
422 {
423 return this->m_values[item.asInt32()];
424 }
425
426 //! Opérateur d'accès pour l'entité \a item
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/*---------------------------------------------------------------------------*/
439/*!
440 * \brief Vue en lecture sur une variable partielle scalaire du maillage.
441 */
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
464 //! Opérateur d'accès pour l'entité \a item
465 ARCCORE_HOST_DEVICE const DataType& operator[](IndexerType item) const
466 {
467 return m_values[item.asInt32()];
468 }
469
470 //! Opérateur d'accès pour l'entité \a item
471 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item) const
472 {
473 return m_values[item.asInt32()];
474 }
475
476 //! Opérateur d'accès pour l'entité \a item
477 ARCCORE_HOST_DEVICE const DataType& value(IndexerType item) const
478 {
479 return m_values[item.asInt32()];
480 }
481
482 //! Opérateur d'accès pour l'entité \a item
483 ARCCORE_HOST_DEVICE const DataType& operator[](ItemLocalIdType lid) const
484 {
485 return m_values[_toIndex(lid)];
486 }
487
488 //! Opérateur d'accès pour l'entité \a item
489 ARCCORE_HOST_DEVICE const DataType& operator()(ItemLocalIdType lid) const
490 {
491 return m_values[_toIndex(lid)];
492 }
493
494 //! Opérateur d'accès pour l'entité \a item
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/*---------------------------------------------------------------------------*/
515/*!
516 * \brief Vue en lecture sur une variable partielle tableau du maillage.
517 */
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
538 //! Opérateur d'accès pour l'entité \a item
539 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](IndexerType i) const
540 {
541 return this->m_values[i.asInt32()];
542 }
543
544 //! Opérateur d'accès pour l'entité \a item
545 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](ItemLocalIdType lid) const
546 {
547 return m_values[_toIndex(lid)];
548 }
549
550 //! Opérateur d'accès pour la \a i-ème valeur de l'entité \a item
551 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item, Int32 i) const
552 {
553 return m_values[item.asInt32()][i];
554 }
555
556 //! Opérateur d'accès pour la \a i-ème valeur de l'entité \a item
557 ARCCORE_HOST_DEVICE const DataType& operator()(ItemLocalIdType lid, Int32 i) const
558 {
559 return m_values[_toIndex(lid)][i];
560 }
561
562 //! Opérateur d'accès pour l'entité \a item
563 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> value(IndexerType i) const
564 {
565 return m_values[i.asInt32()];
566 }
567
568 //! Opérateur d'accès pour l'entité \a item
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/*---------------------------------------------------------------------------*/
589/*!
590 * \brief Vue en lecture sur une variable tableau du maillage.
591 */
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
613 //! Opérateur d'accès pour l'entité \a item
614 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](IndexerType i) const
615 {
616 return this->m_values[i.asInt32()];
617 }
618
619 //! Opérateur d'accès pour la \a i-ème valeur de l'entité \a item
620 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item, Int32 i) const
621 {
622 return this->m_values[item.asInt32()][i];
623 }
624
625 //! Opérateur d'accès pour l'entité \a item
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/*---------------------------------------------------------------------------*/
638/*!
639 * \brief Vue en écriture seule sur une variable de tableau du maillage.
640 */
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
660 //! Opérateur d'accès pour l'entité \a item
661 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
662 {
663 return DataTypeReturnType(this->m_values[item.asInt32()]);
664 }
665
666 //! Opérateur d'accès pour la \a i-ième valeur de l'entité \a item
667 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
668 {
669 return this->m_values[item.asInt32()][i];
670 }
671
672 //! Opérateur d'accès pour l'entité \a item
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/*---------------------------------------------------------------------------*/
685/*!
686 * \brief Vue en écriture sur une variable tableau du maillage.
687 */
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
707 //! Opérateur d'accès pour l'entité \a item
708 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
709 {
710 return DataTypeReturnType(this->m_values[item.asInt32()]);
711 }
712
713 //! Opérateur d'accès pour la \a i-ème valeur de l'entité \a item
714 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
715 {
716 return this->m_values[item.asInt32()][i];
717 }
718
719 //! Opérateur d'accès pour l'entité \a item
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
733/*!
734 * \brief Vue en écriture sur une variable partielle tableau du maillage.
735 */
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
760 //! Opérateur d'accès pour l'entité \a item
761 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
762 {
763 return DataTypeReturnType(m_values[item.asInt32()]);
764 }
765
766 //! Opérateur d'accès pour la \a i-ème valeur de l'entité \a item
767 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
768 {
769 return m_values[item.asInt32()][i];
770 }
771
772 //! Opérateur d'accès pour l'entité \a item
773 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(IndexerType item) const
774 {
775 return DataTypeReturnType(m_values[item.asInt32()]);
776 }
777
778 public:
779
780 //! Opérateur d'accès pour l'entité de numéro local \a lid
781 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](ItemLocalIdType lid) const
782 {
783 return DataTypeReturnType(m_values[_toIndex(lid)]);
784 }
785
786 //! Opérateur d'accès pour l'entité de numéro local \a lid
787 ARCCORE_HOST_DEVICE DataType& operator()(ItemLocalIdType lid, Int32 i) const
788 {
789 return m_values[_toIndex(lid)][i];
790 }
791
792 //! Opérateur d'accès pour la \a i-ème valeur de l'entité \a item
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/*---------------------------------------------------------------------------*/
813/*!
814 * \brief Vue en écriture sur une variable scalaire de type 'RealN' du maillage.
815 *
816 * Cette classe spécialise les vues modifiable pour les réels 'Real2', 'Real3',
817 * 'Real2x2' et 'Real3x3'. La spécialisation s'assure qu'on ne puisse pas
818 * modifier uniquement une composante de ces vecteurs de réels. Par exemple:
819 *
820 * \code
821 * VariableNodeReal3View force_view = ...;
822 * Node node = ...;
823 *
824 * // OK:
825 * force_view[node] = Real3(x,y,z);
826 *
827 * // Interdit:
828 * // force_view[node].x = ...;
829 *
830 * \endcode
831 */
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
846 //! Construit la vue
848 : VariableViewBase(command, var)
849 , m_values(v.data())
850 , m_size(v.size())
851 {}
852
853 //! Opérateur d'accès vectoriel avec indirection.
855 {
856 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
857 }
858
859 //! Opérateur d'accès vectoriel avec indirection.
861 {
862 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
863 }
864
865 //! Opérateur d'accès vectoriel sans indirection.
867 {
868 return SimdDirectSetter<DataType>(m_values + simd_item.baseLocalId());
869 }
870
871 //! Opérateur d'accès vectoriel sans indirection.
873 {
874 return SimdDirectSetter<DataType>(m_values + simd_item.baseLocalId());
875 }
876
877 //! Opérateur d'accès pour l'entité \a item
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
884 //! Opérateur d'accès pour l'entité \a item
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
891 //! Opérateur d'accès pour l'entité \a item
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
898 //! Positionne la valeur pour l'entité \a item à \a v
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
929 //! Construit la vue
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
940 //! Opérateur d'accès pour l'entité \a item
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
947 //! Opérateur d'accès pour l'entité \a item
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
954 //! Opérateur d'accès pour l'entité \a item
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
961 //! Positionne la valeur pour l'entité \a item à \a v
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
970 //! Opérateur d'accès pour l'entité \a item
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
978 //! Opérateur d'accès pour l'entité \a item
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
986 //! Opérateur d'accès pour l'entité \a item
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
994 //! Positionne la valeur pour l'entité \a item à \a v
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/*---------------------------------------------------------------------------*/
1021/*!
1022 * \brief Vue en écriture.
1023 */
1024template <typename DataType> auto
1026{
1027 using Accessor = DataViewSetter<DataType>;
1028 return ItemVariableScalarOutViewT<Item, Accessor>(command, var.variable(), var.asArray());
1029}
1030
1031/*!
1032 * \brief Vue en écriture.
1033 */
1034template <typename ItemType, typename DataType> auto
1036{
1037 using Accessor = DataViewSetter<DataType>;
1038 return ItemVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1039}
1040
1041/*!
1042 * \brief Vue en écriture.
1043 */
1044template <typename ItemType, typename DataType> auto
1046{
1047 using Accessor = DataViewSetter<DataType>;
1049 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1050}
1051
1052/*!
1053 * \brief Vue en écriture.
1054 */
1055template <typename ItemType> auto
1057{
1058 using Accessor = DataViewSetter<Real3>;
1059 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1060}
1061
1062/*!
1063 * \brief Vue en écriture.
1064 */
1065template <typename ItemType> auto
1067{
1068 using Accessor = DataViewSetter<Real3>;
1070 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1071}
1072
1073/*!
1074 * \brief Vue en écriture.
1075 */
1076template <typename ItemType> auto
1078{
1079 using Accessor = DataViewSetter<Real2>;
1080 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1081}
1082
1083/*!
1084 * \brief Vue en écriture.
1085 */
1086template <typename ItemType> auto
1088{
1089 using Accessor = DataViewSetter<Real2>;
1091 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1092}
1093
1094/*!
1095 * \brief Vue en écriture.
1096 */
1097template <typename ItemType, typename DataType> auto
1099{
1100 using Accessor = View1DSetter<DataType>;
1101 return ItemVariableArrayOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1102}
1103
1104/*!
1105 * \brief Vue en écriture.
1106 */
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
1118/*!
1119 * \brief Vue en lecture/écriture.
1120 */
1121template <typename DataType> auto
1123{
1124 using Accessor = DataViewGetterSetter<DataType>;
1125 return ItemVariableScalarOutViewT<Item, Accessor>(command, var.variable(), var.asArray());
1126}
1127
1128/*!
1129 * \brief Vue en lecture/écriture.
1130 */
1131template <typename ItemType, typename DataType> auto
1133{
1134 using Accessor = DataViewGetterSetter<DataType>;
1135 return ItemVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1136}
1137
1138/*!
1139 * \brief Vue en lecture/écriture.
1140 */
1141template <typename ItemType, typename DataType> auto
1143{
1144 using Accessor = DataViewGetterSetter<DataType>;
1145 return ItemPartialVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1146}
1147
1148/*!
1149 * \brief Vue en lecture/écriture.
1150 */
1151template <typename ItemType> auto
1153{
1154 using Accessor = DataViewGetterSetter<Real3>;
1155 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1156}
1157
1158/*!
1159 * \brief Vue en lecture/écriture.
1160 */
1161template <typename ItemType> auto
1163{
1164 using Accessor = DataViewGetterSetter<Real3>;
1166 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1167}
1168
1169/*!
1170 * \brief Vue en lecture/écriture.
1171 */
1172template <typename ItemType> auto
1174{
1175 using Accessor = DataViewGetterSetter<Real2>;
1176 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1177}
1178
1179/*!
1180 * \brief Vue en lecture/écriture.
1181 */
1182template <typename ItemType> auto
1184{
1185 using Accessor = DataViewGetterSetter<Real2>;
1187 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1188}
1189
1190/*!
1191 * \brief Vue en lecture/écriture.
1192 */
1193template <typename ItemType, typename DataType> auto
1195{
1196 using Accessor = View1DGetterSetter<DataType>;
1197 return ItemVariableArrayOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1198}
1199
1200/*!
1201 * \brief Vue en lecture/écriture.
1202 */
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
1214/*!
1215 * \brief Vue en lecture.
1216 */
1217template <typename ItemType, typename DataType> auto
1219{
1220 return ItemPartialVariableScalarInViewT<ItemType, DataType>(command, var.variable(), var.asArray(), var.tableView());
1221}
1222
1223/*!
1224 * \brief Vue en lecture.
1225 */
1226template <typename ItemType, typename DataType> auto
1228{
1229 return ItemVariableScalarInViewT<ItemType, DataType>(command, var.variable(), var.asArray());
1230}
1231
1232/*!
1233 * \brief Vue en lecture.
1234 */
1235template <typename DataType> auto
1237{
1238 return ItemVariableScalarInViewT<Item, DataType>(command, var.variable(), var.asArray());
1239}
1240
1241/*!
1242 * \brief Vue en lecture.
1243 */
1244template <typename ItemType, typename DataType> auto
1246{
1247 return ItemPartialVariableArrayInViewT<ItemType, DataType>(command, var.variable(), var.asArray(), var.tableView());
1248}
1249
1250/*!
1251 * \brief Vue en lecture.
1252 */
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
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[](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 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()(ItemLocalIdType lid, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
Vue en écriture sur une variable partielle tableau du maillage.
__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__ DataTypeReturnType operator[](IndexerType item) const
Opérateur d'accès pour 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__ DataTypeReturnType operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
__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.
ItemPartialVariableRealNScalarOutViewT(const ViewBuildInfo &command, IVariable *var, SmallSpan< DataType > v, GroupIndexTableView table_view)
Construit la vue.
__host__ __device__ void setValue(ItemLocalIdType lid, 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 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.
__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é item.
Vue en lecture sur une variable partielle scalaire du maillage.
__host__ __device__ const DataType & operator()(IndexerType item) 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 & 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 & value(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.
Vue en écriture sur une variable partielle scalaire du maillage.
__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 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.
__host__ __device__ Accessor value(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
__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[](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 > value(IndexerType i) const
Opérateur d'accès pour 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 DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
__host__ __device__ DataTypeReturnType operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ SmallSpan< DataType > value(IndexerType item) const
Opérateur d'accès pour l'entité item.
__host__ __device__ DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-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.
__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.
ItemVariableRealNScalarOutViewT(const ViewBuildInfo &command, IVariable *var, SmallSpan< DataType > v)
Construit la vue.
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.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
__host__ __device__ Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en lecture sur une variable scalaire du maillage.
SimdTypeTraits< DataType >::SimdType operator[](SimdItemDirectIndexT< 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 & value(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[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
__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.
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 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 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.
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 value(IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
Informations pour construire une vue pour les données sur accélérateur.
Interface d'une variable.
Definition IVariable.h:39
Représente un index d'une énumération sur une entité ItemType.
typename ItemTraitsT< ItemType >::LocalIdType LocalIdType
Type du localId().
Definition ItemTypes.h:814
GroupIndexTableView tableView() const
Vue sur table d'indirection du groupe.
GroupIndexTableView tableView() const
Vue sur table d'indirection du groupe.
Vue en écriture sur une variable scalaire de type 'RealN' du maillage.
Vue en lecture sur une variable scalaire du maillage.
Vue en écriture sur une variable scalaire du maillage.
Variable scalaire sur un type d'entité du maillage.
Variable scalaire sur un type d'entité du maillage.
Variable scalaire sur un type d'entité du maillage.
Variable tableau sur un type d'entité du maillage.
Variable scalaire sur un type d'entité du maillage.
Objet permettant de positionner les valeurs d'un vecteur SIMD.
Definition SimdItem.h:351
Index vectoriel sans indirection pour un type d'entité
Definition SimdItem.h:188
Index vectoriel avec indirection pour un type d'entité. TODO: stocker les index dans un registre vect...
Definition SimdItem.h:166
const SimdIndexType &ARCANE_RESTRICT simdLocalIds() const
Liste des numéros locaux des entités de l'instance.
Definition SimdItem.h:176
Vue pour un tableau 2D dont la taille est un 'Int32'.
Definition Span2.h:233
Vue d'un tableau d'éléments de type T.
Definition Span.h:801
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
Definition Span.h:537
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Definition Span.h:325
Vue d'un tableau d'éléments de type T.
Definition Span.h:633
IVariable * variable() const
Variable associée.
Espace de nom pour l'utilisation des accélérateurs.
auto viewInOut(const ViewBuildInfo &vbi, CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture/écriture pour les variables materiaux scalaire.
auto viewOut(const ViewBuildInfo &vbi, CellMaterialVariableScalarRef< DataType > &var)
Vue en écriture pour les variables materiaux scalaires.
auto viewIn(const ViewBuildInfo &vbi, const CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture pour les variables materiaux scalaire.
std::int32_t Int32
Type entier signé sur 32 bits.