Arcane  v3.15.0.0
Documentation utilisateur
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; //!< première composante du triplet
36 Real y; //!< deuxième composante du triplet
37 Real z; //!< troisième composante du triplet
38
39 /*!
40 * Accès en lecture seule à la @a i eme composante du Real3POD
41 *
42 * @note ne fonctionne que pour x, y et z ordonnées dans le POD
43 *
44 * @param i numéro de la composante à retourner
45 *
46 * @return (&x)[i]
47 */
48 ARCCORE_HOST_DEVICE Real operator[](Integer i) const
49 {
50 ARCCORE_CHECK_AT(i, 3);
51 return (&x)[i];
52 }
53
54 /*!
55 * Accès en lecture seule à la @a i eme composante du Real3POD
56 *
57 * @note ne fonctionne que pour x, y et z ordonnées dans le POD
58 *
59 * @param i numéro de la composante à retourner
60 *
61 * @return (&x)[i]
62 */
63 ARCCORE_HOST_DEVICE Real operator()(Integer i) const
64 {
65 ARCCORE_CHECK_AT(i, 3);
66 return (&x)[i];
67 }
68
69 /*!
70 * Accès à la @a i eme composante du Real3POD
71 *
72 * @note ne fonctionne que pour x, y et z ordonnées dans le POD
73 *
74 * @param i numéro de la composante à retourner
75 *
76 * @return (&x)[i]
77 */
78 ARCCORE_HOST_DEVICE Real& operator[](Integer i)
79 {
80 ARCCORE_CHECK_AT(i,3);
81 return (&x)[i];
82 }
83
84 /*!
85 * Accès à la @a i eme composante du Real3POD
86 *
87 * @note ne fonctionne que pour x, y et z ordonnées dans le POD
88 *
89 * @param i numéro de la composante à retourner
90 *
91 * @return (&x)[i]
92 */
93 ARCCORE_HOST_DEVICE Real& operator()(Integer i)
94 {
95 ARCCORE_CHECK_AT(i,3);
96 return (&x)[i];
97 }
98
99 //! Positionne la \a i-ème composante à \a value
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/*---------------------------------------------------------------------------*/
109/*!
110 * \brief Classe gérant un vecteur de réel de dimension 3.
111
112 Le vecteur comprend trois composantes \a x, \a y et \a z qui sont du
113 type \b Real.
114
115 \code
116 Real3 value (1.0,2.3,4.5); // Créé un triplet (x=1.0, y=2.3, z=4.5)
117 cout << value.x; // Imprime le composant x
118 value.y += 3.2; // Ajoute 3.2 à la composante \b y
119 \endcode
120
121 ou de maniere equivalente
122
123 \code
124 Real3 value (1.0,2.3,4.5); // Créé un triplet (x=1.0, y=2.3, z=4.5)
125 cout << value[0]; // Imprime le composant x
126 value[1] += 3.2; // Ajoute 3.2 à la composante \b y
127 \endcode
128 */
129
130class ARCANE_UTILS_EXPORT Real3
131: public Real3POD
132{
133 public:
134
135 //! Construit le vecteur nul.
136 constexpr ARCCORE_HOST_DEVICE Real3()
137 : Real3POD()
138 {
139 x = 0.0;
140 y = 0.0;
141 z = 0.0;
142 }
143 //! Construit le triplet (ax,ay,az)
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 }
151 //! Construit un triplet identique à \a f
152 Real3(const Real3& f) = default;
153 //! Construit un triplet identique à \a f
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
162 //! Construit l'instance avec le triplet (v,v,v).
163 constexpr ARCCORE_HOST_DEVICE explicit Real3(Real v)
164 : Real3POD()
165 {
166 x = y = z = v;
167 }
168
169 //! Construit un triplet identique à \a f
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
178 //! Opérateur de recopie.
179 Real3& operator=(const Real3& f) = default;
180
181 //! Affecte à l'instance le triplet (v,v,v).
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
195 //! Retourne une copie du triplet.
196 constexpr ARCCORE_HOST_DEVICE Real3 copy() const { return (*this); }
197 //! Réinitialise le triplet avec les constructeurs par défaut.
198 constexpr ARCCORE_HOST_DEVICE Real3& reset()
199 {
200 x = y = z = 0.;
201 return (*this);
202 }
203 //! Affecte à l'instance le triplet (ax,ay,az)
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 }
211 //! Copie le triplet \a f
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 }
219
220 //! Valeur absolue composante par composante.
221 ARCCORE_HOST_DEVICE Real3 absolute() const { return Real3(math::abs(x), math::abs(y), math::abs(z)); }
222
223 /*!
224 * \brief Lit un triplet sur le flot \a i
225 * Le triplet est lu sous la forme de trois valeur de type #value_type.
226 */
227 std::istream& assign(std::istream& i);
228 //! Ecrit le triplet sur le flot \a o lisible par un assign()
229 std::ostream& print(std::ostream& o) const;
230 //! Ecrit le triplet sur le flot \a o sous la forme (x,y,z)
231 std::ostream& printXyz(std::ostream& o) const;
232
233 //! Ajoute \a b au triplet
234 constexpr ARCCORE_HOST_DEVICE Real3& add(Real3 b)
235 {
236 x += b.x;
237 y += b.y;
238 z += b.z;
239 return (*this);
240 }
241 //! Soustrait \a b au triplet
242 constexpr ARCCORE_HOST_DEVICE Real3& sub(Real3 b)
243 {
244 x -= b.x;
245 y -= b.y;
246 z -= b.z;
247 return (*this);
248 }
249 //! Multiple chaque composante du triplet par la composant correspondant de \a b
250 constexpr ARCCORE_HOST_DEVICE Real3& mul(Real3 b)
251 {
252 x *= b.x;
253 y *= b.y;
254 z *= b.z;
255 return (*this);
256 }
257 //! Divise chaque composante du triplet par la composant correspondant de \a b
258 constexpr ARCCORE_HOST_DEVICE Real3& div(Real3 b)
259 {
260 x /= b.x;
261 y /= b.y;
262 z /= b.z;
263 return (*this);
264 }
265 //! Ajoute \a b à chaque composante du triplet
266 constexpr ARCCORE_HOST_DEVICE Real3& addSame(Real b)
267 {
268 x += b;
269 y += b;
270 z += b;
271 return (*this);
272 }
273 //! Soustrait \a b à chaque composante du triplet
274 constexpr ARCCORE_HOST_DEVICE Real3& subSame(Real b)
275 {
276 x -= b;
277 y -= b;
278 z -= b;
279 return (*this);
280 }
281 //! Multiplie chaque composante du triplet par \a b
282 constexpr ARCCORE_HOST_DEVICE Real3& mulSame(Real b)
283 {
284 x *= b;
285 y *= b;
286 z *= b;
287 return (*this);
288 }
289 //! Divise chaque composante du triplet par \a b
290 constexpr ARCCORE_HOST_DEVICE Real3& divSame(Real b)
291 {
292 x /= b;
293 y /= b;
294 z /= b;
295 return (*this);
296 }
297 //! Ajoute \a b au triplet.
298 constexpr ARCCORE_HOST_DEVICE Real3& operator+=(Real3 b) { return add(b); }
299 //! Soustrait \a b au triplet
300 constexpr ARCCORE_HOST_DEVICE Real3& operator-=(Real3 b) { return sub(b); }
301 //! Multiple chaque composante du triplet par la composant correspondant de \a b
302 constexpr ARCCORE_HOST_DEVICE Real3& operator*=(Real3 b) { return mul(b); }
303 //! Multiple chaque composante du triplet par le réel \a b
304 constexpr ARCCORE_HOST_DEVICE void operator*=(Real b)
305 {
306 x *= b;
307 y *= b;
308 z *= b;
309 }
310 //! Divise chaque composante du triplet par la composant correspondant de \a b
311 constexpr ARCCORE_HOST_DEVICE Real3& operator/=(Real3 b) { return div(b); }
312 //! Divise chaque composante du triplet par le réel \a b
313 constexpr ARCCORE_HOST_DEVICE void operator/=(Real b)
314 {
315 x /= b;
316 y /= b;
317 z /= b;
318 }
319 //! Créé un triplet qui vaut ce triplet ajouté à \a b
320 constexpr ARCCORE_HOST_DEVICE Real3 operator+(Real3 b) const { return Real3(x + b.x, y + b.y, z + b.z); }
321 //! Créé un triplet qui vaut \a b soustrait de ce triplet
322 constexpr ARCCORE_HOST_DEVICE Real3 operator-(Real3 b) const { return Real3(x - b.x, y - b.y, z - b.z); }
323 //! Créé un triplet opposé au triplet actuel
324 constexpr ARCCORE_HOST_DEVICE Real3 operator-() const { return Real3(-x, -y, -z); }
325 /*!
326 * \brief Créé un triplet qui vaut ce triplet dont chaque composant a été
327 * multipliée par la composante correspondante de \a b.
328 */
329 constexpr ARCCORE_HOST_DEVICE Real3 operator*(Real3 b) const { return Real3(x * b.x, y * b.y, z * b.z); }
330 /*!
331 * \brief Créé un triplet qui vaut ce triplet dont chaque composant a été divisée
332 * par la composante correspondante de \a b.
333 */
334 constexpr ARCCORE_HOST_DEVICE Real3 operator/(Real3 b) const { return Real3(x / b.x, y / b.y, z / b.z); }
335
336 //! Multiplication par un scalaire.
337 friend constexpr ARCCORE_HOST_DEVICE Real3 operator*(Real sca, Real3 vec)
338 {
339 return Real3(vec.x * sca, vec.y * sca, vec.z * sca);
340 }
341
342 //! Multiplication par un scalaire.
343 friend constexpr ARCCORE_HOST_DEVICE Real3 operator*(Real3 vec, Real sca)
344 {
345 return Real3(vec.x * sca, vec.y * sca, vec.z * sca);
346 }
347
348 //! Division par un scalaire.
349 friend constexpr ARCCORE_HOST_DEVICE Real3 operator/(Real3 vec, Real sca)
350 {
351 return Real3(vec.x / sca, vec.y / sca, vec.z / sca);
352 }
353
354 public:
355
356 /*!
357 * \brief Opérateur de comparaison.
358 *
359 * Cet opérateur permet de trier les Real3 pour les utiliser par exemple
360 * dans les std::set
361 */
362 friend constexpr ARCCORE_HOST_DEVICE bool operator<(Real3 v1, Real3 v2)
363 {
364 if (v1.x == v2.x) {
365 if (v1.y == v2.y)
366 return v1.z < v2.z;
367 else
368 return v1.y < v2.y;
369 }
370 return (v1.x < v2.x);
371 }
372
373 //! Ecrit le triplet \a t sur le flot \a o
374 friend std::ostream& operator<<(std::ostream& o, Real3 t)
375 {
376 return t.printXyz(o);
377 }
378
379 //! Lit le triplet \a t à partir du flot \a o.
380 friend std::istream& operator>>(std::istream& i, Real3& t)
381 {
382 return t.assign(i);
383 }
384
385 /*!
386 * \brief Compare composant pas composante l'instance courante à \a b.
387 *
388 * \retval true si this.x==b.x et this.y==b.y et this.z==b.z.
389 * \retval false sinon.
390 */
391 constexpr ARCCORE_HOST_DEVICE bool operator==(Real3 b) const
392 {
393 return _eq(x, b.x) && _eq(y, b.y) && _eq(z, b.z);
394 }
395
396 /*!
397 * \brief Compare deux triplets.
398 * Pour la notion d'égalité, voir operator==()
399 * \retval true si les deux triplets sont différents,
400 * \retval false sinon.
401 */
402 constexpr ARCCORE_HOST_DEVICE bool operator!=(Real3 b) const { return !operator==(b); }
403
404 public:
405
406 //! Retourne la norme L2 au carré du triplet \f$x^2+y^2+z^2\f$
407 // TODO: rendre obsolète mi-2025: ARCANE_DEPRECATED_REASON("Y2024: Use math::squareNormL2(const Real3&) instead")
408 constexpr ARCCORE_HOST_DEVICE Real squareNormL2() const { return x * x + y * y + z * z; }
409
410 //! Retourne la norme L2 du triplet \f$\sqrt{x^2+y^2+z^2}\f$
411 // TODO: rendre obsolète mi-2025: ARCANE_DEPRECATED_REASON("Y2024: Use math::normL2(const Real3&) instead")
412 inline ARCCORE_HOST_DEVICE Real normL2() const;
413
414 //! Retourne la norme au carré du triplet \f$x^2+y^2+z^2\f$
415 ARCCORE_DEPRECATED_2021("Use math::squareNormL2(const Real3&) instead")
416 constexpr ARCCORE_HOST_DEVICE Real abs2() const { return x * x + y * y + z * z; }
417
418 //! Retourne la norme du triplet \f$\sqrt{x^2+y^2+z^2}\f$
419 ARCCORE_DEPRECATED_2021("Use math::normL2(const Real3&) instead")
420 inline ARCCORE_HOST_DEVICE Real abs() const;
421
422 // TODO: rendre obsolète mi-2025: ARCANE_DEPRECATED_REASON("Y2024: Use math::isNearlyZero(const Real3&) instead")
423 inline constexpr ARCCORE_HOST_DEVICE bool isNearlyZero() const;
424
425 ARCANE_DEPRECATED_REASON("Y2024: Use math::mutableNormalize(Real3&) instead")
426 inline Real3& normalize();
427
428 private:
429
430 /*!
431 * \brief Compare les valeurs de \a a et \a b avec le comparateur TypeEqualT
432 * \retval true si \a a et \a b sont égaux,
433 * \retval false sinon.
434 */
435 inline constexpr ARCCORE_HOST_DEVICE static bool _eq(Real a, Real b);
436 //! Retourne la racine carrée de \a a
437 inline ARCCORE_HOST_DEVICE static Real _sqrt(Real a);
438};
439
440/*---------------------------------------------------------------------------*/
441/*---------------------------------------------------------------------------*/
442
443inline constexpr ARCCORE_HOST_DEVICE Real2::
444Real2(const Real3& v)
445: Real2POD()
446{
447 x = v.x;
448 y = v.y;
449}
450
451/*---------------------------------------------------------------------------*/
452/*---------------------------------------------------------------------------*/
453
454namespace math
455{
456 //! Retourne la norme au carré du triplet \f$x^2+y^2+z^2\f$
457 inline constexpr ARCCORE_HOST_DEVICE Real squareNormL2(const Real3& v)
458 {
459 return v.x * v.x + v.y * v.y + v.z * v.z;
460 }
461
462 /*!
463 * \brief Indique si l'instance est proche de l'instance nulle.
464 *
465 * \retval true si math::isNearlyZero() est vrai pour chaque composante.
466 * \retval false sinon.
467 */
468 inline constexpr ARCCORE_HOST_DEVICE bool isNearlyZero(const Real3& v)
469 {
470 return math::isNearlyZero(v.x) && math::isNearlyZero(v.y) && math::isNearlyZero(v.z);
471 }
472 //! Retourne la norme L2 du triplet \f$\sqrt{v.x^2+v.y^2+v.z^2}\f$
473 inline ARCCORE_HOST_DEVICE Real normL2(const Real3& v)
474 {
475 return math::sqrt(math::squareNormL2(v));
476 }
477 /*!
478 * \brief Normalise le triplet \a v
479 *
480 * Si le triplet est non nul, divise chaque composante par la norme du triplet
481 * (abs()), de telle sorte qu'après l'appel à cette méthode, math::normL2() vaux \a 1.
482 * Si le triplet est nul, ne fait rien.
483 */
484 inline Real3& mutableNormalize(Real3& v)
485 {
486 Real d = math::normL2(v);
487 if (!math::isZero(d))
488 v.divSame(d);
489 return v;
490 }
491} // namespace math
492
493/*---------------------------------------------------------------------------*/
494/*---------------------------------------------------------------------------*/
495
496inline Real3& Real3::
497normalize()
498{
499 return math::mutableNormalize(*this);
500}
501
502inline constexpr ARCCORE_HOST_DEVICE bool Real3::
503isNearlyZero() const
504{
505 return math::isNearlyZero(*this);
506}
507
508inline constexpr ARCCORE_HOST_DEVICE bool Real3::
509_eq(Real a, Real b)
510{
511 return math::isEqual(a, b);
512}
513
514ARCCORE_HOST_DEVICE inline Real Real3::
515_sqrt(Real a)
516{
517 return math::sqrt(a);
518}
519
520inline ARCCORE_HOST_DEVICE Real Real3::
521normL2() const
522{
523 return math::normL2(*this);
524}
525
526inline ARCCORE_HOST_DEVICE Real Real3::
527abs() const
528{
529 return math::normL2(*this);
530}
531
532/*---------------------------------------------------------------------------*/
533/*---------------------------------------------------------------------------*/
534
535} // End namespace Arcane
536
537/*---------------------------------------------------------------------------*/
538/*---------------------------------------------------------------------------*/
539
540#endif
Classe gérant un vecteur de réel de dimension 2.
Definition Real2.h:121
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
constexpr __host__ __device__ void operator*=(Real b)
Multiple chaque composante du triplet par le réel b.
Definition Real3.h:304
Real3(const Real3 &f)=default
Construit un triplet identique à f.
friend constexpr __host__ __device__ Real3 operator/(Real3 vec, Real sca)
Division par un scalaire.
Definition Real3.h:349
Real3 & operator=(const Real3 &f)=default
Opérateur de recopie.
constexpr __host__ __device__ Real3 & operator/=(Real3 b)
Divise chaque composante du triplet par la composant correspondant de b.
Definition Real3.h:311
constexpr __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:329
constexpr __host__ __device__ Real3(Real ax, Real ay, Real az)
Construit le triplet (ax,ay,az)
Definition Real3.h:144
constexpr __host__ __device__ Real3 & subSame(Real b)
Soustrait b à chaque composante du triplet.
Definition Real3.h:274
friend constexpr __host__ __device__ Real3 operator*(Real3 vec, Real sca)
Multiplication par un scalaire.
Definition Real3.h:343
constexpr __host__ __device__ Real3 operator-() const
Créé un triplet opposé au triplet actuel.
Definition Real3.h:324
constexpr __host__ __device__ Real3 operator+(Real3 b) const
Créé un triplet qui vaut ce triplet ajouté à b.
Definition Real3.h:320
constexpr __host__ __device__ Real3 & operator*=(Real3 b)
Multiple chaque composante du triplet par la composant correspondant de b.
Definition Real3.h:302
constexpr __host__ __device__ bool operator!=(Real3 b) const
Compare deux triplets. Pour la notion d'égalité, voir operator==()
Definition Real3.h:402
constexpr __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:334
constexpr __host__ __device__ bool operator==(Real3 b) const
Compare composant pas composante l'instance courante à b.
Definition Real3.h:391
constexpr __host__ __device__ Real3 & mulSame(Real b)
Multiplie chaque composante du triplet par b.
Definition Real3.h:282
constexpr __host__ __device__ Real3 & operator=(Real v)
Affecte à l'instance le triplet (v,v,v).
Definition Real3.h:182
constexpr __host__ __device__ Real3 & add(Real3 b)
Ajoute b au triplet.
Definition Real3.h:234
constexpr __host__ __device__ Real3(const Real3POD &f)
Construit un triplet identique à f.
Definition Real3.h:154
friend constexpr __host__ __device__ Real3 operator*(Real sca, Real3 vec)
Multiplication par un scalaire.
Definition Real3.h:337
constexpr __host__ __device__ Real3 & addSame(Real b)
Ajoute b à chaque composante du triplet.
Definition Real3.h:266
constexpr __host__ __device__ Real3(Real v)
Construit l'instance avec le triplet (v,v,v).
Definition Real3.h:163
constexpr __host__ __device__ void operator/=(Real b)
Divise chaque composante du triplet par le réel b.
Definition Real3.h:313
std::ostream & printXyz(std::ostream &o) const
Ecrit le triplet sur le flot o sous la forme (x,y,z)
Definition Real3.cc:49
constexpr __host__ __device__ Real3 & operator-=(Real3 b)
Soustrait b au triplet.
Definition Real3.h:300
friend constexpr __host__ __device__ bool operator<(Real3 v1, Real3 v2)
Opérateur de comparaison.
Definition Real3.h:362
constexpr __host__ __device__ Real squareNormL2() const
Retourne la norme L2 au carré du triplet .
Definition Real3.h:408
friend std::istream & operator>>(std::istream &i, Real3 &t)
Lit le triplet t à partir du flot o.
Definition Real3.h:380
constexpr __host__ __device__ Real3(const Real2 &f)
Construit un triplet identique à f.
Definition Real3.h:170
constexpr __host__ __device__ Real3 copy() const
Retourne une copie du triplet.
Definition Real3.h:196
constexpr __host__ __device__ Real3 & reset()
Réinitialise le triplet avec les constructeurs par défaut.
Definition Real3.h:198
constexpr __host__ __device__ Real3 & divSame(Real b)
Divise chaque composante du triplet par b.
Definition Real3.h:290
constexpr __host__ __device__ Real3()
Construit le vecteur nul.
Definition Real3.h:136
constexpr __host__ __device__ Real3 & sub(Real3 b)
Soustrait b au triplet.
Definition Real3.h:242
__host__ __device__ Real3 absolute() const
Valeur absolue composante par composante.
Definition Real3.h:221
constexpr __host__ __device__ Real3 & operator+=(Real3 b)
Ajoute b au triplet.
Definition Real3.h:298
constexpr __host__ __device__ Real3 operator-(Real3 b) const
Créé un triplet qui vaut b soustrait de ce triplet.
Definition Real3.h:322
constexpr __host__ __device__ Real3 & div(Real3 b)
Divise chaque composante du triplet par la composant correspondant de b.
Definition Real3.h:258
constexpr __host__ __device__ Real3 & assign(Real ax, Real ay, Real az)
Affecte à l'instance le triplet (ax,ay,az)
Definition Real3.h:204
constexpr __host__ __device__ Real3 & assign(Real3 f)
Copie le triplet f.
Definition Real3.h:212
friend std::ostream & operator<<(std::ostream &o, Real3 t)
Ecrit le triplet t sur le flot o.
Definition Real3.h:374
constexpr __host__ __device__ Real3 & mul(Real3 b)
Multiple chaque composante du triplet par la composant correspondant de b.
Definition Real3.h:250
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
double Real
Type représentant un réel.
Real y
deuxième composante du couple
Definition Real2.h:35
Real x
première composante du couple
Definition Real2.h:34
__host__ __device__ Real & operator()(Integer i)
Definition Real3.h:93
__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
__host__ __device__ Real operator()(Integer i) const
Definition Real3.h:63
__host__ __device__ void setComponent(Integer i, Real value)
Positionne la i-ème composante à value.
Definition Real3.h:100
__host__ __device__ Real & operator[](Integer i)
Definition Real3.h:78
Real x
première composante du triplet
Definition Real3.h:35