File: slepcmath.h.html

package info (click to toggle)
slepc 3.24.1%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 122,028 kB
  • sloc: ansic: 104,353; javascript: 12,732; python: 5,958; f90: 3,312; cpp: 1,528; makefile: 761; xml: 679; sh: 347
file content (140 lines) | stat: -rw-r--r-- 10,926 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<center><a href="https://gitlab.com/slepc/slepc/-/blob/bbccb785e5ebe6829936989c71776839602f087b/include/slepcmath.h">Actual source code: slepcmath.h</a></center><br>

<html>
<head>
<title></title>
<meta name="generator" content="c2html 0.9.6">
<meta name="date" content="2025-11-07T08:27:34+00:00">
</head>

<body bgcolor="#FFFFFF">
<pre width=80>
<a name="line1">  1: </a><font color="#B22222">/*</font>
<a name="line2">  2: </a><font color="#B22222">   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</font>
<a name="line3">  3: </a><font color="#B22222">   SLEPc - Scalable Library for Eigenvalue Problem Computations</font>
<a name="line4">  4: </a><font color="#B22222">   Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain</font>

<a name="line6">  6: </a><font color="#B22222">   This file is part of SLEPc.</font>
<a name="line7">  7: </a><font color="#B22222">   SLEPc is distributed under a 2-clause BSD license (see LICENSE).</font>
<a name="line8">  8: </a><font color="#B22222">   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</font>
<a name="line9">  9: </a><font color="#B22222">*/</font>
<a name="line10"> 10: </a><font color="#B22222">/*</font>
<a name="line11"> 11: </a><font color="#B22222">   SLEPc mathematics include file. Defines basic operations and functions.</font>
<a name="line12"> 12: </a><font color="#B22222">   This file is included by slepcsys.h and should not be used directly.</font>
<a name="line13"> 13: </a><font color="#B22222">*/</font>

<a name="line15"> 15: </a><font color="#A020F0">#pragma once</font>

<a name="line17"> 17: </a><font color="#B22222">/* SUBMANSEC = Sys */</font>

<a name="line19"> 19: </a><font color="#B22222">/*</font>
<a name="line20"> 20: </a><font color="#B22222">    Default tolerance for the different solvers, depending on the precision</font>
<a name="line21"> 21: </a><font color="#B22222">*/</font>
<a name="line22"> 22: </a><font color="#A020F0">#if defined(PETSC_USE_REAL_SINGLE)</font>
<a name="line23"> 23: </a><font color="#A020F0">#  define SLEPC_DEFAULT_TOL   1e-5</font>
<a name="line24"> 24: </a><font color="#A020F0">#elif defined(PETSC_USE_REAL_DOUBLE)</font>
<a name="line25"> 25: </a><font color="#A020F0">#  define SLEPC_DEFAULT_TOL   1e-8</font>
<a name="line26"> 26: </a><font color="#A020F0">#elif defined(PETSC_USE_REAL___FLOAT128)</font>
<a name="line27"> 27: </a><font color="#A020F0">#  define SLEPC_DEFAULT_TOL   1e-16</font>
<a name="line28"> 28: </a><font color="#A020F0">#elif defined(PETSC_USE_REAL___FP16)</font>
<a name="line29"> 29: </a><font color="#A020F0">#  define SLEPC_DEFAULT_TOL   1e-2</font>
<a name="line30"> 30: </a><font color="#A020F0">#endif</font>

<a name="line32"> 32: </a><strong><font color="#4169E1"><a name="SlepcDefaultTol"></a>static inline <a href="https://petsc.org/release/manualpages/Sys/PetscReal/">PetscReal</a> SlepcDefaultTol(<a href="https://petsc.org/release/manualpages/Sys/PetscReal/">PetscReal</a> tol)</font></strong>
<a name="line33"> 33: </a>{
<a name="line34"> 34: </a>  <font color="#4169E1">return</font> tol == (<a href="https://petsc.org/release/manualpages/Sys/PetscReal/">PetscReal</a>)<a href="https://petsc.org/release/manualpages/Sys/PETSC_DETERMINE/">PETSC_DETERMINE</a> ? SLEPC_DEFAULT_TOL : tol;
<a name="line35"> 35: </a>}

<a name="line37"> 37: </a><font color="#B22222">/*@C</font>
<a name="line38"> 38: </a><font color="#B22222">   <a href="../manualpages/Sys/SlepcAbs.html">SlepcAbs</a> - Returns $\sqrt{x^2+y^2}$, taking care not to cause unnecessary</font>
<a name="line39"> 39: </a><font color="#B22222">   overflow. It is based on LAPACK's `DLAPY2`.</font>

<a name="line41"> 41: </a><font color="#B22222">   Not Collective</font>

<a name="line43"> 43: </a><font color="#B22222">   Input parameters:</font>
<a name="line44"> 44: </a><font color="#B22222">.  x,y - the real numbers</font>

<a name="line46"> 46: </a><font color="#B22222">   Output parameter:</font>
<a name="line47"> 47: </a><font color="#B22222">.  return - the result</font>

<a name="line49"> 49: </a><font color="#B22222">   Fortran Note:</font>
<a name="line50"> 50: </a><font color="#B22222">   This function is not available from Fortran.</font>

<a name="line52"> 52: </a><font color="#B22222">   Level: developer</font>
<a name="line53"> 53: </a><font color="#B22222">@*/</font>
<a name="line54"> 54: </a><strong><font color="#4169E1"><a name="SlepcAbs"></a>static inline <a href="https://petsc.org/release/manualpages/Sys/PetscReal/">PetscReal</a> <a href="../manualpages/Sys/SlepcAbs.html">SlepcAbs</a>(<a href="https://petsc.org/release/manualpages/Sys/PetscReal/">PetscReal</a> x,<a href="https://petsc.org/release/manualpages/Sys/PetscReal/">PetscReal</a> y)</font></strong>
<a name="line55"> 55: </a>{
<a name="line56"> 56: </a>  <a href="https://petsc.org/release/manualpages/Sys/PetscReal/">PetscReal</a> w,z,t,xabs=<a href="https://petsc.org/release/manualpages/Sys/PetscAbs/">PetscAbs</a>(x),yabs=<a href="https://petsc.org/release/manualpages/Sys/PetscAbs/">PetscAbs</a>(y);

<a name="line58"> 58: </a>  w = <a href="https://petsc.org/release/manualpages/Sys/PetscMax/">PetscMax</a>(xabs,yabs);
<a name="line59"> 59: </a>  z = <a href="https://petsc.org/release/manualpages/Sys/PetscMin/">PetscMin</a>(xabs,yabs);
<a name="line60"> 60: </a>  <font color="#4169E1">if</font> (<a href="https://petsc.org/release/manualpages/Sys/PetscUnlikely/">PetscUnlikely</a>(z == <a href="https://petsc.org/release/manualpages/Sys/PetscRealConstant/">PetscRealConstant</a>(0.0))) <font color="#4169E1">return</font> w;
<a name="line61"> 61: </a>  t = z/w;
<a name="line62"> 62: </a>  <font color="#4169E1">return</font> w*PetscSqrtReal(<a href="https://petsc.org/release/manualpages/Sys/PetscRealConstant/">PetscRealConstant</a>(1.0)+t*t);
<a name="line63"> 63: </a>}

<a name="line65"> 65: </a><font color="#B22222">/*MC</font>
<a name="line66"> 66: </a><font color="#B22222">   <a href="../manualpages/Sys/SlepcAbsEigenvalue.html">SlepcAbsEigenvalue</a> - Returns the absolute value of a complex number given</font>
<a name="line67"> 67: </a><font color="#B22222">   its real and imaginary parts.</font>

<a name="line69"> 69: </a><font color="#B22222">   Synopsis:</font>
<a name="line70"> 70: </a><font color="#B22222">   <a href="https://petsc.org/release/manualpages/Sys/PetscReal/">PetscReal</a> <a href="../manualpages/Sys/SlepcAbsEigenvalue.html">SlepcAbsEigenvalue</a>(<a href="https://petsc.org/release/manualpages/Sys/PetscScalar/">PetscScalar</a> x,<a href="https://petsc.org/release/manualpages/Sys/PetscScalar/">PetscScalar</a> y)</font>

<a name="line72"> 72: </a><font color="#B22222">   Not Collective</font>

<a name="line74"> 74: </a><font color="#B22222">   Input parameters:</font>
<a name="line75"> 75: </a><font color="#B22222">+  x  - the real part of the complex number</font>
<a name="line76"> 76: </a><font color="#B22222">-  y  - the imaginary part of the complex number</font>

<a name="line78"> 78: </a><font color="#B22222">   Notes:</font>
<a name="line79"> 79: </a><font color="#B22222">   This function computes $\sqrt{x^2+y^2}$, taking care not to cause unnecessary</font>
<a name="line80"> 80: </a><font color="#B22222">   overflow. It is based on LAPACK's `DLAPY2`.</font>

<a name="line82"> 82: </a><font color="#B22222">   In complex scalars, only the first argument is used, i.e., the result is $|x|$.</font>

<a name="line84"> 84: </a><font color="#B22222">   Fortran Note:</font>
<a name="line85"> 85: </a><font color="#B22222">   This function is not available from Fortran.</font>

<a name="line87"> 87: </a><font color="#B22222">   Level: developer</font>
<a name="line88"> 88: </a><font color="#B22222">M*/</font>
<a name="line89"> 89: </a><font color="#A020F0">#if !defined(PETSC_USE_COMPLEX)</font>
<a name="line90"> 90: </a><strong><font color="#228B22">#define <a href="../manualpages/Sys/SlepcAbsEigenvalue.html">SlepcAbsEigenvalue</a>(x,y) <a href="../manualpages/Sys/SlepcAbs.html">SlepcAbs</a>(x,y)</font></strong>
<a name="line91"> 91: </a><font color="#A020F0">#else</font>
<a name="line92"> 92: </a><strong><font color="#228B22">#define <a href="../manualpages/Sys/SlepcAbsEigenvalue.html">SlepcAbsEigenvalue</a>(x,y) PetscAbsScalar(x)</font></strong>
<a name="line93"> 93: </a><font color="#A020F0">#endif</font>

<a name="line95"> 95: </a><font color="#B22222">/*</font>
<a name="line96"> 96: </a><font color="#B22222">   SlepcSetFlushToZero - Set the FTZ flag in floating-point arithmetic.</font>
<a name="line97"> 97: </a><font color="#B22222">*/</font>
<a name="line98"> 98: </a><strong><font color="#4169E1"><a name="SlepcSetFlushToZero"></a>static inline <a href="https://petsc.org/release/manualpages/Sys/PetscErrorCode/">PetscErrorCode</a> SlepcSetFlushToZero(unsigned int *state)</font></strong>
<a name="line99"> 99: </a>{
<a name="line100">100: </a>  <a href="https://petsc.org/release/manualpages/Sys/PetscFunctionBegin/">PetscFunctionBegin</a>;
<a name="line101">101: </a><font color="#A020F0">#if defined(PETSC_HAVE_XMMINTRIN_H) &amp;&amp; defined(_MM_FLUSH_ZERO_ON) &amp;&amp; defined(__SSE__)</font>
<a name="line102">102: </a>  *state = _MM_GET_FLUSH_ZERO_MODE();
<a name="line103">103: </a>  _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
<a name="line104">104: </a><font color="#A020F0">#else</font>
<a name="line105">105: </a>  *state = 0;
<a name="line106">106: </a><font color="#A020F0">#endif</font>
<a name="line107">107: </a>  <a href="https://petsc.org/release/manualpages/Sys/PetscFunctionReturn/">PetscFunctionReturn</a>(PETSC_SUCCESS);
<a name="line108">108: </a>}

<a name="line110">110: </a><font color="#B22222">/*</font>
<a name="line111">111: </a><font color="#B22222">   SlepcResetFlushToZero - Reset the FTZ flag in floating-point arithmetic.</font>
<a name="line112">112: </a><font color="#B22222">*/</font>
<a name="line113">113: </a><strong><font color="#4169E1"><a name="SlepcResetFlushToZero"></a>static inline <a href="https://petsc.org/release/manualpages/Sys/PetscErrorCode/">PetscErrorCode</a> SlepcResetFlushToZero(unsigned int *state)</font></strong>
<a name="line114">114: </a>{
<a name="line115">115: </a>  <a href="https://petsc.org/release/manualpages/Sys/PetscFunctionBegin/">PetscFunctionBegin</a>;
<a name="line116">116: </a><font color="#A020F0">#if defined(PETSC_HAVE_XMMINTRIN_H) &amp;&amp; defined(_MM_FLUSH_ZERO_MASK) &amp;&amp; defined(__SSE__)</font>
<a name="line117">117: </a>  _MM_SET_FLUSH_ZERO_MODE(*state &amp; _MM_FLUSH_ZERO_MASK);
<a name="line118">118: </a><font color="#A020F0">#else</font>
<a name="line119">119: </a>  *state = 0;
<a name="line120">120: </a><font color="#A020F0">#endif</font>
<a name="line121">121: </a>  <a href="https://petsc.org/release/manualpages/Sys/PetscFunctionReturn/">PetscFunctionReturn</a>(PETSC_SUCCESS);
<a name="line122">122: </a>}
</pre>
</body>

</html>