Arcane  v3.16.0.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;
45 typedef UniqueArray<DataType> ValueType;
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
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;
163 typedef UniqueArray<DataType> ValueType;
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
178 //! Construit une référence à partir de \a rhs
180 //! Positionne la référence de l'instance à la variable \a 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.
ItemPartialVariableScalarRefT(const VariableBuildInfo &vb, eItemKind ik)
Construit une référence à la variable spécifiée dans vb.
GroupIndexTableView tableView() const
Vue sur table d'indirection du groupe.
ItemPartialVariableScalarRefT(IVariable *var)
Construit une référence à partir de var.
void operator=(const ItemPartialVariableScalarRefT< DataType > &rhs)
Opérateur de recopie.
ItemPartialVariableScalarRefT(const ItemPartialVariableScalarRefT< DataType > &rhs)
Construit une référence à partir de rhs.
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:219
void refersTo(const MeshPartialVariableScalarRefT< ItemType, DataType > &rhs)
Positionne la référence de l'instance à la variable rhs.
MeshPartialVariableScalarRefT(const MeshPartialVariableScalarRefT< ItemType, DataType > &rhs)
Construit une référence à partir de rhs.
MeshPartialVariableScalarRefT(const VariableBuildInfo &vb)
Construit une référence à la variable spécifiée dans vb.
GroupType itemGroup() const
Groupe associé à la grandeur.
PrivateVariableScalarT(const VariableBuildInfo &vb, const VariableInfo &vi)
Vecteur 1D de données avec sémantique par valeur (style STL).
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.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.