Changeset 11267


Ignore:
Timestamp:
01/31/12 10:34:43 (13 years ago)
Author:
Mathieu Morlighem
Message:

new TAO interface

Location:
issm/trunk-jpl/src/c/solutions
Files:
2 edited

Legend:

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

    r10052 r11267  
    1313#include "../solvers/solvers.h"
    1414
    15 
    16 #if defined (_HAVE_TAO_) && (_PETSC_MAJOR_ < 3 || (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 2))
    17 #include "tao.h"
     15#if defined (_HAVE_TAO_) && (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ == 2)
     16#include <tao.h>
    1817
    1918/*Local prototype*/
    20 int FormFunctionGradient(TAO_APPLICATION,Vec,double *,Vec,void*);
     19int FormFunctionGradient(TaoSolver tao,Vec,double *,Vec,void*);
    2120typedef struct {
    2221        FemModel* femmodel;
     
    2625
    2726        /*TAO*/
    28         int                i,n,info;
    29         //TaoMethod          method = "tao_blmvm";
    30         //TaoMethod        method = "tao_lmvm";
    31         TaoMethod        method = "tao_cg";
    32         TaoTerminateReason reason;
    33         TAO_SOLVER         tao;
    34         TAO_APPLICATION    controlapp;
    35         Vec                initial_solution = NULL;
    36         AppCtx             user;
    37         PetscInt           iter;
    38         double             ff,gnorm;
     27        int                        i,n,info;
     28        TaoSolverTerminationReason reason;
     29        TaoSolver                  tao;
     30        Vec                        initial_solution = NULL;
     31        AppCtx                     user;
     32        PetscInt                   iter;
     33        double                     ff                 ,gnorm;
    3934
    4035        /*Initialize TAO*/
     
    6257        /*Set up and solve TAO*/
    6358        GetVectorFromInputsx(&initial_solution,femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,MaterialsRheologyBbarEnum,VertexEnum);
    64         info = TaoCreate(PETSC_COMM_WORLD,method,&tao); if(info) _error_("STOP");
    65         info = TaoApplicationCreate(PETSC_COMM_WORLD,&controlapp); if(info) _error_("STOP");
    66         info = TaoAppSetInitialSolutionVec(controlapp,initial_solution);  if(info) _error_("STOP");
    67         info = TaoAppSetObjectiveAndGradientRoutine(controlapp,FormFunctionGradient,(void*)&user);  if(info) _error_("STOP");
    68         info = TaoSetOptions(controlapp,tao);  if(info) _error_("STOP");
    69         info = TaoSolveApplication(controlapp,tao); //if(info) _error_("STOP");
     59        info = TaoCreate(PETSC_COMM_WORLD,&tao); if(info) _error_("STOP");
     60        info = TaoSetType(tao,"tao_cg"); if(info) _error_("STOP");
     61        info = TaoSetInitialVector(tao,initial_solution);  if(info) _error_("STOP");
     62        info = TaoSetObjectiveAndGradientRoutine(tao,FormFunctionGradient,(void*)&user);  if(info) _error_("STOP");
     63        info = TaoSetFromOptions(tao);  if(info) _error_("STOP");
     64        info = TaoSolve(tao); //if(info) _error_("STOP");
    7065
    7166        /*Get solution status*/
    7267        info = TaoGetSolutionStatus(tao,&iter,&ff,&gnorm,0,0,&reason); //CHKERRQ(info);
    73         switch(reason){ /*http://www.mcs.anl.gov/research/projects/tao/docs/manualpages/solver/TaoGetTerminationReason.html*/
    74                 case TAO_CONVERGED_ATOL:       _printf_(true,"TAO_CONVERGED_ATOL (res <= atol)\n"); break;
    75                 case TAO_CONVERGED_RTOL:       _printf_(true,"TAO_CONVERGED_RTOL (res/res0 <= rtol)\n"); break;
    76                 case TAO_CONVERGED_TRTOL:      _printf_(true,"TAO_CONVERGED_TRTOL (xdiff <= trtol) \n"); break;
    77                 case TAO_CONVERGED_MINF:       _printf_(true,"TAO_CONVERGED_MINF  (f <= fmin)\n"); break;
    78                 case TAO_CONVERGED_USER:       _printf_(true,"TAO_CONVERGED_USER (user defined)\n"); break;
     68        switch(reason){
     69                /*http://www.mcs.anl.gov/research/projects/tao/docs/manpages/taosolver/TaoGetTerminationReason.html*/
    7970                case TAO_DIVERGED_MAXITS:      _printf_(true,"TAO_DIVERGED_MAXITS (its>maxits)\n"); break;
    8071                case TAO_DIVERGED_NAN:         _printf_(true,"TAO_DIVERGED_NAN (Numerical problems)\n"); break;
     
    9283         _printf_(true,"TAO found a solution");
    9384        }
    94         info = TaoView(tao);  if(info) _error_("STOP");
     85        info = TaoView(tao,PETSC_VIEWER_STDOUT_SELF);  if(info) _error_("STOP");
    9586
    9687        /*Clean up*/
    97         info = TaoDestroy(tao);  if(info) _error_("STOP");
    98         info = TaoAppDestroy(controlapp);  if(info) _error_("STOP");
     88        info = TaoDestroy(&tao);  if(info) _error_("STOP");
    9989        VecFree(&initial_solution);
    10090
     
    10393}
    10494
    105 int FormFunctionGradient(TAO_APPLICATION taoapp, Vec X, double *fcn,Vec G,void *userCtx){
     95int FormFunctionGradient(TaoSolver tao, Vec X, double *fcn,Vec G,void *userCtx){
    10696
    10797        /*Retreive arguments*/
  • issm/trunk-jpl/src/c/solutions/issm.cpp

    r10569 r11267  
    9696        else if(control_analysis){
    9797                #ifdef _HAVE_CONTROL_
     98                #ifdef _HAVE_TAO_
     99                controltao_core(femmodel);
     100                #else
    98101                control_core(femmodel);
     102                #endif
    99103                #else
    100104                _error_("ISSM was not compiled with control support, cannot carry out dakota analysis!");
Note: See TracChangeset for help on using the changeset viewer.