Changeset 16770


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

CHG: added multiple integer vector fetch.

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

Legend:

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

    r16768 r16770  
    11951195}
    11961196/*}}}*/
     1197/*FUNCTION IoModel::FetchMultipleData(int** pvector, int* pM,int data_enum){{{*/
     1198void  IoModel::FetchMultipleData(int** pvector, int* pnum_instances,int data_enum){
     1199
     1200        int     num_instances;
     1201        fpos_t* file_positions=NULL;
     1202
     1203        /*output: */
     1204        int* vector=NULL;
     1205        int num
     1206
     1207        /*intermediary: */
     1208        int          M, N;
     1209        IssmPDouble *pmatrix = NULL;
     1210        IssmDouble  *matrix  = NULL;
     1211        int         *codes   = NULL;
     1212        int          code;
     1213
     1214        /*recover my_rank:*/
     1215        int my_rank=IssmComm::GetRank();
     1216       
     1217        /*Get file pointers to beginning of the data (multiple instances of it): */
     1218        file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_enum);
     1219
     1220        if(num_instances){
     1221
     1222                /*Allocate vector :*/
     1223                vector=xNew<int>(num_instances);
     1224
     1225                for(int i=0;i<num_instances;i++){
     1226
     1227                        if(my_rank==0){
     1228                                code=codes[i];
     1229
     1230                                if(code!=2)_error_("expecting an integer for enum " << EnumToStringx(data_enum));
     1231                               
     1232                                /*We have to read a integer from disk. First read the dimensions of the integer, then the integer: */
     1233                                fsetpos(fid,file_positions+i);
     1234                                if(my_rank==0){ 
     1235                                        if(fread(&integer,sizeof(int),1,fid)!=1) _error_("could not read integer ");
     1236                                }
     1237                        }
     1238                        ISSM_MPI_Bcast(&integer,1,ISSM_MPI_INT,0,IssmComm::GetComm());
     1239
     1240                        /*Assign: */
     1241                        vector[i]=integer;
     1242                }
     1243        }
     1244                       
     1245        /*Free ressources:*/
     1246        xDelete<fpos_t>(file_positions);
     1247        xDelete<int>(codes);
     1248
     1249        /*Assign output pointers: */
     1250        *pvector=vector;
     1251        *pnum_instances=num_instances;
     1252}
     1253/*}}}*/
    11971254/*FUNCTION IoModel::FetchMultipleData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pM,int data_enum){{{*/
    11981255void  IoModel::FetchMultipleData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){
  • issm/trunk-jpl/src/c/classes/IoModel.h

    r16768 r16770  
    8080                void        FetchMultipleData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
    8181                void        FetchMultipleData(int*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
     82                void        FetchMultipleData(int** pvector, int* pnum_instances,int data_enum);
    8283                void        FetchData(Option **poption,int data_enum);
    8384                void        FetchData(int num,...);
Note: See TracChangeset for help on using the changeset viewer.