Changeset 23568
- Timestamp:
- 12/21/18 11:06:40 (6 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/IoModel.cpp
r23532 r23568 137 137 this->my_faces=NULL; 138 138 this->my_edges=NULL; 139 this->my_vedges=NULL; 140 this->my_hedges=NULL; 139 141 this->my_vertices=NULL; 140 142 this->epart=NULL; … … 147 149 this->numberoffaces=-1; 148 150 this->numberofedges=-1; 151 this->numberofverticaledges=-1; 152 this->numberofhorizontaledges=-1; 149 153 this->facescols=-1; 150 154 this->elements=NULL; 151 155 this->faces=NULL; 152 156 this->edges=NULL; 153 this->elementtofaceconnectivity =NULL; 154 this->elementtoedgeconnectivity =NULL; 155 this->singlenodetoelementconnectivity=NULL; 156 this->numbernodetoelementconnectivity=NULL; 157 this->verticaledges=NULL; 158 this->horizontaledges=NULL; 159 this->elementtofaceconnectivity = NULL; 160 this->elementtoedgeconnectivity = NULL; 161 this->elementtoverticaledgeconnectivity = NULL; 162 this->elementtohorizontaledgeconnectivity = NULL; 163 this->singlenodetoelementconnectivity = NULL; 164 this->numbernodetoelementconnectivity = NULL; 157 165 }/*}}}*/ 158 166 IoModel::IoModel(FILE* iomodel_handle,int solution_enum_in,bool trace,IssmPDouble* X){/*{{{*/ … … 197 205 this->my_faces = NULL; 198 206 this->my_edges = NULL; 207 this->my_vedges = NULL; 208 this->my_hedges = NULL; 199 209 this->my_vertices = NULL; 200 210 this->epart = NULL; … … 207 217 FetchData(&this->numberofelements,"md.mesh.numberofelements"); 208 218 FetchData(&this->elements,NULL,NULL,"md.mesh.elements"); 209 this->facescols = -1; 210 this->faces = NULL; 211 this->edges = NULL; 212 this->elementtofaceconnectivity = NULL; 213 this->elementtoedgeconnectivity = NULL; 214 this->singlenodetoelementconnectivity = NULL; 215 this->numbernodetoelementconnectivity = NULL; 219 this->facescols = -1; 220 this->faces = NULL; 221 this->edges = NULL; 222 this->verticaledges = NULL; 223 this->horizontaledges = NULL; 224 this->elementtofaceconnectivity = NULL; 225 this->elementtoedgeconnectivity = NULL; 226 this->elementtoverticaledgeconnectivity = NULL; 227 this->elementtohorizontaledgeconnectivity = NULL; 228 this->singlenodetoelementconnectivity = NULL; 229 this->numbernodetoelementconnectivity = NULL; 216 230 }/*}}}*/ 217 231 IoModel::~IoModel(){/*{{{*/ … … 239 253 xDelete<bool>(this->my_faces); 240 254 xDelete<bool>(this->my_edges); 255 xDelete<bool>(this->my_vedges); 256 xDelete<bool>(this->my_hedges); 241 257 xDelete<bool>(this->my_vertices); 242 258 xDelete<int>(this->epart); … … 245 261 xDelete<int>(this->faces); 246 262 xDelete<int>(this->edges); 263 xDelete<int>(this->verticaledges); 264 xDelete<int>(this->horizontaledges); 247 265 xDelete<int>(this->elementtofaceconnectivity); 248 266 xDelete<int>(this->elementtoedgeconnectivity); 267 xDelete<int>(this->elementtoverticaledgeconnectivity); 268 xDelete<int>(this->elementtohorizontaledgeconnectivity); 249 269 xDelete<int>(this->singlenodetoelementconnectivity); 250 270 xDelete<int>(this->numbernodetoelementconnectivity); -
issm/trunk-jpl/src/c/classes/IoModel.h
r23532 r23568 66 66 bool *my_faces; 67 67 bool *my_edges; 68 bool *my_vedges; 69 bool *my_hedges; 68 70 bool *my_vertices; 69 71 int *epart; … … 74 76 int *elements; 75 77 int *edges; 78 int *verticaledges; 79 int *horizontaledges; 76 80 int *elementtoedgeconnectivity; 81 int *elementtoverticaledgeconnectivity; 82 int *elementtohorizontaledgeconnectivity; 77 83 int *elementtofaceconnectivity; 78 84 int *faces; … … 81 87 int *numbernodetoelementconnectivity; 82 88 int numberofedges; 89 int numberofverticaledges; 90 int numberofhorizontaledges; 83 91 int numberofelements; 84 92 int numberoffaces; -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
r17924 r23568 17 17 18 18 /*Intermediaries*/ 19 bool exist;20 19 int i,j,v1,v2,v3; 21 int maxnbe,nbe,elementnbe,elementnbv;20 int elementnbe,elementnbv; 22 21 int *elementedges = NULL; 23 22 int *elementedges_markers = NULL; … … 30 29 elementedges = xNew<int>(elementnbe*2); 31 30 elementedges_markers = xNew<int>(elementnbe); 32 elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = 1;33 elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;34 elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;31 elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = -1; 32 elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = -1; 33 elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = -1; 35 34 break; 36 35 case TetraEnum: … … 39 38 elementedges = xNew<int>(elementnbe*2); 40 39 elementedges_markers = xNew<int>(elementnbe); 41 elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = 1;42 elementedges[2*1+0] = 0; elementedges[2*1+1] = 2; elementedges_markers[1] = 1;43 elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;44 elementedges[2*3+0] = 1; elementedges[2*3+1] = 3; elementedges_markers[3] = 1;45 elementedges[2*4+0] = 2; elementedges[2*4+1] = 3; elementedges_markers[4] = 1;46 elementedges[2*5+0] = 0; elementedges[2*5+1] = 3; elementedges_markers[5] = 1;40 elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = -1; 41 elementedges[2*1+0] = 0; elementedges[2*1+1] = 2; elementedges_markers[1] = -1; 42 elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = -1; 43 elementedges[2*3+0] = 1; elementedges[2*3+1] = 3; elementedges_markers[3] = -1; 44 elementedges[2*4+0] = 2; elementedges[2*4+1] = 3; elementedges_markers[4] = -1; 45 elementedges[2*5+0] = 0; elementedges[2*5+1] = 3; elementedges_markers[5] = -1; 47 46 break; 48 47 case PentaEnum: … … 66 65 67 66 /*Maximum number of edges*/ 68 maxnbe = elementnbe*iomodel->numberofelements;67 int maxnbe = elementnbe*iomodel->numberofelements; 69 68 70 69 /*Initialize intermediaries*/ 71 int *edgestemp = xNew<int>(maxnbe*3); /*format: [vertex1 vertex2 marker] */ 72 int *element_edge_connectivity = xNew<int>(iomodel->numberofelements*elementnbe); /*format: [edge1 edge2 ... edgen] */ 70 int *edgestemp = xNew<int>(maxnbe*3); /*format: [vertex1 vertex2 marker]*/ 71 int *vedgestemp = xNew<int>(maxnbe*2); /*format: [vertex1 vertex2] */ 72 int *hedgestemp = xNew<int>(maxnbe*2); /*format: [vertex1 vertex2] */ 73 int *element_edge_connectivity = xNew<int>(iomodel->numberofelements*elementnbe); /*format: [edge1 edge2 ... edgen] */ 74 int *element_vedge_connectivity = NULL; 75 int *element_hedge_connectivity = NULL; 76 if(iomodel->meshelementtype==PentaEnum){ 77 element_vedge_connectivity = xNew<int>(iomodel->numberofelements*3); /*format: [edge1 edge2 ... edgen] */ 78 element_hedge_connectivity = xNew<int>(iomodel->numberofelements*6); /*format: [edge1 edge2 ... edgen] */ 79 } 73 80 74 81 /*Initialize chain*/ … … 78 85 79 86 /*Initialize number of edges*/ 80 nbe= 0;87 int nbe = 0; 81 88 82 89 for(i=0;i<iomodel->numberofelements;i++){ … … 93 100 94 101 /*This edge a priori has not been processed yet*/ 95 exist = false;102 bool exist = false; 96 103 97 104 /*Go through all processed edges connected to v1 and check whether we have seen this edge yet*/ … … 125 132 } 126 133 } 134 int nbve = 0; 135 int nbhe = 0; 136 /*vertical/horizontal edges*/ 137 if(iomodel->meshelementtype==PentaEnum){ 138 for(i=0;i<iomodel->numberofvertices;i++) head_minv[i]=-1; 139 for(i=0;i<iomodel->numberofelements;i++){ 140 for(j=0;j<3;j++){ 141 v1 = iomodel->elements[i*elementnbv+elementedges[2*j+0]]-1; _assert_(v1>=0 & v1<iomodel->numberofvertices); 142 v2 = iomodel->elements[i*elementnbv+elementedges[2*j+1]]-1; _assert_(v2>=0 & v2<iomodel->numberofvertices); 143 if(v2<v1){ v3=v2; v2=v1; v1=v3;} 144 bool exist = false; 145 for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){ 146 if(vedgestemp[e*2+1]==v2+1){ 147 exist = true; 148 element_vedge_connectivity[i*3+j]=e; 149 break; 150 } 151 } 152 if(!exist){ 153 vedgestemp[nbve*2+0] = v1+1; 154 vedgestemp[nbve*2+1] = v2+1; 155 element_vedge_connectivity[i*3+j]=nbve; 156 head_minv[v1] = nbve; 157 nbve++; 158 } 159 } 160 } 161 for(i=0;i<iomodel->numberofvertices;i++) head_minv[i]=-1; 162 for(i=0;i<iomodel->numberofelements;i++){ 163 for(j=3;j<9;j++){ 164 v1 = iomodel->elements[i*elementnbv+elementedges[2*j+0]]-1; _assert_(v1>=0 & v1<iomodel->numberofvertices); 165 v2 = iomodel->elements[i*elementnbv+elementedges[2*j+1]]-1; _assert_(v2>=0 & v2<iomodel->numberofvertices); 166 if(v2<v1){ v3=v2; v2=v1; v1=v3;} 167 bool exist = false; 168 for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){ 169 if(hedgestemp[e*2+1]==v2+1){ 170 exist = true; 171 element_hedge_connectivity[i*6+(j-3)]=e; 172 break; 173 } 174 } 175 if(!exist){ 176 hedgestemp[nbhe*2+0] = v1+1; 177 hedgestemp[nbhe*2+1] = v2+1; 178 element_hedge_connectivity[i*6+(j-3)]=nbhe; 179 head_minv[v1] = nbhe; 180 nbhe++; 181 } 182 } 183 } 184 } 127 185 128 186 /*Clean up*/ 129 187 xDelete<int>(head_minv); 130 188 xDelete<int>(next_edge); 189 xDelete<int>(elementedges); 131 190 xDelete<int>(elementedges_markers); 132 191 133 192 /*Create final edges*/ 134 int* edges = xNew<int>(nbe*3); /*format: [vertex1 vertex2 marker]*/193 int* edges = xNew<int>(nbe*3); 135 194 for(int i=0;i<3*nbe;i++) edges[i] = edgestemp[i]; 136 137 /*Clean up*/138 195 xDelete<int>(edgestemp); 139 xDelete<int>(elementedges); 196 int* vedges = xNew<int>(nbve*2); 197 for(int i=0;i<2*nbve;i++) vedges[i] = vedgestemp[i]; 198 xDelete<int>(vedgestemp); 199 int* hedges = xNew<int>(nbhe*2); 200 for(int i=0;i<2*nbhe;i++) hedges[i] = hedgestemp[i]; 201 xDelete<int>(hedgestemp); 140 202 141 203 /*Assign output pointers*/ 142 iomodel->edges = edges; 204 iomodel->edges = edges; 205 iomodel->verticaledges = vedges; 206 iomodel->horizontaledges = hedges; 143 207 iomodel->elementtoedgeconnectivity = element_edge_connectivity; 208 iomodel->elementtoverticaledgeconnectivity = element_vedge_connectivity; 209 iomodel->elementtohorizontaledgeconnectivity = element_hedge_connectivity; 144 210 iomodel->numberofedges = nbe; 211 iomodel->numberofverticaledges = nbve; 212 iomodel->numberofhorizontaledges = nbhe; 145 213 }/*}}}*/ 146 214 void EdgeOnBoundaryFlags(bool** pflags,IoModel* iomodel){/*{{{*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp
r23167 r23568 27 27 28 28 /*output: */ 29 iomodel->my_edges =xNewZeroInit<bool>(iomodel->numberofedges);29 iomodel->my_edges = xNewZeroInit<bool>(iomodel->numberofedges); 30 30 31 31 for(int i=0;i<iomodel->numberofelements;i++){ … … 36 36 } 37 37 } 38 39 if(iomodel->meshelementtype==PentaEnum){ 40 iomodel->my_vedges = xNewZeroInit<bool>(iomodel->numberofverticaledges); 41 iomodel->my_hedges = xNewZeroInit<bool>(iomodel->numberofhorizontaledges); 42 for(int i=0;i<iomodel->numberofelements;i++){ 43 if(iomodel->my_elements[i]){ 44 for(int j=0;j<3;j++) iomodel->my_vedges[iomodel->elementtoverticaledgeconnectivity[i*3+j]] = true; 45 for(int j=0;j<6;j++) iomodel->my_hedges[iomodel->elementtohorizontaledgeconnectivity[i*6+j]] = true; 46 } 47 } 48 } 38 49 }
Note:
See TracChangeset
for help on using the changeset viewer.