Changeset 4778
- Timestamp:
- 07/23/10 14:47:26 (15 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/modules/InputConvergencex/InputConvergencex.cpp
r4726 r4778 8 8 #include "../../EnumDefinitions/EnumDefinitions.h" 9 9 10 intInputConvergencex(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int* enums, int num_enums, int* criterionenums, double* criterionvalues,int num_criterionenums){10 bool 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){ 11 11 12 12 /*intermediary:*/ 13 int i;14 int converged = 1;15 int node_converged=1;16 double *eps = NULL;17 13 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; 21 21 22 22 /*retrieve parameters: */ -
issm/trunk/src/c/modules/InputConvergencex/InputConvergencex.h
r4236 r4778 8 8 9 9 /* local prototypes: */ 10 intInputConvergencex(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int* enums, int num_enums, int* criterionenums, double* criterionvalues,int num_criterionenums);10 bool 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); 11 11 12 12 #endif /* _INPUTCONVERGENCEX_H */ -
issm/trunk/src/c/objects/Elements/Beam.cpp
r4675 r4778 405 405 /*}}}*/ 406 406 /*FUNCTION Beam::InputConvergence{{{1*/ 407 void Beam::InputConvergence( int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){407 void Beam::InputConvergence(bool* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){ 408 408 409 409 int i; 410 410 Input** new_inputs=NULL; 411 411 Input** old_inputs=NULL; 412 int converged=1;412 bool converged=true; 413 413 414 414 new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs … … 425 425 for(i=0;i<num_criterionenums;i++){ 426 426 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; 428 428 } 429 429 -
issm/trunk/src/c/objects/Elements/Beam.h
r4702 r4778 84 84 void InputAXPY(int YEnum, double scalar, int XEnum); 85 85 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); 87 87 void InputDepthAverageAtBase(int enum_type,int average_enum_type){ISSMERROR("not implemented yet");} 88 88 void InputDuplicate(int original_enum,int new_enum); -
issm/trunk/src/c/objects/Elements/Element.h
r4702 r4778 72 72 virtual void InputAXPY(int YEnum, double scalar, int XEnum)=0; 73 73 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; 75 75 76 76 /*Implementation: */ -
issm/trunk/src/c/objects/Elements/Penta.cpp
r4774 r4778 1074 1074 /*}}}*/ 1075 1075 /*FUNCTION Penta::InputConvergence{{{1*/ 1076 void Penta::InputConvergence( int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){1076 void Penta::InputConvergence(bool* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){ 1077 1077 1078 1078 int i; 1079 1079 Input** new_inputs=NULL; 1080 1080 Input** old_inputs=NULL; 1081 int converged=1;1081 bool converged=true; 1082 1082 1083 1083 new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs … … 1094 1094 for(i=0;i<num_criterionenums;i++){ 1095 1095 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; 1097 1097 } 1098 1098 -
issm/trunk/src/c/objects/Elements/Penta.h
r4765 r4778 87 87 void InputAXPY(int YEnum, double scalar, int XEnum); 88 88 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); 90 90 void InputDepthAverageAtBase(int enum_type,int average_enum_type); 91 91 void InputDuplicate(int original_enum,int new_enum); -
issm/trunk/src/c/objects/Elements/Sing.cpp
r4575 r4778 374 374 /*}}}*/ 375 375 /*FUNCTION Sing::InputConvergence{{{1*/ 376 void Sing::InputConvergence( int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){376 void Sing::InputConvergence(bool* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){ 377 377 378 378 int i; 379 379 Input** new_inputs=NULL; 380 380 Input** old_inputs=NULL; 381 int converged=1;381 bool converged=true; 382 382 383 383 new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs … … 394 394 for(i=0;i<num_criterionenums;i++){ 395 395 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; 397 397 } 398 398 -
issm/trunk/src/c/objects/Elements/Sing.h
r4702 r4778 84 84 void InputAXPY(int YEnum, double scalar, int XEnum); 85 85 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); 87 87 void InputDepthAverageAtBase(int enum_type,int average_enum_type){ISSMERROR("not implemented yet");} 88 88 void InputDuplicate(int original_enum,int new_enum); -
issm/trunk/src/c/objects/Elements/Tria.cpp
r4770 r4778 1453 1453 /*}}}*/ 1454 1454 /*FUNCTION Tria::InputConvergence{{{1*/ 1455 void Tria::InputConvergence( int* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){1455 void Tria::InputConvergence(bool* pconverged,double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){ 1456 1456 1457 1457 int i; 1458 1458 Input** new_inputs=NULL; 1459 1459 Input** old_inputs=NULL; 1460 int converged=1;1460 bool converged=true; 1461 1461 1462 1462 new_inputs=(Input**)xmalloc(num_enums/2*sizeof(Input*)); //half the enums are for the new inputs … … 1473 1473 for(i=0;i<num_criterionenums;i++){ 1474 1474 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; 1476 1476 } 1477 1477 -
issm/trunk/src/c/objects/Elements/Tria.h
r4770 r4778 84 84 void InputAXPY(int YEnum, double scalar, int XEnum); 85 85 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); 87 87 void InputDepthAverageAtBase(int enum_type,int average_enum_type); 88 88 void InputDuplicate(int original_enum,int new_enum); -
issm/trunk/src/c/solutions/controlconvergence.cpp
r4236 r4778 18 18 19 19 20 intcontrolconvergence(double* J, double* fit, double eps_cm, int n){20 bool controlconvergence(double* J, double* fit, double eps_cm, int n){ 21 21 22 22 int i; 23 int converged=0;23 bool converged=false; 24 24 25 25 /*Has convergence been reached?*/ … … 33 33 if ((J[i]-J[n])/J[n] <= eps_cm){ 34 34 //convergence if convergence criteria fullfilled 35 converged= 1;35 converged=true; 36 36 _printf_("%s%g%s%g\n"," Convergence criterion: dJ/J = ",(J[i]-J[n])/J[n],"<",eps_cm); 37 37 } … … 45 45 } 46 46 47 48 47 return converged; 49 48 } -
issm/trunk/src/c/solutions/solutions.h
r4765 r4778 32 32 //convergence: 33 33 void convergence(int* pconverged, Mat K_ff,Vec p_f,Vec u_f,Vec u_f_old,Parameters* parameters); 34 intcontrolconvergence(double* J, double* fit, double eps_cm, int n);35 intsteadystateconvergence(FemModel* femmodel);34 bool controlconvergence(double* J, double* fit, double eps_cm, int n); 35 bool steadystateconvergence(FemModel* femmodel); 36 36 37 37 //optimization -
issm/trunk/src/c/solutions/steadystate_core.cpp
r4738 r4778 45 45 46 46 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; 48 48 49 49 if(verbose)_printf_("%s\n","saving velocity, temperature and pressure to check for convergence at next step"); … … 57 57 step++; 58 58 } 59 60 cleanup_and_return:61 59 62 60 if(verbose)_printf_("saving results:\n"); -
issm/trunk/src/c/solutions/steadystateconvergence.cpp
r4540 r4778 17 17 #include "./solutions.h" 18 18 19 intsteadystateconvergence(FemModel* femmodel){19 bool steadystateconvergence(FemModel* femmodel){ 20 20 21 21 /*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; 25 25 26 26 /*intermediary: */ … … 37 37 temperature_converged=InputConvergencex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,&temperatureenums[0],2,&convergencecriterion[0],&convergencecriterionvalue[0],1); 38 38 39 if(velocity_converged && temperature_converged) converged=1;39 if(velocity_converged && temperature_converged) converged=true; 40 40 41 41 /*return: */ -
issm/trunk/src/m/solutions/controlconvergence.m
r4537 r4778 5 5 % converged=controlconvergence(J,fit,eps_cm,n); 6 6 7 convergence= 0;7 convergence=false; 8 8 if ~isnan(eps_cm), 9 9 i=n-2; … … 14 14 if ((c(i).J-c(n).J)/c(n).J <= eps_cm), 15 15 %convergence if convergence criteria fullfilled 16 convergence= 1;16 convergence=true; 17 17 displaystring(verbose,'\n%s%g%s%g\n',' Convergence criterion: dJ/J = ',(c(i).J-c(n).J)/c(n).J,'<',eps_cm); 18 18 else -
issm/trunk/src/m/solutions/convergence.m
r4131 r4778 9 9 10 10 %initialization 11 converged= 0;11 converged=false; 12 12 displaystring(verbose,' '); 13 13 … … 26 26 if (res<=eps_res), 27 27 displaystring(verbose,'%-60s%g%s%g%s',' mechanical equilibrium convergence criterion',res*100,' < ',eps_res*100,' %'); 28 converged= 1;28 converged=true; 29 29 else 30 30 displaystring(verbose,'%-60s%g%s%g%s',' mechanical equilibrium convergence criterion',res*100,' > ',eps_res*100,' %'); 31 converged= 0;31 converged=false; 32 32 end 33 33 … … 50 50 else 51 51 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; 53 53 end 54 54 else 55 converged= 0;55 converged=false; 56 56 end 57 57 else … … 79 79 else 80 80 displaystring(verbose,'%-60s%g%s%g%s',' absolute convergence criterion: max(du)',nduinf,' > ',eps_abs,' m/yr'); 81 converged= 0;81 converged=false; 82 82 end 83 83 else -
issm/trunk/src/m/solutions/steadystate_core.m
r4737 r4778 16 16 while true, 17 17 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); 19 19 femmodel=thermal_core(femmodel); 20 20 … … 30 30 if step>1, 31 31 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 36 33 end 37 34 -
issm/trunk/src/m/solutions/steadystateconvergence.m
r4516 r4778 5 5 % steadystateconvergence(femmodel) 6 6 7 converged= 0;8 velocity_convergence= 0;9 temperature_convergence= 0;7 converged=false; 8 velocity_convergence=false; 9 temperature_convergence=false; 10 10 11 11 %Retrieve parameters … … 20 20 21 21 if (velocity_convergence & temperature_convergence), 22 converged= 1;22 converged=true; 23 23 end -
issm/trunk/src/mex/InputConvergence/InputConvergence.cpp
r4573 r4778 27 27 28 28 /* output datasets: */ 29 intconverged;29 bool converged; 30 30 31 31 /*Boot module: */
Note:
See TracChangeset
for help on using the changeset viewer.