Changeset 10197


Ignore:
Timestamp:
10/13/11 09:12:04 (13 years ago)
Author:
Mathieu Morlighem
Message:

Changed control method convergence behavior

Location:
issm/trunk/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/shared/Matlab/ModuleBoot.cpp

    r10188 r10197  
    2828        }
    2929        else if (0){
     30                PetscErrorCode   ierr;
    3031                PetscBool flg;
    3132                ierr=PetscInitialized(&flg);CHKERRQ(ierr);
  • issm/trunk/src/c/solutions/control_core.cpp

    r9761 r10197  
    2020        int     num_controls,num_responses;
    2121        int     nsteps;
    22         double  eps_cm;
     22        double  tol_cm;
    2323        bool    cm_gradient;
    2424        int     dim;
     
    5353        femmodel->parameters->FindParam(&maxiter,NULL,InversionMaxiterPerStepEnum);
    5454        femmodel->parameters->FindParam(&cm_jump,NULL,InversionStepThresholdEnum);
    55         femmodel->parameters->FindParam(&eps_cm,InversionCostFunctionThresholdEnum);
     55        femmodel->parameters->FindParam(&tol_cm,InversionCostFunctionThresholdEnum);
    5656        femmodel->parameters->FindParam(&cm_gradient,InversionGradientOnlyEnum);
    5757        femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
     
    105105                InputControlUpdatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,search_scalar,true);
    106106               
    107                 if(controlconvergence(J,responses,eps_cm,n)) break;
     107                if(controlconvergence(J[n],tol_cm)) break;
    108108
    109109                /*Temporary saving every 5 control steps: */
  • issm/trunk/src/c/solutions/controlconvergence.cpp

    r9761 r10197  
    1717#include "./solutions.h"
    1818
    19 bool controlconvergence(double* J,double* responses, double eps_cm, int n){
     19bool controlconvergence(double J, double tol_cm){
    2020
    2121        int i;
     
    2323
    2424        /*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);
    4428        }
    4529
  • issm/trunk/src/c/solutions/solutions.h

    r9571 r10197  
    3636//convergence:
    3737void 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);
     38bool controlconvergence(double J,double tol_cm);
    3939bool steadystateconvergence(FemModel* femmodel);
    4040
  • issm/trunk/src/m/solutions/control_core.m

    r9725 r10197  
    1515        maxiter=femmodel.parameters.InversionMaxiterPerStep;
    1616        step_threshold=femmodel.parameters.InversionStepThreshold;
    17         eps_cm=femmodel.parameters.InversionCostFunctionThreshold;
     17        tol_cm=femmodel.parameters.InversionCostFunctionThreshold;
    1818        gradient_only=femmodel.parameters.InversionGradientOnly;
    1919        dim=femmodel.parameters.MeshDimension;
     
    6666
    6767                %Has convergence been reached?
    68                 converged=controlconvergence(J,responses,eps_cm,n);
     68                converged=controlconvergence(J(n),tol_cm);
    6969                if converged,
    7070                        break;
  • issm/trunk/src/m/solutions/controlconvergence.m

    r6323 r10197  
    1 function convergence=controlconvergence(J,responses,eps_cm,n)
     1function convergence=controlconvergence(J,tol_cm)
    22%CONTROLCONVERGENCE - determine the convergence of control_core solution
    33%
    44%   Usage:
    5 %       converged=controlconvergence(J,responses,eps_cm,n);
     5%       converged=controlconvergence(J,tol_cm)
    66
    77        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);
    2511        end
    26 
    27 end %end function
Note: See TracChangeset for help on using the changeset viewer.