Arcane  v3.14.10.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-2023 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-2023 */
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:
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;
81
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;
213 typedef const DataTypeT& ConstReturnReferenceType;
215
216 protected:
217
218 typedef typename ItemType::Index ItemIndexType;
219 typedef typename ItemType::LocalIdType ItemLocalIdType;
221
222 typedef typename ItemTraitsT<ItemType>::ItemGroupType GroupType;
224 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
225
226 public:
227
229 ARCANE_CORE_EXPORT MeshVariableScalarRefT(const VariableBuildInfo& vb);
231 explicit ARCANE_CORE_EXPORT MeshVariableScalarRefT(IVariable* var);
234
236 ARCANE_CORE_EXPORT void refersTo(const MeshVariableScalarRefT<ItemType,DataTypeT>& rhs);
237
238 ThatClass& operator=(const ThatClass& rhs) = delete;
239
240#ifdef ARCANE_DOTNET
241 public:
242#else
243 protected:
244#endif
245
248 ThatClass& _Internal() { return *this; }
249
250 public:
251
252 void fill(const DataTypeT& value) { BaseClass::fill(value); }
253 void fill(const DataTypeT& value,RunQueue* queue) { BaseClass::fill(value,queue); }
254 void fill(const DataTypeT& value,const GroupType& group) { BaseClass::fill(value,group); }
255
256 ARCANE_CORE_EXPORT void swapValues(MeshVariableScalarRefT<ItemType,DataType>& rhs);
257
259 ARCANE_CORE_EXPORT GroupType itemGroup() const;
260
261 ARCANE_CORE_EXPORT void setIsSynchronized();
262 ARCANE_CORE_EXPORT void setIsSynchronized(const GroupType& group);
263
264 public:
265
267 const DataTypeT& operator[](ItemLocalIdType i) const { return this->_value(i.localId()); }
268
270 DataTypeReturnReference operator[](ItemLocalIdType i) { return this->_value(i.localId()); }
271
273 const DataTypeT& operator()(ItemLocalIdType i) const { return this->_value(i.localId()); }
274
276 DataTypeReturnReference operator()(ItemLocalIdType i) { return this->_value(i.localId()); }
277
279 DataTypeT& getReference(ItemLocalIdType item)
280 {
281 return this->_value(item.localId());
282 }
283
284 const DataTypeT& item(ItemLocalIdType i) const
285 {
286 return this->_value(i.localId());
287 }
288 void setItem(ItemLocalIdType i,const DataTypeT& v)
289 {
290 this->_value(i.localId()) = v;
291 }
292#ifdef ARCANE_DOTNET_WRAPPER
293 const DataTypeT& item(Int32 i) const
294 {
295 return this->_value(i);
296 }
297 void setItem(Int32 i,const DataTypeT& v)
298 {
299 this->_value(i) = v;
300 }
301#endif
302
303 public:
304
305 static ARCANE_CORE_EXPORT VariableTypeInfo _internalVariableTypeInfo();
306 static ARCANE_CORE_EXPORT VariableInfo _internalVariableInfo(const VariableBuildInfo& vbi);
307
308 private:
309
310 static VariableFactoryRegisterer m_auto_registerer;
311 static VariableRef* _autoCreate(const VariableBuildInfo& vb);
312};
313
314/*---------------------------------------------------------------------------*/
315/*---------------------------------------------------------------------------*/
316
317} // End namespace Arcane
318
319/*---------------------------------------------------------------------------*/
320/*---------------------------------------------------------------------------*/
321
322#endif
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Types et macros pour itérer sur les entités du maillage.
Interface d'une variable.
Definition IVariable.h:54
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Index d'un Item dans une variable.
Definition ItemLocalId.h:40
Caractéristiques des éléments du maillage.
Definition ItemTypes.h:621
void operator=(const ItemVariableScalarRefT< DataTypeT > &rhs)
Positionne la référence de l'instance à la variable rhs.
const DataType & operator[](ItemLocalId item) const
Valeur non modifiable de l'entité item.
DataTypeReturnReference operator[](ItemLocalId item)
Valeur modifiable de l'entité item.
DataTypeReturnReference operator()(ItemLocalId item)
Valeur modifiable de l'entité item.
const DataType & operator()(ItemLocalId item) const
Valeur non modifiable de l'entité item.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Variable scalaire sur un type d'entité du maillage.
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.
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.
const DataTypeT & operator[](ItemLocalIdType i) const
Valeur non modifiable de l'entité item.
const DataTypeT & operator()(ItemLocalIdType i) const
Valeur non modifiable de l'entité item.
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.
VariableRef(const VariableBuildInfo &vbi)
Construit une référence sur une variable avec les infos vbi.
Informations caractérisant le type d'une variable.
Vue modifiable d'un tableau d'un type T.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.