Changeset 4880


Ignore:
Timestamp:
07/29/10 11:26:26 (15 years ago)
Author:
Mathieu Morlighem
Message:

now input convergence returns number of elements above or below criterion

Location:
issm/trunk/src/c
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/objects/Elements/Beam.cpp

    r4873 r4880  
    407407/*}}}*/
    408408/*FUNCTION Beam::InputConvergence{{{1*/
    409 void  Beam::InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
    410 
    411         int     i;
     409bool Beam::InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
     410
     411        int i;
    412412        Input** new_inputs=NULL;
    413413        Input** old_inputs=NULL;
    414         int     converged=1;
     414        bool    converged=true;
    415415
    416416        new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs
    417417        old_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the old inputs
    418        
     418
    419419        for(i=0;i<num_enums/2;i++){
    420420                new_inputs[i]=(Input*)this->inputs->GetInput(enums[2*i+0]);
     
    427427        for(i=0;i<num_criterionenums;i++){
    428428                IsInputConverged(eps+i,new_inputs,old_inputs,num_enums/2,criterionenums[i]);
    429                 if(eps[i]>criterionvalues[i]) converged=0;
     429                if(eps[i]>criterionvalues[i]) converged=false;
    430430        }
    431431
     
    434434        xfree((void**)&old_inputs);
    435435
    436         /*Assign output pointers:*/
    437         *pconverged=converged;
     436        /*Return output*/
     437        return converged;
    438438
    439439}
  • issm/trunk/src/c/objects/Elements/Beam.h

    r4873 r4880  
    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                bool     InputConvergence(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

    r4873 r4880  
    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 bool   InputConvergence(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

    r4873 r4880  
    10581058/*}}}*/
    10591059/*FUNCTION Penta::InputConvergence{{{1*/
    1060 void  Penta::InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
    1061 
    1062         int     i;
     1060bool Penta::InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
     1061
     1062        int i;
    10631063        Input** new_inputs=NULL;
    10641064        Input** old_inputs=NULL;
    1065         int     converged=1;
     1065        bool    converged=true;
    10661066
    10671067        new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs
    10681068        old_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the old inputs
    1069        
     1069
    10701070        for(i=0;i<num_enums/2;i++){
    10711071                new_inputs[i]=(Input*)this->inputs->GetInput(enums[2*i+0]);
     
    10781078        for(i=0;i<num_criterionenums;i++){
    10791079                IsInputConverged(eps+i,new_inputs,old_inputs,num_enums/2,criterionenums[i]);
    1080                 if(eps[i]>criterionvalues[i]) converged=0;
     1080                if(eps[i]>criterionvalues[i]) converged=false;
    10811081        }
    10821082
     
    10851085        xfree((void**)&old_inputs);
    10861086
    1087         /*Assign output pointers:*/
    1088         *pconverged=converged;
     1087        /*Return output*/
     1088        return converged;
    10891089
    10901090}
  • issm/trunk/src/c/objects/Elements/Penta.h

    r4873 r4880  
    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                bool   InputConvergence(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

    r4873 r4880  
    376376/*}}}*/
    377377/*FUNCTION Sing::InputConvergence{{{1*/
    378 void  Sing::InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
     378bool Sing::InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
    379379
    380380        int i;
    381381        Input** new_inputs=NULL;
    382382        Input** old_inputs=NULL;
    383         int     converged=1;
     383        bool    converged=true;
    384384
    385385        new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs
     
    396396        for(i=0;i<num_criterionenums;i++){
    397397                IsInputConverged(eps+i,new_inputs,old_inputs,num_enums/2,criterionenums[i]);
    398                 if(eps[i]>criterionvalues[i]) converged=0;
     398                if(eps[i]>criterionvalues[i]) converged=false;
    399399        }
    400400
     
    403403        xfree((void**)&old_inputs);
    404404
    405         /*Assign output pointers:*/
    406         *pconverged=converged;
     405        /*Return output*/
     406        return converged;
    407407
    408408}
  • issm/trunk/src/c/objects/Elements/Sing.h

    r4873 r4880  
    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                bool   InputConvergence(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

    r4873 r4880  
    12551255/*}}}*/
    12561256/*FUNCTION Tria::InputConvergence{{{1*/
    1257 void  Tria::InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
     1257bool Tria::InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
    12581258
    12591259        int i;
    12601260        Input** new_inputs=NULL;
    12611261        Input** old_inputs=NULL;
    1262         int     converged=1;
     1262        bool    converged=true;
    12631263
    12641264        new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs
    12651265        old_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the old inputs
    1266        
     1266
    12671267        for(i=0;i<num_enums/2;i++){
    12681268                new_inputs[i]=(Input*)this->inputs->GetInput(enums[2*i+0]);
     
    12751275        for(i=0;i<num_criterionenums;i++){
    12761276                IsInputConverged(eps+i,new_inputs,old_inputs,num_enums/2,criterionenums[i]);
    1277                 if(eps[i]>criterionvalues[i]) converged=0;
     1277                if(eps[i]>criterionvalues[i]) converged=false;
    12781278        }
    12791279
     
    12821282        xfree((void**)&old_inputs);
    12831283
    1284         /*Assign output pointers:*/
    1285         *pconverged=converged;
     1284        /*Return output*/
     1285        return converged;
    12861286
    12871287}
  • issm/trunk/src/c/objects/Elements/Tria.h

    r4873 r4880  
    8383                void   InputAXPY(int YEnum, double scalar, int XEnum);
    8484                void   InputControlConstrain(int control_type,double cm_min, double cm_max);
    85                 void   InputConvergence(int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
     85                bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
    8686                void   InputDepthAverageAtBase(int enum_type,int average_enum_type);
    8787                void   InputDuplicate(int original_enum,int new_enum);
  • issm/trunk/src/c/shared/Numerics/IsInputConverged.cpp

    r4057 r4880  
    3232                /*conpute ndu/du (where u could be velocity, pressure, temperature, etc ...): */
    3333                for(i=0;i<num_inputs;i++){
     34
     35                        /*in debugging mode, check that the inputs are of the same type*/
     36                        ISSMASSERT(new_inputs[i]->Enum()==old_inputs[i]->Enum());
     37
     38                        /*Get pointers*/
    3439                        new_inputs[i]->GetValuesPtr(&newvalues,&num_values);
    3540                        old_inputs[i]->GetValuesPtr(&oldvalues,&num_values);
  • issm/trunk/src/c/solutions/steadystate_core.cpp

    r4778 r4880  
    4444                diagnostic_core(femmodel);
    4545
    46                 if(verbose)_printf_("%s\n","checking velocity, temperature and pressure convergence");
    47                 if (step>1) if(steadystateconvergence(femmodel)) break;
     46                if (step>1){
     47                        if(verbose)_printf_("%s\n","checking velocity, temperature and pressure convergence");
     48                        if(steadystateconvergence(femmodel)) break;
     49                }
    4850               
    4951                if(verbose)_printf_("%s\n","saving velocity, temperature and pressure to check for convergence at next step");
Note: See TracChangeset for help on using the changeset viewer.