Changeset 11275


Ignore:
Timestamp:
01/31/12 16:58:36 (13 years ago)
Author:
Mathieu Morlighem
Message:

TAO is now optional depending on a model flag (md.inversion.tao), to avoid having to recompile all the time

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h

    r11229 r11275  
    7171        InversionGradientScalingEnum,
    7272        InversionIscontrolEnum,
     73        InversionTaoEnum,
    7374        InversionMaxParametersEnum,
    7475        InversionMaxiterPerStepEnum,
  • issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp

    r11229 r11275  
    7575                case InversionGradientScalingEnum : return "InversionGradientScaling";
    7676                case InversionIscontrolEnum : return "InversionIscontrol";
     77                case InversionTaoEnum : return "InversionTao";
    7778                case InversionMaxParametersEnum : return "InversionMaxParameters";
    7879                case InversionMaxiterPerStepEnum : return "InversionMaxiterPerStep";
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r11192 r11275  
    8484        parameters->AddObject(iomodel->CopyConstantObject(QmuIsdakotaEnum));
    8585        parameters->AddObject(iomodel->CopyConstantObject(InversionIscontrolEnum));
     86        parameters->AddObject(iomodel->CopyConstantObject(InversionTaoEnum));
    8687
    8788        /*some parameters that did not come with the iomodel: */
  • issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp

    r11229 r11275  
    7373        else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
    7474        else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
     75        else if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
    7576        else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
    7677        else if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
  • issm/trunk-jpl/src/c/solutions/controltao_core.cpp

    r11271 r11275  
    1717
    1818/*Local prototype*/
     19int FormFunction(TaoSolver tao,Vec,double *,void*);
    1920int FormFunctionGradient(TaoSolver tao,Vec,double *,Vec,void*);
    2021typedef struct {
     
    3940
    4041        /*Line search options*/
    41         info = PetscOptionsSetValue("-tao_ls_stepmax","10e11"); if(info) _error_("STOP"); //does not work
    42         info = PetscOptionsSetValue("-tao_ls_stepmin","10e5"); if(info) _error_("STOP");    //does not work
    43         info = PetscOptionsSetValue("-tao_ls_maxfev","8"); if(info) _error_("STOP");
     42        //info = PetscOptionsSetValue("-tao_ls_stepmax","10e11"); if(info) _error_("STOP"); //does not work
     43        //info = PetscOptionsSetValue("-tao_ls_stepmin","10e5"); if(info) _error_("STOP");    //does not work
     44        info = PetscOptionsSetValue("-tao_ls_maxfev","3"); if(info) _error_("STOP");
    4445        /*TAO options: http://www.mcs.anl.gov/research/projects/tao/docs/manualpages/solver/TaoSetFromOptions.html*/
    4546        info = PetscOptionsSetValue("-tao_monitor",""); if(info) _error_("STOP");
    4647        info = PetscOptionsSetValue("-tao_max_its","10"); if(info) _error_("STOP");
    47         info = PetscOptionsSetValue("-tao_max_funcs","40"); if(info) _error_("STOP");
    48 
    49 
     48        info = PetscOptionsSetValue("-tao_max_funcs","30"); if(info) _error_("STOP");
    5049
    5150        /*Additional options*/
     
    5857        GetVectorFromInputsx(&initial_solution,femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,MaterialsRheologyBbarEnum,VertexEnum);
    5958        info = TaoCreate(PETSC_COMM_WORLD,&tao); if(info) _error_("STOP");
    60         info = TaoSetType(tao,"tao_blmvm"); if(info) _error_("STOP");
     59        //info = TaoSetType(tao,"tao_blmvm"); if(info) _error_("STOP");
     60        info = TaoSetType(tao,"tao_cg"); if(info) _error_("STOP");
    6161        info = TaoSetInitialVector(tao,initial_solution);  if(info) _error_("STOP");
     62        info = TaoSetObjectiveRoutine(tao,FormFunction,(void*)&user);  if(info) _error_("STOP");
    6263        info = TaoSetObjectiveAndGradientRoutine(tao,FormFunctionGradient,(void*)&user);  if(info) _error_("STOP");
    6364        info = TaoSetFromOptions(tao);  if(info) _error_("STOP");
    6465        /* http://www.mcs.anl.gov/research/projects/tao/docs/manpages/taosolver/TaoSetTolerances.html*/
    6566        /*                          fatol, frtol, gatol, grtol, gttol*/
    66         info = TaoSetTolerances(tao,10e-18,10e-18,10e-18,10e-18,10e-18);
    67         info = TaoSolve(tao); //if(info) _error_("STOP");
     67        info = TaoSetTolerances(tao,10e-18,10e-18,10e-18,10e-18,10e-18); if(info) _error_("STOP");
     68        info = TaoSolve(tao); if(info) _error_("STOP");
    6869
    6970        /*Get solution status*/
     
    9697}
    9798
     99int FormFunction(TaoSolver tao, Vec X, double *fcn,void *userCtx){
     100        AppCtx   *user     = (AppCtx*)userCtx;
     101        FemModel *femmodel = user->femmodel;
     102
     103        int costfunction=SurfaceAbsVelMisfitEnum;
     104        femmodel->parameters->SetParam(&costfunction,1,1,StepResponsesEnum);
     105        InputUpdateFromVectorx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,X,MaterialsRheologyBbarEnum,VertexEnum);
     106        diagnostic_core(user->femmodel);
     107        CostFunctionx(fcn, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
     108        printf("f(x) = %g\n",*fcn);
     109        return 0;
     110}
    98111int FormFunctionGradient(TaoSolver tao, Vec X, double *fcn,Vec G,void *userCtx){
    99112
     
    102115        FemModel *femmodel = user->femmodel;
    103116        Vec       gradient = NULL;
    104 
    105         /*Temp*/
    106 //      double*   Xserial=NULL;
    107 //      VecToMPISerial(&Xserial,X);
    108 //      printf("X= [%20.20g %20.20g %20.20g]\n",Xserial[0],Xserial[1],Xserial[2]);
    109         /*End Temp*/
    110 
    111117
    112118        int costfunction=SurfaceAbsVelMisfitEnum;
     
    120126        CostFunctionx(fcn, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
    121127
    122         //printf("X\n");
    123         //VecView(X,PETSC_VIEWER_STDOUT_SELF);
    124 
    125         //printf("Gradient\n");
    126         //VecView(G,PETSC_VIEWER_STDOUT_SELF);
    127 
    128         printf("f(x) = %g\n",*fcn);
     128        printf("f2(x) = %g\n",*fcn);
    129129        return 0;
    130130}
  • issm/trunk-jpl/src/c/solutions/issm.cpp

    r11267 r11275  
    1616        FILE *petscoptionsfid  = NULL;
    1717        bool  waitonlock       = false;
    18         bool  dakota_analysis;
    19         bool  control_analysis;
     18        bool  dakota_analysis,control_analysis,tao_analysis;
    2019
    2120        /*FemModel: */
     
    8180        femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
    8281        femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
     82        femmodel->parameters->FindParam(&tao_analysis,InversionTaoEnum);
    8383        MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
    84 
    85         /*are we running the solution sequence, or a qmu wrapper around it? : */
    8684
    8785        _printf_(true,"call computational core:\n");
     
    9694        else if(control_analysis){
    9795                #ifdef _HAVE_CONTROL_
    98                 #ifdef _HAVE_TAO_
    99                 controltao_core(femmodel);
    100                 #else
    101                 control_core(femmodel);
    102                 #endif
     96                if(tao_analysis)
     97                 controltao_core(femmodel);
     98                else
     99                 control_core(femmodel);
    103100                #else
    104101                _error_("ISSM was not compiled with control support, cannot carry out dakota analysis!");
Note: See TracChangeset for help on using the changeset viewer.