Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 44ca20ce authored by BOUCHERIE Raphael's avatar BOUCHERIE Raphael
Browse files

added assert for next/prev piv

parent a6d367d3
No related branches found
No related tags found
1 merge request!6Tilesinfo struct
......@@ -190,6 +190,7 @@ int libhqr_hqr_init( libhqr_tree_t *qrtree,
int type_llvl, int type_hlvl,
int a, int p, int domino, int tsrr );
void libhqr_hqr_finalize( libhqr_tree_t *qrtree );
void libhqr_matrix_finalize(libhqr_tree_t *qrtree);
/*
* function for drawing the tree
......
......@@ -180,13 +180,13 @@ static void hqr_low_binary_init( hqr_subpiv_t *arg);
static void hqr_low_fibonacci_init(hqr_subpiv_t *arg, int minMN);
/* Stocking matrix info */
void libhqr_matrix_init(libhqr_tree_t *qrtree);
void libhqr_matrix_init(libhqr_tree_t *qrtree, const libhqr_tree_t *qrtree_init);
/* Function for getting the info on the matrix*/
int rdmtx_gettype(const libhqr_tree_t *qrtree, int k, int m);
int rdmtx_currpiv(const libhqr_tree_t *qrtree, int k, int m);
int rdmtx_nextpiv(const libhqr_tree_t *qrtree, int k, int p, int m);
int rdmtx_prevpiv(const libhqr_tree_t *qrtree, int k, int p, int m);
static int rdmtx_gettype(const libhqr_tree_t *qrtree, int k, int m);
static int rdmtx_currpiv(const libhqr_tree_t *qrtree, int k, int m);
static int rdmtx_nextpiv(const libhqr_tree_t *qrtree, int k, int p, int m);
static int rdmtx_prevpiv(const libhqr_tree_t *qrtree, int k, int p, int m);
/****************************************************
* Reading functions
......@@ -196,17 +196,16 @@ int rdmtx_prevpiv(const libhqr_tree_t *qrtree, int k, int p, int m);
* qrtree - tree used for the factorization
* k - Step k of the QR factorization
* m - line anhilated
*
*/
int rdmtx_gettype(const libhqr_tree_t *qrtree, int k, int m){
static int rdmtx_gettype(const libhqr_tree_t *qrtree, int k, int m){
int id;
libhqr_tileinfo_t *arg = (libhqr_tileinfo_t*)(qrtree->args);
id = (k * qrtree->mt) + m;
return arg[id].type;
}
int rdmtx_currpiv(const libhqr_tree_t *qrtree, int k, int m){
static int rdmtx_currpiv(const libhqr_tree_t *qrtree, int k, int m){
int id;
libhqr_tileinfo_t *arg = (libhqr_tileinfo_t*)(qrtree->args);
id = (k * qrtree->mt) + m;
......@@ -218,9 +217,11 @@ int rdmtx_currpiv(const libhqr_tree_t *qrtree, int k, int m){
* p - line used as pivot
*/
int rdmtx_nextpiv(const libhqr_tree_t *qrtree, int k, int p, int m){
static int rdmtx_nextpiv(const libhqr_tree_t *qrtree, int k, int p, int m){
int id;
libhqr_tileinfo_t *arg = (libhqr_tileinfo_t*)(qrtree->args);
myassert( m > p && p >= k );
myassert( m == qrtree->mt || p == rdmtx_currpiv( qrtree, k, m ) );
if(m == qrtree->mt){
id = (k * qrtree->mt) + p;
return arg[id].first_nextpiv;
......@@ -231,9 +232,11 @@ int rdmtx_nextpiv(const libhqr_tree_t *qrtree, int k, int p, int m){
}
}
int rdmtx_prevpiv(const libhqr_tree_t *qrtree, int k, int p, int m){
static int rdmtx_prevpiv(const libhqr_tree_t *qrtree, int k, int p, int m){
int id;
libhqr_tileinfo_t *arg = (libhqr_tileinfo_t*)(qrtree->args);
myassert( m >= p && p >= k && m < qrtree->mt );
myassert( m == p || p == rdmtx_currpiv( qrtree, k, m ) );
if(m == p){
id = (k * qrtree->mt) + p;
return arg[id].first_prevpiv;
......@@ -2021,7 +2024,7 @@ libhqr_hqr_init( libhqr_tree_t *qrtree,
qrtree->args = malloc( qrtree->mt * qrtree->nt * sizeof(libhqr_tileinfo_t) );
/* Initialize the matrix */
libhqr_matrix_init(qrtree);
libhqr_matrix_init(qrtree, &qrtree_init);
/* Free the initial qrtree */
libhqr_hqr_finalize( &qrtree_init );
......@@ -2826,21 +2829,27 @@ libhqr_svd_init( libhqr_tree_t *qrtree,
return 0;
}
void libhqr_matrix_init(libhqr_tree_t *qrtree){
void libhqr_matrix_init(libhqr_tree_t *qrtree, const libhqr_tree_t *qrtree_init){
int i, minMN, tile_id, p, k;
libhqr_tileinfo_t *arg = (libhqr_tileinfo_t*)(qrtree->args);
minMN = libhqr_imin(qrtree->nt, qrtree->mt);
for (k = 0; k < minMN; k++){
for (i = 0; i < minMN; i++){
for (i = 0; i < qrtree->mt; i++){
tile_id = (k * qrtree->mt) + i;
arg[tile_id].currpiv = qrtree->currpiv(qrtree, k, i);
arg[tile_id].type = qrtree_init->gettype(qrtree_init, k, i);
arg[tile_id].currpiv = qrtree_init->currpiv(qrtree_init, k, i);
p = arg[tile_id].currpiv;
arg[tile_id].first_nextpiv = qrtree->nextpiv(qrtree, k, i, qrtree->mt);
arg[tile_id].first_prevpiv = qrtree->prevpiv(qrtree, k, i, i);
arg[tile_id].type = qrtree->gettype(qrtree, k, i);
arg[tile_id].nextpiv = qrtree->nextpiv(qrtree, k, p, i);
arg[tile_id].prevpiv = qrtree->prevpiv(qrtree, k, p, i);
arg[tile_id].first_nextpiv = qrtree_init->nextpiv(qrtree_init, k, i, qrtree->mt);
arg[tile_id].first_prevpiv = qrtree_init->prevpiv(qrtree_init, k, i, i);
arg[tile_id].nextpiv = qrtree_init->nextpiv(qrtree_init, k, p, i);
arg[tile_id].prevpiv = qrtree_init->prevpiv(qrtree_init, k, p, i);
}
}
qrtree->args = (void*)arg;
}
void libhqr_matrix_finalize(libhqr_tree_t *qrtree){
libhqr_tileinfo_t *arg = (libhqr_tileinfo_t*)(qrtree->args);
free(arg);
}
......@@ -76,8 +76,9 @@ int main(int argc, char ** argv)
fprintf(stderr, "-M %d -N %d --treel=%d --qr_a=%d --tsrr=%d FAILED(%d)\n",
allM[m], allN[n], alltreel[l], allA[a], r, rc);
ret |= 1;
return 0;
}
libhqr_hqr_finalize( &qrtree );
libhqr_matrix_finalize( &qrtree );
done++;
printf("\r%6d / %6d", done, todo);
......@@ -110,7 +111,7 @@ int main(int argc, char ** argv)
ret |= 1;
}
libhqr_hqr_finalize( &qrtree );
libhqr_matrix_finalize( &qrtree );
done++;
printf("\r%6d / %6d", done, todo);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment