Changeset 11513


Ignore:
Timestamp:
02/23/12 14:29:41 (13 years ago)
Author:
Mathieu Morlighem
Message:

Fixed TAO Monitor for parallel runs

File:
1 edited

Legend:

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

    r11512 r11513  
    1717
    1818/*Local prototype*/
    19 int FormFunctionGradient(TaoSolver tao,Vec,double*,Vec,void*);
    20 int IssmMonitor(TaoSolver,void *);
     19int FormFunctionGradient(TaoSolver,Vec,double*,Vec,void*);
     20int IssmMonitor(TaoSolver,void*);
    2121typedef struct {
    2222        FemModel* femmodel;
     
    6060
    6161        /*Prepare all TAO parameters*/
    62         TaoSetMonitor(tao,IssmMonitor,NULL,NULL);
     62        TaoSetMonitor(tao,IssmMonitor,&user,NULL);
    6363        TaoSetMaximumFunctionEvaluations(tao,maxiter);
    6464        TaoSetMaximumIterations(tao,nsteps);
     
    146146int IssmMonitor(TaoSolver tao, void *userCtx){
    147147
    148         AppCtx *user = (AppCtx *)userCtx;
    149         int     its;
    150         double  f,gnorm,cnorm,xdiff;
     148        int       i,its,num_responses;
     149        double    f,gnorm,cnorm,xdiff;
     150        AppCtx   *user      = (AppCtx *)userCtx;
     151        FemModel *femmodel  = user->femmodel;
     152        Element  *element   = NULL;
     153        int      *responses = NULL;
     154
     155        femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
     156        femmodel->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
    151157
    152158        TaoGetSolutionStatus(tao, &its, &f, &gnorm, &cnorm, &xdiff, NULL);
    153         if(its==0)printf("Iter       Function      Residual\n");
    154         printf("%4i   %12.7g  %12.7g\n",its,f,gnorm);
    155         printf("iter: %i\n",tao->niter);
     159        if(its==0) _printf_(true,"Iter       Function      Residual  |  List of contributions\n");
     160        if(its==0) _printf_(true,"-----------------------------------+-----------------------\n");
     161        _printf_(true,"%4i   %12.7g  %12.7g  | ",its,f,gnorm);
     162
     163        /*Retrieve objective functions independently*/
     164        for(i=0;i<num_responses;i++){
     165                Responsex(&f,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EnumToStringx(responses[i]),false,i);
     166                _printf_(true," %12.7g ","",f);
     167        }
     168        _printf_(true,"\n");
     169
     170        /*Clean-up and return*/
     171        xfree((void**)&responses);
    156172        return 0;
    157173}
Note: See TracChangeset for help on using the changeset viewer.