Changeset 369


Ignore:
Timestamp:
05/12/09 16:47:58 (16 years ago)
Author:
Mathieu Morlighem
Message:

convergence criterion always check (do not wait count>=2)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp

    r365 r369  
    6060        loads=fem->loads->Copy();
    6161       
    62         /*recover input velocities if present: */
     62        /*Initialize ug and ug_old */
    6363        if (numberofdofspernode>=3)dofs[2]=1;//only keep vz if running with more than 3 dofs per node
    6464        ug=inputs->Get("velocity",&dofs[0],3);
    65 
    6665        VecDuplicate(ug,&old_ug);
    6766        VecCopy(ug,old_ug);
     
    128127
    129128                //Figure out if convergence is reached.
    130                 if(count>=2){
    131                         VecDuplicate(old_ug,&dug);VecCopy(old_ug,dug); VecAYPX(dug,-1.0,ug);
    132                         VecNorm(dug,NORM_2,&ndu);VecNorm(old_ug,NORM_2,&nu);VecNorm(dug,NORM_INFINITY,&nduinf); VecFree(&dug);
     129                VecDuplicate(old_ug,&dug);VecCopy(old_ug,dug); VecAYPX(dug,-1.0,ug);
     130                VecNorm(dug,NORM_2,&ndu);VecNorm(old_ug,NORM_2,&nu);VecNorm(dug,NORM_INFINITY,&nduinf); VecFree(&dug);
    133131
    134                         //relative criterion
    135                         if((ndu/nu)<eps_rel){
    136                                 if (debug) _printf_("%s%g%s%g\n","   Convergence criterion: norm(du)/norm(u)=",ndu/nu," < ",eps_rel);
    137                                 converged=1;
    138                                 }
    139                         else{
    140                                 if (debug) _printf_("%s%g%s%g\n","   Convergence criterion: norm(du)/norm(u)=",ndu/nu," > ",eps_rel);
     132                //relative criterion
     133                if((ndu/nu)<eps_rel){
     134                        if (debug) _printf_("%s%g%s%g\n","   Convergence criterion: norm(du)/norm(u)=",ndu/nu," < ",eps_rel);
     135                        converged=1;
     136                }
     137                else{
     138                        if (debug) _printf_("%s%g%s%g\n","   Convergence criterion: norm(du)/norm(u)=",ndu/nu," > ",eps_rel);
     139                        converged=0;
     140                }
     141
     142                //Absolute criterion (Optional)
     143                if (!isnan(eps_abs)){
     144                        if ((nduinf*yts)<eps_abs){
     145                                if (debug) _printf_("%s%g%s%g\n","   Convergence criterion: max(du)=",nduinf*yts," < ",eps_abs);
     146                        }
     147                        else{
     148                                if (debug) _printf_("%s%g%s%g\n","   Convergence criterion: max(du)=",nduinf*yts," > ",eps_abs);
    141149                                converged=0;
    142150                        }
     151                }
    143152
    144                         //Absolute criterion (Optional)
    145                         if (!isnan(eps_abs)){
    146                                 if ((nduinf*yts)<eps_abs){
    147                                         if (debug) _printf_("%s%g%s%g\n","   Convergence criterion: max(du)=",nduinf*yts," < ",eps_abs);
    148                                 }
    149                                 else{
    150                                         if (debug) _printf_("%s%g%s%g\n","   Convergence criterion: max(du)=",nduinf*yts," > ",eps_abs);
    151                                         converged=0;
    152                                 }
    153                         }
    154 
    155                         //rift convergence
    156                         if (!constraints_converged) converged=0;
    157                 }
     153                //rift convergence
     154                if (!constraints_converged) converged=0;
    158155
    159156                /*Increase count: */
Note: See TracChangeset for help on using the changeset viewer.