Arcane  4.2.1.0
Documentation développeur
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/*---------------------------------------------------------------------------*/
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/*---------------------------------------------------------------------------*/
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
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
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.