Changeset 17064


Ignore:
Timestamp:
01/06/14 16:34:22 (11 years ago)
Author:
Eric.Larour
Message:

CHG: changed the logic in the transient core so that:
1/ final time does always output the results.
2/ results are output at output_frequency, unless these results are coming from a complicated output definition,
in which case, for each transient time step, the result is computed, and only output at the requested output frequency.

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

Legend:

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

    r16948 r17064  
    468468}
    469469/*}}}*/
    470 void FemModel::RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs){/*{{{*/
     470void FemModel::RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs, bool save_results){/*{{{*/
    471471
    472472        /*Intermediaries*/
     
    495495                if(output_enum<0){
    496496                        double_result = OutputDefinitionsResponsex(this,output_string);
     497                        if(save_results){
     498                                results->AddResult(new GenericExternalResult<IssmPDouble>(results->Size()+1,output_string,reCast<IssmPDouble>(double_result),step,time));
     499                                continue;
     500                        }
    497501                }
    498502                else{
     
    561565                                        vector_result->Assemble();
    562566
    563                                         results->AddResult(new GenericExternalResult<Vector<IssmDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
     567                                        if (save_results)results->AddResult(new GenericExternalResult<Vector<IssmDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
    564568                                        isvec = true;
    565569                                        break;
     
    572576
    573577                /*Add result to Results*/
    574                 if(!isvec){
     578                if(!isvec && save_results){
    575579                        results->AddResult(new GenericExternalResult<IssmPDouble>(results->Size()+1,output_string,reCast<IssmPDouble>(double_result),step,time));
    576580                }
     
    581585}
    582586/*}}}*/
    583 void FemModel::RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs){/*{{{*/
     587void FemModel::RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs,bool save_results){/*{{{*/
    584588
    585589        /*Convert list of enums to list of string*/
     
    590594
    591595        /*Call main module*/
    592         this->RequestedOutputsx(presults,enumlist,numoutputs);
     596        this->RequestedOutputsx(presults,enumlist,numoutputs,save_results);
    593597
    594598        /*clean up and return*/
  • issm/trunk-jpl/src/c/classes/FemModel.h

    r16685 r17064  
    8181                void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
    8282                #endif
    83                 void RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs);
    84                 void RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs);
     83                void RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs,bool save_results=true);
     84                void RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs,bool save_results=true);
    8585                void RequestedDependentsx(void);
    8686                void Responsex(IssmDouble* presponse,int response_descriptor_enum);
  • issm/trunk-jpl/src/c/cores/transient_core.cpp

    r16755 r17064  
    106106
    107107                if(VerboseSolution()) _printf0_("iteration " << step << "/" << floor((finaltime-time)/dt)+step << "  time [yr]: " << time/yts << " (time step: " << dt/yts << ")\n");
    108                 if(step%output_frequency==0 || time==finaltime || step==1)
     108                if(step%output_frequency==0 || (time >= finaltime - (yts*DBL_EPSILON)) || step==1)
    109109                 save_results=true;
    110110                else
     
    160160
    161161                /*unload results*/
     162                if(VerboseSolution()) _printf0_("   computing requested outputs\n");
     163                femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs,save_results);
     164                if(isdelta18o){
     165                        int outputs[2] = {SurfaceforcingsMonthlytemperaturesEnum,SurfaceforcingsPrecipitationEnum};
     166                        femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2,save_results);
     167                }
     168                if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
     169                        int outputs[1] = {MaskGroundediceLevelsetEnum};
     170                        femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1,save_results);
     171                }
     172
    162173                if(save_results){
    163                         if(VerboseSolution()) _printf0_("   saving transient results\n");
    164                         femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
    165                         if(isdelta18o){
    166                                 int outputs[2] = {SurfaceforcingsMonthlytemperaturesEnum,SurfaceforcingsPrecipitationEnum};
    167                                 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
    168                         }
    169                         if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
    170                                 int outputs[1] = {MaskGroundediceLevelsetEnum};
    171                                 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
    172                         }
    173174                        if(VerboseSolution()) _printf0_("   saving temporary results\n");
    174175                        OutputResultsx(femmodel);
Note: See TracChangeset for help on using the changeset viewer.