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) && defined(_MM_FLUSH_ZERO_ON) && 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) && defined(_MM_FLUSH_ZERO_MASK) && defined(__SSE__)</font>
<a name="line117">117: </a> _MM_SET_FLUSH_ZERO_MODE(*state & _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>
|