GCC Code Coverage Report


Directory: ./
File: include/slepcmath.h
Date: 2026-04-06 03:57:41
Exec Total Coverage
Lines: 17 17 100.0%
Functions: 4 4 100.0%
Branches: 29 44 65.9%

Line Branch Exec Source
1 /*
2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3 SLEPc - Scalable Library for Eigenvalue Problem Computations
4 Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain
5
6 This file is part of SLEPc.
7 SLEPc is distributed under a 2-clause BSD license (see LICENSE).
8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9 */
10 /*
11 SLEPc mathematics include file. Defines basic operations and functions.
12 This file is included by slepcsys.h and should not be used directly.
13 */
14
15 #pragma once
16
17 /* SUBMANSEC = Sys */
18
19 /*
20 Default tolerance for the different solvers, depending on the precision
21 */
22 #if defined(PETSC_USE_REAL_SINGLE)
23 # define SLEPC_DEFAULT_TOL 1e-5
24 #elif defined(PETSC_USE_REAL_DOUBLE)
25 # define SLEPC_DEFAULT_TOL 1e-8
26 #elif defined(PETSC_USE_REAL___FLOAT128)
27 # define SLEPC_DEFAULT_TOL 1e-16
28 #elif defined(PETSC_USE_REAL___FP16)
29 # define SLEPC_DEFAULT_TOL 1e-2
30 #endif
31
32 32044 static inline PetscReal SlepcDefaultTol(PetscReal tol)
33 {
34
5/6
✓ Branch 0 taken 186 times.
✓ Branch 1 taken 189 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 16 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
32044 return tol == (PetscReal)PETSC_DETERMINE ? SLEPC_DEFAULT_TOL : tol;
35 }
36
37 /*@C
38 SlepcAbs - Returns $\sqrt{x^2+y^2}$, taking care not to cause unnecessary
39 overflow. It is based on LAPACK's `DLAPY2`.
40
41 Not Collective
42
43 Input parameters:
44 + x - the first real number
45 - y - the second real number
46
47 Output parameter:
48 . return - the result
49
50 Fortran Note:
51 This function is not available from Fortran.
52
53 Level: developer
54 @*/
55 22484806 static inline PetscReal SlepcAbs(PetscReal x,PetscReal y)
56 {
57
4/4
✓ Branch 0 taken 220 times.
✓ Branch 1 taken 321 times.
✓ Branch 2 taken 150 times.
✓ Branch 3 taken 321 times.
22484806 PetscReal w,z,t,xabs=PetscAbs(x),yabs=PetscAbs(y);
58
59
2/2
✓ Branch 0 taken 321 times.
✓ Branch 1 taken 246 times.
22484806 w = PetscMax(xabs,yabs);
60
2/2
✓ Branch 0 taken 321 times.
✓ Branch 1 taken 246 times.
22484806 z = PetscMin(xabs,yabs);
61
2/2
✓ Branch 0 taken 256 times.
✓ Branch 1 taken 227 times.
22484806 if (PetscUnlikely(z == PetscRealConstant(0.0))) return w;
62 1583883 t = z/w;
63 1583883 return w*PetscSqrtReal(PetscRealConstant(1.0)+t*t);
64 }
65
66 /*MC
67 SlepcAbsEigenvalue - Returns the absolute value of a complex number given
68 its real and imaginary parts.
69
70 Synopsis:
71 PetscReal SlepcAbsEigenvalue(PetscScalar x,PetscScalar y)
72
73 Not Collective
74
75 Input parameters:
76 + x - the real part of the complex number
77 - y - the imaginary part of the complex number
78
79 Notes:
80 This function computes $\sqrt{x^2+y^2}$, taking care not to cause unnecessary
81 overflow. It is based on LAPACK's `DLAPY2`.
82
83 In complex scalars, only the first argument is used, i.e., the result is $|x|$.
84
85 Fortran Note:
86 This function is not available from Fortran.
87
88 Level: developer
89
90 .seealso: `PetscAbsScalar()`
91 M*/
92 #if !defined(PETSC_USE_COMPLEX)
93 #define SlepcAbsEigenvalue(x,y) SlepcAbs(x,y)
94 #else
95 #define SlepcAbsEigenvalue(x,y) PetscAbsScalar(x)
96 #endif
97
98 /*
99 SlepcSetFlushToZero - Set the FTZ flag in floating-point arithmetic.
100 */
101 222 static inline PetscErrorCode SlepcSetFlushToZero(unsigned int *state)
102 {
103
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
222 PetscFunctionBegin;
104 #if defined(PETSC_HAVE_XMMINTRIN_H) && defined(_MM_FLUSH_ZERO_ON) && defined(__SSE__)
105 *state = _MM_GET_FLUSH_ZERO_MODE();
106 _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
107 #else
108 756 *state = 0;
109 #endif
110
6/12
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 4 times.
222 PetscFunctionReturn(PETSC_SUCCESS);
111 }
112
113 /*
114 SlepcResetFlushToZero - Reset the FTZ flag in floating-point arithmetic.
115 */
116 144 static inline PetscErrorCode SlepcResetFlushToZero(unsigned int *state)
117 {
118
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
144 PetscFunctionBegin;
119 #if defined(PETSC_HAVE_XMMINTRIN_H) && defined(_MM_FLUSH_ZERO_MASK) && defined(__SSE__)
120 _MM_SET_FLUSH_ZERO_MODE(*state & _MM_FLUSH_ZERO_MASK);
121 #else
122 756 *state = 0;
123 #endif
124
6/12
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 4 times.
144 PetscFunctionReturn(PETSC_SUCCESS);
125 }
126