12#ifndef ARCANE_CORE_MATHUTILS_H
13#define ARCANE_CORE_MATHUTILS_H
17#include "arcane/utils/Math.h"
18#include "arcane/utils/ArrayView.h"
19#include "arcane/utils/NumericTypes.h"
20#include "arcane/utils/Real2x2.h"
21#include "arcane/utils/Real3.h"
22#include "arcane/utils/Real2.h"
24#include "arcane/Algorithm.h"
51ARCCORE_HOST_DEVICE
inline Real3
55 u.
y * v.
z - u.
z * v.
y,
56 u.
z * v.
x - u.
x * v.
z,
69ARCCORE_HOST_DEVICE
inline Real
72 return Real(u.
x * v.
y - u.
y * v.
x);
81ARCCORE_HOST_DEVICE
inline Real
84 return Real(u.
x * v.
y - u.
y * v.
x);
95ARCCORE_HOST_DEVICE
inline Real
98 return (u.
x * v.
x + u.
y * v.
y );
112ARCCORE_HOST_DEVICE
inline Real
115 return (u.
x * v.
x + u.
y * v.
y );
127ARCCORE_HOST_DEVICE
inline Real
130 return (u.
x * v.
x + u.
y * v.
y + u.
z * v.
z);
144ARCCORE_HOST_DEVICE
inline Real
147 return (u.
x * v.
x + u.
y * v.
y + u.
z * v.
z);
158ARCCORE_HOST_DEVICE
inline Real
169ARCCORE_HOST_DEVICE
inline Real
173 (u.
x * ( v.
y*
w.z - v.
z*
w.y )) +
174 (u.
y * ( v.
z*
w.x - v.
x*
w.z )) +
175 (u.
z * ( v.
x*
w.y - v.
y*
w.x ))
206ARCCORE_HOST_DEVICE
inline Real3
211ARCCORE_HOST_DEVICE
inline Real2
225ARCCORE_HOST_DEVICE
inline Real3
228 return Real3(
dot(v,
Real3(
t.x.x,
t.y.x,
t.z.x)),
dot(v,
Real3(
t.x.y,
t.y.y,
t.z.y)),
dot(v,
Real3(
t.x.z,
t.y.z,
t.z.z)));
237ARCCORE_HOST_DEVICE
inline Real3x3
257ARCCORE_HOST_DEVICE
inline Real3x3
271ARCCORE_HOST_DEVICE
inline Real3x3
287ARCCORE_HOST_DEVICE
inline Real
313ARCCORE_HOST_DEVICE
inline Real
335ARCCORE_HOST_DEVICE
inline Real2
344ARCCORE_HOST_DEVICE
inline Real3
353ARCCORE_HOST_DEVICE
inline Real2x2
362ARCCORE_HOST_DEVICE
inline Real3x3
377template<
class T>
inline T
378min(
const T& a,
const T&
b,
const T&
c)
380 return ( (a<
b) ? ((a<
c) ? a : ((
b<
c) ?
b :
c)) : ((
b<
c) ?
b :
c) );
391template<
class T>
inline T
392max(
const T& a,
const T&
b,
const T&
c)
394 return ( (a>
b) ? ((a>
c) ? a :
c) : ((
b>
c) ?
b :
c) );
404ARCCORE_HOST_DEVICE
inline Real2
413ARCCORE_HOST_DEVICE
inline Real3
422ARCCORE_HOST_DEVICE
inline Real2x2
431ARCCORE_HOST_DEVICE
inline Real3x3
445ARCCORE_HOST_DEVICE
inline Real
456ARCCORE_HOST_DEVICE
inline Real
467ARCCORE_HOST_DEVICE
inline Real
489ARCCORE_HOST_DEVICE
inline Real
502ARCCORE_HOST_DEVICE
inline Real
516ARCCORE_HOST_DEVICE
inline Real
535 Real sum = math::abs(a) + math::abs(
b);
536 return (
isZero(sum)) ? (a-
b) : (a-
b)/sum;
577 Real sum = math::abs(
b);
578 return (
isZero(sum)) ? (a-
b) : (a-
b)/sum;
593 Real sum = math::abs(a);
594 return (
isZero(sum)) ? (a-
b) : (a-
b)/sum;
611 Integer size = array.size();
620 for( Integer i=1; i<size; ++i ){
621 if (array[i].x <
xmin)
623 if (array[i].x >
xmax)
626 if (array[i].y <
ymin)
628 if (array[i].y >
ymax)
639ARCCORE_HOST_DEVICE
inline Real
663ARCCORE_HOST_DEVICE
inline Real3x3
667 Real3(0.0, 1.0, 0.0),
668 Real3(0.0, 0.0, 1.0));
676ARCCORE_HOST_DEVICE
inline Real3x3
691ARCCORE_HOST_DEVICE
inline Real3x3
709 v.
x = v1.
y*v2.
z - v1.
z*v2.
y;
710 v.
y = v2.
x*v1.
z - v2.
z*v1.
x;
711 v.
z = v1.
x*v2.
y - v1.
y*v2.
x;
722ARCCORE_HOST_DEVICE
inline Real3
726 v.
x = v1.
y*v2.
z - v1.
z*v2.
y;
727 v.
y = v2.
x*v1.
z - v2.
z*v1.
x;
728 v.
z = v1.
x*v2.
y - v1.
y*v2.
x;
740ARCCORE_HOST_DEVICE
inline Real3
808ARCCORE_HOST_DEVICE
inline Real3
829 return (
m0.x.x < epsilon) && (
m0.x.y < epsilon) && (
m0.x.z < epsilon) &&
830 (
m0.y.x < epsilon) && (
m0.y.y < epsilon) && (
m0.y.z < epsilon) &&
831 (
m0.z.x < epsilon) && (
m0.z.y < epsilon) && (
m0.z.z < epsilon);
884template<
typename T>
inline void
887 Integer size =
lhs.size();
891 for( Integer i=0; i<size; ++i )
903template<
typename T>
inline void
906 Integer size =
lhs.size();
910 for( Integer i=0; i<size; ++i )
922template<
typename T>
inline void
925 Integer size =
lhs.size();
929 for( Integer i=0; i<size; ++i )
941template<
typename T>
inline void
944 Integer size =
lhs.size();
948 for( Integer i=0; i<size; ++i )
962template<
typename T>
inline void
965 Integer size =
lhs.size();
969 for( Integer i=0; i<size; ++i )
983template<
typename T>
inline void
992template<
typename T>
inline void
996 for( Integer i=0, size=
lhs.size(); i<size; ++i )
1003template<
typename T>
inline void
1007 for( Integer i=0, size=
lhs.size(); i<size; ++i )
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Classe gérant un vecteur de réel de dimension 2.
Classe gérant une matrice de réel de dimension 2x2.
Real2 x
Première composante.
Real2 y
Deuxième composante.
Classe gérant un vecteur de réel de dimension 3.
ARCCORE_HOST_DEVICE Real normL2() const
Retourne la norme L2 du triplet .
Classe gérant une matrice de réel de dimension 3x3.
Real3 z
premier élément du triplet
constexpr ARCCORE_HOST_DEVICE Real determinant() const
Déterminant de la matrice.
Real3 y
premier élément du triplet
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)).
Real3 x
premier élément du triplet
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)).
ARCCORE_HOST_DEVICE Real3 normalizeReal3(Real3 v)
Normalisation d'un Real3.
ARCCORE_HOST_DEVICE Real maxMod2(Real a, Real b)
retourne le Max mod de deux Reals
T max(const T &a, const T &b, const T &c)
Retourne le maximum de trois éléments.
ARCCORE_HOST_DEVICE Real2 min(Real2 a, Real2 b)
Retourne le minimum de deux Real2.
Real3 normalizedCrossProduct3(Real3 v1, Real3 v2)
Produit vectoriel normalisé.
ARCCORE_HOST_DEVICE Real3 prodTensVec(Real3x3 t, Real3 v)
Produit matrice vecteur entre un tenseur et un vecteur.
ARCCORE_HOST_DEVICE Real3x3 matrixProduct(const Real3x3 &t, const Real3x3 &v)
Produit matrice matrice entre deux tenseurs.
ARCCORE_HOST_DEVICE Real scaMul(Real2 u, Real2 v)
Produit scalaire de u par v dans .
ARCCORE_HOST_DEVICE Real3 vecMul(Real3 u, Real3 v)
Produit vectoriel de u par v. dans .
ARCCORE_HOST_DEVICE Real3 cross(Real3 v1, Real3 v2)
Produit vectoriel de deux vecteurs à 3 composantes.
ARCCORE_HOST_DEVICE Real3x3 matrixTranspose(const Real3x3 &t)
Transpose la matrice.
Real3x3 prodTens(Real3 u, Real3 v)
Produit tensoriel de deux vecteurs Real3.
ARCCORE_HOST_DEVICE Real dot(Real2 u, Real2 v)
Produit scalaire de u par v dans .
ARCCORE_HOST_DEVICE Real3 prodVecTens(Real3 v, Real3x3 t)
Produit transposé(vecteur) matrice entre la transposée d'un vecteur et une matrice.
ARCCORE_HOST_DEVICE Real minMod(Real a, Real b, Real c, Real d)
retourne le Min mod de quatre Real
ARCCORE_HOST_DEVICE Real cross2D(Real3 u, Real3 v)
Produit vectoriel de u par v dans .
Real3x3 matrix3x3Transp(Real3x3 m)
Real3 planarSymmetric(Real3 u, Real3 n)
Symétrie d'un vecteur u par rapport à un plan de normale n.
Real3 axisSymmetric(Real3 u, Real3 a)
Symétrie d'un vecteur u par rapport à un axe de vecteur directeur a .
ARCCORE_HOST_DEVICE Real vecMul2D(Real3 u, Real3 v)
Produit vectoriel de u par v dans .
ARCCORE_HOST_DEVICE Real mixteMul(Real3 u, Real3 v, Real3 w)
Produit mixte de u, v et w.
ARCCORE_HOST_DEVICE Real minMod2(Real a, Real b)
retourne le Min mod de deux Reals
double toDouble(Real r)
Converti un Real en double.
ARCCORE_HOST_DEVICE Real matrixDeterminant(Real3x3 m)
Calcul du déterminant d'une matrice 3x3.
Real relativeError(Real a, Real b)
Retourne l'erreur relative entre deux scalaires a et b.
Real relativeError2(Real a, Real b)
Retourne l'erreur relative entre deux scalaires a et b relativement à b.
ARCCORE_HOST_DEVICE Real min4Real(Real a, Real b, Real c, Real d)
retourne le min de quatre Real
ARCCORE_HOST_DEVICE Real min8Real(const Real a[8])
retourne le min de huit Real
void power(ArrayView< T > lhs, T o)
Met à la puissance o tous les éléments du tableau.
Real normeR3(Real3 v1)
Norme d'un vecteur.
ARCCORE_HOST_DEVICE Real3x3 inverseMatrix(const Real3x3 &m, Real d)
Calcul de l'inverse d'une matrice m en supposant connu son déterminant d.
Real relativeError1(Real a, Real b)
Retourne l'erreur relative entre deux scalaires a et b relativement à a.
bool isNearlyId(Real3x3 m, Real epsilon=1.e-10)
Vérifie qu'une matrice vaut bien la matrice identité.
bool searchExtrema(ConstArrayView< Real2 > array, Real &xmin, Real &xmax, Real &ymin, Real &ymax, bool need_init)
Recherche les valeurs extrèmes d'un tableau de couple (x,y).
bool isZero(const BuiltInProxy< _Type > &a)
Teste si une valeur est exactement égale à zéro.
ARCCORE_HOST_DEVICE Real matDet(Real3 u, Real3 v, Real3 w)
Déterminant de la matrice u,v,w.
ARCCORE_HOST_DEVICE Real max4Real(Real a, Real b, Real c, Real d)
retourne le max de quatre Real
ARCCORE_HOST_DEVICE Real3 multiply(const Real3x3 &m, Real3 v)
Produit matrice 3x3 . vecteur.
Real max8Real(const Real a[8])
retourne le max de huit Real
ARCCORE_HOST_DEVICE double pow(double x, double y)
Fonction puissance.
ARCCORE_HOST_DEVICE Real3x3 transpose(const Real3x3 &t)
Transpose la matrice.
void mult(ArrayView< T > lhs, ConstArrayView< T > copy_array)
Multiplie terme à terme les éléments de l'instance par les éléments du tableau copy_array.
Real3 crossProduct3(Real3 v1, Real3 v2)
Produit vectoriel de deux vecteurs à 3 composantes.
Real3x3 matrix3x3Prod(Real3x3 m1, Real3x3 m2)
Multiplication de 2 matrices 3x3.
ARCCORE_HOST_DEVICE double sqrt(double v)
Racine carrée de v.
ARCCORE_HOST_DEVICE Real3x3 matrix3x3Id()
Matrice identite.
ARCCORE_HOST_DEVICE Real doubleContraction(const Real3x3 &u, const Real3x3 &v)
void sub(ArrayView< T > lhs, ConstArrayView< T > copy_array)
Soustrait le tableau copy_array de l'instance.
void add(ArrayView< T > lhs, ConstArrayView< T > copy_array)
Ajoute le tableau copy_array dans l'instance.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ARCCORE_HOST_DEVICE void arcaneMathError(long double arg_value, const char *func_name)
Signale un argument invalide d'une fonction mathématique.
Real y
deuxième composante du couple
Real x
première composante du couple
Real y
deuxième composante du triplet
Real z
troisième composante du triplet
Real x
première composante du triplet