Arcane  v3.15.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
Real3x3.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/* Real3x3.h (C) 2000-2024 */
9/* */
10/* Matrice 3x3 de 'Real'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_REAL3X3_H
13#define ARCANE_UTILS_REAL3X3_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Real3.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
31{
32 public:
33
34 Real3POD x;
35 Real3POD y;
36 Real3POD z;
37};
38
39/*---------------------------------------------------------------------------*/
40/*---------------------------------------------------------------------------*/
65class ARCANE_UTILS_EXPORT Real3x3
66{
67 public:
68
70 constexpr ARCCORE_HOST_DEVICE Real3x3()
71 : x(Real3::zero())
72 , y(Real3::zero())
73 , z(Real3::zero())
74 {}
75
77 constexpr ARCCORE_HOST_DEVICE Real3x3(Real3 ax, Real3 ay, Real3 az)
78 : x(ax)
79 , y(ay)
80 , z(az)
81 {}
82
87 ARCANE_DEPRECATED_116 Real3x3(Real ax, Real ay, Real az, Real bx, Real by, Real bz, Real cx, Real cy, Real cz)
88 : x(ax, bx, cx)
89 , y(ay, by, cy)
90 , z(az, bz, cz)
91 {}
93 Real3x3(const Real3x3& f) = default;
95 constexpr ARCCORE_HOST_DEVICE explicit Real3x3(const Real3x3POD& f)
96 : x(f.x)
97 , y(f.y)
98 , z(f.z)
99 {}
101 constexpr ARCCORE_HOST_DEVICE explicit Real3x3(Real v)
102 {
103 x = y = z = v;
104 }
106 Real3x3& operator=(const Real3x3& f) = default;
107
109 constexpr ARCCORE_HOST_DEVICE Real3x3& operator=(Real v)
110 {
111 x = y = z = v;
112 return (*this);
113 }
114
115 public:
116
120
121 public:
122
124 constexpr ARCCORE_HOST_DEVICE static Real3x3 null() { return Real3x3(); }
125
127 constexpr ARCCORE_HOST_DEVICE static Real3x3 zero() { return Real3x3(); }
128
130 constexpr ARCCORE_HOST_DEVICE static Real3x3 identity() { return Real3x3(Real3(1.0, 0.0, 0.0), Real3(0.0, 1.0, 0.0), Real3(0.0, 0.0, 1.0)); }
131
133 constexpr ARCCORE_HOST_DEVICE static Real3x3 fromColumns(Real ax, Real ay, Real az, Real bx, Real by, Real bz, Real cx, Real cy, Real cz)
134 {
135 return Real3x3(Real3(ax, bx, cx), Real3(ay, by, cy), Real3(az, bz, cz));
136 }
137
139 constexpr ARCCORE_HOST_DEVICE static Real3x3 fromLines(Real ax, Real bx, Real cx, Real ay, Real by, Real cy, Real az, Real bz, Real cz)
140 {
141 return Real3x3(Real3(ax, bx, cx), Real3(ay, by, cy), Real3(az, bz, cz));
142 }
143
144 public:
145
147 constexpr ARCCORE_HOST_DEVICE Real3x3 copy() const { return (*this); }
148
150 constexpr ARCCORE_HOST_DEVICE Real3x3& reset()
151 {
152 *this = zero();
153 return (*this);
154 }
155
157 constexpr ARCCORE_HOST_DEVICE Real3x3& assign(Real3 ax, Real3 ay, Real3 az)
158 {
159 x = ax;
160 y = ay;
161 z = az;
162 return (*this);
163 }
164
166 constexpr ARCCORE_HOST_DEVICE Real3x3& assign(Real3x3 f)
167 {
168 x = f.x;
169 y = f.y;
170 z = f.z;
171 return (*this);
172 }
173
178 std::istream& assign(std::istream& i);
180 std::ostream& print(std::ostream& o) const;
182 std::ostream& printXyz(std::ostream& o) const;
183
185 constexpr ARCCORE_HOST_DEVICE Real3x3& add(Real3x3 b)
186 {
187 x += b.x;
188 y += b.y;
189 z += b.z;
190 return (*this);
191 }
193 constexpr ARCCORE_HOST_DEVICE Real3x3& sub(Real3x3 b)
194 {
195 x -= b.x;
196 y -= b.y;
197 z -= b.z;
198 return (*this);
199 }
201 constexpr ARCCORE_HOST_DEVICE Real3x3& addSame(Real3 b)
202 {
203 x += b;
204 y += b;
205 z += b;
206 return (*this);
207 }
209 constexpr ARCCORE_HOST_DEVICE Real3x3& subSame(Real3 b)
210 {
211 x -= b;
212 y -= b;
213 z -= b;
214 return (*this);
215 }
217 constexpr ARCCORE_HOST_DEVICE Real3x3& operator+=(Real3x3 b) { return add(b); }
219 constexpr ARCCORE_HOST_DEVICE Real3x3& operator-=(Real3x3 b) { return sub(b); }
221 constexpr ARCCORE_HOST_DEVICE void operator*=(Real b)
222 {
223 x *= b;
224 y *= b;
225 z *= b;
226 }
228 constexpr ARCCORE_HOST_DEVICE void operator/=(Real b)
229 {
230 x /= b;
231 y /= b;
232 z /= b;
233 }
235 constexpr ARCCORE_HOST_DEVICE Real3x3 operator+(Real3x3 b) const { return Real3x3(x + b.x, y + b.y, z + b.z); }
237 constexpr ARCCORE_HOST_DEVICE Real3x3 operator-(Real3x3 b) const { return Real3x3(x - b.x, y - b.y, z - b.z); }
239 constexpr ARCCORE_HOST_DEVICE Real3x3 operator-() const { return Real3x3(-x, -y, -z); }
240
247 constexpr ARCCORE_HOST_DEVICE bool operator==(Real3x3 b) const
248 {
249 return x == b.x && y == b.y && z == b.z;
250 }
251
258 constexpr ARCCORE_HOST_DEVICE bool operator!=(Real3x3 b) const
259 {
260 return !operator==(b);
261 }
262
267 ARCCORE_HOST_DEVICE Real3 operator[](Integer i) const
268 {
269 ARCCORE_CHECK_AT(i, 3);
270 return (&x)[i];
271 }
272
277 ARCCORE_HOST_DEVICE Real3 operator()(Integer i) const
278 {
279 ARCCORE_CHECK_AT(i, 3);
280 return (&x)[i];
281 }
282
288 ARCCORE_HOST_DEVICE Real operator()(Integer i, Integer j) const
289 {
290 ARCCORE_CHECK_AT(i, 3);
291 ARCCORE_CHECK_AT(j, 3);
292 return (&x)[i][j];
293 }
294
299 ARCCORE_HOST_DEVICE Real3& operator[](Integer i)
300 {
301 ARCCORE_CHECK_AT(i, 3);
302 return (&x)[i];
303 }
304
309 ARCCORE_HOST_DEVICE Real3& operator()(Integer i)
310 {
311 ARCCORE_CHECK_AT(i, 3);
312 return (&x)[i];
313 }
314
320 ARCCORE_HOST_DEVICE Real& operator()(Integer i, Integer j)
321 {
322 ARCCORE_CHECK_AT(i, 3);
323 ARCCORE_CHECK_AT(j, 3);
324 return (&x)[i][j];
325 }
326
328 constexpr ARCCORE_HOST_DEVICE Real determinant() const
329 {
330 return (x.x * (y.y * z.z - y.z * z.y) + x.y * (y.z * z.x - y.x * z.z) + x.z * (y.x * z.y - y.y * z.x));
331 }
332
334 friend std::ostream& operator<<(std::ostream& o, Real3x3 t)
335 {
336 return t.printXyz(o);
337 }
338
340 friend std::istream& operator>>(std::istream& i, Real3x3& t)
341 {
342 return t.assign(i);
343 }
344
346 friend constexpr ARCCORE_HOST_DEVICE Real3x3 operator*(Real sca, Real3x3 vec)
347 {
348 return Real3x3(vec.x * sca, vec.y * sca, vec.z * sca);
349 }
350
352 friend constexpr ARCCORE_HOST_DEVICE Real3x3 operator*(Real3x3 vec, Real sca)
353 {
354 return Real3x3(vec.x * sca, vec.y * sca, vec.z * sca);
355 }
356
358 friend constexpr ARCCORE_HOST_DEVICE Real3x3 operator/(Real3x3 vec, Real sca)
359 {
360 return Real3x3(vec.x / sca, vec.y / sca, vec.z / sca);
361 }
362
369 friend constexpr ARCCORE_HOST_DEVICE bool operator<(Real3x3 v1, Real3x3 v2)
370 {
371 if (v1.x == v2.x) {
372 if (v1.y == v2.y)
373 return v1.z < v2.z;
374 else
375 return v1.y < v2.y;
376 }
377 return (v1.x < v2.x);
378 }
379
380 public:
381
382 // TODO: rendre obsolète mi-2025: ARCANE_DEPRECATED_REASON("Y2024: Use math::isNearlyZero(const Real3x3&) instead")
383 inline constexpr ARCCORE_HOST_DEVICE bool isNearlyZero() const;
384
385 private:
386
392 constexpr ARCCORE_HOST_DEVICE static bool _eq(Real a, Real b)
393 {
394 return TypeEqualT<Real>::isEqual(a, b);
395 }
396};
397
398/*---------------------------------------------------------------------------*/
399/*---------------------------------------------------------------------------*/
400
401namespace math
402{
414 inline constexpr ARCCORE_HOST_DEVICE bool isNearlyZero(const Real3x3& v)
415 {
416 return isNearlyZero(v.x) && isNearlyZero(v.y) && isNearlyZero(v.z);
417 }
418} // namespace math
419
420/*---------------------------------------------------------------------------*/
421/*---------------------------------------------------------------------------*/
422
423inline constexpr ARCCORE_HOST_DEVICE bool Real3x3::
424isNearlyZero() const
425{
426 return math::isNearlyZero(*this);
427}
428
429/*---------------------------------------------------------------------------*/
430/*---------------------------------------------------------------------------*/
431
432} // End namespace Arcane
433
434/*---------------------------------------------------------------------------*/
435/*---------------------------------------------------------------------------*/
436
437#endif
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Classe gérant une matrice de réel de dimension 3x3.
Definition Real3x3.h:66
friend constexpr ARCCORE_HOST_DEVICE Real3x3 operator*(Real sca, Real3x3 vec)
Multiplication par un scalaire.
Definition Real3x3.h:346
Real3x3(const Real3x3 &f)=default
Construit un triplet identique à f.
constexpr static ARCCORE_HOST_DEVICE Real3x3 identity()
Construit la matrice identité
Definition Real3x3.h:130
ARCCORE_HOST_DEVICE Real & operator()(Integer i, Integer j)
Accès à la i-ème ligne et j-ème colonne.
Definition Real3x3.h:320
constexpr ARCCORE_HOST_DEVICE Real3x3(const Real3x3POD &f)
Construit un triplet identique à f.
Definition Real3x3.h:95
constexpr ARCCORE_HOST_DEVICE Real3x3 & reset()
Remet à zéro les coefficients de la matrice.
Definition Real3x3.h:150
friend constexpr ARCCORE_HOST_DEVICE bool operator<(Real3x3 v1, Real3x3 v2)
Opérateur de comparaison.
Definition Real3x3.h:369
constexpr ARCCORE_HOST_DEVICE Real3x3 operator-() const
Créé un tenseur opposé au tenseur actuel.
Definition Real3x3.h:239
constexpr ARCCORE_HOST_DEVICE Real3x3 & subSame(Real3 b)
Soustrait b à chaque composante du triplet.
Definition Real3x3.h:209
constexpr ARCCORE_HOST_DEVICE bool operator==(Real3x3 b) const
Compare composant pas composante l'instance courante à b.
Definition Real3x3.h:247
constexpr ARCCORE_HOST_DEVICE void operator*=(Real b)
Multiple chaque composante de la matrice par le réel b.
Definition Real3x3.h:221
constexpr ARCCORE_HOST_DEVICE Real3x3 & operator+=(Real3x3 b)
Ajoute b au triplet.
Definition Real3x3.h:217
Real3 z
premier élément du triplet
Definition Real3x3.h:119
constexpr ARCCORE_HOST_DEVICE Real determinant() const
Déterminant de la matrice.
Definition Real3x3.h:328
constexpr ARCCORE_HOST_DEVICE bool operator!=(Real3x3 b) const
Compare deux triplets. Pour la notion d'égalité, voir operator==()
Definition Real3x3.h:258
constexpr ARCCORE_HOST_DEVICE Real3x3()
Construit la matrice avec tous les coefficiants nuls.
Definition Real3x3.h:70
ARCCORE_HOST_DEVICE Real3 & operator[](Integer i)
Accès à la i-ème ligne (entre 0 et 2 inclus) de l'instance.
Definition Real3x3.h:299
Real3 y
premier élément du triplet
Definition Real3x3.h:118
constexpr static ARCCORE_HOST_DEVICE Real3x3 fromColumns(Real ax, Real ay, Real az, Real bx, Real by, Real bz, Real cx, Real cy, Real cz)
Construit la matrice ((ax,bx,cx),(ay,by,cy),(az,bz,cz)).
Definition Real3x3.h:133
constexpr ARCCORE_HOST_DEVICE Real3x3 & addSame(Real3 b)
Ajoute b à chaque composante du triplet.
Definition Real3x3.h:201
friend constexpr ARCCORE_HOST_DEVICE Real3x3 operator/(Real3x3 vec, Real sca)
Division par un scalaire.
Definition Real3x3.h:358
Real3x3 & operator=(const Real3x3 &f)=default
Opérateur de recopie.
ARCCORE_HOST_DEVICE Real3 operator()(Integer i) const
Accès en lecture seule à la i-ème (entre 0 et 2 inclus) ligne de l'instance.
Definition Real3x3.h:277
constexpr ARCCORE_HOST_DEVICE Real3x3 & operator-=(Real3x3 b)
Soustrait b au triplet.
Definition Real3x3.h:219
ARCCORE_HOST_DEVICE Real operator()(Integer i, Integer j) const
Accès en lecture seule à la i-ème ligne et j-ème colonne.
Definition Real3x3.h:288
Real3 x
premier élément du triplet
Definition Real3x3.h:117
constexpr ARCCORE_HOST_DEVICE Real3x3 & assign(Real3 ax, Real3 ay, Real3 az)
Affecte à l'instance les lignes (ax,ay,az)
Definition Real3x3.h:157
constexpr ARCCORE_HOST_DEVICE void operator/=(Real b)
Divise chaque composante de la matrice par le réel b.
Definition Real3x3.h:228
friend std::ostream & operator<<(std::ostream &o, Real3x3 t)
Ecrit le triplet t sur le flot o.
Definition Real3x3.h:334
friend constexpr ARCCORE_HOST_DEVICE Real3x3 operator*(Real3x3 vec, Real sca)
Multiplication par un scalaire.
Definition Real3x3.h:352
constexpr ARCCORE_HOST_DEVICE Real3x3 & sub(Real3x3 b)
Soustrait b au triplet.
Definition Real3x3.h:193
constexpr static ARCCORE_HOST_DEVICE Real3x3 null()
Construit le tenseur nul.
Definition Real3x3.h:124
ARCCORE_HOST_DEVICE Real3 & operator()(Integer i)
Accès à la i-ème ligne (entre 0 et 2 inclus) de l'instance.
Definition Real3x3.h:309
constexpr ARCCORE_HOST_DEVICE Real3x3 & assign(Real3x3 f)
Copie la matrice f.
Definition Real3x3.h:166
ARCCORE_HOST_DEVICE Real3 operator[](Integer i) const
Accès en lecture seule à la i-ème (entre 0 et 2 inclus) ligne de l'instance.
Definition Real3x3.h:267
constexpr ARCCORE_HOST_DEVICE Real3x3 & operator=(Real v)
Affecte à l'instance le triplet (v,v,v).
Definition Real3x3.h:109
friend std::istream & operator>>(std::istream &i, Real3x3 &t)
Lit le triplet t à partir du flot o.
Definition Real3x3.h:340
constexpr ARCCORE_HOST_DEVICE Real3x3 operator-(Real3x3 b) const
Créé un triplet qui vaut b soustrait de ce triplet.
Definition Real3x3.h:237
constexpr static ARCCORE_HOST_DEVICE Real3x3 fromLines(Real ax, Real bx, Real cx, Real ay, Real by, Real cy, Real az, Real bz, Real cz)
Construit la matrice ((ax,bx,cx),(ay,by,cy),(az,bz,cz)).
Definition Real3x3.h:139
constexpr ARCCORE_HOST_DEVICE Real3x3(Real v)
Construit l'instance avec le triplet (v,v,v).
Definition Real3x3.h:101
constexpr ARCCORE_HOST_DEVICE Real3x3 operator+(Real3x3 b) const
Créé un triplet qui vaut ce triplet ajouté à b.
Definition Real3x3.h:235
ARCANE_DEPRECATED_116 Real3x3(Real ax, Real ay, Real az, Real bx, Real by, Real bz, Real cx, Real cy, Real cz)
Construit le tenseur ((ax,bx,cx),(ay,by,cy),(az,bz,cz)).
Definition Real3x3.h:87
constexpr ARCCORE_HOST_DEVICE Real3x3 & add(Real3x3 b)
Ajoute b au triplet.
Definition Real3x3.h:185
constexpr static ARCCORE_HOST_DEVICE Real3x3 zero()
Construit la matrice nulle.
Definition Real3x3.h:127
constexpr ARCCORE_HOST_DEVICE Real3x3 copy() const
Retourne une copie de la matrice.
Definition Real3x3.h:147
constexpr static ARCCORE_HOST_DEVICE bool _eq(Real a, Real b)
Compare les valeurs de a et b avec le comparateur TypeEqualT.
Definition Real3x3.h:392
constexpr ARCCORE_HOST_DEVICE Real3x3(Real3 ax, Real3 ay, Real3 az)
Construit la matrice avec les lignes (ax,ay,az)
Definition Real3x3.h:77
Opérations de comparaisons pour un type numérique T.
Definition Numeric.h:45
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 triplet
Definition Real3.h:36
Real z
troisième composante du triplet
Definition Real3.h:37
Real x
première composante du triplet
Definition Real3.h:35
Structure POD pour un Real3x3.
Definition Real3x3.h:31