Arcane  v3.14.10.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
185 constexpr ARCCORE_HOST_DEVICE bool isNearlyZero() const
186 {
187 return x.isNearlyZero() && y.isNearlyZero() && z.isNearlyZero();
188 }
189
194 std::istream& assign(std::istream& i);
196 std::ostream& print(std::ostream& o) const;
198 std::ostream& printXyz(std::ostream& o) const;
199
201 constexpr ARCCORE_HOST_DEVICE Real3x3& add(Real3x3 b)
202 {
203 x += b.x;
204 y += b.y;
205 z += b.z;
206 return (*this);
207 }
209 constexpr ARCCORE_HOST_DEVICE Real3x3& sub(Real3x3 b)
210 {
211 x -= b.x;
212 y -= b.y;
213 z -= b.z;
214 return (*this);
215 }
217 constexpr ARCCORE_HOST_DEVICE Real3x3& addSame(Real3 b)
218 {
219 x += b;
220 y += b;
221 z += b;
222 return (*this);
223 }
225 constexpr ARCCORE_HOST_DEVICE Real3x3& subSame(Real3 b)
226 {
227 x -= b;
228 y -= b;
229 z -= b;
230 return (*this);
231 }
233 constexpr ARCCORE_HOST_DEVICE Real3x3& operator+=(Real3x3 b) { return add(b); }
235 constexpr ARCCORE_HOST_DEVICE Real3x3& operator-=(Real3x3 b) { return sub(b); }
237 constexpr ARCCORE_HOST_DEVICE void operator*=(Real b)
238 {
239 x *= b;
240 y *= b;
241 z *= b;
242 }
244 constexpr ARCCORE_HOST_DEVICE void operator/=(Real b)
245 {
246 x /= b;
247 y /= b;
248 z /= b;
249 }
251 constexpr ARCCORE_HOST_DEVICE Real3x3 operator+(Real3x3 b) const { return Real3x3(x + b.x, y + b.y, z + b.z); }
253 constexpr ARCCORE_HOST_DEVICE Real3x3 operator-(Real3x3 b) const { return Real3x3(x - b.x, y - b.y, z - b.z); }
255 constexpr ARCCORE_HOST_DEVICE Real3x3 operator-() const { return Real3x3(-x, -y, -z); }
256
263 constexpr ARCCORE_HOST_DEVICE bool operator==(Real3x3 b) const
264 {
265 return x == b.x && y == b.y && z == b.z;
266 }
267
274 constexpr ARCCORE_HOST_DEVICE bool operator!=(Real3x3 b) const
275 {
276 return !operator==(b);
277 }
278
283 ARCCORE_HOST_DEVICE Real3 operator[](Integer i) const
284 {
285 ARCCORE_CHECK_AT(i, 3);
286 return (&x)[i];
287 }
288
293 ARCCORE_HOST_DEVICE Real3 operator()(Integer i) const
294 {
295 ARCCORE_CHECK_AT(i, 3);
296 return (&x)[i];
297 }
298
304 ARCCORE_HOST_DEVICE Real operator()(Integer i, Integer j) const
305 {
306 ARCCORE_CHECK_AT(i, 3);
307 ARCCORE_CHECK_AT(j, 3);
308 return (&x)[i][j];
309 }
310
315 ARCCORE_HOST_DEVICE Real3& operator[](Integer i)
316 {
317 ARCCORE_CHECK_AT(i, 3);
318 return (&x)[i];
319 }
320
325 ARCCORE_HOST_DEVICE Real3& operator()(Integer i)
326 {
327 ARCCORE_CHECK_AT(i, 3);
328 return (&x)[i];
329 }
330
336 ARCCORE_HOST_DEVICE Real& operator()(Integer i, Integer j)
337 {
338 ARCCORE_CHECK_AT(i, 3);
339 ARCCORE_CHECK_AT(j, 3);
340 return (&x)[i][j];
341 }
342
344 constexpr ARCCORE_HOST_DEVICE Real determinant() const
345 {
346 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));
347 }
348
350 friend std::ostream& operator<<(std::ostream& o, Real3x3 t)
351 {
352 return t.printXyz(o);
353 }
354
356 friend std::istream& operator>>(std::istream& i, Real3x3& t)
357 {
358 return t.assign(i);
359 }
360
362 friend constexpr ARCCORE_HOST_DEVICE Real3x3 operator*(Real sca, Real3x3 vec)
363 {
364 return Real3x3(vec.x * sca, vec.y * sca, vec.z * sca);
365 }
366
368 friend constexpr ARCCORE_HOST_DEVICE Real3x3 operator*(Real3x3 vec, Real sca)
369 {
370 return Real3x3(vec.x * sca, vec.y * sca, vec.z * sca);
371 }
372
374 friend constexpr ARCCORE_HOST_DEVICE Real3x3 operator/(Real3x3 vec, Real sca)
375 {
376 return Real3x3(vec.x / sca, vec.y / sca, vec.z / sca);
377 }
378
385 friend constexpr ARCCORE_HOST_DEVICE bool operator<(Real3x3 v1, Real3x3 v2)
386 {
387 if (v1.x == v2.x) {
388 if (v1.y == v2.y)
389 return v1.z < v2.z;
390 else
391 return v1.y < v2.y;
392 }
393 return (v1.x < v2.x);
394 }
395
396 private:
397
403 constexpr ARCCORE_HOST_DEVICE static bool _eq(Real a, Real b)
404 {
405 return TypeEqualT<Real>::isEqual(a, b);
406 }
407};
408
409/*---------------------------------------------------------------------------*/
410/*---------------------------------------------------------------------------*/
411
412} // End namespace Arcane
413
414/*---------------------------------------------------------------------------*/
415/*---------------------------------------------------------------------------*/
416
417#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 3.
Definition Real3.h:132
constexpr ARCCORE_HOST_DEVICE bool isNearlyZero() const
Indique si l'instance est proche de l'instance nulle.
Definition Real3.h:225
Classe gérant une matrice de réel de dimension 3x3.
Definition Real3x3.h:66
constexpr ARCCORE_HOST_DEVICE bool isNearlyZero() const
Compare la matrice avec la matrice nulle.
Definition Real3x3.h:185
friend constexpr ARCCORE_HOST_DEVICE Real3x3 operator*(Real sca, Real3x3 vec)
Multiplication par un scalaire.
Definition Real3x3.h:362
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:336
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:385
constexpr ARCCORE_HOST_DEVICE Real3x3 operator-() const
Créé un tenseur opposé au tenseur actuel.
Definition Real3x3.h:255
constexpr ARCCORE_HOST_DEVICE Real3x3 & subSame(Real3 b)
Soustrait b à chaque composante du triplet.
Definition Real3x3.h:225
constexpr ARCCORE_HOST_DEVICE bool operator==(Real3x3 b) const
Compare composant pas composante l'instance courante à b.
Definition Real3x3.h:263
constexpr ARCCORE_HOST_DEVICE void operator*=(Real b)
Multiple chaque composante de la matrice par le réel b.
Definition Real3x3.h:237
constexpr ARCCORE_HOST_DEVICE Real3x3 & operator+=(Real3x3 b)
Ajoute b au triplet.
Definition Real3x3.h:233
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:344
constexpr ARCCORE_HOST_DEVICE bool operator!=(Real3x3 b) const
Compare deux triplets. Pour la notion d'égalité, voir operator==()
Definition Real3x3.h:274
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:315
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:217
friend constexpr ARCCORE_HOST_DEVICE Real3x3 operator/(Real3x3 vec, Real sca)
Division par un scalaire.
Definition Real3x3.h:374
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:293
constexpr ARCCORE_HOST_DEVICE Real3x3 & operator-=(Real3x3 b)
Soustrait b au triplet.
Definition Real3x3.h:235
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:304
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:244
friend std::ostream & operator<<(std::ostream &o, Real3x3 t)
Ecrit le triplet t sur le flot o.
Definition Real3x3.h:350
friend constexpr ARCCORE_HOST_DEVICE Real3x3 operator*(Real3x3 vec, Real sca)
Multiplication par un scalaire.
Definition Real3x3.h:368
constexpr ARCCORE_HOST_DEVICE Real3x3 & sub(Real3x3 b)
Soustrait b au triplet.
Definition Real3x3.h:209
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:325
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:283
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:356
constexpr ARCCORE_HOST_DEVICE Real3x3 operator-(Real3x3 b) const
Créé un triplet qui vaut b soustrait de ce triplet.
Definition Real3x3.h:253
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:251
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:201
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:403
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