Changeset 11297


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

Some clean-up

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/solutions/controltao_core.cpp

    r11289 r11297  
    2525
    2626        /*TAO*/
    27         int       i,n,info;
     27        int       ierr,numberofvertices;
     28        AppCtx    user;
    2829        TaoSolver tao;
    29         Vec       initial_solution = NULL;
    30         AppCtx    user;
     30        Vec       X  = NULL;
     31        Vec       XL = NULL;
     32        Vec       XU = NULL;
    3133
    3234        /*Initialize TAO*/
    33         int argc; char **args; PetscGetArgs(&argc,&args);
    34         int ierr=TaoInitialize(&argc,&args,(char*)0,"");
     35        int argc; char **args=NULL;
     36        PetscGetArgs(&argc,&args);
     37        ierr = TaoInitialize(&argc,&args,(char*)0,"");
    3538        if(ierr) _error_("Could not initialize Tao");
    3639
    37         info = PetscOptionsSetValue("-tao_monitor",""); if(info) _error_("STOP");
     40        /*Initialize TAO*/
     41        TaoCreate(PETSC_COMM_WORLD,&tao);
     42        PetscOptionsSetValue("-tao_monitor","");
     43        TaoSetFromOptions(tao);
     44        TaoSetType(tao,"tao_blmvm");
    3845
    39         /*Initialize argument*/
    40         user.femmodel=femmodel;
     46        /*Prepare all TAO parameters*/
     47        TaoSetMaximumFunctionEvaluations(tao,50);
     48        TaoSetMaximumIterations(tao,10);
     49        TaoSetTolerances(tao,10e-28,0.0000,0.0000,0.0000,10e-28);
    4150
    42         /*Set up and solve TAO*/
    43         info = TaoCreate(PETSC_COMM_WORLD,&tao); if(info) _error_("STOP");
    44         info = TaoSetType(tao,"tao_blmvm"); if(info) _error_("STOP");
    45         //info = TaoSetType(tao,"tao_cg"); if(info) _error_("STOP");
    46         TaoSetMaximumFunctionEvaluations(tao,10);
    47         TaoSetMaximumIterations(tao,3);
    48 
    49         int size=femmodel->vertices->NumberOfVertices();
    50         Vec XL=NULL;
    51         Vec XU=NULL;
    52         VecCreate(PETSC_COMM_WORLD,&XL);                               VecCreate(PETSC_COMM_WORLD,&XU);
    53         VecSetSizes(XL,PetscDetermineLocalSize(size),PETSC_DECIDE);    VecSetSizes(XU,PetscDetermineLocalSize(size),PETSC_DECIDE);
    54         VecSetFromOptions(XL);                                         VecSetFromOptions(XU);
    55         VecSet(XL,1);                                                  VecSet(XU,200.);
     51        numberofvertices = femmodel->vertices->NumberOfVertices();
     52        XL=NewVec(numberofvertices); VecSet(XL,1.);
     53        XU=NewVec(numberofvertices); VecSet(XU,200.);
    5654        TaoSetVariableBounds(tao,XL,XU); VecFree(&XL); VecFree(&XU);
    5755
    58         GetVectorFromInputsx(&initial_solution,femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,FrictionCoefficientEnum,VertexEnum);
    59         info = TaoSetInitialVector(tao,initial_solution);  if(info) _error_("STOP");
    60         VecFree(&initial_solution);
     56        GetVectorFromInputsx(&X,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,FrictionCoefficientEnum,VertexEnum);
     57        TaoSetInitialVector(tao,X);
    6158
    62         info = TaoSetObjectiveAndGradientRoutine(tao,FormFunctionGradient,(void*)&user);  if(info) _error_("STOP");
    63         info = TaoSetFromOptions(tao);  if(info) _error_("STOP");
    64         /* http://www.mcs.anl.gov/research/projects/tao/docs/manpages/taosolver/TaoSetTolerances.html*/
    65         /*                          fatol ,frtol ,gatol ,grtol ,gttol*/
    66         info = TaoSetTolerances(tao,10e-28,0.0000,0.0000,0.0000,10e-28); if(info) _error_("STOP");
    67         info = TaoSolve(tao); if(info) _error_("STOP");
     59        user.femmodel=femmodel;
     60        TaoSetObjectiveAndGradientRoutine(tao,FormFunctionGradient,(void*)&user);
    6861
    69         /*Get solution status*/
    70         info = TaoView(tao,PETSC_VIEWER_STDOUT_WORLD);  if(info) _error_("STOP");
    71 
    72         /*Clean up*/
    73         info = TaoDestroy(&tao);  if(info) _error_("STOP");
     62        /*Solver optimization problem*/
     63        TaoSolve(tao);
     64        TaoView(tao,PETSC_VIEWER_STDOUT_WORLD);
     65        TaoGetSolutionVector(tao,&X);
     66        InputUpdateFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X,FrictionCoefficientEnum,VertexEnum);
    7467        InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,FrictionCoefficientEnum);
    7568
    76         /* Finalize TAO */
     69        /*Clean up and return*/
     70        VecFree(&X);
     71        TaoDestroy(&tao);
    7772        TaoFinalize();
    7873}
     
    8681        int costfunction=SurfaceAbsVelMisfitEnum;
    8782        femmodel->parameters->SetParam(&costfunction,1,1,StepResponsesEnum);
    88         //InputUpdateFromVectorx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,X,MaterialsRheologyBbarEnum,VertexEnum);
     83        //InputUpdateFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X,MaterialsRheologyBbarEnum,VertexEnum);
    8984        InputUpdateFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X,FrictionCoefficientEnum,VertexEnum);
    9085        adjointdiagnostic_core(user->femmodel);
    91         //Gradjx(&gradient, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters, MaterialsRheologyBbarEnum);
    92         Gradjx(&gradient, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters,FrictionCoefficientEnum);
     86        //Gradjx(&gradient,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,MaterialsRheologyBbarEnum);
     87        Gradjx(&gradient,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,FrictionCoefficientEnum);
    9388        VecScale(gradient,-1.);
    9489        VecCopy(gradient,G);
    9590        VecFree(&gradient);
    96         CostFunctionx(fcn, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
    97         _printf_(true,"f(x)=%g\n",*fcn);
     91        CostFunctionx(fcn,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
    9892        return 0;
    9993}
Note: See TracChangeset for help on using the changeset viewer.