Skip to content

Commit 27841d7

Browse files
committed
Make minor improvements and fix bugs
- module -M: fixed -part for periodic meshes, fixed compatibility with Gmsh 4.13.1.
1 parent 639746f commit 27841d7

File tree

13 files changed

+783
-669
lines changed

13 files changed

+783
-669
lines changed

VERSIONS

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
New in 4.10.1-2 (09 Oct 2024):
2-
- module -M: Fixed compatibility with Gmsh 4.13.1.
1+
New in 4.10.1 (09 Oct 2024):
2+
- module -M: fixed -part for periodic meshes, fixed compatibility with Gmsh
3+
4.13.1.
34

45
New in 4.10.0 (01 Oct 2024):
56
- general: switched "active" and "passive" for orientation convention (see

doc/conf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
import sphinx_rtd_theme
1212

1313
project = u'Neper'
14-
version = u'4.10.1-2'
15-
release = u'4.10.1-2'
14+
version = u'4.10.1'
15+
release = u'4.10.1'
1616
author = u'Romain Quey'
1717
copyright = u'Romain Quey'
1818
language = 'en'

src/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ if(POLICY CMP0077)
77
cmake_policy(SET CMP0077 NEW)
88
endif()
99

10-
set(NEPER_VERSION \"4.10.1-2\")
10+
set(NEPER_VERSION \"4.10.1\")
1111
project(neper)
1212

1313
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8.1)

src/neper_m/nem_order/nem_order2.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ nem_order_periodic (struct TESS Tess, struct NODES *pNodes, struct MESH *Mesh)
8282
if (Tess.Dim == 3)
8383
nem_order_periodic_faces (Tess, pNodes, Mesh);
8484

85+
neut_nodes_init_nodeslave (pNodes);
86+
8587
return;
8688
}
8789

src/neper_m/nem_order/nem_order3.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ nem_order_periodic_edges (struct TESS Tess, struct NODES *pNodes,
4040
int i, j, k, l, nodeqty_tot, nodeqty_o1, nodes[2], nodemasters[2], node,
4141
nodemaster;
4242
int **fir = NULL;
43-
int *node_slave = ut_alloc_1d_int ((*pNodes).NodeQty);
43+
int *node_slave = ut_alloc_1d_int ((*pNodes).NodeQty + 1);
4444
int *shift = ut_alloc_1d_int (3);
4545

4646
neut_elt_orderarrays (Mesh[1].EltType, Mesh[1].Dimension, &fir,

src/neper_m/nem_partition/nem_partition2.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ nem_partition_prep (struct NODES *pNodes, struct MESH *Mesh,
102102
neut_mesh_init_nodeelts (Mesh + dim, (*pNodes).NodeQty);
103103

104104
SCOTCH_meshInit (pSCMesh);
105-
neut_mesh_scotchmesh (Mesh[dim], (*pNodes).NodeQty, pSCMesh);
105+
neut_mesh_scotchmesh (*pNodes, Mesh[dim], pSCMesh);
106106

107107
return;
108108
}

src/neut/neut_mesh/neut_mesh_fprintf/neut_mesh_fprintf_scotch/neut_mesh_fprintf_scotch1.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ neut_mesh_fprintf_scotch (char *body, struct NODES Nodes, struct MESH Mesh)
1717

1818
SCOTCH_meshInit (&SCMesh);
1919

20-
neut_mesh_scotchmesh (Mesh, Nodes.NodeQty, &SCMesh);
20+
neut_mesh_scotchmesh (Nodes, Mesh, &SCMesh);
2121

2222
file = ut_file_open (scm, "w");
2323
SCOTCH_meshSave (&SCMesh, file);

src/neut/neut_mesh/neut_mesh_op/neut_mesh_op.c

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -294,47 +294,43 @@ neut_mesh_memcpy (struct MESH Old, struct MESH *pNew)
294294

295295
#ifdef HAVE_LIBSCOTCH
296296
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)
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);

src/neut/neut_mesh/neut_mesh_op/neut_mesh_op.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ extern "C"
7171
///
7272
///
7373
#ifdef HAVE_LIBSCOTCH
74-
extern void neut_mesh_scotchmesh (struct MESH, int, SCOTCH_Mesh *);
74+
extern void neut_mesh_scotchmesh (struct NODES Nodes, struct MESH Mesh, SCOTCH_Mesh *);
7575
#endif /* HAVE_LIBSCOTCH */
7676

7777
/// \brief Initialize NodeElts of a MESH structure.

src/neut/neut_mesh/neut_mesh_topo/neut_mesh_topo.c

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2504,3 +2504,63 @@ neut_mesh_order1nodes_order2node (struct MESH Mesh, int node1, int node2,
25042504

25052505
return;
25062506
}
2507+
2508+
void
2509+
neut_mesh_elt_nodes_per (struct NODES Nodes, struct MESH Mesh, int elt, int **pnodes, int *pnodeqty)
2510+
{
2511+
int i, j, node, eltnodeqty = neut_elt_nodeqty (Mesh.EltType, Mesh.Dimension, Mesh.EltOrder);
2512+
2513+
(*pnodeqty) = eltnodeqty;
2514+
(*pnodes) = ut_alloc_1d_int (*pnodeqty);
2515+
2516+
ut_array_1d_int_memcpy (Mesh.EltNodes[elt], eltnodeqty, *pnodes);
2517+
2518+
// periodic
2519+
if (Nodes.PerNodeQty > 0)
2520+
{
2521+
for (i = 0; i < eltnodeqty; i++)
2522+
{
2523+
node = Mesh.EltNodes[elt][i];
2524+
2525+
// is slave
2526+
if (Nodes.PerNodeMaster[node] > 0)
2527+
ut_array_1d_int_list_addval_nocheck (pnodes, pnodeqty, Nodes.PerNodeMaster[node]);
2528+
2529+
// is master
2530+
else if (Nodes.PerNodeSlaveQty[node] > 0)
2531+
for (j = 1; j <= Nodes.PerNodeSlaveQty[node]; j++)
2532+
ut_array_1d_int_list_addval_nocheck (pnodes, pnodeqty, Nodes.PerNodeSlaveNb[node][j]);
2533+
}
2534+
}
2535+
2536+
return;
2537+
}
2538+
2539+
void
2540+
neut_mesh_node_elts_per (struct NODES Nodes, struct MESH Mesh, int node, int **pelts, int *peltqty)
2541+
{
2542+
int nodeeltqty, *nodeelts = NULL;
2543+
2544+
(*peltqty) = Mesh.NodeElts[node][0];
2545+
(*pelts) = ut_alloc_1d_int (*peltqty);
2546+
2547+
ut_array_1d_int_memcpy (Mesh.NodeElts[node] + 1, Mesh.NodeElts[node][0], *pelts);
2548+
2549+
// periodic
2550+
if (Nodes.PerNodeQty > 0)
2551+
{
2552+
// is slave
2553+
if (Nodes.PerNodeMaster[node] > 0)
2554+
ut_array_1d_int_listpair_merge (*pelts, *peltqty, Mesh.NodeElts[Nodes.PerNodeMaster[node]] + 1,
2555+
Mesh.NodeElts[Nodes.PerNodeMaster[node]][0], pelts, peltqty);
2556+
2557+
// is master
2558+
else if (Nodes.PerNodeSlaveQty[node] > 0)
2559+
{
2560+
neut_mesh_nodes_allelts (Mesh, Nodes.PerNodeSlaveNb[node] + 1, Nodes.PerNodeSlaveQty[node], &nodeelts, &nodeeltqty);
2561+
ut_array_1d_int_listpair_merge (*pelts, *peltqty, nodeelts, nodeeltqty, pelts, peltqty);
2562+
}
2563+
}
2564+
2565+
return;
2566+
}

0 commit comments

Comments
 (0)