Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
Real3.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/* Real3.h (C) 2000-2024 */
9/* */
10/* Vecteur à 3 dimensions. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_REAL3_H
13#define ARCANE_UTILS_REAL3_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Numeric.h"
18#include "arcane/utils/Real2.h"
19
20#include <iosfwd>
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
32{
33 public:
34
35 Real x;
36 Real y;
37 Real z;
38
48 ARCCORE_HOST_DEVICE Real operator[](Integer i) const
49 {
50 ARCCORE_CHECK_AT(i, 3);
51 return (&x)[i];
52 }
53
63 ARCCORE_HOST_DEVICE Real operator()(Integer i) const
64 {
65 ARCCORE_CHECK_AT(i, 3);
66 return (&x)[i];
67 }
68
78 ARCCORE_HOST_DEVICE Real& operator[](Integer i)
79 {
80 ARCCORE_CHECK_AT(i,3);
81 return (&x)[i];
82 }
83
93 ARCCORE_HOST_DEVICE Real& operator()(Integer i)
94 {
95 ARCCORE_CHECK_AT(i,3);
96 return (&x)[i];
97 }
98
100 ARCCORE_HOST_DEVICE void setComponent(Integer i, Real value)
101 {
102 ARCCORE_CHECK_AT(i, 3);
103 (&x)[i] = value;
104 }
105};
106
107/*---------------------------------------------------------------------------*/
108/*---------------------------------------------------------------------------*/
130class ARCANE_UTILS_EXPORT Real3
131: public Real3POD
132{
133 public:
134
136 constexpr ARCCORE_HOST_DEVICE Real3()
137 : Real3POD()
138 {
139 x = 0.0;
140 y = 0.0;
141 z = 0.0;
142 }
144 constexpr ARCCORE_HOST_DEVICE Real3(Real ax, Real ay, Real az)
145 : Real3POD()
146 {
147 x = ax;
148 y = ay;
149 z = az;
150 }
152 Real3(const Real3& f) = default;
154 constexpr ARCCORE_HOST_DEVICE explicit Real3(const Real3POD& f)
155 : Real3POD()
156 {
157 x = f.x;
158 y = f.y;
159 z = f.z;
160 }
161
163 constexpr ARCCORE_HOST_DEVICE explicit Real3(Real v)
164 : Real3POD()
165 {
166 x = y = z = v;
167 }
168
170 constexpr ARCCORE_HOST_DEVICE explicit Real3(const Real2& f)
171 : Real3POD()
172 {
173 x = f.x;
174 y = f.y;
175 z = 0.0;
176 }
177
179 Real3& operator=(const Real3& f) = default;
180
182 constexpr ARCCORE_HOST_DEVICE Real3& operator=(Real v)
183 {
184 x = y = z = v;
185 return (*this);
186 }
187
188 public:
189
190 constexpr ARCCORE_HOST_DEVICE static Real3 null() { return Real3(0., 0., 0.); }
191 constexpr ARCCORE_HOST_DEVICE static Real3 zero() { return Real3(0., 0., 0.); }
192
193 public:
194
196 constexpr ARCCORE_HOST_DEVICE Real3 copy() const { return (*this); }
198 constexpr ARCCORE_HOST_DEVICE Real3& reset()
199 {
200 x = y = z = 0.;
201 return (*this);
202 }
204 constexpr ARCCORE_HOST_DEVICE Real3& assign(Real ax, Real ay, Real az)
205 {
206 x = ax;
207 y = ay;
208 z = az;
209 return (*this);
210 }
212 constexpr ARCCORE_HOST_DEVICE Real3& assign(Real3 f)
213 {
214 x = f.x;
215 y = f.y;
216 z = f.z;
217 return (*this);
218 }
225 constexpr ARCCORE_HOST_DEVICE bool isNearlyZero() const
226 {
227 return math::isNearlyZero(x) && math::isNearlyZero(y) && math::isNearlyZero(z);
228 }
230 constexpr ARCCORE_HOST_DEVICE Real squareNormL2() const { return x * x + y * y + z * z; }
232 ARCCORE_HOST_DEVICE Real normL2() const { return _sqrt(squareNormL2()); }
234 ARCCORE_DEPRECATED_2021("Use squareNormL2() instead")
235 constexpr ARCCORE_HOST_DEVICE Real abs2() const { return x * x + y * y + z * z; }
237 ARCCORE_DEPRECATED_2021("Use normL2() instead")
238 ARCCORE_HOST_DEVICE Real abs() const { return _sqrt(squareNormL2()); }
240 ARCCORE_HOST_DEVICE Real3 absolute() const { return Real3(math::abs(x), math::abs(y), math::abs(z)); }
241
246 std::istream& assign(std::istream& i);
248 std::ostream& print(std::ostream& o) const;
250 std::ostream& printXyz(std::ostream& o) const;
251
253 constexpr ARCCORE_HOST_DEVICE Real3& add(Real3 b)
254 {
255 x += b.x;
256 y += b.y;
257 z += b.z;
258 return (*this);
259 }
261 constexpr ARCCORE_HOST_DEVICE Real3& sub(Real3 b)
262 {
263 x -= b.x;
264 y -= b.y;
265 z -= b.z;
266 return (*this);
267 }
269 constexpr ARCCORE_HOST_DEVICE Real3& mul(Real3 b)
270 {
271 x *= b.x;
272 y *= b.y;
273 z *= b.z;
274 return (*this);
275 }
277 constexpr ARCCORE_HOST_DEVICE Real3& div(Real3 b)
278 {
279 x /= b.x;
280 y /= b.y;
281 z /= b.z;
282 return (*this);
283 }
285 constexpr ARCCORE_HOST_DEVICE Real3& addSame(Real b)
286 {
287 x += b;
288 y += b;
289 z += b;
290 return (*this);
291 }
293 constexpr ARCCORE_HOST_DEVICE Real3& subSame(Real b)
294 {
295 x -= b;
296 y -= b;
297 z -= b;
298 return (*this);
299 }
301 constexpr ARCCORE_HOST_DEVICE Real3& mulSame(Real b)
302 {
303 x *= b;
304 y *= b;
305 z *= b;
306 return (*this);
307 }
309 constexpr ARCCORE_HOST_DEVICE Real3& divSame(Real b)
310 {
311 x /= b;
312 y /= b;
313 z /= b;
314 return (*this);
315 }
317 constexpr ARCCORE_HOST_DEVICE Real3& operator+=(Real3 b) { return add(b); }
319 constexpr ARCCORE_HOST_DEVICE Real3& operator-=(Real3 b) { return sub(b); }
321 constexpr ARCCORE_HOST_DEVICE Real3& operator*=(Real3 b) { return mul(b); }
323 constexpr ARCCORE_HOST_DEVICE void operator*=(Real b)
324 {
325 x *= b;
326 y *= b;
327 z *= b;
328 }
330 constexpr ARCCORE_HOST_DEVICE Real3& operator/=(Real3 b) { return div(b); }
332 constexpr ARCCORE_HOST_DEVICE void operator/=(Real b)
333 {
334 x /= b;
335 y /= b;
336 z /= b;
337 }
339 constexpr ARCCORE_HOST_DEVICE Real3 operator+(Real3 b) const { return Real3(x + b.x, y + b.y, z + b.z); }
341 constexpr ARCCORE_HOST_DEVICE Real3 operator-(Real3 b) const { return Real3(x - b.x, y - b.y, z - b.z); }
343 constexpr ARCCORE_HOST_DEVICE Real3 operator-() const { return Real3(-x, -y, -z); }
348 constexpr ARCCORE_HOST_DEVICE Real3 operator*(Real3 b) const { return Real3(x * b.x, y * b.y, z * b.z); }
353 constexpr ARCCORE_HOST_DEVICE Real3 operator/(Real3 b) const { return Real3(x / b.x, y / b.y, z / b.z); }
354
363 {
364 Real d = normL2();
365 if (!math::isZero(d))
366 divSame(d);
367 return (*this);
368 }
370 friend constexpr ARCCORE_HOST_DEVICE Real3 operator*(Real sca, Real3 vec)
371 {
372 return Real3(vec.x * sca, vec.y * sca, vec.z * sca);
373 }
374
376 friend constexpr ARCCORE_HOST_DEVICE Real3 operator*(Real3 vec, Real sca)
377 {
378 return Real3(vec.x * sca, vec.y * sca, vec.z * sca);
379 }
380
382 friend constexpr ARCCORE_HOST_DEVICE Real3 operator/(Real3 vec, Real sca)
383 {
384 return Real3(vec.x / sca, vec.y / sca, vec.z / sca);
385 }
386
393 friend constexpr ARCCORE_HOST_DEVICE bool operator<(Real3 v1, Real3 v2)
394 {
395 if (v1.x == v2.x) {
396 if (v1.y == v2.y)
397 return v1.z < v2.z;
398 else
399 return v1.y < v2.y;
400 }
401 return (v1.x < v2.x);
402 }
403
405 friend std::ostream& operator<<(std::ostream& o, Real3 t)
406 {
407 return t.printXyz(o);
408 }
409
411 friend std::istream& operator>>(std::istream& i, Real3& t)
412 {
413 return t.assign(i);
414 }
415
422 constexpr ARCCORE_HOST_DEVICE bool operator==(Real3 b) const
423 {
424 return _eq(x, b.x) && _eq(y, b.y) && _eq(z, b.z);
425 }
426
433 constexpr ARCCORE_HOST_DEVICE bool operator!=(Real3 b) const { return !operator==(b); }
434
435 private:
436
442 constexpr ARCCORE_HOST_DEVICE static bool _eq(Real a, Real b)
443 {
444 return math::isEqual(a, b);
445 }
447 ARCCORE_HOST_DEVICE static Real _sqrt(Real a)
448 {
449 return math::sqrt(a);
450 }
451};
452
453/*---------------------------------------------------------------------------*/
454/*---------------------------------------------------------------------------*/
455
456inline constexpr ARCCORE_HOST_DEVICE Real2::
457Real2(const Real3& v)
458: Real2POD()
459{
460 x = v.x;
461 y = v.y;
462}
463
464/*---------------------------------------------------------------------------*/
465/*---------------------------------------------------------------------------*/
466
467} // End namespace Arcane
468
469/*---------------------------------------------------------------------------*/
470/*---------------------------------------------------------------------------*/
471
472#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()
Construit le vecteur nul.
Definition Real2.h:125
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Real3(const Real3 &f)=default
Construit un triplet identique à f.
Real3 & operator=(const Real3 &f)=default
Opérateur de recopie.
constexpr ARCCORE_HOST_DEVICE bool isNearlyZero() const
Indique si l'instance est proche de l'instance nulle.
Definition Real3.h:225
constexpr ARCCORE_HOST_DEVICE Real3 & div(Real3 b)
Divise chaque composante du triplet par la composant correspondant de b.
Definition Real3.h:277
constexpr ARCCORE_HOST_DEVICE Real3 & assign(Real3 f)
Copie le triplet f.
Definition Real3.h:212
constexpr ARCCORE_HOST_DEVICE Real3 operator-(Real3 b) const
Créé un triplet qui vaut b soustrait de ce triplet.
Definition Real3.h:341
constexpr ARCCORE_HOST_DEVICE void operator/=(Real b)
Divise chaque composante du triplet par le réel b.
Definition Real3.h:332
constexpr ARCCORE_HOST_DEVICE Real3 & addSame(Real b)
Ajoute b à chaque composante du triplet.
Definition Real3.h:285
constexpr ARCCORE_HOST_DEVICE Real3 operator-() const
Créé un triplet opposé au triplet actuel.
Definition Real3.h:343
friend constexpr ARCCORE_HOST_DEVICE Real3 operator*(Real sca, Real3 vec)
Multiplication par un scalaire.
Definition Real3.h:370
Real3 & normalize()
Normalise le triplet.
Definition Real3.h:362
friend constexpr ARCCORE_HOST_DEVICE Real3 operator*(Real3 vec, Real sca)
Multiplication par un scalaire.
Definition Real3.h:376
ARCCORE_HOST_DEVICE Real3 absolute() const
Valeur absolue composante par composante.
Definition Real3.h:240
friend constexpr ARCCORE_HOST_DEVICE bool operator<(Real3 v1, Real3 v2)
Opérateur de comparaison.
Definition Real3.h:393
ARCCORE_HOST_DEVICE Real normL2() const
Retourne la norme L2 du triplet .
Definition Real3.h:232
constexpr ARCCORE_HOST_DEVICE Real3 & operator+=(Real3 b)
Ajoute b au triplet.
Definition Real3.h:317
constexpr ARCCORE_HOST_DEVICE Real squareNormL2() const
Retourne la norme L2 au carré du triplet .
Definition Real3.h:230
constexpr ARCCORE_HOST_DEVICE bool operator==(Real3 b) const
Compare composant pas composante l'instance courante à b.
Definition Real3.h:422
constexpr ARCCORE_HOST_DEVICE Real3(const Real3POD &f)
Construit un triplet identique à f.
Definition Real3.h:154
constexpr ARCCORE_HOST_DEVICE Real3 operator/(Real3 b) const
Créé un triplet qui vaut ce triplet dont chaque composant a été divisée par la composante corresponda...
Definition Real3.h:353
constexpr ARCCORE_HOST_DEVICE Real3 & assign(Real ax, Real ay, Real az)
Affecte à l'instance le triplet (ax,ay,az)
Definition Real3.h:204
constexpr ARCCORE_HOST_DEVICE Real3()
Construit le vecteur nul.
Definition Real3.h:136
constexpr ARCCORE_HOST_DEVICE Real3 & add(Real3 b)
Ajoute b au triplet.
Definition Real3.h:253
constexpr static ARCCORE_HOST_DEVICE bool _eq(Real a, Real b)
Compare les valeurs de a et b avec le comparateur TypeEqualT.
Definition Real3.h:442
constexpr ARCCORE_HOST_DEVICE Real3 & reset()
Réinitialise le triplet avec les constructeurs par défaut.
Definition Real3.h:198
constexpr ARCCORE_HOST_DEVICE Real3(Real v)
Construit l'instance avec le triplet (v,v,v).
Definition Real3.h:163
constexpr ARCCORE_HOST_DEVICE Real3 & sub(Real3 b)
Soustrait b au triplet.
Definition Real3.h:261
static ARCCORE_HOST_DEVICE Real _sqrt(Real a)
Retourne la racine carrée de a.
Definition Real3.h:447
constexpr ARCCORE_HOST_DEVICE Real3 copy() const
Retourne une copie du triplet.
Definition Real3.h:196
friend std::istream & operator>>(std::istream &i, Real3 &t)
Lit le triplet t à partir du flot o.
Definition Real3.h:411
constexpr ARCCORE_HOST_DEVICE Real3 & mulSame(Real b)
Multiplie chaque composante du triplet par b.
Definition Real3.h:301
constexpr ARCCORE_HOST_DEVICE Real3 & subSame(Real b)
Soustrait b à chaque composante du triplet.
Definition Real3.h:293
constexpr ARCCORE_HOST_DEVICE Real3 & operator*=(Real3 b)
Multiple chaque composante du triplet par la composant correspondant de b.
Definition Real3.h:321
constexpr ARCCORE_HOST_DEVICE Real3 & operator=(Real v)
Affecte à l'instance le triplet (v,v,v).
Definition Real3.h:182
constexpr ARCCORE_HOST_DEVICE Real3 operator+(Real3 b) const
Créé un triplet qui vaut ce triplet ajouté à b.
Definition Real3.h:339
constexpr ARCCORE_HOST_DEVICE bool operator!=(Real3 b) const
Compare deux triplets. Pour la notion d'égalité, voir operator==()
Definition Real3.h:433
constexpr ARCCORE_HOST_DEVICE Real3 & operator-=(Real3 b)
Soustrait b au triplet.
Definition Real3.h:319
friend constexpr ARCCORE_HOST_DEVICE Real3 operator/(Real3 vec, Real sca)
Division par un scalaire.
Definition Real3.h:382
constexpr ARCCORE_HOST_DEVICE void operator*=(Real b)
Multiple chaque composante du triplet par le réel b.
Definition Real3.h:323
constexpr ARCCORE_HOST_DEVICE Real3(Real ax, Real ay, Real az)
Construit le triplet (ax,ay,az)
Definition Real3.h:144
constexpr ARCCORE_HOST_DEVICE Real3(const Real2 &f)
Construit un triplet identique à f.
Definition Real3.h:170
constexpr ARCCORE_HOST_DEVICE Real3 & operator/=(Real3 b)
Divise chaque composante du triplet par la composant correspondant de b.
Definition Real3.h:330
constexpr ARCCORE_HOST_DEVICE Real3 & divSame(Real b)
Divise chaque composante du triplet par b.
Definition Real3.h:309
constexpr ARCCORE_HOST_DEVICE Real3 operator*(Real3 b) const
Créé un triplet qui vaut ce triplet dont chaque composant a été multipliée par la composante correspo...
Definition Real3.h:348
constexpr ARCCORE_HOST_DEVICE Real3 & mul(Real3 b)
Multiple chaque composante du triplet par la composant correspondant de b.
Definition Real3.h:269
friend std::ostream & operator<<(std::ostream &o, Real3 t)
Ecrit le triplet t sur le flot o.
Definition Real3.h:405
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
Real x
première composante du couple
Definition Real2.h:34
ARCCORE_HOST_DEVICE Real operator()(Integer i) const
Definition Real3.h:63
ARCCORE_HOST_DEVICE Real operator[](Integer i) const
Definition Real3.h:48
Real y
deuxième composante du triplet
Definition Real3.h:36
Real z
troisième composante du triplet
Definition Real3.h:37
ARCCORE_HOST_DEVICE Real & operator()(Integer i)
Definition Real3.h:93
ARCCORE_HOST_DEVICE void setComponent(Integer i, Real value)
Positionne la i-ème composante à value.
Definition Real3.h:100
ARCCORE_HOST_DEVICE Real & operator[](Integer i)
Definition Real3.h:78
Real x
première composante du triplet
Definition Real3.h:35