@@ -294,47 +294,43 @@ neut_mesh_memcpy (struct MESH Old, struct MESH *pNew)
294294
295295#ifdef HAVE_LIBSCOTCH
296296void
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 )
298298{
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 );
304303
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 ;
308306
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 );
314308
315309 /* recording elements */
316- id = 0 ;
317- for (i = 1 ; i <= velmnbr ; i ++ )
310+ edgeqty = 0 ;
311+ for (i = 1 ; i <= Mesh . EltQty ; i ++ )
318312 {
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 ]) ;
324318 }
319+ ut_array_1d_int_addval (edges , edgeqty , Mesh .EltQty , edges );
325320
326321 /* recording nodes */
327- for (i = 1 ; i <= vnodnbr ; i ++ )
322+ for (i = 1 ; i <= Nodes . NodeQty ; i ++ )
328323 {
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 ]);
333329 }
334- verttab [ vertnbr ] = edgenbr + 1 ;
330+ vers [ verqty ] = edgeqty + 1 ;
335331
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 );
338334 /*
339335 file = ut_file_open ("dd", "w");
340336 SCOTCH_meshSave (pSCMesh, file);
0 commit comments