Changeset 4182


Ignore:
Timestamp:
06/23/10 17:50:28 (15 years ago)
Author:
Eric.Larour
Message:

Added OutputResults module.
OutputResultsx now outputs time and step for results.
serial solutions updated to get results from OutputResults module.

Location:
issm/trunk/src
Files:
3 added
1 deleted
32 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/DataSet/DataSet.cpp

    r4179 r4182  
    486486        /*Go through a dataset, and for each object, report it cpu: */
    487487
     488        int i;
    488489        int rank;
    489490        int sid;
    490         vector<Object*>::iterator object;
    491         DofObject* dofobject=NULL;
    492 
    493         for ( object=objects.begin() ; object < objects.end(); object++ ){
    494 
    495                 /*Ok, this object is a node, ask which rank it has: */
    496                 rank=(*object)->MyRank();
    497 
    498                 /*Which id does it have: */
    499                 dofobject=dynamic_cast<DofObject*>(*object);
    500                 sid=dofobject->Sid();
    501 
     491       
     492        for(i=0;i<this->Size();i++){
     493                Object* object=(Object*)this->GetObjectByOffset(i);
     494                rank=object->MyRank();
     495
     496                if (object->Enum()==NodeEnum){
     497                        Node* node=(Node*)object;
     498                        sid=node->Sid();
     499                }
     500                if (object->Enum()==VertexEnum){
     501                        Vertex* vertex=(Vertex*)object;
     502                        sid=vertex->Sid();
     503                }
    502504                /*Plug rank into ranks, according to id: */
    503505                ranks[sid]=rank;
     
    914916        MPI_Bcast(&node_max_sid,1,MPI_INT,0,MPI_COMM_WORLD);
    915917        max_sid=node_max_sid;
    916         #endif
     918        #endif 
    917919
    918920        /*sid starts at 0*/
  • issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h

    r4166 r4182  
    264264        JEnum,
    265265        PatchEnum,
     266        TimeEnum,
    266267        /*}}}*/
    267268        /*Convergence{{{1*/
  • issm/trunk/src/c/modules/OutputResultsx/MatlabWriteResults.cpp

    r4167 r4182  
    1919void  MatlabWriteResults(mxArray** pdataref, Parameters* parameters, DataSet* results){
    2020
    21         int i;
     21        int i,j;
     22        int count;
    2223
    2324        /*output: */
    2425        mxArray* dataref=NULL;
    2526        mwSize nfields;
     27        mwSize maxfields;
     28        mwSize nsteps;
     29        mwSize step;
    2630        const   char**  fnames=NULL;
     31        int*    enums=NULL;
     32        int     baseenum;
    2733        mwSize          onebyone[2] = {1,1};
    2834        mwSize          ndim=2;
    2935
    30         /*How many results? : */
    31         nfields=(mwSize)results->Size();
    32 
    33         /*recover names: */
    34         fnames=(const char**)xmalloc(nfields*sizeof(char*));
     36        /*How many time steps do we have? : */
     37        nsteps=0;
    3538        for(i=0;i<nfields;i++){
    3639                ExternalResult* result=(ExternalResult*)results->GetObjectByOffset(i);
    37                 fnames[i]=result->GetResultName();
     40                step=result->GetStep();
     41                if(step>nsteps)nsteps=step;
    3842        }
     43        onebyone[0]=nsteps;
     44
     45        /*How many field names do we have. First, figure out how many result types we have: */
     46        maxfields=(mwSize)results->Size();
     47        enums=(int*)xmalloc(maxfields*sizeof(int));
     48        for(i=0;i<maxfields;i++){
     49                ExternalResult* result=(ExternalResult*)results->GetObjectByOffset(i);
     50                enums[i]=result->EnumType();
     51        }
     52        /*Now, make result types unique: */
     53        for(i=0;i<maxfields;i++){
     54                if(enums[i]>=0){//if <0, it means this enum was found to replicate another one previously
     55                        baseenum=enums[i];             
     56                        /*is the baseenum repeated later on?:*/
     57                        for(j=i+1;j<maxfields;j++){
     58                                if (enums[j]==baseenum)enums[j]=-1;
     59                        }
     60                }
     61                else continue;
     62        }
     63
     64        /*Now, go through enums, and whatever is not null is a non repeated field name: */
     65        nfields=0;
     66        for(i=0;i<maxfields;i++)if(enums[i]>0)nfields++;
     67
     68        /*Add 1 field for time: */
     69        nfields++;
     70       
     71        /*Fill the names of the structure field: */
     72        fnames=(const char**)xmalloc(nfields*sizeof(char*));
     73        count=0;
     74        for(i=0;i<maxfields;i++){
     75                if (enums[i]>0){
     76                        fnames[count]=EnumAsString(enums[i]);
     77                        count++;
     78                }
     79        }
     80        /*don't forget the extra field "time":*/
     81        fnames[nfields-1]=EnumAsString(TimeEnum);
    3982
    4083        /*Initialize structure: */
  • issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.cpp

    r4166 r4182  
    4545        #endif
    4646}
    47 
    48 
  • issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.h

    r4166 r4182  
    33 */
    44
    5 #ifndef _OUTPUTRESULTS_H
    6 #define _OUTPUTRESULTS_H
     5#ifndef _OUTPUTRESULTSX_H
     6#define _OUTPUTRESULTSX_H
    77
    88#ifdef HAVE_CONFIG_H
  • issm/trunk/src/c/objects/ExternalResults/BoolExternalResult.cpp

    r4167 r4182  
    188188        char* name=NULL;
    189189        name=this->GetResultName();
    190         mxSetField( dataref, 0, name,mxCreateDoubleScalar((double)value));
     190       
     191        mxSetField( dataref, this->step-1, name,mxCreateDoubleScalar((double)value));
     192        mxSetField( dataref, this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
    191193}
    192194#endif
    193195/*}}}*/
     196/*FUNCTION BoolExternalResult::GetStep(void);{{{1*/
     197int BoolExternalResult::GetStep(void){
     198
     199        return this->step;
     200}
     201/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/BoolExternalResult.h

    r4166 r4182  
    7070                void  SetMatlabField(mxArray* dataref);
    7171                #endif
     72                int   GetStep(void);
    7273                /*}}}*/
    7374};
  • issm/trunk/src/c/objects/ExternalResults/DoubleExternalResult.cpp

    r4167 r4182  
    184184        char* name=NULL;
    185185        name=this->GetResultName();
    186         mxSetField( dataref, 0, name,mxCreateDoubleScalar(value));
     186        mxSetField( dataref,this->step-1, name,mxCreateDoubleScalar(value));
     187        mxSetField( dataref,this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
     188
    187189}
    188190#endif
    189191/*}}}*/
     192/*FUNCTION DoubleExternalResult::GetStep(void);{{{1*/
     193int DoubleExternalResult::GetStep(void){
     194
     195        return this->step;
     196}
     197/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/DoubleExternalResult.h

    r4166 r4182  
    7070                void  SetMatlabField(mxArray* dataref);
    7171                #endif
     72                int   GetStep(void);
    7273                /*}}}*/
    7374};
  • issm/trunk/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp

    r4167 r4182  
    231231
    232232        /*set tranpose matrix inside the dataref structure: */
    233         mxSetField( dataref, 0, name,pfield2);
     233        mxSetField( dataref, this->step-1, name,pfield2);
     234        mxSetField( dataref, this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
     235
     236
     237
    234238}
    235239#endif
    236240/*}}}*/
     241/*FUNCTION DoubleMatExternalResult::GetStep(void);{{{1*/
     242int DoubleMatExternalResult::GetStep(void){
     243
     244        return this->step;
     245}
     246/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/DoubleMatExternalResult.h

    r4166 r4182  
    7070                void  SetMatlabField(mxArray* dataref);
    7171                #endif
     72                int   GetStep(void);
    7273                /*}}}*/
    7374};
  • issm/trunk/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp

    r4167 r4182  
    222222        mxSetN(pfield,1);
    223223        mxSetPr(pfield,doublevec);
    224         mxSetField( dataref, 0, name,pfield);
     224
     225        mxSetField( dataref, this->step-1, name,pfield);
     226        mxSetField( dataref, this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
     227
    225228
    226229}
    227230#endif
    228231/*}}}*/
     232/*FUNCTION DoubleVecExternalResult::GetStep(void);{{{1*/
     233int DoubleVecExternalResult::GetStep(void){
     234
     235        return this->step;
     236}
     237/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/DoubleVecExternalResult.h

    r4166 r4182  
    6969                void  SetMatlabField(mxArray* dataref);
    7070                #endif
     71                int   GetStep(void);
    7172                /*}}}*/
    7273};
  • issm/trunk/src/c/objects/ExternalResults/ExternalResult.h

    r4166 r4182  
    3737                virtual void  SetMatlabField(mxArray* dataref)=0;
    3838                #endif
     39                virtual int   GetStep(void)=0;
    3940                /*}}}*/
    4041};
  • issm/trunk/src/c/objects/ExternalResults/IntExternalResult.cpp

    r4167 r4182  
    188188        char* name=NULL;
    189189        name=this->GetResultName();
    190         mxSetField( dataref, 0, name,mxCreateDoubleScalar(value));
     190
     191        mxSetField( dataref, this->step-1, name,mxCreateDoubleScalar(value));
     192        mxSetField( dataref, this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
     193
    191194}
    192195#endif
    193196/*}}}*/
     197/*FUNCTION IntExternalResult::GetStep(void);{{{1*/
     198int IntExternalResult::GetStep(void){
     199
     200        return this->step;
     201}
     202/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/IntExternalResult.h

    r4166 r4182  
    7070                void  SetMatlabField(mxArray* dataref);
    7171                #endif
     72                int   GetStep(void);
    7273                /*}}}*/
    7374};
  • issm/trunk/src/c/objects/ExternalResults/PetscVecExternalResult.cpp

    r4166 r4182  
    256256        mxSetPr(pfield,doublevec);
    257257       
    258         mxSetField( dataref, 0, name, pfield);
     258        mxSetField( dataref, this->step-1, name, pfield);
     259        mxSetField( dataref, this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
     260
    259261}
    260262#endif
    261263/*}}}*/
     264/*FUNCTION PetscVecExternalResult::GetStep(void);{{{1*/
     265int PetscVecExternalResult::GetStep(void){
     266
     267        return this->step;
     268}
     269/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/PetscVecExternalResult.h

    r4166 r4182  
    6868                void  SetMatlabField(mxArray* dataref);
    6969                #endif
     70                int   GetStep(void);
    7071                /*}}}*/
    7172};
  • issm/trunk/src/c/objects/ExternalResults/StringExternalResult.cpp

    r4166 r4182  
    200200
    201201        name=this->GetResultName();
    202         mxSetField( dataref, 0, name, mxCreateString(value));
     202
     203        mxSetField( dataref, this->step-1, name, mxCreateString(value));
     204        mxSetField( dataref, this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
     205
    203206}
    204207#endif
    205208/*}}}*/
     209/*FUNCTION StringExternalResult::GetStep(void);{{{1*/
     210int StringExternalResult::GetStep(void){
     211
     212        return this->step;
     213}
     214/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/StringExternalResult.h

    r4166 r4182  
    6969                void  SetMatlabField(mxArray* dataref);
    7070                #endif
     71                int   GetStep(void);
    7172                /*}}}*/
    7273};
  • issm/trunk/src/m/solutions/bedslope.m

    r4131 r4182  
    2424       
    2525                displaystring(verbose,'%s',['write results']);
    26                 OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
     26                md.results.bedslopecompute=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
    2727
    2828        else
  • issm/trunk/src/m/solutions/control_core.m

    r4136 r4182  
    7474        end
    7575
    76         %Temporary saving every five iterations
    77         if mod(n+1,5)==0;
    78                 displaystring(verbose,'\n%s',['      saving temporary results...']);
    79                 controlrestart(femmmodel,J);
    80         end
    81 
    8276end
    8377
  • issm/trunk/src/m/solutions/diagnostic.m

    r4131 r4182  
    3434               
    3535                displaystring(verbose,'%s',['write results']);
    36                 OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
     36                md.results.diagnostic=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
    3737
    3838        else
  • issm/trunk/src/m/solutions/prognostic.m

    r4135 r4182  
    2525
    2626                displaystring(verbose,'%s',['write results']);
    27                 OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
     27                md.results.prognostic=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
    2828        else
    2929                %launch dakota driver for diagnostic core solution
  • issm/trunk/src/m/solutions/prognostic2.m

    r4135 r4182  
    2424
    2525                displaystring(verbose,'%s',['write results']);
    26                 OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
     26                md.results.prognostic2=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
    2727        else
    2828                %launch dakota driver for diagnostic core solution
  • issm/trunk/src/m/solutions/steadystate.m

    r4135 r4182  
    3535
    3636                displaystring(verbose,'%s',['write results']);
    37                 OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
     37                md.results.steadystate=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
    3838
    3939        else
  • issm/trunk/src/m/solutions/surfaceslope.m

    r4131 r4182  
    2424       
    2525                displaystring(verbose,'%s',['write results']);
    26                 OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
     26                md.results.surfaceslopecompute=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
    2727
    2828        else
  • issm/trunk/src/m/solutions/thermal.m

    r4135 r4182  
    2424
    2525                displaystring(verbose,'%s',['write results']);
    26                 OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
     26                md.results.thermal=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
    2727        else
    2828                %launch dakota driver for diagnostic core solution
  • issm/trunk/src/m/solutions/transient2d.m

    r4131 r4182  
    2323               
    2424                displaystring(verbose,'%s',['write results']);
    25                 OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
     25                md.results.transient2d=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
    2626
    2727        else
  • issm/trunk/src/m/solutions/transient3d.m

    r4131 r4182  
    2222               
    2323                displaystring(verbose,'%s',['write results']);
    24                 OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
     24                md.results.transient3d=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
    2525
    2626        else
  • issm/trunk/src/m/solutions/transient3d_core.m

    r4136 r4182  
    5050                femmodel.elements=InputToResult(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,MeltingEnum,step,time);
    5151
    52                 %Save temporary results
    53                 if mod(step,5)==0,
    54                         displaystring(verbose,'\n%s',['saving temporary results...']);
    55                         OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
    56                 end
    5752        end
    5853
  • issm/trunk/src/mex/Makefile.am

    r4171 r4182  
    4343                                Orth\
    4444                                OutputRifts\
     45                                OutputResults\
    4546                                PenaltyConstraints\
    4647                                PenaltySystemMatrices\
     
    208209                          OutputRifts/OutputRifts.h
    209210
     211OutputResults_SOURCES = OutputResults/OutputResults.cpp\
     212                          OutputResults/OutputResults.h
     213
    210214PenaltyConstraints_SOURCES = PenaltyConstraints/PenaltyConstraints.cpp\
    211215                          PenaltyConstraints/PenaltyConstraints.h
Note: See TracChangeset for help on using the changeset viewer.