Bug Summary

File:dm/impls/plex/plexgmsh.c
Warning:line 130, column 52
Array access (from variable 'ibuf') results in a null pointer dereference

Annotated Source Code

[?] Use j/k keys for keyboard navigation

1#define PETSCDM_DLL
2#include <petsc/private/dmpleximpl.h> /*I "petscdmplex.h" I*/
3#include <petsc/private/hashmapi.h>
4
5typedef struct {
6 PetscViewer viewer;
7 int fileFormat;
8 int dataSize;
9 PetscBool binary;
10 PetscBool byteSwap;
11 size_t wlen;
12 void *wbuf;
13 size_t slen;
14 void *sbuf;
15} GmshFile;
16
17static PetscErrorCode GmshBufferGet(GmshFile *gmsh, size_t count, size_t eltsize, void *buf)
18{
19 size_t size = count * eltsize;
20 PetscErrorCode ierr;
21
22 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 22; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
23 if (gmsh->wlen < size) {
24 ierr = PetscFree(gmsh->wbuf)((*PetscTrFree)((void*)(gmsh->wbuf),24,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || ((gmsh->wbuf) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),24,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
25 ierr = PetscMalloc(size, &gmsh->wbuf)((*PetscTrMalloc)((size),PETSC_FALSE,25,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(void**)(&gmsh->wbuf)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),25,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
26 gmsh->wlen = size;
27 }
28 *(void**)buf = size ? gmsh->wbuf : NULL((void*)0);
29 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
30}
31
32static PetscErrorCode GmshBufferSizeGet(GmshFile *gmsh, size_t count, void *buf)
33{
34 size_t dataSize = (size_t)gmsh->dataSize;
35 size_t size = count * dataSize;
36 PetscErrorCode ierr;
37
38 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 38; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
9
Within the expansion of the macro 'PetscFunctionBegin':
39 if (gmsh->slen < size) {
10
Taking false branch
40 ierr = PetscFree(gmsh->sbuf)((*PetscTrFree)((void*)(gmsh->sbuf),40,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || ((gmsh->sbuf) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),40,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
41 ierr = PetscMalloc(size, &gmsh->sbuf)((*PetscTrMalloc)((size),PETSC_FALSE,41,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(void**)(&gmsh->sbuf)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),41,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
42 gmsh->slen = size;
43 }
44 *(void**)buf = size ? gmsh->sbuf : NULL((void*)0);
11
Assuming 'size' is 0
12
'?' condition is false
45 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
13
Within the expansion of the macro 'PetscFunctionReturn':
46}
47
48static PetscErrorCode GmshRead(GmshFile *gmsh, void *buf, PetscInt count, PetscDataType dtype)
49{
50 PetscErrorCode ierr;
51 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 51; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
52 ierr = PetscViewerRead(gmsh->viewer, buf, count, NULL((void*)0), dtype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),52,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
53 if (gmsh->byteSwap) {ierr = PetscByteSwap(buf, dtype, count);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),53,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
54 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
55}
56
57static PetscErrorCode GmshReadString(GmshFile *gmsh, char *buf, PetscInt count)
58{
59 PetscErrorCode ierr;
60 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 60; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
61 ierr = PetscViewerRead(gmsh->viewer, buf, count, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),61,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
62 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
63}
64
65static PetscErrorCode GmshMatch(PETSC_UNUSED__attribute((unused)) GmshFile *gmsh, const char Section[], char line[PETSC_MAX_PATH_LEN4096], PetscBool *match)
66{
67 PetscErrorCode ierr;
68 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 68; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
69 ierr = PetscStrcmp(line, Section, match);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),69,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
70 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
71}
72
73static PetscErrorCode GmshExpect(GmshFile *gmsh, const char Section[], char line[PETSC_MAX_PATH_LEN4096])
74{
75 PetscBool match;
76 PetscErrorCode ierr;
77
78 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 78; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
79 ierr = GmshMatch(gmsh, Section, line, &match);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),79,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
80 if (!match) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file, expecting %s",Section)return PetscError(((MPI_Comm)0x44000001),80,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file, expecting %s"
,Section)
;
81 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
82}
83
84static PetscErrorCode GmshReadSection(GmshFile *gmsh, char line[PETSC_MAX_PATH_LEN4096])
85{
86 PetscBool match;
87 PetscErrorCode ierr;
88
89 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 89; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
90 while (PETSC_TRUE) {
91 ierr = GmshReadString(gmsh, line, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),91,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
92 ierr = GmshMatch(gmsh, "$Comments", line, &match);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),92,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
93 if (!match) break;
94 while (PETSC_TRUE) {
95 ierr = GmshReadString(gmsh, line, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),95,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
96 ierr = GmshMatch(gmsh, "$EndComments", line, &match);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),96,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
97 if (match) break;
98 }
99 }
100 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
101}
102
103static PetscErrorCode GmshReadEndSection(GmshFile *gmsh, const char EndSection[], char line[PETSC_MAX_PATH_LEN4096])
104{
105 PetscErrorCode ierr;
106 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 106; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
107 ierr = GmshReadString(gmsh, line, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),107,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
108 ierr = GmshExpect(gmsh, EndSection, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),108,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
109 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
110}
111
112static PetscErrorCode GmshReadSize(GmshFile *gmsh, PetscInt *buf, PetscInt count)
113{
114 PetscInt i;
115 size_t dataSize = (size_t)gmsh->dataSize;
116 PetscErrorCode ierr;
117
118 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 118; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
119 if (dataSize == sizeof(PetscInt)) {
4
Taking false branch
120 ierr = GmshRead(gmsh, buf, count, PETSC_INT);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),120,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
121 } else if (dataSize == sizeof(int)) {
5
Taking false branch
122 int *ibuf = NULL((void*)0);
123 ierr = GmshBufferSizeGet(gmsh, count, &ibuf);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),123,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
124 ierr = GmshRead(gmsh, ibuf, count, PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),124,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
125 for (i = 0; i < count; ++i) buf[i] = (PetscInt)ibuf[i];
126 } else if (dataSize == sizeof(long)) {
6
Taking true branch
127 long *ibuf = NULL((void*)0);
7
'ibuf' initialized to a null pointer value
128 ierr = GmshBufferSizeGet(gmsh, count, &ibuf);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),128,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
8
Calling 'GmshBufferSizeGet'
14
Returning from 'GmshBufferSizeGet'
129 ierr = GmshRead(gmsh, ibuf, count, PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),129,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
130 for (i = 0; i < count; ++i) buf[i] = (PetscInt)ibuf[i];
15
Assuming 'i' is < 'count'
16
Loop condition is true. Entering loop body
17
Array access (from variable 'ibuf') results in a null pointer dereference
131 } else if (dataSize == sizeof(PetscInt64)) {
132 PetscInt64 *ibuf = NULL((void*)0);
133 ierr = GmshBufferSizeGet(gmsh, count, &ibuf);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),133,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
134 ierr = GmshRead(gmsh, ibuf, count, PETSC_INT64);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),134,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
135 for (i = 0; i < count; ++i) buf[i] = (PetscInt)ibuf[i];
136 }
137 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
138}
139
140static PetscErrorCode GmshReadInt(GmshFile *gmsh, int *buf, PetscInt count)
141{
142 PetscErrorCode ierr;
143 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 143; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
144 ierr = GmshRead(gmsh, buf, count, PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),144,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
145 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
146}
147
148static PetscErrorCode GmshReadDouble(GmshFile *gmsh, double *buf, PetscInt count)
149{
150 PetscErrorCode ierr;
151 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 151; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
152 ierr = GmshRead(gmsh, buf, count, PETSC_DOUBLE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),152,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
153 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
154}
155
156typedef struct {
157 PetscInt id; /* Entity number */
158 PetscInt dim; /* Entity dimension */
159 double bbox[6]; /* Bounding box */
160 PetscInt numTags; /* Size of tag array */
161 int tags[4]; /* Tag array */
162} GmshEntity;
163
164typedef struct {
165 GmshEntity *entity[4];
166 PetscHMapI entityMap[4];
167} GmshEntities;
168
169static PetscErrorCode GmshEntitiesCreate(PetscInt count[4], GmshEntities **entities)
170{
171 PetscInt dim;
172 PetscErrorCode ierr;
173
174 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 174; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
175 ierr = PetscNew(entities)PetscMallocA(1,PETSC_TRUE,175,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(1)*sizeof(**((entities))),((entities)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),175,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
176 for (dim = 0; dim < 4; ++dim) {
177 ierr = PetscCalloc1(count[dim], &(*entities)->entity[dim])PetscMallocA(1,PETSC_TRUE,177,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(count[dim])*sizeof(**(&(*entities)->entity[dim
])),(&(*entities)->entity[dim]))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),177,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
178 ierr = PetscHMapICreate(&(*entities)->entityMap[dim]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),178,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
179 }
180 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
181}
182
183static PetscErrorCode GmshEntitiesAdd(GmshEntities *entities, PetscInt index, PetscInt dim, PetscInt eid, GmshEntity** entity)
184{
185 PetscErrorCode ierr;
186 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 186; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
187 ierr = PetscHMapISet(entities->entityMap[dim], eid, index);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),187,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
188 entities->entity[dim][index].dim = dim;
189 entities->entity[dim][index].id = eid;
190 if (entity) *entity = &entities->entity[dim][index];
191 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
192}
193
194static PetscErrorCode GmshEntitiesGet(GmshEntities *entities, PetscInt dim, PetscInt eid, GmshEntity** entity)
195{
196 PetscInt index;
197 PetscErrorCode ierr;
198
199 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 199; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
200 ierr = PetscHMapIGet(entities->entityMap[dim], eid, &index);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),200,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
201 *entity = &entities->entity[dim][index];
202 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
203}
204
205static PetscErrorCode GmshEntitiesDestroy(GmshEntities **entities)
206{
207 PetscInt dim;
208 PetscErrorCode ierr;
209
210 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 210; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
211 if (!*entities) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
212 for (dim = 0; dim < 4; ++dim) {
213 ierr = PetscFree((*entities)->entity[dim])((*PetscTrFree)((void*)((*entities)->entity[dim]),213,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c") ||
(((*entities)->entity[dim]) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),213,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
214 ierr = PetscHMapIDestroy(&(*entities)->entityMap[dim]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),214,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
215 }
216 ierr = PetscFree((*entities))((*PetscTrFree)((void*)((*entities)),216,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || (((*entities)) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),216,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
217 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
218}
219
220typedef struct {
221 PetscInt id; /* Entity number */
222 PetscInt dim; /* Entity dimension */
223 PetscInt cellType; /* Cell type */
224 PetscInt numNodes; /* Size of node array */
225 PetscInt nodes[8]; /* Node array */
226 PetscInt numTags; /* Size of tag array */
227 int tags[4]; /* Tag array */
228} GmshElement;
229
230static PetscErrorCode DMPlexCreateGmsh_ReadNodes_v22(GmshFile *gmsh, int shift, PetscInt *numVertices, double **gmsh_nodes)
231{
232 PetscViewer viewer = gmsh->viewer;
233 PetscBool byteSwap = gmsh->byteSwap;
234 char line[PETSC_MAX_PATH_LEN4096];
235 int v, num, nid, snum;
236 double *coordinates;
237 PetscErrorCode ierr;
238
239 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 239; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
240 ierr = PetscViewerRead(viewer, line, 1, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),240,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
241 snum = sscanf(line, "%d", &num);
242 if (snum != 1) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),242,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file")
;
243 ierr = PetscMalloc1(num*3, &coordinates)PetscMallocA(1,PETSC_FALSE,243,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(num*3)*sizeof(**(&coordinates)),(&coordinates
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),243,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
244 *numVertices = num;
245 *gmsh_nodes = coordinates;
246 for (v = 0; v < num; ++v) {
247 double *xyz = coordinates + v*3;
248 ierr = PetscViewerRead(viewer, &nid, 1, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),248,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
249 if (byteSwap) {ierr = PetscByteSwap(&nid, PETSC_ENUM, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),249,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
250 if (nid != v+shift) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unexpected node number %d should be %d", nid, v+shift)return PetscError(((MPI_Comm)0x44000001),250,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Unexpected node number %d should be %d"
,nid,v+shift)
;
251 ierr = PetscViewerRead(viewer, xyz, 3, NULL((void*)0), PETSC_DOUBLE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),251,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
252 if (byteSwap) {ierr = PetscByteSwap(xyz, PETSC_DOUBLE, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),252,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
253 }
254 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
255}
256
257/* Gmsh elements can be of any dimension/co-dimension, so we need to traverse the
258 file contents multiple times to figure out the true number of cells and facets
259 in the given mesh. To make this more efficient we read the file contents only
260 once and store them in memory, while determining the true number of cells. */
261static PetscErrorCode DMPlexCreateGmsh_ReadElements_v22(GmshFile* gmsh, PETSC_UNUSED__attribute((unused)) int shift, PetscInt *numCells, GmshElement **gmsh_elems)
262{
263 PetscViewer viewer = gmsh->viewer;
264 PetscBool binary = gmsh->binary;
265 PetscBool byteSwap = gmsh->byteSwap;
266 char line[PETSC_MAX_PATH_LEN4096];
267 GmshElement *elements;
268 int i, c, p, num, ibuf[1+4+512], snum;
269 int cellType, dim, numNodes, numNodesIgnore, numElem, numTags;
270 PetscErrorCode ierr;
271
272 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 272; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
273 ierr = PetscViewerRead(viewer, line, 1, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),273,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;;
274 snum = sscanf(line, "%d", &num);
275 if (snum != 1) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),275,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file")
;
276 ierr = PetscMalloc1(num, &elements)PetscMallocA(1,PETSC_FALSE,276,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(num)*sizeof(**(&elements)),(&elements))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),276,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
277 *numCells = num;
278 *gmsh_elems = elements;
279 for (c = 0; c < num;) {
280 ierr = PetscViewerRead(viewer, ibuf, 3, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),280,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
281 if (byteSwap) {ierr = PetscByteSwap(ibuf, PETSC_ENUM, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),281,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
282 if (binary) {
283 cellType = ibuf[0];
284 numElem = ibuf[1];
285 numTags = ibuf[2];
286 } else {
287 elements[c].id = ibuf[0];
288 cellType = ibuf[1];
289 numTags = ibuf[2];
290 numElem = 1;
291 }
292 /* http://gmsh.info/doc/texinfo/gmsh.html#MSH-ASCII-file-format */
293 numNodesIgnore = 0;
294 switch (cellType) {
295 case 1: /* 2-node line */
296 dim = 1;
297 numNodes = 2;
298 break;
299 case 2: /* 3-node triangle */
300 dim = 2;
301 numNodes = 3;
302 break;
303 case 3: /* 4-node quadrangle */
304 dim = 2;
305 numNodes = 4;
306 break;
307 case 4: /* 4-node tetrahedron */
308 dim = 3;
309 numNodes = 4;
310 break;
311 case 5: /* 8-node hexahedron */
312 dim = 3;
313 numNodes = 8;
314 break;
315 case 6: /* 6-node wedge */
316 dim = 3;
317 numNodes = 6;
318 break;
319 case 8: /* 3-node 2nd order line */
320 dim = 1;
321 numNodes = 2;
322 numNodesIgnore = 1;
323 break;
324 case 9: /* 6-node 2nd order triangle */
325 dim = 2;
326 numNodes = 3;
327 numNodesIgnore = 3;
328 break;
329 case 13: /* 18-node 2nd wedge */
330 dim = 3;
331 numNodes = 6;
332 numNodesIgnore = 12;
333 break;
334 case 15: /* 1-node vertex */
335 dim = 0;
336 numNodes = 1;
337 break;
338 case 7: /* 5-node pyramid */
339 case 10: /* 9-node 2nd order quadrangle */
340 case 11: /* 10-node 2nd order tetrahedron */
341 case 12: /* 27-node 2nd order hexhedron */
342 case 14: /* 14-node 2nd order pyramid */
343 default:
344 SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unsupported Gmsh element type %d", cellType)return PetscError(((MPI_Comm)0x44000001),344,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Unsupported Gmsh element type %d",cellType
)
;
345 }
346 if (binary) {
347 const int nint = 1 + numTags + numNodes + numNodesIgnore;
348 /* Loop over element blocks */
349 for (i = 0; i < numElem; ++i, ++c) {
350 ierr = PetscViewerRead(viewer, ibuf, nint, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),350,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
351 if (byteSwap) {ierr = PetscByteSwap(ibuf, PETSC_ENUM, nint);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),351,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
352 elements[c].dim = dim;
353 elements[c].numNodes = numNodes;
354 elements[c].numTags = numTags;
355 elements[c].id = ibuf[0];
356 elements[c].cellType = cellType;
357 for (p = 0; p < numTags; p++) elements[c].tags[p] = ibuf[1 + p];
358 for (p = 0; p < numNodes; p++) elements[c].nodes[p] = ibuf[1 + numTags + p];
359 }
360 } else {
361 const int nint = numTags + numNodes + numNodesIgnore;
362 elements[c].dim = dim;
363 elements[c].numNodes = numNodes;
364 elements[c].numTags = numTags;
365 elements[c].cellType = cellType;
366 ierr = PetscViewerRead(viewer, ibuf, nint, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),366,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
367 for (p = 0; p < numTags; p++) elements[c].tags[p] = ibuf[p];
368 for (p = 0; p < numNodes; p++) elements[c].nodes[p] = ibuf[numTags + p];
369 c++;
370 }
371 }
372 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
373}
374
375/*
376$Entities
377 numPoints(unsigned long) numCurves(unsigned long)
378 numSurfaces(unsigned long) numVolumes(unsigned long)
379 // points
380 tag(int) boxMinX(double) boxMinY(double) boxMinZ(double)
381 boxMaxX(double) boxMaxY(double) boxMaxZ(double)
382 numPhysicals(unsigned long) phyisicalTag[...](int)
383 ...
384 // curves
385 tag(int) boxMinX(double) boxMinY(double) boxMinZ(double)
386 boxMaxX(double) boxMaxY(double) boxMaxZ(double)
387 numPhysicals(unsigned long) physicalTag[...](int)
388 numBREPVert(unsigned long) tagBREPVert[...](int)
389 ...
390 // surfaces
391 tag(int) boxMinX(double) boxMinY(double) boxMinZ(double)
392 boxMaxX(double) boxMaxY(double) boxMaxZ(double)
393 numPhysicals(unsigned long) physicalTag[...](int)
394 numBREPCurve(unsigned long) tagBREPCurve[...](int)
395 ...
396 // volumes
397 tag(int) boxMinX(double) boxMinY(double) boxMinZ(double)
398 boxMaxX(double) boxMaxY(double) boxMaxZ(double)
399 numPhysicals(unsigned long) physicalTag[...](int)
400 numBREPSurfaces(unsigned long) tagBREPSurfaces[...](int)
401 ...
402$EndEntities
403*/
404static PetscErrorCode DMPlexCreateGmsh_ReadEntities_v40(GmshFile *gmsh, GmshEntities **entities)
405{
406 PetscViewer viewer = gmsh->viewer;
407 PetscBool byteSwap = gmsh->byteSwap;
408 long index, num, lbuf[4];
409 int dim, eid, numTags, *ibuf, t;
410 PetscInt count[4], i;
411 GmshEntity *entity = NULL((void*)0);
412 PetscErrorCode ierr;
413
414 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 414; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
415 ierr = PetscViewerRead(viewer, lbuf, 4, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),415,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
416 if (byteSwap) {ierr = PetscByteSwap(lbuf, PETSC_LONG, 4);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),416,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
417 for (i = 0; i < 4; ++i) count[i] = lbuf[i];
418 ierr = GmshEntitiesCreate(count, entities);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),418,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
419 for (dim = 0; dim < 4; ++dim) {
420 for (index = 0; index < count[dim]; ++index) {
421 ierr = PetscViewerRead(viewer, &eid, 1, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),421,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
422 if (byteSwap) {ierr = PetscByteSwap(&eid, PETSC_ENUM, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),422,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
423 ierr = GmshEntitiesAdd(*entities, (PetscInt)index, dim, eid, &entity);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),423,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
424 ierr = PetscViewerRead(viewer, entity->bbox, 6, NULL((void*)0), PETSC_DOUBLE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),424,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
425 if (byteSwap) {ierr = PetscByteSwap(entity->bbox, PETSC_DOUBLE, 6);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),425,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
426 ierr = PetscViewerRead(viewer, &num, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),426,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
427 if (byteSwap) {ierr = PetscByteSwap(&num, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),427,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
428 ierr = GmshBufferGet(gmsh, num, sizeof(int), &ibuf);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),428,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
429 ierr = PetscViewerRead(viewer, ibuf, num, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),429,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
430 if (byteSwap) {ierr = PetscByteSwap(ibuf, PETSC_ENUM, num);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),430,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
431 entity->numTags = numTags = (int) PetscMin(num, 4)(((num)<(4)) ? (num) : (4));
432 for (t = 0; t < numTags; ++t) entity->tags[t] = ibuf[t];
433 if (dim == 0) continue;
434 ierr = PetscViewerRead(viewer, &num, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),434,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
435 if (byteSwap) {ierr = PetscByteSwap(&num, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),435,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
436 ierr = GmshBufferGet(gmsh, num, sizeof(int), &ibuf);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),436,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
437 ierr = PetscViewerRead(viewer, ibuf, num, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),437,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
438 if (byteSwap) {ierr = PetscByteSwap(ibuf, PETSC_ENUM, num);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),438,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
439 }
440 }
441 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
442}
443
444/*
445$Nodes
446 numEntityBlocks(unsigned long) numNodes(unsigned long)
447 tagEntity(int) dimEntity(int) typeNode(int) numNodes(unsigned long)
448 tag(int) x(double) y(double) z(double)
449 ...
450 ...
451$EndNodes
452*/
453static PetscErrorCode DMPlexCreateGmsh_ReadNodes_v40(GmshFile *gmsh, int shift, PetscInt *numVertices, double **gmsh_nodes)
454{
455 PetscViewer viewer = gmsh->viewer;
456 PetscBool byteSwap = gmsh->byteSwap;
457 long block, node, v, numEntityBlocks, numTotalNodes, numNodes;
458 int info[3], nid;
459 double *coordinates;
460 char *cbuf;
461 PetscErrorCode ierr;
462
463 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 463; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
464 ierr = PetscViewerRead(viewer, &numEntityBlocks, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),464,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
465 if (byteSwap) {ierr = PetscByteSwap(&numEntityBlocks, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),465,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
466 ierr = PetscViewerRead(viewer, &numTotalNodes, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),466,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
467 if (byteSwap) {ierr = PetscByteSwap(&numTotalNodes, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),467,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
468 ierr = PetscMalloc1(numTotalNodes*3, &coordinates)PetscMallocA(1,PETSC_FALSE,468,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(numTotalNodes*3)*sizeof(**(&coordinates)),(&
coordinates))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),468,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
469 *numVertices = numTotalNodes;
470 *gmsh_nodes = coordinates;
471 for (v = 0, block = 0; block < numEntityBlocks; ++block) {
472 ierr = PetscViewerRead(viewer, info, 3, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),472,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
473 ierr = PetscViewerRead(viewer, &numNodes, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),473,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
474 if (byteSwap) {ierr = PetscByteSwap(&numNodes, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),474,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
475 if (gmsh->binary) {
476 int nbytes = sizeof(int) + 3*sizeof(double);
477 ierr = GmshBufferGet(gmsh, numNodes, nbytes, &cbuf);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),477,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
478 ierr = PetscViewerRead(viewer, cbuf, numNodes*nbytes, NULL((void*)0), PETSC_CHAR);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),478,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
479 for (node = 0; node < numNodes; ++node, ++v) {
480 char *cnid = cbuf + node*nbytes, *cxyz = cnid + sizeof(int);
481 double *xyz = coordinates + v*3;
482 if (!PetscBinaryBigEndian()) {ierr = PetscByteSwap(cnid, PETSC_ENUM, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),482,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
483 if (!PetscBinaryBigEndian()) {ierr = PetscByteSwap(cxyz, PETSC_DOUBLE, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),483,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
484 ierr = PetscMemcpy(&nid, cnid, sizeof(int));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),484,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
485 ierr = PetscMemcpy(xyz, cxyz, 3*sizeof(double));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),485,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
486 if (byteSwap) {ierr = PetscByteSwap(&nid, PETSC_ENUM, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),486,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
487 if (byteSwap) {ierr = PetscByteSwap(xyz, PETSC_DOUBLE, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),487,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
488 if (nid != v+shift) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unexpected node number %d should be %d", nid, v+shift)return PetscError(((MPI_Comm)0x44000001),488,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Unexpected node number %d should be %d"
,nid,v+shift)
;
489 }
490 } else {
491 for (node = 0; node < numNodes; ++node, ++v) {
492 double *xyz = coordinates + v*3;
493 ierr = PetscViewerRead(viewer, &nid, 1, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),493,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
494 if (byteSwap) {ierr = PetscByteSwap(&nid, PETSC_ENUM, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),494,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
495 if (nid != v+shift) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unexpected node number %d should be %d", nid, v+shift)return PetscError(((MPI_Comm)0x44000001),495,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Unexpected node number %d should be %d"
,nid,v+shift)
;
496 ierr = PetscViewerRead(viewer, xyz, 3, NULL((void*)0), PETSC_DOUBLE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),496,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
497 if (byteSwap) {ierr = PetscByteSwap(xyz, PETSC_DOUBLE, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),497,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
498 }
499 }
500 }
501 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
502}
503
504/*
505$Elements
506 numEntityBlocks(unsigned long) numElements(unsigned long)
507 tagEntity(int) dimEntity(int) typeEle(int) numElements(unsigned long)
508 tag(int) numVert[...](int)
509 ...
510 ...
511$EndElements
512*/
513static PetscErrorCode DMPlexCreateGmsh_ReadElements_v40(GmshFile *gmsh, PETSC_UNUSED__attribute((unused)) int shift, GmshEntities *entities, PetscInt *numCells, GmshElement **gmsh_elems)
514{
515 PetscViewer viewer = gmsh->viewer;
516 PetscBool byteSwap = gmsh->byteSwap;
517 long c, block, numEntityBlocks, numTotalElements, elem, numElements;
518 int p, info[3], *ibuf = NULL((void*)0);
519 int eid, dim, numTags, *tags, cellType, numNodes;
520 GmshEntity *entity = NULL((void*)0);
521 GmshElement *elements;
522 PetscErrorCode ierr;
523
524 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 524; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
525 ierr = PetscViewerRead(viewer, &numEntityBlocks, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),525,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
526 if (byteSwap) {ierr = PetscByteSwap(&numEntityBlocks, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),526,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
527 ierr = PetscViewerRead(viewer, &numTotalElements, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),527,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
528 if (byteSwap) {ierr = PetscByteSwap(&numTotalElements, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),528,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
529 ierr = PetscCalloc1(numTotalElements, &elements)PetscMallocA(1,PETSC_TRUE,529,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(numTotalElements)*sizeof(**(&elements)),(&elements
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),529,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
530 *numCells = numTotalElements;
531 *gmsh_elems = elements;
532 for (c = 0, block = 0; block < numEntityBlocks; ++block) {
533 ierr = PetscViewerRead(viewer, info, 3, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),533,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
534 if (byteSwap) {ierr = PetscByteSwap(info, PETSC_ENUM, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),534,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
535 eid = info[0]; dim = info[1]; cellType = info[2];
536 ierr = GmshEntitiesGet(entities, dim, eid, &entity);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),536,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
537 numTags = entity->numTags;
538 tags = entity->tags;
539 switch (cellType) {
540 case 1: /* 2-node line */
541 numNodes = 2;
542 break;
543 case 2: /* 3-node triangle */
544 numNodes = 3;
545 break;
546 case 3: /* 4-node quadrangle */
547 numNodes = 4;
548 break;
549 case 4: /* 4-node tetrahedron */
550 numNodes = 4;
551 break;
552 case 5: /* 8-node hexahedron */
553 numNodes = 8;
554 break;
555 case 6: /* 6-node wedge */
556 numNodes = 6;
557 break;
558 case 15: /* 1-node vertex */
559 numNodes = 1;
560 break;
561 default:
562 SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unsupported Gmsh element type %d", cellType)return PetscError(((MPI_Comm)0x44000001),562,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Unsupported Gmsh element type %d",cellType
)
;
563 }
564 ierr = PetscViewerRead(viewer, &numElements, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),564,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
565 if (byteSwap) {ierr = PetscByteSwap(&numElements, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),565,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
566 ierr = GmshBufferGet(gmsh, (1+numNodes)*numElements, sizeof(int), &ibuf);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),566,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
567 ierr = PetscViewerRead(viewer, ibuf, (1+numNodes)*numElements, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),567,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
568 if (byteSwap) {ierr = PetscByteSwap(ibuf, PETSC_ENUM, (1+numNodes)*numElements);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),568,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
569 for (elem = 0; elem < numElements; ++elem, ++c) {
570 int *id = ibuf + elem*(1+numNodes), *nodes = id + 1;
571 GmshElement *element = elements + c;
572 element->dim = dim;
573 element->cellType = cellType;
574 element->numNodes = numNodes;
575 element->numTags = numTags;
576 element->id = id[0];
577 for (p = 0; p < numNodes; p++) element->nodes[p] = nodes[p];
578 for (p = 0; p < numTags; p++) element->tags[p] = tags[p];
579 }
580 }
581 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
582}
583
584static PetscErrorCode DMPlexCreateGmsh_ReadPeriodic_v40(GmshFile *gmsh, int shift, PetscInt slaveMap[], PetscBT bt)
585{
586 PetscViewer viewer = gmsh->viewer;
587 int fileFormat = gmsh->fileFormat;
588 PetscBool binary = gmsh->binary;
589 PetscBool byteSwap = gmsh->byteSwap;
590 int numPeriodic, snum, i;
591 char line[PETSC_MAX_PATH_LEN4096];
592 PetscErrorCode ierr;
593
594 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 594; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
595 if (fileFormat == 22 || !binary) {
596 ierr = PetscViewerRead(viewer, line, 1, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),596,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
597 snum = sscanf(line, "%d", &numPeriodic);
598 if (snum != 1) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),598,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file")
;
599 } else {
600 ierr = PetscViewerRead(viewer, &numPeriodic, 1, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),600,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
601 if (byteSwap) {ierr = PetscByteSwap(&numPeriodic, PETSC_ENUM, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),601,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
602 }
603 for (i = 0; i < numPeriodic; i++) {
604 int ibuf[3], slaveDim = -1, slaveTag = -1, masterTag = -1, slaveNode, masterNode;
605 long j, nNodes;
606 double affine[16];
607
608 if (fileFormat == 22 || !binary) {
609 ierr = PetscViewerRead(viewer, line, 3, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),609,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
610 snum = sscanf(line, "%d %d %d", &slaveDim, &slaveTag, &masterTag);
611 if (snum != 3) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),611,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file")
;
612 } else {
613 ierr = PetscViewerRead(viewer, ibuf, 3, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),613,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
614 if (byteSwap) {ierr = PetscByteSwap(ibuf, PETSC_ENUM, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),614,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
615 slaveDim = ibuf[0]; slaveTag = ibuf[1]; masterTag = ibuf[2];
616 }
617 (void)slaveDim; (void)slaveTag; (void)masterTag; /* unused */
618
619 if (fileFormat == 22 || !binary) {
620 ierr = PetscViewerRead(viewer, line, 1, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),620,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
621 snum = sscanf(line, "%ld", &nNodes);
622 if (snum != 1) { /* discard tranformation and try again */
623 ierr = PetscViewerRead(viewer, line, -PETSC_MAX_PATH_LEN4096, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),623,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
624 ierr = PetscViewerRead(viewer, line, 1, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),624,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
625 snum = sscanf(line, "%ld", &nNodes);
626 if (snum != 1) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),626,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file")
;
627 }
628 } else {
629 ierr = PetscViewerRead(viewer, &nNodes, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),629,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
630 if (byteSwap) {ierr = PetscByteSwap(&nNodes, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),630,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
631 if (nNodes == -1) { /* discard tranformation and try again */
632 ierr = PetscViewerRead(viewer, affine, 16, NULL((void*)0), PETSC_DOUBLE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),632,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
633 ierr = PetscViewerRead(viewer, &nNodes, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),633,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
634 if (byteSwap) {ierr = PetscByteSwap(&nNodes, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),634,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
635 }
636 }
637
638 for (j = 0; j < nNodes; j++) {
639 if (fileFormat == 22 || !binary) {
640 ierr = PetscViewerRead(viewer, line, 2, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),640,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
641 snum = sscanf(line, "%d %d", &slaveNode, &masterNode);
642 if (snum != 2) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),642,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file")
;
643 } else {
644 ierr = PetscViewerRead(viewer, ibuf, 2, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),644,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
645 if (byteSwap) {ierr = PetscByteSwap(ibuf, PETSC_ENUM, 2);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),645,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
646 slaveNode = ibuf[0]; masterNode = ibuf[1];
647 }
648 slaveMap[slaveNode - shift] = masterNode - shift;
649 ierr = PetscBTSet(bt, slaveNode - shift);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),649,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
650 ierr = PetscBTSet(bt, masterNode - shift);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),650,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
651 }
652 }
653 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
654}
655
656/*
657$Entities
658 numPoints(size_t) numCurves(size_t)
659 numSurfaces(size_t) numVolumes(size_t)
660 pointTag(int) X(double) Y(double) Z(double)
661 numPhysicalTags(size_t) physicalTag(int) ...
662 ...
663 curveTag(int) minX(double) minY(double) minZ(double)
664 maxX(double) maxY(double) maxZ(double)
665 numPhysicalTags(size_t) physicalTag(int) ...
666 numBoundingPoints(size_t) pointTag(int) ...
667 ...
668 surfaceTag(int) minX(double) minY(double) minZ(double)
669 maxX(double) maxY(double) maxZ(double)
670 numPhysicalTags(size_t) physicalTag(int) ...
671 numBoundingCurves(size_t) curveTag(int) ...
672 ...
673 volumeTag(int) minX(double) minY(double) minZ(double)
674 maxX(double) maxY(double) maxZ(double)
675 numPhysicalTags(size_t) physicalTag(int) ...
676 numBoundngSurfaces(size_t) surfaceTag(int) ...
677 ...
678$EndEntities
679*/
680static PetscErrorCode DMPlexCreateGmsh_ReadEntities_v41(GmshFile *gmsh, GmshEntities **entities)
681{
682 PetscInt count[4], index, numTags, i;
683 int dim, eid, *tags = NULL((void*)0);
684 GmshEntity *entity = NULL((void*)0);
685 PetscErrorCode ierr;
686
687 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 687; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
688 ierr = GmshReadSize(gmsh, count, 4);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),688,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
689 ierr = GmshEntitiesCreate(count, entities);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),689,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
690 for (dim = 0; dim < 4; ++dim) {
691 for (index = 0; index < count[dim]; ++index) {
692 ierr = GmshReadInt(gmsh, &eid, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),692,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
693 ierr = GmshEntitiesAdd(*entities, (PetscInt)index, dim, eid, &entity);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),693,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
694 ierr = GmshReadDouble(gmsh, entity->bbox, (dim == 0) ? 3 : 6);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),694,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
695 ierr = GmshReadSize(gmsh, &numTags, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),695,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
696 ierr = GmshBufferGet(gmsh, numTags, sizeof(int), &tags);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),696,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
697 ierr = GmshReadInt(gmsh, tags, numTags);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),697,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
698 entity->numTags = PetscMin(numTags, 4)(((numTags)<(4)) ? (numTags) : (4));
699 for (i = 0; i < entity->numTags; ++i) entity->tags[i] = tags[i];
700 if (dim == 0) continue;
701 ierr = GmshReadSize(gmsh, &numTags, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),701,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
702 ierr = GmshBufferGet(gmsh, numTags, sizeof(int), &tags);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),702,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
703 ierr = GmshReadInt(gmsh, tags, numTags);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),703,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
704 }
705 }
706 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
707}
708
709/*
710$Nodes
711 numEntityBlocks(size_t) numNodes(size_t)
712 minNodeTag(size_t) maxNodeTag(size_t)
713 entityDim(int) entityTag(int) parametric(int; 0 or 1) numNodesBlock(size_t)
714 nodeTag(size_t)
715 ...
716 x(double) y(double) z(double)
717 < u(double; if parametric and entityDim = 1 or entityDim = 2) >
718 < v(double; if parametric and entityDim = 2) >
719 ...
720 ...
721$EndNodes
722*/
723static PetscErrorCode DMPlexCreateGmsh_ReadNodes_v41(GmshFile *gmsh, int shift, PetscInt *numVertices, double **gmsh_nodes)
724{
725 int info[3];
726 PetscInt sizes[4], numEntityBlocks, numNodes, numNodesBlock = 0, *nodeTag = NULL((void*)0), block, node, i;
727 double *coordinates;
728 PetscErrorCode ierr;
729
730 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 730; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
731 ierr = GmshReadSize(gmsh, sizes, 4);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),731,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
732 numEntityBlocks = sizes[0]; numNodes = sizes[1];
733 ierr = PetscMalloc1(numNodes*3, &coordinates)PetscMallocA(1,PETSC_FALSE,733,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(numNodes*3)*sizeof(**(&coordinates)),(&coordinates
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),733,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
734 *numVertices = numNodes;
735 *gmsh_nodes = coordinates;
736 for (block = 0, node = 0; block < numEntityBlocks; ++block, node += numNodesBlock) {
737 ierr = GmshReadInt(gmsh, info, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),737,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
738 ierr = GmshReadSize(gmsh, &numNodesBlock, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),738,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
739 ierr = GmshBufferGet(gmsh, numNodesBlock, sizeof(PetscInt), &nodeTag);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),739,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
740 ierr = GmshReadSize(gmsh, nodeTag, numNodesBlock);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),740,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
741 for (i = 0; i < numNodesBlock; ++i) if (nodeTag[i] != node+i+shift) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unexpected node number %d should be %d", nodeTag[i], node+i+shift)return PetscError(((MPI_Comm)0x44000001),741,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Unexpected node number %d should be %d"
,nodeTag[i],node+i+shift)
;
742 if (info[2] != 0) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Parametric coordinates not supported")return PetscError(((MPI_Comm)0x44000001),742,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,56,PETSC_ERROR_INITIAL,"Parametric coordinates not supported"
)
;
743 ierr = GmshReadDouble(gmsh, coordinates+node*3, numNodesBlock*3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),743,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
744 }
745 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
746}
747
748/*
749$Elements
750 numEntityBlocks(size_t) numElements(size_t)
751 minElementTag(size_t) maxElementTag(size_t)
752 entityDim(int) entityTag(int) elementType(int; see below) numElementsBlock(size_t)
753 elementTag(size_t) nodeTag(size_t) ...
754 ...
755 ...
756$EndElements
757*/
758static PetscErrorCode DMPlexCreateGmsh_ReadElements_v41(GmshFile *gmsh, PETSC_UNUSED__attribute((unused)) int shift, GmshEntities *entities, PetscInt *numCells, GmshElement **gmsh_elems)
759{
760 int info[3], eid, dim, cellType, *tags;
761 PetscInt sizes[4], *ibuf = NULL((void*)0), numEntityBlocks, numElements, numBlockElements, numNodes, numTags, block, elem, c, p;
762 GmshEntity *entity = NULL((void*)0);
763 GmshElement *elements;
764 PetscErrorCode ierr;
765
766 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 766; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
767 ierr = GmshReadSize(gmsh, sizes, 4);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),767,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
768 numEntityBlocks = sizes[0]; numElements = sizes[1];
769 ierr = PetscCalloc1(numElements, &elements)PetscMallocA(1,PETSC_TRUE,769,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(numElements)*sizeof(**(&elements)),(&elements
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),769,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
770 *numCells = numElements;
771 *gmsh_elems = elements;
772 for (c = 0, block = 0; block < numEntityBlocks; ++block) {
773 ierr = GmshReadInt(gmsh, info, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),773,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
774 dim = info[0]; eid = info[1]; cellType = info[2];
775 ierr = GmshEntitiesGet(entities, dim, eid, &entity);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),775,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
776 numTags = entity->numTags;
777 tags = entity->tags;
778 switch (cellType) {
779 case 1: /* 2-node line */
780 numNodes = 2;
781 break;
782 case 2: /* 3-node triangle */
783 numNodes = 3;
784 break;
785 case 3: /* 4-node quadrangle */
786 numNodes = 4;
787 break;
788 case 4: /* 4-node tetrahedron */
789 numNodes = 4;
790 break;
791 case 5: /* 8-node hexahedron */
792 numNodes = 8;
793 break;
794 case 6: /* 6-node wedge */
795 numNodes = 6;
796 break;
797 case 15: /* 1-node vertex */
798 numNodes = 1;
799 break;
800 default:
801 SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unsupported Gmsh element type %d", cellType)return PetscError(((MPI_Comm)0x44000001),801,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Unsupported Gmsh element type %d",cellType
)
;
802 }
803 ierr = GmshReadSize(gmsh, &numBlockElements, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),803,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
804 ierr = GmshBufferGet(gmsh, (1+numNodes)*numBlockElements, sizeof(PetscInt), &ibuf);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),804,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
805 ierr = GmshReadSize(gmsh, ibuf, (1+numNodes)*numBlockElements);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),805,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
806 for (elem = 0; elem < numBlockElements; ++elem, ++c) {
807 GmshElement *element = elements + c;
808 PetscInt *id = ibuf + elem*(1+numNodes), *nodes = id + 1;
809 element->id = id[0];
810 element->dim = dim;
811 element->cellType = cellType;
812 element->numNodes = numNodes;
813 element->numTags = numTags;
814 for (p = 0; p < numNodes; p++) element->nodes[p] = nodes[p];
815 for (p = 0; p < numTags; p++) element->tags[p] = tags[p];
816 }
817 }
818 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
819}
820
821/*
822$Periodic
823 numPeriodicLinks(size_t)
824 entityDim(int) entityTag(int) entityTagMaster(int)
825 numAffine(size_t) value(double) ...
826 numCorrespondingNodes(size_t)
827 nodeTag(size_t) nodeTagMaster(size_t)
828 ...
829 ...
830$EndPeriodic
831*/
832static PetscErrorCode DMPlexCreateGmsh_ReadPeriodic_v41(GmshFile *gmsh, int shift, PetscInt slaveMap[], PetscBT bt)
833{
834 int info[3];
835 PetscInt numPeriodicLinks, numAffine, numCorrespondingNodes, *nodeTags = NULL((void*)0), link, node;
836 double dbuf[16];
837 PetscErrorCode ierr;
838
839 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 839; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
840 ierr = GmshReadSize(gmsh, &numPeriodicLinks, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),840,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
841 for (link = 0; link < numPeriodicLinks; ++link) {
1
Assuming 'link' is < 'numPeriodicLinks'
2
Loop condition is true. Entering loop body
842 ierr = GmshReadInt(gmsh, info, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),842,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
843 ierr = GmshReadSize(gmsh, &numAffine, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),843,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
844 ierr = GmshReadDouble(gmsh, dbuf, numAffine);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),844,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
845 ierr = GmshReadSize(gmsh, &numCorrespondingNodes, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),845,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
846 ierr = GmshBufferGet(gmsh, numCorrespondingNodes, sizeof(PetscInt), &nodeTags);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),846,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
847 ierr = GmshReadSize(gmsh, nodeTags, numCorrespondingNodes*2);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),847,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3
Calling 'GmshReadSize'
848 for (node = 0; node < numCorrespondingNodes; ++node) {
849 PetscInt slaveNode = nodeTags[node*2+0] - shift;
850 PetscInt masterNode = nodeTags[node*2+1] - shift;
851 slaveMap[slaveNode] = masterNode;
852 ierr = PetscBTSet(bt, slaveNode);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),852,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
853 ierr = PetscBTSet(bt, masterNode);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),853,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
854 }
855 }
856 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
857}
858
859/*
860$MeshFormat // same as MSH version 2
861 version(ASCII double; currently 4.1)
862 file-type(ASCII int; 0 for ASCII mode, 1 for binary mode)
863 data-size(ASCII int; sizeof(size_t))
864 < int with value one; only in binary mode, to detect endianness >
865$EndMeshFormat
866*/
867static PetscErrorCode DMPlexCreateGmsh_ReadMeshFormat(GmshFile *gmsh)
868{
869 char line[PETSC_MAX_PATH_LEN4096];
870 int snum, fileType, fileFormat, dataSize, checkEndian;
871 float version;
872 PetscErrorCode ierr;
873
874 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 874; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
875 ierr = GmshReadString(gmsh, line, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),875,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
876 snum = sscanf(line, "%f %d %d", &version, &fileType, &dataSize);
877 if (snum != 3) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unable to parse Gmsh file header: %s", line)return PetscError(((MPI_Comm)0x44000001),877,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Unable to parse Gmsh file header: %s"
,line)
;
878 if (version < 2.2) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Gmsh file version %3.1f must be at least 2.2", (double)version)return PetscError(((MPI_Comm)0x44000001),878,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Gmsh file version %3.1f must be at least 2.2"
,(double)version)
;
879 if ((int)version == 3) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Gmsh file version %3.1f not supported", (double)version)return PetscError(((MPI_Comm)0x44000001),879,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Gmsh file version %3.1f not supported"
,(double)version)
;
880 if (version > 4.1) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Gmsh file version %3.1f must be at most 4.1", (double)version)return PetscError(((MPI_Comm)0x44000001),880,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Gmsh file version %3.1f must be at most 4.1"
,(double)version)
;
881 if (gmsh->binary && !fileType) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Viewer is binary but Gmsh file is ASCII")return PetscError(((MPI_Comm)0x44000001),881,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Viewer is binary but Gmsh file is ASCII"
)
;
882 if (!gmsh->binary && fileType) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Viewer is ASCII but Gmsh file is binary")return PetscError(((MPI_Comm)0x44000001),882,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Viewer is ASCII but Gmsh file is binary"
)
;
883 fileFormat = (int)(version*10); /* XXX Should use (int)roundf(version*10) ? */
884 if (fileFormat <= 40 && dataSize != sizeof(double)) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Data size %d is not valid for a Gmsh file", dataSize)return PetscError(((MPI_Comm)0x44000001),884,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Data size %d is not valid for a Gmsh file"
,dataSize)
;
885 if (fileFormat >= 41 && dataSize != sizeof(int) && dataSize != sizeof(PetscInt64)) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Data size %d is not valid for a Gmsh file", dataSize)return PetscError(((MPI_Comm)0x44000001),885,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Data size %d is not valid for a Gmsh file"
,dataSize)
;
886 gmsh->fileFormat = fileFormat;
887 gmsh->dataSize = dataSize;
888 gmsh->byteSwap = PETSC_FALSE;
889 if (gmsh->binary) {
890 ierr = GmshReadInt(gmsh, &checkEndian, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),890,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
891 if (checkEndian != 1) {
892 ierr = PetscByteSwap(&checkEndian, PETSC_ENUM, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),892,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
893 if (checkEndian != 1) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unable to detect endianness in Gmsh file header: %s", line)return PetscError(((MPI_Comm)0x44000001),893,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Unable to detect endianness in Gmsh file header: %s"
,line)
;
894 gmsh->byteSwap = PETSC_TRUE;
895 }
896 }
897 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
898}
899
900/*
901PhysicalNames
902 numPhysicalNames(ASCII int)
903 dimension(ASCII int) physicalTag(ASCII int) "name"(127 characters max)
904 ...
905$EndPhysicalNames
906*/
907static PetscErrorCode DMPlexCreateGmsh_ReadPhysicalNames(GmshFile *gmsh)
908{
909 char line[PETSC_MAX_PATH_LEN4096], name[128+2], *p, *q;
910 int snum, numRegions, region, dim, tag;
911 PetscErrorCode ierr;
912
913 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 913; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
914 ierr = GmshReadString(gmsh, line, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),914,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
915 snum = sscanf(line, "%d", &numRegions);
916 if (snum != 1) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),916,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file")
;
917 for (region = 0; region < numRegions; ++region) {
918 ierr = GmshReadString(gmsh, line, 2);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),918,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
919 snum = sscanf(line, "%d %d", &dim, &tag);
920 if (snum != 2) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),920,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file")
;
921 ierr = GmshReadString(gmsh, line, -(PetscInt)sizeof(line));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),921,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
922 ierr = PetscStrchr(line, '"', &p);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),922,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
923 if (!p) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),923,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file")
;
924 ierr = PetscStrrchr(line, '"', &q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),924,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
925 if (q == p) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),925,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file")
;
926 ierr = PetscStrncpy(name, p+1, (size_t)(q-p-1));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),926,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
927 }
928 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
929}
930
931/*@C
932 DMPlexCreateGmshFromFile - Create a DMPlex mesh from a Gmsh file
933
934+ comm - The MPI communicator
935. filename - Name of the Gmsh file
936- interpolate - Create faces and edges in the mesh
937
938 Output Parameter:
939. dm - The DM object representing the mesh
940
941 Level: beginner
942
943.seealso: DMPlexCreateFromFile(), DMPlexCreateGmsh(), DMPlexCreate()
944@*/
945PetscErrorCode DMPlexCreateGmshFromFile(MPI_Comm comm, const char filename[], PetscBool interpolate, DM *dm)
946{
947 PetscViewer viewer;
948 PetscMPIInt rank;
949 int fileType;
950 PetscViewerType vtype;
951 PetscErrorCode ierr;
952
953 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 953; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
954 ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),954,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
955
956 /* Determine Gmsh file type (ASCII or binary) from file header */
957 if (!rank) {
958 GmshFile gmsh_, *gmsh = &gmsh_;
959 char line[PETSC_MAX_PATH_LEN4096];
960 int snum;
961 float version;
962
963 ierr = PetscArrayzero(gmsh,1)PetscMemzero(gmsh,(1)*sizeof(*(gmsh)));;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),963,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
964 ierr = PetscViewerCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), &gmsh->viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),964,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
965 ierr = PetscViewerSetType(gmsh->viewer, PETSCVIEWERASCII"ascii");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),965,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
966 ierr = PetscViewerFileSetMode(gmsh->viewer, FILE_MODE_READ);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),966,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
967 ierr = PetscViewerFileSetName(gmsh->viewer, filename);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),967,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
968 /* Read only the first two lines of the Gmsh file */
969 ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),969,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
970 ierr = GmshExpect(gmsh, "$MeshFormat", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),970,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
971 ierr = GmshReadString(gmsh, line, 2);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),971,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
972 snum = sscanf(line, "%f %d", &version, &fileType);
973 if (snum != 2) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unable to parse Gmsh file header: %s", line)return PetscError(((MPI_Comm)0x44000001),973,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Unable to parse Gmsh file header: %s"
,line)
;
974 if (version < 2.2) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Gmsh file version %3.1f must be at least 2.2", (double)version)return PetscError(((MPI_Comm)0x44000001),974,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Gmsh file version %3.1f must be at least 2.2"
,(double)version)
;
975 if ((int)version == 3) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Gmsh file version %3.1f not supported", (double)version)return PetscError(((MPI_Comm)0x44000001),975,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Gmsh file version %3.1f not supported"
,(double)version)
;
976 if (version > 4.1) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Gmsh file version %3.1f must be at most 4.1", (double)version)return PetscError(((MPI_Comm)0x44000001),976,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Gmsh file version %3.1f must be at most 4.1"
,(double)version)
;
977 ierr = PetscViewerDestroy(&gmsh->viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),977,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
978 }
979 ierr = MPI_Bcast(&fileType, 1, MPI_INT, 0, comm)((petsc_allreduce_ct += PetscMPIParallelComm((comm)),0) || MPI_Bcast
((&fileType),(1),(((MPI_Datatype)0x4c000405)),(0),(comm))
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),979,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
980 vtype = (fileType == 0) ? PETSCVIEWERASCII"ascii" : PETSCVIEWERBINARY"binary";
981
982 /* Create appropriate viewer and build plex */
983 ierr = PetscViewerCreate(comm, &viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),983,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
984 ierr = PetscViewerSetType(viewer, vtype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),984,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
985 ierr = PetscViewerFileSetMode(viewer, FILE_MODE_READ);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),985,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
986 ierr = PetscViewerFileSetName(viewer, filename);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),986,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
987 ierr = DMPlexCreateGmsh(comm, viewer, interpolate, dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),987,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
988 ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),988,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
989 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
990}
991
992/*@
993 DMPlexCreateGmsh - Create a DMPlex mesh from a Gmsh file viewer
994
995 Collective
996
997 Input Parameters:
998+ comm - The MPI communicator
999. viewer - The Viewer associated with a Gmsh file
1000- interpolate - Create faces and edges in the mesh
1001
1002 Output Parameter:
1003. dm - The DM object representing the mesh
1004
1005 Note: http://gmsh.info/doc/texinfo/gmsh.html#MSH-file-format
1006
1007 Level: beginner
1008
1009.seealso: DMPLEX, DMCreate()
1010@*/
1011PetscErrorCode DMPlexCreateGmsh(MPI_Comm comm, PetscViewer viewer, PetscBool interpolate, DM *dm)
1012{
1013 PetscViewer parentviewer = NULL((void*)0);
1014 double *coordsIn = NULL((void*)0);
1015 GmshEntities *entities = NULL((void*)0);
1016 GmshElement *gmsh_elem = NULL((void*)0);
1017 PetscSection coordSection;
1018 Vec coordinates;
1019 PetscBT periodicV = NULL((void*)0), periodicC = NULL((void*)0);
1020 PetscScalar *coords;
1021 PetscInt dim = 0, embedDim = -1, coordSize, c, v, d, cell, *periodicMap = NULL((void*)0), *periodicMapI = NULL((void*)0), *hybridMap = NULL((void*)0), cMax = PETSC_DETERMINE-1;
1022 PetscInt numVertices = 0, numCells = 0, trueNumCells = 0;
1023 int i, shift = 1;
1024 PetscMPIInt rank;
1025 PetscBool binary, zerobase = PETSC_FALSE, usemarker = PETSC_FALSE;
1026 PetscBool enable_hybrid = interpolate, periodic = PETSC_TRUE;
1027 PetscErrorCode ierr;
1028
1029 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"; petscstack
->line[petscstack->currentsize] = 1029; petscstack->
petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1030 ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1030,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1031 ierr = PetscObjectOptionsBegin((PetscObject)viewer)0; do { PetscOptionItems PetscOptionsObjectBase; PetscOptionItems
*PetscOptionsObject = &PetscOptionsObjectBase; PetscOptionsObject
->options = ((PetscObject)(PetscObject)viewer)->options
; for (PetscOptionsObject->count=(PetscOptionsPublish?-1:1
); PetscOptionsObject->count<2; PetscOptionsObject->
count++) { PetscErrorCode _5_ierr = PetscObjectOptionsBegin_Private
(PetscOptionsObject,(PetscObject)viewer);do {if (__builtin_expect
(!!(_5_ierr),0)) return PetscError(((MPI_Comm)0x44000001),1031
,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,_5_ierr,PETSC_ERROR_REPEAT," ");} while (0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1031,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1032 ierr = PetscOptionsHead(PetscOptionsObject,"DMPlex Gmsh options");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1032,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1033 ierr = PetscOptionsBool("-dm_plex_gmsh_hybrid", "Generate hybrid cell bounds", "DMPlexCreateGmsh", enable_hybrid, &enable_hybrid, NULL)PetscOptionsBool_Private(PetscOptionsObject,"-dm_plex_gmsh_hybrid"
,"Generate hybrid cell bounds","DMPlexCreateGmsh",enable_hybrid
,&enable_hybrid,((void*)0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1033,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1034 ierr = PetscOptionsBool("-dm_plex_gmsh_periodic","Read Gmsh periodic section", "DMPlexCreateGmsh", periodic, &periodic, NULL)PetscOptionsBool_Private(PetscOptionsObject,"-dm_plex_gmsh_periodic"
,"Read Gmsh periodic section","DMPlexCreateGmsh",periodic,&
periodic,((void*)0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1034,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1035 ierr = PetscOptionsBool("-dm_plex_gmsh_use_marker", "Generate marker label", "DMPlexCreateGmsh", usemarker, &usemarker, NULL)PetscOptionsBool_Private(PetscOptionsObject,"-dm_plex_gmsh_use_marker"
,"Generate marker label","DMPlexCreateGmsh",usemarker,&usemarker
,((void*)0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1035,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1036 ierr = PetscOptionsBool("-dm_plex_gmsh_zero_base", "Read Gmsh file with zero base indices", "DMPlexCreateGmsh", zerobase, &zerobase, NULL)PetscOptionsBool_Private(PetscOptionsObject,"-dm_plex_gmsh_zero_base"
,"Read Gmsh file with zero base indices","DMPlexCreateGmsh",zerobase
,&zerobase,((void*)0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1036,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1037 ierr = PetscOptionsInt("-dm_plex_gmsh_spacedim", "Embedding space dimension", "DMPlexCreateGmsh", embedDim, &embedDim, NULL)PetscOptionsInt_Private(PetscOptionsObject,"-dm_plex_gmsh_spacedim"
,"Embedding space dimension","DMPlexCreateGmsh",embedDim,&
embedDim,((void*)0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1037,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1038 ierr = PetscOptionsTail()0; do {if (PetscOptionsObject->count != 1) do { do { ; if (
petscstack && petscstack->currentsize > 0) { petscstack
->currentsize--; petscstack->function[petscstack->currentsize
] = 0; petscstack->file[petscstack->currentsize] = 0; petscstack
->line[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0);} while(0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1038,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1039 ierr = PetscOptionsEnd()_5_ierr = PetscOptionsEnd_Private(PetscOptionsObject);do {if (
__builtin_expect(!!(_5_ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1039,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,_5_ierr,PETSC_ERROR_REPEAT," ");} while (0);}} while (0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1039,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1040 if (zerobase) shift = 0;
1041
1042 ierr = DMCreate(comm, dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1042,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1043 ierr = DMSetType(*dm, DMPLEX"plex");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1043,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1044 ierr = PetscLogEventBegin(DMPLEX_CreateGmsh,*dm,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[DMPLEX_CreateGmsh].active) ? (*PetscLogPLB)((DMPLEX_CreateGmsh
),0,(PetscObject)(*dm),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1044,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1045
1046 ierr = PetscObjectTypeCompare((PetscObject)viewer, PETSCVIEWERBINARY"binary", &binary);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1046,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1047
1048 /* Binary viewers read on all ranks, get subviewer to read only in rank 0 */
1049 if (binary) {
1050 parentviewer = viewer;
1051 ierr = PetscViewerGetSubViewer(parentviewer, PETSC_COMM_SELF((MPI_Comm)0x44000001), &viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1051,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1052 }
1053
1054 if (!rank) {
1055 GmshFile gmsh_, *gmsh = &gmsh_;
1056 char line[PETSC_MAX_PATH_LEN4096];
1057 PetscBool match;
1058
1059 ierr = PetscArrayzero(gmsh,1)PetscMemzero(gmsh,(1)*sizeof(*(gmsh)));;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1059,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1060 gmsh->viewer = viewer;
1061 gmsh->binary = binary;
1062
1063 /* Read mesh format */
1064 ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1064,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1065 ierr = GmshExpect(gmsh, "$MeshFormat", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1065,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1066 ierr = DMPlexCreateGmsh_ReadMeshFormat(gmsh);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1066,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1067 ierr = GmshReadEndSection(gmsh, "$EndMeshFormat", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1067,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1068
1069 /* OPTIONAL Read physical names */
1070 ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1070,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1071 ierr = GmshMatch(gmsh,"$PhysicalNames", line, &match);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1071,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1072 if (match) {
1073 ierr = DMPlexCreateGmsh_ReadPhysicalNames(gmsh);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1073,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1074 ierr = GmshReadEndSection(gmsh, "$EndPhysicalNames", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1074,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1075 /* Initial read for entity section */
1076 ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1076,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1077 }
1078
1079 /* Read entities */
1080 if (gmsh->fileFormat >= 40) {
1081 ierr = GmshExpect(gmsh, "$Entities", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1081,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1082 switch (gmsh->fileFormat) {
1083 case 41: ierr = DMPlexCreateGmsh_ReadEntities_v41(gmsh, &entities);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1083,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; break;
1084 default: ierr = DMPlexCreateGmsh_ReadEntities_v40(gmsh, &entities);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1084,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; break;
1085 }
1086 ierr = GmshReadEndSection(gmsh, "$EndEntities", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1086,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1087 /* Initial read for nodes section */
1088 ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1088,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1089 }
1090
1091 /* Read nodes */
1092 ierr = GmshExpect(gmsh, "$Nodes", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1092,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1093 switch (gmsh->fileFormat) {
1094 case 41: ierr = DMPlexCreateGmsh_ReadNodes_v41(gmsh, shift, &numVertices, &coordsIn);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1094,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; break;
1095 case 40: ierr = DMPlexCreateGmsh_ReadNodes_v40(gmsh, shift, &numVertices, &coordsIn);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1095,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; break;
1096 default: ierr = DMPlexCreateGmsh_ReadNodes_v22(gmsh, shift, &numVertices, &coordsIn);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1096,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; break;
1097 }
1098 ierr = GmshReadEndSection(gmsh, "$EndNodes", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1098,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1099
1100 /* Read elements */
1101 ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1101,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;;
1102 ierr = GmshExpect(gmsh, "$Elements", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1102,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1103 switch (gmsh->fileFormat) {
1104 case 41: ierr = DMPlexCreateGmsh_ReadElements_v41(gmsh, shift, entities, &numCells, &gmsh_elem);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1104,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; break;
1105 case 40: ierr = DMPlexCreateGmsh_ReadElements_v40(gmsh, shift, entities, &numCells, &gmsh_elem);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1105,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; break;
1106 default: ierr = DMPlexCreateGmsh_ReadElements_v22(gmsh, shift, &numCells, &gmsh_elem);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1106,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; break;
1107 }
1108 ierr = GmshReadEndSection(gmsh, "$EndElements", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1108,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1109
1110 /* OPTIONAL Read periodic section */
1111 if (periodic) {
1112 ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1112,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1113 ierr = GmshMatch(gmsh, "$Periodic", line, &periodic);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1113,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1114 }
1115 if (periodic) {
1116 PetscInt pVert, *periodicMapT, *aux;
1117
1118 ierr = PetscMalloc1(numVertices, &periodicMapT)PetscMallocA(1,PETSC_FALSE,1118,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(numVertices)*sizeof(**(&periodicMapT)),(&periodicMapT
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1118,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1119 ierr = PetscBTCreate(numVertices, &periodicV);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1119,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1120 for (i = 0; i < numVertices; i++) periodicMapT[i] = i;
1121
1122 ierr = GmshExpect(gmsh, "$Periodic", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1122,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1123 switch (gmsh->fileFormat) {
1124 case 41: ierr = DMPlexCreateGmsh_ReadPeriodic_v41(gmsh, shift, periodicMapT, periodicV);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1124,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; break;
1125 default: ierr = DMPlexCreateGmsh_ReadPeriodic_v40(gmsh, shift, periodicMapT, periodicV);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1125,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; break;
1126 }
1127 ierr = GmshReadEndSection(gmsh, "$EndPeriodic", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1127,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1128
1129 /* we may have slaves of slaves */
1130 for (i = 0; i < numVertices; i++) {
1131 while (periodicMapT[periodicMapT[i]] != periodicMapT[i]) {
1132 periodicMapT[i] = periodicMapT[periodicMapT[i]];
1133 }
1134 }
1135 /* periodicMap : from old to new numbering (periodic vertices excluded)
1136 periodicMapI: from new to old numbering */
1137 ierr = PetscMalloc1(numVertices, &periodicMap)PetscMallocA(1,PETSC_FALSE,1137,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(numVertices)*sizeof(**(&periodicMap)),(&periodicMap
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1137,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1138 ierr = PetscMalloc1(numVertices, &periodicMapI)PetscMallocA(1,PETSC_FALSE,1138,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(numVertices)*sizeof(**(&periodicMapI)),(&periodicMapI
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1138,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1139 ierr = PetscMalloc1(numVertices, &aux)PetscMallocA(1,PETSC_FALSE,1139,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(numVertices)*sizeof(**(&aux)),(&aux))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1139,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1140 for (i = 0, pVert = 0; i < numVertices; i++) {
1141 if (periodicMapT[i] != i) {
1142 pVert++;
1143 } else {
1144 aux[i] = i - pVert;
1145 periodicMapI[i - pVert] = i;
1146 }
1147 }
1148 for (i = 0 ; i < numVertices; i++) {
1149 periodicMap[i] = aux[periodicMapT[i]];
1150 }
1151 ierr = PetscFree(periodicMapT)((*PetscTrFree)((void*)(periodicMapT),1151,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || ((periodicMapT) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1151,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1152 ierr = PetscFree(aux)((*PetscTrFree)((void*)(aux),1152,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || ((aux) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1152,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1153 /* remove periodic vertices */
1154 numVertices = numVertices - pVert;
1155 }
1156
1157 ierr = GmshEntitiesDestroy(&entities);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1157,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1158 ierr = PetscFree(gmsh->wbuf)((*PetscTrFree)((void*)(gmsh->wbuf),1158,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || ((gmsh->wbuf) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1158,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1159 ierr = PetscFree(gmsh->sbuf)((*PetscTrFree)((void*)(gmsh->sbuf),1159,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || ((gmsh->sbuf) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1159,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1160 }
1161
1162 if (parentviewer) {
1163 ierr = PetscViewerRestoreSubViewer(parentviewer, PETSC_COMM_SELF((MPI_Comm)0x44000001), &viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1163,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1164 }
1165
1166 if (!rank) {
1167 PetscBool hybrid = PETSC_FALSE;
1168 PetscInt cellType = -1;
1169
1170 for (trueNumCells = 0, c = 0; c < numCells; ++c) {
1171 if (gmsh_elem[c].dim > dim) {dim = gmsh_elem[c].dim; trueNumCells = 0; hybrid = PETSC_FALSE; cellType = -1;}
1172 if (gmsh_elem[c].dim < dim) continue;
1173 if (cellType == -1) cellType = gmsh_elem[c].cellType;
1174 /* different cell type indicate an hybrid mesh in PLEX */
1175 if (cellType != gmsh_elem[c].cellType) hybrid = PETSC_TRUE;
1176 /* wedges always indicate an hybrid mesh in PLEX */
1177 if (cellType == 6 || cellType == 13) hybrid = PETSC_TRUE;
1178 trueNumCells++;
1179 }
1180 /* Renumber cells for hybrid grids */
1181 if (hybrid && enable_hybrid) {
1182 PetscInt hc1 = 0, hc2 = 0, *hybridCells1 = NULL((void*)0), *hybridCells2 = NULL((void*)0);
1183 PetscInt cell, tn, *tp;
1184 int n1 = 0,n2 = 0;
1185
1186 ierr = PetscMalloc1(trueNumCells, &hybridCells1)PetscMallocA(1,PETSC_FALSE,1186,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(trueNumCells)*sizeof(**(&hybridCells1)),(&hybridCells1
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1186,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1187 ierr = PetscMalloc1(trueNumCells, &hybridCells2)PetscMallocA(1,PETSC_FALSE,1187,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(trueNumCells)*sizeof(**(&hybridCells2)),(&hybridCells2
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1187,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1188 for (cell = 0, c = 0; c < numCells; ++c) {
1189 if (gmsh_elem[c].dim == dim) {
1190 if (!n1) n1 = gmsh_elem[c].cellType;
1191 else if (!n2 && n1 != gmsh_elem[c].cellType) n2 = gmsh_elem[c].cellType;
1192
1193 if (gmsh_elem[c].cellType == n1) hybridCells1[hc1++] = cell;
1194 else if (gmsh_elem[c].cellType == n2) hybridCells2[hc2++] = cell;
1195 else SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Cannot handle more than 2 cell types")return PetscError(((MPI_Comm)0x44000001),1195,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,56,PETSC_ERROR_INITIAL,"Cannot handle more than 2 cell types"
)
;
1196 cell++;
1197 }
1198 }
1199
1200 switch (n1) {
1201 case 2: /* triangles */
1202 case 9:
1203 switch (n2) {
1204 case 0: /* single type mesh */
1205 case 3: /* quads */
1206 case 10:
1207 break;
1208 default:
1209 SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported cell types %d and %d",n1, n2)return PetscError(((MPI_Comm)0x44000001),1209,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,56,PETSC_ERROR_INITIAL,"Unsupported cell types %d and %d",n1
,n2)
;
1210 }
1211 break;
1212 case 3:
1213 case 10:
1214 switch (n2) {
1215 case 0: /* single type mesh */
1216 case 2: /* swap since we list simplices first */
1217 case 9:
1218 tn = hc1;
1219 hc1 = hc2;
1220 hc2 = tn;
1221
1222 tp = hybridCells1;
1223 hybridCells1 = hybridCells2;
1224 hybridCells2 = tp;
1225 break;
1226 default:
1227 SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported cell types %d and %d",n1, n2)return PetscError(((MPI_Comm)0x44000001),1227,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,56,PETSC_ERROR_INITIAL,"Unsupported cell types %d and %d",n1
,n2)
;
1228 }
1229 break;
1230 case 4: /* tetrahedra */
1231 case 11:
1232 switch (n2) {
1233 case 0: /* single type mesh */
1234 case 6: /* wedges */
1235 case 13:
1236 break;
1237 default:
1238 SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported cell types %d and %d",n1, n2)return PetscError(((MPI_Comm)0x44000001),1238,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,56,PETSC_ERROR_INITIAL,"Unsupported cell types %d and %d",n1
,n2)
;
1239 }
1240 break;
1241 case 6:
1242 case 13:
1243 switch (n2) {
1244 case 0: /* single type mesh */
1245 case 4: /* swap since we list simplices first */
1246 case 11:
1247 tn = hc1;
1248 hc1 = hc2;
1249 hc2 = tn;
1250
1251 tp = hybridCells1;
1252 hybridCells1 = hybridCells2;
1253 hybridCells2 = tp;
1254 break;
1255 default:
1256 SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported cell types %d and %d",n1, n2)return PetscError(((MPI_Comm)0x44000001),1256,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,56,PETSC_ERROR_INITIAL,"Unsupported cell types %d and %d",n1
,n2)
;
1257 }
1258 break;
1259 default:
1260 SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported cell types %d and %d",n1, n2)return PetscError(((MPI_Comm)0x44000001),1260,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,56,PETSC_ERROR_INITIAL,"Unsupported cell types %d and %d",n1
,n2)
;
1261 }
1262 cMax = hc1;
1263 ierr = PetscMalloc1(trueNumCells, &hybridMap)PetscMallocA(1,PETSC_FALSE,1263,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,(size_t)(trueNumCells)*sizeof(**(&hybridMap)),(&hybridMap
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1263,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1264 for (cell = 0; cell < hc1; cell++) hybridMap[hybridCells1[cell]] = cell;
1265 for (cell = 0; cell < hc2; cell++) hybridMap[hybridCells2[cell]] = cell + hc1;
1266 ierr = PetscFree(hybridCells1)((*PetscTrFree)((void*)(hybridCells1),1266,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || ((hybridCells1) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1266,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1267 ierr = PetscFree(hybridCells2)((*PetscTrFree)((void*)(hybridCells2),1267,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || ((hybridCells2) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1267,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1268 }
1269
1270 }
1271
1272 /* Allocate the cell-vertex mesh */
1273 ierr = DMPlexSetChart(*dm, 0, trueNumCells+numVertices);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1273,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1274 for (cell = 0, c = 0; c < numCells; ++c) {
1275 if (gmsh_elem[c].dim == dim) {
1276 ierr = DMPlexSetConeSize(*dm, hybridMap ? hybridMap[cell] : cell, gmsh_elem[c].numNodes);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1276,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1277 cell++;
1278 }
1279 }
1280 ierr = DMSetUp(*dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1280,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1281 /* Add cell-vertex connections */
1282 for (cell = 0, c = 0; c < numCells; ++c) {
1283 if (gmsh_elem[c].dim == dim) {
1284 PetscInt pcone[8], corner;
1285 for (corner = 0; corner < gmsh_elem[c].numNodes; ++corner) {
1286 const PetscInt cc = gmsh_elem[c].nodes[corner] - shift;
1287 pcone[corner] = (periodicMap ? periodicMap[cc] : cc) + trueNumCells;
1288 }
1289 if (dim == 3) {
1290 /* Tetrahedra are inverted */
1291 if (gmsh_elem[c].cellType == 4) {
1292 PetscInt tmp = pcone[0];
1293 pcone[0] = pcone[1];
1294 pcone[1] = tmp;
1295 }
1296 /* Hexahedra are inverted */
1297 if (gmsh_elem[c].cellType == 5) {
1298 PetscInt tmp = pcone[1];
1299 pcone[1] = pcone[3];
1300 pcone[3] = tmp;
1301 }
1302 /* Prisms are inverted */
1303 if (gmsh_elem[c].cellType == 6) {
1304 PetscInt tmp;
1305
1306 tmp = pcone[1];
1307 pcone[1] = pcone[2];
1308 pcone[2] = tmp;
1309 tmp = pcone[4];
1310 pcone[4] = pcone[5];
1311 pcone[5] = tmp;
1312 }
1313 } else if (dim == 2 && hybridMap && hybridMap[cell] >= cMax) { /* hybrid cells */
1314 /* quads are input to PLEX as prisms */
1315 if (gmsh_elem[c].cellType == 3) {
1316 PetscInt tmp = pcone[2];
1317 pcone[2] = pcone[3];
1318 pcone[3] = tmp;
1319 }
1320 }
1321 ierr = DMPlexSetCone(*dm, hybridMap ? hybridMap[cell] : cell, pcone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1321,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1322 cell++;
1323 }
1324 }
1325 ierr = MPI_Bcast(&dim, 1, MPIU_INT, 0, comm)((petsc_allreduce_ct += PetscMPIParallelComm((comm)),0) || MPI_Bcast
((&dim),(1),(((MPI_Datatype)0x4c000405)),(0),(comm)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1325,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1326 ierr = DMSetDimension(*dm, dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1326,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1327 ierr = DMPlexSetHybridBounds(*dm, cMax, PETSC_DETERMINE-1, PETSC_DETERMINE-1, PETSC_DETERMINE-1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1327,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1328 ierr = DMPlexSymmetrize(*dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1328,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1329 ierr = DMPlexStratify(*dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1329,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1330 if (interpolate) {
1331 DM idm;
1332
1333 ierr = DMPlexInterpolate(*dm, &idm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1333,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1334 ierr = DMDestroy(dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1334,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1335 *dm = idm;
1336 }
1337
1338 if (usemarker && !interpolate && dim > 1) SETERRQ(comm,PETSC_ERR_SUP,"Cannot create marker label without interpolation")return PetscError(comm,1338,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,56,PETSC_ERROR_INITIAL,"Cannot create marker label without interpolation"
)
;
1339 if (!rank && usemarker) {
1340 PetscInt f, fStart, fEnd;
1341
1342 ierr = DMCreateLabel(*dm, "marker");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1342,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1343 ierr = DMPlexGetHeightStratum(*dm, 1, &fStart, &fEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1343,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1344 for (f = fStart; f < fEnd; ++f) {
1345 PetscInt suppSize;
1346
1347 ierr = DMPlexGetSupportSize(*dm, f, &suppSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1347,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1348 if (suppSize == 1) {
1349 PetscInt *cone = NULL((void*)0), coneSize, p;
1350
1351 ierr = DMPlexGetTransitiveClosure(*dm, f, PETSC_TRUE, &coneSize, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1351,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1352 for (p = 0; p < coneSize; p += 2) {
1353 ierr = DMSetLabelValue(*dm, "marker", cone[p], 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1353,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1354 }
1355 ierr = DMPlexRestoreTransitiveClosure(*dm, f, PETSC_TRUE, &coneSize, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1355,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1356 }
1357 }
1358 }
1359
1360 if (!rank) {
1361 PetscInt vStart, vEnd;
1362
1363 ierr = DMPlexGetDepthStratum(*dm, 0, &vStart, &vEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1363,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1364 for (cell = 0, c = 0; c < numCells; ++c) {
1365
1366 /* Create face sets */
1367 if (interpolate && gmsh_elem[c].dim == dim-1) {
1368 const PetscInt *join;
1369 PetscInt joinSize, pcone[8], corner;
1370 /* Find the relevant facet with vertex joins */
1371 for (corner = 0; corner < gmsh_elem[c].numNodes; ++corner) {
1372 const PetscInt cc = gmsh_elem[c].nodes[corner] - shift;
1373 pcone[corner] = (periodicMap ? periodicMap[cc] : cc) + vStart;
1374 }
1375 ierr = DMPlexGetFullJoin(*dm, gmsh_elem[c].numNodes, pcone, &joinSize, &join);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1375,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1376 if (joinSize != 1) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Could not determine Plex facet for GMsh element %d (Plex cell %D)", gmsh_elem[c].id, c)return PetscError(((MPI_Comm)0x44000001),1376,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,62,PETSC_ERROR_INITIAL,"Could not determine Plex facet for GMsh element %d (Plex cell %D)"
,gmsh_elem[c].id,c)
;
1377 ierr = DMSetLabelValue(*dm, "Face Sets", join[0], gmsh_elem[c].tags[0]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1377,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1378 ierr = DMPlexRestoreJoin(*dm, gmsh_elem[c].numNodes, (const PetscInt *) pcone, &joinSize, &join);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1378,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1379 }
1380
1381 /* Create cell sets */
1382 if (gmsh_elem[c].dim == dim) {
1383 if (gmsh_elem[c].numTags > 0) {
1384 ierr = DMSetLabelValue(*dm, "Cell Sets", hybridMap ? hybridMap[cell] : cell, gmsh_elem[c].tags[0]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1384,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1385 }
1386 cell++;
1387 }
1388
1389 /* Create vertex sets */
1390 if (gmsh_elem[c].dim == 0) {
1391 if (gmsh_elem[c].numTags > 0) {
1392 const PetscInt cc = gmsh_elem[c].nodes[0] - shift;
1393 const PetscInt vid = (periodicMap ? periodicMap[cc] : cc) + vStart;
1394 ierr = DMSetLabelValue(*dm, "Vertex Sets", vid, gmsh_elem[c].tags[0]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1394,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1395 }
1396 }
1397 }
1398 }
1399
1400 /* Create coordinates */
1401 if (embedDim < 0) embedDim = dim;
1402 ierr = DMSetCoordinateDim(*dm, embedDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1402,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1403 ierr = DMGetCoordinateSection(*dm, &coordSection);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1403,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1404 ierr = PetscSectionSetNumFields(coordSection, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1404,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1405 ierr = PetscSectionSetFieldComponents(coordSection, 0, embedDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1405,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1406 if (periodicMap) { /* we need to localize coordinates on cells */
1407 ierr = PetscSectionSetChart(coordSection, 0, trueNumCells + numVertices);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1407,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1408 } else {
1409 ierr = PetscSectionSetChart(coordSection, trueNumCells, trueNumCells + numVertices);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1409,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1410 }
1411 for (v = trueNumCells; v < trueNumCells+numVertices; ++v) {
1412 ierr = PetscSectionSetDof(coordSection, v, embedDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1412,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1413 ierr = PetscSectionSetFieldDof(coordSection, v, 0, embedDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1413,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1414 }
1415 if (periodicMap) {
1416 ierr = PetscBTCreate(trueNumCells, &periodicC);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1416,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1417 for (cell = 0, c = 0; c < numCells; ++c) {
1418 if (gmsh_elem[c].dim == dim) {
1419 PetscInt corner;
1420 PetscBool pc = PETSC_FALSE;
1421 for (corner = 0; corner < gmsh_elem[c].numNodes; ++corner) {
1422 pc = (PetscBool)(pc || PetscBTLookup(periodicV, gmsh_elem[c].nodes[corner] - shift));
1423 }
1424 if (pc) {
1425 PetscInt dof = gmsh_elem[c].numNodes*embedDim;
1426 PetscInt ucell = hybridMap ? hybridMap[cell] : cell;
1427 ierr = PetscBTSet(periodicC, ucell);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1427,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1428 ierr = PetscSectionSetDof(coordSection, ucell, dof);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1428,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1429 ierr = PetscSectionSetFieldDof(coordSection, ucell, 0, dof);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1429,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1430 }
1431 cell++;
1432 }
1433 }
1434 }
1435 ierr = PetscSectionSetUp(coordSection);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1435,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1436 ierr = PetscSectionGetStorageSize(coordSection, &coordSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1436,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1437 ierr = VecCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), &coordinates);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1437,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1438 ierr = PetscObjectSetName((PetscObject) coordinates, "coordinates");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1438,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1439 ierr = VecSetSizes(coordinates, coordSize, PETSC_DETERMINE-1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1439,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1440 ierr = VecSetBlockSize(coordinates, embedDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1440,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1441 ierr = VecSetType(coordinates, VECSTANDARD"standard");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1441,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1442 ierr = VecGetArray(coordinates, &coords);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1442,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1443 if (periodicMap) {
1444 PetscInt off;
1445
1446 for (cell = 0, c = 0; c < numCells; ++c) {
1447 PetscInt pcone[8], corner;
1448 if (gmsh_elem[c].dim == dim) {
1449 PetscInt ucell = hybridMap ? hybridMap[cell] : cell;
1450 if (PetscUnlikely(PetscBTLookup(periodicC, ucell))__builtin_expect(!!(PetscBTLookup(periodicC, ucell)),0)) {
1451 for (corner = 0; corner < gmsh_elem[c].numNodes; ++corner) {
1452 pcone[corner] = gmsh_elem[c].nodes[corner] - shift;
1453 }
1454 if (dim == 3) {
1455 /* Tetrahedra are inverted */
1456 if (gmsh_elem[c].cellType == 4) {
1457 PetscInt tmp = pcone[0];
1458 pcone[0] = pcone[1];
1459 pcone[1] = tmp;
1460 }
1461 /* Hexahedra are inverted */
1462 if (gmsh_elem[c].cellType == 5) {
1463 PetscInt tmp = pcone[1];
1464 pcone[1] = pcone[3];
1465 pcone[3] = tmp;
1466 }
1467 /* Prisms are inverted */
1468 if (gmsh_elem[c].cellType == 6) {
1469 PetscInt tmp;
1470
1471 tmp = pcone[1];
1472 pcone[1] = pcone[2];
1473 pcone[2] = tmp;
1474 tmp = pcone[4];
1475 pcone[4] = pcone[5];
1476 pcone[5] = tmp;
1477 }
1478 } else if (dim == 2 && hybridMap && hybridMap[cell] >= cMax) { /* hybrid cells */
1479 /* quads are input to PLEX as prisms */
1480 if (gmsh_elem[c].cellType == 3) {
1481 PetscInt tmp = pcone[2];
1482 pcone[2] = pcone[3];
1483 pcone[3] = tmp;
1484 }
1485 }
1486 ierr = PetscSectionGetOffset(coordSection, ucell, &off);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1486,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1487 for (corner = 0; corner < gmsh_elem[c].numNodes; ++corner) {
1488 v = pcone[corner];
1489 for (d = 0; d < embedDim; ++d) {
1490 coords[off++] = (PetscReal) coordsIn[v*3+d];
1491 }
1492 }
1493 }
1494 cell++;
1495 }
1496 }
1497 for (v = 0; v < numVertices; ++v) {
1498 ierr = PetscSectionGetOffset(coordSection, v + trueNumCells, &off);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1498,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1499 for (d = 0; d < embedDim; ++d) {
1500 coords[off+d] = (PetscReal) coordsIn[periodicMapI[v]*3+d];
1501 }
1502 }
1503 } else {
1504 for (v = 0; v < numVertices; ++v) {
1505 for (d = 0; d < embedDim; ++d) {
1506 coords[v*embedDim+d] = (PetscReal) coordsIn[v*3+d];
1507 }
1508 }
1509 }
1510 ierr = VecRestoreArray(coordinates, &coords);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1510,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1511 ierr = DMSetCoordinatesLocal(*dm, coordinates);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1511,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1512
1513 periodic = periodicMap ? PETSC_TRUE : PETSC_FALSE;
1514 ierr = MPI_Bcast(&periodic, 1, MPIU_BOOL, 0, comm)((petsc_allreduce_ct += PetscMPIParallelComm((comm)),0) || MPI_Bcast
((&periodic),(1),(MPIU_BOOL),(0),(comm)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1514,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1515 ierr = DMSetPeriodicity(*dm, periodic, NULL((void*)0), NULL((void*)0), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1515,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1516
1517 ierr = PetscFree(coordsIn)((*PetscTrFree)((void*)(coordsIn),1517,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || ((coordsIn) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1517,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1518 ierr = PetscFree(gmsh_elem)((*PetscTrFree)((void*)(gmsh_elem),1518,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || ((gmsh_elem) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1518,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1519 ierr = PetscFree(hybridMap)((*PetscTrFree)((void*)(hybridMap),1519,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || ((hybridMap) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1519,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1520 ierr = PetscFree(periodicMap)((*PetscTrFree)((void*)(periodicMap),1520,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || ((periodicMap) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1520,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1521 ierr = PetscFree(periodicMapI)((*PetscTrFree)((void*)(periodicMapI),1521,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
) || ((periodicMapI) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1521,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1522 ierr = PetscBTDestroy(&periodicV);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1522,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1523 ierr = PetscBTDestroy(&periodicC);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1523,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1524 ierr = VecDestroy(&coordinates);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1524,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1525
1526 ierr = PetscLogEventEnd(DMPLEX_CreateGmsh,*dm,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[DMPLEX_CreateGmsh].active) ? (*PetscLogPLE)((DMPLEX_CreateGmsh
),0,(PetscObject)(*dm),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1526,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexgmsh.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1527 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
1528}