Changeset 11703


Ignore:
Timestamp:
03/14/12 09:08:48 (13 years ago)
Author:
Mathieu Morlighem
Message:

updated controltao with new Vector/Matrix interface

File:
1 edited

Legend:

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

    r11513 r11703  
    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
     
    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*/
     
    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;
     
    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++){
     
    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*/
     
    107107        int      *cost_functions = NULL;
    108108        double   *cost_functionsd= NULL;
    109         Vec       gradient       = NULL;
     109        Vector   *gradient       = NULL;
     110        Vector   *X              = NULL;
     111
     112        /*Convert input to Vec*/
     113        X=new Vector(Xpetsc);
    110114
    111115        /*Set new variable*/
     
    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
Note: See TracChangeset for help on using the changeset viewer.