Changeset 11001


Ignore:
Timestamp:
12/01/11 10:14:29 (13 years ago)
Author:
Mathieu Morlighem
Message:

Results on vertices are now averaged using node connectivity as in PatchToVec

Location:
issm/trunk-jpl/src/c
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp

    r10522 r11001  
    4747        iomodel->FetchData(4,MeshElementsEnum,MeshElementconnectivityEnum,MaterialsRheologyBEnum,MaterialsRheologyNEnum);
    4848        #ifdef _HAVE_THREED_
    49         if(dim==3)          iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
     49        if(dim==3)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
    5050        #endif
    5151        if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
     
    7676
    7777        /*Fetch data:*/
    78         iomodel->FetchData(5,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum);
     78        iomodel->FetchData(6,MeshElementsEnum,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum);
     79        CreateNumberNodeToElementConnectivity(iomodel);
    7980       
    8081        for (i=0;i<numberofvertices;i++){
     
    8990
    9091        /*Free data: */
    91         iomodel->DeleteData(5,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum);
     92        iomodel->DeleteData(6,MeshElementsEnum,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum);
    9293
    9394        /*Assign output pointer: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp

    r9733 r11001  
    2727        /*output*/
    2828        int* connectivity=NULL;
     29
     30        /*Check that this has not been done yet*/
     31        if(iomodel->numbernodetoelementconnectivity) return;
    2932
    3033        /*Fetch parameters: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp

    r10522 r11001  
    4545        /*First fetch data: */
    4646        iomodel->FetchData(7,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MeshElementsEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
    47         CreateNumberNodeToElementConnectivity(iomodel);
    4847
    4948        for (i=0;i<numberofvertices;i++){
  • issm/trunk-jpl/src/c/objects/ElementResults/BoolElementResult.cpp

    r10990 r11001  
    185185/*}}}*/
    186186/*FUNCTION BoolElementResult::GetVectorFromResults{{{1*/
    187 void BoolElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){
     187void BoolElementResult::GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs){
    188188
    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);
     189        _error_("cannot return vector on vertices");
    199190} /*}}}*/
    200191/*FUNCTION BoolElementResult::GetElementVectorFromResults{{{1*/
  • issm/trunk-jpl/src/c/objects/ElementResults/BoolElementResult.h

    r10990 r11001  
    5353                /*BoolElementResult management: {{{1*/
    5454                int   InstanceEnum();
    55                 void GetVectorFromResults(Vec vector,int* doflist,int numdofs);
     55                void GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs);
    5656                void GetElementVectorFromResults(Vec vector,int dof);
    5757                /*}}}*/
  • issm/trunk-jpl/src/c/objects/ElementResults/DoubleElementResult.h

    r10990 r11001  
    5353                /*DoubleElementResult management: {{{1*/
    5454                int   InstanceEnum();
    55                 void GetVectorFromResults(Vec vector,int* doflist,int numdofs){_error_("not implemented");};
     55                void GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs){_error_("not implemented");};
    5656                void GetElementVectorFromResults(Vec vector,int dof){_error_("not implemented");};
    5757                /*}}}*/
  • issm/trunk-jpl/src/c/objects/ElementResults/ElementResult.h

    r10990 r11001  
    2525                virtual void    PatchFill(int row, Patch* patch)=0;
    2626                virtual int     InstanceEnum()=0;
    27                 virtual void    GetVectorFromResults(Vec vector,int* doflist,int numdof)=0;
     27                virtual void    GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdof)=0;
    2828                virtual void    GetElementVectorFromResults(Vec vector,int dof)=0;
    2929
  • issm/trunk-jpl/src/c/objects/ElementResults/PentaVertexElementResult.cpp

    r10990 r11001  
    195195/*}}}*/
    196196/*FUNCTION PentaVertexElementResult::GetVectorFromResults{{{1*/
    197 void PentaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){
     197void PentaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs){
     198
     199        double data[6];
    198200
    199201        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);
     202        for(int i=0;i<6;i++) data[i]=this->values[i]/(double)connectivitylist[i];
     203        VecSetValues(vector,numdofs,doflist,(const double*)&data,ADD_VALUES);
    201204
    202205} /*}}}*/
  • issm/trunk-jpl/src/c/objects/ElementResults/PentaVertexElementResult.h

    r10990 r11001  
    5252                /*PentaVertexElementResult management: {{{1*/
    5353                int   InstanceEnum();
    54                 void GetVectorFromResults(Vec vector,int* doflist,int numdofs);
     54                void GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs);
    5555                void GetElementVectorFromResults(Vec vector,int dof);
    5656                /*}}}*/
  • issm/trunk-jpl/src/c/objects/ElementResults/TriaVertexElementResult.cpp

    r10990 r11001  
    184184/*}}}*/
    185185/*FUNCTION TriaVertexElementResult::GetVectorFromResults{{{1*/
    186 void TriaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){
     186void TriaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs){
     187
     188        double data[3];
    187189
    188190        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);
     191        for(int i=0;i<3;i++) data[i]=this->values[i]/(double)connectivitylist[i];
     192        VecSetValues(vector,numdofs,doflist,(const double*)&data,ADD_VALUES);
    190193
    191194} /*}}}*/
  • issm/trunk-jpl/src/c/objects/ElementResults/TriaVertexElementResult.h

    r10990 r11001  
    5151                /*TriaVertexElementResult management: {{{1*/
    5252                int   InstanceEnum();
    53                 void GetVectorFromResults(Vec vector,int* doflist,int numdofs);
     53                void GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs);
    5454                void GetElementVectorFromResults(Vec vector,int dof);
    5555                /*}}}*/
  • issm/trunk-jpl/src/c/objects/Elements/Penta.cpp

    r10996 r11001  
    817817}
    818818/*}}}*/
     819/*FUNCTION Penta::GetConnectivityList {{{1*/
     820void  Penta::GetConnectivityList(int* connectivity){
     821        for(int i=0;i<NUMVERTICES;i++) connectivity[i]=nodes[i]->GetConnectivity();
     822}
     823/*}}}*/
    819824/*FUNCTION Penta::GetElementType {{{1*/
    820825int Penta::GetElementType(){
     
    11411146void  Penta::GetVectorFromResults(Vec vector,int offset,int interp){
    11421147
    1143         /*Prepare index list*/
    1144         int doflist1[NUMVERTICES];
    1145         this->GetSidList(&doflist1[0]);
    1146 
    11471148        /*Get result*/
    11481149        ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset);
    11491150        if(interp==P1Enum){
    1150                 elementresult->GetVectorFromResults(vector,&doflist1[0],NUMVERTICES);
     1151                int doflist1[NUMVERTICES];
     1152                int connectivity[NUMVERTICES];
     1153                this->GetSidList(&doflist1[0]);
     1154                this->GetConnectivityList(&connectivity[0]);
     1155                elementresult->GetVectorFromResults(vector,&doflist1[0],&connectivity[0],NUMVERTICES);
    11511156        }
    11521157        else if(interp==P0Enum){
  • issm/trunk-jpl/src/c/objects/Elements/Penta.h

    r10990 r11001  
    169169                void      GetDofList1(int* doflist);
    170170                void    GetSidList(int* sidlist);
     171                void    GetConnectivityList(int* connectivity);
    171172                int     GetElementType(void);
    172173                void    GetElementSizes(double* hx,double* hy,double* hz);
  • issm/trunk-jpl/src/c/objects/Elements/Tria.cpp

    r10996 r11001  
    11781178/*FUNCTION Tria::GetSidList {{{1*/
    11791179void  Tria::GetSidList(int* sidlist){
    1180 
    1181         int i;
    1182         for(i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->GetSidList();
    1183 
     1180        for(int i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->GetSidList();
     1181}
     1182/*}}}*/
     1183/*FUNCTION Tria::GetConnectivityList {{{1*/
     1184void  Tria::GetConnectivityList(int* connectivity){
     1185        for(int i=0;i<NUMVERTICES;i++) connectivity[i]=nodes[i]->GetConnectivity();
    11841186}
    11851187/*}}}*/
     
    12561258void  Tria::GetVectorFromResults(Vec vector,int offset,int interp){
    12571259
    1258         /*Prepare index list*/
    1259         int doflist1[NUMVERTICES];
    1260         this->GetSidList(&doflist1[0]);
    1261 
    12621260        /*Get result*/
    12631261        ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset);
    12641262        if(interp==P1Enum){
    1265                 elementresult->GetVectorFromResults(vector,&doflist1[0],NUMVERTICES);
     1263                int doflist1[NUMVERTICES];
     1264                int connectivity[NUMVERTICES];
     1265                this->GetSidList(&doflist1[0]);
     1266                this->GetConnectivityList(&connectivity[0]);
     1267                elementresult->GetVectorFromResults(vector,&doflist1[0],&connectivity[0],NUMVERTICES);
    12661268        }
    12671269        else if(interp==P0Enum){
  • issm/trunk-jpl/src/c/objects/Elements/Tria.h

    r10990 r11001  
    183183                void             GetDofList1(int* doflist);
    184184                void           GetSidList(int* sidlist);
     185                void           GetConnectivityList(int* connectivity);
    185186                void           GetInputListOnVertices(double* pvalue,int enumtype);
    186187                void           GetInputListOnVertices(double* pvalue,int enumtype,double defaultvalue);
  • issm/trunk-jpl/src/c/objects/Node.cpp

    r10576 r11001  
    6565        if (iomodel->Data(MaskVertexongroundediceEnum))
    6666         this->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,(IssmBool)iomodel->Data(MaskVertexongroundediceEnum)[io_index]));
    67         if (iomodel->numbernodetoelementconnectivity)
    68          this->inputs->AddInput(new IntInput(NumberNodeToElementConnectivityEnum,(IssmInt)iomodel->numbernodetoelementconnectivity[io_index]));
    6967        if (analysis_type==DiagnosticHorizAnalysisEnum)
    7068         this->inputs->AddInput(new IntInput(ApproximationEnum,(IssmInt)iomodel->Data(FlowequationVertexEquationEnum)[io_index]));
     
    664662/*FUNCTION Node::GetConnectivity {{{1*/
    665663int Node::GetConnectivity(){
    666         int connectivity;
    667 
    668         /*recover parameters: */
    669         inputs->GetInputValue(&connectivity,NumberNodeToElementConnectivityEnum);
    670 
    671         return connectivity;
     664
     665        Vertex*  vertex=NULL;
     666        vertex=(Vertex*)hvertex->delivers();
     667        return vertex->connectivity;
    672668}
    673669/*}}}*/
  • issm/trunk-jpl/src/c/objects/Vertex.cpp

    r9883 r11001  
    2424/*}}}*/
    2525/*FUNCTION Vertex::Vertex(int vertex_id, double vertex_x, double vertex_y, double vertex_z, double vertex_sigma){{{1*/
    26 Vertex::Vertex(int vertex_id, int vertex_sid,double vertex_x, double vertex_y, double vertex_z, double vertex_sigma){
    27         this->Init(vertex_id, vertex_sid,vertex_x, vertex_y, vertex_z, vertex_sigma);
     26Vertex::Vertex(int vertex_id, int vertex_sid,double vertex_x, double vertex_y, double vertex_z, double vertex_sigma,int vertex_connectivity){
     27        this->Init(vertex_id, vertex_sid,vertex_x, vertex_y, vertex_z, vertex_sigma,vertex_connectivity);
    2828}
    2929/*}}}*/
     
    3131Vertex::Vertex(int vertex_id, int vertex_sid,int i, IoModel* iomodel){
    3232
    33         this->Init(vertex_id, vertex_sid, iomodel->Data(MeshXEnum)[i],iomodel->Data(MeshYEnum)[i],iomodel->Data(MeshZEnum)[i],(iomodel->Data(MeshZEnum)[i]-iomodel->Data(BedEnum)[i])/(iomodel->Data(ThicknessEnum)[i]));
     33        _assert_(iomodel->Data(MeshXEnum) && iomodel->Data(MeshYEnum) && iomodel->Data(MeshZEnum));
     34        _assert_(iomodel->Data(BedEnum) && iomodel->Data(ThicknessEnum) && iomodel->numbernodetoelementconnectivity);
     35
     36        this->Init(vertex_id, vertex_sid, iomodel->Data(MeshXEnum)[i],iomodel->Data(MeshYEnum)[i],iomodel->Data(MeshZEnum)[i],(iomodel->Data(MeshZEnum)[i]-iomodel->Data(BedEnum)[i])/(iomodel->Data(ThicknessEnum)[i]),iomodel->numbernodetoelementconnectivity[i]);
    3437
    3538}
     
    4144/*}}}*/
    4245/*FUNCTION Vertex::Init{{{1*/
    43 void Vertex::Init(int vertex_id, int vertex_sid,double vertex_x, double vertex_y, double vertex_z, double vertex_sigma){
     46void Vertex::Init(int vertex_id, int vertex_sid,double vertex_x, double vertex_y, double vertex_z, double vertex_sigma,int vertex_connectivity){
    4447
    4548        /*all the initialization has been done by the initializer, just fill in the id: */
     
    5053        this->z=vertex_z;
    5154        this->sigma=vertex_sigma;
     55        this->connectivity=vertex_connectivity;
    5256        this->dof=UNDEF;
    5357
     
    6771        printf("   z: %g\n",z);
    6872        printf("   sigma: %g\n",sigma);
     73        printf("   connectivity: %g\n",connectivity);
    6974        printf("   dof: %i\n",dof);
    7075        printf("   clone: %i\n",clone);
     
    7479/*}}}*/
    7580/*FUNCTION Vertex::DeepEcho{{{1*/
    76 
    7781void Vertex::DeepEcho(void){
    7882        this->Echo();
     
    111115        memcpy(marshalled_dataset,&z,sizeof(z));marshalled_dataset+=sizeof(z);
    112116        memcpy(marshalled_dataset,&sigma,sizeof(sigma));marshalled_dataset+=sizeof(sigma);
     117        memcpy(marshalled_dataset,&connectivity,sizeof(connectivity));marshalled_dataset+=sizeof(connectivity);
    113118        memcpy(marshalled_dataset,&dof,sizeof(dof));marshalled_dataset+=sizeof(dof);
    114119        memcpy(marshalled_dataset,&clone,sizeof(clone));marshalled_dataset+=sizeof(clone);
     
    127132                sizeof(z)+
    128133                sizeof(sigma)+
     134                sizeof(connectivity)+
    129135                sizeof(dof)+
    130136                sizeof(clone)+
     
    150156        memcpy(&z,marshalled_dataset,sizeof(z));marshalled_dataset+=sizeof(z);
    151157        memcpy(&sigma,marshalled_dataset,sizeof(sigma));marshalled_dataset+=sizeof(sigma);
     158        memcpy(&connectivity,marshalled_dataset,sizeof(connectivity));marshalled_dataset+=sizeof(connectivity);
    152159        memcpy(&dof,marshalled_dataset,sizeof(dof));marshalled_dataset+=sizeof(dof);
    153160        memcpy(&clone,marshalled_dataset,sizeof(clone));marshalled_dataset+=sizeof(clone);
     
    259266
    260267/*Vertex management: */
     268/*FUNCTION Vertex::Connectivity{{{1*/
     269int    Vertex::Connectivity(void){return connectivity;}
     270/*}}}*/
    261271/*FUNCTION Vertex::Sid{{{1*/
    262272int    Vertex::Sid(void){ return sid; }
  • issm/trunk-jpl/src/c/objects/Vertex.h

    r9883 r11001  
    2121        public:
    2222
    23                 int  id;
    24                 int  sid; //sid for "serial" id, ie the rank of this vertex in the vertices dataset, if the dataset was serial on 1 cpu.
     23                int    id;
     24                int    sid;            //sid for "serial" id, ie the rank of this vertex in the vertices dataset, if the dataset was serial on 1 cpu.
    2525                double x;
    2626                double y;
    2727                double z;
    28                 double sigma; //sigma coordinate: (z-bed)/thickness
     28                double sigma;          //sigma coordinate: (z-bed)/thickness
     29                int    connectivity;   //number of vertices connected to this vertex
    2930
    3031                /*dof management: */
     
    3435                /*Vertex constructors, destructors {{{1*/
    3536                Vertex();
    36                 Vertex(int id, int sid,double x, double y, double z, double sigma);
    37                 void Init(int id, int sid, double x, double y, double z, double sigma);
     37                Vertex(int id, int sid,double x, double y, double z, double sigma, int connectivity);
     38                void Init(int id, int sid, double x, double y, double z, double sigma,int connectivity);
    3839                Vertex(int id, int sid, int i, IoModel* iomodel);
    3940                ~Vertex();
     
    6162                /*Vertex management: {{{1*/
    6263                int   Sid(void);
     64                int   Connectivity(void);
    6365                void  UpdatePosition(double* thickness,double* bed);
    6466                /*}}}*/
Note: See TracChangeset for help on using the changeset viewer.