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

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

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

revision 2279 by artak, Tue Feb 17 04:20:29 2009 UTC revision 2280 by artak, Thu Feb 19 03:34:35 2009 UTC
# Line 73  void swap( index_t *r, index_t *c, doubl Line 73  void swap( index_t *r, index_t *c, doubl
73  void q_sort( index_t *row, index_t *col, double *val, int begin, int end )  void q_sort( index_t *row, index_t *col, double *val, int begin, int end )
74  {  {
75      int l, r;      int l, r;
76      unsigned long pivot, lval;      int flag;
77          
   
78      if( end > begin )      if( end > begin )
79      {      {
         pivot = ((unsigned long)N) * row[begin]+col[begin] ;  
80          l = begin + 1;          l = begin + 1;
81          r = end;          r = end;
82    
83          while( l < r )          while( l < r )
84          {          {
85              lval = ((unsigned long)N) * row[l]+col[l];              if (row[l]<row[begin])
86              if( lval < pivot )               {
87                    if (ABS(row[l]-row[begin])==1 && ABS(col[l]-col[begin])==N)
88                       flag=0;
89                    else
90                       flag=1;  
91                 }
92                else if (row[l]==row[begin])
93                         if (col[l]<col[begin])
94                        flag=1;
95                     else
96                        flag=0;
97                else {
98                    if (ABS(row[l]-row[begin])==1 && ABS(col[l]-col[begin])==N)
99                       flag=1;
100                    else
101                       flag=0;
102                }
103                
104                if(flag==1)
105                  l++;                  l++;
106              else              else {
             {  
107                  r--;                  r--;
108                  swap( row, col, val, l, r );                  swap( row, col, val, l, r );
109              }              }
110                
111          }          }
112          l--;          l--;
113          swap( row, col, val, begin, l );          swap( row, col, val, begin, l );
# Line 157  Paso_SystemMatrix* Paso_SystemMatrix_loa Line 173  Paso_SystemMatrix* Paso_SystemMatrix_loa
173          return NULL;          return NULL;
174      }      }
175            
     /* Check whether we can handle current matrix size.  
       In the q_sort algorithm we use N*M+N expression which should be in the limits of "unsigned long".*/  
     if( M>=(ULONG_MAX-N)/N )    
     {  
         Paso_setError(IO_ERROR, "Paso_SystemMatrix_loadMM_toCSR: Matrix size is too big.");  
                 Paso_MPIInfo_free(mpi_info);  
         fclose( fileHandle_p );  
         return NULL;  
     }  
   
176      /* prepare storage */      /* prepare storage */
177      col_ind = MEMALLOC( nz, index_t );      col_ind = MEMALLOC( nz, index_t );
178      row_ind = MEMALLOC( nz, index_t );      row_ind = MEMALLOC( nz, index_t );
# Line 306  Paso_SystemMatrix* Paso_SystemMatrix_loa Line 312  Paso_SystemMatrix* Paso_SystemMatrix_loa
312          return NULL;          return NULL;
313      }      }
314    
     /* Check whether we can handle current matrix size.  
       In the q_sort algorithm we use N*M+N expression which should be in the limits of "unsigned long".*/  
     if( M>=(ULONG_MAX-N)/N )    
     {  
         Paso_setError(IO_ERROR, "Paso_SystemMatrix_loadMM_toCSC: Matrix size is too big.");  
                 Paso_MPIInfo_free(mpi_info);  
         fclose( fileHandle_p );  
         return NULL;  
     }  
   
315      /* prepare storage */      /* prepare storage */
316      col_ind = MEMALLOC( nz, index_t );      col_ind = MEMALLOC( nz, index_t );
317      row_ind = MEMALLOC( nz, index_t );      row_ind = MEMALLOC( nz, index_t );

Legend:
Removed from v.2279  
changed lines
  Added in v.2280

  ViewVC Help
Powered by ViewVC 1.1.26