Changeset 12265


Ignore:
Timestamp:
05/17/12 10:09:18 (13 years ago)
Author:
Mathieu Morlighem
Message:

Added check that Enums are synchronized between matlab's interface and compiled code

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

Legend:

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

    r12102 r12265  
    4545        this->fid=iomodel_handle;
    4646
     47        /*Check that Enums are Synchronized*/
     48        this->CheckEnumSync();
     49
    4750        /*Initialize and read constants:*/
    4851        this->constants=new Parameters();
     
    8992/*}}}*/
    9093
     94/*FUNCTION IoModel::CheckEnumSync{{{1*/
     95void  IoModel::CheckEnumSync(void){
     96
     97        extern int my_rank;
     98        int record_enum = 0;
     99
     100
     101        /*Check that some fields have been allocated*/
     102        _assert_(this->fid || my_rank);
     103
     104
     105        /*Go find in the binary file, the position of the data we want to fetch: */
     106        if(my_rank==0){ //cpu 0
     107
     108                /*First set FILE* position to the beginning of the file: */
     109                fseek(this->fid,0,SEEK_SET);
     110
     111                /*Get first Enum*/
     112                if(fread(&record_enum,sizeof(int),1,this->fid)==0){
     113                        _error_("Marshalled file is empty");
     114                }
     115                else{
     116                        if(record_enum!=MaximumNumberOfEnums){
     117                                _error_("Enums in marshalled file are not compatible with compiled code, make sure you are using the same version of ISSM");
     118                        }
     119                }
     120        }
     121}
     122/*}}}*/
    91123/*FUNCTION IoModel::Constant(bool* poutput,int constant_enum){{{1*/
    92124void IoModel::Constant(bool* poutput,int constant_enum){
  • TabularUnified issm/trunk-jpl/src/c/objects/IoModel.h

    r9476 r12265  
    4141
    4242                /*Input/Output*/
    43                 void        Constant(bool   *poutput,int constant_enum);
    44                 void        Constant(int    *poutput,int constant_enum);
    45                 void        Constant(double *poutput,int constant_enum);
    46                 void        Constant(char  **poutput,int constant_enum);
    47                 Param      *CopyConstantObject(int constant_enum);
    48                 double     *Data(int dataenum);
    49                 void        DeleteData(int num,...);
    50                 void        FetchConstants(void);
    51                 void        FetchData(bool*     pboolean,int data_enum);
    52                 void        FetchData(int*      pinteger,int data_enum);
    53                 void        FetchData(double*   pscalar,int data_enum);
    54                 void        FetchData(char**    pstring,int data_enum);
    55                 void        FetchData(int** pmatrix,int* pM,int* pN,int data_enum);
    56                 void        FetchData(double**  pscalarmatrix,int* pM,int* pN,int data_enum);
    57                 void        FetchData(char***   pstringarray,int* pnumstrings,int data_enum);
    58                 void        FetchData(double*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
    59                 void        FetchData(int num,...);
    60                 void        FetchDataToInput(Elements* elements,int vector_enum,int default_vector_enum=NoneEnum,double default_value=0);
    61                 FILE*       SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
     43                void    CheckEnumSync(void);
     44                void    Constant(bool   *poutput,int constant_enum);
     45                void    Constant(int    *poutput,int constant_enum);
     46                void    Constant(double *poutput,int constant_enum);
     47                void    Constant(char  **poutput,int constant_enum);
     48                Param  *CopyConstantObject(int constant_enum);
     49                double *Data(int dataenum);
     50                void    DeleteData(int num,...);
     51                void    FetchConstants(void);
     52                void    FetchData(bool*     pboolean,int data_enum);
     53                void    FetchData(int*      pinteger,int data_enum);
     54                void    FetchData(double*   pscalar,int data_enum);
     55                void    FetchData(char**    pstring,int data_enum);
     56                void    FetchData(int** pmatrix,int* pM,int* pN,int data_enum);
     57                void    FetchData(double**  pscalarmatrix,int* pM,int* pN,int data_enum);
     58                void    FetchData(char***   pstringarray,int* pnumstrings,int data_enum);
     59                void    FetchData(double*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
     60                void    FetchData(int num,...);
     61                void    FetchDataToInput(Elements* elements,int vector_enum,int default_vector_enum=NoneEnum,double default_value=0);
     62                FILE*   SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
    6263};
    6364
  • TabularUnified issm/trunk-jpl/src/m/model/marshall.m

    r11959 r12265  
    1515        error(['marshall error message: could not open ' [md.miscellaneous.name '.bin'],' file for binary writing']);
    1616end
     17
     18%First, right MaximumNumberOfEnum to make sure that the Enums are synchronized
     19WriteData(fid,'enum',MaximumNumberOfEnums(),'data',true,'format','Boolean');
    1720
    1821%Go through all model fields: check that it is a class and call checkconsistency
Note: See TracChangeset for help on using the changeset viewer.