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

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

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

revision 2801 by artak, Thu Nov 26 05:09:14 2009 UTC revision 2802 by artak, Thu Dec 3 01:51:55 2009 UTC
# Line 126  Paso_Solver_AMG* Paso_Solver_getAMG(Paso Line 126  Paso_Solver_AMG* Paso_Solver_getAMG(Paso
126    double S;    double S;
127    index_t iptr;    index_t iptr;
128    */    */
   verbose=1;  
129    /*char filename[8];*/    /*char filename[8];*/
130    /*sprintf(filename,"AMGLevel%d",level);    /*sprintf(filename,"AMGLevel%d",level);
131        
# Line 176  Paso_Solver_AMG* Paso_Solver_getAMG(Paso Line 175  Paso_Solver_AMG* Paso_Solver_getAMG(Paso
175            
176       if (verbose) fprintf(stdout,"Stats: Sparsity of the Coarse Matrix with %d non-zeros (%d,%d) in level %d is %.6f\n",A_p->len,A_p->numRows,A_p->numCols,level,sparsity);       if (verbose) fprintf(stdout,"Stats: Sparsity of the Coarse Matrix with %d non-zeros (%d,%d) in level %d is %.6f\n",A_p->len,A_p->numRows,A_p->numCols,level,sparsity);
177            
178      if(sparsity>0.01) {      
179         if(sparsity>0.01) {
180        level=0;        level=0;
181       }       }
       
182            
183            
184       if (level==0 || n<=options->min_coarse_matrix_size) {       if (level==0 || n<=options->min_coarse_matrix_size) {
185           out->coarsest_level=TRUE;           out->coarsest_level=TRUE;
186           /*out->GS=Paso_Solver_getJacobi(A_p);*/           /*out->GS=Paso_Solver_getJacobi(A_p);*/
# Line 220  Paso_Solver_AMG* Paso_Solver_getAMG(Paso Line 220  Paso_Solver_AMG* Paso_Solver_getAMG(Paso
220          }          }
221          else {          else {
222             /*Default coarseneing*/             /*Default coarseneing*/
223                /*Paso_Pattern_RS_MI_Aggressive(A_p,mis_marker,options->coarsening_threshold);*/
224              Paso_Pattern_RS_MI(A_p,mis_marker,options->coarsening_threshold);              Paso_Pattern_RS_MI(A_p,mis_marker,options->coarsening_threshold);
225              /*Paso_Pattern_YS(A_p,mis_marker,options->coarsening_threshold);*/              /*Paso_Pattern_YS(A_p,mis_marker,options->coarsening_threshold);*/
226              /*Paso_Pattern_RS(A_p,mis_marker,options->coarsening_threshold);*/              /*Paso_Pattern_RS(A_p,mis_marker,options->coarsening_threshold);*/
# Line 280  Paso_Solver_AMG* Paso_Solver_getAMG(Paso Line 281  Paso_Solver_AMG* Paso_Solver_getAMG(Paso
281                                            
282                   }                   }
283                }                }
284                        
285                   /*if(level==1) {
286                       printf("##TOTAL: %d, ELIMINATED: %d\n",n,out->n_F);
287                       for (i = 0; i < n; ++i) {
288                        printf("##%d %d\n",i,mis_marker[i]);
289                       }
290                     }
291                   */
292                /*check whether coarsening process actually makes sense to continue.                /*check whether coarsening process actually makes sense to continue.
293                if coarse matrix at least smaller by 30% then continue, otherwise we stop.*/                if coarse matrix at least smaller by 30% then continue, otherwise we stop.*/
294                if ((out->n_F*100/n)<30) {                if ((out->n_F*100/n)<30) {
# Line 288  Paso_Solver_AMG* Paso_Solver_getAMG(Paso Line 296  Paso_Solver_AMG* Paso_Solver_getAMG(Paso
296                  }                  }
297                            
298                if ( Paso_noError()) {                if ( Paso_noError()) {
                     /* if there are no nodes in the coarse level there is no more work to do */  
299                      out->n_C=n-out->n_F;                      out->n_C=n-out->n_F;
                     
                    /*if (out->n_F>500) */  
300                      out->rows_in_C=MEMALLOC(out->n_C,index_t);                      out->rows_in_C=MEMALLOC(out->n_C,index_t);
301                      out->mask_C=MEMALLOC(n,index_t);                      out->mask_C=MEMALLOC(n,index_t);
302                      if (! (Paso_checkPtr(out->mask_C) || Paso_checkPtr(out->rows_in_C) ) ) {                      if (! (Paso_checkPtr(out->mask_C) || Paso_checkPtr(out->rows_in_C) ) ) {
# Line 327  Paso_Solver_AMG* Paso_Solver_getAMG(Paso Line 332  Paso_Solver_AMG* Paso_Solver_getAMG(Paso
332                        /*sprintf(filename,"W_FCbefore_%d",level);                        /*sprintf(filename,"W_FCbefore_%d",level);
333                        Paso_SparseMatrix_saveMM(out->W_FC,filename);                        Paso_SparseMatrix_saveMM(out->W_FC,filename);
334                        */                        */
335                                                                      /* for (i = 0; i < n; ++i) {
336                                      printf("##mis_marker[%d]=%d\n",i,mis_marker[i]);
337                           }
338                          */                    
339                        time0=Paso_timer();                        time0=Paso_timer();
340                        Paso_SparseMatrix_updateWeights(A_p,out->W_FC,mis_marker);                        Paso_SparseMatrix_updateWeights(A_p,out->W_FC,mis_marker);
341                        time0=Paso_timer()-time0;                        time0=Paso_timer()-time0;
342                        if (verbose) fprintf(stdout,"timing: updateWeights: %e\n",time0);                        if (verbose) fprintf(stdout,"timing: updateWeights: %e\n",time0);
343                    
344                        /*                        
345                         printf("GOT W_FC, but n=%d,n_F=%d,n_C=%d\n",out->n,out->n_F,out->n_C);                        /*sprintf(filename,"W_FCafter_%d",level);
                       sprintf(filename,"W_FCafter_%d",level);  
346                        Paso_SparseMatrix_saveMM(out->W_FC,filename);                        Paso_SparseMatrix_saveMM(out->W_FC,filename);
347                        */                        */
                       /* get Prolongation and Restriction */  
348                                                
349                          /* get Prolongation and Restriction */
350                        time0=Paso_timer();                        time0=Paso_timer();
351                        out->P=Paso_SparseMatrix_getProlongation(out->W_FC,mis_marker);                        out->P=Paso_SparseMatrix_getProlongation(out->W_FC,mis_marker);
352                        time0=Paso_timer()-time0;                        time0=Paso_timer()-time0;
353                        if (verbose) fprintf(stdout,"timing: getProlongation: %e\n",time0);                        if (verbose) fprintf(stdout,"timing: getProlongation: %e\n",time0);
354                                                
355                        /*                        
356                         printf("GOT Prolongation P->nxc %dx%d\n",out->P->numRows,out->P->numCols);                        
357                        sprintf(filename,"P_%d",level);                        /* sprintf(filename,"P_%d",level);
358                        Paso_SparseMatrix_saveMM(out->P,filename);                        Paso_SparseMatrix_saveMM(out->P,filename);
359                        */                        */
360                                                
# Line 356  Paso_Solver_AMG* Paso_Solver_getAMG(Paso Line 363  Paso_Solver_AMG* Paso_Solver_getAMG(Paso
363                        time0=Paso_timer()-time0;                        time0=Paso_timer()-time0;
364                        if (verbose) fprintf(stdout,"timing: getRestriction: %e\n",time0);                        if (verbose) fprintf(stdout,"timing: getRestriction: %e\n",time0);
365                                                
366                        /*                        
367                        printf("GOT Restriction->cxn %dx%d\n",out->R->numRows,out->R->numCols);                        /*sprintf(filename,"R_%d",level);
                       sprintf(filename,"R_%d",level);  
368                        Paso_SparseMatrix_saveMM(out->R,filename);                        Paso_SparseMatrix_saveMM(out->R,filename);
369                        */                        */
370                                            
# Line 544  void Paso_Solver_solveAMG(Paso_Solver_AM Line 550  void Paso_Solver_solveAMG(Paso_Solver_AM
550        #pragma omp parallel for private(i) schedule(static)        #pragma omp parallel for private(i) schedule(static)
551        for (i=0;i<amg->n;++i)  {        for (i=0;i<amg->n;++i)  {
552         x[i]+=x0[i];         x[i]+=x0[i];
        /*printf("x[%d]=%e \n",i,x[i]);*/  
553        }        }
554                
555        time0=Paso_timer()-time0;        time0=Paso_timer()-time0;

Legend:
Removed from v.2801  
changed lines
  Added in v.2802

  ViewVC Help
Powered by ViewVC 1.1.26