source: issm/oecreview/Archive/11700-11718/ISSM-11702-11703.diff@ 11991

Last change on this file since 11991 was 11991, checked in by Eric.Larour, 13 years ago

oecreview from 11518 to present

File size: 3.5 KB
  • proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/controltao_core.cpp

     
    1212#include "../include/include.h"
    1313#include "../solvers/solvers.h"
    1414
    15 #if defined (_HAVE_TAO_) && (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ == 2)
     15#if defined (_HAVE_TAO_) && defined (_HAVE_PETSC_) && (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ == 2)
    1616#include <tao.h>
    1717
    1818/*Local prototype*/
     
    3232        TaoSolver  tao;
    3333        double    *dummy          = NULL;
    3434        int       *control_list   = NULL;
    35         Vec        X              = NULL;
    36         Vec        XL             = NULL;
    37         Vec        XU             = NULL;
     35        Vector    *X              = NULL;
     36        Vector    *XL             = NULL;
     37        Vector    *XU             = NULL;
    3838
    3939        /*Initialize TAO*/
    4040        int argc; char **args=NULL;
     
    6767        GetVectorFromControlInputsx(&X, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
    6868        GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
    6969        GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
    70         TaoSetInitialVector(tao,X);
    71         TaoSetVariableBounds(tao,XL,XU);
    72         VecFree(&XL);
    73         VecFree(&XU);
     70        TaoSetInitialVector(tao,X->vector);
     71        TaoSetVariableBounds(tao,XL->vector,XU->vector);
     72        xdelete(&XL);
     73        xdelete(&XU);
    7474
    7575        user.femmodel=femmodel;
    7676        TaoSetObjectiveAndGradientRoutine(tao,FormFunctionGradient,(void*)&user);
     
    7979        _printf_(VerboseControl(),"%s\n","   Starting optimization");
    8080        TaoSolve(tao);
    8181        TaoView(tao,PETSC_VIEWER_STDOUT_WORLD);
    82         TaoGetSolutionVector(tao,&X);
     82        TaoGetSolutionVector(tao,&X->vector);
    8383        SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X);
    8484        for(int i=0;i<num_controls;i++){
    8585                InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_list[i]);
     
    9494
    9595        /*Clean up and return*/
    9696        xfree((void**)&control_list);
    97         VecFree(&X);
     97        xdelete(&X);
    9898        TaoDestroy(&tao);
    9999        TaoFinalize();
    100100}
    101 int FormFunctionGradient(TaoSolver tao, Vec X, double *fcn,Vec G,void *userCtx){
     101int FormFunctionGradient(TaoSolver tao, Vec Xpetsc, double *fcn,Vec G,void *userCtx){
    102102
    103103        /*Retreive arguments*/
    104104        int       solution_type,num_cost_functions;
     
    106106        FemModel *femmodel       = user->femmodel;
    107107        int      *cost_functions = NULL;
    108108        double   *cost_functionsd= NULL;
    109         Vec       gradient       = NULL;
     109        Vector   *gradient       = NULL;
     110        Vector   *X              = NULL;
    110111
     112        /*Convert input to Vec*/
     113        X=new Vector(Xpetsc);
     114
    111115        /*Set new variable*/
    112116        //VecView(X,PETSC_VIEWER_STDOUT_WORLD);
    113117        SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X);
     
    135139
    136140        /*Compute gradient*/
    137141        Gradjx(&gradient,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
    138         VecCopy(gradient,G); VecFree(&gradient);
     142        VecCopy(gradient->vector,G); xdelete(&gradient);
    139143        VecScale(G,-1.);
    140144
    141145        /*Clean-up and return*/
Note: See TracBrowser for help on using the repository browser.