Changeset 15435
- Timestamp:
- 07/05/13 08:51:41 (12 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 1 added
- 9 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/Makefile.am
r15430 r15435 243 243 ./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp\ 244 244 ./modules/ModelProcessorx/NodesPartitioning.cpp\ 245 ./modules/ModelProcessorx/ProcessMesh2d.cpp\246 245 ./modules/ModelProcessorx/SortDataSets.cpp\ 247 246 ./modules/ModelProcessorx/UpdateCounters.cpp\ … … 249 248 ./modules/ModelProcessorx/CreateParameters.cpp\ 250 249 ./modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\ 250 ./modules/ModelProcessorx/CreateEdges.cpp\ 251 ./modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp\ 251 252 ./modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp\ 252 253 ./modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp\ -
issm/trunk-jpl/src/c/classes/IoModel.cpp
r15430 r15435 31 31 this->my_vertices=NULL; 32 32 33 this->dim=-1; 34 this->numberofvertices=-1; 35 this->numberofelements=-1; 36 this->numberofedges=-1; 33 37 this->elements=NULL; 34 38 this->edges=NULL; 39 this->elementtoedgeconnectivity =NULL; 35 40 this->singlenodetoelementconnectivity=NULL; 36 41 this->numbernodetoelementconnectivity=NULL; … … 67 72 this->my_nodes = NULL; 68 73 this->my_vertices = NULL; 74 69 75 FetchData(&this->dim,MeshDimensionEnum); 70 76 FetchData(&this->numberofvertices,MeshNumberofverticesEnum); … … 72 78 FetchData(&this->elements,NULL,NULL,MeshElementsEnum); 73 79 this->edges = NULL; 74 this->element edgeconnectivity= NULL;80 this->elementtoedgeconnectivity = NULL; 75 81 this->singlenodetoelementconnectivity = NULL; 76 82 this->numbernodetoelementconnectivity = NULL; … … 107 113 xDelete<int>(this->elements); 108 114 xDelete<int>(this->edges); 109 xDelete<int>(this->element edgeconnectivity);115 xDelete<int>(this->elementtoedgeconnectivity); 110 116 xDelete<int>(this->singlenodetoelementconnectivity); 111 117 xDelete<int>(this->numbernodetoelementconnectivity); -
issm/trunk-jpl/src/c/classes/IoModel.h
r15430 r15435 38 38 int *elements; 39 39 int *edges; 40 int *element edgeconnectivity;40 int *elementtoedgeconnectivity; 41 41 int *singlenodetoelementconnectivity; 42 42 int *numbernodetoelementconnectivity; -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
r15430 r15435 26 26 27 27 /*Get edges and elements*/ 28 ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);28 CreateEdges(iomodel); 29 29 iomodel->FetchData(1,ThicknessEnum); 30 30 -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
r15434 r15435 1 /*!\file: ProcessMesh2d.cpp2 * \brief: create connectivity tables from index1 /*!\file: CreateEdges.cpp 2 * \brief: create edges from 2d mesh 3 3 */ 4 4 5 #include "../../classes/classes.h" 5 6 #include "../../shared/shared.h" 6 7 7 void ProcessMesh2d(int** pedges,int* pnumberofedges,int** pelement_edge_connectivity,int* index,int numberofelements,int numberofvertices){8 void CreateEdges(IoModel* iomodel){ 8 9 9 /*If mesh already processed, return*/ 10 if(*pedges) return; 10 /*If edges are already present, exit*/ 11 if(iomodel->edges) return; 12 13 /*Check Iomodel properties*/ 14 if(iomodel->dim!=2) _error_("only 2d model are supported"); 15 if(iomodel->numberofvertices<3) _error_("not enough elements in mesh"); 16 _assert_(iomodel->elements); 11 17 12 18 /*Intermediaries*/ … … 15 21 int maxnbe,nbe; 16 22 17 /*Checks in debugging mode*/18 _assert_(index);19 20 23 /*Maximum number of edges*/ 21 maxnbe = 3* numberofelements;24 maxnbe = 3*iomodel->numberofelements; 22 25 23 26 /*Initialize intermediaries*/ 24 int* edgestemp = xNew<int>(maxnbe*4); /*vertex1 vertex2 element1 element2*/ 25 bool* exchange = xNewZeroInit<bool>(maxnbe); 26 int* element_edge_connectivity = xNew<int>(numberofelements*3); /*edge1 edge2 edge3*/ 27 for(i=0;i<maxnbe;i++) edgestemp[i*4+3]=-1; 27 int* edgestemp = xNew<int>(maxnbe*4); /*format: [vertex1 vertex2 element1 element2] */ 28 bool* exchange = xNewZeroInit<bool>(maxnbe); /*Edges are ordered, we need to keep track of vertex swapping*/ 29 for(i=0;i<maxnbe;i++) edgestemp[i*4+3]=-1; /*Initialize last column of edges as -1 (boundary edge) */ 28 30 29 31 /*Initialize chain*/ 30 int* head_minv = xNew<int>( numberofvertices);32 int* head_minv = xNew<int>(iomodel->numberofvertices); 31 33 int* next_edge = xNew<int>(maxnbe); 32 for(i=0;i< numberofvertices;i++) head_minv[i]=-1;34 for(i=0;i<iomodel->numberofvertices;i++) head_minv[i]=-1; 33 35 34 36 /*Initialize number of edges*/ 35 37 nbe = 0; 36 38 37 for(i=0;i< numberofelements;i++){39 for(i=0;i<iomodel->numberofelements;i++){ 38 40 for(j=0;j<3;j++){ 39 41 40 42 /*Get the two indices of the edge number j of the ith triangle*/ 41 v1 = i ndex[i*3+j];43 v1 = iomodel->elements[i*3+j]; 42 44 if(j==2) 43 v2 = i ndex[i*3+0];45 v2 = iomodel->elements[i*3+0]; 44 46 else 45 v2 = i ndex[i*3+j+1];47 v2 = iomodel->elements[i*3+j+1]; 46 48 47 49 /*v1 and v2 must be sorted*/ … … 54 56 55 57 /*Go through all processed edges connected to v1 and check whether we have seen this edge yet*/ 56 _assert_(v1>=0 & v1< numberofvertices);58 _assert_(v1>=0 & v1<iomodel->numberofvertices); 57 59 for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){ 58 60 if(edgestemp[e*4+1]==v2){ 59 61 exist = true; 60 62 edgestemp[e*4+3]=i+1; 61 element_edge_connectivity[i*3+j]=e;62 63 break; 63 64 } … … 68 69 _assert_(nbe<maxnbe); 69 70 70 /*Update edges and element_edge_connectivity*/71 /*Update edges*/ 71 72 edgestemp[nbe*4+0] = v1; 72 73 edgestemp[nbe*4+1] = v2; 73 74 edgestemp[nbe*4+2] = i+1; 74 element_edge_connectivity[i*3+j]=nbe; 75 if(v1!=index[i*3+j]) exchange[nbe]=true; 75 if(v1!=iomodel->elements[i*3+j]) exchange[nbe]=true; 76 76 77 77 /*Update chain*/ … … 107 107 108 108 /*Assign output pointers*/ 109 if(pedges) *pedges = edges; 110 else xDelete<int>(edges); 111 112 if(pnumberofedges) *pnumberofedges = nbe; 113 114 if(pelement_edge_connectivity) *pelement_edge_connectivity = element_edge_connectivity; 115 else xDelete<int>(element_edge_connectivity); 109 iomodel->edges = edges; 110 iomodel->numberofedges = nbe; 116 111 } -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp
r15428 r15435 2 2 * \brief: create connectivity table 3 3 */ 4 5 #ifdef HAVE_CONFIG_H6 #include <config.h>7 #else8 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"9 #endif10 4 11 5 #include "../../shared/shared.h" -
issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
r15430 r15435 51 51 52 52 /*Quadratic element*/ 53 ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);53 CreateEdges(iomodel); 54 54 int element1,element2; 55 55 bool my_edge; -
issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
r15430 r15435 118 118 119 119 /*Connectivity*/ 120 void ProcessMesh2d(int**,int*,int**,int* index,int numberofelements,int numberofvertices); 120 void CreateEdges(IoModel* iomodel); 121 void CreateElementToEdgeConnectivity(IoModel* iomodel); 121 122 void CreateSingleNodeToElementConnectivity(IoModel* iomodel); 122 123 void CreateNumberNodeToElementConnectivity(IoModel* iomodel); -
issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
r15430 r15435 58 58 59 59 /*Get edges and elements*/ 60 ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);60 CreateEdges(iomodel); 61 61 62 62 /*Build discontinuous node partitioning … … 89 89 90 90 /*Get edges and elements*/ 91 ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);91 CreateEdges(iomodel); 92 92 93 93 /*!All elements have been partitioned above, only create elements for this CPU: */ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
r15430 r15435 29 29 30 30 /*Get edges and elements*/ 31 ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);31 CreateEdges(iomodel); 32 32 iomodel->FetchData(1,ThicknessEnum); 33 33
Note:
See TracChangeset
for help on using the changeset viewer.