Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
Real3x3Proxy.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* Real3x3Proxy.h (C) 2000-2008 */
9/* */
10/* Proxy d'un 'Real3x3'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_REAL3X3PROXY_H
13#define ARCANE_UTILS_REAL3X3PROXY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Real3x3.h"
18#include "arcane/utils/Real3Proxy.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23ARCANE_BEGIN_NAMESPACE
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
30class ARCANE_UTILS_EXPORT Real3x3Proxy
31{
32 public:
33
36 : x(value.x,info), y(value.y,info), z(value.z,info), m_value(value), m_info(info) {}
39 : x(f.x), y(f.y), z(f.z), m_value(f.m_value), m_info(f.m_info) {}
40 const Real3x3& operator=(const Real3x3Proxy f)
41 { x=f.x; y=f.y; z=f.z; return m_value; }
42 const Real3x3& operator=(Real3x3 f)
43 { x=f.x; y=f.y; z=f.z; return m_value; }
45 const Real3x3& operator= (Real v)
46 { x = y = z = v; return m_value; }
47 operator const Real3x3&() const
48 {
49 return getValue();
50 }
51 //operator Real3x3()
52 //{
53 // return getValueMutable();
54 //}
55
56 public:
57
61
62 private:
63
64 Real3x3& m_value;
65 MemoryAccessInfo m_info;
66
67 public:
68
70 Real3x3 copy() const { return m_value; }
72 Real3x3Proxy& reset() { x.reset(); y.reset(); z.reset(); return (*this); }
75 { x = ax; y = ay; z = az; return (*this); }
78 { x = f.x; y = f.y; z = f.z; return (*this); }
90 bool isNearlyZero() const
91 { return x.isNearlyZero() && y.isNearlyZero() && z.isNearlyZero(); }
96 std::istream& assign(std::istream& i);
98 std::ostream& print(std::ostream& o) const;
100 std::ostream& printXyz(std::ostream& o) const;
101
103 Real3x3Proxy& add(Real3x3 b) { x += b.x; y += b.y; z += b.z; return (*this); }
105 Real3x3Proxy& sub(Real3x3 b) { x -= b.x; y -= b.y; z -= b.z; return (*this); }
107 Real3x3Proxy& addSame(Real3 b) { x += b; y += b; z += b; return (*this); }
109 Real3x3Proxy& subSame(Real3 b) { x -= b; y -= b; z -= b; return (*this); }
111 Real3x3Proxy& mulSame(Real3 b) { x *= b; y *= b; z *= b; return (*this); }
113 Real3x3Proxy& divSame(Real3 b) { x /= b; y /= b; z /= b; return (*this); }
115 Real3x3Proxy& operator+= (Real3x3 b) { return add(b); }
117 Real3x3Proxy& operator-= (Real3x3 b) { return sub(b); }
119 void operator*= (Real b) { x *= b; y *= b; z *= b; }
121 void operator/= (Real b) { x /= b; y /= b; z /= b; }
123 Real3x3 operator+(Real3x3 b) const { return Real3x3(x+b.x,y+b.y,z+b.z); }
125 Real3x3 operator-(Real3x3 b) const { return Real3x3(x-b.x,y-b.y,z-b.z); }
127 Real3x3 operator-() const { return Real3x3(-x,-y,-z); }
128
129 public:
130 const Real3x3& getValue() const
131 {
132 m_info.setRead();
133 return m_value;
134 }
135 Real3x3& getValueMutable()
136 {
137 m_info.setReadOrWrite();
138 return m_value;
139 }
140 private:
141
147 static bool _eq(Real a,Real b)
148 { return TypeEqualT<Real>::isEqual(a,b); }
149};
150
151/*---------------------------------------------------------------------------*/
152/*---------------------------------------------------------------------------*/
157inline std::ostream&
158operator<< (std::ostream& o,Real3x3Proxy t)
159{
160 return t.printXyz(o);
161}
166inline std::istream&
167operator>> (std::istream& i,Real3x3Proxy& t)
168{
169 return t.assign(i);
170}
171
172/*---------------------------------------------------------------------------*/
173/*---------------------------------------------------------------------------*/
174
175inline bool
176operator==(const Real3x3& a,const Real3x3Proxy& b)
177{
178 return a==b.getValue();
179}
180inline bool
181operator==(const Real3x3Proxy& a,const Real3x3& b)
182{
183 return a.getValue()==b;
184}
185inline bool
186operator==(const Real3x3Proxy& a,const Real3x3Proxy& b)
187{
188 return a.getValue()==b.getValue();
189}
190
191/*---------------------------------------------------------------------------*/
192/*---------------------------------------------------------------------------*/
193
194inline bool
195operator!=(const Real3x3& a,const Real3x3Proxy& b)
196{
197 return a!=b.getValue();
198}
199inline bool
200operator!=(const Real3x3Proxy& a,const Real3x3& b)
201{
202 return a.getValue()!=b;
203}
204inline bool
205operator!=(const Real3x3Proxy& a,const Real3x3Proxy& b)
206{
207 return a.getValue()!=b.getValue();
208}
209
210/*---------------------------------------------------------------------------*/
211/*---------------------------------------------------------------------------*/
213inline Real3x3
214operator*(Real sca,Real3x3Proxy vec)
215{
216 return Real3x3(vec.x*sca,vec.y*sca,vec.z*sca);
217}
218
219/*---------------------------------------------------------------------------*/
220/*---------------------------------------------------------------------------*/
222inline Real3x3
223operator*(const Real3x3Proxy& vec,Real sca)
224{
225 return Real3x3(vec.x*sca,vec.y*sca,vec.z*sca);
226}
227
228/*---------------------------------------------------------------------------*/
229/*---------------------------------------------------------------------------*/
231inline Real3x3
233{
234 return Real3x3(vec.x/sca,vec.y/sca,vec.z/sca);
235}
236
237/*---------------------------------------------------------------------------*/
238/*---------------------------------------------------------------------------*/
245inline bool
247{
248 if (v1.x==v2.x){
249 if (v1.y==v2.y)
250 return v1.z<v2.z;
251 else
252 return v1.y<v2.y;
253 }
254 return (v1.x<v2.x);
255}
256
257/*---------------------------------------------------------------------------*/
258/*---------------------------------------------------------------------------*/
259
260ARCANE_END_NAMESPACE
261
262/*---------------------------------------------------------------------------*/
263/*---------------------------------------------------------------------------*/
264
265#endif
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Proxy d'un Real3.
Definition Real3Proxy.h:37
RealProxy x
première composante du triplet
Definition Real3Proxy.h:63
Real3Proxy & reset()
Réinitialise le triplet avec les constructeurs par défaut.
Definition Real3Proxy.h:77
bool isNearlyZero() const
Compare le triplet avec le triplet nul.
Definition Real3Proxy.h:99
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Proxy d'un 'Real3x3'.
Real3x3Proxy & subSame(Real3 b)
Soustrait b à chaque composante du triplet.
Real3x3Proxy & addSame(Real3 b)
Ajoute b à chaque composante du triplet.
Real3x3Proxy & divSame(Real3 b)
Divise chaque composante du triplet par b.
Real3x3Proxy(const Real3x3Proxy &f)
Construit un triplet identique à f.
Real3Proxy z
premier élément du triplet
Real3x3Proxy & add(Real3x3 b)
Ajoute b au triplet.
Real3x3Proxy & mulSame(Real3 b)
Multiplie chaque composante du triplet par b.
Real3x3Proxy & reset()
Réinitialise le triplet avec les constructeurs par défaut.
Real3x3Proxy & sub(Real3x3 b)
Soustrait b au triplet.
Real3x3Proxy(Real3x3 &value, const MemoryAccessInfo &info)
Construit le triplet (ax,ay,az)
Real3x3 operator+(Real3x3 b) const
Créé un triplet qui vaut ce triplet ajouté à b.
Real3x3Proxy & assign(Real3x3 f)
Copie le triplet f.
Real3Proxy x
premier élément du triplet
Real3x3 copy() const
Retourne une copie du triplet.
Real3x3 operator-(Real3x3 b) const
Créé un triplet qui vaut b soustrait de ce triplet.
Real3Proxy y
premier élément du triplet
Real3x3 operator-() const
Créé un tenseur opposé au tenseur actuel.
bool isNearlyZero() const
Compare la matrice avec la matrice nulle.
Real3x3Proxy & assign(Real3 ax, Real3 ay, Real3 az)
Affecte à l'instance le triplet (ax,ay,az)
static bool _eq(Real a, Real b)
Compare les valeurs de a et b avec le comparateur TypeEqualT.
Classe gérant une matrice de réel de dimension 3x3.
Definition Real3x3.h:66
Real3 z
premier élément du triplet
Definition Real3x3.h:119
Real3 y
premier élément du triplet
Definition Real3x3.h:118
Real3 x
premier élément du triplet
Definition Real3x3.h:117
Opérations de comparaisons pour un type numérique T.
Definition Numeric.h:45
Espace de nom pour l'utilisation des accélérateurs.
Real2 operator/(const Real2Proxy &vec, Real sca)
Division par un scalaire.
Definition Real2Proxy.h:263