int main(void) { /* Local scalars */ char range, range_i; char order, order_i; lapack_int n, n_i; double vl, vl_i; double vu, vu_i; lapack_int il, il_i; lapack_int iu, iu_i; double abstol, abstol_i; lapack_int m, m_i; lapack_int nsplit, nsplit_i; lapack_int info, info_i; lapack_int i; int failed; /* Local arrays */ double *d = NULL, *d_i = NULL; double *e = NULL, *e_i = NULL; double *w = NULL, *w_i = NULL; lapack_int *iblock = NULL, *iblock_i = NULL; lapack_int *isplit = NULL, *isplit_i = NULL; double *work = NULL, *work_i = NULL; lapack_int *iwork = NULL, *iwork_i = NULL; double *w_save = NULL; lapack_int *iblock_save = NULL; lapack_int *isplit_save = NULL; /* Iniitialize the scalar parameters */ init_scalars_dstebz( &range, &order, &n, &vl, &vu, &il, &iu, &abstol ); range_i = range; order_i = order; n_i = n; vl_i = vl; vu_i = vu; il_i = il; iu_i = iu; abstol_i = abstol; /* Allocate memory for the LAPACK routine arrays */ d = (double *)LAPACKE_malloc( n * sizeof(double) ); e = (double *)LAPACKE_malloc( (n-1) * sizeof(double) ); w = (double *)LAPACKE_malloc( n * sizeof(double) ); iblock = (lapack_int *)LAPACKE_malloc( n * sizeof(lapack_int) ); isplit = (lapack_int *)LAPACKE_malloc( n * sizeof(lapack_int) ); work = (double *)LAPACKE_malloc( 4*n * sizeof(double) ); iwork = (lapack_int *)LAPACKE_malloc( 3*n * sizeof(lapack_int) ); /* Allocate memory for the C interface function arrays */ d_i = (double *)LAPACKE_malloc( n * sizeof(double) ); e_i = (double *)LAPACKE_malloc( (n-1) * sizeof(double) ); w_i = (double *)LAPACKE_malloc( n * sizeof(double) ); iblock_i = (lapack_int *)LAPACKE_malloc( n * sizeof(lapack_int) ); isplit_i = (lapack_int *)LAPACKE_malloc( n * sizeof(lapack_int) ); work_i = (double *)LAPACKE_malloc( 4*n * sizeof(double) ); iwork_i = (lapack_int *)LAPACKE_malloc( 3*n * sizeof(lapack_int) ); /* Allocate memory for the backup arrays */ w_save = (double *)LAPACKE_malloc( n * sizeof(double) ); iblock_save = (lapack_int *)LAPACKE_malloc( n * sizeof(lapack_int) ); isplit_save = (lapack_int *)LAPACKE_malloc( n * sizeof(lapack_int) ); /* Allocate memory for the row-major arrays */ /* Initialize input arrays */ init_d( n, d ); init_e( (n-1), e ); init_w( n, w ); init_iblock( n, iblock ); init_isplit( n, isplit ); init_work( 4*n, work ); init_iwork( 3*n, iwork ); /* Backup the ouptut arrays */ for( i = 0; i < n; i++ ) { w_save[i] = w[i]; } for( i = 0; i < n; i++ ) { iblock_save[i] = iblock[i]; } for( i = 0; i < n; i++ ) { isplit_save[i] = isplit[i]; } /* Call the LAPACK routine */ dstebz_( &range, &order, &n, &vl, &vu, &il, &iu, &abstol, d, e, &m, &nsplit, w, iblock, isplit, work, iwork, &info ); /* Initialize input data, call the column-major middle-level * interface to LAPACK routine and check the results */ for( i = 0; i < n; i++ ) { d_i[i] = d[i]; } for( i = 0; i < (n-1); i++ ) { e_i[i] = e[i]; } for( i = 0; i < n; i++ ) { w_i[i] = w_save[i]; } for( i = 0; i < n; i++ ) { iblock_i[i] = iblock_save[i]; } for( i = 0; i < n; i++ ) { isplit_i[i] = isplit_save[i]; } for( i = 0; i < 4*n; i++ ) { work_i[i] = work[i]; } for( i = 0; i < 3*n; i++ ) { iwork_i[i] = iwork[i]; } info_i = LAPACKE_dstebz_work( range_i, order_i, n_i, vl_i, vu_i, il_i, iu_i, abstol_i, d_i, e_i, &m_i, &nsplit_i, w_i, iblock_i, isplit_i, work_i, iwork_i ); failed = compare_dstebz( m, m_i, nsplit, nsplit_i, w, w_i, iblock, iblock_i, isplit, isplit_i, info, info_i, n ); if( failed == 0 ) { printf( "PASSED: column-major middle-level interface to dstebz\n" ); } else { printf( "FAILED: column-major middle-level interface to dstebz\n" ); } /* Initialize input data, call the column-major high-level * interface to LAPACK routine and check the results */ for( i = 0; i < n; i++ ) { d_i[i] = d[i]; } for( i = 0; i < (n-1); i++ ) { e_i[i] = e[i]; } for( i = 0; i < n; i++ ) { w_i[i] = w_save[i]; } for( i = 0; i < n; i++ ) { iblock_i[i] = iblock_save[i]; } for( i = 0; i < n; i++ ) { isplit_i[i] = isplit_save[i]; } for( i = 0; i < 4*n; i++ ) { work_i[i] = work[i]; } for( i = 0; i < 3*n; i++ ) { iwork_i[i] = iwork[i]; } info_i = LAPACKE_dstebz( range_i, order_i, n_i, vl_i, vu_i, il_i, iu_i, abstol_i, d_i, e_i, &m_i, &nsplit_i, w_i, iblock_i, isplit_i ); failed = compare_dstebz( m, m_i, nsplit, nsplit_i, w, w_i, iblock, iblock_i, isplit, isplit_i, info, info_i, n ); if( failed == 0 ) { printf( "PASSED: column-major high-level interface to dstebz\n" ); } else { printf( "FAILED: column-major high-level interface to dstebz\n" ); } failed = compare_dstebz( m, m_i, nsplit, nsplit_i, w, w_i, iblock, iblock_i, isplit, isplit_i, info, info_i, n ); if( failed == 0 ) { printf( "PASSED: row-major middle-level interface to dstebz\n" ); } else { printf( "FAILED: row-major middle-level interface to dstebz\n" ); } failed = compare_dstebz( m, m_i, nsplit, nsplit_i, w, w_i, iblock, iblock_i, isplit, isplit_i, info, info_i, n ); if( failed == 0 ) { printf( "PASSED: row-major high-level interface to dstebz\n" ); } else { printf( "FAILED: row-major high-level interface to dstebz\n" ); } /* Release memory */ if( d != NULL ) { LAPACKE_free( d ); } if( d_i != NULL ) { LAPACKE_free( d_i ); } if( e != NULL ) { LAPACKE_free( e ); } if( e_i != NULL ) { LAPACKE_free( e_i ); } if( w != NULL ) { LAPACKE_free( w ); } if( w_i != NULL ) { LAPACKE_free( w_i ); } if( w_save != NULL ) { LAPACKE_free( w_save ); } if( iblock != NULL ) { LAPACKE_free( iblock ); } if( iblock_i != NULL ) { LAPACKE_free( iblock_i ); } if( iblock_save != NULL ) { LAPACKE_free( iblock_save ); } if( isplit != NULL ) { LAPACKE_free( isplit ); } if( isplit_i != NULL ) { LAPACKE_free( isplit_i ); } if( isplit_save != NULL ) { LAPACKE_free( isplit_save ); } if( work != NULL ) { LAPACKE_free( work ); } if( work_i != NULL ) { LAPACKE_free( work_i ); } if( iwork != NULL ) { LAPACKE_free( iwork ); } if( iwork_i != NULL ) { LAPACKE_free( iwork_i ); } return 0; }
void open_possect() { init_iblock("pos"); }