Arcane  4.2.1.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MathNumeric.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* MathNumeric.h (C) 2000-2026 */
9/* */
10/* Opérations mathématiques sur les types numériques (Real2, Real3, */
11/* NumVector, ...). */
12/*---------------------------------------------------------------------------*/
13#ifndef ARCCORE_BASE_MATHNUMERIC_H
14#define ARCCORE_BASE_MATHNUMERIC_H
15/*---------------------------------------------------------------------------*/
16/*---------------------------------------------------------------------------*/
17
18#include "arccore/base/NumVector.h"
19#include "arccore/base/NumMatrix.h"
20
21#include "arccore/base/MathReal2.h"
22#include "arccore/base/MathReal3.h"
23#include "arccore/base/MathReal2x2.h"
24#include "arccore/base/MathReal3x3.h"
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane::math
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34/*!
35 * \brief Compare le vecteur avec le vecteur nul.
36 *
37 * La matrice est presque nulle si et seulement si chacun de ses composants
38 * est inférieur à un epsilon donné. La valeur epsilon utilisée est celle
39 * de FloatInfo<DataType>::nearlyEpsilon():
40 * \f[A=0 \Leftrightarrow |A.x|<\epsilon,|A.y|<\epsilon,|A.z|<\epsilon \f]
41 */
42template <typename DataType, int Size> constexpr ARCCORE_HOST_DEVICE bool
43isNearlyZero(const NumVector<DataType, Size>& v)
44{
45 bool is_nearly_zero = true;
46 for (int i = 0; i < Size; ++i)
47 is_nearly_zero = is_nearly_zero && math::isNearlyZero(v[i]);
48 return is_nearly_zero;
49}
50
51/*---------------------------------------------------------------------------*/
52/*---------------------------------------------------------------------------*/
53/*!
54 * \brief Compare la matrice avec la matrice nulle.
55 *
56 * La matrice est nulle si et seulement si chacun de ses composants
57 * est inférieur à un epsilon donné. La valeur epsilon utilisée est celle
58 * de float_info<value_type>::nearlyEpsilon():
59 * \f[A=0 \Leftrightarrow |A.x|<\epsilon,|A.y|<\epsilon,|A.z|<\epsilon \f]
60 *
61 * \retval vrai si la matrice est égale à la matrice nulle,
62 * \retval faux sinon.
63 */
64template <typename DataType, int RowSize, int ColumnSize> constexpr ARCCORE_HOST_DEVICE bool
66{
67 bool is_nearly_zero = true;
68 for (int i = 0; i < RowSize; ++i)
69 is_nearly_zero = is_nearly_zero && math::isNearlyZero(v.row(i));
70 return is_nearly_zero;
71}
72
73/*---------------------------------------------------------------------------*/
74/*---------------------------------------------------------------------------*/
75
76//! Retourne le carré de la norme L2 du vecteur
77template <typename DataType, int Size> constexpr ARCCORE_HOST_DEVICE DataType
79{
80 DataType norm = {};
81 for (int i = 0; i < Size; ++i)
82 norm += v[i] * v[i];
83 return norm;
84}
85
86/*---------------------------------------------------------------------------*/
87/*---------------------------------------------------------------------------*/
88
89//! Retourne la norme L2 du vecteur
90template <typename DataType, int Size> ARCCORE_HOST_DEVICE Real
92{
94}
95
96/*---------------------------------------------------------------------------*/
97/*---------------------------------------------------------------------------*/
98
99} // namespace Arcane::math
100
101/*---------------------------------------------------------------------------*/
102/*---------------------------------------------------------------------------*/
103
104#endif
Petite matrice de taille fixe contenant RowSize lignes et ColumnSize colonnes.
Petit vecteur de taille fixe de points de données numériques de taille Size.
Espace de nom pour les fonctions mathématiques.
Definition MathUtils.h:36
constexpr __host__ __device__ DataType squareNormL2(const NumVector< DataType, Size > &v)
Retourne le carré de la norme L2 du vecteur.
Definition MathNumeric.h:78
apfloat sqrt(apfloat v)
Racine carrée de v.
Definition MathApfloat.h:65
double Real
Type représentant un réel.