Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MeshPartialVariableScalarRef.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* MeshPartialVariableScalarRef.h (C) 2000-2024 */
9/* */
10/* Classe gérant une variable partielle scalaire sur une entité du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MESHPARTIALVARIABLESCALARREF_H
13#define ARCANE_CORE_MESHPARTIALVARIABLESCALARREF_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/FatalErrorException.h"
18
19#include "arcane/core/MeshVariableRef.h"
20#include "arcane/core/PrivateVariableScalar.h"
22#include "arcane/core/ItemGroupRangeIterator.h"
23#include "arcane/core/ItemPairEnumerator.h"
24#include "arcane/core/GroupIndexTable.h"
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34/*!
35 * \ingroup Variable
36 * \brief Variable partielle scalaire sur un type d'entité du maillage.
37 */
38template<typename DataTypeT>
40: public PrivateVariableScalarT<DataTypeT>
41{
42 public:
43
44 typedef DataTypeT DataType;
46 typedef const DataType& ConstReturnReferenceType;
47 typedef DataType& ReturnReferenceType;
48
49 protected:
50
51 typedef PrivateVariableScalarT<DataType> BaseClass;
52 typedef typename BaseClass::PrivatePartType PrivatePartType;
53 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
54
55 public:
56
57 //! Construit une référence à la variable spécifiée dans \a vb
58 ARCANE_CORE_EXPORT ItemPartialVariableScalarRefT(const VariableBuildInfo& vb,eItemKind ik);
59 //! Construit une référence à partir de \a var
60 explicit ARCANE_CORE_EXPORT ItemPartialVariableScalarRefT(IVariable* var);
61 //! Construit une référence à partir de \a rhs
63
64 protected:
65
66 //! Opérateur de recopie
67 ARCANE_CORE_EXPORT void operator=(const ItemPartialVariableScalarRefT<DataType>& rhs);
68
69 public:
70
71 ARCANE_CORE_EXPORT void fill(const DataType& value);
72 ARCANE_CORE_EXPORT void copy(const ItemPartialVariableScalarRefT<DataType>& v);
73 ARCANE_CORE_EXPORT void internalSetUsed(bool v);
74
75 public:
76
77 const DataType& operator[](const Item& i) const
78 {
79 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND(i);
80 ARCANE_ASSERT((m_table.isUsed()),("GroupIndexTable expired"));
81 const GroupIndexTable& table = *m_table;
82 return this->_value(table[i.localId()]);
83 }
84 DataTypeReturnReference operator[](const Item& i)
85 {
86 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND(i);
87 ARCANE_ASSERT((m_table.isUsed()),("GroupIndexTable expired"));
88 const GroupIndexTable& table = *m_table;
89 return this->_value(table[i.localId()]);
90 }
91
92 const DataType& operator[](const ItemGroupRangeIterator& i) const
93 {
94 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND(i);
95 return this->_value(i.index());
96 }
97 const DataType& operator[](const ItemEnumerator& i) const
98 {
99 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND((*i));
100 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
101 return this->_value(i.index());
102 }
103 const DataType& operator[](ItemEnumeratorIndex i) const
104 {
105 return this->_value(i.index());
106 }
107 const DataType& operator[](const ItemPairEnumerator& i) const
108 {
109 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND((*i));
110 return this->_value(i.index());
111 }
112
113 DataTypeReturnReference operator[](const ItemGroupRangeIterator& i)
114 {
115 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND(i);
116 return this->_value(i.index());
117 }
118 DataTypeReturnReference operator[](const ItemEnumerator& i)
119 {
120 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND((*i));
121 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
122 return this->_value(i.index());
123 }
124 DataTypeReturnReference operator[](ItemEnumeratorIndex i)
125 {
126 return this->_value(i.index());
127 }
128 DataTypeReturnReference operator[](const ItemPairEnumerator& i)
129 {
130 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND((*i));
131 return this->_value(i.index());
132 }
133
134 public:
135
136 //! Vue sur table d'indirection du groupe.
137 GroupIndexTableView tableView() const { return m_table->view(); }
138
139 protected:
140
142
143 protected:
144
145 static VariableInfo _buildVariableInfo(const VariableBuildInfo& vbi,eItemKind ik);
146 static VariableTypeInfo _buildVariableTypeInfo(eItemKind ik);
147};
148
149/*---------------------------------------------------------------------------*/
150/*---------------------------------------------------------------------------*/
151/*!
152 * \ingroup Variable
153 * \brief Variable scalaire sur un type d'entité du maillage.
154 */
155template<typename ItemTypeT,typename DataTypeT>
157: public ItemPartialVariableScalarRefT<DataTypeT>
158{
159 public:
160
161 typedef DataTypeT DataType;
162 typedef ItemTypeT ItemType;
164 typedef const DataType& ConstReturnReferenceType;
165 typedef DataType& ReturnReferenceType;
166
168
169 typedef typename ItemTraitsT<ItemType>::ItemGroupType GroupType;
170
172 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
173
174 public:
175
176 //! Construit une référence à la variable spécifiée dans \a vb
177 ARCANE_CORE_EXPORT MeshPartialVariableScalarRefT(const VariableBuildInfo& vb);
178 //! Construit une référence à partir de \a rhs
180 //! Positionne la référence de l'instance à la variable \a rhs.
181 ARCANE_CORE_EXPORT void refersTo(const MeshPartialVariableScalarRefT<ItemType,DataType>& rhs);
182
183 public:
184
185 const DataType& operator[](const ItemType& i) const
186 {
187 ARCANE_ASSERT((this->m_table.isUsed()),("GroupIndexTable expired"));
188 const GroupIndexTable& table = *this->m_table;
189 return this->_value(table[i.localId()]);
190 }
191 DataTypeReturnReference operator[](const ItemType& i)
192 {
193 ARCANE_ASSERT((this->m_table.isUsed()),("GroupIndexTable expired"));
194 const GroupIndexTable& table = *this->m_table;
195 return this->_value(table[i.localId()]);
196 }
197
198 const DataType& operator[](const ItemGroupRangeIteratorT<ItemType>& i) const
199 {
200 return this->_value(i.index());
201 }
202 DataTypeReturnReference operator[](const ItemGroupRangeIteratorT<ItemType>& i)
203 {
204 return this->_value(i.index());
205 }
206 const DataType& operator[](const ItemEnumeratorT<ItemType>& i) const
207 {
208 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
209 return this->_value(i.index());
210 }
211 const DataType& operator[](ItemEnumeratorIndexT<ItemType> i) const
212 {
213 return this->_value(i.index());
214 }
215 DataTypeReturnReference operator[](const ItemEnumeratorT<ItemType>& i)
216 {
217 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
218 return this->_value(i.index());
219 }
220 DataTypeReturnReference operator[](ItemEnumeratorIndexT<ItemType> i)
221 {
222 return this->_value(i.index());
223 }
224 const DataType& operator[](const ItemPairEnumeratorSubT<ItemType>& i) const
225 {
226 return this->_value(i.index());
227 }
228 DataTypeReturnReference operator[](const ItemPairEnumeratorSubT<ItemType>& i)
229 {
230 return this->_value(i.index());
231 }
232
233 //! Groupe associé à la grandeur
234 ARCANE_CORE_EXPORT GroupType itemGroup() const;
235
236 private:
237
238 static VariableFactoryRegisterer m_auto_registerer;
239 //static VariableInfo _buildVariableInfo(const VariableBuildInfo& vbi);
240 static VariableTypeInfo _buildVariableTypeInfo();
241 static VariableRef* _autoCreate(const VariableBuildInfo& vb);
242};
243
244/*---------------------------------------------------------------------------*/
245/*---------------------------------------------------------------------------*/
246
247} // End namespace Arcane
248
249/*---------------------------------------------------------------------------*/
250/*---------------------------------------------------------------------------*/
251
252#endif
Types et macros pour itérer sur les entités du maillage.
constexpr Integer index() const
Indice courant de l'énumérateur.
Représente un index d'une énumération sur une entité ItemType.
Représente un index d'une énumération sur une entité.
Enumérateur sur une liste typée d'entités de type ItemType.
Enumérateur sur une liste d'entités.
Intervalle d'itération sur un groupe d'entités de maillage.
Iterateur sur les éléments d'un groupe.
Enumérateur sur un tableau de tableaux d'entités du maillage de genre ItemType et SubItemType.
Enumérateur sur un tableau de tableaux d'entités du maillage.
Variable partielle scalaire sur un type d'entité du maillage.
GroupIndexTableView tableView() const
Vue sur table d'indirection du groupe.
void operator=(const ItemPartialVariableScalarRefT< DataType > &rhs)
Opérateur de recopie.
Classe de base d'un élément de maillage.
Definition Item.h:83
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:210
Variable scalaire sur un type d'entité du maillage.
void refersTo(const MeshPartialVariableScalarRefT< ItemType, DataType > &rhs)
Positionne la référence de l'instance à la variable rhs.
GroupType itemGroup() const
Groupe associé à la grandeur.
Classe de factorisation des variables scalaires sur des entités du maillage.
Paramètres nécessaires à la construction d'une variable.
Infos caractérisant une variable.
Référence à une variable.
Definition VariableRef.h:56
Informations caractérisant le type d'une variable.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.