Changeset 12271


Ignore:
Timestamp:
05/18/12 16:42:13 (13 years ago)
Author:
habbalf
Message:

First attempt at adding convergence flag: (i.e. whether loop exited due to convergence criteria or maximum number of iterations). Not sure if Addobject( new BoolExternalResults _ ) is correct or will it end up duplicating this field in the results in multiple solves within a solution sequence? I have not checked-in thermal_nonlinear.cpp or stokescoupling_nonlinear.cpp since I am not using these yet...Will be testing, but feel free to change

Location:
issm/trunk-jpl/src/c/solvers
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/solvers/solver_newton.cpp

    r11679 r12271  
    6767                convergence(&converged,Kff,pf,uf,old_uf,femmodel->parameters);
    6868                xdelete(&Kff); xdelete(&pf);
    69                 if(converged==true) break;
     69                if(converged==true){   
     70                        bool max_iteration_state=false;
     71                        int tempStep=1;
     72                        double tempTime=1.0;
     73                        femmodel->results->AddObject(new BoolExternalResult(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
     74                        break;
     75                }
    7076                if(count>=max_nonlinear_iterations){
    71                         _printf_(true,"   maximum number of iterations (%i) exceeded\n",max_nonlinear_iterations);
     77                        _printf_(true,"   maximum number of Newton iterations (%i) exceeded\n",max_nonlinear_iterations);
     78                        bool max_iteration_state=true;
     79                        int tempStep=1;
     80                        double tempTime=1.0;
     81                        femmodel->results->AddObject(new BoolExternalResult(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
    7282                        break;
    7383                }
  • issm/trunk-jpl/src/c/solvers/solver_nonlinear.cpp

    r11679 r12271  
    8585                /*Increase count: */
    8686                count++;
    87                 if(converged==true)break;
     87                if(converged==true){
     88                        bool max_iteration_state=false;
     89                        int tempStep=1;
     90                        double tempTime=1.0;
     91                        femmodel->results->AddObject(new BoolExternalResult(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
     92                        break;
     93                }
    8894                if(count>=max_nonlinear_iterations){
    89                         _printf_(true,"   maximum number of iterations (%i) exceeded\n",max_nonlinear_iterations);
     95                        _printf_(true,"   maximum number of nonlinear iterations (%i) exceeded\n",max_nonlinear_iterations);
    9096                        converged=true;
    91                 InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);
    92                 InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);
     97                        InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);
     98                        InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);               
     99                        bool max_iteration_state=true;
     100                        int tempStep=1;
     101                        double tempTime=1.0;
     102                        femmodel->results->AddObject(new BoolExternalResult(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
    93103                        break;
    94104                }
Note: See TracChangeset for help on using the changeset viewer.