Changeset 10197
- Timestamp:
- 10/13/11 09:12:04 (13 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/shared/Matlab/ModuleBoot.cpp
r10188 r10197 28 28 } 29 29 else if (0){ 30 PetscErrorCode ierr; 30 31 PetscBool flg; 31 32 ierr=PetscInitialized(&flg);CHKERRQ(ierr); -
issm/trunk/src/c/solutions/control_core.cpp
r9761 r10197 20 20 int num_controls,num_responses; 21 21 int nsteps; 22 double eps_cm;22 double tol_cm; 23 23 bool cm_gradient; 24 24 int dim; … … 53 53 femmodel->parameters->FindParam(&maxiter,NULL,InversionMaxiterPerStepEnum); 54 54 femmodel->parameters->FindParam(&cm_jump,NULL,InversionStepThresholdEnum); 55 femmodel->parameters->FindParam(& eps_cm,InversionCostFunctionThresholdEnum);55 femmodel->parameters->FindParam(&tol_cm,InversionCostFunctionThresholdEnum); 56 56 femmodel->parameters->FindParam(&cm_gradient,InversionGradientOnlyEnum); 57 57 femmodel->parameters->FindParam(&dim,MeshDimensionEnum); … … 105 105 InputControlUpdatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,search_scalar,true); 106 106 107 if(controlconvergence(J ,responses,eps_cm,n)) break;107 if(controlconvergence(J[n],tol_cm)) break; 108 108 109 109 /*Temporary saving every 5 control steps: */ -
issm/trunk/src/c/solutions/controlconvergence.cpp
r9761 r10197 17 17 #include "./solutions.h" 18 18 19 bool controlconvergence(double * J,double* responses, double eps_cm, int n){19 bool controlconvergence(double J, double tol_cm){ 20 20 21 21 int i; … … 23 23 24 24 /*Has convergence been reached?*/ 25 if (!isnan(eps_cm)){ 26 i=n-2; 27 28 //go through the previous misfits(starting from n-2) 29 while(i>=0){ 30 if (responses[i]==responses[n]){ 31 //convergence test only if we have the same misfits 32 if ((J[i]-J[n])/J[n] <= eps_cm){ 33 //convergence if convergence criteria fullfilled 34 converged=true; 35 _printf_(VerboseConvergence(),"%s%g%s%g\n"," Convergence criterion: dJ/J = ",(J[i]-J[n])/J[n],"<",eps_cm); 36 } 37 else{ 38 _printf_(VerboseConvergence(),"%s%g%s%g\n"," Convergence criterion: dJ/J = ",(J[i]-J[n])/J[n],">",eps_cm); 39 } 40 break; 41 } 42 i=i-1; 43 } 25 if (!isnan(tol_cm) && J<tol_cm){ 26 converged=true; 27 _printf_(VerboseConvergence()," Convergence criterion reached: J = %g < %g",J,tol_cm); 44 28 } 45 29 -
issm/trunk/src/c/solutions/solutions.h
r9571 r10197 36 36 //convergence: 37 37 void convergence(int* pconverged, Mat K_ff,Vec p_f,Vec u_f,Vec u_f_old,Parameters* parameters); 38 bool controlconvergence(double * J, double* response, double eps_cm, int n);38 bool controlconvergence(double J,double tol_cm); 39 39 bool steadystateconvergence(FemModel* femmodel); 40 40 -
issm/trunk/src/m/solutions/control_core.m
r9725 r10197 15 15 maxiter=femmodel.parameters.InversionMaxiterPerStep; 16 16 step_threshold=femmodel.parameters.InversionStepThreshold; 17 eps_cm=femmodel.parameters.InversionCostFunctionThreshold;17 tol_cm=femmodel.parameters.InversionCostFunctionThreshold; 18 18 gradient_only=femmodel.parameters.InversionGradientOnly; 19 19 dim=femmodel.parameters.MeshDimension; … … 66 66 67 67 %Has convergence been reached? 68 converged=controlconvergence(J ,responses,eps_cm,n);68 converged=controlconvergence(J(n),tol_cm); 69 69 if converged, 70 70 break; -
issm/trunk/src/m/solutions/controlconvergence.m
r6323 r10197 1 function convergence=controlconvergence(J, responses,eps_cm,n)1 function convergence=controlconvergence(J,tol_cm) 2 2 %CONTROLCONVERGENCE - determine the convergence of control_core solution 3 3 % 4 4 % Usage: 5 % converged=controlconvergence(J, responses,eps_cm,n);5 % converged=controlconvergence(J,tol_cm) 6 6 7 7 convergence=false; 8 if ~isnan(eps_cm), 9 i=n-2; 10 %go through the previous responsess(starting from n-2) 11 while (i>=1), 12 if (strcmp(responses(i),responses(n))), 13 %convergence test only if we have the same misfits 14 if ((J(i)-J(n))/J(n) <= eps_cm), 15 %convergence if convergence criteria fullfilled 16 convergence=true; 17 issmprintf(VerboseConvergence(),'\n%s%g%s%g\n',' Convergence criterion: dJ/J = ',(J(i)-J(n))/J(n),'<',eps_cm); 18 else 19 issmprintf(VerboseConvergence(),'\n%s%g%s%g\n',' Convergence criterion: dJ/J = ',(J(i)-J(n))/J(n),'>',eps_cm); 20 end 21 break; 22 end 23 i=i-1; 24 end 8 if ~isnan(tol_cm) & J<tol_cm, 9 convergence=true; 10 issmprintf(VerboseConvergence(),'\n Convergence criterion reached: %g < %g\n',J,tol_cm); 25 11 end 26 27 end %end function
Note:
See TracChangeset
for help on using the changeset viewer.