Changeset 4778


Ignore:
Timestamp:
07/23/10 14:47:26 (15 years ago)
Author:
Mathieu Morlighem
Message:

InputConvergence is now outputing a bool

Location:
issm/trunk/src
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/modules/InputConvergencex/InputConvergencex.cpp

    r4726 r4778  
    88#include "../../EnumDefinitions/EnumDefinitions.h"
    99
    10 int InputConvergencex(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int* enums, int num_enums, int* criterionenums, double* criterionvalues,int num_criterionenums){
     10bool InputConvergencex(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int* enums, int num_enums, int* criterionenums, double* criterionvalues,int num_criterionenums){
    1111
    1212        /*intermediary:*/
    13         int         i;
    14         int         converged = 1;
    15         int         node_converged=1;
    16         double     *eps       = NULL;
    1713        extern int  my_rank;
    18         int         rank_allowed;
    19         Element*    element=NULL;
    20         int         verbose=0;
     14        int      i;
     15        bool     converged      = true;
     16        bool     node_converged = true;
     17        double  *eps            = NULL;
     18        int      rank_allowed;
     19        Element *element        = NULL;
     20        int      verbose        = 0;
    2121
    2222        /*retrieve parameters: */
  • issm/trunk/src/c/modules/InputConvergencex/InputConvergencex.h

    r4236 r4778  
    88
    99/* local prototypes: */
    10 int InputConvergencex(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int* enums, int num_enums, int* criterionenums, double* criterionvalues,int num_criterionenums);
     10bool InputConvergencex(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int* enums, int num_enums, int* criterionenums, double* criterionvalues,int num_criterionenums);
    1111
    1212#endif  /* _INPUTCONVERGENCEX_H */
  • issm/trunk/src/c/objects/Elements/Beam.cpp

    r4675 r4778  
    405405/*}}}*/
    406406/*FUNCTION Beam::InputConvergence{{{1*/
    407 void  Beam::InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
     407void  Beam::InputConvergence(bool* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
    408408
    409409        int     i;
    410410        Input** new_inputs=NULL;
    411411        Input** old_inputs=NULL;
    412         int     converged=1;
     412        bool    converged=true;
    413413
    414414        new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs
     
    425425        for(i=0;i<num_criterionenums;i++){
    426426                IsInputConverged(eps+i,new_inputs,old_inputs,num_enums/2,criterionenums[i]);
    427                 if(eps[i]>criterionvalues[i]) converged=0;
     427                if(eps[i]>criterionvalues[i]) converged=false;
    428428        }
    429429
  • issm/trunk/src/c/objects/Elements/Beam.h

    r4702 r4778  
    8484                void       InputAXPY(int YEnum, double scalar, int XEnum);
    8585                void       InputControlConstrain(int control_type,double cm_min, double cm_max);
    86                 void       InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
     86                void       InputConvergence(bool* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
    8787                void     InputDepthAverageAtBase(int enum_type,int average_enum_type){ISSMERROR("not implemented yet");}
    8888                void       InputDuplicate(int original_enum,int new_enum);
  • issm/trunk/src/c/objects/Elements/Element.h

    r4702 r4778  
    7272                virtual void   InputAXPY(int YEnum, double scalar, int XEnum)=0;
    7373                virtual void   InputControlConstrain(int control_type,double cm_min, double cm_max)=0;
    74                 virtual void   InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums)=0;
     74                virtual void   InputConvergence(bool* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums)=0;
    7575
    7676                /*Implementation: */
  • issm/trunk/src/c/objects/Elements/Penta.cpp

    r4774 r4778  
    10741074/*}}}*/
    10751075/*FUNCTION Penta::InputConvergence{{{1*/
    1076 void  Penta::InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
     1076void  Penta::InputConvergence(bool* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
    10771077
    10781078        int     i;
    10791079        Input** new_inputs=NULL;
    10801080        Input** old_inputs=NULL;
    1081         int     converged=1;
     1081        bool    converged=true;
    10821082
    10831083        new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs
     
    10941094        for(i=0;i<num_criterionenums;i++){
    10951095                IsInputConverged(eps+i,new_inputs,old_inputs,num_enums/2,criterionenums[i]);
    1096                 if(eps[i]>criterionvalues[i]) converged=0;
     1096                if(eps[i]>criterionvalues[i]) converged=false;
    10971097        }
    10981098
  • issm/trunk/src/c/objects/Elements/Penta.h

    r4765 r4778  
    8787                void   InputAXPY(int YEnum, double scalar, int XEnum);
    8888                void   InputControlConstrain(int control_type,double cm_min, double cm_max);
    89                 void   InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
     89                void   InputConvergence(bool* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
    9090                void   InputDepthAverageAtBase(int enum_type,int average_enum_type);
    9191                void   InputDuplicate(int original_enum,int new_enum);
  • issm/trunk/src/c/objects/Elements/Sing.cpp

    r4575 r4778  
    374374/*}}}*/
    375375/*FUNCTION Sing::InputConvergence{{{1*/
    376 void  Sing::InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
     376void  Sing::InputConvergence(bool* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
    377377
    378378        int i;
    379379        Input** new_inputs=NULL;
    380380        Input** old_inputs=NULL;
    381         int     converged=1;
     381        bool    converged=true;
    382382
    383383        new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs
     
    394394        for(i=0;i<num_criterionenums;i++){
    395395                IsInputConverged(eps+i,new_inputs,old_inputs,num_enums/2,criterionenums[i]);
    396                 if(eps[i]>criterionvalues[i]) converged=0;
     396                if(eps[i]>criterionvalues[i]) converged=false;
    397397        }
    398398
  • issm/trunk/src/c/objects/Elements/Sing.h

    r4702 r4778  
    8484                void   InputAXPY(int YEnum, double scalar, int XEnum);
    8585                void   InputControlConstrain(int control_type,double cm_min, double cm_max);
    86                 void   InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
     86                void   InputConvergence(bool* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
    8787                void   InputDepthAverageAtBase(int enum_type,int average_enum_type){ISSMERROR("not implemented yet");}
    8888                void   InputDuplicate(int original_enum,int new_enum);
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r4770 r4778  
    14531453/*}}}*/
    14541454/*FUNCTION Tria::InputConvergence{{{1*/
    1455 void  Tria::InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
     1455void  Tria::InputConvergence(bool* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
    14561456
    14571457        int i;
    14581458        Input** new_inputs=NULL;
    14591459        Input** old_inputs=NULL;
    1460         int     converged=1;
     1460        bool     converged=true;
    14611461
    14621462        new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs
     
    14731473        for(i=0;i<num_criterionenums;i++){
    14741474                IsInputConverged(eps+i,new_inputs,old_inputs,num_enums/2,criterionenums[i]);
    1475                 if(eps[i]>criterionvalues[i]) converged=0;
     1475                if(eps[i]>criterionvalues[i]) converged=false;
    14761476        }
    14771477
  • issm/trunk/src/c/objects/Elements/Tria.h

    r4770 r4778  
    8484                void   InputAXPY(int YEnum, double scalar, int XEnum);
    8585                void   InputControlConstrain(int control_type,double cm_min, double cm_max);
    86                 void   InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
     86                void   InputConvergence(bool* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
    8787                void   InputDepthAverageAtBase(int enum_type,int average_enum_type);
    8888                void   InputDuplicate(int original_enum,int new_enum);
  • issm/trunk/src/c/solutions/controlconvergence.cpp

    r4236 r4778  
    1818
    1919
    20 int controlconvergence(double* J, double* fit, double eps_cm, int n){
     20bool controlconvergence(double* J, double* fit, double eps_cm, int n){
    2121
    2222        int i;
    23         int converged=0;
     23        bool converged=false;
    2424
    2525        /*Has convergence been reached?*/
     
    3333                                if ((J[i]-J[n])/J[n] <= eps_cm){
    3434                                        //convergence if convergence criteria fullfilled
    35                                         converged=1;
     35                                        converged=true;
    3636                                        _printf_("%s%g%s%g\n","      Convergence criterion: dJ/J = ",(J[i]-J[n])/J[n],"<",eps_cm);
    3737                                }
     
    4545        }
    4646
    47 
    4847        return converged;
    4948}
  • issm/trunk/src/c/solutions/solutions.h

    r4765 r4778  
    3232//convergence:
    3333void convergence(int* pconverged, Mat K_ff,Vec p_f,Vec u_f,Vec u_f_old,Parameters* parameters);
    34 int controlconvergence(double* J, double* fit, double eps_cm, int n);
    35 int steadystateconvergence(FemModel* femmodel);
     34bool controlconvergence(double* J, double* fit, double eps_cm, int n);
     35bool steadystateconvergence(FemModel* femmodel);
    3636
    3737//optimization
  • issm/trunk/src/c/solutions/steadystate_core.cpp

    r4738 r4778  
    4545
    4646                if(verbose)_printf_("%s\n","checking velocity, temperature and pressure convergence");
    47                 if (step>1) if(steadystateconvergence(femmodel))goto cleanup_and_return;
     47                if (step>1) if(steadystateconvergence(femmodel)) break;
    4848               
    4949                if(verbose)_printf_("%s\n","saving velocity, temperature and pressure to check for convergence at next step");
     
    5757                step++;
    5858        }
    59 
    60         cleanup_and_return:
    6159       
    6260        if(verbose)_printf_("saving results:\n");
  • issm/trunk/src/c/solutions/steadystateconvergence.cpp

    r4540 r4778  
    1717#include "./solutions.h"
    1818
    19 int steadystateconvergence(FemModel* femmodel){
     19bool steadystateconvergence(FemModel* femmodel){
    2020       
    2121        /*output: */
    22         int converged=0;
    23         int velocity_converged=0;
    24         int temperature_converged=0;
     22        bool converged=false;
     23        bool velocity_converged=false;
     24        bool temperature_converged=false;
    2525
    2626        /*intermediary: */
     
    3737        temperature_converged=InputConvergencex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,&temperatureenums[0],2,&convergencecriterion[0],&convergencecriterionvalue[0],1);
    3838
    39         if(velocity_converged && temperature_converged)converged=1;
     39        if(velocity_converged && temperature_converged) converged=true;
    4040
    4141        /*return: */
  • issm/trunk/src/m/solutions/controlconvergence.m

    r4537 r4778  
    55%       converged=controlconvergence(J,fit,eps_cm,n);
    66
    7         convergence=0;
     7        convergence=false;
    88        if ~isnan(eps_cm),
    99                i=n-2;
     
    1414                                if ((c(i).J-c(n).J)/c(n).J <= eps_cm),
    1515                                        %convergence if convergence criteria fullfilled
    16                                         convergence=1;
     16                                        convergence=true;
    1717                                        displaystring(verbose,'\n%s%g%s%g\n','      Convergence criterion: dJ/J = ',(c(i).J-c(n).J)/c(n).J,'<',eps_cm);
    1818                                else
  • issm/trunk/src/m/solutions/convergence.m

    r4131 r4778  
    99
    1010%initialization
    11 converged=0;
     11converged=false;
    1212displaystring(verbose,' ');
    1313
     
    2626if (res<=eps_res),
    2727        displaystring(verbose,'%-60s%g%s%g%s','      mechanical equilibrium convergence criterion',res*100,' < ',eps_res*100,' %');
    28         converged=1;
     28        converged=true;
    2929else
    3030        displaystring(verbose,'%-60s%g%s%g%s','      mechanical equilibrium convergence criterion',res*100,' > ',eps_res*100,' %');
    31         converged=0;
     31        converged=false;
    3232end
    3333
     
    5050                        else
    5151                                displaystring(verbose,'%-60s%g%s%g%s','      relative convergence criterion: norm(du)/norm(u)',ndu/nu*100,' > ',eps_rel*100,' %');
    52                                 converged=0;
     52                                converged=false;
    5353                        end
    5454                else
    55                         converged=0;
     55                        converged=false;
    5656                end
    5757        else
     
    7979                else
    8080                        displaystring(verbose,'%-60s%g%s%g%s','      absolute convergence criterion: max(du)',nduinf,' > ',eps_abs,' m/yr');
    81                         converged=0;
     81                        converged=false;
    8282                end
    8383        else
  • issm/trunk/src/m/solutions/steadystate_core.m

    r4737 r4778  
    1616        while true,
    1717
    18                 displaystring(verbose,'\n%s%i/\n','computing velocities and temperatures for step: ',step);
     18                displaystring(verbose,'\n%s%i\n','computing velocities and temperatures for step: ',step);
    1919                femmodel=thermal_core(femmodel);
    2020
     
    3030                if step>1,
    3131                        displaystring(verbose,'\n%s',['checking temperature, velocity and pressure convergence...']);
    32                         converged=steadystateconvergence(femmodel);
    33                         if converged,
    34                                 break;
    35                         end
     32                        if steadystateconvergence(femmodel), break; end
    3633                end
    3734
  • issm/trunk/src/m/solutions/steadystateconvergence.m

    r4516 r4778  
    55%      steadystateconvergence(femmodel)
    66       
    7         converged=0;
    8         velocity_convergence=0;
    9         temperature_convergence=0;
     7        converged=false;
     8        velocity_convergence=false;
     9        temperature_convergence=false;
    1010
    1111        %Retrieve parameters
     
    2020
    2121        if (velocity_convergence & temperature_convergence),
    22                 converged=1;
     22                converged=true;
    2323        end
  • issm/trunk/src/mex/InputConvergence/InputConvergence.cpp

    r4573 r4778  
    2727
    2828        /* output datasets: */
    29         int converged;
     29        bool converged;
    3030
    3131        /*Boot module: */
Note: See TracChangeset for help on using the changeset viewer.