Changeset 6389


Ignore:
Timestamp:
10/21/10 21:07:19 (14 years ago)
Author:
Eric.Larour
Message:

Finished debugging io_gather mode for I/O file output. Works great on astrid.

Location:
issm/trunk/src
Files:
22 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/Container/Results.cpp

    r6372 r6389  
    158158        int         i;
    159159        FILE       *fid          = NULL;
     160        bool        io_gather=true;
    160161
    161162        /*Recover file descriptor: */
    162163        parameters->FindParam(&fid,OutputFilePointerEnum);
     164        parameters->FindParam(&io_gather,IoGatherEnum);
    163165
    164166        for(i=0;i<this->Size();i++){
     
    167169
    168170                /*write result to disk: */
    169                 result->WriteData(fid);
     171                result->WriteData(fid,io_gather);
    170172
    171173        }
  • issm/trunk/src/c/io/pfclose.cpp

    r4873 r6389  
    1717        /*Close file handle: */
    1818        extern int my_rank;
    19         if(my_rank==0){
    20                 if(fclose(fid)!=0)ISSMERROR("%s%s","could not close file ",filename);
    21         }
     19        if(fclose(fid)!=0)ISSMERROR("%s%s","could not close file ",filename);
    2220}
  • issm/trunk/src/c/io/pfopen.cpp

    r3775 r6389  
    1919       
    2020        /*Open handle to data on disk: */
    21         if(my_rank==0){
    22                 fid=fopen(filename,format);
    23                 if(fid==NULL) ISSMERROR("%s%s%s","could not open file ",filename," for binary reading or writing");
    24         }
     21        fid=fopen(filename,format);
     22        if(fid==NULL) ISSMERROR("%s%s%s","could not open file ",filename," for binary reading or writing");
    2523
    2624        return fid;
  • issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.cpp

    r6375 r6389  
    5858                /*What strategy? : */
    5959                parameters->FindParam(&io_gather,IoGatherEnum);
    60                
    6160
    6261                if(io_gather){
     
    7675        #endif
    7776
     77
    7878        /*Write results to disk (in parallel), or to memory (in serial mode): */
    7979        #ifdef _SERIAL_
     
    8383        #endif
    8484
    85 
    8685        /*Delete and reinitialize results, in parallel: */
    8786        #ifdef _PARALLEL_
     
    8988        #endif
    9089
     90        /*Close output file? :*/
     91        if((step==1) && (time==0)){
     92                if(io_gather){
     93                        if(my_rank==0) pfclose(fid,outputfilename);
     94                }
     95                else pfclose(fid,cpu_outputfilename);
     96        }
     97
    9198        /*Assign output pointers:*/
    9299        *presults=results;
  • issm/trunk/src/c/objects/ExternalResults/BoolExternalResult.cpp

    r5103 r6389  
    143143/*BoolExternalResult management: */
    144144/*FUNCTION BoolExternalResult::WriteData{{{1*/
    145 void   BoolExternalResult::WriteData(FILE* fid){
     145void   BoolExternalResult::WriteData(FILE* fid,bool io_gather){
    146146
    147147        int     length;
  • issm/trunk/src/c/objects/ExternalResults/BoolExternalResult.h

    r4248 r6389  
    5555                /*ExternalResult management: {{{1*/
    5656                int   EnumType(){return enum_type;}
    57                 void  WriteData(FILE* fid);
     57                void  WriteData(FILE* fid,bool io_gather);
    5858                char* GetResultName(void);
    5959            #ifdef _SERIAL_
  • issm/trunk/src/c/objects/ExternalResults/DoubleExternalResult.cpp

    r5103 r6389  
    143143/*DoubleExternalResult management: */
    144144/*FUNCTION DoubleExternalResult::WriteData{{{1*/
    145 void   DoubleExternalResult::WriteData(FILE* fid){
     145void   DoubleExternalResult::WriteData(FILE* fid,bool io_gather){
    146146
    147147        int     length;
  • issm/trunk/src/c/objects/ExternalResults/DoubleExternalResult.h

    r4248 r6389  
    5656                /*ExternalResult management: {{{1*/
    5757                int   EnumType(){return enum_type;}
    58                 void  WriteData(FILE* fid);
     58                void  WriteData(FILE* fid,bool io_gather);
    5959                char* GetResultName(void);
    6060                #ifdef _SERIAL_
  • issm/trunk/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp

    r5103 r6389  
    180180/*DoubleMatExternalResult management: */
    181181/*FUNCTION DoubleMatExternalResult::WriteData{{{1*/
    182 void   DoubleMatExternalResult::WriteData(FILE* fid){
     182void   DoubleMatExternalResult::WriteData(FILE* fid,bool io_gather){
    183183
    184184        int     length;
     
    188188        extern  int my_rank;
    189189
    190         /*return if now on cpu 0: */
    191         if(my_rank) return;
     190        if(io_gather){
     191                /*we are gathering the data on cpu 0, don't write on other cpus: */
     192                if(my_rank) return;
     193        }
    192194
    193195        /*First write enum: */
  • issm/trunk/src/c/objects/ExternalResults/DoubleMatExternalResult.h

    r4248 r6389  
    5757                /*ExternalResult managemnet: {{{1*/
    5858                int   EnumType(){return enum_type;}
    59                 void  WriteData(FILE* fid);
     59                void  WriteData(FILE* fid,bool io_gather);
    6060                char* GetResultName(void);
    6161                #ifdef _SERIAL_
  • issm/trunk/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp

    r5103 r6389  
    168168/*DoubleVecExternalResult management: */
    169169/*FUNCTION DoubleVecExternalResult::WriteData{{{1*/
    170 void   DoubleVecExternalResult::WriteData(FILE* fid){
     170void   DoubleVecExternalResult::WriteData(FILE* fid,bool io_gather){
    171171
    172172        int     length;
  • issm/trunk/src/c/objects/ExternalResults/DoubleVecExternalResult.h

    r4248 r6389  
    5656                /*ExternalResult management: {{{1*/
    5757                int   EnumType(){return enum_type;}
    58                 void  WriteData(FILE* fid);
     58                void  WriteData(FILE* fid,bool io_gather);
    5959                char* GetResultName(void);
    6060                #ifdef _SERIAL_
  • issm/trunk/src/c/objects/ExternalResults/ExternalResult.h

    r4248 r6389  
    3131                /*Virtual functions:{{{1*/
    3232                virtual int   EnumType()=0;
    33                 virtual void  WriteData(FILE* fid)=0;
     33                virtual void  WriteData(FILE* fid,bool io_gather)=0;
    3434                virtual char* GetResultName(void)=0;
    3535                #ifdef _SERIAL_
  • issm/trunk/src/c/objects/ExternalResults/IntExternalResult.cpp

    r5103 r6389  
    143143/*IntExternalResult management: */
    144144/*FUNCTION IntExternalResult::WriteData{{{1*/
    145 void   IntExternalResult::WriteData(FILE* fid){
     145void   IntExternalResult::WriteData(FILE* fid,bool io_gather){
    146146
    147147        int     length;
  • issm/trunk/src/c/objects/ExternalResults/IntExternalResult.h

    r5172 r6389  
    5454                /*ExternalResult managemnet: {{{1*/
    5555                int   EnumType(){return enum_type;}
    56                 void  WriteData(FILE* fid);
     56                void  WriteData(FILE* fid,bool io_gather);
    5757                char* GetResultName(void);
    5858                #ifdef _SERIAL_
  • issm/trunk/src/c/objects/ExternalResults/PetscVecExternalResult.cpp

    r5103 r6389  
    199199/*PetscVecExternalResult management: */
    200200/*FUNCTION PetscVecExternalResult::WriteData{{{1*/
    201 void   PetscVecExternalResult::WriteData(FILE* fid){
     201void   PetscVecExternalResult::WriteData(FILE* fid,bool io_gather){
    202202
    203203        int     length;
  • issm/trunk/src/c/objects/ExternalResults/PetscVecExternalResult.h

    r4248 r6389  
    5656                /*ExternalResult management: {{{1*/
    5757                int   EnumType(){return enum_type;}
    58                 void  WriteData(FILE* fid);
     58                void  WriteData(FILE* fid,bool io_gather);
    5959                char* GetResultName(void);
    6060                #ifdef _SERIAL_
  • issm/trunk/src/c/objects/ExternalResults/StringExternalResult.cpp

    r5103 r6389  
    158158/*StringExternalResult management: */
    159159/*FUNCTION StringExternalResult::WriteData{{{1*/
    160 void   StringExternalResult::WriteData(FILE* fid){
     160void   StringExternalResult::WriteData(FILE* fid,bool io_gather){
    161161
    162162        int     length;
  • issm/trunk/src/c/objects/ExternalResults/StringExternalResult.h

    r4248 r6389  
    5656                /*ExternalResult management: {{{1*/
    5757                int   EnumType(){return enum_type;}
    58                 void  WriteData(FILE* fid);
     58                void  WriteData(FILE* fid,bool io_gather);
    5959                char* GetResultName(void);
    6060                #ifdef _SERIAL_
  • issm/trunk/src/c/solutions/issm.cpp

    r6372 r6389  
    100100
    101101        /*Close output file and write lock file if requested*/
    102         femmodel->parameters->FindParam(&output_fid,OutputFilePointerEnum); pfclose(output_fid,argv[5]);
    103102        if (waitonlock>0){
    104103                _printf_("write lock file:\n");
  • issm/trunk/src/m/classes/clusters/astrid.m

    r6219 r6389  
    7171                         fprintf(fid,'#!/bin/sh\n');
    7272                         if mem_debug==0,
    73                                  fprintf(fid,'mpirun -np %i %s/issm.exe %s %s %s.bin %s.petsc %s.outbin %s.lock  2> %s.errlog >%s.outlog & ',cluster.np,cluster.codepath,EnumToString(analysis_type),cluster.executionpath,modelname,modelname,modelname,modelname,modelname,modelname);
     73                                 fprintf(fid,'mpirun -np %i %s/issm.exe %s %s %s.bin %s.petsc %s.outbin %s.lock  2> %s.errlog >%s.outlog ',cluster.np,cluster.codepath,EnumToString(analysis_type),cluster.executionpath,modelname,modelname,modelname,modelname,modelname,modelname);
    7474                         else
    75                                  %fprintf(fid,'LD_PRELOAD=%s mpirun -np %i %s --leak-check=full --gen-suppressions=all --suppressions=%s %s/issm.exe %s %s %s.bin %s.petsc %s.outbin %s.lock  2> %s.errlog >%s.outlog & ',cluster.valgrindlib,cluster.np,cluster.valgrind,cluster.valgrindsup,cluster.codepath,EnumToString(analysis_type),cluster.executionpath,modelname,modelname,modelname,modelname,modelname,modelname);
    76                                  fprintf(fid,'LD_PRELOAD=%s mpirun -np %i %s --leak-check=full --suppressions=%s %s/issm.exe %s %s %s.bin %s.petsc %s.outbin %s.lock  2> %s.errlog >%s.outlog & ',cluster.valgrindlib,cluster.np,cluster.valgrind,cluster.valgrindsup, cluster.codepath,EnumToString(analysis_type),cluster.executionpath,modelname,modelname,modelname,modelname,modelname,modelname);
     75                                 %fprintf(fid,'LD_PRELOAD=%s mpirun -np %i %s --leak-check=full --gen-suppressions=all --suppressions=%s %s/issm.exe %s %s %s.bin %s.petsc %s.outbin %s.lock  2> %s.errlog >%s.outlog ',cluster.valgrindlib,cluster.np,cluster.valgrind,cluster.valgrindsup,cluster.codepath,EnumToString(analysis_type),cluster.executionpath,modelname,modelname,modelname,modelname,modelname,modelname);
     76                                 fprintf(fid,'LD_PRELOAD=%s mpirun -np %i %s --leak-check=full --suppressions=%s %s/issm.exe %s %s %s.bin %s.petsc %s.outbin %s.lock  2> %s.errlog >%s.outlog ',cluster.valgrindlib,cluster.np,cluster.valgrind,cluster.valgrindsup, cluster.codepath,EnumToString(analysis_type),cluster.executionpath,modelname,modelname,modelname,modelname,modelname,modelname);
    7777                         end
    7878
    7979                         if md.gprof,
    8080                                 fprintf(fid,'\n gprof %s/issm.exe gmon.out > %s.performance',cluster.codepath,modelname);
     81                         end
     82
     83                         if ~md.io_gather,
     84                                 %concatenate the output files:
     85                                 fprintf(fid,'\ncat %s.outbin.* > %s.outbin',modelname,modelname);
    8186                         end
    8287
  • issm/trunk/src/m/model/parseresultsfromdisk.m

    r4439 r6389  
    2121
    2222        %Add result
    23         results(result.step).(result.fieldname)=result.field;
     23        if (length(results)>=result.step & isfield(results,result.fieldname)),
     24                results(result.step).(result.fieldname)=[ results(result.step).(result.fieldname); result.field];
     25        else
     26                results(result.step).(result.fieldname)=result.field;
     27        end
    2428
    2529        %read next result
Note: See TracChangeset for help on using the changeset viewer.