Arcane  v4.1.1.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MeshVariableScalarRef.h
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/* MeshVariableScalarRef.h (C) 2000-2025 */
9/* */
10/* Classe gérant une variable scalaire sur une entité du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MESHVARIABLESCALARREF_H
13#define ARCANE_CORE_MESHVARIABLESCALARREF_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
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34template<typename DataTypeT>
36{
37 public:
39 public:
40 static void add(VarType&,const VarType&,const ItemGroup&) { _notSupported(); }
41 static void sub(VarType&,const VarType&,const ItemGroup&) { _notSupported(); }
42 static void mult(VarType&,const VarType&,const ItemGroup&) { _notSupported(); }
43 static void mult(VarType&,const DataTypeT&,const ItemGroup&) { _notSupported(); }
44 static void power(VarType&,const DataTypeT&,const ItemGroup&) { _notSupported(); }
45 static void _notSupported()
46 { ARCANE_FATAL("ItemNumeraticOperation: operation not supported"); }
47};
48
49/*---------------------------------------------------------------------------*/
50/*---------------------------------------------------------------------------*/
51
52template<>
54{
55 public:
56 typedef ItemVariableScalarRefT<Real> VarType;
57 public:
58 static ARCANE_CORE_EXPORT void add (VarType& out,const VarType& v,const ItemGroup& group);
59 static ARCANE_CORE_EXPORT void sub (VarType& out,const VarType& v,const ItemGroup& group);
60 static ARCANE_CORE_EXPORT void mult (VarType& out,const VarType& v,const ItemGroup& group);
61 static ARCANE_CORE_EXPORT void mult (VarType& out,Real v,const ItemGroup& group);
62 static ARCANE_CORE_EXPORT void power(VarType& out,Real v,const ItemGroup& group);
63};
64
65/*---------------------------------------------------------------------------*/
66/*---------------------------------------------------------------------------*/
71template<typename DataTypeT>
73: public PrivateVariableScalarT<DataTypeT>
74{
75 public:
76
77 typedef DataTypeT DataType;
78 typedef UniqueArray<DataTypeT> ValueType;
79 typedef const DataTypeT& ConstReturnReferenceType;
80 typedef DataTypeT& ReturnReferenceType;
81
82 typedef ArrayView<DataTypeT> ArrayBase;
83 typedef PrivateVariableScalarT<DataTypeT> BaseClass;
84 typedef typename BaseClass::PrivatePartType PrivatePartType;
85 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
86
87 public:
88
90 ARCANE_CORE_EXPORT ItemVariableScalarRefT(const VariableBuildInfo& b,eItemKind ik);
91
93 explicit ARCANE_CORE_EXPORT ItemVariableScalarRefT(IVariable* var);
94
97
98 protected:
99
101 ARCANE_CORE_EXPORT void operator=(const ItemVariableScalarRefT<DataTypeT>& rhs);
102
103#ifdef ARCANE_DOTNET
104 public:
105#else
106 protected:
107#endif
108
111
112 public:
113
114 void add(const ItemVariableScalarRefT<DataTypeT>& v)
115 {
116 add(v,this->itemGroup());
117 }
118 void sub(const ItemVariableScalarRefT<DataTypeT>& v)
119 {
120 sub(v,this->itemGroup());
121 }
122 void mult(const ItemVariableScalarRefT<DataTypeT>& v)
123 {
124 mult(v,this->itemGroup());
125 }
126 void mult(const DataTypeT& v)
127 {
128 mult(v,this->itemGroup());
129 }
130 void copy(const ItemVariableScalarRefT<DataTypeT>& v)
131 {
132 copy(v,this->itemGroup());
133 }
134 void power(const DataTypeT& v)
135 {
136 power(v,this->itemGroup());
137 }
138
139 void add(const ItemVariableScalarRefT<DataTypeT>& v,const ItemGroup& group)
140 {
141 ItemNumericOperation<DataTypeT>::add(*this,v,group);
142 }
143 void sub(const ItemVariableScalarRefT<DataTypeT>& v,const ItemGroup& group)
144 {
145 ItemNumericOperation<DataTypeT>::sub(*this,v,group);
146 }
147 void mult(const ItemVariableScalarRefT<DataTypeT>& v,const ItemGroup& group)
148 {
149 ItemNumericOperation<DataTypeT>::mult(*this,v,group);
150 }
151 void mult(const DataTypeT& v,const ItemGroup& group)
152 {
153 ItemNumericOperation<DataTypeT>::mult(*this,v,group);
154 }
155 void power(const DataTypeT& v,const ItemGroup& group)
156 {
157 ItemNumericOperation<DataTypeT>::power(*this,v,group);
158 }
159
161 ARCANE_CORE_EXPORT void copy(const ItemVariableScalarRefT<DataTypeT>& v,const ItemGroup& group);
162 ARCANE_CORE_EXPORT void fill(const DataTypeT& value);
163 ARCANE_CORE_EXPORT void fill(const DataTypeT& value,const ItemGroup& group);
164
170 ARCANE_CORE_EXPORT void copy(const ItemVariableScalarRefT<DataTypeT>& v,RunQueue* queue);
176 ARCANE_CORE_EXPORT void fill(const DataTypeT& value,RunQueue* queue);
177
178 public:
179
181 const DataType& operator[](ItemLocalId item) const { return this->_value(item.localId()); }
182
184 DataTypeReturnReference operator[](ItemLocalId item) { return this->_value(item.localId()); }
185
187 const DataType& operator()(ItemLocalId item) const { return this->_value(item.localId()); }
188
190 DataTypeReturnReference operator()(ItemLocalId item) { return this->_value(item.localId()); }
191
192 public:
193
194 static ARCANE_CORE_EXPORT VariableInfo _internalVariableInfo(const VariableBuildInfo& vbi,eItemKind ik);
195 static ARCANE_CORE_EXPORT VariableTypeInfo _internalVariableTypeInfo(eItemKind ik);
196};
197
198/*---------------------------------------------------------------------------*/
199/*---------------------------------------------------------------------------*/
204template<typename ItemTypeT,typename DataTypeT>
206: public ItemVariableScalarRefT<DataTypeT>
207{
208 public:
209
210 typedef DataTypeT DataType;
211 typedef ItemTypeT ItemType;
212 typedef UniqueArray<DataTypeT> ValueType;
213 typedef const DataTypeT& ConstReturnReferenceType;
214 typedef DataTypeT& ReturnReferenceType;
215
216 protected:
217
218 typedef typename ItemType::LocalIdType ItemLocalIdType;
219 typedef ItemVariableScalarRefT<DataTypeT> BaseClass;
220
221 typedef typename ItemTraitsT<ItemType>::ItemGroupType GroupType;
223 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
224
225 public:
226
228 ARCANE_CORE_EXPORT MeshVariableScalarRefT(const VariableBuildInfo& vb);
230 explicit ARCANE_CORE_EXPORT MeshVariableScalarRefT(IVariable* var);
233
235 ARCANE_CORE_EXPORT void refersTo(const MeshVariableScalarRefT<ItemType,DataTypeT>& rhs);
236
237 ThatClass& operator=(const ThatClass& rhs) = delete;
238
239#ifdef ARCANE_DOTNET
240 public:
241#else
242 protected:
243#endif
244
247 ThatClass& _Internal() { return *this; }
248
249 public:
250
251 void fill(const DataTypeT& value) { BaseClass::fill(value); }
252 void fill(const DataTypeT& value,RunQueue* queue) { BaseClass::fill(value,queue); }
253 void fill(const DataTypeT& value,const GroupType& group) { BaseClass::fill(value,group); }
254
256
258 ARCANE_CORE_EXPORT GroupType itemGroup() const;
259
260 ARCANE_CORE_EXPORT void setIsSynchronized();
261 ARCANE_CORE_EXPORT void setIsSynchronized(const GroupType& group);
262
263 public:
264
266 const DataTypeT& operator[](ItemLocalIdType i) const { return this->_value(i.localId()); }
267
269 DataTypeReturnReference operator[](ItemLocalIdType i) { return this->_value(i.localId()); }
270
272 const DataTypeT& operator()(ItemLocalIdType i) const { return this->_value(i.localId()); }
273
275 DataTypeReturnReference operator()(ItemLocalIdType i) { return this->_value(i.localId()); }
276
278 DataTypeT& getReference(ItemLocalIdType item)
279 {
280 return this->_value(item.localId());
281 }
282
283 const DataTypeT& item(ItemLocalIdType i) const
284 {
285 return this->_value(i.localId());
286 }
287 void setItem(ItemLocalIdType i,const DataTypeT& v)
288 {
289 this->_value(i.localId()) = v;
290 }
291#ifdef ARCANE_DOTNET_WRAPPER
292 const DataTypeT& item(Int32 i) const
293 {
294 return this->_value(i);
295 }
296 void setItem(Int32 i,const DataTypeT& v)
297 {
298 this->_value(i) = v;
299 }
300#endif
301
302 public:
303
304 static ARCANE_CORE_EXPORT VariableTypeInfo _internalVariableTypeInfo();
305 static ARCANE_CORE_EXPORT VariableInfo _internalVariableInfo(const VariableBuildInfo& vbi);
306
307 private:
308
309 static VariableFactoryRegisterer m_auto_registerer;
310 static VariableRef* _autoCreate(const VariableBuildInfo& vb);
311};
312
313/*---------------------------------------------------------------------------*/
314/*---------------------------------------------------------------------------*/
315
316} // End namespace Arcane
317
318/*---------------------------------------------------------------------------*/
319/*---------------------------------------------------------------------------*/
320
321#endif
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Types et macros pour itérer sur les entités du maillage.
Vue modifiable d'un tableau d'un type T.
Interface d'une variable.
Definition IVariable.h:39
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Index d'un Item dans une variable.
Definition ItemLocalId.h:41
Caractéristiques des éléments du maillage.
Definition ItemTypes.h:621
Variable scalaire sur un type d'entité du maillage.
ItemVariableScalarRefT(IVariable *var)
Construit une référence à partir de var.
void operator=(const ItemVariableScalarRefT< DataTypeT > &rhs)
Positionne la référence de l'instance à la variable rhs.
ItemVariableScalarRefT(const ItemVariableScalarRefT< DataTypeT > &rhs)
Construit une référence à partir de rhs.
const DataType & operator[](ItemLocalId item) const
Valeur non modifiable de l'entité item.
DataTypeReturnReference operator[](ItemLocalId item)
Valeur modifiable de l'entité item.
void fill(const DataTypeT &value, RunQueue *queue)
Remplit les valeurs de l'instance par value via la file queue.
DataTypeReturnReference operator()(ItemLocalId item)
Valeur modifiable de l'entité item.
void copy(const ItemVariableScalarRefT< DataTypeT > &v, RunQueue *queue)
Copie les valeurs de v dans cette variable via la file queue.
ItemVariableScalarRefT(const VariableBuildInfo &b, eItemKind ik)
Construit une référence à la variable spécifiée dans vb.
const DataType & operator()(ItemLocalId item) const
Valeur non modifiable de l'entité item.
void copy(const ItemVariableScalarRefT< DataTypeT > &v, const ItemGroup &group)
Copie pour les entités de group, les valeurs de v dans cette variable.
DataTypeReturnReference operator[](ItemLocalIdType i)
Valeur modifiable de l'entité item.
GroupType itemGroup() const
Groupe associé à la grandeur.
DataTypeReturnReference operator()(ItemLocalIdType i)
Valeur modifiable de l'entité item.
MeshVariableScalarRefT(const VariableBuildInfo &vb)
Construit une référence à la variable spécifiée dans vb.
DataTypeT & getReference(ItemLocalIdType item)
Valeur modifiable de l'entité item.
void refersTo(const MeshVariableScalarRefT< ItemType, DataTypeT > &rhs)
Positionne la référence de l'instance à la variable rhs.
void swapValues(MeshVariableScalarRefT< ItemType, DataType > &rhs)
Échange les valeurs de la variable rhs avec celles de l'instance.
MeshVariableScalarRefT(const MeshVariableScalarRefT< ItemType, DataTypeT > &rhs)
Construit une référence à partir de rhs.
const DataTypeT & operator[](ItemLocalIdType i) const
Valeur non modifiable de l'entité item.
MeshVariableScalarRefT(IVariable *var)
Construit une référence à partir de var.
const DataTypeT & operator()(ItemLocalIdType i) const
Valeur non modifiable de l'entité item.
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.
VariableRef(const VariableBuildInfo &vbi)
Construit une référence sur une variable avec les infos vbi.
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.
double Real
Type représentant un réel.
std::int32_t Int32
Type entier signé sur 32 bits.