comparison src/Mesh.cc @ 257:fb67b636616f

Distribute mesh after creating it * Subdomain markers are not supported by DOLFIN in parallel execution!
author Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
date Wed, 30 Jul 2014 21:09:52 +0200
parents 5e9b5bbdc56b
children ab35a8b0deef
comparison
equal deleted inserted replaced
256:8fe68d94ab76 257:fb67b636616f
15 this program; if not, see <http://www.gnu.org/licenses/>. 15 this program; if not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 17
18 #include "mesh.h" 18 #include "mesh.h"
19 #include "dolfin_compat.h" 19 #include "dolfin_compat.h"
20 #ifdef LATEST_DOLFIN
21 #include <dolfin/mesh/MeshPartitioning.h>
22 #endif
20 23
21 DEFUN_DLD (Mesh, args, ,"-*- texinfo -*-\n\ 24 DEFUN_DLD (Mesh, args, ,"-*- texinfo -*-\n\
22 @deftypefn {Function File} {[@var{mesh_out}]} = \ 25 @deftypefn {Function File} {[@var{mesh_out}]} = \
23 Mesh (@var{mesh_in}) \n\ 26 Mesh (@var{mesh_in}) \n\
24 Construct a mesh from file or from (p, e, t) format.\n\ 27 Construct a mesh from file or from (p, e, t) format.\n\
131 // store information associated with e 134 // store information associated with e
132 msh->init (D - 1); 135 msh->init (D - 1);
133 dolfin::MeshValueCollection<std::size_t> facet(*msh, D - 1); 136 dolfin::MeshValueCollection<std::size_t> facet(*msh, D - 1);
134 std::size_t num_side_edges = e.cols (); 137 std::size_t num_side_edges = e.cols ();
135 138
136 if (D == 2) 139 unsigned const num_procs =
137 { 140 #ifdef LATEST_DOLFIN
138 for (uint i = 0; i < num_side_edges; ++i) 141 dolfin::MPI::size (MPI_COMM_WORLD);
139 { 142 #else
140 dolfin::Vertex v (*msh, e.xelem (0, i) - 1); 143 dolfin::MPI::num_processes ();
141 for (dolfin::FacetIterator f (v); ! f.end (); ++f) 144 #endif
142 { 145
143 if ((*f).entities(0)[0] == e.xelem (0, i) - 1 146 if (num_procs == 1)
144 && (*f).entities(0)[1] == e.xelem (1, i) - 1 147 {
145 || (*f).entities(0)[0] == e.xelem (1, i) - 1 148 if (D == 2)
146 && (*f).entities(0)[1] == e.xelem (0, i) - 1) 149 {
150 for (uint i = 0; i < num_side_edges; ++i)
151 {
152 dolfin::Vertex v (*msh, e.xelem (0, i) - 1);
153 for (dolfin::FacetIterator f (v); ! f.end (); ++f)
147 { 154 {
148 std::pair <std::size_t, std::size_t> 155 if ((*f).entities(0)[0] == e.xelem (0, i) - 1
149 idxvl ((*f).index (), e.xelem (4, i)); 156 && (*f).entities(0)[1] == e.xelem (1, i) - 1
150 msh->domains ().set_marker (idxvl, D - 1); 157 || (*f).entities(0)[0] == e.xelem (1, i) - 1
151 break; 158 && (*f).entities(0)[1] == e.xelem (0, i) - 1)
159 {
160 std::pair <std::size_t, std::size_t>
161 idxvl ((*f).index (), e.xelem (4, i));
162 msh->domains ().set_marker (idxvl, D - 1);
163 break;
164 }
152 } 165 }
153 } 166 }
154 } 167 }
155 } 168
156 169 if (D == 3)
157 170 {
158 171 for (uint i = 0; i < num_side_edges; ++i)
159 if (D == 3) 172 {
160 { 173 dolfin::Vertex v (*msh, e.xelem (0, i) - 1);
161 for (uint i = 0; i < num_side_edges; ++i) 174 for (dolfin::FacetIterator f (v); ! f.end (); ++f)
162 {
163 dolfin::Vertex v (*msh, e.xelem (0, i) - 1);
164 for (dolfin::FacetIterator f (v); ! f.end (); ++f)
165 {
166 if ((*f).entities(0)[0] == e(0, i) - 1
167 && (*f).entities(0)[1] == e.xelem (1, i) - 1
168 && (*f).entities(0)[2] == e.xelem (2, i) - 1
169 || (*f).entities(0)[0] == e.xelem (0, i) - 1
170 && (*f).entities(0)[1] == e.xelem (2, i) - 1
171 && (*f).entities(0)[2] == e.xelem (1, i) - 1
172 || (*f).entities(0)[0] == e.xelem (1, i) - 1
173 && (*f).entities(0)[1] == e.xelem (0, i) - 1
174 && (*f).entities(0)[2] == e.xelem (2, i) - 1
175 || (*f).entities(0)[0] == e.xelem (1, i) - 1
176 && (*f).entities(0)[1] == e.xelem (2, i) - 1
177 && (*f).entities(0)[2] == e.xelem (0, i) - 1
178 || (*f).entities(0)[0] == e.xelem (2, i) - 1
179 && (*f).entities(0)[1] == e.xelem (0, i) - 1
180 && (*f).entities(0)[2] == e.xelem (1, i) - 1
181 || (*f).entities(0)[0] == e.xelem (2, i) - 1
182 && (*f).entities(0)[1] == e.xelem (1, i) - 1
183 && (*f).entities(0)[2] == e.xelem (0, i) - 1)
184 { 175 {
185 std::pair <std::size_t, std::size_t> 176 if ((*f).entities(0)[0] == e(0, i) - 1
186 idxvl ((*f).index (), e.xelem (9, i)); 177 && (*f).entities(0)[1] == e.xelem (1, i) - 1
187 msh->domains ().set_marker (idxvl, D - 1); 178 && (*f).entities(0)[2] == e.xelem (2, i) - 1
188 break; 179 || (*f).entities(0)[0] == e.xelem (0, i) - 1
180 && (*f).entities(0)[1] == e.xelem (2, i) - 1
181 && (*f).entities(0)[2] == e.xelem (1, i) - 1
182 || (*f).entities(0)[0] == e.xelem (1, i) - 1
183 && (*f).entities(0)[1] == e.xelem (0, i) - 1
184 && (*f).entities(0)[2] == e.xelem (2, i) - 1
185 || (*f).entities(0)[0] == e.xelem (1, i) - 1
186 && (*f).entities(0)[1] == e.xelem (2, i) - 1
187 && (*f).entities(0)[2] == e.xelem (0, i) - 1
188 || (*f).entities(0)[0] == e.xelem (2, i) - 1
189 && (*f).entities(0)[1] == e.xelem (0, i) - 1
190 && (*f).entities(0)[2] == e.xelem (1, i) - 1
191 || (*f).entities(0)[0] == e.xelem (2, i) - 1
192 && (*f).entities(0)[1] == e.xelem (1, i) - 1
193 && (*f).entities(0)[2] == e.xelem (0, i) - 1)
194 {
195 std::pair <std::size_t, std::size_t>
196 idxvl ((*f).index (), e.xelem (9, i));
197 msh->domains ().set_marker (idxvl, D - 1);
198 break;
199 }
189 } 200 }
190 } 201 }
191 } 202 }
192 } 203 }
193 204
194 205
195 dolfin::MeshValueCollection<std::size_t> cell (*msh, D); 206 dolfin::MeshValueCollection<std::size_t> cell (*msh, D);
196 std::size_t num_cells = t.cols (); 207 std::size_t num_cells = t.cols ();
197 208
198 if (D == 2) 209 if (num_procs == 1)
199 { 210 {
200 for (uint i = 0; i < num_cells; ++i) 211 if (D == 2)
201 { 212 {
202 dolfin::Vertex v (*msh, t.xelem (0, i) - 1); 213 for (uint i = 0; i < num_cells; ++i)
203 for (dolfin::CellIterator f (v); ! f.end (); ++f) 214 {
204 { 215 dolfin::Vertex v (*msh, t.xelem (0, i) - 1);
205 if ((*f).entities(0)[0] == t.xelem (0, i) - 1 216 for (dolfin::CellIterator f (v); ! f.end (); ++f)
206 && (*f).entities(0)[1] == t.xelem (1, i) - 1
207 && (*f).entities(0)[2] == t.xelem (2, i) - 1
208 || (*f).entities(0)[0] == t.xelem (0, i) - 1
209 && (*f).entities(0)[1] == t.xelem (2, i) - 1
210 && (*f).entities(0)[2] == t.xelem (1, i) - 1
211 || (*f).entities(0)[0] == t.xelem (1, i) - 1
212 && (*f).entities(0)[1] == t.xelem (0, i) - 1
213 && (*f).entities(0)[2] == t.xelem (2, i) - 1
214 || (*f).entities(0)[0] == t.xelem (1, i) - 1
215 && (*f).entities(0)[1] == t.xelem (2, i) - 1
216 && (*f).entities(0)[2] == t.xelem (0, i) - 1
217 || (*f).entities(0)[0] == t.xelem (2, i) - 1
218 && (*f).entities(0)[1] == t.xelem (0, i) - 1
219 && (*f).entities(0)[2] == t.xelem (1, i) - 1
220 || (*f).entities(0)[0] == t.xelem (2, i) - 1
221 && (*f).entities(0)[1] == t.xelem (1, i) - 1
222 && (*f).entities(0)[2] == t.xelem (0, i) - 1)
223 { 217 {
224 std::pair <std::size_t, std::size_t> 218 if ((*f).entities(0)[0] == t.xelem (0, i) - 1
225 idxvl ((*f).index (), t.xelem (3, i)); 219 && (*f).entities(0)[1] == t.xelem (1, i) - 1
226 msh->domains ().set_marker (idxvl, D); 220 && (*f).entities(0)[2] == t.xelem (2, i) - 1
227 break; 221 || (*f).entities(0)[0] == t.xelem (0, i) - 1
222 && (*f).entities(0)[1] == t.xelem (2, i) - 1
223 && (*f).entities(0)[2] == t.xelem (1, i) - 1
224 || (*f).entities(0)[0] == t.xelem (1, i) - 1
225 && (*f).entities(0)[1] == t.xelem (0, i) - 1
226 && (*f).entities(0)[2] == t.xelem (2, i) - 1
227 || (*f).entities(0)[0] == t.xelem (1, i) - 1
228 && (*f).entities(0)[1] == t.xelem (2, i) - 1
229 && (*f).entities(0)[2] == t.xelem (0, i) - 1
230 || (*f).entities(0)[0] == t.xelem (2, i) - 1
231 && (*f).entities(0)[1] == t.xelem (0, i) - 1
232 && (*f).entities(0)[2] == t.xelem (1, i) - 1
233 || (*f).entities(0)[0] == t.xelem (2, i) - 1
234 && (*f).entities(0)[1] == t.xelem (1, i) - 1
235 && (*f).entities(0)[2] == t.xelem (0, i) - 1)
236 {
237 std::pair <std::size_t, std::size_t>
238 idxvl ((*f).index (), t.xelem (3, i));
239 msh->domains ().set_marker (idxvl, D);
240 break;
241 }
228 } 242 }
229 } 243 }
230 } 244 }
231 } 245
232 246 if (D == 3)
233 247 {
234 248 for (uint i = 0; i < num_cells; ++i)
235 if (D == 3) 249 {
236 { 250 dolfin::Vertex v (*msh, t.xelem (0, i) - 1);
237 for (uint i = 0; i < num_cells; ++i) 251 for (dolfin::CellIterator f (v); ! f.end (); ++f)
238 {
239 dolfin::Vertex v (*msh, t.xelem (0, i) - 1);
240 for (dolfin::CellIterator f (v); ! f.end (); ++f)
241 {
242 if ((*f).entities(0)[0] == t.xelem (0, i) - 1
243 && (*f).entities(0)[1] == t.xelem (1, i) - 1
244 && (*f).entities(0)[2] == t.xelem (2, i) - 1
245 && (*f).entities(0)[3] == t.xelem (3, i) - 1
246 || (*f).entities(0)[0] == t.xelem (0, i) - 1
247 && (*f).entities(0)[1] == t.xelem (1, i) - 1
248 && (*f).entities(0)[2] == t.xelem (3, i) - 1
249 && (*f).entities(0)[3] == t.xelem (2, i) - 1
250 || (*f).entities(0)[0] == t.xelem (0, i) - 1
251 && (*f).entities(0)[1] == t.xelem (2, i) - 1
252 && (*f).entities(0)[2] == t.xelem (1, i) - 1
253 && (*f).entities(0)[3] == t.xelem (3, i) - 1
254 || (*f).entities(0)[0] == t.xelem (0, i) - 1
255 && (*f).entities(0)[1] == t.xelem (2, i) - 1
256 && (*f).entities(0)[2] == t.xelem (3, i) - 1
257 && (*f).entities(0)[3] == t.xelem (1, i) - 1
258 || (*f).entities(0)[0] == t.xelem (0, i) - 1
259 && (*f).entities(0)[1] == t.xelem (3, i) - 1
260 && (*f).entities(0)[2] == t.xelem (1, i) - 1
261 && (*f).entities(0)[3] == t.xelem (2, i) - 1
262 || (*f).entities(0)[0] == t.xelem (0, i) - 1
263 && (*f).entities(0)[1] == t.xelem (3, i) - 1
264 && (*f).entities(0)[2] == t.xelem (2, i) - 1
265 && (*f).entities(0)[3] == t.xelem (1, i) - 1
266
267 || (*f).entities(0)[0] == t.xelem (1, i) - 1
268 && (*f).entities(0)[1] == t.xelem (0, i) - 1
269 && (*f).entities(0)[2] == t.xelem (2, i) - 1
270 && (*f).entities(0)[3] == t.xelem (3, i) - 1
271 || (*f).entities(0)[0] == t.xelem (1, i) - 1
272 && (*f).entities(0)[1] == t.xelem (0, i) - 1
273 && (*f).entities(0)[2] == t.xelem (3, i) - 1
274 && (*f).entities(0)[3] == t.xelem (2, i) - 1
275 || (*f).entities(0)[0] == t.xelem (1, i) - 1
276 && (*f).entities(0)[1] == t.xelem (2, i) - 1
277 && (*f).entities(0)[2] == t.xelem (0, i) - 1
278 && (*f).entities(0)[3] == t.xelem (3, i) - 1
279 || (*f).entities(0)[0] == t.xelem (1, i) - 1
280 && (*f).entities(0)[1] == t.xelem (2, i) - 1
281 && (*f).entities(0)[2] == t.xelem (3, i) - 1
282 && (*f).entities(0)[3] == t.xelem (0, i) - 1
283 || (*f).entities(0)[0] == t.xelem (1, i) - 1
284 && (*f).entities(0)[1] == t.xelem (3, i) - 1
285 && (*f).entities(0)[2] == t.xelem (0, i) - 1
286 && (*f).entities(0)[3] == t.xelem (2, i) - 1
287 || (*f).entities(0)[0] == t.xelem (1, i) - 1
288 && (*f).entities(0)[1] == t.xelem (3, i) - 1
289 && (*f).entities(0)[2] == t.xelem (2, i) - 1
290 && (*f).entities(0)[3] == t.xelem (0, i) - 1
291
292 || (*f).entities(0)[0] == t.xelem (2, i) - 1
293 && (*f).entities(0)[1] == t.xelem (0, i) - 1
294 && (*f).entities(0)[2] == t.xelem (1, i) - 1
295 && (*f).entities(0)[3] == t.xelem (3, i) - 1
296 || (*f).entities(0)[0] == t.xelem (2, i) - 1
297 && (*f).entities(0)[1] == t.xelem (0, i) - 1
298 && (*f).entities(0)[2] == t.xelem (3, i) - 1
299 && (*f).entities(0)[3] == t.xelem (1, i) - 1
300 || (*f).entities(0)[0] == t.xelem (2, i) - 1
301 && (*f).entities(0)[1] == t.xelem (1, i) - 1
302 && (*f).entities(0)[2] == t.xelem (0, i) - 1
303 && (*f).entities(0)[3] == t.xelem (3, i) - 1
304 || (*f).entities(0)[0] == t.xelem (2, i) - 1
305 && (*f).entities(0)[1] == t.xelem (1, i) - 1
306 && (*f).entities(0)[2] == t.xelem (3, i) - 1
307 && (*f).entities(0)[3] == t.xelem (0, i) - 1
308 || (*f).entities(0)[0] == t.xelem (2, i) - 1
309 && (*f).entities(0)[1] == t.xelem (3, i) - 1
310 && (*f).entities(0)[2] == t.xelem (0, i) - 1
311 && (*f).entities(0)[3] == t.xelem (1, i) - 1
312 || (*f).entities(0)[0] == t.xelem (2, i) - 1
313 && (*f).entities(0)[1] == t.xelem (3, i) - 1
314 && (*f).entities(0)[2] == t.xelem (1, i) - 1
315 && (*f).entities(0)[3] == t.xelem (0, i) - 1
316
317 || (*f).entities(0)[0] == t.xelem (3, i) - 1
318 && (*f).entities(0)[1] == t.xelem (0, i) - 1
319 && (*f).entities(0)[2] == t.xelem (1, i) - 1
320 && (*f).entities(0)[3] == t.xelem (2, i) - 1
321 || (*f).entities(0)[0] == t.xelem (3, i) - 1
322 && (*f).entities(0)[1] == t.xelem (0, i) - 1
323 && (*f).entities(0)[2] == t.xelem (2, i) - 1
324 && (*f).entities(0)[3] == t.xelem (1, i) - 1
325 || (*f).entities(0)[0] == t.xelem (3, i) - 1
326 && (*f).entities(0)[1] == t.xelem (1, i) - 1
327 && (*f).entities(0)[2] == t.xelem (0, i) - 1
328 && (*f).entities(0)[3] == t.xelem (2, i) - 1
329 || (*f).entities(0)[0] == t.xelem (3, i) - 1
330 && (*f).entities(0)[1] == t.xelem (1, i) - 1
331 && (*f).entities(0)[2] == t.xelem (2, i) - 1
332 && (*f).entities(0)[3] == t.xelem (0, i) - 1
333 || (*f).entities(0)[0] == t.xelem (3, i) - 1
334 && (*f).entities(0)[1] == t.xelem (2, i) - 1
335 && (*f).entities(0)[2] == t.xelem (0, i) - 1
336 && (*f).entities(0)[3] == t.xelem (1, i) - 1
337 || (*f).entities(0)[0] == t.xelem (3, i) - 1
338 && (*f).entities(0)[1] == t.xelem (2, i) - 1
339 && (*f).entities(0)[2] == t.xelem (1, i) - 1
340 && (*f).entities(0)[3] == t.xelem (0, i) - 1)
341 { 252 {
342 std::pair <std::size_t, std::size_t> 253 if ((*f).entities(0)[0] == t.xelem (0, i) - 1
343 idxvl ((*f).index (), t.xelem (4, i)); 254 && (*f).entities(0)[1] == t.xelem (1, i) - 1
344 msh->domains ().set_marker (idxvl, D); 255 && (*f).entities(0)[2] == t.xelem (2, i) - 1
345 break; 256 && (*f).entities(0)[3] == t.xelem (3, i) - 1
257 || (*f).entities(0)[0] == t.xelem (0, i) - 1
258 && (*f).entities(0)[1] == t.xelem (1, i) - 1
259 && (*f).entities(0)[2] == t.xelem (3, i) - 1
260 && (*f).entities(0)[3] == t.xelem (2, i) - 1
261 || (*f).entities(0)[0] == t.xelem (0, i) - 1
262 && (*f).entities(0)[1] == t.xelem (2, i) - 1
263 && (*f).entities(0)[2] == t.xelem (1, i) - 1
264 && (*f).entities(0)[3] == t.xelem (3, i) - 1
265 || (*f).entities(0)[0] == t.xelem (0, i) - 1
266 && (*f).entities(0)[1] == t.xelem (2, i) - 1
267 && (*f).entities(0)[2] == t.xelem (3, i) - 1
268 && (*f).entities(0)[3] == t.xelem (1, i) - 1
269 || (*f).entities(0)[0] == t.xelem (0, i) - 1
270 && (*f).entities(0)[1] == t.xelem (3, i) - 1
271 && (*f).entities(0)[2] == t.xelem (1, i) - 1
272 && (*f).entities(0)[3] == t.xelem (2, i) - 1
273 || (*f).entities(0)[0] == t.xelem (0, i) - 1
274 && (*f).entities(0)[1] == t.xelem (3, i) - 1
275 && (*f).entities(0)[2] == t.xelem (2, i) - 1
276 && (*f).entities(0)[3] == t.xelem (1, i) - 1
277
278 || (*f).entities(0)[0] == t.xelem (1, i) - 1
279 && (*f).entities(0)[1] == t.xelem (0, i) - 1
280 && (*f).entities(0)[2] == t.xelem (2, i) - 1
281 && (*f).entities(0)[3] == t.xelem (3, i) - 1
282 || (*f).entities(0)[0] == t.xelem (1, i) - 1
283 && (*f).entities(0)[1] == t.xelem (0, i) - 1
284 && (*f).entities(0)[2] == t.xelem (3, i) - 1
285 && (*f).entities(0)[3] == t.xelem (2, i) - 1
286 || (*f).entities(0)[0] == t.xelem (1, i) - 1
287 && (*f).entities(0)[1] == t.xelem (2, i) - 1
288 && (*f).entities(0)[2] == t.xelem (0, i) - 1
289 && (*f).entities(0)[3] == t.xelem (3, i) - 1
290 || (*f).entities(0)[0] == t.xelem (1, i) - 1
291 && (*f).entities(0)[1] == t.xelem (2, i) - 1
292 && (*f).entities(0)[2] == t.xelem (3, i) - 1
293 && (*f).entities(0)[3] == t.xelem (0, i) - 1
294 || (*f).entities(0)[0] == t.xelem (1, i) - 1
295 && (*f).entities(0)[1] == t.xelem (3, i) - 1
296 && (*f).entities(0)[2] == t.xelem (0, i) - 1
297 && (*f).entities(0)[3] == t.xelem (2, i) - 1
298 || (*f).entities(0)[0] == t.xelem (1, i) - 1
299 && (*f).entities(0)[1] == t.xelem (3, i) - 1
300 && (*f).entities(0)[2] == t.xelem (2, i) - 1
301 && (*f).entities(0)[3] == t.xelem (0, i) - 1
302
303 || (*f).entities(0)[0] == t.xelem (2, i) - 1
304 && (*f).entities(0)[1] == t.xelem (0, i) - 1
305 && (*f).entities(0)[2] == t.xelem (1, i) - 1
306 && (*f).entities(0)[3] == t.xelem (3, i) - 1
307 || (*f).entities(0)[0] == t.xelem (2, i) - 1
308 && (*f).entities(0)[1] == t.xelem (0, i) - 1
309 && (*f).entities(0)[2] == t.xelem (3, i) - 1
310 && (*f).entities(0)[3] == t.xelem (1, i) - 1
311 || (*f).entities(0)[0] == t.xelem (2, i) - 1
312 && (*f).entities(0)[1] == t.xelem (1, i) - 1
313 && (*f).entities(0)[2] == t.xelem (0, i) - 1
314 && (*f).entities(0)[3] == t.xelem (3, i) - 1
315 || (*f).entities(0)[0] == t.xelem (2, i) - 1
316 && (*f).entities(0)[1] == t.xelem (1, i) - 1
317 && (*f).entities(0)[2] == t.xelem (3, i) - 1
318 && (*f).entities(0)[3] == t.xelem (0, i) - 1
319 || (*f).entities(0)[0] == t.xelem (2, i) - 1
320 && (*f).entities(0)[1] == t.xelem (3, i) - 1
321 && (*f).entities(0)[2] == t.xelem (0, i) - 1
322 && (*f).entities(0)[3] == t.xelem (1, i) - 1
323 || (*f).entities(0)[0] == t.xelem (2, i) - 1
324 && (*f).entities(0)[1] == t.xelem (3, i) - 1
325 && (*f).entities(0)[2] == t.xelem (1, i) - 1
326 && (*f).entities(0)[3] == t.xelem (0, i) - 1
327
328 || (*f).entities(0)[0] == t.xelem (3, i) - 1
329 && (*f).entities(0)[1] == t.xelem (0, i) - 1
330 && (*f).entities(0)[2] == t.xelem (1, i) - 1
331 && (*f).entities(0)[3] == t.xelem (2, i) - 1
332 || (*f).entities(0)[0] == t.xelem (3, i) - 1
333 && (*f).entities(0)[1] == t.xelem (0, i) - 1
334 && (*f).entities(0)[2] == t.xelem (2, i) - 1
335 && (*f).entities(0)[3] == t.xelem (1, i) - 1
336 || (*f).entities(0)[0] == t.xelem (3, i) - 1
337 && (*f).entities(0)[1] == t.xelem (1, i) - 1
338 && (*f).entities(0)[2] == t.xelem (0, i) - 1
339 && (*f).entities(0)[3] == t.xelem (2, i) - 1
340 || (*f).entities(0)[0] == t.xelem (3, i) - 1
341 && (*f).entities(0)[1] == t.xelem (1, i) - 1
342 && (*f).entities(0)[2] == t.xelem (2, i) - 1
343 && (*f).entities(0)[3] == t.xelem (0, i) - 1
344 || (*f).entities(0)[0] == t.xelem (3, i) - 1
345 && (*f).entities(0)[1] == t.xelem (2, i) - 1
346 && (*f).entities(0)[2] == t.xelem (0, i) - 1
347 && (*f).entities(0)[3] == t.xelem (1, i) - 1
348 || (*f).entities(0)[0] == t.xelem (3, i) - 1
349 && (*f).entities(0)[1] == t.xelem (2, i) - 1
350 && (*f).entities(0)[2] == t.xelem (1, i) - 1
351 && (*f).entities(0)[3] == t.xelem (0, i) - 1)
352 {
353 std::pair <std::size_t, std::size_t>
354 idxvl ((*f).index (), t.xelem (4, i));
355 msh->domains ().set_marker (idxvl, D);
356 break;
357 }
346 } 358 }
347 } 359 }
348 } 360 }
349 } 361 }
350 362
351 pmsh = msh; 363 dolfin::MeshPartitioning::build_distributed_mesh (*msh);
364 pmsh = msh;
352 } 365 }
353 } 366 }