Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
Real2x2.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/* Real2x2.h (C) 2000-2024 */
9/* */
10/* Matrice 2x2 de 'Real'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_REAL2X2_H
13#define ARCANE_UTILS_REAL2X2_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Real2.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
31{
32 public:
33
34 Real2POD x;
35 Real2POD y;
36};
37
38/*---------------------------------------------------------------------------*/
39/*---------------------------------------------------------------------------*/
52class ARCANE_UTILS_EXPORT Real2x2
53{
54 public:
55
57 constexpr ARCCORE_HOST_DEVICE Real2x2()
58 : x(Real2::null())
59 , y(Real2::null())
60 {}
62 constexpr ARCCORE_HOST_DEVICE Real2x2(Real2 ax, Real2 ay)
63 : x(ax)
64 , y(ay)
65 {}
70 ARCANE_DEPRECATED_116 Real2x2(Real ax, Real ay, Real bx, Real by)
71 : x(ax, bx)
72 , y(ay, by)
73 {}
75 Real2x2(const Real2x2& f) = default;
77 constexpr ARCCORE_HOST_DEVICE explicit Real2x2(const Real2x2POD& f)
78 : x(f.x)
79 , y(f.y)
80 {}
82 constexpr ARCCORE_HOST_DEVICE explicit Real2x2(Real v)
83 {
84 x = y = v;
85 }
87 Real2x2& operator=(const Real2x2& f) = default;
88
90 constexpr ARCCORE_HOST_DEVICE Real2x2& operator=(Real v)
91 {
92 x = y = v;
93 return (*this);
94 }
95
96 public:
97
100
101 public:
102
104 constexpr ARCCORE_HOST_DEVICE static Real2x2 null() { return Real2x2(); }
105
107 constexpr ARCCORE_HOST_DEVICE static Real2x2 fromColumns(Real ax, Real ay, Real bx, Real by)
108 {
109 return Real2x2(Real2(ax, bx), Real2(ay, by));
110 }
111
113 constexpr ARCCORE_HOST_DEVICE static Real2x2 fromLines(Real ax, Real bx, Real ay, Real by)
114 {
115 return Real2x2(Real2(ax, bx), Real2(ay, by));
116 }
117
118 public:
119
121 constexpr ARCCORE_HOST_DEVICE Real2x2 copy() const { return (*this); }
123 constexpr ARCCORE_HOST_DEVICE Real2x2& reset()
124 {
125 *this = null();
126 return (*this);
127 }
129 constexpr ARCCORE_HOST_DEVICE Real2x2& assign(Real2 ax, Real2 ay)
130 {
131 x = ax;
132 y = ay;
133 return (*this);
134 }
136 constexpr ARCCORE_HOST_DEVICE Real2x2& assign(Real2x2 f)
137 {
138 x = f.x;
139 y = f.y;
140 return (*this);
141 }
153 constexpr ARCCORE_HOST_DEVICE bool isNearlyZero() const
154 {
155 return x.isNearlyZero() && y.isNearlyZero();
156 }
161 std::istream& assign(std::istream& i);
163 std::ostream& print(std::ostream& o) const;
165 std::ostream& printXy(std::ostream& o) const;
166
168 constexpr ARCCORE_HOST_DEVICE Real2x2& add(Real2x2 b)
169 {
170 x += b.x;
171 y += b.y;
172 return (*this);
173 }
175 constexpr ARCCORE_HOST_DEVICE Real2x2& sub(Real2x2 b)
176 {
177 x -= b.x;
178 y -= b.y;
179 return (*this);
180 }
182 //Real2x2& mul(Real2x2 b) { x*=b.x; y*=b.y; return (*this); }
184 constexpr ARCCORE_HOST_DEVICE Real2x2& div(Real2x2 b)
185 {
186 x /= b.x;
187 y /= b.y;
188 return (*this);
189 }
191 constexpr ARCCORE_HOST_DEVICE Real2x2& addSame(Real2 b)
192 {
193 x += b;
194 y += b;
195 return (*this);
196 }
198 constexpr ARCCORE_HOST_DEVICE Real2x2& subSame(Real2 b)
199 {
200 x -= b;
201 y -= b;
202 return (*this);
203 }
205 constexpr ARCCORE_HOST_DEVICE Real2x2& mulSame(Real2 b)
206 {
207 x *= b;
208 y *= b;
209 return (*this);
210 }
212 constexpr ARCCORE_HOST_DEVICE Real2x2& divSame(Real2 b)
213 {
214 x /= b;
215 y /= b;
216 return (*this);
217 }
219 constexpr ARCCORE_HOST_DEVICE Real2x2& operator+=(Real2x2 b) { return add(b); }
221 constexpr ARCCORE_HOST_DEVICE Real2x2& operator-=(Real2x2 b) { return sub(b); }
223 //Real2x2& operator*=(Real2x2 b) { return mul(b); }
225 constexpr ARCCORE_HOST_DEVICE void operator*=(Real b)
226 {
227 x *= b;
228 y *= b;
229 }
231 //Real2x2& operator/= (Real2x2 b) { return div(b); }
233 constexpr ARCCORE_HOST_DEVICE void operator/=(Real b)
234 {
235 x /= b;
236 y /= b;
237 }
239 constexpr ARCCORE_HOST_DEVICE Real2x2 operator+(Real2x2 b) const { return Real2x2(x + b.x, y + b.y); }
241 constexpr ARCCORE_HOST_DEVICE Real2x2 operator-(Real2x2 b) const { return Real2x2(x - b.x, y - b.y); }
243 constexpr ARCCORE_HOST_DEVICE Real2x2 operator-() const { return Real2x2(-x, -y); }
244
251 constexpr ARCCORE_HOST_DEVICE bool operator==(Real2x2 b) const
252 {
253 return (x == b.x) && (y == b.y);
254 }
261 constexpr ARCCORE_HOST_DEVICE bool operator!=(Real2x2 b) const
262 {
263 return !operator==(b);
264 }
265
270 ARCCORE_HOST_DEVICE Real2 operator[](Integer i) const
271 {
272 ARCCORE_CHECK_AT(i, 2);
273 return (&x)[i];
274 }
275
280 ARCCORE_HOST_DEVICE Real2 operator()(Integer i) const
281 {
282 ARCCORE_CHECK_AT(i, 2);
283 return (&x)[i];
284 }
285
291 ARCCORE_HOST_DEVICE Real operator()(Integer i, Integer j) const
292 {
293 ARCCORE_CHECK_AT(i, 2);
294 ARCCORE_CHECK_AT(j, 2);
295 return (&x)[i][j];
296 }
297
302 ARCCORE_HOST_DEVICE Real2& operator[](Integer i)
303 {
304 ARCCORE_CHECK_AT(i, 2);
305 return (&x)[i];
306 }
307
312 ARCCORE_HOST_DEVICE Real2& operator()(Integer i)
313 {
314 ARCCORE_CHECK_AT(i, 2);
315 return (&x)[i];
316 }
317
323 ARCCORE_HOST_DEVICE Real& operator()(Integer i, Integer j)
324 {
325 ARCCORE_CHECK_AT(i, 2);
326 ARCCORE_CHECK_AT(j, 2);
327 return (&x)[i][j];
328 }
329
330 public:
331
333 friend std::ostream& operator<<(std::ostream& o, Real2x2 t)
334 {
335 return t.printXy(o);
336 }
337
339 friend std::istream& operator>>(std::istream& i, Real2x2& t)
340 {
341 return t.assign(i);
342 }
343
345 friend constexpr ARCCORE_HOST_DEVICE Real2x2 operator*(Real sca, Real2x2 vec)
346 {
347 return Real2x2(vec.x * sca, vec.y * sca);
348 }
349
351 friend constexpr ARCCORE_HOST_DEVICE Real2x2 operator*(Real2x2 vec, Real sca)
352 {
353 return Real2x2(vec.x * sca, vec.y * sca);
354 }
355
357 friend constexpr ARCCORE_HOST_DEVICE Real2x2 operator/(Real2x2 vec, Real sca)
358 {
359 return Real2x2(vec.x / sca, vec.y / sca);
360 }
361
368 friend constexpr ARCCORE_HOST_DEVICE bool operator<(Real2x2 v1, Real2x2 v2)
369 {
370 if (v1.x == v2.x) {
371 return v1.y < v2.y;
372 }
373 return (v1.x < v2.x);
374 }
375
376 private:
377
383 constexpr ARCCORE_HOST_DEVICE static bool _eq(Real a, Real b)
384 {
385 return TypeEqualT<Real>::isEqual(a, b);
386 }
387};
388
389/*---------------------------------------------------------------------------*/
390/*---------------------------------------------------------------------------*/
391
392} // End namespace Arcane
393
394/*---------------------------------------------------------------------------*/
395/*---------------------------------------------------------------------------*/
396
397#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 bool isNearlyZero() const
Indique si l'instance est proche de l'instance nulle.
Definition Real2.h:201
Classe gérant une matrice de réel de dimension 2x2.
Definition Real2x2.h:53
constexpr ARCCORE_HOST_DEVICE Real2x2 & operator=(Real v)
Affecte à l'instance le couple (v,v,v).
Definition Real2x2.h:90
constexpr ARCCORE_HOST_DEVICE Real2x2 & mulSame(Real2 b)
Multiplie chaque composante du couple par b.
Definition Real2x2.h:205
constexpr static ARCCORE_HOST_DEVICE Real2x2 null()
Construit la matrice nulle.
Definition Real2x2.h:104
ARCCORE_HOST_DEVICE Real2 operator()(Integer i) const
Accès en lecture seule à la i-ème (entre 0 et 1 inclus) ligne de l'instance.
Definition Real2x2.h:280
constexpr ARCCORE_HOST_DEVICE Real2x2 copy() const
Retourne une copie du couple.
Definition Real2x2.h:121
constexpr ARCCORE_HOST_DEVICE Real2x2 & div(Real2x2 b)
Multiple chaque composante du couple par la composant correspondant de b.
Definition Real2x2.h:184
Real2 x
Première composante.
Definition Real2x2.h:98
constexpr static ARCCORE_HOST_DEVICE Real2x2 fromLines(Real ax, Real bx, Real ay, Real by)
Construit le couple ((ax,bx),(ay,by)).
Definition Real2x2.h:113
ARCANE_DEPRECATED_116 Real2x2(Real ax, Real ay, Real bx, Real by)
Construit le couple ((ax,bx),(ay,by)).
Definition Real2x2.h:70
Real2 y
Deuxième composante.
Definition Real2x2.h:99
constexpr ARCCORE_HOST_DEVICE bool operator!=(Real2x2 b) const
Compare deux couples. Pour la notion d'égalité, voir operator==()
Definition Real2x2.h:261
friend constexpr ARCCORE_HOST_DEVICE Real2x2 operator*(Real2x2 vec, Real sca)
Multiplication par un scalaire.
Definition Real2x2.h:351
constexpr ARCCORE_HOST_DEVICE Real2x2 & add(Real2x2 b)
Ajoute b au couple.
Definition Real2x2.h:168
ARCCORE_HOST_DEVICE Real & operator()(Integer i, Integer j)
Accès à la i-ème ligne et j-ème colonne.
Definition Real2x2.h:323
constexpr ARCCORE_HOST_DEVICE bool isNearlyZero() const
Compare la matrice avec la matrice nulle.
Definition Real2x2.h:153
friend constexpr ARCCORE_HOST_DEVICE bool operator<(Real2x2 v1, Real2x2 v2)
Opérateur de comparaison.
Definition Real2x2.h:368
constexpr ARCCORE_HOST_DEVICE Real2x2 & assign(Real2 ax, Real2 ay)
Affecte à l'instance le couple (ax,ay,az)
Definition Real2x2.h:129
constexpr ARCCORE_HOST_DEVICE Real2x2(Real v)
Construit l'instance avec le triplet (v,v,v).
Definition Real2x2.h:82
constexpr ARCCORE_HOST_DEVICE Real2x2(const Real2x2POD &f)
Construit un couple identique à f.
Definition Real2x2.h:77
constexpr ARCCORE_HOST_DEVICE void operator/=(Real b)
Divise chaque composante du couple par la composant correspondant de b.
Definition Real2x2.h:233
friend std::istream & operator>>(std::istream &i, Real2x2 &t)
Lit le couple t à partir du flot o.
Definition Real2x2.h:339
ARCCORE_HOST_DEVICE Real operator()(Integer i, Integer j) const
Accès en lecture seule à la i-ème ligne et j-ème colonne.
Definition Real2x2.h:291
constexpr ARCCORE_HOST_DEVICE Real2x2 & addSame(Real2 b)
Ajoute b à chaque composante du couple.
Definition Real2x2.h:191
Real2x2(const Real2x2 &f)=default
Construit un couple identique à f.
constexpr static ARCCORE_HOST_DEVICE bool _eq(Real a, Real b)
Compare les valeurs de a et b avec le comparateur TypeEqualT.
Definition Real2x2.h:383
constexpr ARCCORE_HOST_DEVICE Real2x2 & sub(Real2x2 b)
Soustrait b au couple.
Definition Real2x2.h:175
constexpr ARCCORE_HOST_DEVICE Real2x2 & reset()
Réinitialise le couple avec les constructeurs par défaut.
Definition Real2x2.h:123
constexpr ARCCORE_HOST_DEVICE Real2x2 operator-() const
Créé un tenseur opposé au tenseur actuel.
Definition Real2x2.h:243
Real2x2 & operator=(const Real2x2 &f)=default
Opérateur de recopie.
constexpr ARCCORE_HOST_DEVICE Real2x2 & operator+=(Real2x2 b)
Ajoute b au couple.
Definition Real2x2.h:219
constexpr ARCCORE_HOST_DEVICE Real2x2 & assign(Real2x2 f)
Copie le couple f.
Definition Real2x2.h:136
constexpr static ARCCORE_HOST_DEVICE Real2x2 fromColumns(Real ax, Real ay, Real bx, Real by)
Construit le couple ((ax,bx),(ay,by)).
Definition Real2x2.h:107
constexpr ARCCORE_HOST_DEVICE void operator*=(Real b)
Multiple chaque composante du couple par la composant correspondant de b.
Definition Real2x2.h:225
friend constexpr ARCCORE_HOST_DEVICE Real2x2 operator*(Real sca, Real2x2 vec)
Multiplication par un scalaire.
Definition Real2x2.h:345
constexpr ARCCORE_HOST_DEVICE Real2x2(Real2 ax, Real2 ay)
Construit le couple (ax,ay)
Definition Real2x2.h:62
ARCCORE_HOST_DEVICE Real2 & operator()(Integer i)
Accès à la i-ème ligne (entre 0 et 1 inclus) de l'instance.
Definition Real2x2.h:312
constexpr ARCCORE_HOST_DEVICE Real2x2 & divSame(Real2 b)
Divise chaque composante du couple par b.
Definition Real2x2.h:212
constexpr ARCCORE_HOST_DEVICE Real2x2()
Construit la matrice nulle.
Definition Real2x2.h:57
constexpr ARCCORE_HOST_DEVICE Real2x2 operator+(Real2x2 b) const
Créé un couple qui vaut ce couple ajouté à b.
Definition Real2x2.h:239
ARCCORE_HOST_DEVICE Real2 operator[](Integer i) const
Accès en lecture seule à la i-ème (entre 0 et 1 inclus) ligne de l'instance.
Definition Real2x2.h:270
friend constexpr ARCCORE_HOST_DEVICE Real2x2 operator/(Real2x2 vec, Real sca)
Division par un scalaire.
Definition Real2x2.h:357
friend std::ostream & operator<<(std::ostream &o, Real2x2 t)
Ecrit le couple t sur le flot o.
Definition Real2x2.h:333
constexpr ARCCORE_HOST_DEVICE Real2x2 & subSame(Real2 b)
Soustrait b à chaque composante du couple.
Definition Real2x2.h:198
constexpr ARCCORE_HOST_DEVICE Real2x2 operator-(Real2x2 b) const
Créé un couple qui vaut b soustrait de ce couple.
Definition Real2x2.h:241
constexpr ARCCORE_HOST_DEVICE Real2x2 & operator-=(Real2x2 b)
Soustrait b au couple.
Definition Real2x2.h:221
ARCCORE_HOST_DEVICE Real2 & operator[](Integer i)
Accès à la i-ème ligne (entre 0 et 1 inclus) de l'instance.
Definition Real2x2.h:302
constexpr ARCCORE_HOST_DEVICE bool operator==(Real2x2 b) const
Compare composant pas composante l'instance courante à b.
Definition Real2x2.h:251
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 -*-
Structure POD pour un Real2x2.
Definition Real2x2.h:31