Changeset 11001
- Timestamp:
- 12/01/11 10:14:29 (13 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
r10522 r11001 47 47 iomodel->FetchData(4,MeshElementsEnum,MeshElementconnectivityEnum,MaterialsRheologyBEnum,MaterialsRheologyNEnum); 48 48 #ifdef _HAVE_THREED_ 49 if(dim==3) 49 if(dim==3)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum); 50 50 #endif 51 51 if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum); … … 76 76 77 77 /*Fetch data:*/ 78 iomodel->FetchData(5,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum); 78 iomodel->FetchData(6,MeshElementsEnum,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum); 79 CreateNumberNodeToElementConnectivity(iomodel); 79 80 80 81 for (i=0;i<numberofvertices;i++){ … … 89 90 90 91 /*Free data: */ 91 iomodel->DeleteData( 5,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum);92 iomodel->DeleteData(6,MeshElementsEnum,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum); 92 93 93 94 /*Assign output pointer: */ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp
r9733 r11001 27 27 /*output*/ 28 28 int* connectivity=NULL; 29 30 /*Check that this has not been done yet*/ 31 if(iomodel->numbernodetoelementconnectivity) return; 29 32 30 33 /*Fetch parameters: */ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
r10522 r11001 45 45 /*First fetch data: */ 46 46 iomodel->FetchData(7,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MeshElementsEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum); 47 CreateNumberNodeToElementConnectivity(iomodel);48 47 49 48 for (i=0;i<numberofvertices;i++){ -
issm/trunk-jpl/src/c/objects/ElementResults/BoolElementResult.cpp
r10990 r11001 185 185 /*}}}*/ 186 186 /*FUNCTION BoolElementResult::GetVectorFromResults{{{1*/ 187 void BoolElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){187 void BoolElementResult::GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs){ 188 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); 189 _error_("cannot return vector on vertices"); 199 190 } /*}}}*/ 200 191 /*FUNCTION BoolElementResult::GetElementVectorFromResults{{{1*/ -
issm/trunk-jpl/src/c/objects/ElementResults/BoolElementResult.h
r10990 r11001 53 53 /*BoolElementResult management: {{{1*/ 54 54 int InstanceEnum(); 55 void GetVectorFromResults(Vec vector,int* doflist,int numdofs);55 void GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs); 56 56 void GetElementVectorFromResults(Vec vector,int dof); 57 57 /*}}}*/ -
issm/trunk-jpl/src/c/objects/ElementResults/DoubleElementResult.h
r10990 r11001 53 53 /*DoubleElementResult management: {{{1*/ 54 54 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");}; 56 56 void GetElementVectorFromResults(Vec vector,int dof){_error_("not implemented");}; 57 57 /*}}}*/ -
issm/trunk-jpl/src/c/objects/ElementResults/ElementResult.h
r10990 r11001 25 25 virtual void PatchFill(int row, Patch* patch)=0; 26 26 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; 28 28 virtual void GetElementVectorFromResults(Vec vector,int dof)=0; 29 29 -
issm/trunk-jpl/src/c/objects/ElementResults/PentaVertexElementResult.cpp
r10990 r11001 195 195 /*}}}*/ 196 196 /*FUNCTION PentaVertexElementResult::GetVectorFromResults{{{1*/ 197 void PentaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){ 197 void PentaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs){ 198 199 double data[6]; 198 200 199 201 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); 201 204 202 205 } /*}}}*/ -
issm/trunk-jpl/src/c/objects/ElementResults/PentaVertexElementResult.h
r10990 r11001 52 52 /*PentaVertexElementResult management: {{{1*/ 53 53 int InstanceEnum(); 54 void GetVectorFromResults(Vec vector,int* doflist,int numdofs);54 void GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs); 55 55 void GetElementVectorFromResults(Vec vector,int dof); 56 56 /*}}}*/ -
issm/trunk-jpl/src/c/objects/ElementResults/TriaVertexElementResult.cpp
r10990 r11001 184 184 /*}}}*/ 185 185 /*FUNCTION TriaVertexElementResult::GetVectorFromResults{{{1*/ 186 void TriaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){ 186 void TriaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs){ 187 188 double data[3]; 187 189 188 190 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); 190 193 191 194 } /*}}}*/ -
issm/trunk-jpl/src/c/objects/ElementResults/TriaVertexElementResult.h
r10990 r11001 51 51 /*TriaVertexElementResult management: {{{1*/ 52 52 int InstanceEnum(); 53 void GetVectorFromResults(Vec vector,int* doflist,int numdofs);53 void GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs); 54 54 void GetElementVectorFromResults(Vec vector,int dof); 55 55 /*}}}*/ -
issm/trunk-jpl/src/c/objects/Elements/Penta.cpp
r10996 r11001 817 817 } 818 818 /*}}}*/ 819 /*FUNCTION Penta::GetConnectivityList {{{1*/ 820 void Penta::GetConnectivityList(int* connectivity){ 821 for(int i=0;i<NUMVERTICES;i++) connectivity[i]=nodes[i]->GetConnectivity(); 822 } 823 /*}}}*/ 819 824 /*FUNCTION Penta::GetElementType {{{1*/ 820 825 int Penta::GetElementType(){ … … 1141 1146 void Penta::GetVectorFromResults(Vec vector,int offset,int interp){ 1142 1147 1143 /*Prepare index list*/1144 int doflist1[NUMVERTICES];1145 this->GetSidList(&doflist1[0]);1146 1147 1148 /*Get result*/ 1148 1149 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset); 1149 1150 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); 1151 1156 } 1152 1157 else if(interp==P0Enum){ -
issm/trunk-jpl/src/c/objects/Elements/Penta.h
r10990 r11001 169 169 void GetDofList1(int* doflist); 170 170 void GetSidList(int* sidlist); 171 void GetConnectivityList(int* connectivity); 171 172 int GetElementType(void); 172 173 void GetElementSizes(double* hx,double* hy,double* hz); -
issm/trunk-jpl/src/c/objects/Elements/Tria.cpp
r10996 r11001 1178 1178 /*FUNCTION Tria::GetSidList {{{1*/ 1179 1179 void 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*/ 1184 void Tria::GetConnectivityList(int* connectivity){ 1185 for(int i=0;i<NUMVERTICES;i++) connectivity[i]=nodes[i]->GetConnectivity(); 1184 1186 } 1185 1187 /*}}}*/ … … 1256 1258 void Tria::GetVectorFromResults(Vec vector,int offset,int interp){ 1257 1259 1258 /*Prepare index list*/1259 int doflist1[NUMVERTICES];1260 this->GetSidList(&doflist1[0]);1261 1262 1260 /*Get result*/ 1263 1261 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset); 1264 1262 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); 1266 1268 } 1267 1269 else if(interp==P0Enum){ -
issm/trunk-jpl/src/c/objects/Elements/Tria.h
r10990 r11001 183 183 void GetDofList1(int* doflist); 184 184 void GetSidList(int* sidlist); 185 void GetConnectivityList(int* connectivity); 185 186 void GetInputListOnVertices(double* pvalue,int enumtype); 186 187 void GetInputListOnVertices(double* pvalue,int enumtype,double defaultvalue); -
issm/trunk-jpl/src/c/objects/Node.cpp
r10576 r11001 65 65 if (iomodel->Data(MaskVertexongroundediceEnum)) 66 66 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]));69 67 if (analysis_type==DiagnosticHorizAnalysisEnum) 70 68 this->inputs->AddInput(new IntInput(ApproximationEnum,(IssmInt)iomodel->Data(FlowequationVertexEquationEnum)[io_index])); … … 664 662 /*FUNCTION Node::GetConnectivity {{{1*/ 665 663 int 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; 672 668 } 673 669 /*}}}*/ -
issm/trunk-jpl/src/c/objects/Vertex.cpp
r9883 r11001 24 24 /*}}}*/ 25 25 /*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 );26 Vertex::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); 28 28 } 29 29 /*}}}*/ … … 31 31 Vertex::Vertex(int vertex_id, int vertex_sid,int i, IoModel* iomodel){ 32 32 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]); 34 37 35 38 } … … 41 44 /*}}}*/ 42 45 /*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 ){46 void Vertex::Init(int vertex_id, int vertex_sid,double vertex_x, double vertex_y, double vertex_z, double vertex_sigma,int vertex_connectivity){ 44 47 45 48 /*all the initialization has been done by the initializer, just fill in the id: */ … … 50 53 this->z=vertex_z; 51 54 this->sigma=vertex_sigma; 55 this->connectivity=vertex_connectivity; 52 56 this->dof=UNDEF; 53 57 … … 67 71 printf(" z: %g\n",z); 68 72 printf(" sigma: %g\n",sigma); 73 printf(" connectivity: %g\n",connectivity); 69 74 printf(" dof: %i\n",dof); 70 75 printf(" clone: %i\n",clone); … … 74 79 /*}}}*/ 75 80 /*FUNCTION Vertex::DeepEcho{{{1*/ 76 77 81 void Vertex::DeepEcho(void){ 78 82 this->Echo(); … … 111 115 memcpy(marshalled_dataset,&z,sizeof(z));marshalled_dataset+=sizeof(z); 112 116 memcpy(marshalled_dataset,&sigma,sizeof(sigma));marshalled_dataset+=sizeof(sigma); 117 memcpy(marshalled_dataset,&connectivity,sizeof(connectivity));marshalled_dataset+=sizeof(connectivity); 113 118 memcpy(marshalled_dataset,&dof,sizeof(dof));marshalled_dataset+=sizeof(dof); 114 119 memcpy(marshalled_dataset,&clone,sizeof(clone));marshalled_dataset+=sizeof(clone); … … 127 132 sizeof(z)+ 128 133 sizeof(sigma)+ 134 sizeof(connectivity)+ 129 135 sizeof(dof)+ 130 136 sizeof(clone)+ … … 150 156 memcpy(&z,marshalled_dataset,sizeof(z));marshalled_dataset+=sizeof(z); 151 157 memcpy(&sigma,marshalled_dataset,sizeof(sigma));marshalled_dataset+=sizeof(sigma); 158 memcpy(&connectivity,marshalled_dataset,sizeof(connectivity));marshalled_dataset+=sizeof(connectivity); 152 159 memcpy(&dof,marshalled_dataset,sizeof(dof));marshalled_dataset+=sizeof(dof); 153 160 memcpy(&clone,marshalled_dataset,sizeof(clone));marshalled_dataset+=sizeof(clone); … … 259 266 260 267 /*Vertex management: */ 268 /*FUNCTION Vertex::Connectivity{{{1*/ 269 int Vertex::Connectivity(void){return connectivity;} 270 /*}}}*/ 261 271 /*FUNCTION Vertex::Sid{{{1*/ 262 272 int Vertex::Sid(void){ return sid; } -
issm/trunk-jpl/src/c/objects/Vertex.h
r9883 r11001 21 21 public: 22 22 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. 25 25 double x; 26 26 double y; 27 27 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 29 30 30 31 /*dof management: */ … … 34 35 /*Vertex constructors, destructors {{{1*/ 35 36 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); 38 39 Vertex(int id, int sid, int i, IoModel* iomodel); 39 40 ~Vertex(); … … 61 62 /*Vertex management: {{{1*/ 62 63 int Sid(void); 64 int Connectivity(void); 63 65 void UpdatePosition(double* thickness,double* bed); 64 66 /*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.