File: | dm/impls/plex/plexgmsh.c |
Warning: | line 130, column 52 Array access (from variable 'ibuf') results in a null pointer dereference |
[?] 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 | ||||
5 | typedef 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 | ||||
17 | static 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-tmp/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-tmp/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-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
25 | ierr = PetscMalloc(size, &gmsh->wbuf)((*PetscTrMalloc)((size),25,__func__,"/sandbox/petsc/petsc.next-tmp/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-tmp/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 | ||||
32 | static 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-tmp/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); | |||
39 | if (gmsh->slen < size) { | |||
40 | ierr = PetscFree(gmsh->sbuf)((*PetscTrFree)((void*)(gmsh->sbuf),40,__func__,"/sandbox/petsc/petsc.next-tmp/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-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
41 | ierr = PetscMalloc(size, &gmsh->sbuf)((*PetscTrMalloc)((size),41,__func__,"/sandbox/petsc/petsc.next-tmp/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-tmp/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); | |||
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); | |||
46 | } | |||
47 | ||||
48 | static 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-tmp/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-tmp/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-tmp/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 | ||||
57 | static 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-tmp/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-tmp/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 | ||||
65 | static 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-tmp/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-tmp/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 | ||||
73 | static 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-tmp/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-tmp/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-tmp/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 | ||||
84 | static 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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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 | ||||
103 | static 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-tmp/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-tmp/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-tmp/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 | ||||
112 | static 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-tmp/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)) { | |||
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-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
121 | } else if (dataSize == sizeof(int)) { | |||
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-tmp/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-tmp/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)) { | |||
127 | long *ibuf = NULL((void*)0); | |||
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-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
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-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
130 | for (i = 0; i < count; ++i) buf[i] = (PetscInt)ibuf[i]; | |||
| ||||
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-tmp/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-tmp/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 | ||||
140 | static 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-tmp/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-tmp/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 | ||||
148 | static 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-tmp/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-tmp/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 | ||||
156 | typedef 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 | ||||
164 | typedef struct { | |||
165 | GmshEntity *entity[4]; | |||
166 | PetscHMapI entityMap[4]; | |||
167 | } GmshEntities; | |||
168 | ||||
169 | static 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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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 | ||||
183 | static 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-tmp/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-tmp/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 | ||||
194 | static 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-tmp/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-tmp/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 | ||||
205 | static 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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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 | ||||
220 | typedef 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 | ||||
230 | static 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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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. */ | |||
261 | static 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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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 | */ | |||
404 | static 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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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 | */ | |||
453 | static 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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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-tmp/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 !defined(PETSC_WORDS_BIGENDIAN) | |||
483 | ierr = PetscByteSwap(cnid, PETSC_ENUM, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),483,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
484 | ierr = PetscByteSwap(cxyz, PETSC_DOUBLE, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),484,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
485 | #endif | |||
486 | ierr = PetscMemcpy(&nid, cnid, sizeof(int));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),486,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
487 | ierr = PetscMemcpy(xyz, cxyz, 3*sizeof(double));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),487,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
488 | if (byteSwap) {ierr = PetscByteSwap(&nid, PETSC_ENUM, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),488,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
489 | if (byteSwap) {ierr = PetscByteSwap(xyz, PETSC_DOUBLE, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),489,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
490 | 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),490,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Unexpected node number %d should be %d" ,nid,v+shift); | |||
491 | } | |||
492 | } else { | |||
493 | for (node = 0; node < numNodes; ++node, ++v) { | |||
494 | double *xyz = coordinates + v*3; | |||
495 | ierr = PetscViewerRead(viewer, &nid, 1, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),495,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
496 | if (byteSwap) {ierr = PetscByteSwap(&nid, PETSC_ENUM, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),496,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
497 | 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),497,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Unexpected node number %d should be %d" ,nid,v+shift); | |||
498 | ierr = PetscViewerRead(viewer, xyz, 3, NULL((void*)0), PETSC_DOUBLE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),498,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
499 | if (byteSwap) {ierr = PetscByteSwap(xyz, PETSC_DOUBLE, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),499,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
500 | } | |||
501 | } | |||
502 | } | |||
503 | 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); | |||
504 | } | |||
505 | ||||
506 | /* | |||
507 | $Elements | |||
508 | numEntityBlocks(unsigned long) numElements(unsigned long) | |||
509 | tagEntity(int) dimEntity(int) typeEle(int) numElements(unsigned long) | |||
510 | tag(int) numVert[...](int) | |||
511 | ... | |||
512 | ... | |||
513 | $EndElements | |||
514 | */ | |||
515 | static PetscErrorCode DMPlexCreateGmsh_ReadElements_v40(GmshFile *gmsh, PETSC_UNUSED__attribute((unused)) int shift, GmshEntities *entities, PetscInt *numCells, GmshElement **gmsh_elems) | |||
516 | { | |||
517 | PetscViewer viewer = gmsh->viewer; | |||
518 | PetscBool byteSwap = gmsh->byteSwap; | |||
519 | long c, block, numEntityBlocks, numTotalElements, elem, numElements; | |||
520 | int p, info[3], *ibuf = NULL((void*)0); | |||
521 | int eid, dim, numTags, *tags, cellType, numNodes; | |||
522 | GmshEntity *entity = NULL((void*)0); | |||
523 | GmshElement *elements; | |||
524 | PetscErrorCode ierr; | |||
525 | ||||
526 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ; petscstack->line[petscstack->currentsize] = 526; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
527 | ierr = PetscViewerRead(viewer, &numEntityBlocks, 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-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
528 | if (byteSwap) {ierr = PetscByteSwap(&numEntityBlocks, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),528,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
529 | ierr = PetscViewerRead(viewer, &numTotalElements, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),529,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
530 | if (byteSwap) {ierr = PetscByteSwap(&numTotalElements, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),530,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
531 | ierr = PetscCalloc1(numTotalElements, &elements)PetscMallocA(1,PETSC_TRUE,531,__func__,"/sandbox/petsc/petsc.next-tmp/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),531,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
532 | *numCells = numTotalElements; | |||
533 | *gmsh_elems = elements; | |||
534 | for (c = 0, block = 0; block < numEntityBlocks; ++block) { | |||
535 | ierr = PetscViewerRead(viewer, info, 3, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),535,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
536 | if (byteSwap) {ierr = PetscByteSwap(info, PETSC_ENUM, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),536,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
537 | eid = info[0]; dim = info[1]; cellType = info[2]; | |||
538 | ierr = GmshEntitiesGet(entities, dim, eid, &entity);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),538,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
539 | numTags = entity->numTags; | |||
540 | tags = entity->tags; | |||
541 | switch (cellType) { | |||
542 | case 1: /* 2-node line */ | |||
543 | numNodes = 2; | |||
544 | break; | |||
545 | case 2: /* 3-node triangle */ | |||
546 | numNodes = 3; | |||
547 | break; | |||
548 | case 3: /* 4-node quadrangle */ | |||
549 | numNodes = 4; | |||
550 | break; | |||
551 | case 4: /* 4-node tetrahedron */ | |||
552 | numNodes = 4; | |||
553 | break; | |||
554 | case 5: /* 8-node hexahedron */ | |||
555 | numNodes = 8; | |||
556 | break; | |||
557 | case 6: /* 6-node wedge */ | |||
558 | numNodes = 6; | |||
559 | break; | |||
560 | case 15: /* 1-node vertex */ | |||
561 | numNodes = 1; | |||
562 | break; | |||
563 | default: | |||
564 | SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unsupported Gmsh element type %d", cellType)return PetscError(((MPI_Comm)0x44000001),564,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Unsupported Gmsh element type %d",cellType ); | |||
565 | } | |||
566 | ierr = PetscViewerRead(viewer, &numElements, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),566,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
567 | if (byteSwap) {ierr = PetscByteSwap(&numElements, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),567,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
568 | ierr = GmshBufferGet(gmsh, (1+numNodes)*numElements, sizeof(int), &ibuf);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),568,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
569 | 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),569,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
570 | if (byteSwap) {ierr = PetscByteSwap(ibuf, PETSC_ENUM, (1+numNodes)*numElements);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),570,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
571 | for (elem = 0; elem < numElements; ++elem, ++c) { | |||
572 | int *id = ibuf + elem*(1+numNodes), *nodes = id + 1; | |||
573 | GmshElement *element = elements + c; | |||
574 | element->dim = dim; | |||
575 | element->cellType = cellType; | |||
576 | element->numNodes = numNodes; | |||
577 | element->numTags = numTags; | |||
578 | element->id = id[0]; | |||
579 | for (p = 0; p < numNodes; p++) element->nodes[p] = nodes[p]; | |||
580 | for (p = 0; p < numTags; p++) element->tags[p] = tags[p]; | |||
581 | } | |||
582 | } | |||
583 | 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); | |||
584 | } | |||
585 | ||||
586 | static PetscErrorCode DMPlexCreateGmsh_ReadPeriodic_v40(GmshFile *gmsh, int shift, PetscInt slaveMap[], PetscBT bt) | |||
587 | { | |||
588 | PetscViewer viewer = gmsh->viewer; | |||
589 | int fileFormat = gmsh->fileFormat; | |||
590 | PetscBool binary = gmsh->binary; | |||
591 | PetscBool byteSwap = gmsh->byteSwap; | |||
592 | int numPeriodic, snum, i; | |||
593 | char line[PETSC_MAX_PATH_LEN4096]; | |||
594 | PetscErrorCode ierr; | |||
595 | ||||
596 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ; petscstack->line[petscstack->currentsize] = 596; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
597 | if (fileFormat == 22 || !binary) { | |||
598 | ierr = PetscViewerRead(viewer, line, 1, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),598,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
599 | snum = sscanf(line, "%d", &numPeriodic); | |||
600 | if (snum != 1) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),600,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file"); | |||
601 | } else { | |||
602 | ierr = PetscViewerRead(viewer, &numPeriodic, 1, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),602,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
603 | if (byteSwap) {ierr = PetscByteSwap(&numPeriodic, PETSC_ENUM, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),603,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
604 | } | |||
605 | for (i = 0; i < numPeriodic; i++) { | |||
606 | int ibuf[3], slaveDim = -1, slaveTag = -1, masterTag = -1, slaveNode, masterNode; | |||
607 | long j, nNodes; | |||
608 | double affine[16]; | |||
609 | ||||
610 | if (fileFormat == 22 || !binary) { | |||
611 | ierr = PetscViewerRead(viewer, line, 3, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),611,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
612 | snum = sscanf(line, "%d %d %d", &slaveDim, &slaveTag, &masterTag); | |||
613 | if (snum != 3) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),613,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file"); | |||
614 | } else { | |||
615 | ierr = PetscViewerRead(viewer, ibuf, 3, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),615,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
616 | if (byteSwap) {ierr = PetscByteSwap(ibuf, PETSC_ENUM, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),616,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
617 | slaveDim = ibuf[0]; slaveTag = ibuf[1]; masterTag = ibuf[2]; | |||
618 | } | |||
619 | (void)slaveDim; (void)slaveTag; (void)masterTag; /* unused */ | |||
620 | ||||
621 | if (fileFormat == 22 || !binary) { | |||
622 | ierr = PetscViewerRead(viewer, line, 1, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),622,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
623 | snum = sscanf(line, "%ld", &nNodes); | |||
624 | if (snum != 1) { /* discard tranformation and try again */ | |||
625 | 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),625,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
626 | ierr = PetscViewerRead(viewer, line, 1, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),626,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
627 | snum = sscanf(line, "%ld", &nNodes); | |||
628 | if (snum != 1) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),628,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file"); | |||
629 | } | |||
630 | } else { | |||
631 | ierr = PetscViewerRead(viewer, &nNodes, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),631,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
632 | if (byteSwap) {ierr = PetscByteSwap(&nNodes, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),632,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
633 | if (nNodes == -1) { /* discard tranformation and try again */ | |||
634 | ierr = PetscViewerRead(viewer, affine, 16, NULL((void*)0), PETSC_DOUBLE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),634,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
635 | ierr = PetscViewerRead(viewer, &nNodes, 1, NULL((void*)0), PETSC_LONG);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),635,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
636 | if (byteSwap) {ierr = PetscByteSwap(&nNodes, PETSC_LONG, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),636,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
637 | } | |||
638 | } | |||
639 | ||||
640 | for (j = 0; j < nNodes; j++) { | |||
641 | if (fileFormat == 22 || !binary) { | |||
642 | ierr = PetscViewerRead(viewer, line, 2, NULL((void*)0), PETSC_STRING);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),642,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
643 | snum = sscanf(line, "%d %d", &slaveNode, &masterNode); | |||
644 | if (snum != 2) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),644,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file"); | |||
645 | } else { | |||
646 | ierr = PetscViewerRead(viewer, ibuf, 2, NULL((void*)0), PETSC_ENUM);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),646,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
647 | if (byteSwap) {ierr = PetscByteSwap(ibuf, PETSC_ENUM, 2);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),647,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
648 | slaveNode = ibuf[0]; masterNode = ibuf[1]; | |||
649 | } | |||
650 | slaveMap[slaveNode - shift] = masterNode - shift; | |||
651 | ierr = PetscBTSet(bt, slaveNode - shift);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),651,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
652 | ierr = PetscBTSet(bt, masterNode - shift);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),652,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
653 | } | |||
654 | } | |||
655 | 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); | |||
656 | } | |||
657 | ||||
658 | /* | |||
659 | $Entities | |||
660 | numPoints(size_t) numCurves(size_t) | |||
661 | numSurfaces(size_t) numVolumes(size_t) | |||
662 | pointTag(int) X(double) Y(double) Z(double) | |||
663 | numPhysicalTags(size_t) physicalTag(int) ... | |||
664 | ... | |||
665 | curveTag(int) minX(double) minY(double) minZ(double) | |||
666 | maxX(double) maxY(double) maxZ(double) | |||
667 | numPhysicalTags(size_t) physicalTag(int) ... | |||
668 | numBoundingPoints(size_t) pointTag(int) ... | |||
669 | ... | |||
670 | surfaceTag(int) minX(double) minY(double) minZ(double) | |||
671 | maxX(double) maxY(double) maxZ(double) | |||
672 | numPhysicalTags(size_t) physicalTag(int) ... | |||
673 | numBoundingCurves(size_t) curveTag(int) ... | |||
674 | ... | |||
675 | volumeTag(int) minX(double) minY(double) minZ(double) | |||
676 | maxX(double) maxY(double) maxZ(double) | |||
677 | numPhysicalTags(size_t) physicalTag(int) ... | |||
678 | numBoundngSurfaces(size_t) surfaceTag(int) ... | |||
679 | ... | |||
680 | $EndEntities | |||
681 | */ | |||
682 | static PetscErrorCode DMPlexCreateGmsh_ReadEntities_v41(GmshFile *gmsh, GmshEntities **entities) | |||
683 | { | |||
684 | PetscInt count[4], index, numTags, i; | |||
685 | int dim, eid, *tags = NULL((void*)0); | |||
686 | GmshEntity *entity = NULL((void*)0); | |||
687 | PetscErrorCode ierr; | |||
688 | ||||
689 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ; petscstack->line[petscstack->currentsize] = 689; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
690 | ierr = GmshReadSize(gmsh, count, 4);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),690,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
691 | ierr = GmshEntitiesCreate(count, entities);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),691,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
692 | for (dim = 0; dim < 4; ++dim) { | |||
693 | for (index = 0; index < count[dim]; ++index) { | |||
694 | ierr = GmshReadInt(gmsh, &eid, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),694,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
695 | ierr = GmshEntitiesAdd(*entities, (PetscInt)index, dim, eid, &entity);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),695,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
696 | ierr = GmshReadDouble(gmsh, entity->bbox, (dim == 0) ? 3 : 6);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),696,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
697 | ierr = GmshReadSize(gmsh, &numTags, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),697,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
698 | ierr = GmshBufferGet(gmsh, numTags, sizeof(int), &tags);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),698,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
699 | ierr = GmshReadInt(gmsh, tags, numTags);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),699,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
700 | entity->numTags = PetscMin(numTags, 4)(((numTags)<(4)) ? (numTags) : (4)); | |||
701 | for (i = 0; i < entity->numTags; ++i) entity->tags[i] = tags[i]; | |||
702 | if (dim == 0) continue; | |||
703 | ierr = GmshReadSize(gmsh, &numTags, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),703,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
704 | ierr = GmshBufferGet(gmsh, numTags, sizeof(int), &tags);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),704,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
705 | ierr = GmshReadInt(gmsh, tags, numTags);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),705,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
706 | } | |||
707 | } | |||
708 | 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); | |||
709 | } | |||
710 | ||||
711 | /* | |||
712 | $Nodes | |||
713 | numEntityBlocks(size_t) numNodes(size_t) | |||
714 | minNodeTag(size_t) maxNodeTag(size_t) | |||
715 | entityDim(int) entityTag(int) parametric(int; 0 or 1) numNodesBlock(size_t) | |||
716 | nodeTag(size_t) | |||
717 | ... | |||
718 | x(double) y(double) z(double) | |||
719 | < u(double; if parametric and entityDim = 1 or entityDim = 2) > | |||
720 | < v(double; if parametric and entityDim = 2) > | |||
721 | ... | |||
722 | ... | |||
723 | $EndNodes | |||
724 | */ | |||
725 | static PetscErrorCode DMPlexCreateGmsh_ReadNodes_v41(GmshFile *gmsh, int shift, PetscInt *numVertices, double **gmsh_nodes) | |||
726 | { | |||
727 | int info[3]; | |||
728 | PetscInt sizes[4], numEntityBlocks, numNodes, numNodesBlock = 0, *nodeTag = NULL((void*)0), block, node, i; | |||
729 | double *coordinates; | |||
730 | PetscErrorCode ierr; | |||
731 | ||||
732 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ; petscstack->line[petscstack->currentsize] = 732; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
733 | ierr = GmshReadSize(gmsh, sizes, 4);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),733,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
734 | numEntityBlocks = sizes[0]; numNodes = sizes[1]; | |||
735 | ierr = PetscMalloc1(numNodes*3, &coordinates)PetscMallocA(1,PETSC_FALSE,735,__func__,"/sandbox/petsc/petsc.next-tmp/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),735,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
736 | *numVertices = numNodes; | |||
737 | *gmsh_nodes = coordinates; | |||
738 | for (block = 0, node = 0; block < numEntityBlocks; ++block, node += numNodesBlock) { | |||
739 | ierr = GmshReadInt(gmsh, info, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),739,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
740 | ierr = GmshReadSize(gmsh, &numNodesBlock, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),740,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
741 | ierr = GmshBufferGet(gmsh, numNodesBlock, sizeof(PetscInt), &nodeTag);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),741,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
742 | ierr = GmshReadSize(gmsh, nodeTag, numNodesBlock);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),742,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
743 | 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),743,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Unexpected node number %d should be %d" ,nodeTag[i],node+i+shift); | |||
744 | if (info[2] != 0) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Parametric coordinates not supported")return PetscError(((MPI_Comm)0x44000001),744,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,56,PETSC_ERROR_INITIAL,"Parametric coordinates not supported" ); | |||
745 | ierr = GmshReadDouble(gmsh, coordinates+node*3, numNodesBlock*3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),745,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
746 | } | |||
747 | 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); | |||
748 | } | |||
749 | ||||
750 | /* | |||
751 | $Elements | |||
752 | numEntityBlocks(size_t) numElements(size_t) | |||
753 | minElementTag(size_t) maxElementTag(size_t) | |||
754 | entityDim(int) entityTag(int) elementType(int; see below) numElementsBlock(size_t) | |||
755 | elementTag(size_t) nodeTag(size_t) ... | |||
756 | ... | |||
757 | ... | |||
758 | $EndElements | |||
759 | */ | |||
760 | static PetscErrorCode DMPlexCreateGmsh_ReadElements_v41(GmshFile *gmsh, PETSC_UNUSED__attribute((unused)) int shift, GmshEntities *entities, PetscInt *numCells, GmshElement **gmsh_elems) | |||
761 | { | |||
762 | int info[3], eid, dim, cellType, *tags; | |||
763 | PetscInt sizes[4], *ibuf = NULL((void*)0), numEntityBlocks, numElements, numBlockElements, numNodes, numTags, block, elem, c, p; | |||
764 | GmshEntity *entity = NULL((void*)0); | |||
765 | GmshElement *elements; | |||
766 | PetscErrorCode ierr; | |||
767 | ||||
768 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ; petscstack->line[petscstack->currentsize] = 768; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
769 | ierr = GmshReadSize(gmsh, sizes, 4);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),769,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
770 | numEntityBlocks = sizes[0]; numElements = sizes[1]; | |||
771 | ierr = PetscCalloc1(numElements, &elements)PetscMallocA(1,PETSC_TRUE,771,__func__,"/sandbox/petsc/petsc.next-tmp/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),771,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
772 | *numCells = numElements; | |||
773 | *gmsh_elems = elements; | |||
774 | for (c = 0, block = 0; block < numEntityBlocks; ++block) { | |||
775 | ierr = GmshReadInt(gmsh, info, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),775,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
776 | dim = info[0]; eid = info[1]; cellType = info[2]; | |||
777 | ierr = GmshEntitiesGet(entities, dim, eid, &entity);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),777,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
778 | numTags = entity->numTags; | |||
779 | tags = entity->tags; | |||
780 | switch (cellType) { | |||
781 | case 1: /* 2-node line */ | |||
782 | numNodes = 2; | |||
783 | break; | |||
784 | case 2: /* 3-node triangle */ | |||
785 | numNodes = 3; | |||
786 | break; | |||
787 | case 3: /* 4-node quadrangle */ | |||
788 | numNodes = 4; | |||
789 | break; | |||
790 | case 4: /* 4-node tetrahedron */ | |||
791 | numNodes = 4; | |||
792 | break; | |||
793 | case 5: /* 8-node hexahedron */ | |||
794 | numNodes = 8; | |||
795 | break; | |||
796 | case 6: /* 6-node wedge */ | |||
797 | numNodes = 6; | |||
798 | break; | |||
799 | case 15: /* 1-node vertex */ | |||
800 | numNodes = 1; | |||
801 | break; | |||
802 | default: | |||
803 | SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unsupported Gmsh element type %d", cellType)return PetscError(((MPI_Comm)0x44000001),803,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Unsupported Gmsh element type %d",cellType ); | |||
804 | } | |||
805 | ierr = GmshReadSize(gmsh, &numBlockElements, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),805,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
806 | ierr = GmshBufferGet(gmsh, (1+numNodes)*numBlockElements, sizeof(PetscInt), &ibuf);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),806,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
807 | ierr = GmshReadSize(gmsh, ibuf, (1+numNodes)*numBlockElements);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),807,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
808 | for (elem = 0; elem < numBlockElements; ++elem, ++c) { | |||
809 | GmshElement *element = elements + c; | |||
810 | PetscInt *id = ibuf + elem*(1+numNodes), *nodes = id + 1; | |||
811 | element->id = id[0]; | |||
812 | element->dim = dim; | |||
813 | element->cellType = cellType; | |||
814 | element->numNodes = numNodes; | |||
815 | element->numTags = numTags; | |||
816 | for (p = 0; p < numNodes; p++) element->nodes[p] = nodes[p]; | |||
817 | for (p = 0; p < numTags; p++) element->tags[p] = tags[p]; | |||
818 | } | |||
819 | } | |||
820 | 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); | |||
821 | } | |||
822 | ||||
823 | /* | |||
824 | $Periodic | |||
825 | numPeriodicLinks(size_t) | |||
826 | entityDim(int) entityTag(int) entityTagMaster(int) | |||
827 | numAffine(size_t) value(double) ... | |||
828 | numCorrespondingNodes(size_t) | |||
829 | nodeTag(size_t) nodeTagMaster(size_t) | |||
830 | ... | |||
831 | ... | |||
832 | $EndPeriodic | |||
833 | */ | |||
834 | static PetscErrorCode DMPlexCreateGmsh_ReadPeriodic_v41(GmshFile *gmsh, int shift, PetscInt slaveMap[], PetscBT bt) | |||
835 | { | |||
836 | int info[3]; | |||
837 | PetscInt numPeriodicLinks, numAffine, numCorrespondingNodes, *nodeTags = NULL((void*)0), link, node; | |||
838 | double dbuf[16]; | |||
839 | PetscErrorCode ierr; | |||
840 | ||||
841 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ; petscstack->line[petscstack->currentsize] = 841; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
842 | ierr = GmshReadSize(gmsh, &numPeriodicLinks, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),842,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
843 | for (link = 0; link < numPeriodicLinks; ++link) { | |||
| ||||
844 | ierr = GmshReadInt(gmsh, info, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),844,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
845 | ierr = GmshReadSize(gmsh, &numAffine, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),845,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
846 | ierr = GmshReadDouble(gmsh, dbuf, numAffine);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),846,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
847 | ierr = GmshReadSize(gmsh, &numCorrespondingNodes, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),847,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
848 | ierr = GmshBufferGet(gmsh, numCorrespondingNodes, sizeof(PetscInt), &nodeTags);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),848,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
849 | ierr = GmshReadSize(gmsh, nodeTags, numCorrespondingNodes*2);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),849,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
850 | for (node = 0; node < numCorrespondingNodes; ++node) { | |||
851 | PetscInt slaveNode = nodeTags[node*2+0] - shift; | |||
852 | PetscInt masterNode = nodeTags[node*2+1] - shift; | |||
853 | slaveMap[slaveNode] = masterNode; | |||
854 | ierr = PetscBTSet(bt, slaveNode);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),854,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
855 | ierr = PetscBTSet(bt, masterNode);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),855,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
856 | } | |||
857 | } | |||
858 | 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); | |||
859 | } | |||
860 | ||||
861 | /* | |||
862 | $MeshFormat // same as MSH version 2 | |||
863 | version(ASCII double; currently 4.1) | |||
864 | file-type(ASCII int; 0 for ASCII mode, 1 for binary mode) | |||
865 | data-size(ASCII int; sizeof(size_t)) | |||
866 | < int with value one; only in binary mode, to detect endianness > | |||
867 | $EndMeshFormat | |||
868 | */ | |||
869 | static PetscErrorCode DMPlexCreateGmsh_ReadMeshFormat(GmshFile *gmsh) | |||
870 | { | |||
871 | char line[PETSC_MAX_PATH_LEN4096]; | |||
872 | int snum, fileType, fileFormat, dataSize, checkEndian; | |||
873 | float version; | |||
874 | PetscErrorCode ierr; | |||
875 | ||||
876 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ; petscstack->line[petscstack->currentsize] = 876; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
877 | ierr = GmshReadString(gmsh, line, 3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),877,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
878 | snum = sscanf(line, "%f %d %d", &version, &fileType, &dataSize); | |||
879 | if (snum != 3) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unable to parse Gmsh file header: %s", line)return PetscError(((MPI_Comm)0x44000001),879,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Unable to parse Gmsh file header: %s" ,line); | |||
880 | 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),880,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Gmsh file version %3.1f must be at least 2.2" ,(double)version); | |||
881 | 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),881,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Gmsh file version %3.1f not supported" ,(double)version); | |||
882 | 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),882,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Gmsh file version %3.1f must be at most 4.1" ,(double)version); | |||
883 | 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),883,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Viewer is binary but Gmsh file is ASCII" ); | |||
884 | 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),884,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Viewer is ASCII but Gmsh file is binary" ); | |||
885 | fileFormat = (int)(version*10); /* XXX Should use (int)roundf(version*10) ? */ | |||
886 | 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),886,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Data size %d is not valid for a Gmsh file" ,dataSize); | |||
887 | 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),887,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Data size %d is not valid for a Gmsh file" ,dataSize); | |||
888 | gmsh->fileFormat = fileFormat; | |||
889 | gmsh->dataSize = dataSize; | |||
890 | gmsh->byteSwap = PETSC_FALSE; | |||
891 | if (gmsh->binary) { | |||
892 | ierr = GmshReadInt(gmsh, &checkEndian, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),892,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
893 | if (checkEndian != 1) { | |||
894 | ierr = PetscByteSwap(&checkEndian, PETSC_ENUM, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),894,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
895 | 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),895,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Unable to detect endianness in Gmsh file header: %s" ,line); | |||
896 | gmsh->byteSwap = PETSC_TRUE; | |||
897 | } | |||
898 | } | |||
899 | 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); | |||
900 | } | |||
901 | ||||
902 | /* | |||
903 | PhysicalNames | |||
904 | numPhysicalNames(ASCII int) | |||
905 | dimension(ASCII int) physicalTag(ASCII int) "name"(127 characters max) | |||
906 | ... | |||
907 | $EndPhysicalNames | |||
908 | */ | |||
909 | static PetscErrorCode DMPlexCreateGmsh_ReadPhysicalNames(GmshFile *gmsh) | |||
910 | { | |||
911 | char line[PETSC_MAX_PATH_LEN4096], name[128+2], *p, *q; | |||
912 | int snum, numRegions, region, dim, tag; | |||
913 | PetscErrorCode ierr; | |||
914 | ||||
915 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ; petscstack->line[petscstack->currentsize] = 915; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
916 | ierr = GmshReadString(gmsh, line, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),916,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
917 | snum = sscanf(line, "%d", &numRegions); | |||
918 | if (snum != 1) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),918,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file"); | |||
919 | for (region = 0; region < numRegions; ++region) { | |||
920 | ierr = GmshReadString(gmsh, line, 2);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),920,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
921 | snum = sscanf(line, "%d %d", &dim, &tag); | |||
922 | if (snum != 2) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),922,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file"); | |||
923 | ierr = GmshReadString(gmsh, line, -(PetscInt)sizeof(line));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),923,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
924 | ierr = PetscStrchr(line, '"', &p);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),924,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
925 | if (!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-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file"); | |||
926 | ierr = PetscStrrchr(line, '"', &q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),926,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
927 | if (q == p) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "File is not a valid Gmsh file")return PetscError(((MPI_Comm)0x44000001),927,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"File is not a valid Gmsh file"); | |||
928 | ierr = PetscStrncpy(name, p+1, (size_t)(q-p-1));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),928,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
929 | } | |||
930 | 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); | |||
931 | } | |||
932 | ||||
933 | /*@C | |||
934 | DMPlexCreateGmshFromFile - Create a DMPlex mesh from a Gmsh file | |||
935 | ||||
936 | + comm - The MPI communicator | |||
937 | . filename - Name of the Gmsh file | |||
938 | - interpolate - Create faces and edges in the mesh | |||
939 | ||||
940 | Output Parameter: | |||
941 | . dm - The DM object representing the mesh | |||
942 | ||||
943 | Level: beginner | |||
944 | ||||
945 | .seealso: DMPlexCreateFromFile(), DMPlexCreateGmsh(), DMPlexCreate() | |||
946 | @*/ | |||
947 | PetscErrorCode DMPlexCreateGmshFromFile(MPI_Comm comm, const char filename[], PetscBool interpolate, DM *dm) | |||
948 | { | |||
949 | PetscViewer viewer; | |||
950 | PetscMPIInt rank; | |||
951 | int fileType; | |||
952 | PetscViewerType vtype; | |||
953 | PetscErrorCode ierr; | |||
954 | ||||
955 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ; petscstack->line[petscstack->currentsize] = 955; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
956 | ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),956,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
957 | ||||
958 | /* Determine Gmsh file type (ASCII or binary) from file header */ | |||
959 | if (!rank) { | |||
960 | GmshFile gmsh_, *gmsh = &gmsh_; | |||
961 | char line[PETSC_MAX_PATH_LEN4096]; | |||
962 | int snum; | |||
963 | float version; | |||
964 | ||||
965 | ierr = PetscMemzero(gmsh,sizeof(GmshFile));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),965,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
966 | ierr = PetscViewerCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), &gmsh->viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),966,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
967 | ierr = PetscViewerSetType(gmsh->viewer, PETSCVIEWERASCII"ascii");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),967,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
968 | ierr = PetscViewerFileSetMode(gmsh->viewer, FILE_MODE_READ);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),968,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
969 | ierr = PetscViewerFileSetName(gmsh->viewer, filename);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),969,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
970 | /* Read only the first two lines of the Gmsh file */ | |||
971 | ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),971,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
972 | ierr = GmshExpect(gmsh, "$MeshFormat", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),972,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
973 | ierr = GmshReadString(gmsh, line, 2);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),973,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
974 | snum = sscanf(line, "%f %d", &version, &fileType); | |||
975 | if (snum != 2) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Unable to parse Gmsh file header: %s", line)return PetscError(((MPI_Comm)0x44000001),975,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Unable to parse Gmsh file header: %s" ,line); | |||
976 | 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),976,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Gmsh file version %3.1f must be at least 2.2" ,(double)version); | |||
977 | 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),977,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Gmsh file version %3.1f not supported" ,(double)version); | |||
978 | 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),978,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,62,PETSC_ERROR_INITIAL,"Gmsh file version %3.1f must be at most 4.1" ,(double)version); | |||
979 | ierr = PetscViewerDestroy(&gmsh->viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),979,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
980 | } | |||
981 | 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),981,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
982 | vtype = (fileType == 0) ? PETSCVIEWERASCII"ascii" : PETSCVIEWERBINARY"binary"; | |||
983 | ||||
984 | /* Create appropriate viewer and build plex */ | |||
985 | ierr = PetscViewerCreate(comm, &viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),985,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
986 | ierr = PetscViewerSetType(viewer, vtype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),986,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
987 | ierr = PetscViewerFileSetMode(viewer, FILE_MODE_READ);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),987,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
988 | ierr = PetscViewerFileSetName(viewer, filename);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),988,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
989 | ierr = DMPlexCreateGmsh(comm, viewer, interpolate, dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),989,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
990 | ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),990,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
991 | 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); | |||
992 | } | |||
993 | ||||
994 | /*@ | |||
995 | DMPlexCreateGmsh - Create a DMPlex mesh from a Gmsh file viewer | |||
996 | ||||
997 | Collective on comm | |||
998 | ||||
999 | Input Parameters: | |||
1000 | + comm - The MPI communicator | |||
1001 | . viewer - The Viewer associated with a Gmsh file | |||
1002 | - interpolate - Create faces and edges in the mesh | |||
1003 | ||||
1004 | Output Parameter: | |||
1005 | . dm - The DM object representing the mesh | |||
1006 | ||||
1007 | Note: http://gmsh.info/doc/texinfo/gmsh.html#MSH-file-format | |||
1008 | ||||
1009 | Level: beginner | |||
1010 | ||||
1011 | .keywords: mesh,Gmsh | |||
1012 | .seealso: DMPLEX, DMCreate() | |||
1013 | @*/ | |||
1014 | PetscErrorCode DMPlexCreateGmsh(MPI_Comm comm, PetscViewer viewer, PetscBool interpolate, DM *dm) | |||
1015 | { | |||
1016 | PetscViewer parentviewer = NULL((void*)0); | |||
1017 | double *coordsIn = NULL((void*)0); | |||
1018 | GmshEntities *entities = NULL((void*)0); | |||
1019 | GmshElement *gmsh_elem = NULL((void*)0); | |||
1020 | PetscSection coordSection; | |||
1021 | Vec coordinates; | |||
1022 | PetscBT periodicV = NULL((void*)0), periodicC = NULL((void*)0); | |||
1023 | PetscScalar *coords; | |||
1024 | 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; | |||
1025 | PetscInt numVertices = 0, numCells = 0, trueNumCells = 0; | |||
1026 | int i, shift = 1; | |||
1027 | PetscMPIInt rank; | |||
1028 | PetscBool binary, zerobase = PETSC_FALSE, periodic = PETSC_FALSE, usemarker = PETSC_FALSE; | |||
1029 | PetscBool enable_hybrid = PETSC_FALSE; | |||
1030 | PetscErrorCode ierr; | |||
1031 | ||||
1032 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ; petscstack->line[petscstack->currentsize] = 1032; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
1033 | ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1033,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1034 | ierr = PetscOptionsGetBool(((PetscObject) viewer)->options,((PetscObject) viewer)->prefix, "-dm_plex_gmsh_hybrid", &enable_hybrid, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1034,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1035 | ierr = PetscOptionsGetBool(((PetscObject) viewer)->options,((PetscObject) viewer)->prefix, "-dm_plex_gmsh_periodic", &periodic, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1035,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1036 | ierr = PetscOptionsGetBool(((PetscObject) viewer)->options,((PetscObject) viewer)->prefix, "-dm_plex_gmsh_use_marker", &usemarker, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1036,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1037 | ierr = PetscOptionsGetBool(((PetscObject) viewer)->options,((PetscObject) viewer)->prefix, "-dm_plex_gmsh_zero_base", &zerobase, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1037,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1038 | ierr = PetscOptionsGetInt(((PetscObject) viewer)->options,((PetscObject) viewer)->prefix, "-dm_plex_gmsh_spacedim", &embedDim, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1038,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1039 | if (zerobase) shift = 0; | |||
1040 | ||||
1041 | ierr = DMCreate(comm, dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1041,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1042 | ierr = DMSetType(*dm, DMPLEX"plex");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1042,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1043 | 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),1043,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1044 | ||||
1045 | ierr = PetscObjectTypeCompare((PetscObject)viewer, PETSCVIEWERBINARY"binary", &binary);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1045,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1046 | ||||
1047 | /* Binary viewers read on all ranks, get subviewer to read only in rank 0 */ | |||
1048 | if (binary) { | |||
1049 | parentviewer = viewer; | |||
1050 | ierr = PetscViewerGetSubViewer(parentviewer, PETSC_COMM_SELF((MPI_Comm)0x44000001), &viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1050,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1051 | } | |||
1052 | ||||
1053 | if (!rank) { | |||
1054 | GmshFile gmsh_, *gmsh = &gmsh_; | |||
1055 | char line[PETSC_MAX_PATH_LEN4096]; | |||
1056 | PetscBool match; | |||
1057 | ||||
1058 | ierr = PetscMemzero(gmsh,sizeof(GmshFile));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1058,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1059 | gmsh->viewer = viewer; | |||
1060 | gmsh->binary = binary; | |||
1061 | ||||
1062 | /* Read mesh format */ | |||
1063 | ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1063,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1064 | ierr = GmshExpect(gmsh, "$MeshFormat", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1064,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1065 | ierr = DMPlexCreateGmsh_ReadMeshFormat(gmsh);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1065,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1066 | ierr = GmshReadEndSection(gmsh, "$EndMeshFormat", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1066,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1067 | ||||
1068 | /* OPTIONAL Read physical names */ | |||
1069 | ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1069,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1070 | ierr = GmshMatch(gmsh,"$PhysicalNames", line, &match);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1070,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1071 | if (match) { | |||
1072 | ierr = DMPlexCreateGmsh_ReadPhysicalNames(gmsh);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1072,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1073 | ierr = GmshReadEndSection(gmsh, "$EndPhysicalNames", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1073,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1074 | /* Initial read for entity section */ | |||
1075 | ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1075,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1076 | } | |||
1077 | ||||
1078 | /* Read entities */ | |||
1079 | if (gmsh->fileFormat >= 40) { | |||
1080 | ierr = GmshExpect(gmsh, "$Entities", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1080,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1081 | switch (gmsh->fileFormat) { | |||
1082 | case 41: ierr = DMPlexCreateGmsh_ReadEntities_v41(gmsh, &entities);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1082,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); break; | |||
1083 | default: ierr = DMPlexCreateGmsh_ReadEntities_v40(gmsh, &entities);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1083,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); break; | |||
1084 | } | |||
1085 | ierr = GmshReadEndSection(gmsh, "$EndEntities", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1085,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1086 | /* Initial read for nodes section */ | |||
1087 | ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1087,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1088 | } | |||
1089 | ||||
1090 | /* Read nodes */ | |||
1091 | ierr = GmshExpect(gmsh, "$Nodes", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1091,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1092 | switch (gmsh->fileFormat) { | |||
1093 | case 41: ierr = DMPlexCreateGmsh_ReadNodes_v41(gmsh, shift, &numVertices, &coordsIn);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1093,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); break; | |||
1094 | case 40: ierr = DMPlexCreateGmsh_ReadNodes_v40(gmsh, shift, &numVertices, &coordsIn);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1094,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); break; | |||
1095 | default: ierr = DMPlexCreateGmsh_ReadNodes_v22(gmsh, shift, &numVertices, &coordsIn);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1095,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); break; | |||
1096 | } | |||
1097 | ierr = GmshReadEndSection(gmsh, "$EndNodes", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1097,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1098 | ||||
1099 | /* Read elements */ | |||
1100 | ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1100,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);; | |||
1101 | ierr = GmshExpect(gmsh, "$Elements", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1101,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1102 | switch (gmsh->fileFormat) { | |||
1103 | 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),1103,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); break; | |||
1104 | 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),1104,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); break; | |||
1105 | default: ierr = DMPlexCreateGmsh_ReadElements_v22(gmsh, shift, &numCells, &gmsh_elem);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1105,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); break; | |||
1106 | } | |||
1107 | ierr = GmshReadEndSection(gmsh, "$EndElements", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1107,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1108 | ||||
1109 | /* OPTIONAL Read periodic section */ | |||
1110 | if (periodic) { | |||
1111 | PetscInt pVert, *periodicMapT, *aux; | |||
1112 | ||||
1113 | ierr = PetscMalloc1(numVertices, &periodicMapT)PetscMallocA(1,PETSC_FALSE,1113,__func__,"/sandbox/petsc/petsc.next-tmp/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),1113,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1114 | ierr = PetscBTCreate(numVertices, &periodicV);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1114,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1115 | for (i = 0; i < numVertices; i++) periodicMapT[i] = i; | |||
1116 | ||||
1117 | ierr = GmshReadSection(gmsh, line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1117,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1118 | ierr = GmshExpect(gmsh, "$Periodic", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1118,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1119 | switch (gmsh->fileFormat) { | |||
1120 | case 41: ierr = DMPlexCreateGmsh_ReadPeriodic_v41(gmsh, shift, periodicMapT, periodicV);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1120,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); break; | |||
1121 | default: ierr = DMPlexCreateGmsh_ReadPeriodic_v40(gmsh, shift, periodicMapT, periodicV);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1121,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); break; | |||
1122 | } | |||
1123 | ierr = GmshReadEndSection(gmsh, "$EndPeriodic", line);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1123,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1124 | ||||
1125 | /* we may have slaves of slaves */ | |||
1126 | for (i = 0; i < numVertices; i++) { | |||
1127 | while (periodicMapT[periodicMapT[i]] != periodicMapT[i]) { | |||
1128 | periodicMapT[i] = periodicMapT[periodicMapT[i]]; | |||
1129 | } | |||
1130 | } | |||
1131 | /* periodicMap : from old to new numbering (periodic vertices excluded) | |||
1132 | periodicMapI: from new to old numbering */ | |||
1133 | ierr = PetscMalloc1(numVertices, &periodicMap)PetscMallocA(1,PETSC_FALSE,1133,__func__,"/sandbox/petsc/petsc.next-tmp/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),1133,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1134 | ierr = PetscMalloc1(numVertices, &periodicMapI)PetscMallocA(1,PETSC_FALSE,1134,__func__,"/sandbox/petsc/petsc.next-tmp/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),1134,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1135 | ierr = PetscMalloc1(numVertices, &aux)PetscMallocA(1,PETSC_FALSE,1135,__func__,"/sandbox/petsc/petsc.next-tmp/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),1135,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1136 | for (i = 0, pVert = 0; i < numVertices; i++) { | |||
1137 | if (periodicMapT[i] != i) { | |||
1138 | pVert++; | |||
1139 | } else { | |||
1140 | aux[i] = i - pVert; | |||
1141 | periodicMapI[i - pVert] = i; | |||
1142 | } | |||
1143 | } | |||
1144 | for (i = 0 ; i < numVertices; i++) { | |||
1145 | periodicMap[i] = aux[periodicMapT[i]]; | |||
1146 | } | |||
1147 | ierr = PetscFree(periodicMapT)((*PetscTrFree)((void*)(periodicMapT),1147,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ) || ((periodicMapT) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1147,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1148 | ierr = PetscFree(aux)((*PetscTrFree)((void*)(aux),1148,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ) || ((aux) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1148,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1149 | /* remove periodic vertices */ | |||
1150 | numVertices = numVertices - pVert; | |||
1151 | } | |||
1152 | ||||
1153 | ierr = GmshEntitiesDestroy(&entities);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1153,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1154 | ierr = PetscFree(gmsh->wbuf)((*PetscTrFree)((void*)(gmsh->wbuf),1154,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ) || ((gmsh->wbuf) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1154,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1155 | ierr = PetscFree(gmsh->sbuf)((*PetscTrFree)((void*)(gmsh->sbuf),1155,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ) || ((gmsh->sbuf) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1155,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1156 | } | |||
1157 | ||||
1158 | if (parentviewer) { | |||
1159 | ierr = PetscViewerRestoreSubViewer(parentviewer, PETSC_COMM_SELF((MPI_Comm)0x44000001), &viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1159,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1160 | } | |||
1161 | ||||
1162 | if (!rank) { | |||
1163 | PetscBool hybrid = PETSC_FALSE; | |||
1164 | ||||
1165 | for (trueNumCells = 0, c = 0; c < numCells; ++c) { | |||
1166 | int on = -1; | |||
1167 | if (gmsh_elem[c].dim > dim) {dim = gmsh_elem[c].dim; trueNumCells = 0;} | |||
1168 | if (gmsh_elem[c].dim == dim) {hybrid = (trueNumCells ? (on != gmsh_elem[c].cellType ? on = gmsh_elem[c].cellType,PETSC_TRUE : hybrid) : (on = gmsh_elem[c].cellType, PETSC_FALSE) ); trueNumCells++;} | |||
1169 | /* wedges always indicate an hybrid mesh in PLEX */ | |||
1170 | if (on == 6 || on == 13) hybrid = PETSC_TRUE; | |||
1171 | } | |||
1172 | /* Renumber cells for hybrid grids */ | |||
1173 | if (hybrid && enable_hybrid) { | |||
1174 | PetscInt hc1 = 0, hc2 = 0, *hybridCells1 = NULL((void*)0), *hybridCells2 = NULL((void*)0); | |||
1175 | PetscInt cell, tn, *tp; | |||
1176 | int n1 = 0,n2 = 0; | |||
1177 | ||||
1178 | ierr = PetscMalloc1(trueNumCells, &hybridCells1)PetscMallocA(1,PETSC_FALSE,1178,__func__,"/sandbox/petsc/petsc.next-tmp/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),1178,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1179 | ierr = PetscMalloc1(trueNumCells, &hybridCells2)PetscMallocA(1,PETSC_FALSE,1179,__func__,"/sandbox/petsc/petsc.next-tmp/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),1179,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1180 | for (cell = 0, c = 0; c < numCells; ++c) { | |||
1181 | if (gmsh_elem[c].dim == dim) { | |||
1182 | if (!n1) n1 = gmsh_elem[c].cellType; | |||
1183 | else if (!n2 && n1 != gmsh_elem[c].cellType) n2 = gmsh_elem[c].cellType; | |||
1184 | ||||
1185 | if (gmsh_elem[c].cellType == n1) hybridCells1[hc1++] = cell; | |||
1186 | else if (gmsh_elem[c].cellType == n2) hybridCells2[hc2++] = cell; | |||
1187 | else SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Cannot handle more than 2 cell types")return PetscError(((MPI_Comm)0x44000001),1187,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,56,PETSC_ERROR_INITIAL,"Cannot handle more than 2 cell types" ); | |||
1188 | cell++; | |||
1189 | } | |||
1190 | } | |||
1191 | ||||
1192 | switch (n1) { | |||
1193 | case 2: /* triangles */ | |||
1194 | case 9: | |||
1195 | switch (n2) { | |||
1196 | case 0: /* single type mesh */ | |||
1197 | case 3: /* quads */ | |||
1198 | case 10: | |||
1199 | break; | |||
1200 | default: | |||
1201 | SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported cell types %d and %d",n1, n2)return PetscError(((MPI_Comm)0x44000001),1201,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,56,PETSC_ERROR_INITIAL,"Unsupported cell types %d and %d",n1 ,n2); | |||
1202 | } | |||
1203 | break; | |||
1204 | case 3: | |||
1205 | case 10: | |||
1206 | switch (n2) { | |||
1207 | case 0: /* single type mesh */ | |||
1208 | case 2: /* swap since we list simplices first */ | |||
1209 | case 9: | |||
1210 | tn = hc1; | |||
1211 | hc1 = hc2; | |||
1212 | hc2 = tn; | |||
1213 | ||||
1214 | tp = hybridCells1; | |||
1215 | hybridCells1 = hybridCells2; | |||
1216 | hybridCells2 = tp; | |||
1217 | break; | |||
1218 | default: | |||
1219 | SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported cell types %d and %d",n1, n2)return PetscError(((MPI_Comm)0x44000001),1219,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,56,PETSC_ERROR_INITIAL,"Unsupported cell types %d and %d",n1 ,n2); | |||
1220 | } | |||
1221 | break; | |||
1222 | case 4: /* tetrahedra */ | |||
1223 | case 11: | |||
1224 | switch (n2) { | |||
1225 | case 0: /* single type mesh */ | |||
1226 | case 6: /* wedges */ | |||
1227 | case 13: | |||
1228 | break; | |||
1229 | default: | |||
1230 | SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported cell types %d and %d",n1, n2)return PetscError(((MPI_Comm)0x44000001),1230,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,56,PETSC_ERROR_INITIAL,"Unsupported cell types %d and %d",n1 ,n2); | |||
1231 | } | |||
1232 | break; | |||
1233 | case 6: | |||
1234 | case 13: | |||
1235 | switch (n2) { | |||
1236 | case 0: /* single type mesh */ | |||
1237 | case 4: /* swap since we list simplices first */ | |||
1238 | case 11: | |||
1239 | tn = hc1; | |||
1240 | hc1 = hc2; | |||
1241 | hc2 = tn; | |||
1242 | ||||
1243 | tp = hybridCells1; | |||
1244 | hybridCells1 = hybridCells2; | |||
1245 | hybridCells2 = tp; | |||
1246 | break; | |||
1247 | default: | |||
1248 | SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported cell types %d and %d",n1, n2)return PetscError(((MPI_Comm)0x44000001),1248,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,56,PETSC_ERROR_INITIAL,"Unsupported cell types %d and %d",n1 ,n2); | |||
1249 | } | |||
1250 | break; | |||
1251 | default: | |||
1252 | SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unsupported cell types %d and %d",n1, n2)return PetscError(((MPI_Comm)0x44000001),1252,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,56,PETSC_ERROR_INITIAL,"Unsupported cell types %d and %d",n1 ,n2); | |||
1253 | } | |||
1254 | cMax = hc1; | |||
1255 | ierr = PetscMalloc1(trueNumCells, &hybridMap)PetscMallocA(1,PETSC_FALSE,1255,__func__,"/sandbox/petsc/petsc.next-tmp/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),1255,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1256 | for (cell = 0; cell < hc1; cell++) hybridMap[hybridCells1[cell]] = cell; | |||
1257 | for (cell = 0; cell < hc2; cell++) hybridMap[hybridCells2[cell]] = cell + hc1; | |||
1258 | ierr = PetscFree(hybridCells1)((*PetscTrFree)((void*)(hybridCells1),1258,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ) || ((hybridCells1) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1258,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1259 | ierr = PetscFree(hybridCells2)((*PetscTrFree)((void*)(hybridCells2),1259,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ) || ((hybridCells2) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1259,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1260 | } | |||
1261 | ||||
1262 | } | |||
1263 | ||||
1264 | /* Allocate the cell-vertex mesh */ | |||
1265 | ierr = DMPlexSetChart(*dm, 0, trueNumCells+numVertices);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1265,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1266 | for (cell = 0, c = 0; c < numCells; ++c) { | |||
1267 | if (gmsh_elem[c].dim == dim) { | |||
1268 | ierr = DMPlexSetConeSize(*dm, hybridMap ? hybridMap[cell] : cell, gmsh_elem[c].numNodes);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1268,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1269 | cell++; | |||
1270 | } | |||
1271 | } | |||
1272 | ierr = DMSetUp(*dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1272,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1273 | /* Add cell-vertex connections */ | |||
1274 | for (cell = 0, c = 0; c < numCells; ++c) { | |||
1275 | if (gmsh_elem[c].dim == dim) { | |||
1276 | PetscInt pcone[8], corner; | |||
1277 | for (corner = 0; corner < gmsh_elem[c].numNodes; ++corner) { | |||
1278 | const PetscInt cc = gmsh_elem[c].nodes[corner] - shift; | |||
1279 | pcone[corner] = (periodicMap ? periodicMap[cc] : cc) + trueNumCells; | |||
1280 | } | |||
1281 | if (dim == 3) { | |||
1282 | /* Tetrahedra are inverted */ | |||
1283 | if (gmsh_elem[c].cellType == 4) { | |||
1284 | PetscInt tmp = pcone[0]; | |||
1285 | pcone[0] = pcone[1]; | |||
1286 | pcone[1] = tmp; | |||
1287 | } | |||
1288 | /* Hexahedra are inverted */ | |||
1289 | if (gmsh_elem[c].cellType == 5) { | |||
1290 | PetscInt tmp = pcone[1]; | |||
1291 | pcone[1] = pcone[3]; | |||
1292 | pcone[3] = tmp; | |||
1293 | } | |||
1294 | /* Prisms are inverted */ | |||
1295 | if (gmsh_elem[c].cellType == 6) { | |||
1296 | PetscInt tmp; | |||
1297 | ||||
1298 | tmp = pcone[1]; | |||
1299 | pcone[1] = pcone[2]; | |||
1300 | pcone[2] = tmp; | |||
1301 | tmp = pcone[4]; | |||
1302 | pcone[4] = pcone[5]; | |||
1303 | pcone[5] = tmp; | |||
1304 | } | |||
1305 | } else if (dim == 2 && hybridMap && hybridMap[cell] >= cMax) { /* hybrid cells */ | |||
1306 | /* quads are input to PLEX as prisms */ | |||
1307 | if (gmsh_elem[c].cellType == 3) { | |||
1308 | PetscInt tmp = pcone[2]; | |||
1309 | pcone[2] = pcone[3]; | |||
1310 | pcone[3] = tmp; | |||
1311 | } | |||
1312 | } | |||
1313 | ierr = DMPlexSetCone(*dm, hybridMap ? hybridMap[cell] : cell, pcone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1313,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1314 | cell++; | |||
1315 | } | |||
1316 | } | |||
1317 | 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),1317,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1318 | ierr = DMSetDimension(*dm, dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1318,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1319 | 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),1319,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1320 | ierr = DMPlexSymmetrize(*dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1320,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1321 | ierr = DMPlexStratify(*dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1321,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1322 | if (interpolate) { | |||
1323 | DM idm; | |||
1324 | ||||
1325 | ierr = DMPlexInterpolate(*dm, &idm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1325,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1326 | ierr = DMDestroy(dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1326,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1327 | *dm = idm; | |||
1328 | } | |||
1329 | ||||
1330 | if (usemarker && !interpolate && dim > 1) SETERRQ(comm,PETSC_ERR_SUP,"Cannot create marker label without interpolation")return PetscError(comm,1330,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,56,PETSC_ERROR_INITIAL,"Cannot create marker label without interpolation" ); | |||
1331 | if (!rank && usemarker) { | |||
1332 | PetscInt f, fStart, fEnd; | |||
1333 | ||||
1334 | ierr = DMCreateLabel(*dm, "marker");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1334,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1335 | ierr = DMPlexGetHeightStratum(*dm, 1, &fStart, &fEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1335,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1336 | for (f = fStart; f < fEnd; ++f) { | |||
1337 | PetscInt suppSize; | |||
1338 | ||||
1339 | ierr = DMPlexGetSupportSize(*dm, f, &suppSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1339,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1340 | if (suppSize == 1) { | |||
1341 | PetscInt *cone = NULL((void*)0), coneSize, p; | |||
1342 | ||||
1343 | ierr = DMPlexGetTransitiveClosure(*dm, f, PETSC_TRUE, &coneSize, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1343,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1344 | for (p = 0; p < coneSize; p += 2) { | |||
1345 | ierr = DMSetLabelValue(*dm, "marker", cone[p], 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1345,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1346 | } | |||
1347 | ierr = DMPlexRestoreTransitiveClosure(*dm, f, PETSC_TRUE, &coneSize, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1347,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1348 | } | |||
1349 | } | |||
1350 | } | |||
1351 | ||||
1352 | if (!rank) { | |||
1353 | PetscInt vStart, vEnd; | |||
1354 | ||||
1355 | ierr = DMPlexGetDepthStratum(*dm, 0, &vStart, &vEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1355,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1356 | for (cell = 0, c = 0; c < numCells; ++c) { | |||
1357 | ||||
1358 | /* Create face sets */ | |||
1359 | if (interpolate && gmsh_elem[c].dim == dim-1) { | |||
1360 | const PetscInt *join; | |||
1361 | PetscInt joinSize, pcone[8], corner; | |||
1362 | /* Find the relevant facet with vertex joins */ | |||
1363 | for (corner = 0; corner < gmsh_elem[c].numNodes; ++corner) { | |||
1364 | const PetscInt cc = gmsh_elem[c].nodes[corner] - shift; | |||
1365 | pcone[corner] = (periodicMap ? periodicMap[cc] : cc) + vStart; | |||
1366 | } | |||
1367 | ierr = DMPlexGetFullJoin(*dm, gmsh_elem[c].numNodes, pcone, &joinSize, &join);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1367,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1368 | 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),1368,__func__,"/sandbox/petsc/petsc.next-tmp/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); | |||
1369 | 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),1369,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1370 | 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),1370,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1371 | } | |||
1372 | ||||
1373 | /* Create cell sets */ | |||
1374 | if (gmsh_elem[c].dim == dim) { | |||
1375 | if (gmsh_elem[c].numTags > 0) { | |||
1376 | 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),1376,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1377 | } | |||
1378 | cell++; | |||
1379 | } | |||
1380 | ||||
1381 | /* Create vertex sets */ | |||
1382 | if (gmsh_elem[c].dim == 0) { | |||
1383 | if (gmsh_elem[c].numTags > 0) { | |||
1384 | const PetscInt cc = gmsh_elem[c].nodes[0] - shift; | |||
1385 | const PetscInt vid = (periodicMap ? periodicMap[cc] : cc) + vStart; | |||
1386 | ierr = DMSetLabelValue(*dm, "Vertex Sets", vid, gmsh_elem[c].tags[0]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1386,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1387 | } | |||
1388 | } | |||
1389 | } | |||
1390 | } | |||
1391 | ||||
1392 | /* Create coordinates */ | |||
1393 | if (embedDim < 0) embedDim = dim; | |||
1394 | ierr = DMSetCoordinateDim(*dm, embedDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1394,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1395 | ierr = DMGetCoordinateSection(*dm, &coordSection);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1395,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1396 | ierr = PetscSectionSetNumFields(coordSection, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1396,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1397 | ierr = PetscSectionSetFieldComponents(coordSection, 0, embedDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1397,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1398 | if (periodicMap) { /* we need to localize coordinates on cells */ | |||
1399 | ierr = PetscSectionSetChart(coordSection, 0, trueNumCells + numVertices);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1399,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1400 | } else { | |||
1401 | ierr = PetscSectionSetChart(coordSection, trueNumCells, trueNumCells + numVertices);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1401,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1402 | } | |||
1403 | for (v = trueNumCells; v < trueNumCells+numVertices; ++v) { | |||
1404 | ierr = PetscSectionSetDof(coordSection, v, embedDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1404,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1405 | ierr = PetscSectionSetFieldDof(coordSection, v, 0, embedDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1405,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1406 | } | |||
1407 | if (periodicMap) { | |||
1408 | ierr = PetscBTCreate(trueNumCells, &periodicC);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1408,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1409 | for (cell = 0, c = 0; c < numCells; ++c) { | |||
1410 | if (gmsh_elem[c].dim == dim) { | |||
1411 | PetscInt corner; | |||
1412 | PetscBool pc = PETSC_FALSE; | |||
1413 | for (corner = 0; corner < gmsh_elem[c].numNodes; ++corner) { | |||
1414 | pc = (PetscBool)(pc || PetscBTLookup(periodicV, gmsh_elem[c].nodes[corner] - shift)); | |||
1415 | } | |||
1416 | if (pc) { | |||
1417 | PetscInt dof = gmsh_elem[c].numNodes*embedDim; | |||
1418 | PetscInt ucell = hybridMap ? hybridMap[cell] : cell; | |||
1419 | ierr = PetscBTSet(periodicC, ucell);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1419,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1420 | ierr = PetscSectionSetDof(coordSection, ucell, dof);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1420,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1421 | ierr = PetscSectionSetFieldDof(coordSection, ucell, 0, dof);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1421,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1422 | } | |||
1423 | cell++; | |||
1424 | } | |||
1425 | } | |||
1426 | } | |||
1427 | ierr = PetscSectionSetUp(coordSection);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1427,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1428 | ierr = PetscSectionGetStorageSize(coordSection, &coordSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1428,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1429 | ierr = VecCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), &coordinates);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1429,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1430 | ierr = PetscObjectSetName((PetscObject) coordinates, "coordinates");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1430,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1431 | ierr = VecSetSizes(coordinates, coordSize, PETSC_DETERMINE-1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1431,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1432 | ierr = VecSetBlockSize(coordinates, embedDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1432,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1433 | ierr = VecSetType(coordinates, VECSTANDARD"standard");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1433,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1434 | ierr = VecGetArray(coordinates, &coords);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1434,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1435 | if (periodicMap) { | |||
1436 | PetscInt off; | |||
1437 | ||||
1438 | for (cell = 0, c = 0; c < numCells; ++c) { | |||
1439 | PetscInt pcone[8], corner; | |||
1440 | if (gmsh_elem[c].dim == dim) { | |||
1441 | PetscInt ucell = hybridMap ? hybridMap[cell] : cell; | |||
1442 | if (PetscUnlikely(PetscBTLookup(periodicC, ucell))__builtin_expect(!!(PetscBTLookup(periodicC, ucell)),0)) { | |||
1443 | for (corner = 0; corner < gmsh_elem[c].numNodes; ++corner) { | |||
1444 | pcone[corner] = gmsh_elem[c].nodes[corner] - shift; | |||
1445 | } | |||
1446 | if (dim == 3) { | |||
1447 | /* Tetrahedra are inverted */ | |||
1448 | if (gmsh_elem[c].cellType == 4) { | |||
1449 | PetscInt tmp = pcone[0]; | |||
1450 | pcone[0] = pcone[1]; | |||
1451 | pcone[1] = tmp; | |||
1452 | } | |||
1453 | /* Hexahedra are inverted */ | |||
1454 | if (gmsh_elem[c].cellType == 5) { | |||
1455 | PetscInt tmp = pcone[1]; | |||
1456 | pcone[1] = pcone[3]; | |||
1457 | pcone[3] = tmp; | |||
1458 | } | |||
1459 | /* Prisms are inverted */ | |||
1460 | if (gmsh_elem[c].cellType == 6) { | |||
1461 | PetscInt tmp; | |||
1462 | ||||
1463 | tmp = pcone[1]; | |||
1464 | pcone[1] = pcone[2]; | |||
1465 | pcone[2] = tmp; | |||
1466 | tmp = pcone[4]; | |||
1467 | pcone[4] = pcone[5]; | |||
1468 | pcone[5] = tmp; | |||
1469 | } | |||
1470 | } else if (dim == 2 && hybridMap && hybridMap[cell] >= cMax) { /* hybrid cells */ | |||
1471 | /* quads are input to PLEX as prisms */ | |||
1472 | if (gmsh_elem[c].cellType == 3) { | |||
1473 | PetscInt tmp = pcone[2]; | |||
1474 | pcone[2] = pcone[3]; | |||
1475 | pcone[3] = tmp; | |||
1476 | } | |||
1477 | } | |||
1478 | ierr = PetscSectionGetOffset(coordSection, ucell, &off);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1478,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1479 | for (corner = 0; corner < gmsh_elem[c].numNodes; ++corner) { | |||
1480 | v = pcone[corner]; | |||
1481 | for (d = 0; d < embedDim; ++d) { | |||
1482 | coords[off++] = (PetscReal) coordsIn[v*3+d]; | |||
1483 | } | |||
1484 | } | |||
1485 | } | |||
1486 | cell++; | |||
1487 | } | |||
1488 | } | |||
1489 | for (v = 0; v < numVertices; ++v) { | |||
1490 | ierr = PetscSectionGetOffset(coordSection, v + trueNumCells, &off);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1490,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1491 | for (d = 0; d < embedDim; ++d) { | |||
1492 | coords[off+d] = (PetscReal) coordsIn[periodicMapI[v]*3+d]; | |||
1493 | } | |||
1494 | } | |||
1495 | } else { | |||
1496 | for (v = 0; v < numVertices; ++v) { | |||
1497 | for (d = 0; d < embedDim; ++d) { | |||
1498 | coords[v*embedDim+d] = (PetscReal) coordsIn[v*3+d]; | |||
1499 | } | |||
1500 | } | |||
1501 | } | |||
1502 | ierr = VecRestoreArray(coordinates, &coords);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1502,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1503 | ierr = DMSetCoordinatesLocal(*dm, coordinates);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1503,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1504 | 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),1504,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1505 | ||||
1506 | ierr = PetscFree(coordsIn)((*PetscTrFree)((void*)(coordsIn),1506,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ) || ((coordsIn) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1506,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1507 | ierr = PetscFree(gmsh_elem)((*PetscTrFree)((void*)(gmsh_elem),1507,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ) || ((gmsh_elem) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1507,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1508 | ierr = PetscFree(hybridMap)((*PetscTrFree)((void*)(hybridMap),1508,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ) || ((hybridMap) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1508,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1509 | ierr = PetscFree(periodicMap)((*PetscTrFree)((void*)(periodicMap),1509,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ) || ((periodicMap) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1509,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1510 | ierr = PetscFree(periodicMapI)((*PetscTrFree)((void*)(periodicMapI),1510,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ) || ((periodicMapI) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1510,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1511 | ierr = PetscBTDestroy(&periodicV);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1511,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1512 | ierr = PetscBTDestroy(&periodicC);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1512,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1513 | ierr = VecDestroy(&coordinates);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1513,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1514 | ||||
1515 | 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),1515,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/impls/plex/plexgmsh.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
1516 | 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); | |||
1517 | } |