@@ -294,47 +294,43 @@ neut_mesh_memcpy (struct MESH Old, struct MESH *pNew)
294
294
295
295
#ifdef HAVE_LIBSCOTCH
296
296
void
297
- neut_mesh_scotchmesh (struct MESH Mesh , int vnodnbr , SCOTCH_Mesh * pSCMesh )
297
+ neut_mesh_scotchmesh (struct NODES Nodes , struct MESH Mesh , SCOTCH_Mesh * pSCMesh )
298
298
{
299
- int i , id , status ;
300
- int velmbas , vnodbas , velmnbr , vertnbr , edgenbr ;
301
- int * verttab , * edgetab ;
302
- int eltnodeqty =
303
- neut_elt_nodeqty (Mesh .EltType , Mesh .Dimension , Mesh .EltOrder );
299
+ int i , j , status ;
300
+ int verqty , edgeqty , nodeqty , eltqty ;
301
+ int * vers = NULL , * edges = NULL , * nodes = NULL , * elts = NULL ;
302
+ int eltnodeqty = neut_elt_nodeqty (Mesh .EltType , Mesh .Dimension , Mesh .EltOrder );
304
303
305
- velmbas = 1 ; /* element base number */
306
- vnodbas = 1 + Mesh .EltQty ; /* node base number */
307
- velmnbr = Mesh .EltQty ;
304
+ verqty = Mesh .EltQty + Nodes .NodeQty ;
305
+ edgeqty = 2 * Mesh .EltQty * eltnodeqty ;
308
306
309
- vertnbr = velmnbr + vnodnbr ;
310
- edgenbr = 2 * velmnbr * eltnodeqty ;
311
-
312
- verttab = ut_alloc_1d_int (vertnbr + 1 );
313
- edgetab = ut_alloc_1d_int (edgenbr + 1 );
307
+ vers = ut_alloc_1d_int (verqty + 1 );
314
308
315
309
/* recording elements */
316
- id = 0 ;
317
- for (i = 1 ; i <= velmnbr ; i ++ )
310
+ edgeqty = 0 ;
311
+ for (i = 1 ; i <= Mesh . EltQty ; i ++ )
318
312
{
319
- verttab [i - 1 ] = id + 1 ;
320
- ut_array_1d_int_memcpy ( Mesh . EltNodes [ i ], eltnodeqty , edgetab + id );
321
- ut_array_1d_int_addval ( edgetab + id , eltnodeqty , vnodbas - 1 ,
322
- edgetab + id );
323
- id += eltnodeqty ;
313
+ vers [i - 1 ] = edgeqty + 1 ;
314
+
315
+ neut_mesh_elt_nodes_per ( Nodes , Mesh , i , & nodes , & nodeqty );
316
+ for ( j = 0 ; j < nodeqty ; j ++ )
317
+ ut_array_1d_int_list_addval_nocheck ( & edges , & edgeqty , nodes [ j ]) ;
324
318
}
319
+ ut_array_1d_int_addval (edges , edgeqty , Mesh .EltQty , edges );
325
320
326
321
/* recording nodes */
327
- for (i = 1 ; i <= vnodnbr ; i ++ )
322
+ for (i = 1 ; i <= Nodes . NodeQty ; i ++ )
328
323
{
329
- verttab [i + Mesh .EltQty - 1 ] = id + 1 ;
330
- ut_array_1d_int_memcpy (Mesh .NodeElts [i ] + 1 , Mesh .NodeElts [i ][0 ],
331
- edgetab + id );
332
- id += Mesh .NodeElts [i ][0 ];
324
+ vers [i + Mesh .EltQty - 1 ] = edgeqty + 1 ;
325
+
326
+ neut_mesh_node_elts_per (Nodes , Mesh , i , & elts , & eltqty );
327
+ for (j = 0 ; j < eltqty ; j ++ )
328
+ ut_array_1d_int_list_addval_nocheck (& edges , & edgeqty , elts [j ]);
333
329
}
334
- verttab [ vertnbr ] = edgenbr + 1 ;
330
+ vers [ verqty ] = edgeqty + 1 ;
335
331
336
- SCOTCH_meshBuild (pSCMesh , velmbas , vnodbas , velmnbr , vnodnbr , verttab ,
337
- NULL , NULL , NULL , NULL , edgenbr , edgetab );
332
+ SCOTCH_meshBuild (pSCMesh , 1 , Mesh . EltQty + 1 , Mesh . EltQty , Nodes . NodeQty , vers ,
333
+ NULL , NULL , NULL , NULL , edgeqty , edges );
338
334
/*
339
335
file = ut_file_open ("dd", "w");
340
336
SCOTCH_meshSave (pSCMesh, file);
0 commit comments