Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
VariableRefScalar.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* VariableRefScalar.h (C) 2000-2020 */
9/* */
10/* Classe gérant une référence sur une variable scalaire. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_VARIABLEREFSCALAR_H
13#define ARCANE_VARIABLEREFSCALAR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/VariableRef.h"
18#include "arcane/Parallel.h"
19#include "arcane/MathUtils.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27class VariableFactoryRegisterer;
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
40template<typename DataType>
42: public VariableRef
43{
44 public:
45
47 typedef DataType ElementType;
50
52
54
55 public:
56
58 explicit ARCANE_CORE_EXPORT VariableRefScalarT(const VariableBuildInfo& b);
60 ARCANE_CORE_EXPORT VariableRefScalarT(const VariableRefScalarT<DataType>& rhs);
62 explicit ARCANE_CORE_EXPORT VariableRefScalarT(IVariable* var);
64 ARCANE_CORE_EXPORT void refersTo(const VariableRefScalarT<DataType>& rhs);
65
66#ifdef ARCANE_DOTNET
67 public:
68#else
69 protected:
70#endif
71
73 VariableRefScalarT() : m_private_part(nullptr) {}
74
75 public:
76
77 virtual bool isArrayVariable() const { return false; }
78 virtual Integer arraySize() const { return 0; }
79 virtual ARCANE_CORE_EXPORT void updateFromInternal();
80
81 public:
82
83 ArrayView<DataType> asArray() { return ArrayView<DataType>(1,&(m_private_part->value())); }
84 ConstArrayView<DataType> asArray() const { return ConstArrayView<DataType>(1,&(m_private_part->value())); }
85
86 public:
87
88 void operator=(const DataType& v) { assign(v); }
89 VariableRefScalarT<DataType>& operator=(const VariableRefScalarT<DataType>& v)
90 {
91 assign(v());
92 return (*this);
93 }
94
96 void reset() { assign(DataType()); }
97
99 const DataType& operator()() const { return m_private_part->value(); }
100
102 const DataType& value() const { return m_private_part->value(); }
103
107 bool isEqual(const DataType& v) const
108 { return math::isEqual(m_private_part->value(),v); }
109
114 bool isZero() const
115 { return math::isZero(m_private_part->value()); }
116
123 bool isNearlyEqual(const DataType& v) const
124 { return math::isNearlyEqual(m_private_part->value(),v); }
129 bool isNearlyZero() const
130 { return math::isNearlyZero(m_private_part->value()); }
131
133 ARCANE_CORE_EXPORT void assign(const DataType& v);
134
136 ARCANE_CORE_EXPORT void reduce(Parallel::eReduceType type);
137
138 ARCANE_CORE_EXPORT void swapValues(VariableRefScalarT<DataType>& rhs);
139
140 protected:
141
142 private:
143
144 PrivatePartType* m_private_part;
145
146 private:
147
148 static VariableFactoryRegisterer m_auto_registerer;
149 static VariableTypeInfo _buildVariableTypeInfo();
150 static VariableInfo _buildVariableInfo(const VariableBuildInfo& vbi);
151 static VariableRef* _autoCreate(const VariableBuildInfo& vb);
152};
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
156
157} // End namespace Arcane
158
159/*---------------------------------------------------------------------------*/
160/*---------------------------------------------------------------------------*/
161
162#endif
Interface d'une variable.
Definition IVariable.h:54
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Paramètres nécessaires à la construction d'une variable.
Enregistreur d'une fabrique de variables.
Infos caractérisant une variable.
Référence à une variable scalaire.
void refersTo(const VariableRefScalarT< DataType > &rhs)
Positionne la référence de l'instance à la variable rhs.
const DataType & value() const
Valeur du scalaire.
void swapValues(VariableRefScalarT< DataType > &rhs)
Échange les valeurs de la variable rhs avec celles de l'instance.
virtual Integer arraySize() const
Si la variable est un tableau, retourne sa dimension, sinon retourne 0.
bool isNearlyZero() const
Compare la variable avec la valeur 0.
const DataType & operator()() const
Valeur du scalaire.
void reset()
Réinitialise la variable avec sa valeur par défaut.
VariableRefScalarT()
Constructeur vide.
bool isEqual(const DataType &v) const
Compare la variable avec la valeur v.
bool isNearlyEqual(const DataType &v) const
Compare la variable avec la valeur v.
void reduce(Parallel::eReduceType type)
Effectue une réduction de type type sur la variable.
VariableRef BaseClass
Type de la classe de base.
bool isZero() const
Compare la variable avec la valeur 0.
void assign(const DataType &v)
Affecte à la variable la valeur v.
virtual void updateFromInternal()
Mise à jour à partir de la partie interne.
DataType ElementType
Type des éléments de la variable.
Référence à une variable.
Definition VariableRef.h:56
Informations caractérisant le type d'une variable.
constexpr ARCCORE_HOST_DEVICE bool isEqual(const _Type &a, const _Type &b)
Teste l'égalité bit à bit entre deux valeurs.
Definition Numeric.h:253
constexpr ARCCORE_HOST_DEVICE bool isNearlyEqual(const _Type &a, const _Type &b)
Teste si deux valeurs sont à un peu près égales. Pour les types entiers, cette fonction est équivalen...
Definition Numeric.h:212
bool isZero(const BuiltInProxy< _Type > &a)
Teste si une valeur est exactement égale à zéro.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eReduceType
Types des réductions supportées.