Changeset 17911


Ignore:
Timestamp:
05/01/14 14:45:26 (11 years ago)
Author:
Mathieu Morlighem
Message:

NEW: Dxmin and Epsrel are now parameters

Location:
issm/trunk-jpl/src/c
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp

    r17907 r17911  
    3030        /*Intermediaries*/
    3131        long         omode;
    32         double       f;
     32        double       f,dxmin,epsrel;
    3333        int          nsteps,maxiter;
    3434        int          intn,num_controls,solution_type;
     
    4040        femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
    4141        femmodel->parameters->FindParam(&nsteps,InversionNstepsEnum);
     42        femmodel->parameters->FindParam(&dxmin,InversionDxminEnum);
     43        femmodel->parameters->FindParam(&epsrel,InversionEpsrelEnum);
    4244        femmodel->parameters->SetParam(false,SaveResultsEnum);
    4345        maxiter=nsteps*10;
     
    5860
    5961        /*Optimization criterions*/
    60         double    dxmin        = 1.e-1;    /*Resolution for the solution x*/
    61         double    epsrel       = 1.e-4;     /*Gradient stopping criterion in ]0 1[ -> |gk|/|g1| < epsrel*/
    6262        long      niter        = long(nsteps); /*Maximum number of iterations*/
    6363        long      nsim         = long(maxiter);/*Maximum number of function calls*/
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp

    r17895 r17911  
    3232                parameters->AddObject(iomodel->CopyConstantObject(InversionNstepsEnum));
    3333                parameters->AddObject(iomodel->CopyConstantObject(InversionIncompleteAdjointEnum));
    34                 if(inversiontype==0){
    35                         parameters->AddObject(iomodel->CopyConstantObject(InversionCostFunctionThresholdEnum));
    36                 }
    3734
    3835                /*What solution type?*/
     
    4744                iomodel->FetchData(&control_type,NULL,&num_control_type,InversionControlParametersEnum);
    4845                iomodel->FetchData(&cm_responses,NULL,&num_cm_responses,InversionCostFunctionsEnum);
    49                 if(inversiontype==0){
    50                         iomodel->FetchData(&cm_jump,&nsteps,NULL,InversionStepThresholdEnum);
    51                         iomodel->FetchData(&optscal,NULL,NULL,InversionGradientScalingEnum);
    52                         iomodel->FetchData(&maxiter,NULL,NULL,InversionMaxiterPerStepEnum);
    53                 }
     46                parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_type,num_control_type));
     47                parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,cm_responses,num_cm_responses));
    5448
    55                 if(inversiontype!=0){
    56                         parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_type,num_control_type));
    57                         parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,cm_responses,num_cm_responses));
    58                 }
    59                 else{
    60                         parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_type,num_control_type));
    61                         parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,cm_responses,num_cm_responses));
    62                         parameters->AddObject(new DoubleMatParam(InversionGradientScalingEnum,optscal,nsteps,num_control_type));
    63                         parameters->AddObject(new DoubleVecParam(InversionStepThresholdEnum,cm_jump,nsteps));
    64                         parameters->AddObject(new DoubleVecParam(InversionMaxiterPerStepEnum,maxiter,nsteps));
     49                /*Inversion type specifics*/
     50                switch(inversiontype){
     51                        case 0:/*Brent Search*/
     52                                parameters->AddObject(iomodel->CopyConstantObject(InversionCostFunctionThresholdEnum));
     53                                iomodel->FetchData(&cm_jump,&nsteps,NULL,InversionStepThresholdEnum);
     54                                iomodel->FetchData(&optscal,NULL,NULL,InversionGradientScalingEnum);
     55                                iomodel->FetchData(&maxiter,NULL,NULL,InversionMaxiterPerStepEnum);
     56                                parameters->AddObject(new DoubleMatParam(InversionGradientScalingEnum,optscal,nsteps,num_control_type));
     57                                parameters->AddObject(new DoubleVecParam(InversionStepThresholdEnum,cm_jump,nsteps));
     58                                parameters->AddObject(new DoubleVecParam(InversionMaxiterPerStepEnum,maxiter,nsteps));
     59                                break;
     60                        case 1:/*TAO*/
     61                                break;
     62                        case 2:/*M1QN3*/
     63                                parameters->AddObject(iomodel->CopyConstantObject(InversionDxminEnum));
     64                                parameters->AddObject(iomodel->CopyConstantObject(InversionEpsrelEnum));
     65                                break;
     66                        default:
     67                                _error_("not supported");
     68
    6569                }
    6670
Note: See TracChangeset for help on using the changeset viewer.