Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
SimdMathUtils.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/* SimdMathUtils.h (C) 2000-2022 */
9/* */
10/* Fonctions mathématiques diverses pour les classes SIMD. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_SIMDMATHUTILS_H
13#define ARCANE_SIMDMATHUTILS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/SimdOperation.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane::math
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
31inline SimdReal3
32cross(const SimdReal3& u,const SimdReal3& v)
33{
34 return SimdReal3(
35 u.y * v.z - u.z * v.y,
36 u.z * v.x - u.x * v.z,
37 u.x * v.y - u.y * v.x
38 );
39}
40
44inline SimdReal
45cross2D(const SimdReal3& u,const SimdReal3& v)
46{
47 return (u.x * v.y - u.y * v.x);
48}
49
50inline SimdReal
51dot(const SimdReal3& u,const SimdReal3& v)
52{
53 return SimdReal(u.x*v.x + u.y*v.y + u.z*v.z);
54}
55
56inline SimdReal
57dot(const SimdReal2& u,const SimdReal2& v)
58{
59 return SimdReal(u.x*v.x + u.y*v.y);
60}
61
62ARCCORE_DEPRECATED_2021("Use normL2() instead")
63inline SimdReal
64abs(const SimdReal3& sr)
65{
66 SimdReal vr;
68 Real3 r(sr.x[si],sr.y[si],sr.z[si]);
69 vr[si] = r.normL2();
70 }
71 return vr;
72}
73
74ARCCORE_DEPRECATED_2021("Use normL2() instead")
75inline SimdReal
76abs(const SimdReal2& sr)
77{
78 SimdReal vr;
80 Real2 r(sr.x[si],sr.y[si]);
81 vr[si] = r.normL2();
82 }
83 return vr;
84}
85
86inline SimdReal
87normL2(const SimdReal3& sr)
88{
89 SimdReal vr;
91 Real3 r(sr.x[si],sr.y[si],sr.z[si]);
92 vr[si] = r.normL2();
93 }
94 return vr;
95}
96
97inline SimdReal
98normL2(const SimdReal2& sr)
99{
100 SimdReal vr;
102 Real2 r(sr.x[si],sr.y[si]);
103 vr[si] = r.normL2();
104 }
105 return vr;
106}
107
111inline SimdReal
112mixteMul(const SimdReal3& u,const SimdReal3& v,const SimdReal3& w)
113{
114 return dot(u,cross(v,w));
115}
116
117/*---------------------------------------------------------------------------*/
118/*---------------------------------------------------------------------------*/
119
120inline SimdReal3x3
121prodTens(const SimdReal3& u,const SimdReal3& v)
122{
123 return SimdReal3x3(u.x*v,u.y*v,u.z*v);
124}
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
132inline SimdReal3x3
134{
135 return SimdReal3x3(SimdReal3(t.x.x*v.x.x+t.x.y*v.y.x+t.x.z*v.z.x,
136 t.x.x*v.x.y+t.x.y*v.y.y+t.x.z*v.z.y,
137 t.x.x*v.x.z+t.x.y*v.y.z+t.x.z*v.z.z),
138 SimdReal3(t.y.x*v.x.x+t.y.y*v.y.x+t.y.z*v.z.x,
139 t.y.x*v.x.y+t.y.y*v.y.y+t.y.z*v.z.y,
140 t.y.x*v.x.z+t.y.y*v.y.z+t.y.z*v.z.z),
141 SimdReal3(t.z.x*v.x.x+t.z.y*v.y.x+t.z.z*v.z.x,
142 t.z.x*v.x.y+t.z.y*v.y.y+t.z.z*v.z.y,
143 t.z.x*v.x.z+t.z.y*v.y.z+t.z.z*v.z.z));
144}
145
146/*---------------------------------------------------------------------------*/
147/*---------------------------------------------------------------------------*/
152inline SimdReal3x3
154{
155 return SimdReal3x3(SimdReal3(t.x.x, t.y.x, t.z.x),
156 SimdReal3(t.x.y, t.y.y, t.z.y),
157 SimdReal3(t.x.z, t.y.z, t.z.z));
158}
159
160/*---------------------------------------------------------------------------*/
161/*---------------------------------------------------------------------------*/
162
167ARCCORE_HOST_DEVICE inline SimdReal2
168min(const SimdReal2& a,const SimdReal2& b)
169{
170 return SimdReal2( math::min(a.x,b.x), math::min(a.y,b.y) );
171}
176ARCCORE_HOST_DEVICE inline SimdReal3
177min(const SimdReal3& a,const SimdReal3& b)
178{
179 return SimdReal3( math::min(a.x,b.x), math::min(a.y,b.y), math::min(a.z,b.z) );
180}
185inline SimdReal2x2
186min(const SimdReal2x2& a,const SimdReal2x2& b)
187{
188 return SimdReal2x2( math::min(a.x,b.x), math::min(a.y,b.y) );
189}
194inline SimdReal3x3
195min(const SimdReal3x3& a,const SimdReal3x3& b)
196{
197 return SimdReal3x3( math::min(a.x,b.x), math::min(a.y,b.y), math::min(a.z,b.z) );
198}
199
200/*---------------------------------------------------------------------------*/
201/*---------------------------------------------------------------------------*/
202
207ARCCORE_HOST_DEVICE inline SimdReal2
208max(const SimdReal2& a,const SimdReal2& b)
209{
210 return SimdReal2( math::max(a.x,b.x), math::max(a.y,b.y) );
211}
216ARCCORE_HOST_DEVICE inline SimdReal3
217max(const SimdReal3& a,const SimdReal3& b)
218{
219 return SimdReal3( math::max(a.x,b.x), math::max(a.y,b.y), math::max(a.z,b.z) );
220}
225inline SimdReal2x2
226max(const SimdReal2x2& a,const SimdReal2x2& b)
227{
228 return SimdReal2x2( math::max(a.x,b.x), math::max(a.y,b.y) );
229}
234inline SimdReal3x3
235max(const SimdReal3x3& a,const SimdReal3x3& b)
236{
237 return SimdReal3x3( math::max(a.x,b.x), math::max(a.y,b.y), math::max(a.z,b.z) );
238}
239
240/*---------------------------------------------------------------------------*/
241/*---------------------------------------------------------------------------*/
242
243} // End namespace Arcane::math
244
245/*---------------------------------------------------------------------------*/
246/*---------------------------------------------------------------------------*/
247
248#endif
Vectorisation des réels par émulation.
Definition SimdEMUL.h:155
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Représente un Real2 vectoriel.
Definition Simd.h:195
Représente un Real2x2 vectoriel.
Definition Simd.h:282
Représente un Real3 vectoriel.
Definition Simd.h:150
Représente un Real3x3 vectoriel.
Definition Simd.h:237
SimdInfo::SimdReal SimdReal
Vecteur SIMD de réel.
Definition Simd.h:134
#define ENUMERATE_SIMD_REAL(_iter)
Macro pour itérer sur les index d'un vecteur Simd de réel ou dérivé (Real2, Real3,...
Definition Simd.h:103
T max(const T &a, const T &b, const T &c)
Retourne le maximum de trois éléments.
Definition MathUtils.h:392
ARCCORE_HOST_DEVICE Real2 min(Real2 a, Real2 b)
Retourne le minimum de deux Real2.
Definition MathUtils.h:336
ARCCORE_HOST_DEVICE Real3x3 matrixProduct(const Real3x3 &t, const Real3x3 &v)
Produit matrice matrice entre deux tenseurs.
Definition MathUtils.h:238
ARCCORE_HOST_DEVICE Real3 cross(Real3 v1, Real3 v2)
Produit vectoriel de deux vecteurs à 3 composantes.
Definition MathUtils.h:723
ARCCORE_HOST_DEVICE Real3x3 matrixTranspose(const Real3x3 &t)
Transpose la matrice.
Definition MathUtils.h:272
Real3x3 prodTens(Real3 u, Real3 v)
Produit tensoriel de deux vecteurs Real3.
Definition MathUtils.h:193
ARCCORE_HOST_DEVICE Real dot(Real2 u, Real2 v)
Produit scalaire de u par v dans .
Definition MathUtils.h:96
ARCCORE_HOST_DEVICE Real cross2D(Real3 u, Real3 v)
Produit vectoriel de u par v dans .
Definition MathUtils.h:82
ARCCORE_HOST_DEVICE Real mixteMul(Real3 u, Real3 v, Real3 w)
Produit mixte de u, v et w.
Definition MathUtils.h:159
Espace de nom pour les fonctions mathématiques.
Definition MathUtils.h:41