Changeset 4166


Ignore:
Timestamp:
06/23/10 12:23:55 (15 years ago)
Author:
Eric.Larour
Message:

No more DofVec. New outputs from external results, in matlab form. Still have to handle the time and step

Location:
issm/trunk/src/c
Files:
2 deleted
26 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/EnumDefinitions/EnumAsString.cpp

    r4158 r4166  
    126126                case RgbEnum : return "Rgb";
    127127                case SpcEnum : return "Spc";
    128                 case DofVecEnum : return "DofVec";
    129128                case GeographyEnum : return "Geography";
    130129                case IceSheetEnum : return "IceSheet";
  • issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h

    r4143 r4166  
    148148        /*Spc: */
    149149        SpcEnum,
    150         /*DofVec: */
    151         DofVecEnum,
    152150        /*}}}*/
    153151        /*Geography {{{1*/
  • issm/trunk/src/c/EnumDefinitions/StringAsEnum.cpp

    r4158 r4166  
    124124        else if (strcmp(name,"Rgb")==0) return RgbEnum;
    125125        else if (strcmp(name,"Spc")==0) return SpcEnum;
    126         else if (strcmp(name,"DofVec")==0) return DofVecEnum;
    127126        else if (strcmp(name,"Geography")==0) return GeographyEnum;
    128127        else if (strcmp(name,"IceSheet")==0) return IceSheetEnum;
  • issm/trunk/src/c/Makefile.am

    r4157 r4166  
    8181                                        ./objects/FemModel.cpp\
    8282                                        ./objects/Material.h\
    83                                         ./objects/DofVec.h\
    84                                         ./objects/DofVec.cpp\
    8583                                        ./objects/Load.h\
    8684                                        ./objects/OptArgs.h\
     
    385383                                        ./modules/OutputResultsx/OutputResultsx.cpp\
    386384                                        ./modules/OutputResultsx/ElementResultsToPatch.cpp\
     385                                        ./modules/OutputResultsx/MatlabWriteResults.cpp\
    387386                                        ./modules/Dux/Dux.h\
    388387                                        ./modules/Dux/Dux.cpp\
     
    606605                                        ./objects/FemModel.cpp\
    607606                                        ./objects/Material.h\
    608                                         ./objects/DofVec.h\
    609                                         ./objects/DofVec.cpp\
    610607                                        ./objects/Load.h\
    611608                                        ./objects/SolverEnum.h\
     
    907904                                        ./modules/OutputResultsx/OutputResultsx.cpp\
    908905                                        ./modules/OutputResultsx/ElementResultsToPatch.cpp\
     906                                        ./modules/OutputResultsx/FileWriteResults.cpp\
    909907                                        ./modules/Dux/Dux.h\
    910908                                        ./modules/Dux/Dux.cpp\
  • issm/trunk/src/c/io/WriteData.cpp

    r3961 r4166  
    9797        *pdataref=dataref;
    9898
    99 }
    100 /*}}}*/
    101 /*FUNCTION WriteData(mxArray** pdataref,DofVec* dofvec){{{1*/
    102 void WriteData(mxArray** pdataref,DofVec* dofvec){
    103        
    104         mxArray* mxvector=NULL;
    105         mxArray* structdataref=NULL;
    106         mxArray* dataref=NULL;
    107 
    108         int nfields=4;
    109         const   char*   fnames[nfields];
    110         mwSize          onebyone[2] = {1,1};
    111         mwSize          ndim=2;
    112 
    113         fnames[0] = "name";
    114         fnames[1] = "numdofs";
    115         fnames[2] = "numentries";
    116         fnames[3] = "vector";
    117        
    118         if(dofvec){
    119                
    120                 /*call toolkit routine: */
    121                 if(dofvec->vector)PetscVectorToMatlabVector(&mxvector,dofvec->vector);
    122                 else mxvector=mxCreateDoubleMatrix(0,0,mxREAL);
    123 
    124                 /*use the mxvector to create a dofvec object: */
    125                 structdataref=mxCreateStructArray( ndim,onebyone,nfields,fnames);
    126        
    127                 mxSetField( structdataref, 0, "name",mxCreateString(dofvec->name));
    128                 mxSetField( structdataref, 0, "numdofs",mxCreateDoubleScalar(dofvec->numdofs));
    129                 mxSetField( structdataref, 0, "numentries",mxCreateDoubleScalar(dofvec->numentries));
    130                 mxSetField( structdataref, 0, "vector",mxvector);
    131 
    132 
    133                 /*transform structure into dofvec class: */
    134                 mexCallMATLAB( 1, &dataref, 1, &structdataref, "dofvec");
    135         }
    136         else{
    137                 dataref = mxCreateDoubleMatrix(0,0,mxREAL);
    138         }
    139         *pdataref=dataref;
    14099}
    141100/*}}}*/
  • issm/trunk/src/c/io/io.h

    r3961 r4166  
    2525void WriteData(mxArray** pdataref,double scalar);
    2626void WriteData(mxArray** pdataref,char* string);
    27 void WriteData(mxArray** pdataref,DofVec* vector);
    2827void WriteData(mxArray** pdataref,BamgMesh* bm);
    2928void WriteData(mxArray** pdataref,BamgGeom* bg);
  • issm/trunk/src/c/modules/OutputResultsx/MatlabWriteResults.cpp

    r4163 r4166  
    1212
    1313#include <mex.h>
    14 #include "./io.h"
    15 #include "../objects/objects.h"
    16 #include "../shared/shared.h"
    17 #include "../include/include.h"
     14#include "../../io/io.h"
     15#include "../../objects/objects.h"
     16#include "../../shared/shared.h"
     17#include "../../include/include.h"
    1818
    1919void  MatlabWriteResults(mxArray** pdataref, Parameters* parameters, DataSet* results){
    2020
    21         extern int  my_rank;
    22         char       *filename     = NULL;
    23         FILE       *fid          = NULL;
     21        int i;
    2422
    25         //Recover file name:
    26         parameters->FindParam(&filename,OutputFileNameEnum);
     23        /*output: */
     24        mxArray* dataref=NULL;
     25        mwSize nfields;
     26        const   char**  fnames=NULL;
     27        mwSize          onebyone[2] = {1,1};
     28        mwSize          ndim=2;
    2729
    28         //Open filename for writing only on cpu 0
    29         if(my_rank==0)fid=pfopen(filename,"wb");
     30        /*How many results? : */
     31        nfields=(mwSize)results->Size();
    3032
    31         for(i=0;i<results->Size();i++){
     33        /*recover names: */
     34        fnames=(const char**)xmalloc(nfields*sizeof(char*));
     35        for(i=0;i<nfields;i++){
    3236                ExternalResult* result=(ExternalResult*)results->GetObjectByOffset(i);
    33 
    34                 /*write result to disk: */
    35                 result->WriteData(fid);
     37                fnames[i]=results->GetResultName();
    3638        }
    3739
    38         /*Close file: */
    39         if(my_rank==0)pfclose(fid,filename);
     40        /*Initialize structure: */
     41        dataref=mxCreateStructArray( ndim,onebyone,nfields,fnames);
    4042
    41         /*Free ressources:*/
    42         xfree((void**)&filename);
     43        /*Fill each field: */
     44        for(i=0;i<nfields;i++){
     45
     46                ExternalResult* result=(ExternalResult*)results->GetObjectByOffset(i);
     47                result->SetMatlabField(dataref);
     48        }
     49       
     50        /*Assign output pointers:*/
     51        *pdataref=dataref;
     52
    4353}
    4454#endif
  • issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.cpp

    r4163 r4166  
    4040        /*Write data to matlab structure or filename: */
    4141        #ifdef _SERIAL_
    42                 MatlabWriteResults();
     42                MatlabWriteResults(pdataref,parameters,results);
    4343        #else
    44                 FileWriteResults();
     44                FileWriteResults(parameters,results);
    4545        #endif
    4646}
  • issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.h

    r4163 r4166  
    1616
    1717#ifdef _SERIAL_
     18#include <mex.h>
    1819void OutputResultsx(mxArray** pdataref, DataSet* elements, DataSet* loads, DataSet* nodes, DataSet* vertices, DataSet* materials, Parameters* parameters,DataSet* results);
     20void MatlabWriteResults(mxArray** pdataref, Parameters* parameters, DataSet* results);
    1921#else
    2022void OutputResultsx(DataSet* elements, DataSet* loads, DataSet* nodes, DataSet* vertices, DataSet* materials, Parameters* parameters,DataSet* results);
     23void FileWriteResults(Parameters* parameters, DataSet* results);
    2124#endif
    2225
    2326/* local prototypes: */
    2427void ElementResultsToPatch(DataSet* elements, DataSet* loads, DataSet* nodes, DataSet* vertices, DataSet* materials, Parameters* parameters,DataSet* results);
    25 void FileWriteResults(Parameters* parameters, DataSet* results);
    26 void MatlabWriteResults(mxArray** pdataref, Parameters* parameters, DataSet* results);
    2728
    2829#endif  /* _OUTPUTRESULTS_H */
  • issm/trunk/src/c/objects/ExternalResults/BoolExternalResult.cpp

    r4143 r4166  
    177177}
    178178/*}}}1*/
     179/*FUNCTION BoolExternalResult::GetResultName(void); {{{1*/
     180char* BoolExternalResult::GetResultName(void){
     181        return  EnumAsString(this->enum_type);
     182}
     183/*}}}*/
     184/*FUNCTION BoolExternalResult::SetMatlabField(mxArray* dataref);{{{1*/
     185#ifdef _SERIAL_
     186char* BoolExternalResult::SetMatlabField(mxArray* dataref){
     187
     188        char* name=NULL;
     189        name=this->GetResultName();
     190        mxSetField( dataref, 0, name,mxCreateDoubleScalar((double)value));
     191}
     192#endif
     193/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/BoolExternalResult.h

    r4139 r4166  
    6666                int   EnumType(){return enum_type;}
    6767                void  WriteData(FILE* fid);
     68                char* GetResultName(void);
     69            #ifdef _SERIAL_
     70                void  SetMatlabField(mxArray* dataref);
     71                #endif
    6872                /*}}}*/
    6973};
  • issm/trunk/src/c/objects/ExternalResults/DoubleExternalResult.cpp

    r4143 r4166  
    173173}
    174174/*}}}1*/
     175/*FUNCTION DoubleExternalResult::GetResultName(void); {{{1*/
     176char* DoubleExternalResult::GetResultName(void){
     177        return  EnumAsString(this->enum_type);
     178}
     179/*}}}*/
     180/*FUNCTION DoubleExternalResult::SetMatlabField(mxArray* dataref);{{{1*/
     181#ifdef _SERIAL_
     182char* DoubleExternalResult::SetMatlabField(mxArray* dataref){
     183
     184        char* name=NULL;
     185        name=this->GetResultName();
     186        mxSetField( dataref, 0, name,mxCreateDoubleScalar(value));
     187}
     188#endif
     189/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/DoubleExternalResult.h

    r4139 r4166  
    6666                int   EnumType(){return enum_type;}
    6767                void  WriteData(FILE* fid);
     68                char* GetResultName(void);
     69                #ifdef _SERIAL_
     70                void  SetMatlabField(mxArray* dataref);
     71                #endif
    6872                /*}}}*/
    6973};
  • issm/trunk/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp

    r4143 r4166  
    199199}
    200200/*}}}1*/
     201/*FUNCTION DoubleMatExternalResult::GetResultName(void); {{{1*/
     202char* DoubleMatExternalResult::GetResultName(void){
     203        return  EnumAsString(this->enum_type);
     204}
     205/*}}}*/
     206/*FUNCTION DoubleMatExternalResult::SetMatlabField(mxArray* dataref);{{{1*/
     207#ifdef _SERIAL_
     208char* DoubleMatExternalResult::SetMatlabField(mxArray* dataref){
     209
     210        mxArray* pfield=NULL;
     211        mxArray* pfield2=NULL;
     212        double* doublemat=NULL;
     213        int M,N;
     214        char* name=NULL;
     215        double* doublemat=NULL;
     216
     217        /*Make a copy of the value, to be used by matlab: */
     218        doublemat=(double*)xmalloc(M*N*sizeof(double));
     219        memcpy(doublemat,values,M*N*sizeof(double));
     220
     221        /*recover name: */
     222        name=this->GetResultName();
     223                               
     224        /*create matlab matrix: */
     225        pfield=mxCreateDoubleMatrix(0,0,mxREAL);
     226        mxSetM(pfield,N);
     227        mxSetN(pfield,M);
     228        mxSetPr(pfield,doublemat);
     229       
     230        /*transpose the matrix, from c to matlab format */
     231        mexCallMATLAB(1,&pfield2, 1, &pfield, "'");
     232
     233        /*set tranpose matrix inside the dataref structure: */
     234        mxSetField( dataref, 0, name,pfield2);
     235}
     236#endif
     237/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/DoubleMatExternalResult.h

    r4139 r4166  
    6666                int   EnumType(){return enum_type;}
    6767                void  WriteData(FILE* fid);
     68                char* GetResultName(void);
     69                #ifdef _SERIAL_
     70                void  SetMatlabField(mxArray* dataref);
     71                #endif
    6872                /*}}}*/
    6973};
  • issm/trunk/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp

    r4143 r4166  
    195195}
    196196/*}}}1*/
     197/*FUNCTION DoubleVecExternalResult::GetResultName(void); {{{1*/
     198char* DoubleVecExternalResult::GetResultName(void){
     199        return  EnumAsString(this->enum_type);
     200}
     201/*}}}*/
     202/*FUNCTION DoubleVecExternalResult::SetMatlabField(mxArray* dataref);{{{1*/
     203#ifdef _SERIAL_
     204char* DoubleVecExternalResult::SetMatlabField(mxArray* dataref){
     205
     206        mxArray* pfield=NULL;
     207        double* doublemat=NULL;
     208        int M;
     209        char* name=NULL;
     210        double* doublevec=NULL;
     211
     212        /*Make a copy of the value, to be used by matlab: */
     213        doublevec=(double*)xmalloc(M*sizeof(double));
     214        memcpy(doublevec,values,M*sizeof(double));
     215
     216        /*recover name: */
     217        name=this->GetResultName();
     218                               
     219        /*create matlab matrix: */
     220        pfield=mxCreateDoubleMatrix(0,0,mxREAL);
     221        mxSetM(pfield,M);
     222        mxSetN(pfield,1);
     223        mxSetPr(pfield,doublevec);
     224        mxSetField( dataref, 0, name,pfield);
     225
     226}
     227#endif
     228/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/DoubleVecExternalResult.h

    r4139 r4166  
    6565                int   EnumType(){return enum_type;}
    6666                void  WriteData(FILE* fid);
     67                char* GetResultName(void);
     68                #ifdef _SERIAL_
     69                void  SetMatlabField(mxArray* dataref);
     70                #endif
    6771                /*}}}*/
    6872};
  • issm/trunk/src/c/objects/ExternalResults/ExternalResult.h

    r4149 r4166  
    3333                virtual int   EnumType()=0;
    3434                virtual void  WriteData(FILE* fid)=0;
     35                virtual char* GetResultName(void)=0;
     36                #ifdef _SERIAL_
     37                virtual void  SetMatlabField(mxArray* dataref)=0;
     38                #endif
    3539                /*}}}*/
    3640};
  • issm/trunk/src/c/objects/ExternalResults/IntExternalResult.cpp

    r4143 r4166  
    177177}
    178178/*}}}1*/
     179/*FUNCTION IntExternalResult::GetResultName(void); {{{1*/
     180char* IntExternalResult::GetResultName(void){
     181        return  EnumAsString(this->enum_type);
     182}
     183/*}}}*/
     184/*FUNCTION IntExternalResult::SetMatlabField(mxArray* dataref);{{{1*/
     185#ifdef _SERIAL_
     186char* IntExternalResult::SetMatlabField(mxArray* dataref){
     187
     188        char* name=NULL;
     189        name=this->GetResultName();
     190        mxSetField( dataref, 0, name,mxCreateIntScalar(value));
     191}
     192#endif
     193/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/IntExternalResult.h

    r4139 r4166  
    6666                int   EnumType(){return enum_type;}
    6767                void  WriteData(FILE* fid);
     68                char* GetResultName(void);
     69                #ifdef _SERIAL_
     70                void  SetMatlabField(mxArray* dataref);
     71                #endif
    6872                /*}}}*/
    6973};
  • issm/trunk/src/c/objects/ExternalResults/PetscVecExternalResult.cpp

    r4143 r4166  
    233233}
    234234/*}}}1*/
     235/*FUNCTION PetscVecExternalResult::GetResultName(void); {{{1*/
     236char* PetscVecExternalResult::GetResultName(void){
     237        return  EnumAsString(this->enum_type);
     238}
     239/*}}}*/
     240/*FUNCTION PetscVecExternalResult::SetMatlabField(mxArray* dataref);{{{1*/
     241#ifdef _SERIAL_
     242void  PetscVecExternalResult::SetMatlabField(mxArray* dataref){
     243
     244        mxArray* pfield=NULL;
     245        char* name=NULL;
     246        double* doublevec=NULL;
     247        int M;
     248       
     249        VecToMPISerial(&doublevec,value);
     250        VecGetSize(value,&M);
     251        name=this->GetResultName();
     252       
     253        pfield=mxCreateDoubleMatrix(0,0,mxREAL);
     254        mxSetM(pfield,M);
     255        mxSetN(pfield,1);
     256        mxSetPr(pfield,doublevec);
     257       
     258        mxSetField( dataref, 0, name, pfield);
     259}
     260#endif
     261/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/PetscVecExternalResult.h

    r4139 r4166  
    6464                int   EnumType(){return enum_type;}
    6565                void  WriteData(FILE* fid);
     66                char* GetResultName(void);
     67                #ifdef _SERIAL_
     68                void  SetMatlabField(mxArray* dataref);
     69                #endif
    6670                /*}}}*/
    6771};
  • issm/trunk/src/c/objects/ExternalResults/StringExternalResult.cpp

    r4139 r4166  
    188188}
    189189/*}}}1*/
     190/*FUNCTION StringExternalResult::GetResultName(void); {{{1*/
     191char* StringExternalResult::GetResultName(void){
     192        return  EnumAsString(this->enum_type);
     193}
     194/*}}}*/
     195/*FUNCTION StringExternalResult::SetMatlabField(mxArray* dataref);{{{1*/
     196#ifdef _SERIAL_
     197void  StringExternalResult::SetMatlabField(mxArray* dataref){
     198       
     199        char* name=NULL;
     200
     201        name=this->GetResultName();
     202        mxSetField( dataref, 0, name, mxCreateString(value));
     203}
     204#endif
     205/*}}}*/
  • issm/trunk/src/c/objects/ExternalResults/StringExternalResult.h

    r4139 r4166  
    6565                int   EnumType(){return enum_type;}
    6666                void  WriteData(FILE* fid);
     67                char* GetResultName(void);
     68                #ifdef _SERIAL_
     69                void  SetMatlabField(mxArray* dataref);
     70                #endif
    6771                /*}}}*/
    6872};
  • issm/trunk/src/c/objects/FemModel.h

    r4055 r4166  
    1212class DataSet;
    1313class Parameters;
    14 class DofVec;
    1514class NodeSets;
    1615/*}}}*/
     
    3736                DataSet*            results; //results that cannot be fit into the elements (such as one time constants, arrays, strings, etc ...)
    3837
    39                 DofVec*             partition; //one partitioning for all elements
    40                 DofVec*             tpartition;
     38                Vec                 partition; //one partitioning for all elements
     39                Vec                 tpartition;
    4140               
    4241                //multiple  sets of matrices/vectors for each analysis_type. m stands for multiple
  • issm/trunk/src/c/objects/objects.h

    r4143 r4166  
    9292#include "./OptArgs.h"
    9393#include "./OptPars.h"
    94 #include "./DofVec.h"
    9594
    9695/*Bamg: */
Note: See TracChangeset for help on using the changeset viewer.