Changeset 1271


Ignore:
Timestamp:
07/08/09 21:06:26 (15 years ago)
Author:
Eric.Larour
Message:

Added control type and analysis type in results

Location:
issm/trunk/src
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/objects/Result.cpp

    r823 r1271  
    3737                VecDuplicatePatch(&field,result.field);
    3838                dfield=NULL;
     39                cfield=NULL;
    3940        }
    4041        if(result.dfield){
     
    4243                memcpy(dfield,result.dfield,result.size*sizeof(double));
    4344                field=NULL;
     45                cfield=NULL;
     46        }
     47        if(result.cfield){
     48                cfield=(char*)xmalloc((strlen(result.cfield)+1)*sizeof(char));
     49                strcpy(cfield,result.cfield);
     50                field=NULL;
     51                dfield=NULL;
    4452        }
    4553}
     
    6371        field=result_field; //do not copy, as the results are large in memory size.
    6472        dfield=NULL;
     73        cfield=NULL;
    6574}
    6675
     
    8493        size=result_size;
    8594        field=NULL;
    86 }
    87 
     95        cfield=NULL;
     96}
     97
     98#undef __FUNCT__
     99#define __FUNCT__ "Result::Result"
     100Result::Result(int result_id,double result_time,int result_step,char* result_fieldname,char* result_field){
     101
     102        id=result_id;
     103        time=result_time;
     104        step=result_step;
     105       
     106        if(!result_fieldname){
     107                throw  ErrorException(__FUNCT__," NULL fieldname in constructor argument");
     108        }
     109        else{
     110                fieldname=(char*)xmalloc((strlen(result_fieldname)+1)*sizeof(char));
     111                strcpy(fieldname,result_fieldname);
     112        }
     113        cfield=(char*)xmalloc((strlen(result_field)+1)*sizeof(char));
     114        strcpy(cfield,result_field);
     115
     116        field=NULL;
     117        dfield=NULL;
     118}
    88119
    89120Result::~Result(){
     
    91122        VecFree(&field);
    92123        xfree((void**)&dfield);
     124        xfree((void**)&cfield);
    93125}
    94126               
     
    103135                printf("   field pointer %p\n",field);
    104136        }
    105         else{
     137        if(dfield){
    106138                printf("   field pointer %p\n",dfield);
    107139                printf("   field size %i\n",size);
     140        }
     141        if(cfield){
     142                printf("   field pointer %p\n",cfield);
     143                printf("   field string %s\n",cfield);
    108144        }
    109145}
     
    119155                printf("   field pointer %p\n",field);
    120156        }
    121         else{
     157        if(dfield){
    122158                printf("   field pointer %p\n",dfield);
    123159                printf("   field size %i\n",size);
    124160        }
     161        if(cfield){
     162                printf("   field pointer %p\n",cfield);
     163                printf("   field string %s\n",cfield);
     164        }
    125165}       
     166
    126167#undef __FUNCT__
    127168#define __FUNCT__ "Result::Marshall"
     
    179220
    180221        int length;
     222        int type;
    181223
    182224        /*First write field name :*/
     
    190232
    191233        /*Now write field: */
    192         fwrite(&size,sizeof(int),1,fid);
    193         fwrite(dfield,size*sizeof(double),1,fid);
     234        if(dfield){
     235                type=1;
     236                fwrite(&type,sizeof(int),1,fid);
     237                fwrite(&size,sizeof(int),1,fid);
     238                fwrite(dfield,size*sizeof(double),1,fid);
     239        }
     240        if(cfield){
     241                type=2;
     242                fwrite(&type,sizeof(int),1,fid);
     243                length=(strlen(cfield)+1)*sizeof(char);
     244                fwrite(&length,sizeof(int),1,fid);
     245                fwrite(cfield,length,1,fid);
     246        }
    194247}
    195248
     
    200253
    201254}
    202                
     255
     256void  Result::GetField(char** pcfield){
     257
     258        char* string=NULL;
     259
     260        string=(char*)xmalloc((strlen(cfield)+1)*sizeof(char));
     261        strcpy(string,cfield);
     262
     263        *pcfield=string;
     264}
     265
    203266void  Result::GetField(double** pfield){
    204267        *pfield=(double*)xmalloc(size*sizeof(double));
  • issm/trunk/src/c/objects/Result.h

    r803 r1271  
    1919                Vec    field;
    2020                double* dfield;
     21                char*   cfield;
    2122                int     size;
    2223
     
    2728                Result(int result_id,double result_time,int result_step,char* result_fieldname,Vec result_field);
    2829                Result(int result_id,double result_time,int result_step,char* result_fieldname,double* result_field,int result_size);
     30                Result(int result_id,double result_time,int result_step,char* result_fieldname,char* result_field);
    2931                ~Result();
    3032
     
    4345                void  GetField(Vec* pfield);
    4446                void  GetField(double** pfield);
     47                void  GetField(char** pcfield);
    4548                int    GetStep();
    4649                void   WriteData(FILE* fid);
  • issm/trunk/src/c/parallel/control.cpp

    r1265 r1271  
    2424        int   numberofnodes;
    2525        int   qmu_analysis=0;
     26        char* control_type=NULL;
    2627
    2728        /*Fem models : */
     
    3031        /*Results: */
    3132        DataSet* results=NULL;
     33        Result*  result=NULL;
    3234
    3335        ParameterInputs* inputs=NULL;
     
    117119        }
    118120
     121        /*Add analysis_type and control_type to results: */
     122        result=new Result(results->Size()+1,0,1,"analysis_type","control");
     123        results->AddObject(result);
     124       
     125        femmodels[0].parameters->FindParam((void*)&control_type,"control_type");
     126        result=new Result(results->Size()+1,0,1,"control_type",control_type);
     127        results->AddObject(result);
     128
    119129        _printf_("process results:\n");
    120130        ProcessResults(&results,&femmodels[0],ControlAnalysisEnum());
  • issm/trunk/src/c/parallel/diagnostic.cpp

    r962 r1271  
    3131        /*Results: */
    3232        DataSet* results=NULL;
     33        Result* result=NULL;
    3334       
    3435        ParameterInputs* inputs=NULL;
     
    105106        }
    106107
     108        /*Add analysis_type to results: */
     109        result=new Result(results->Size()+1,0,1,"analysis_type","diagnostic");
     110        results->AddObject(result);
     111
    107112        _printf_("process results:\n");
    108113        ProcessResults(&results,&femmodels[0],DiagnosticAnalysisEnum());
  • issm/trunk/src/c/parallel/prognostic.cpp

    r962 r1271  
    3939        /*Results: */
    4040        DataSet* results=NULL;
     41        Result*  result=NULL;
    4142
    4243        ParameterInputs* inputs=NULL;
     
    106107        }
    107108
     109        /*Add analysis_type to results: */
     110        result=new Result(results->Size()+1,0,1,"analysis_type","prognostic");
     111        results->AddObject(result);
     112       
    108113        _printf_("process results:\n");
    109114        ProcessResults(&results,&fem,PrognosticAnalysisEnum());
  • issm/trunk/src/c/parallel/thermal.cpp

    r962 r1271  
    3636        /*Results: */
    3737        DataSet* results=NULL;
     38        Result*  result=NULL;
    3839       
    3940        ParameterInputs* inputs=NULL;
     
    113114                #endif
    114115        }
    115        
     116
     117        /*Add analysis_type to results: */
     118        result=new Result(results->Size()+1,0,1,"analysis_type","thermal");
     119        results->AddObject(result);
     120               
    116121        _printf_("process results:\n");
    117122        ProcessResults(&results,&femmodels[0],ThermalAnalysisEnum());
  • issm/trunk/src/c/parallel/transient.cpp

    r962 r1271  
    3232        /*Results: */
    3333        DataSet* results=NULL;
     34        Result*  result=NULL;
    3435       
    3536        ParameterInputs* inputs=NULL;
     
    124125        }
    125126
     127        /*Add analysis_type to results: */
     128        result=new Result(results->Size()+1,0,1,"analysis_type","transient");
     129        results->AddObject(result);
     130
    126131        _printf_("process results:\n");
    127132        ProcessResults(&results,&femmodels[0],TransientAnalysisEnum());
  • issm/trunk/src/m/classes/public/ReadData.m

    r643 r1271  
    1717        time=fread(fid,1,'double');
    1818        step=fread(fid,1,'int');
     19
     20        type=fread(fid,1,'int');
    1921        ssize=fread(fid,1,'int');
    20         field=fread(fid,ssize,'double');
     22        if type==1,
     23                field=fread(fid,ssize,'double');
     24        else
     25                field=fread(fid,ssize,'char');
     26                field=char(field(1:end-1)');
     27        end
    2128
    2229        result.fieldname=fieldname;
  • issm/trunk/src/m/classes/public/loadresultsfromdisk.m

    r965 r1271  
    1515        md.results=struct();
    1616end
    17 eval(['md.results.' md.analysis_type '=parseresultsfromdisk(filename);']);
     17
     18structure=parseresultsfromdisk(filename);
     19eval(['md.results.' structure.analysis_type '=structure;']);
    1820
    1921%Check result is consistent, only if it exists
  • issm/trunk/src/m/classes/public/parseresultsfromdisk.m

    r802 r1271  
    1010        error(['loadresultsfromdisk error message: could not open ',filename,' for binary reading']);
    1111end
    12 
    1312results=struct();
    1413
  • issm/trunk/src/m/solutions/cielo/diagnostic.m

    r972 r1271  
    3737        if ~models.dh.parameters.qmu_analysis,
    3838                %launch core of diagnostic solution.
    39                 results=diagnostic_core(models,inputs);
     39                results=diagnostic_core(models,inputs)
    4040       
    4141                %process results
Note: See TracChangeset for help on using the changeset viewer.