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

revision 1628 by phornby, Fri Jul 11 13:12:46 2008 UTC revision 1661 by gross, Mon Jul 21 22:08:27 2008 UTC
# Line 63  double Paso_FCTransportProblem_getSafeTi Line 63  double Paso_FCTransportProblem_getSafeTi
63                 for (i=0;i<n_rows;++i) {                 for (i=0;i<n_rows;++i) {
64                      rtmp1=fctp->main_diagonal_low_order_transport_matrix[i];                      rtmp1=fctp->main_diagonal_low_order_transport_matrix[i];
65                      rtmp2=fctp->lumped_mass_matrix[i];                      rtmp2=fctp->lumped_mass_matrix[i];
66                      if ( (rtmp1<0 && rtmp2>0.) || (rtmp1>0 && rtmp2<0.) ) {                      if ( (rtmp1<0 && rtmp2>0.) || (rtmp1>0 && rtmp2<0) ) {
67                          dt_max_loc=MIN(dt_max_loc,-rtmp2/rtmp1);                          dt_max_loc=MIN(dt_max_loc,-rtmp2/rtmp1);
68                      }                      }
69                  }                  }
# Line 159  void Paso_SolverFCT_solve(Paso_FCTranspo Line 159  void Paso_SolverFCT_solve(Paso_FCTranspo
159            n_substeps=1;            n_substeps=1;
160         }         }
161         dt2=dt/n_substeps;         dt2=dt/n_substeps;
162         printf("%d time steps of size is %e (theta = %e, dt_max=%e).\n",n_substeps, dt2,fctp->theta, dt_max);         printf("%ld time steps of size is %e (theta = %e, dt_max=%e).\n",n_substeps, dt2,fctp->theta, dt_max);
163         /*         /*
164      * seperate source into positive and negative part:      * seperate source into positive and negative part:
165      */      */
# Line 185  void Paso_SolverFCT_solve(Paso_FCTranspo Line 185  void Paso_SolverFCT_solve(Paso_FCTranspo
185          tolerance=options->tolerance;          tolerance=options->tolerance;
186          while(n<n_substeps && Paso_noError()) {          while(n<n_substeps && Paso_noError()) {
187
188              printf("substep step %d at t=%e\n",n+1,t);              printf("substep step %ld at t=%e\n",n+1,t);
189              /*              /*
190               * b^n[i]=m u^n[i] + dt2*(1-theta) sum_{j <> i} l_{ij}*(u^n[j]-u^n[i]) + dt2*sourceP[i]               * b^n[i]=m u^n[i] + dt2*(1-theta) sum_{j <> i} l_{ij}*(u^n[j]-u^n[i]) + dt2*sourceP[i]
191               *               *
# Line 255  void Paso_SolverFCT_solve(Paso_FCTranspo Line 255  void Paso_SolverFCT_solve(Paso_FCTranspo
255                 m=0;                 m=0;
256                 converged=FALSE;                 converged=FALSE;
257                 while ( (!converged) && (m<max_m) && Paso_noError()) {                 while ( (!converged) && (m<max_m) && Paso_noError()) {
258                      printf("iteration step %d\n",m+1);                      printf("iteration step %ld\n",m+1);
259                      /*                      /*
260                       *  set the ant diffusion fluxes:                       *  set the ant diffusion fluxes:
261                       *                       *
# Line 339  void Paso_SolverFCT_solve(Paso_FCTranspo Line 339  void Paso_SolverFCT_solve(Paso_FCTranspo
339                         }                         }
340                         Paso_Coupler_startCollect(u_m_coupler,u_m);                         Paso_Coupler_startCollect(u_m_coupler,u_m);
341                         #ifdef PASO_MPI                         #ifdef PASO_MPI
342                  double local_norm[2], norm[2];
343                            local_norm[0]=norm_u;                            local_norm[0]=norm_u;
344                            local_norm[1]=norm_du;                            local_norm[1]=norm_du;
345                        MPI_Allreduce(local_norm,norm, 2, MPI_DOUBLE, MPI_MAX, fctp->mpi_info->comm);                        MPI_Allreduce(local_norm,norm, 2, MPI_DOUBLE, MPI_MAX, fctp->mpi_info->comm);
# Line 348  void Paso_SolverFCT_solve(Paso_FCTranspo Line 349  void Paso_SolverFCT_solve(Paso_FCTranspo
349                         norm_du*=omega;                         norm_du*=omega;
350                         converged=(norm_du <= tolerance * norm_u);                         converged=(norm_du <= tolerance * norm_u);
351                         m++;                         m++;
352                         printf("iteration step %d: norm u and du_m : %e %e\n",m,norm_u,norm_du);                         printf("iteration step %ld: norm u and du_m : %e %e\n",m,norm_u,norm_du);
353                         /* TODO: check if du_m has been redu_mced */                         /* TODO: check if du_m has been redu_mced */
354                         Paso_Coupler_finishCollect(u_m_coupler);                         Paso_Coupler_finishCollect(u_m_coupler);
355                      } /* end of inner iteration */                      } /* end of inner iteration */

Legend:
 Removed from v.1628 changed lines Added in v.1661