Skip to content

Commit dbf41ec

Browse files
committed
Improve error messages for failed 3D meshing
Added failed_faces and failed_polys files for failed faces and polys.
1 parent 6de4301 commit dbf41ec

File tree

11 files changed

+78
-36
lines changed

11 files changed

+78
-36
lines changed

VERSIONS

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
New in 4.8.2-6 (21 Mar 2024):
1+
New in 4.8.2-7 (22 Mar 2024):
22
- module -T: added -transform "cut(cube)", improved -transform "cut(cubei)",
33
made minor improvements.
4+
- module -M: made minor improvements.
45

56
New in 4.8.1 (02 Feb 2024):
67
- general: fixed compatibility with Gmsh (version 4.12.2).

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.8.2-6'
15-
release = u'4.8.2-6'
14+
version = u'4.8.2-7'
15+
release = u'4.8.2-7'
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.8.2-6\")
10+
set(NEPER_VERSION \"4.8.2-7\")
1111
project(neper)
1212

1313
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8.1)

src/neper_m/nem/nem_mesh_gmsh/nem_mesh_gmsh1.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ nem_mesh_3d_gmsh (struct TESS Tess, int poly, struct NODES Nodes,
1414
FILE *file, *file2;
1515
char *Args = NULL;
1616
struct timeval beg_time, end_time;
17-
int nb, optinb, status;
17+
int nb, optinb, status, status2;
1818
struct MESH M2;
1919
int **Elsets = NULL;
2020
int ElsetQty;
@@ -119,7 +119,16 @@ nem_mesh_3d_gmsh (struct TESS Tess, int poly, struct NODES Nodes,
119119
{
120120
status = 0;
121121
file = ut_file_open (filename_msh, "R");
122-
neut_mesh_fscanf_msh (file, pN, NULL, NULL, NULL, pM, NULL, NULL);
122+
status2 = neut_mesh_fscanf_msh (file, pN, NULL, NULL, NULL, pM, NULL, NULL);
123+
if (status2)
124+
{
125+
FILE *fp = ut_file_open ("failed_polys", "w");
126+
fprintf (fp, "%d\n", poly);
127+
fflush (fp);
128+
ut_file_close (fp, "failed_polys", "w");
129+
ut_print_message (2, 0, "Meshing failed\n");
130+
}
131+
123132
ut_file_close (file, filename_msh, "R");
124133
}
125134

src/neper_m/nem_meshing/nem_meshing_3d/nem_meshing_3d2.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,13 @@ nem_meshing_3d_poly (struct IN_M In, double cl, double mesh3dclreps,
4747
#pragma omp atomic
4848
(*pMultim).algohit[(*pMultim).Oalgo[poly]]++;
4949
else
50+
{
51+
FILE *fp = ut_file_open ("failed_polys", "w");
52+
fprintf (fp, "%d\n", poly);
53+
ut_file_close (fp, "failed_polys", "w");
5054
ut_print_message (2, 3, "Meshing of poly %d (%d) failed\n", poly,
5155
neut_tess_cell_id (Tess, poly));
56+
}
5257

5358
neut_nodes_free (&N2);
5459
neut_mesh_free (&M2);

src/neper_m/nem_meshing_para/nem_meshing_para_faceproj/nem_meshing_para_faceproj1.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ nem_meshing_para_faceproj (struct TESS Tess, struct NODES RNodes,
1212
char *message = ut_alloc_1d_char (8);
1313
int *failed = ut_alloc_1d_int (Tess.FaceQty + 1);
1414
int failed_sum;
15+
FILE *file = NULL;
1516

1617
(*pMeshPara).face_eq = ut_alloc_2d (Tess.FaceQty + 1, 4);
1718

@@ -33,7 +34,8 @@ nem_meshing_para_faceproj (struct TESS Tess, struct NODES RNodes,
3334
status =
3435
nem_meshing_para_faceproj_eq (Tess, RNodes, RMesh, i,
3536
(*pMeshPara).face_eq[i]);
36-
if (status == -1)
37+
38+
if (status != 0)
3739
{
3840
if (!strcmp ((*pMeshPara).face_op[i], "meshproj"))
3941
ut_string_string ("copy", (*pMeshPara).face_op + i);
@@ -55,6 +57,19 @@ nem_meshing_para_faceproj (struct TESS Tess, struct NODES RNodes,
5557
if (failed[i])
5658
printf (" %d", i);
5759
printf (".\n");
60+
61+
file = ut_file_open ("failed_faces", "w");
62+
for (i = 1; i <= Tess.FaceQty; i++)
63+
if (failed[i])
64+
fprintf (file, "%d\n", i);
65+
ut_file_close (file, "failed_faces", "w");
66+
67+
file = ut_file_open ("failed_polys", "w");
68+
for (i = 1; i <= Tess.FaceQty; i++)
69+
if (failed[i])
70+
fprintf (file, "%d %d\n", Tess.FacePoly[i][0], Tess.FacePoly[i][1]);
71+
ut_file_close (file, "failed_polys", "w");
72+
5873
abort ();
5974
}
6075

src/neut/neut_mesh/neut_mesh_fscanf/neut_mesh_fscanf_msh/neut_mesh_fscanf_msh.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ extern "C"
99

1010
#ifndef NEUT_MESH_FSCANF_GMSH
1111

12-
extern void neut_mesh_fscanf_msh (FILE * file, struct NODES *pNodes,
12+
extern int neut_mesh_fscanf_msh (FILE * file, struct NODES *pNodes,
1313
struct MESH *pMesh0D,
1414
struct MESH *pMesh1D,
1515
struct MESH *pMesh2D,

src/neut/neut_mesh/neut_mesh_fscanf/neut_mesh_fscanf_msh/neut_mesh_fscanf_msh1.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44

55
#include"neut_mesh_fscanf_msh_.h"
66

7-
void
7+
int
88
neut_mesh_fscanf_msh (FILE * file, struct NODES *pNodes, struct MESH *pMesh0D,
99
struct MESH *pMesh1D, struct MESH *pMesh2D,
1010
struct MESH *pMesh3D, struct MESH *pMeshCo,
1111
int *ptopology)
1212
{
13+
int status;
1314
int *node_nbs = NULL;
1415
char *mode = NULL, *domain = NULL;
1516
struct MESH *pMesh = NULL;
@@ -33,8 +34,12 @@ neut_mesh_fscanf_msh (FILE * file, struct NODES *pNodes, struct MESH *pMesh0D,
3334
neut_mesh_fscanf_msh_nodes (file, mode, pNodes, &node_nbs);
3435

3536
else if (ut_file_nextstring_test (file, "$Elements"))
36-
neut_mesh_fscanf_msh_elts (file, mode, domain, node_nbs, pMesh0D, pMesh1D, pMesh2D,
37+
{
38+
status = neut_mesh_fscanf_msh_elts (file, mode, domain, node_nbs, pMesh0D, pMesh1D, pMesh2D,
3739
pMesh3D, pMeshCo, &pMesh);
40+
if (status)
41+
return -1;
42+
}
3843

3944
else if (ut_file_nextstring_test (file, "$Periodicity"))
4045
neut_mesh_fscanf_msh_periodicity (file, pNodes);
@@ -69,7 +74,7 @@ neut_mesh_fscanf_msh (FILE * file, struct NODES *pNodes, struct MESH *pMesh0D,
6974

7075
ut_free_1d_char (&mode);
7176

72-
return;
77+
return 0;
7378
}
7479

7580
void

src/neut/neut_mesh/neut_mesh_fscanf/neut_mesh_fscanf_msh/neut_mesh_fscanf_msh2.c

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,13 @@ neut_mesh_fscanf_msh_nodes (FILE * file, char *mode,
119119
return;
120120
}
121121

122-
void
122+
int
123123
neut_mesh_fscanf_msh_elts (FILE * file, char *mode, char *domain, int *node_nbs,
124124
struct MESH *pMesh0D, struct MESH *pMesh1D,
125125
struct MESH *pMesh2D, struct MESH *pMesh3D,
126126
struct MESH *pMeshCo, struct MESH **ppMesh)
127127
{
128-
int leftelts, dim;
128+
int leftelts, dim, status;
129129
struct MESH Trash;
130130

131131
neut_mesh_set_zero (&Trash);
@@ -140,29 +140,34 @@ neut_mesh_fscanf_msh_elts (FILE * file, char *mode, char *domain, int *node_nbs,
140140
if (!strcmp (mode, "binary"))
141141
if (fscanf (file, "%c", &c) != 1)
142142
abort ();
143-
leftelts -=
144-
neut_mesh_fscanf_msh_elts_dim (file, mode, pMesh0D ? pMesh0D : &Trash, node_nbs, 0,
145-
leftelts);
143+
status = neut_mesh_fscanf_msh_elts_dim (file, mode, pMesh0D ? pMesh0D : &Trash, node_nbs, 0,
144+
&leftelts);
145+
if (status != 0)
146+
return status;
146147
if (pMesh0D && (*pMesh0D).EltQty > 0)
147148
dim = 0;
148-
leftelts -=
149-
neut_mesh_fscanf_msh_elts_dim (file, mode, pMesh1D ? pMesh1D : &Trash, node_nbs, 1,
150-
leftelts);
149+
status = neut_mesh_fscanf_msh_elts_dim (file, mode, pMesh1D ? pMesh1D : &Trash, node_nbs, 1,
150+
&leftelts);
151+
if (status != 0)
152+
return status;
151153
if (pMesh1D && (*pMesh1D).EltQty > 0)
152154
dim = 1;
153-
leftelts -=
154-
neut_mesh_fscanf_msh_elts_dim (file, mode, pMesh2D ? pMesh2D : &Trash, node_nbs, 2,
155-
leftelts);
155+
status = neut_mesh_fscanf_msh_elts_dim (file, mode, pMesh2D ? pMesh2D : &Trash, node_nbs, 2,
156+
&leftelts);
157+
if (status != 0)
158+
return status;
156159
if (pMesh2D && (*pMesh2D).EltQty > 0)
157160
dim = 2;
158-
leftelts -=
159-
neut_mesh_fscanf_msh_elts_dim (file, mode, pMesh3D ? pMesh3D : &Trash, node_nbs, 3,
160-
leftelts);
161+
status = neut_mesh_fscanf_msh_elts_dim (file, mode, pMesh3D ? pMesh3D : &Trash, node_nbs, 3,
162+
&leftelts);
163+
if (status != 0)
164+
return status;
161165
if (pMesh3D && (*pMesh3D).EltQty > 0)
162166
dim = 3;
163-
leftelts -=
164-
neut_mesh_fscanf_msh_elts_dim (file, mode, pMeshCo ? pMeshCo : &Trash, node_nbs, dim,
165-
leftelts);
167+
status = neut_mesh_fscanf_msh_elts_dim (file, mode, pMeshCo ? pMeshCo : &Trash, node_nbs, dim,
168+
&leftelts);
169+
if (status != 0)
170+
return status;
166171

167172
ut_free_1d_int (&node_nbs);
168173

@@ -197,7 +202,7 @@ neut_mesh_fscanf_msh_elts (FILE * file, char *mode, char *domain, int *node_nbs,
197202

198203
neut_mesh_free (&Trash);
199204

200-
return;
205+
return 0;
201206
}
202207

203208
void

src/neut/neut_mesh/neut_mesh_fscanf/neut_mesh_fscanf_msh/neut_mesh_fscanf_msh3.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,22 +69,22 @@ neut_mesh_fscanf_msh_nodes_foot (FILE * file)
6969

7070
int
7171
neut_mesh_fscanf_msh_elts_dim (FILE * file, char *mode, struct MESH *pMesh, int *node_nbs,
72-
int Dimension, int MaxEltQty)
72+
int Dimension, int *pMaxEltQty)
7373
{
7474
int *elt_nbs = NULL;
7575
int *elset_nbs = NULL;
7676

7777
neut_mesh_reset (pMesh);
7878

7979
if (Dimension < 0 || Dimension > 3)
80-
ut_print_message (2, 0, "Wrong mesh dimension: %d!\n", Dimension);
80+
return -1;
8181

82-
if (MaxEltQty != 0)
82+
if (*pMaxEltQty != 0)
8383
{
8484
(*pMesh).Dimension = Dimension;
8585

8686
neut_mesh_fscanf_msh_elts_dim_prop (file, mode, pMesh, &elt_nbs,
87-
MaxEltQty);
87+
*pMaxEltQty);
8888

8989
neut_mesh_init_elsets_2 (pMesh, elt_nbs, &elset_nbs);
9090

@@ -102,5 +102,7 @@ neut_mesh_fscanf_msh_elts_dim (FILE * file, char *mode, struct MESH *pMesh, int
102102
ut_free_1d_int (&elt_nbs);
103103
ut_free_1d_int (&elset_nbs);
104104

105-
return (*pMesh).EltQty;
105+
(*pMaxEltQty) -= (*pMesh).EltQty;
106+
107+
return 0;
106108
}

0 commit comments

Comments
 (0)