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