Changeset 9878


Ignore:
Timestamp:
09/22/11 07:31:56 (13 years ago)
Author:
Mathieu Morlighem
Message:

Added support for P0 for results_on_vertices

Location:
issm/trunk/src/c
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/Container/Elements.cpp

    r9874 r9878  
    171171void Elements::ToResults(Results* results,Parameters* parameters,int step, double time){
    172172
     173        extern int my_rank;
     174
    173175        Patch  *patch        = NULL;
    174176        int    *resultsenums = NULL;
     
    194196                /*Loop over all results and get nodal vector*/
    195197                for(int i=0;i<numberofresults;i++){
     198                        printf("%s\n",EnumToStringx(resultsenums[i]));
    196199
    197200                        /*Get vector for result number i*/
     
    206209                        /*Serialize and add to results*/
    207210                        VecToMPISerial(&vector_serial,vector);
    208                         results->AddObject(new DoubleVecExternalResult(results->Size()+1,resultsenums[i],vector_serial,numberofvertices,step,time));
     211                        if(my_rank==0){
     212                                results->AddObject(new DoubleVecExternalResult(results->Size()+1,resultsenums[i],vector_serial,numberofvertices,step,time));
     213                        }
    209214
    210215                        /*clean up*/
     
    212217                        xfree((void**)&vector_serial);
    213218                }
    214 
    215219        }
    216220        else{
  • issm/trunk/src/c/objects/ElementResults/BoolElementResult.cpp

    r9777 r9878  
    184184}
    185185/*}}}*/
     186/*FUNCTION BoolElementResult::GetVectorFromResults{{{1*/
     187void BoolElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){
     188
     189        double *doublevalues=NULL;
     190
     191        /*Cast value to double vector*/
     192        doublevalues=(double*)xmalloc(numdofs*sizeof(double));
     193        for(int i=0;i<numdofs;i++) doublevalues[i]=double(this->value);
     194
     195        VecSetValues(vector,numdofs,doflist,(const double*)doublevalues,INSERT_VALUES);
     196
     197        /*cleanup*/
     198        xfree((void**)&doublevalues);
     199} /*}}}*/
  • issm/trunk/src/c/objects/ElementResults/BoolElementResult.h

    r9777 r9878  
    5151                /*BoolElementResult management: {{{1*/
    5252                int   EnumType();
     53                void GetVectorFromResults(Vec vector,int* doflist,int numdofs);
    5354                /*}}}*/
    5455};
  • issm/trunk/src/c/objects/ElementResults/DoubleElementResult.h

    r9777 r9878  
    5151                /*DoubleElementResult management: {{{1*/
    5252                int   EnumType();
     53                void GetVectorFromResults(Vec vector,int* doflist,int numdofs){_error_("not implemented");};
    5354                /*}}}*/
    5455};
  • issm/trunk/src/c/objects/ElementResults/ElementResult.h

    r9874 r9878  
    2323                virtual void    PatchFill(int row, Patch* patch)=0;
    2424                virtual int     EnumType()=0;
     25                virtual void    GetVectorFromResults(Vec vector,int* doflist,int numdof)=0;
    2526
    2627};
  • issm/trunk/src/c/objects/ElementResults/PentaVertexElementResult.cpp

    r9874 r9878  
    195195/*}}}*/
    196196/*FUNCTION PentaVertexElementResult::GetVectorFromResults{{{1*/
    197 void PentaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist){
    198 
    199         const int numvertices=6;
    200         VecSetValues(vector,numvertices,doflist,(const double*)this->values,INSERT_VALUES);
     197void PentaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){
     198
     199        if(numdofs!=6)_error_("Result %s is a PentaVertexElementResult and cannot write vector of %i dofs",numdofs);
     200        VecSetValues(vector,numdofs,doflist,(const double*)this->values,INSERT_VALUES);
    201201
    202202} /*}}}*/
  • issm/trunk/src/c/objects/ElementResults/PentaVertexElementResult.h

    r9874 r9878  
    5050                /*PentaVertexElementResult management: {{{1*/
    5151                int   EnumType();
    52                 void GetVectorFromResults(Vec vector,int* doflist);
     52                void GetVectorFromResults(Vec vector,int* doflist,int numdofs);
    5353                /*}}}*/
    5454
  • issm/trunk/src/c/objects/ElementResults/TriaVertexElementResult.cpp

    r9874 r9878  
    184184/*}}}*/
    185185/*FUNCTION TriaVertexElementResult::GetVectorFromResults{{{1*/
    186 void TriaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist){
     186void TriaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){
    187187
    188         const int numvertices=3;
    189         VecSetValues(vector,numvertices,doflist,(const double*)this->values,INSERT_VALUES);
     188        if(numdofs!=3)_error_("Result %s is a TriaVertexElementResult and cannot write vector of %i dofs",numdofs);
     189        VecSetValues(vector,numdofs,doflist,(const double*)this->values,INSERT_VALUES);
    190190
    191191} /*}}}*/
  • issm/trunk/src/c/objects/ElementResults/TriaVertexElementResult.h

    r9874 r9878  
    4949                /*TriaVertexElementResult management: {{{1*/
    5050                int   EnumType();
    51                 void GetVectorFromResults(Vec vector,int* doflist);
     51                void GetVectorFromResults(Vec vector,int* doflist,int numdofs);
    5252                /*}}}*/
    5353
  • issm/trunk/src/c/objects/Elements/Penta.cpp

    r9874 r9878  
    11291129void  Penta::GetVectorFromResults(Vec vector,int result_enum){
    11301130
    1131         bool found=false;
    11321131        int doflist1[NUMVERTICES];
    11331132
     
    11391138                ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
    11401139                if(elementresult->EnumType()!=result_enum) continue;
    1141                 if(elementresult->Enum()    !=PentaVertexElementResultEnum) _error_("Result %s found but is not of class PentaVertexElementResultEnum");
    1142 
    1143                 found=true;
    1144                 PentaVertexElementResult* result=(PentaVertexElementResult*)elementresult;
    1145                 result->GetVectorFromResults(vector,&doflist1[0]);
    1146         }
     1140                elementresult->GetVectorFromResults(vector,&doflist1[0],NUMVERTICES);
     1141                return;
     1142        }
     1143
     1144        _error_("Result %s not found in element",EnumToStringx(result_enum));
    11471145}
    11481146/*}}}*/
     
    20282026        int     i;
    20292027        int     numberofresults = 0;
    2030         int     *resultsenums =NULL;
     2028        int     *resultsenums   = NULL;
    20312029
    20322030        /*Checks*/
     
    20392037        }
    20402038
    2041         /*Allocate output*/
    2042         resultsenums=(int*)xmalloc(numberofresults*sizeof(int));
    2043 
    2044         /*populate enums*/
    2045         for(i=0;i<this->results->Size();i++){
    2046                 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
    2047                 resultsenums[i]=elementresult->EnumType();
     2039        if(numberofresults){
     2040
     2041                /*Allocate output*/
     2042                resultsenums=(int*)xmalloc(numberofresults*sizeof(int));
     2043
     2044                /*populate enums*/
     2045                for(i=0;i<this->results->Size();i++){
     2046                        ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
     2047                        resultsenums[i]=elementresult->EnumType();
     2048                }
    20482049        }
    20492050
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r9874 r9878  
    13201320                ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
    13211321                if(elementresult->EnumType()!=result_enum) continue;
    1322                 if(elementresult->Enum()    !=TriaVertexElementResultEnum) _error_("Result %s found but is not of class TriaVertexElementResultEnum");
    1323 
    1324                 found=true;
    1325                 TriaVertexElementResult* result=(TriaVertexElementResult*)elementresult;
    1326                 result->GetVectorFromResults(vector,&doflist1[0]);
    1327         }
     1322                elementresult->GetVectorFromResults(vector,&doflist1[0],NUMVERTICES);
     1323                return;
     1324        }
     1325
     1326        _error_("Result %s not found in element",EnumToStringx(result_enum));
    13281327}
    13291328/*}}}*/
     
    19531952        int     i;
    19541953        int     numberofresults = 0;
    1955         int     *resultsenums =NULL;
     1954        int     *resultsenums   = NULL;
    19561955
    19571956        /*Checks*/
     
    19641963        }
    19651964
    1966         /*Allocate output*/
    1967         resultsenums=(int*)xmalloc(numberofresults*sizeof(int));
    1968 
    1969         /*populate enums*/
    1970         for(i=0;i<this->results->Size();i++){
    1971                 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
    1972                 resultsenums[i]=elementresult->EnumType();
     1965        if(numberofresults){
     1966
     1967                /*Allocate output*/
     1968                resultsenums=(int*)xmalloc(numberofresults*sizeof(int));
     1969
     1970                /*populate enums*/
     1971                for(i=0;i<this->results->Size();i++){
     1972                        ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
     1973                        resultsenums[i]=elementresult->EnumType();
     1974                }
    19731975        }
    19741976
Note: See TracChangeset for help on using the changeset viewer.