/[escript]/trunk/paso/src/SystemMatrixPattern_getSubpattern.c
ViewVC logotype

Diff of /trunk/paso/src/SystemMatrixPattern_getSubpattern.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 414 by jgs, Wed Nov 9 02:02:19 2005 UTC revision 415 by gross, Wed Jan 4 05:37:33 2006 UTC
# Line 21  Line 21 
21    
22  Paso_SystemMatrixPattern* Paso_SystemMatrixPattern_getSubpattern(Paso_SystemMatrixPattern* pattern, \  Paso_SystemMatrixPattern* Paso_SystemMatrixPattern_getSubpattern(Paso_SystemMatrixPattern* pattern, \
23                                             int new_n_rows, index_t* row_list,index_t* new_col_index) {                                             int new_n_rows, index_t* row_list,index_t* new_col_index) {
24      index_t index_offset=(pattern->type & PATTERN_FORMAT_OFFSET1 ? 1:0);
25    Paso_SystemMatrixPattern*out=NULL;    Paso_SystemMatrixPattern*out=NULL;
26    index_t *ptr=NULL,*index=NULL,k,j,subpattern_row,tmp;    index_t *ptr=NULL,*index=NULL,k,j,subpattern_row,tmp;
27    dim_t i;    dim_t i;
# Line 38  Paso_SystemMatrixPattern* Paso_SystemMat Line 39  Paso_SystemMatrixPattern* Paso_SystemMat
39          for (i=0;i<new_n_rows;++i) {          for (i=0;i<new_n_rows;++i) {
40              j=0;              j=0;
41              subpattern_row=row_list[i];              subpattern_row=row_list[i];
42              for (k=pattern->ptr[subpattern_row]-PTR_OFFSET;k<pattern->ptr[subpattern_row+1]-PTR_OFFSET;++k)              for (k=pattern->ptr[subpattern_row]-index_offset;k<pattern->ptr[subpattern_row+1]-index_offset;++k)
43                 if (new_col_index[pattern->index[k]-INDEX_OFFSET]>-1) j++;                 if (new_col_index[pattern->index[k]-index_offset]>-1) j++;
44              ptr[i]=j;              ptr[i]=j;
45          }          }
46       }       }
# Line 54  Paso_SystemMatrixPattern* Paso_SystemMat Line 55  Paso_SystemMatrixPattern* Paso_SystemMat
55          for (i=0;i<new_n_rows;++i) {          for (i=0;i<new_n_rows;++i) {
56               j=ptr[i];               j=ptr[i];
57               subpattern_row=row_list[i];               subpattern_row=row_list[i];
58               for (k=pattern->ptr[subpattern_row]-PTR_OFFSET;k<pattern->ptr[subpattern_row+1]-PTR_OFFSET;++k) {               for (k=pattern->ptr[subpattern_row]-index_offset;k<pattern->ptr[subpattern_row+1]-index_offset;++k) {
59                  tmp=new_col_index[pattern->index[k]-INDEX_OFFSET];                  tmp=new_col_index[pattern->index[k]-index_offset];
60                  if (tmp>-1) {                  if (tmp>-1) {
61                      index[j]=tmp;                      index[j]=tmp;
62                      ++j;                      ++j;
# Line 63  Paso_SystemMatrixPattern* Paso_SystemMat Line 64  Paso_SystemMatrixPattern* Paso_SystemMat
64               }               }
65          }          }
66          /* create return value */          /* create return value */
67          out=Paso_SystemMatrixPattern_alloc(new_n_rows,ptr,index);          out=Paso_SystemMatrixPattern_alloc(pattern->type,new_n_rows,ptr,index);
68          if (! Paso_noError()) {          if (! Paso_noError()) {
69            MEMFREE(index);            MEMFREE(index);
70            MEMFREE(ptr);            MEMFREE(ptr);

Legend:
Removed from v.414  
changed lines
  Added in v.415

  ViewVC Help
Powered by ViewVC 1.1.26