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

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

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

revision 431 by gross, Fri Jan 13 05:07:10 2006 UTC revision 432 by gross, Fri Jan 13 07:38:54 2006 UTC
# Line 49  Paso_Solver_ILU* Paso_Solver_getILU(Paso Line 49  Paso_Solver_ILU* Paso_Solver_getILU(Paso
49    index_t* mis_marker=TMPMEMALLOC(n,index_t);    index_t* mis_marker=TMPMEMALLOC(n,index_t);
50    out->colorOf=MEMALLOC(n,index_t);    out->colorOf=MEMALLOC(n,index_t);
51    out->factors=MEMALLOC(A->len,double);    out->factors=MEMALLOC(A->len,double);
52    out->main_iptr=MEMALLOC(n,double);    out->main_iptr=MEMALLOC(n,index_t);
53    out->pattern=Paso_SystemMatrixPattern_reference(A->pattern);    out->pattern=Paso_SystemMatrixPattern_reference(A->pattern);
54    out->n_block=n_block;    out->n_block=n_block;
55    out->n=n;    out->n=n;
# Line 73  Paso_Solver_ILU* Paso_Solver_getILU(Paso Line 73  Paso_Solver_ILU* Paso_Solver_getILU(Paso
73      time_color=Paso_timer()-time0;      time_color=Paso_timer()-time0;
74      time0=Paso_timer();      time0=Paso_timer();
75      /* find main diagonal and copy matrix values */      /* find main diagonal and copy matrix values */
76      #pragma omp for private(i) schedule(static) local(i,iptr,iptr_main,k)      #pragma omp parallel for schedule(static) private(i,iptr,iptr_main,k)
77      for (i = 0; i < n; ++i) {      for (i = 0; i < n; ++i) {
78          for (iptr=A->pattern->ptr[i];iptr<A->pattern->ptr[i+1]; ++iptr) {          for (iptr=A->pattern->ptr[i];iptr<A->pattern->ptr[i+1]; ++iptr) {
79              iptr_main=A->pattern->ptr[0]-1;              iptr_main=A->pattern->ptr[0]-1;
# Line 88  Paso_Solver_ILU* Paso_Solver_getILU(Paso Line 88  Paso_Solver_ILU* Paso_Solver_getILU(Paso
88      }      }
89      /* start factorization */      /* start factorization */
90    
91        #pragma omp barrier
92      for (color=0;color<out->num_colors && Paso_noError();++color) {      for (color=0;color<out->num_colors && Paso_noError();++color) {
93             if (n_block==1) {             if (n_block==1) {
94                #pragma omp for private(i) schedule(static) private(i,color2,iptr_ik,k,iptr_kj,S11,j,iptr_ij,A11,iptr_main,D)                #pragma omp parallel for schedule(static) private(i,color2,iptr_ik,k,iptr_kj,S11,j,iptr_ij,A11,iptr_main,D)
95                for (i = 0; i < n; ++i) {                for (i = 0; i < n; ++i) {
96                   if (out->colorOf[i]==color) {                   if (out->colorOf[i]==color) {
97                      for (color2=0;color2<color;++color2) {                      for (color2=0;color2<color;++color2) {
# Line 133  Paso_Solver_ILU* Paso_Solver_getILU(Paso Line 134  Paso_Solver_ILU* Paso_Solver_getILU(Paso
134                   }                   }
135                }                }
136             } else if (n_block==2) {             } else if (n_block==2) {
137                #pragma omp for private(i) schedule(static) private(i,color2,iptr_ik,k,iptr_kj,S11,S21,S12,S22,j,iptr_ij,A11,A21,A12,A22,iptr_main,D)                #pragma omp parallel for schedule(static) private(i,color2,iptr_ik,k,iptr_kj,S11,S21,S12,S22,j,iptr_ij,A11,A21,A12,A22,iptr_main,D)
138                for (i = 0; i < n; ++i) {                for (i = 0; i < n; ++i) {
139                   if (out->colorOf[i]==color) {                   if (out->colorOf[i]==color) {
140                      for (color2=0;color2<color;++color2) {                      for (color2=0;color2<color;++color2) {
# Line 202  Paso_Solver_ILU* Paso_Solver_getILU(Paso Line 203  Paso_Solver_ILU* Paso_Solver_getILU(Paso
203                   }                   }
204                }                }
205             } else if (n_block==3) {             } else if (n_block==3) {
206                #pragma omp for private(i) schedule(static) private(i,color2,iptr_ik,k,iptr_kj,S11,S21,S31,S12,S22,S32,S13,S23,S33,j,iptr_ij,A11,A21,A31,A12,A22,A32,A13,A23,A33,iptr_main,D)                #pragma omp parallel for schedule(static) private(i,color2,iptr_ik,k,iptr_kj,S11,S21,S31,S12,S22,S32,S13,S23,S33,j,iptr_ij,A11,A21,A31,A12,A22,A32,A13,A23,A33,iptr_main,D)
207                for (i = 0; i < n; ++i) {                for (i = 0; i < n; ++i) {
208                   if (out->colorOf[i]==color) {                   if (out->colorOf[i]==color) {
209                      for (color2=0;color2<color;++color2) {                      for (color2=0;color2<color;++color2) {
# Line 315  Paso_Solver_ILU* Paso_Solver_getILU(Paso Line 316  Paso_Solver_ILU* Paso_Solver_getILU(Paso
316             } else {             } else {
317                Paso_setError(VALUE_ERROR, "Paso_Solver_getILU: block size greater than 3 is not supported.");                Paso_setError(VALUE_ERROR, "Paso_Solver_getILU: block size greater than 3 is not supported.");
318             }                   }      
319               #pragma omp barrier
320          }          }
321          time_fac=Paso_timer()-time0;          time_fac=Paso_timer()-time0;
322    }    }
# Line 357  void Paso_Solver_solveILU(Paso_Solver_IL Line 359  void Paso_Solver_solveILU(Paso_Solver_IL
359       /* forward substitution */       /* forward substitution */
360       for (color=0;color<ilu->num_colors;++color) {       for (color=0;color<ilu->num_colors;++color) {
361             if (n_block==1) {             if (n_block==1) {
362                #pragma omp for private(i) schedule(static) private(i,iptr_ik,k,S1,R1)                #pragma omp for schedule(static) private(i,iptr_ik,k,S1,R1,iptr_main)
363                for (i = 0; i < n; ++i) {                for (i = 0; i < n; ++i) {
364                     if (ilu->colorOf[i]==color) {                     if (ilu->colorOf[i]==color) {
365                       /* x_i=x_i-a_ik*x_k */                                           /* x_i=x_i-a_ik*x_k */                    
# Line 374  void Paso_Solver_solveILU(Paso_Solver_IL Line 376  void Paso_Solver_solveILU(Paso_Solver_IL
376                     }                     }
377                }                }
378             } else if (n_block==2) {             } else if (n_block==2) {
379                #pragma omp for private(i) schedule(static) private(i,iptr_ik,k,iptr_main,S1,S2,R1,R2)                #pragma omp for schedule(static) private(i,iptr_ik,k,iptr_main,S1,S2,R1,R2)
380                for (i = 0; i < n; ++i) {                for (i = 0; i < n; ++i) {
381                     if (ilu->colorOf[i]==color) {                     if (ilu->colorOf[i]==color) {
382                       /* x_i=x_i-a_ik*x_k */                       /* x_i=x_i-a_ik*x_k */
# Line 396  void Paso_Solver_solveILU(Paso_Solver_IL Line 398  void Paso_Solver_solveILU(Paso_Solver_IL
398    
399                }                }
400             } else if (n_block==3) {             } else if (n_block==3) {
401                #pragma omp for private(i) schedule(static) private(i,iptr_ik,iptr_main,k,S1,S2,S3,R1,R2,R3)                #pragma omp for schedule(static) private(i,iptr_ik,iptr_main,k,S1,S2,S3,R1,R2,R3)
402                for (i = 0; i < n; ++i) {                for (i = 0; i < n; ++i) {
403                     if (ilu->colorOf[i]==color) {                     if (ilu->colorOf[i]==color) {
404                       /* x_i=x_i-a_ik*x_k */                       /* x_i=x_i-a_ik*x_k */
# Line 426  void Paso_Solver_solveILU(Paso_Solver_IL Line 428  void Paso_Solver_solveILU(Paso_Solver_IL
428       /* backward substitution */       /* backward substitution */
429       for (color=(ilu->num_colors)-1;color>-1;--color) {       for (color=(ilu->num_colors)-1;color>-1;--color) {
430             if (n_block==1) {             if (n_block==1) {
431                #pragma omp for private(i) schedule(static) private(i,iptr_ik,k,S1)                #pragma omp for schedule(static) private(i,iptr_ik,k,S1,R1)
432                for (i = 0; i < n; ++i) {                for (i = 0; i < n; ++i) {
433                     if (ilu->colorOf[i]==color) {                     if (ilu->colorOf[i]==color) {
434                       /* x_i=x_i-a_ik*x_k */                       /* x_i=x_i-a_ik*x_k */
# Line 442  void Paso_Solver_solveILU(Paso_Solver_IL Line 444  void Paso_Solver_solveILU(Paso_Solver_IL
444                     }                     }
445                }                }
446             } else if (n_block==2) {             } else if (n_block==2) {
447                #pragma omp for private(i) schedule(static) private(i,iptr_ik,k,S1,S2,R1,R2)                #pragma omp for schedule(static) private(i,iptr_ik,k,S1,S2,R1,R2)
448                for (i = 0; i < n; ++i) {                for (i = 0; i < n; ++i) {
449                     if (ilu->colorOf[i]==color) {                     if (ilu->colorOf[i]==color) {
450                       /* x_i=x_i-a_ik*x_k */                       /* x_i=x_i-a_ik*x_k */
# Line 462  void Paso_Solver_solveILU(Paso_Solver_IL Line 464  void Paso_Solver_solveILU(Paso_Solver_IL
464                     }                     }
465                }                }
466             } else if (n_block==3) {             } else if (n_block==3) {
467                #pragma omp for private(i) schedule(static) private(i,iptr_ik,k,S1,S2,S3,R1,R2,R3)                #pragma omp for schedule(static) private(i,iptr_ik,k,S1,S2,S3,R1,R2,R3)
468                for (i = 0; i < n; ++i) {                for (i = 0; i < n; ++i) {
469                     if (ilu->colorOf[i]==color) {                     if (ilu->colorOf[i]==color) {
470                       /* x_i=x_i-a_ik*x_k */                       /* x_i=x_i-a_ik*x_k */

Legend:
Removed from v.431  
changed lines
  Added in v.432

  ViewVC Help
Powered by ViewVC 1.1.26