12#ifndef ARCANE_CORE_MESHVARIABLESCALARREF_H
13#define ARCANE_CORE_MESHVARIABLESCALARREF_H
17#include "arcane/utils/FatalErrorException.h"
19#include "arcane/core/MeshVariableRef.h"
20#include "arcane/core/PrivateVariableScalar.h"
22#include "arcane/core/ItemGroupRangeIterator.h"
23#include "arcane/core/ItemPairEnumerator.h"
34template<
typename DataTypeT>
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"); }
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);
71template<
typename DataTypeT>
77 typedef DataTypeT DataType;
79 typedef const DataTypeT& ConstReturnReferenceType;
80 typedef DataTypeT& ReturnReferenceType;
84 typedef typename BaseClass::PrivatePartType PrivatePartType;
85 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
116 add(v,this->itemGroup());
118 void sub(
const ItemVariableScalarRefT<DataTypeT>& v)
120 sub(v,this->itemGroup());
122 void mult(
const ItemVariableScalarRefT<DataTypeT>& v)
124 mult(v,this->itemGroup());
126 void mult(
const DataTypeT& v)
128 mult(v,this->itemGroup());
130 void copy(
const ItemVariableScalarRefT<DataTypeT>& v)
132 copy(v,this->itemGroup());
134 void power(
const DataTypeT& v)
136 power(v,this->itemGroup());
139 void add(
const ItemVariableScalarRefT<DataTypeT>& v,
const ItemGroup& group)
141 ItemNumericOperation<DataTypeT>::add(*
this,v,group);
143 void sub(
const ItemVariableScalarRefT<DataTypeT>& v,
const ItemGroup& group)
145 ItemNumericOperation<DataTypeT>::sub(*
this,v,group);
147 void mult(
const ItemVariableScalarRefT<DataTypeT>& v,
const ItemGroup& group)
149 ItemNumericOperation<DataTypeT>::mult(*
this,v,group);
151 void mult(
const DataTypeT& v,
const ItemGroup& group)
153 ItemNumericOperation<DataTypeT>::mult(*
this,v,group);
155 void power(
const DataTypeT& v,
const ItemGroup& group)
157 ItemNumericOperation<DataTypeT>::power(*
this,v,group);
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);
170 ARCANE_CORE_EXPORT
void copy(
const ItemVariableScalarRefT<DataTypeT>& v,RunQueue* queue);
176 ARCANE_CORE_EXPORT
void fill(
const DataTypeT& value,RunQueue* queue);
204template<
typename ItemTypeT,
typename DataTypeT>
210 typedef DataTypeT DataType;
211 typedef ItemTypeT ItemType;
213 typedef const DataTypeT& ConstReturnReferenceType;
214 typedef DataTypeT& ReturnReferenceType;
218 typedef typename ItemType::Index ItemIndexType;
219 typedef typename ItemType::LocalIdType ItemLocalIdType;
224 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
248 ThatClass& _Internal() {
return *
this; }
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); }
256 ARCANE_CORE_EXPORT
void swapValues(MeshVariableScalarRefT<ItemType,DataType>& rhs);
259 ARCANE_CORE_EXPORT GroupType
itemGroup()
const;
261 ARCANE_CORE_EXPORT
void setIsSynchronized();
262 ARCANE_CORE_EXPORT
void setIsSynchronized(
const GroupType& group);
267 const DataTypeT&
operator[](ItemLocalIdType i)
const {
return this->_value(i.localId()); }
270 DataTypeReturnReference
operator[](ItemLocalIdType i) {
return this->_value(i.localId()); }
273 const DataTypeT&
operator()(ItemLocalIdType i)
const {
return this->_value(i.localId()); }
276 DataTypeReturnReference
operator()(ItemLocalIdType i) {
return this->_value(i.localId()); }
281 return this->_value(item.localId());
284 const DataTypeT& item(ItemLocalIdType i)
const
286 return this->_value(i.localId());
288 void setItem(ItemLocalIdType i,
const DataTypeT& v)
290 this->_value(i.localId()) = v;
292#ifdef ARCANE_DOTNET_WRAPPER
293 const DataTypeT& item(Int32 i)
const
295 return this->_value(i);
297 void setItem(Int32 i,
const DataTypeT& v)
305 static ARCANE_CORE_EXPORT VariableTypeInfo _internalVariableTypeInfo();
306 static ARCANE_CORE_EXPORT VariableInfo _internalVariableInfo(
const VariableBuildInfo& vbi);
310 static VariableFactoryRegisterer m_auto_registerer;
311 static VariableRef* _autoCreate(
const VariableBuildInfo& vb);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Groupe d'entités de maillage.
Index d'un Item dans une variable.
Variable scalaire sur un type d'entité du maillage.
void operator=(const ItemVariableScalarRefT< DataTypeT > &rhs)
Positionne la référence de l'instance à la variable rhs.
ItemVariableScalarRefT()
Constructeur vide.
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.
Variable scalaire sur un type d'entité du maillage.
DataTypeReturnReference operator[](ItemLocalIdType i)
Valeur modifiable de l'entité item.
MeshVariableScalarRefT()
Constructeur vide.
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.
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.