Changeset 12910


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

BUG: fixed tao for new Vector and Matrices objects

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/matrix/Vector.cpp

    r12899 r12910  
    6161}
    6262/*}}}*/
     63#ifdef _HAVE_PETSC_
     64/*FUNCTION Vector::Vector(Vec petsc_vector){{{*/
     65Vector::Vector(Vec petsc_vector){
     66
     67        this->type=PetscVecType;
     68        this->svector=NULL;
     69        this->pvector=new PetscVec(petsc_vector);
     70
     71}
     72/*}}}*/
     73#endif
    6374/*FUNCTION Vector::Vector(IssmDouble* serial_vec,int M,int type){{{*/
    6475Vector::Vector(IssmDouble* serial_vec,int M,int in_type){
  • issm/trunk-jpl/src/c/classes/matrix/Vector.h

    r12850 r12910  
    3636                Vector(int M,bool fromlocalsize=false,int type=PetscVecType);
    3737                Vector(IssmDouble* serial_vec,int pM,int type=PetscVecType);
     38                #ifdef _HAVE_PETSC_
     39                Vector(Vec petsc_vector);
     40                #endif
    3841                ~Vector();
    3942                /*}}}*/
  • issm/trunk-jpl/src/c/solutions/controltao_core.cpp

    r12832 r12910  
    2121typedef struct {
    2222        FemModel* femmodel;
     23        double*   J;
    2324} AppCtx;
    2425
     
    6970        GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
    7071        GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
    71         TaoSetInitialVector(tao,X->vector);
    72         TaoSetVariableBounds(tao,XL->vector,XU->vector);
     72        TaoSetInitialVector(tao,X->pvector->vector);
     73        TaoSetVariableBounds(tao,XL->pvector->vector,XU->pvector->vector);
    7374        xdelete(&XL);
    7475        xdelete(&XU);
    7576
     77        user.J=(double*)xcalloc((maxiter+5),sizeof(double));
    7678        user.femmodel=femmodel;
    7779        TaoSetObjectiveAndGradientRoutine(tao,FormFunctionGradient,(void*)&user);
     
    8183        TaoSolve(tao);
    8284        TaoView(tao,PETSC_VIEWER_STDOUT_WORLD);
    83         TaoGetSolutionVector(tao,&X->vector);
     85        TaoGetSolutionVector(tao,&X->pvector->vector);
    8486        SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X);
    8587        for(int i=0;i<num_controls;i++){
    8688                InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_list[i]);
    8789        }
     90        femmodel->results->AddObject(new DoubleVecExternalResult(femmodel->results->Size()+1,JEnum,user.J,maxiter+3,1,0));
    8891
    8992        /*Finalize*/
     
    142145        /*Compute gradient*/
    143146        Gradjx(&gradient,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
    144         VecCopy(gradient->vector,G); xdelete(&gradient);
     147        VecCopy(gradient->pvector->vector,G); xdelete(&gradient);
    145148        VecScale(G,-1.);
    146149
     
    166169        if(its==0) _pprintLine_("-----------------------------------+-----------------------");
    167170        _pprintString_(setw(4)<<its<<"   "<<setw(12)<<setprecision(7)<<f<<"  "<<setw(12)<<setprecision(7)<<gnorm<<"  | ");
     171        user->J[its]=f;
    168172
    169173        /*Retrieve objective functions independently*/
Note: See TracChangeset for help on using the changeset viewer.