Changeset 19223


Ignore:
Timestamp:
03/24/15 12:07:53 (10 years ago)
Author:
Eric.Larour
Message:

CHG: hooking up Marshalling capability into the FemModel new Restart routine.

File:
1 edited

Legend:

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

    r19215 r19223  
    611611        int   femmodel_size;
    612612        char* femmodel_buffer=NULL;
     613        char* femmodel_buffer_ini=NULL;
    613614
    614615        /*First, recover the name of the restart file: */
     
    618619        restartfid=pfopen(restartfilename,"wb");
    619620
     621        /*Initialize: */
     622        femmodel_size=0;
     623
    620624        /*Create buffer to hold marshalled femmodel: */
    621625        this->Marshall(NULL,&femmodel_size,MARSHALLING_SIZE);
    622         femmodel_buffer=xNew<char>(femmodel_size);
    623 
     626        femmodel_buffer=xNew<char>(femmodel_size);
     627
     628        /*Keep track of initial position of femmodel_buffer: */
     629        femmodel_buffer_ini=femmodel_buffer;
     630       
    624631        /*Marshall:*/
    625         this->Marshall(&femmodel_buffer,&femmodel_size,MARSHALLING_FORWARD);
     632        this->Marshall(&femmodel_buffer,NULL,MARSHALLING_FORWARD);
     633
     634        /*Reset position of buffer: */
     635        femmodel_buffer=femmodel_buffer_ini;
    626636
    627637        /*write buffer: */
    628         fwrite(femmodel_buffer,femmodel_size,sizeof(IssmPDouble),restartfid);
     638        fwrite(femmodel_buffer,femmodel_size,sizeof(char),restartfid);
    629639
    630640        /*Done, close file :*/
     
    637647}
    638648/*}}}*/
    639 void FemModel::Restart(void){/*{{{*/
     649void FemModel::Restart(){ /*{{{*/
     650
     651        FILE* restartfid=NULL;
     652        char* restartfilename = NULL;
     653        int   femmodel_size=0;
     654        int   fread_return=0;
     655        char* femmodel_buffer=NULL;
     656        char* femmodel_buffer_ini=NULL;
     657
     658        /*First, recover the name of the restart file: */
     659        parameters->FindParam(&restartfilename,RestartFileNameEnum);
     660
     661        /*Now, figure out whether this file actually exists!: */
     662        restartfid=pfopen(restartfilename,"r",false);
     663
     664        if(restartfid==NULL)return; //could not find the file, so no restart possible.
     665
     666        /*Figure out size of buffer to be read: */
     667        fseek(restartfid, 0L, SEEK_END);
     668        femmodel_size = ftell(restartfid);
     669        fseek(restartfid, 0L, SEEK_SET);
     670
     671        /*Allocate buffer: */
     672        femmodel_buffer=xNew<char>(femmodel_size);
     673
     674        /*Read buffer from file: */
     675        fread_return=fread(femmodel_buffer,femmodel_size,1,restartfid); if(fread_return!=1)_error_("error reading the buffer from marshalled file!");
     676        femmodel_buffer_ini=femmodel_buffer; //keep track of the initial position, so as to free later.
     677
     678        /*Create new FemModel by demarshalling the buffer: */
     679        this->Marshall(&femmodel_buffer,NULL,MARSHALLING_BACKWARD);
     680
     681        /*Done, close file :*/
     682        pfclose(restartfid,restartfilename);
     683       
     684        /*Free ressources: */
     685        xDelete<char>(restartfilename);
     686        xDelete<char>(femmodel_buffer);
     687       
    640688}
    641689/*}}}*/
    642690void FemModel::Marshall(char** pmarshalled_data, int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
     691
     692        if(marshall_direction==MARSHALLING_BACKWARD){
     693                delete profiler; profiler=new Profiler;
     694                delete elements; elements=new Elements();
     695                delete nodes; nodes=new Nodes();
     696                delete vertices; vertices=new Vertices();
     697                delete constraints; constraints=new Constraints();
     698                delete loads; loads=new Loads();
     699                delete materials; materials=new Materials();
     700                delete parameters; parameters=new Parameters();
     701                delete results; results=new Results();
     702                xDelete<int>(analysis_type_list);
     703        }
    643704
    644705        MARSHALLING_ENUM(FemModelEnum);
     
    648709        MARSHALLING_DYNAMIC(analysis_type_list,int,analysis_counter);
    649710
    650         if(marshall_direction==MARSHALLING_BACKWARD){
    651                 profiler=new Profiler;
    652                 elements=new Elements();
    653                 nodes=new Nodes();
    654                 vertices=new Vertices();
    655                 constraints=new Constraints();
    656                 loads=new Loads();
    657                 materials=new Materials();
    658                 parameters=new Parameters();
    659                 results=new Results();
    660         }
    661        
    662711        profiler->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
    663712        elements->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     
    670719        results->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
    671720
    672         MARSHALLING(comm);
    673721}
    674722/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.