Mentions légales du service

Skip to content
Snippets Groups Projects

4 - Dist/SpmNorm

Merged Tony Delarue requested to merge tdelarue/spm:dist/spm_norm into master
All threads resolved!
1 file
+ 46
35
Compare changes
  • Side-by-side
  • Inline
+ 46
35
@@ -382,7+382,7 @@
}
else {
switch( spm->fmttype ){
case SpmCSC:
z_spmFrobeniusNorm_csc( spm, data );
break;
@@ -466,7+466,7 @@
/* Diagonal element */
idx = (sumcol == NULL) ? (row + ii) : (col + jj);
sumtab[idx] = cabs( *valptr );
sumtab[idx] += cabs( *valptr );
valptr++;
for(ii=jj+1; ii<dofi; ii++, valptr++)
{
/* Lower part */
sumtab[row+ii] = cabs( *valptr );
sumtab[row+ii] += cabs( *valptr );
/* Upper part */
sumtab[col+jj] = cabs( *valptr );
sumtab[col+jj] += cabs( *valptr );
}
}
}
@@ -496,14 +496,14 @@ z_spm_compute_sumtab_sym_diag_row( const spm_int_t col,
for(jj=0; jj<ii; jj++, valptr++)
{
/* Lower part */
sumtab[row+ii] = cabs( *valptr );
sumtab[row+ii] += cabs( *valptr );
/* Upper part */
sumtab[col+jj] = cabs( *valptr );
sumtab[col+jj] += cabs( *valptr );
}
/* Diagonal element */
idx = (sumcol == NULL) ? (row + ii) : (col + jj);
sumtab[idx] = cabs( *valptr );
sumtab[idx] += cabs( *valptr );
valptr++;
/* Skip unused upper triangular part */
@@ -663,27 +663,38 @@ z_spm_one_inf_norm( const spmatrix_t *spm,
double *sumrow,
double *sumcol )
{
spm_int_t i, j, baseval;
spm_int_t dofj, dofi;
spm_int_t col, row;
double norm = 0.;
double *sumtab;
spm_complex64_t *valptr = (spm_complex64_t*)spm->values;
spm_int_t i, j, baseval;
spm_int_t dofj, dofi;
spm_int_t col, row;
const spm_int_t *colptr;
const spm_int_t *rowptr;
const spm_int_t *dofs;
const spm_int_t *loc2glob;
const spm_complex64_t *valptr;
double *sumtab;
double norm = 0.;
baseval = spmFindBase( spm );
colptr = spm->colptr;
rowptr = spm->rowptr;
valptr = (spm_complex64_t*)(spm->values);
dofs = spm->dofs;
loc2glob = spm->loc2glob;
switch( spm->fmttype ){
case SpmCSC:
for( j=0; j < spm->n; j++ )
for( j=0; j < spm->n; j++, colptr++ )
{
col = (spm->loc2glob == NULL) ? j : spm->loc2glob[j] - baseval;
dofj = (spm->dof > 0) ? spm->dof : spm->dofs[col+1] - spm->dofs[col];
col = (spm->dof > 0) ? spm->dof * col : spm->dofs[col] - baseval;
col = (loc2glob == NULL) ? j : loc2glob[j] - baseval;
dofj = (spm->dof > 0) ? spm->dof : dofs[col+1] - dofs[col];
col = (spm->dof > 0) ? spm->dof * col : dofs[col] - baseval;
for( i=spm->colptr[j]-baseval; i<spm->colptr[j+1]-baseval; i++ )
for( i=colptr[0]; i<colptr[1]; i++, rowptr++ )
{
row = spm->rowptr[i] - baseval;
dofi = (spm->dof > 0) ? spm->dof : spm->dofs[row+1] - spm->dofs[row];
row = (spm->dof > 0) ? spm->dof * row : spm->dofs[row] - baseval;
row = (*rowptr - baseval);
dofi = (spm->dof > 0) ? spm->dof : dofs[row+1] - dofs[row];
row = (spm->dof > 0) ? spm->dof * row : dofs[row] - baseval;
z_spm_compute_sumtab( spm->mtxtype, spm->layout,
col, dofj, row, dofi, sumrow, sumcol, valptr );
@@ -693,17 +704,17 @@ z_spm_one_inf_norm( const spmatrix_t *spm,
break;
case SpmCSR:
for( i=0; i < spm->n; i++ )
for( i=0; i < spm->n; i++, rowptr++ )
{
row = (spm->loc2glob == NULL) ? i : spm->loc2glob[i] - baseval;
dofi = (spm->dof > 0) ? spm->dof : spm->dofs[row+1] - spm->dofs[row];
row = (spm->dof > 0) ? spm->dof * row : spm->dofs[row] - baseval;
row = (loc2glob == NULL) ? i : loc2glob[i] - baseval;
dofi = (spm->dof > 0) ? spm->dof : dofs[row+1] - dofs[row];
row = (spm->dof > 0) ? spm->dof * row : dofs[row] - baseval;
for( j=spm->rowptr[i]-baseval; j<spm->rowptr[i+1]-baseval; j++ )
for( j=rowptr[0]; j<rowptr[1]; j++, colptr++ )
{
col = spm->colptr[j] - baseval;
dofj = (spm->dof > 0) ? spm->dof : spm->dofs[col+1] - spm->dofs[col];
col = (spm->dof > 0) ? spm->dof * col : spm->dofs[col] - baseval;
col = (*colptr - baseval);
dofj = (spm->dof > 0) ? spm->dof : dofs[col+1] - dofs[col];
col = (spm->dof > 0) ? spm->dof * col : dofs[col] - baseval;
z_spm_compute_sumtab( spm->mtxtype, spm->layout,
col, dofj, row, dofi, sumrow, sumcol, valptr );
@@ -713,15 +724,15 @@ z_spm_one_inf_norm( const spmatrix_t *spm,
break;
case SpmIJV:
for(i=0; i < spm->nnz; i++)
for(i=0; i < spm->nnz; i++, colptr++, rowptr++)
{
row = spm->rowptr[i]-baseval;
dofi = (spm->dof > 0) ? spm->dof : spm->dofs[row+1] - spm->dofs[row];
row = (spm->dof > 0) ? spm->dof * row : spm->dofs[row] - baseval;
row = (*rowptr - baseval);
dofi = (spm->dof > 0) ? spm->dof : dofs[row+1] - dofs[row];
row = (spm->dof > 0) ? spm->dof * row : dofs[row] - baseval;
col = spm->colptr[i]-baseval;
dofj = (spm->dof > 0) ? spm->dof : spm->dofs[col+1] - spm->dofs[col];
col = (spm->dof > 0) ? spm->dof * col : spm->dofs[col] - baseval;
col = (*colptr - baseval);
dofj = (spm->dof > 0) ? spm->dof : dofs[col+1] - dofs[col];
col = (spm->dof > 0) ? spm->dof * col : dofs[col] - baseval;
z_spm_compute_sumtab( spm->mtxtype, spm->layout,
col, dofj, row, dofi, sumrow, sumcol, valptr );
Loading