LAPACK  3.6.1
LAPACK: Linear Algebra PACKage
lapack_logical LAPACKE_dtr_nancheck ( int  matrix_layout,
char  uplo,
char  diag,
lapack_int  n,
const double *  a,
lapack_int  lda 
)

Definition at line 37 of file lapacke_dtr_nancheck.c.

41 {
42  lapack_int i, j, st;
43  lapack_logical colmaj, lower, unit;
44 
45  if( a == NULL ) return (lapack_logical) 0;
46 
47  colmaj = ( matrix_layout == LAPACK_COL_MAJOR );
48  lower = LAPACKE_lsame( uplo, 'l' );
49  unit = LAPACKE_lsame( diag, 'u' );
50 
51  if( ( !colmaj && ( matrix_layout != LAPACK_ROW_MAJOR ) ) ||
52  ( !lower && !LAPACKE_lsame( uplo, 'u' ) ) ||
53  ( !unit && !LAPACKE_lsame( diag, 'n' ) ) ) {
54  /* Just exit if any of input parameters are wrong */
55  return (lapack_logical) 0;
56  }
57  if( unit ) {
58  /* If unit, then don't touch diagonal, start from 1st column or row */
59  st = 1;
60  } else {
61  /* If non-unit, then check diagonal also, starting from [0,0] */
62  st = 0;
63  }
64 
65  /* Since col_major upper and row_major lower are equal,
66  * and col_major lower and row_major upper are equals too -
67  * using one code for equal cases. XOR( colmaj, upper )
68  */
69  if( ( colmaj || lower ) && !( colmaj && lower ) ) {
70  for( j = st; j < n; j++ ) {
71  for( i = 0; i < MIN( j+1-st, lda ); i++ ) {
72  if( LAPACK_DISNAN( a[i+j*lda] ) )
73  return (lapack_logical) 1;
74  }
75  }
76  } else {
77  for( j = 0; j < n-st; j++ ) {
78  for( i = j+st; i < MIN( n, lda ); i++ ) {
79  if( LAPACK_DISNAN( a[i+j*lda] ) )
80  return (lapack_logical) 1;
81  }
82  }
83  }
84  return (lapack_logical) 0;
85 }
#define lapack_logical
Definition: lapacke.h:51
#define LAPACK_ROW_MAJOR
Definition: lapacke.h:119
#define MIN(x, y)
Definition: lapacke_utils.h:50
#define LAPACK_DISNAN(x)
lapack_logical LAPACKE_lsame(char ca, char cb)
Definition: lapacke_lsame.c:36
#define LAPACK_COL_MAJOR
Definition: lapacke.h:120
#define lapack_int
Definition: lapacke.h:47

Here is the call graph for this function:

Here is the caller graph for this function: