LCOV - code coverage report
Current view: top level - home/gitlab-runner/builds/q8svuz_Y/0/slepc/slepc/include - slepcmath.h (source / functions) Hit Total Coverage
Test: SLEPc Lines: 17 17 100.0 %
Date: 2024-05-02 01:08:00 Functions: 3 3 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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        2325 : static inline PetscReal SlepcDefaultTol(PetscReal tol)
      33             : {
      34        2325 :   return tol == (PetscReal)PETSC_DEFAULT ? 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,y - the real numbers
      45             : 
      46             :    Output parameter:
      47             : .  return - the result
      48             : 
      49             :    Note:
      50             :    This function is not available from Fortran.
      51             : 
      52             :    Level: developer
      53             : @*/
      54     4392371 : static inline PetscReal SlepcAbs(PetscReal x,PetscReal y)
      55             : {
      56     4392371 :   PetscReal w,z,t,xabs=PetscAbs(x),yabs=PetscAbs(y);
      57             : 
      58     4392371 :   w = PetscMax(xabs,yabs);
      59     4392371 :   z = PetscMin(xabs,yabs);
      60     4392371 :   if (PetscUnlikely(z == (PetscReal)0.0)) return w;
      61      373006 :   t = z/w;
      62      373006 :   return w*PetscSqrtReal((PetscReal)1.0+t*t);
      63             : }
      64             : 
      65             : /*MC
      66             :    SlepcAbsEigenvalue - Returns the absolute value of a complex number given
      67             :    its real and imaginary parts.
      68             : 
      69             :    Synopsis:
      70             :    PetscReal SlepcAbsEigenvalue(PetscScalar x,PetscScalar y)
      71             : 
      72             :    Not Collective
      73             : 
      74             :    Input parameters:
      75             : +  x  - the real part of the complex number
      76             : -  y  - the imaginary part of the complex number
      77             : 
      78             :    Notes:
      79             :    This function computes sqrt(x**2+y**2), taking care not to cause unnecessary
      80             :    overflow. It is based on LAPACK's DLAPY2.
      81             : 
      82             :    In complex scalars, only the first argument is used.
      83             : 
      84             :    This function is not available from Fortran.
      85             : 
      86             :    Level: developer
      87             : M*/
      88             : #if !defined(PETSC_USE_COMPLEX)
      89             : #define SlepcAbsEigenvalue(x,y) SlepcAbs(x,y)
      90             : #else
      91             : #define SlepcAbsEigenvalue(x,y) PetscAbsScalar(x)
      92             : #endif
      93             : 
      94             : /*
      95             :    SlepcSetFlushToZero - Set the FTZ flag in floating-point arithmetic.
      96             : */
      97          72 : static inline PetscErrorCode SlepcSetFlushToZero(unsigned int *state)
      98             : {
      99          72 :   PetscFunctionBegin;
     100             : #if defined(PETSC_HAVE_XMMINTRIN_H) && defined(_MM_FLUSH_ZERO_ON) && defined(__SSE__)
     101             :   *state = _MM_GET_FLUSH_ZERO_MODE();
     102             :   _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
     103             : #else
     104          72 :   *state = 0;
     105             : #endif
     106          72 :   PetscFunctionReturn(PETSC_SUCCESS);
     107             : }
     108             : 
     109             : /*
     110             :    SlepcResetFlushToZero - Reset the FTZ flag in floating-point arithmetic.
     111             : */
     112          72 : static inline PetscErrorCode SlepcResetFlushToZero(unsigned int *state)
     113             : {
     114          72 :   PetscFunctionBegin;
     115             : #if defined(PETSC_HAVE_XMMINTRIN_H) && defined(_MM_FLUSH_ZERO_MASK) && defined(__SSE__)
     116             :   _MM_SET_FLUSH_ZERO_MODE(*state & _MM_FLUSH_ZERO_MASK);
     117             : #else
     118          72 :   *state = 0;
     119             : #endif
     120          72 :   PetscFunctionReturn(PETSC_SUCCESS);
     121             : }

Generated by: LCOV version 1.14