Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
Real2.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/* Real2.h (C) 2000-2024 */
9/* */
10/* Vecteur à 2 dimensions de 'Real'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_DATATYPE_REAL2_H
13#define ARCANE_DATATYPE_REAL2_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Numeric.h"
18
19#include <iosfwd>
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
31{
32 public:
33
34 Real x;
35 Real y;
36
46 ARCCORE_HOST_DEVICE Real operator[](Integer i) const
47 {
48 ARCCORE_CHECK_AT(i, 2);
49 return (&x)[i];
50 }
51
61 ARCCORE_HOST_DEVICE Real operator()(Integer i) const
62 {
63 ARCCORE_CHECK_AT(i, 2);
64 return (&x)[i];
65 }
66
76 ARCCORE_HOST_DEVICE Real& operator[](Integer i)
77 {
78 ARCCORE_CHECK_AT(i, 2);
79 return (&x)[i];
80 }
81
91 ARCCORE_HOST_DEVICE Real& operator()(Integer i)
92 {
93 ARCCORE_CHECK_AT(i, 2);
94 return (&x)[i];
95 }
96
98 ARCCORE_HOST_DEVICE void setComponent(Integer i, Real value)
99 {
100 ARCCORE_CHECK_AT(i, 2);
101 (&x)[i] = value;
102 }
103};
104
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
119class ARCANE_UTILS_EXPORT Real2
120: public Real2POD
121{
122 public:
123
125 constexpr ARCCORE_HOST_DEVICE Real2()
126 : Real2POD()
127 {
128 x = 0.;
129 y = 0.;
130 }
132 constexpr ARCCORE_HOST_DEVICE Real2(Real ax, Real ay)
133 : Real2POD()
134 {
135 x = ax;
136 y = ay;
137 }
139 Real2(const Real2& f) = default;
141 constexpr ARCCORE_HOST_DEVICE explicit Real2(const Real2POD& f)
142 : Real2POD()
143 {
144 x = f.x;
145 y = f.y;
146 }
147
149 constexpr ARCCORE_HOST_DEVICE explicit Real2(Real v)
150 : Real2POD()
151 {
152 x = y = v;
153 }
154
156 inline constexpr ARCCORE_HOST_DEVICE explicit Real2(const Real3& v);
157
158 Real2& operator=(const Real2& f) = default;
159
161 constexpr ARCCORE_HOST_DEVICE Real2& operator=(Real v)
162 {
163 x = y = v;
164 return (*this);
165 }
166
167 public:
168
169 constexpr ARCCORE_HOST_DEVICE static Real2 null() { return Real2(0., 0.); }
170
171 public:
172
174 constexpr ARCCORE_HOST_DEVICE Real2 copy() const { return (*this); }
176 constexpr ARCCORE_HOST_DEVICE Real2& reset()
177 {
178 x = y = 0.0;
179 return (*this);
180 }
182 constexpr ARCCORE_HOST_DEVICE Real2& assign(Real ax, Real ay)
183 {
184 x = ax;
185 y = ay;
186 return (*this);
187 }
189 constexpr ARCCORE_HOST_DEVICE Real2& assign(Real2 f)
190 {
191 x = f.x;
192 y = f.y;
193 return (*this);
194 }
201 constexpr ARCCORE_HOST_DEVICE bool isNearlyZero() const
202 {
203 return math::isNearlyZero(x) && math::isNearlyZero(y);
204 }
205
207 constexpr ARCCORE_HOST_DEVICE Real squareNormL2() const { return x * x + y * y; }
209 ARCCORE_HOST_DEVICE Real normL2() const { return _sqrt(squareNormL2()); }
210
212 ARCCORE_DEPRECATED_2021("Use squareNormL2() instead")
213 ARCCORE_HOST_DEVICE Real abs2() const { return x * x + y * y; }
215 ARCCORE_DEPRECATED_2021("Use normL2() instead")
216 ARCCORE_HOST_DEVICE Real abs() const { return _sqrt(squareNormL2()); }
218 ARCCORE_HOST_DEVICE Real2 absolute() const { return Real2(math::abs(x), math::abs(y)); }
219
224 std::istream& assign(std::istream& i);
226 std::ostream& print(std::ostream& o) const;
228 std::ostream& printXy(std::ostream& o) const;
229
231 constexpr ARCCORE_HOST_DEVICE Real2& add(Real2 b)
232 {
233 x += b.x;
234 y += b.y;
235 return (*this);
236 }
238 constexpr ARCCORE_HOST_DEVICE Real2& sub(Real2 b)
239 {
240 x -= b.x;
241 y -= b.y;
242 return (*this);
243 }
245 constexpr ARCCORE_HOST_DEVICE Real2& mul(Real2 b)
246 {
247 x *= b.x;
248 y *= b.y;
249 return (*this);
250 }
252 constexpr ARCCORE_HOST_DEVICE Real2& div(Real2 b)
253 {
254 x /= b.x;
255 y /= b.y;
256 return (*this);
257 }
259 constexpr ARCCORE_HOST_DEVICE Real2& addSame(Real b)
260 {
261 x += b;
262 y += b;
263 return (*this);
264 }
266 constexpr ARCCORE_HOST_DEVICE Real2& subSame(Real b)
267 {
268 x -= b;
269 y -= b;
270 return (*this);
271 }
273 constexpr ARCCORE_HOST_DEVICE Real2& mulSame(Real b)
274 {
275 x *= b;
276 y *= b;
277 return (*this);
278 }
280 constexpr ARCCORE_HOST_DEVICE Real2& divSame(Real b)
281 {
282 x /= b;
283 y /= b;
284 return (*this);
285 }
287 constexpr ARCCORE_HOST_DEVICE Real2& operator+=(Real2 b) { return add(b); }
289 constexpr ARCCORE_HOST_DEVICE Real2& operator-=(Real2 b) { return sub(b); }
291 constexpr ARCCORE_HOST_DEVICE Real2& operator*=(Real2 b) { return mul(b); }
293 constexpr ARCCORE_HOST_DEVICE void operator*=(Real b)
294 {
295 x *= b;
296 y *= b;
297 }
299 constexpr ARCCORE_HOST_DEVICE Real2& operator/=(Real2 b) { return div(b); }
301 constexpr ARCCORE_HOST_DEVICE void operator/=(Real b)
302 {
303 x /= b;
304 y /= b;
305 }
307 constexpr ARCCORE_HOST_DEVICE Real2 operator+(Real2 b) const { return Real2(x + b.x, y + b.y); }
309 constexpr ARCCORE_HOST_DEVICE Real2 operator-(Real2 b) const { return Real2(x - b.x, y - b.y); }
311 constexpr ARCCORE_HOST_DEVICE Real2 operator-() const { return Real2(-x, -y); }
316 constexpr ARCCORE_HOST_DEVICE Real2 operator*(Real2 b) const { return Real2(x * b.x, y * b.y); }
321 constexpr ARCCORE_HOST_DEVICE Real2 operator/(Real2 b) const { return Real2(x / b.x, y / b.y); }
322
331 {
332 Real d = normL2();
333 if (!math::isZero(d))
334 divSame(d);
335 return (*this);
336 }
337
339 friend constexpr ARCCORE_HOST_DEVICE Real2 operator*(Real sca, Real2 vec)
340 {
341 return Real2(vec.x * sca, vec.y * sca);
342 }
343
345 friend constexpr ARCCORE_HOST_DEVICE Real2 operator*(Real2 vec, Real sca)
346 {
347 return Real2(vec.x * sca, vec.y * sca);
348 }
349
351 friend constexpr ARCCORE_HOST_DEVICE Real2 operator/(Real2 vec, Real sca)
352 {
353 return Real2(vec.x / sca, vec.y / sca);
354 }
355
362 friend constexpr ARCCORE_HOST_DEVICE bool operator<(Real2 v1, Real2 v2)
363 {
364 if (v1.x == v2.x) {
365 return v1.y < v2.y;
366 }
367 return (v1.x < v2.x);
368 }
369
371 friend std::ostream& operator<<(std::ostream& o, Real2 t)
372 {
373 return t.printXy(o);
374 }
375
377 friend std::istream& operator>>(std::istream& i, Real2& t)
378 {
379 return t.assign(i);
380 }
381
388 constexpr ARCCORE_HOST_DEVICE bool operator==(Real2 b) const
389 {
390 return _eq(x, b.x) && _eq(y, b.y);
391 }
392
399 constexpr ARCCORE_HOST_DEVICE bool operator!=(Real2 b) const { return !operator==(b); }
400
401 private:
402
408 constexpr ARCCORE_HOST_DEVICE static bool _eq(Real a, Real b) { return math::isEqual(a, b); }
410 ARCCORE_HOST_DEVICE static Real _sqrt(Real a) { return math::sqrt(a); }
411};
412
413/*---------------------------------------------------------------------------*/
414/*---------------------------------------------------------------------------*/
415
416} // End namespace Arcane
417
418/*---------------------------------------------------------------------------*/
419/*---------------------------------------------------------------------------*/
420
421#endif
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Classe gérant un vecteur de réel de dimension 2.
Definition Real2.h:121
constexpr ARCCORE_HOST_DEVICE Real2 operator+(Real2 b) const
Créé un couple qui vaut ce couple ajouté à b.
Definition Real2.h:307
constexpr ARCCORE_HOST_DEVICE Real2 & div(Real2 b)
Divise chaque composante du couple par la composant correspondant de b.
Definition Real2.h:252
constexpr ARCCORE_HOST_DEVICE Real2 operator-(Real2 b) const
Créé un couple qui vaut b soustrait de ce couple.
Definition Real2.h:309
constexpr ARCCORE_HOST_DEVICE Real2 & divSame(Real b)
Divise chaque composante du couple par b.
Definition Real2.h:280
constexpr static ARCCORE_HOST_DEVICE bool _eq(Real a, Real b)
Compare les valeurs de a et b avec le comparateur TypeEqualT.
Definition Real2.h:408
friend constexpr ARCCORE_HOST_DEVICE Real2 operator*(Real sca, Real2 vec)
Multiplication par un scalaire.
Definition Real2.h:339
ARCCORE_HOST_DEVICE Real2 absolute() const
Valeur absolue composante par composante.
Definition Real2.h:218
constexpr ARCCORE_HOST_DEVICE bool operator!=(Real2 b) const
Compare deux couples. Pour la notion d'égalité, voir operator==()
Definition Real2.h:399
constexpr ARCCORE_HOST_DEVICE Real2 & assign(Real ax, Real ay)
Affecte à l'instance le couple (ax,ay,az)
Definition Real2.h:182
constexpr ARCCORE_HOST_DEVICE Real2 & mulSame(Real b)
Multiplie chaque composante du couple par b.
Definition Real2.h:273
constexpr ARCCORE_HOST_DEVICE Real2 & operator*=(Real2 b)
Multiplie chaque composante du couple par la composant correspondant de b.
Definition Real2.h:291
constexpr ARCCORE_HOST_DEVICE Real2 & operator/=(Real2 b)
Divise chaque composante du couple par la composant correspondant de b.
Definition Real2.h:299
friend std::ostream & operator<<(std::ostream &o, Real2 t)
Ecrit le couple t sur le flot o.
Definition Real2.h:371
constexpr ARCCORE_HOST_DEVICE Real2 & reset()
Réinitialise le couple avec les constructeurs par défaut.
Definition Real2.h:176
constexpr ARCCORE_HOST_DEVICE void operator/=(Real b)
Divise chaque composante du couple par le réel b.
Definition Real2.h:301
friend constexpr ARCCORE_HOST_DEVICE bool operator<(Real2 v1, Real2 v2)
Opérateur de comparaison.
Definition Real2.h:362
constexpr ARCCORE_HOST_DEVICE Real2 & operator-=(Real2 b)
Soustrait b au couple.
Definition Real2.h:289
constexpr ARCCORE_HOST_DEVICE Real2 operator*(Real2 b) const
Créé un couple qui vaut ce couple dont chaque composant a été multipliée par la composante correspond...
Definition Real2.h:316
friend std::istream & operator>>(std::istream &i, Real2 &t)
Lit le couple t à partir du flot o.
Definition Real2.h:377
friend constexpr ARCCORE_HOST_DEVICE Real2 operator*(Real2 vec, Real sca)
Multiplication par un scalaire.
Definition Real2.h:345
constexpr ARCCORE_HOST_DEVICE Real2(const Real2POD &f)
Construit un coupe identique à f.
Definition Real2.h:141
constexpr ARCCORE_HOST_DEVICE Real2 & add(Real2 b)
Ajoute b au couple.
Definition Real2.h:231
constexpr ARCCORE_HOST_DEVICE Real2 & assign(Real2 f)
Copie le couple f.
Definition Real2.h:189
constexpr ARCCORE_HOST_DEVICE Real2 operator-() const
Créé un couple opposé au couple actuel.
Definition Real2.h:311
constexpr ARCCORE_HOST_DEVICE bool operator==(Real2 b) const
Compare composant pas composante l'instance courante à b.
Definition Real2.h:388
constexpr ARCCORE_HOST_DEVICE Real2(Real v)
Construit l'instance avec le triplet (v,v,v).
Definition Real2.h:149
constexpr ARCCORE_HOST_DEVICE Real2 operator/(Real2 b) const
Créé un couple qui vaut ce couple dont chaque composant a été divisée par la composante correspondant...
Definition Real2.h:321
constexpr ARCCORE_HOST_DEVICE Real2 copy() const
Retourne une copie du couple.
Definition Real2.h:174
constexpr ARCCORE_HOST_DEVICE Real2 & mul(Real2 b)
Multiple chaque composante du couple par la composant correspondant de b.
Definition Real2.h:245
constexpr ARCCORE_HOST_DEVICE Real2 & addSame(Real b)
Ajoute b à chaque composante du couple.
Definition Real2.h:259
constexpr ARCCORE_HOST_DEVICE Real2(Real ax, Real ay)
Construit le couplet (ax,ay)
Definition Real2.h:132
constexpr ARCCORE_HOST_DEVICE void operator*=(Real b)
Multiplie chaque composante du couple par le réel b.
Definition Real2.h:293
static ARCCORE_HOST_DEVICE Real _sqrt(Real a)
Retourne la racine carrée de a.
Definition Real2.h:410
Real2 & normalize()
Normalise le couple.
Definition Real2.h:330
constexpr ARCCORE_HOST_DEVICE bool isNearlyZero() const
Indique si l'instance est proche de l'instance nulle.
Definition Real2.h:201
constexpr ARCCORE_HOST_DEVICE Real2 & subSame(Real b)
Soustrait b à chaque composante du couple.
Definition Real2.h:266
ARCCORE_HOST_DEVICE Real normL2() const
Retourne la norme du couple .
Definition Real2.h:209
constexpr ARCCORE_HOST_DEVICE Real2()
Construit le vecteur nul.
Definition Real2.h:125
constexpr ARCCORE_HOST_DEVICE Real2 & operator=(Real v)
Affecte à l'instance le couple (v,v).
Definition Real2.h:161
constexpr ARCCORE_HOST_DEVICE Real2 & sub(Real2 b)
Soustrait b au couple.
Definition Real2.h:238
constexpr ARCCORE_HOST_DEVICE Real squareNormL2() const
Retourne la norme au carré du couple .
Definition Real2.h:207
constexpr ARCCORE_HOST_DEVICE Real2 & operator+=(Real2 b)
Ajoute b au couple.
Definition Real2.h:287
Real2(const Real2 &f)=default
Construit un couple identique à f.
friend constexpr ARCCORE_HOST_DEVICE Real2 operator/(Real2 vec, Real sca)
Division par un scalaire.
Definition Real2.h:351
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Espace de nom pour l'utilisation des accélérateurs.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Real y
deuxième composante du couple
Definition Real2.h:35
ARCCORE_HOST_DEVICE void setComponent(Integer i, Real value)
Positionne la i-ème composante à value.
Definition Real2.h:98
Real x
première composante du couple
Definition Real2.h:34
ARCCORE_HOST_DEVICE Real operator[](Integer i) const
Definition Real2.h:46
ARCCORE_HOST_DEVICE Real & operator()(Integer i)
Definition Real2.h:91
ARCCORE_HOST_DEVICE Real & operator[](Integer i)
Definition Real2.h:76
ARCCORE_HOST_DEVICE Real operator()(Integer i) const
Definition Real2.h:61