Bug Summary

File:dm/field/impls/ds/dmfieldds.c
Warning:line 199, column 37
The right operand of '-' is a garbage value due to array index out of bounds

Annotated Source Code

[?] Use j/k keys for keyboard navigation

/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c

1#include <petsc/private/dmfieldimpl.h> /*I "petscdmfield.h" I*/
2#include <petsc/private/petscfeimpl.h> /*I "petscdmfield.h" I*/
3#include <petscfe.h>
4#include <petscdmplex.h>
5#include <petscds.h>
6
7typedef struct _n_DMField_DS
8{
9 PetscInt fieldNum;
10 Vec vec;
11 PetscInt height;
12 PetscObject *disc;
13 PetscBool multifieldVec;
14}
15DMField_DS;
16
17static PetscErrorCode DMFieldDestroy_DS(DMField field)
18{
19 DMField_DS *dsfield;
20 PetscInt i;
21 PetscErrorCode ierr;
22
23 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
; petscstack->line[petscstack->currentsize] = 23; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
24 dsfield = (DMField_DS *) field->data;
25 ierr = VecDestroy(&dsfield->vec);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),25,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
26 for (i = 0; i < dsfield->height; i++) {
27 ierr = PetscObjectDereference(dsfield->disc[i]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),27,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
28 }
29 ierr = PetscFree(dsfield->disc)((*PetscTrFree)((void*)(dsfield->disc),29,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
) || ((dsfield->disc) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),29,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
30 ierr = PetscFree(dsfield)((*PetscTrFree)((void*)(dsfield),30,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
) || ((dsfield) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),30,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
31 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)
;
32}
33
34static PetscErrorCode DMFieldView_DS(DMField field,PetscViewer viewer)
35{
36 DMField_DS *dsfield = (DMField_DS *) field->data;
37 PetscBool iascii;
38 PetscObject disc;
39 PetscErrorCode ierr;
40
41 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
; petscstack->line[petscstack->currentsize] = 41; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
42 ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII"ascii",&iascii);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),42,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
43 disc = dsfield->disc[0];
44 if (iascii) {
45 PetscViewerASCIIPrintf(viewer, "PetscDS field %D\n",dsfield->fieldNum);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),45,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
46 ierr = PetscViewerASCIIPushTab(viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),46,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
47 ierr = PetscObjectView(disc,viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),47,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
48 ierr = PetscViewerASCIIPopTab(viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),48,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
49 }
50 ierr = PetscViewerASCIIPushTab(viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),50,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
51 if (dsfield->multifieldVec) {
52 SETERRQ(PetscObjectComm((PetscObject)field),PETSC_ERR_SUP,"View of subfield not implemented yet")return PetscError(PetscObjectComm((PetscObject)field),52,__func__
,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,56,PETSC_ERROR_INITIAL,"View of subfield not implemented yet"
)
;
53 } else {
54 ierr = VecView(dsfield->vec,viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),54,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
55 }
56 ierr = PetscViewerASCIIPopTab(viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),56,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
57 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)
;
58}
59
60static PetscErrorCode DMFieldDSGetHeightDisc(DMField field, PetscInt height, PetscObject *disc)
61{
62 DMField_DS *dsfield = (DMField_DS *) field->data;
63 PetscErrorCode ierr;
64
65 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
; petscstack->line[petscstack->currentsize] = 65; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
66 if (!dsfield->disc[height]) {
67 PetscClassId id;
68
69 ierr = PetscObjectGetClassId(dsfield->disc[0],&id);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),69,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
70 if (id == PETSCFE_CLASSID) {
71 PetscFE fe = (PetscFE) dsfield->disc[0];
72
73 ierr = PetscFECreateHeightTrace(fe,height,(PetscFE *)&dsfield->disc[height]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),73,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
74 }
75 }
76 *disc = dsfield->disc[height];
77 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)
;
78}
79
80#define DMFieldDSdot(y,A,b,m,n,c,cast)do { PetscInt _i, _j, _k; for (_i = 0; _i < (m); _i++) { for
(_k = 0; _k < (c); _k++) { (y)[_i * (c) + _k] = 0.; } for
(_j = 0; _j < (n); _j++) { for (_k = 0; _k < (c); _k++
) { (y)[_i * (c) + _k] += (A)[(_i * (n) + _j) * (c) + _k] * cast
((b)[_j]); } } } } while (0)
\
81 do { \
82 PetscInt _i, _j, _k; \
83 for (_i = 0; _i < (m); _i++) { \
84 for (_k = 0; _k < (c); _k++) { \
85 (y)[_i * (c) + _k] = 0.; \
86 } \
87 for (_j = 0; _j < (n); _j++) { \
88 for (_k = 0; _k < (c); _k++) { \
89 (y)[_i * (c) + _k] += (A)[(_i * (n) + _j) * (c) + _k] * cast((b)[_j]); \
90 } \
91 } \
92 } \
93 } while (0)
94
95static PetscErrorCode DMFieldEvaluateFE_DS(DMField field, IS pointIS, PetscQuadrature quad, PetscDataType type, void *B, void *D, void *H)
96{
97 DMField_DS *dsfield = (DMField_DS *) field->data;
98 DM dm;
99 PetscObject disc;
100 PetscClassId classid;
101 PetscInt nq, nc, dim, meshDim, numCells;
102 PetscSection section;
103 const PetscReal *qpoints;
104 PetscBool isStride;
105 const PetscInt *points = NULL((void*)0);
106 PetscInt sfirst = -1, stride = -1;
107 PetscErrorCode ierr;
108
109 PetscFunctionBeginHotdo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
; petscstack->line[petscstack->currentsize] = 109; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0)
;
110 dm = field->dm;
111 nc = field->numComponents;
112 ierr = PetscQuadratureGetData(quad,&dim,NULL((void*)0),&nq,&qpoints,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),112,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
113 ierr = DMFieldDSGetHeightDisc(field,dsfield->height - 1 - dim,&disc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),113,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
114 ierr = DMGetDimension(dm,&meshDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),114,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
115 ierr = DMGetLocalSection(dm,&section);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),115,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
116 ierr = PetscSectionGetField(section,dsfield->fieldNum,&section);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),116,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
117 ierr = PetscObjectGetClassId(disc,&classid);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),117,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
118 /* TODO: batch */
119 ierr = PetscObjectTypeCompare((PetscObject)pointIS,ISSTRIDE"stride",&isStride);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),119,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
120 ierr = ISGetLocalSize(pointIS,&numCells);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),120,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
121 if (isStride) {
122 ierr = ISStrideGetInfo(pointIS,&sfirst,&stride);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),122,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
123 } else {
124 ierr = ISGetIndices(pointIS,&points);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),124,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
125 }
126 if (classid == PETSCFE_CLASSID) {
127 PetscFE fe = (PetscFE) disc;
128 PetscInt feDim, i;
129 PetscReal *fB = NULL((void*)0), *fD = NULL((void*)0), *fH = NULL((void*)0);
130
131 ierr = PetscFEGetDimension(fe,&feDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),131,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
132 ierr = PetscFEGetTabulation(fe,nq,qpoints,B ? &fB : NULL((void*)0),D ? &fD : NULL((void*)0),H ? &fH : NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),132,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
133 for (i = 0; i < numCells; i++) {
134 PetscInt c = isStride ? (sfirst + i * stride) : points[i];
135 PetscInt closureSize;
136 PetscScalar *elem = NULL((void*)0);
137
138 ierr = DMPlexVecGetClosure(dm,section,dsfield->vec,c,&closureSize,&elem);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),138,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
139 if (B) {
140 if (type == PETSC_SCALARPETSC_DOUBLE) {
141 PetscScalar *cB = &((PetscScalar *) B)[nc * nq * i];
142
143 DMFieldDSdot(cB,fB,elem,nq,feDim,nc,(PetscScalar))do { PetscInt _i, _j, _k; for (_i = 0; _i < (nq); _i++) { for
(_k = 0; _k < (nc); _k++) { (cB)[_i * (nc) + _k] = 0.; } for
(_j = 0; _j < (feDim); _j++) { for (_k = 0; _k < (nc);
_k++) { (cB)[_i * (nc) + _k] += (fB)[(_i * (feDim) + _j) * (
nc) + _k] * (PetscScalar)((elem)[_j]); } } } } while (0)
;
144 } else {
145 PetscReal *cB = &((PetscReal *) B)[nc * nq * i];
146
147 DMFieldDSdot(cB,fB,elem,nq,feDim,nc,PetscRealPart)do { PetscInt _i, _j, _k; for (_i = 0; _i < (nq); _i++) { for
(_k = 0; _k < (nc); _k++) { (cB)[_i * (nc) + _k] = 0.; } for
(_j = 0; _j < (feDim); _j++) { for (_k = 0; _k < (nc);
_k++) { (cB)[_i * (nc) + _k] += (fB)[(_i * (feDim) + _j) * (
nc) + _k] * ((elem)[_j]); } } } } while (0)
;
148 }
149 }
150 if (D) {
151 if (type == PETSC_SCALARPETSC_DOUBLE) {
152 PetscScalar *cD = &((PetscScalar *) D)[nc * nq * dim * i];
153
154 DMFieldDSdot(cD,fD,elem,nq,feDim,(nc * dim),(PetscScalar))do { PetscInt _i, _j, _k; for (_i = 0; _i < (nq); _i++) { for
(_k = 0; _k < ((nc * dim)); _k++) { (cD)[_i * ((nc * dim)
) + _k] = 0.; } for (_j = 0; _j < (feDim); _j++) { for (_k
= 0; _k < ((nc * dim)); _k++) { (cD)[_i * ((nc * dim)) + _k
] += (fD)[(_i * (feDim) + _j) * ((nc * dim)) + _k] * (PetscScalar
)((elem)[_j]); } } } } while (0)
;
155 } else {
156 PetscReal *cD = &((PetscReal *) D)[nc * nq * dim * i];
157
158 DMFieldDSdot(cD,fD,elem,nq,feDim,(nc * dim),PetscRealPart)do { PetscInt _i, _j, _k; for (_i = 0; _i < (nq); _i++) { for
(_k = 0; _k < ((nc * dim)); _k++) { (cD)[_i * ((nc * dim)
) + _k] = 0.; } for (_j = 0; _j < (feDim); _j++) { for (_k
= 0; _k < ((nc * dim)); _k++) { (cD)[_i * ((nc * dim)) + _k
] += (fD)[(_i * (feDim) + _j) * ((nc * dim)) + _k] * ((elem)[
_j]); } } } } while (0)
;
159 }
160 }
161 if (H) {
162 if (type == PETSC_SCALARPETSC_DOUBLE) {
163 PetscScalar *cH = &((PetscScalar *) H)[nc * nq * dim * dim * i];
164
165 DMFieldDSdot(cH,fH,elem,nq,feDim,(nc * dim * dim),(PetscScalar))do { PetscInt _i, _j, _k; for (_i = 0; _i < (nq); _i++) { for
(_k = 0; _k < ((nc * dim * dim)); _k++) { (cH)[_i * ((nc *
dim * dim)) + _k] = 0.; } for (_j = 0; _j < (feDim); _j++
) { for (_k = 0; _k < ((nc * dim * dim)); _k++) { (cH)[_i *
((nc * dim * dim)) + _k] += (fH)[(_i * (feDim) + _j) * ((nc *
dim * dim)) + _k] * (PetscScalar)((elem)[_j]); } } } } while
(0)
;
166 } else {
167 PetscReal *cH = &((PetscReal *) H)[nc * nq * dim * dim * i];
168
169 DMFieldDSdot(cH,fH,elem,nq,feDim,(nc * dim * dim),PetscRealPart)do { PetscInt _i, _j, _k; for (_i = 0; _i < (nq); _i++) { for
(_k = 0; _k < ((nc * dim * dim)); _k++) { (cH)[_i * ((nc *
dim * dim)) + _k] = 0.; } for (_j = 0; _j < (feDim); _j++
) { for (_k = 0; _k < ((nc * dim * dim)); _k++) { (cH)[_i *
((nc * dim * dim)) + _k] += (fH)[(_i * (feDim) + _j) * ((nc *
dim * dim)) + _k] * ((elem)[_j]); } } } } while (0)
;
170 }
171 }
172 ierr = DMPlexVecRestoreClosure(dm,section,dsfield->vec,c,&closureSize,&elem);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),172,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
173 }
174 ierr = PetscFERestoreTabulation(fe,nq,qpoints,B ? &fB : NULL((void*)0),D ? &fD : NULL((void*)0),H ? &fH : NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),174,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
175 } else {SETERRQ(PetscObjectComm((PetscObject)field),PETSC_ERR_SUP,"Not implemented")return PetscError(PetscObjectComm((PetscObject)field),175,__func__
,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,56,PETSC_ERROR_INITIAL,"Not implemented")
;}
176 if (!isStride) {
177 ierr = ISRestoreIndices(pointIS,&points);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),177,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
178 }
179 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)
;
180}
181
182static PetscErrorCode DMFieldEvaluate_DS(DMField field, Vec points, PetscDataType datatype, void *B, void *D, void *H)
183{
184 DMField_DS *dsfield = (DMField_DS *) field->data;
185 PetscSF cellSF = NULL((void*)0);
186 const PetscSFNode *cells;
187 PetscInt c, nFound, numCells, feDim, nc;
188 const PetscInt *cellDegrees;
189 const PetscScalar *pointsArray;
190 PetscScalar *cellPoints;
191 PetscInt gatherSize, gatherMax;
192 PetscInt dim, dimR, offset;
193 MPI_Datatype pointType;
194 PetscObject cellDisc;
195 PetscFE cellFE;
196 PetscClassId discID;
197 PetscReal *coordsReal, *coordsRef;
198 PetscSection section;
199 PetscScalar *cellBs = NULL((void*)0), *cellDs = NULL((void*)0), *cellHs = NULL((void*)0);
200 PetscReal *cellBr = NULL((void*)0), *cellDr = NULL((void*)0), *cellHr = NULL((void*)0);
201 PetscReal *v, *J, *invJ, *detJ;
202 PetscErrorCode ierr;
203
204 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
; petscstack->line[petscstack->currentsize] = 204; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
205 nc = field->numComponents;
206 ierr = DMGetLocalSection(field->dm,&section);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),206,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
207 ierr = DMFieldDSGetHeightDisc(field,0,&cellDisc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),207,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
208 ierr = PetscObjectGetClassId(cellDisc, &discID);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),208,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
209 if (discID != PETSCFE_CLASSID) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB, "Discretization type not supported\n")return PetscError(((MPI_Comm)0x44000001),209,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,77,PETSC_ERROR_INITIAL,"Discretization type not supported\n"
)
;
210 cellFE = (PetscFE) cellDisc;
211 ierr = PetscFEGetDimension(cellFE,&feDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),211,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
212 ierr = DMGetCoordinateDim(field->dm, &dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),212,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
213 ierr = DMGetDimension(field->dm, &dimR);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),213,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
214 ierr = DMLocatePoints(field->dm, points, DM_POINTLOCATION_NONE, &cellSF);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),214,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
215 ierr = PetscSFGetGraph(cellSF, &numCells, &nFound, NULL((void*)0), &cells);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),215,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
216 for (c = 0; c < nFound; c++) {
217 if (cells[c].index < 0) SETERRQ1(PetscObjectComm((PetscObject)points),PETSC_ERR_ARG_WRONG, "Point %D could not be located\n", c)return PetscError(PetscObjectComm((PetscObject)points),217,__func__
,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,62,PETSC_ERROR_INITIAL,"Point %D could not be located\n",c)
;
218 }
219 ierr = PetscSFComputeDegreeBegin(cellSF,&cellDegrees);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),219,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
220 ierr = PetscSFComputeDegreeEnd(cellSF,&cellDegrees);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),220,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
221 for (c = 0, gatherSize = 0, gatherMax = 0; c < numCells; c++) {
222 gatherMax = PetscMax(gatherMax,cellDegrees[c])(((gatherMax)<(cellDegrees[c])) ? (cellDegrees[c]) : (gatherMax
))
;
223 gatherSize += cellDegrees[c];
224 }
225 ierr = PetscMalloc3(gatherSize*dim,&cellPoints,gatherMax*dim,&coordsReal,gatherMax*dimR,&coordsRef)PetscMallocA(3,PETSC_FALSE,225,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(gatherSize*dim)*sizeof(**(&cellPoints)),(&cellPoints
),(size_t)(gatherMax*dim)*sizeof(**(&coordsReal)),(&coordsReal
),(size_t)(gatherMax*dimR)*sizeof(**(&coordsRef)),(&coordsRef
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),225,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
226 ierr = PetscMalloc4(gatherMax*dimR,&v,gatherMax*dimR*dimR,&J,gatherMax*dimR*dimR,&invJ,gatherMax,&detJ)PetscMallocA(4,PETSC_FALSE,226,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(gatherMax*dimR)*sizeof(**(&v)),(&v),(size_t
)(gatherMax*dimR*dimR)*sizeof(**(&J)),(&J),(size_t)(gatherMax
*dimR*dimR)*sizeof(**(&invJ)),(&invJ),(size_t)(gatherMax
)*sizeof(**(&detJ)),(&detJ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),226,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
227 if (datatype == PETSC_SCALARPETSC_DOUBLE) {
228 ierr = PetscMalloc3(B ? nc * gatherSize : 0, &cellBs, D ? nc * dim * gatherSize : 0, &cellDs, H ? nc * dim * dim * gatherSize : 0, &cellHs)PetscMallocA(3,PETSC_FALSE,228,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(B ? nc * gatherSize : 0)*sizeof(**(&cellBs)),(&
cellBs),(size_t)(D ? nc * dim * gatherSize : 0)*sizeof(**(&
cellDs)),(&cellDs),(size_t)(H ? nc * dim * dim * gatherSize
: 0)*sizeof(**(&cellHs)),(&cellHs))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),228,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
229 } else {
230 ierr = PetscMalloc3(B ? nc * gatherSize : 0, &cellBr, D ? nc * dim * gatherSize : 0, &cellDr, H ? nc * dim * dim * gatherSize : 0, &cellHr)PetscMallocA(3,PETSC_FALSE,230,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(B ? nc * gatherSize : 0)*sizeof(**(&cellBr)),(&
cellBr),(size_t)(D ? nc * dim * gatherSize : 0)*sizeof(**(&
cellDr)),(&cellDr),(size_t)(H ? nc * dim * dim * gatherSize
: 0)*sizeof(**(&cellHr)),(&cellHr))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),230,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
231 }
232
233 ierr = MPI_Type_contiguous(dim,MPIU_SCALAR((MPI_Datatype)0x4c00080b),&pointType);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),233,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
234 ierr = MPI_Type_commit(&pointType);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),234,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
235 ierr = VecGetArrayRead(points,&pointsArray);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),235,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
236 ierr = PetscSFGatherBegin(cellSF, pointType, pointsArray, cellPoints);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),236,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
237 ierr = PetscSFGatherEnd(cellSF, pointType, pointsArray, cellPoints);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),237,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
238 ierr = VecRestoreArrayRead(points,&pointsArray);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),238,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
239 for (c = 0, offset = 0; c < numCells; c++) {
240 PetscInt nq = cellDegrees[c], p;
241
242 if (nq) {
243 PetscReal *fB, *fD, *fH;
244 PetscInt closureSize;
245 PetscScalar *elem = NULL((void*)0);
246 PetscReal *quadPoints;
247 PetscQuadrature quad;
248 PetscInt d, e, f, g;
249
250 for (p = 0; p < dim * nq; p++) coordsReal[p] = PetscRealPart(cellPoints[dim * offset + p])(cellPoints[dim * offset + p]);
251 ierr = DMPlexCoordinatesToReference(field->dm, c, nq, coordsReal, coordsRef);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),251,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
252 ierr = PetscFEGetTabulation(cellFE,nq,coordsRef,B ? &fB : NULL((void*)0),D ? &fD : NULL((void*)0),H ? &fH : NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),252,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
253 ierr = PetscQuadratureCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), &quad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),253,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
254 ierr = PetscMalloc1(dimR * nq, &quadPoints)PetscMallocA(1,PETSC_FALSE,254,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(dimR * nq)*sizeof(**(&quadPoints)),(&quadPoints
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),254,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
255 for (p = 0; p < dimR * nq; p++) quadPoints[p] = coordsRef[p];
256 ierr = PetscQuadratureSetData(quad, dimR, 0, nq, quadPoints, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),256,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
257 ierr = DMPlexComputeCellGeometryFEM(field->dm, c, quad, v, J, invJ, detJ);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),257,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
258 ierr = PetscQuadratureDestroy(&quad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),258,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
259 ierr = DMPlexVecGetClosure(field->dm,section,dsfield->vec,c,&closureSize,&elem);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),259,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
260 if (B) {
261 if (datatype == PETSC_SCALARPETSC_DOUBLE) {
262 PetscScalar *cB = &cellBs[nc * offset];
263
264 DMFieldDSdot(cB,fB,elem,nq,feDim,nc,(PetscScalar))do { PetscInt _i, _j, _k; for (_i = 0; _i < (nq); _i++) { for
(_k = 0; _k < (nc); _k++) { (cB)[_i * (nc) + _k] = 0.; } for
(_j = 0; _j < (feDim); _j++) { for (_k = 0; _k < (nc);
_k++) { (cB)[_i * (nc) + _k] += (fB)[(_i * (feDim) + _j) * (
nc) + _k] * (PetscScalar)((elem)[_j]); } } } } while (0)
;
265 } else {
266 PetscReal *cB = &cellBr[nc * offset];
267
268 DMFieldDSdot(cB,fB,elem,nq,feDim,nc,PetscRealPart)do { PetscInt _i, _j, _k; for (_i = 0; _i < (nq); _i++) { for
(_k = 0; _k < (nc); _k++) { (cB)[_i * (nc) + _k] = 0.; } for
(_j = 0; _j < (feDim); _j++) { for (_k = 0; _k < (nc);
_k++) { (cB)[_i * (nc) + _k] += (fB)[(_i * (feDim) + _j) * (
nc) + _k] * ((elem)[_j]); } } } } while (0)
;
269 }
270 }
271 if (D) {
272 if (datatype == PETSC_SCALARPETSC_DOUBLE) {
273 PetscScalar *cD = &cellDs[nc * dim * offset];
274
275 DMFieldDSdot(cD,fD,elem,nq,feDim,(nc * dim),(PetscScalar))do { PetscInt _i, _j, _k; for (_i = 0; _i < (nq); _i++) { for
(_k = 0; _k < ((nc * dim)); _k++) { (cD)[_i * ((nc * dim)
) + _k] = 0.; } for (_j = 0; _j < (feDim); _j++) { for (_k
= 0; _k < ((nc * dim)); _k++) { (cD)[_i * ((nc * dim)) + _k
] += (fD)[(_i * (feDim) + _j) * ((nc * dim)) + _k] * (PetscScalar
)((elem)[_j]); } } } } while (0)
;
276 for (p = 0; p < nq; p++) {
277 for (g = 0; g < nc; g++) {
278 PetscScalar vs[3];
279
280 for (d = 0; d < dimR; d++) {
281 vs[d] = 0.;
282 for (e = 0; e < dimR; e++) {
283 vs[d] += invJ[dimR * dimR * p + e * dimR + d] * cD[(nc * p + g) * dimR + e];
284 }
285 }
286 for (d = 0; d < dimR; d++) {
287 cD[(nc * p + g) * dimR + d] = vs[d];
288 }
289 }
290 }
291 } else {
292 PetscReal *cD = &cellDr[nc * dim * offset];
293
294 DMFieldDSdot(cD,fD,elem,nq,feDim,(nc * dim),PetscRealPart)do { PetscInt _i, _j, _k; for (_i = 0; _i < (nq); _i++) { for
(_k = 0; _k < ((nc * dim)); _k++) { (cD)[_i * ((nc * dim)
) + _k] = 0.; } for (_j = 0; _j < (feDim); _j++) { for (_k
= 0; _k < ((nc * dim)); _k++) { (cD)[_i * ((nc * dim)) + _k
] += (fD)[(_i * (feDim) + _j) * ((nc * dim)) + _k] * ((elem)[
_j]); } } } } while (0)
;
295 for (p = 0; p < nq; p++) {
296 for (g = 0; g < nc; g++) {
297 for (d = 0; d < dimR; d++) {
298 v[d] = 0.;
299 for (e = 0; e < dimR; e++) {
300 v[d] += invJ[dimR * dimR * p + e * dimR + d] * cD[(nc * p + g) * dimR + e];
301 }
302 }
303 for (d = 0; d < dimR; d++) {
304 cD[(nc * p + g) * dimR + d] = v[d];
305 }
306 }
307 }
308 }
309 }
310 if (H) {
311 if (datatype == PETSC_SCALARPETSC_DOUBLE) {
312 PetscScalar *cH = &cellHs[nc * dim * dim * offset];
313
314 DMFieldDSdot(cH,fH,elem,nq,feDim,(nc * dim * dim),(PetscScalar))do { PetscInt _i, _j, _k; for (_i = 0; _i < (nq); _i++) { for
(_k = 0; _k < ((nc * dim * dim)); _k++) { (cH)[_i * ((nc *
dim * dim)) + _k] = 0.; } for (_j = 0; _j < (feDim); _j++
) { for (_k = 0; _k < ((nc * dim * dim)); _k++) { (cH)[_i *
((nc * dim * dim)) + _k] += (fH)[(_i * (feDim) + _j) * ((nc *
dim * dim)) + _k] * (PetscScalar)((elem)[_j]); } } } } while
(0)
;
315 for (p = 0; p < nq; p++) {
316 for (g = 0; g < nc * dimR; g++) {
317 PetscScalar vs[3];
318
319 for (d = 0; d < dimR; d++) {
320 vs[d] = 0.;
321 for (e = 0; e < dimR; e++) {
322 vs[d] += invJ[dimR * dimR * p + e * dimR + d] * cH[(nc * dimR * p + g) * dimR + e];
323 }
324 }
325 for (d = 0; d < dimR; d++) {
326 cH[(nc * dimR * p + g) * dimR + d] = vs[d];
327 }
328 }
329 for (g = 0; g < nc; g++) {
330 for (f = 0; f < dimR; f++) {
331 PetscScalar vs[3];
332
333 for (d = 0; d < dimR; d++) {
334 vs[d] = 0.;
335 for (e = 0; e < dimR; e++) {
336 vs[d] += invJ[dimR * dimR * p + e * dimR + d] * cH[((nc * p + g) * dimR + e) * dimR + f];
337 }
338 }
339 for (d = 0; d < dimR; d++) {
340 cH[((nc * p + g) * dimR + d) * dimR + f] = vs[d];
341 }
342 }
343 }
344 }
345 } else {
346 PetscReal *cH = &cellHr[nc * dim * dim * offset];
347
348 DMFieldDSdot(cH,fH,elem,nq,feDim,(nc * dim * dim),PetscRealPart)do { PetscInt _i, _j, _k; for (_i = 0; _i < (nq); _i++) { for
(_k = 0; _k < ((nc * dim * dim)); _k++) { (cH)[_i * ((nc *
dim * dim)) + _k] = 0.; } for (_j = 0; _j < (feDim); _j++
) { for (_k = 0; _k < ((nc * dim * dim)); _k++) { (cH)[_i *
((nc * dim * dim)) + _k] += (fH)[(_i * (feDim) + _j) * ((nc *
dim * dim)) + _k] * ((elem)[_j]); } } } } while (0)
;
349 for (p = 0; p < nq; p++) {
350 for (g = 0; g < nc * dimR; g++) {
351 for (d = 0; d < dimR; d++) {
352 v[d] = 0.;
353 for (e = 0; e < dimR; e++) {
354 v[d] += invJ[dimR * dimR * p + e * dimR + d] * cH[(nc * dimR * p + g) * dimR + e];
355 }
356 }
357 for (d = 0; d < dimR; d++) {
358 cH[(nc * dimR * p + g) * dimR + d] = v[d];
359 }
360 }
361 for (g = 0; g < nc; g++) {
362 for (f = 0; f < dimR; f++) {
363 for (d = 0; d < dimR; d++) {
364 v[d] = 0.;
365 for (e = 0; e < dimR; e++) {
366 v[d] += invJ[dimR * dimR * p + e * dimR + d] * cH[((nc * p + g) * dimR + e) * dimR + f];
367 }
368 }
369 for (d = 0; d < dimR; d++) {
370 cH[((nc * p + g) * dimR + d) * dimR + f] = v[d];
371 }
372 }
373 }
374 }
375 }
376 }
377 ierr = DMPlexVecRestoreClosure(field->dm,section,dsfield->vec,c,&closureSize,&elem);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),377,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
378 ierr = PetscFERestoreTabulation(cellFE,nq,coordsRef,B ? &fB : NULL((void*)0),D ? &fD : NULL((void*)0),H ? &fH : NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),378,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
379 }
380 offset += nq;
381 }
382 {
383 MPI_Datatype origtype;
384
385 if (datatype == PETSC_SCALARPETSC_DOUBLE) {
386 origtype = MPIU_SCALAR((MPI_Datatype)0x4c00080b);
387 } else {
388 origtype = MPIU_REAL((MPI_Datatype)0x4c00080b);
389 }
390 if (B) {
391 MPI_Datatype Btype;
392
393 ierr = MPI_Type_contiguous(nc, origtype, &Btype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),393,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
394 ierr = MPI_Type_commit(&Btype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),394,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
395 ierr = PetscSFScatterBegin(cellSF,Btype,(datatype == PETSC_SCALARPETSC_DOUBLE) ? (void *) cellBs : (void *) cellBr, B);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),395,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
396 ierr = PetscSFScatterEnd(cellSF,Btype,(datatype == PETSC_SCALARPETSC_DOUBLE) ? (void *) cellBs : (void *) cellBr, B);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),396,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
397 ierr = MPI_Type_free(&Btype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),397,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
398 }
399 if (D) {
400 MPI_Datatype Dtype;
401
402 ierr = MPI_Type_contiguous(nc * dim, origtype, &Dtype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),402,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
403 ierr = MPI_Type_commit(&Dtype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),403,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
404 ierr = PetscSFScatterBegin(cellSF,Dtype,(datatype == PETSC_SCALARPETSC_DOUBLE) ? (void *) cellDs : (void *) cellDr, D);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),404,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
405 ierr = PetscSFScatterEnd(cellSF,Dtype,(datatype == PETSC_SCALARPETSC_DOUBLE) ? (void *) cellDs : (void *) cellDr, D);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),405,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
406 ierr = MPI_Type_free(&Dtype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),406,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
407 }
408 if (H) {
409 MPI_Datatype Htype;
410
411 ierr = MPI_Type_contiguous(nc * dim * dim, origtype, &Htype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),411,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
412 ierr = MPI_Type_commit(&Htype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),412,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
413 ierr = PetscSFScatterBegin(cellSF,Htype,(datatype == PETSC_SCALARPETSC_DOUBLE) ? (void *) cellHs : (void *) cellHr, H);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),413,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
414 ierr = PetscSFScatterEnd(cellSF,Htype,(datatype == PETSC_SCALARPETSC_DOUBLE) ? (void *) cellHs : (void *) cellHr, H);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),414,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
415 ierr = MPI_Type_free(&Htype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),415,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
416 }
417 }
418 ierr = PetscFree4(v,J,invJ,detJ)PetscFreeA(4,418,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,&(v),&(J),&(invJ),&(detJ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),418,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
419 ierr = PetscFree3(cellBr, cellDr, cellHr)PetscFreeA(3,419,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,&(cellBr),&(cellDr),&(cellHr))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),419,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
420 ierr = PetscFree3(cellBs, cellDs, cellHs)PetscFreeA(3,420,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,&(cellBs),&(cellDs),&(cellHs))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),420,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
421 ierr = PetscFree3(cellPoints,coordsReal,coordsRef)PetscFreeA(3,421,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,&(cellPoints),&(coordsReal),&(coordsRef))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),421,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
422 ierr = MPI_Type_free(&pointType);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),422,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
423 ierr = PetscSFDestroy(&cellSF);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),423,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
424 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)
;
425}
426
427static PetscErrorCode DMFieldEvaluateFV_DS(DMField field, IS pointIS, PetscDataType type, void *B, void *D, void *H)
428{
429 DMField_DS *dsfield = (DMField_DS *) field->data;
430 PetscInt h, imin;
431 PetscInt dim;
432 PetscClassId id;
433 PetscQuadrature quad = NULL((void*)0);
434 PetscInt maxDegree;
435 PetscFEGeom *geom;
436 PetscInt Nq, Nc, dimC, qNc, N;
437 PetscInt numPoints;
438 void *qB = NULL((void*)0), *qD = NULL((void*)0), *qH = NULL((void*)0);
439 const PetscReal *weights;
440 MPI_Datatype mpitype = type == PETSC_SCALARPETSC_DOUBLE ? MPIU_SCALAR((MPI_Datatype)0x4c00080b) : MPIU_REAL((MPI_Datatype)0x4c00080b);
441 PetscObject disc;
442 DMField coordField;
443 PetscErrorCode ierr;
444
445 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
; petscstack->line[petscstack->currentsize] = 445; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
446 Nc = field->numComponents;
447 ierr = DMGetCoordinateDim(field->dm, &dimC);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),447,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
448 ierr = DMGetDimension(field->dm, &dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),448,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
449 ierr = ISGetLocalSize(pointIS, &numPoints);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),449,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
450 ierr = ISGetMinMax(pointIS,&imin,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),450,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
451 for (h = 0; h < dsfield->height; h++) {
452 PetscInt hEnd;
453
454 ierr = DMPlexGetHeightStratum(field->dm,h,NULL((void*)0),&hEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),454,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
455 if (imin < hEnd) break;
456 }
457 dim -= h;
458 ierr = DMFieldDSGetHeightDisc(field,h,&disc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),458,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
459 ierr = PetscObjectGetClassId(disc,&id);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),459,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
460 if (id != PETSCFE_CLASSID) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Discretization not supported\n")return PetscError(((MPI_Comm)0x44000001),460,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,77,PETSC_ERROR_INITIAL,"Discretization not supported\n")
;
461 ierr = DMGetCoordinateField(field->dm, &coordField);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),461,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
462 ierr = DMFieldGetDegree(coordField, pointIS, NULL((void*)0), &maxDegree);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),462,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
463 if (maxDegree <= 1) {
464 ierr = DMFieldCreateDefaultQuadrature(coordField, pointIS, &quad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),464,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
465 }
466 if (!quad) {ierr = DMFieldCreateDefaultQuadrature(field, pointIS, &quad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),466,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
467 if (!quad) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Could not determine quadrature for cell averages\n")return PetscError(((MPI_Comm)0x44000001),467,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,77,PETSC_ERROR_INITIAL,"Could not determine quadrature for cell averages\n"
)
;
468 ierr = DMFieldCreateFEGeom(coordField,pointIS,quad,PETSC_FALSE,&geom);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),468,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
469 ierr = PetscQuadratureGetData(quad, NULL((void*)0), &qNc, &Nq, NULL((void*)0), &weights);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),469,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
470 if (qNc != 1) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Expected scalar quadrature components\n")return PetscError(((MPI_Comm)0x44000001),470,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,77,PETSC_ERROR_INITIAL,"Expected scalar quadrature components\n"
)
;
471 N = numPoints * Nq * Nc;
472 if (B) ierr = DMGetWorkArray(field->dm, N, mpitype, &qB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),472,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
473 if (D) ierr = DMGetWorkArray(field->dm, N * dimC, mpitype, &qD);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),473,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
474 if (H) ierr = DMGetWorkArray(field->dm, N * dimC * dimC, mpitype, &qH);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),474,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
475 ierr = DMFieldEvaluateFE(field,pointIS,quad,type,qB,qD,qH);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),475,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
476 if (B) {
477 PetscInt i, j, k;
478
479 if (type == PETSC_SCALARPETSC_DOUBLE) {
480 PetscScalar * sB = (PetscScalar *) B;
481 PetscScalar * sqB = (PetscScalar *) qB;
482
483 for (i = 0; i < numPoints; i++) {
484 PetscReal vol = 0.;
485
486 for (j = 0; j < Nc; j++) {sB[i * Nc + j] = 0.;}
487 for (k = 0; k < Nq; k++) {
488 vol += geom->detJ[i * Nq + k] * weights[k];
489 for (j = 0; j < Nc; j++) {
490 sB[i * Nc + j] += geom->detJ[i * Nq + k] * weights[k] * sqB[ (i * Nq + k) * Nc + j];
491 }
492 }
493 for (k = 0; k < Nq * Nc; k++) sB[i * Nq * Nc + k] /= vol;
494 }
495 } else {
496 PetscReal * rB = (PetscReal *) B;
497 PetscReal * rqB = (PetscReal *) qB;
498
499 for (i = 0; i < numPoints; i++) {
500 PetscReal vol = 0.;
501
502 for (j = 0; j < Nc; j++) {rB[i * Nc + j] = 0.;}
503 for (k = 0; k < Nq; k++) {
504 vol += geom->detJ[i * Nq + k] * weights[k];
505 for (j = 0; j < Nc; j++) {
506 rB[i * Nc + j] += weights[k] * rqB[ (i * Nq + k) * Nc + j];
507 }
508 }
509 for (k = 0; k < Nc; k++) rB[i * Nc + k] /= vol;
510 }
511 }
512 }
513 if (D) {
514 PetscInt i, j, k, l, m;
515
516 if (type == PETSC_SCALARPETSC_DOUBLE) {
517 PetscScalar * sD = (PetscScalar *) D;
518 PetscScalar * sqD = (PetscScalar *) qD;
519
520 for (i = 0; i < numPoints; i++) {
521 PetscReal vol = 0.;
522
523 for (j = 0; j < Nc * dimC; j++) {sD[i * Nc * dimC + j] = 0.;}
524 for (k = 0; k < Nq; k++) {
525 vol += geom->detJ[i * Nq + k] * weights[k];
526 for (j = 0; j < Nc; j++) {
527 PetscScalar pD[3] = {0.,0.,0.};
528
529 for (l = 0; l < dimC; l++) {
530 for (m = 0; m < dim; m++) {
531 pD[l] += geom->invJ[((i * Nq + k) * dimC + m) * dimC + l] * sqD[((i * Nq + k) * Nc + j) * dim + m];
532 }
533 }
534 for (l = 0; l < dimC; l++) {
535 sD[(i * Nc + j) * dimC + l] += geom->detJ[i * Nq + k] * weights[k] * pD[l];
536 }
537 }
538 }
539 for (k = 0; k < Nc * dimC; k++) sD[i * Nc * dimC + k] /= vol;
540 }
541 } else {
542 PetscReal * rD = (PetscReal *) D;
543 PetscReal * rqD = (PetscReal *) qD;
544
545 for (i = 0; i < numPoints; i++) {
546 PetscReal vol = 0.;
547
548 for (j = 0; j < Nc * dimC; j++) {rD[i * Nc * dimC + j] = 0.;}
549 for (k = 0; k < Nq; k++) {
550 vol += geom->detJ[i * Nq + k] * weights[k];
551 for (j = 0; j < Nc; j++) {
552 PetscReal pD[3] = {0.,0.,0.};
553
554 for (l = 0; l < dimC; l++) {
555 for (m = 0; m < dim; m++) {
556 pD[l] += geom->invJ[((i * Nq + k) * dimC + m) * dimC + l] * rqD[((i * Nq + k) * Nc + j) * dim + m];
557 }
558 }
559 for (l = 0; l < dimC; l++) {
560 rD[(i * Nc + j) * dimC + l] += geom->detJ[i * Nq + k] * weights[k] * pD[l];
561 }
562 }
563 }
564 for (k = 0; k < Nc * dimC; k++) rD[i * Nc * dimC + k] /= vol;
565 }
566 }
567 }
568 if (H) {
569 PetscInt i, j, k, l, m, q, r;
570
571 if (type == PETSC_SCALARPETSC_DOUBLE) {
572 PetscScalar * sH = (PetscScalar *) H;
573 PetscScalar * sqH = (PetscScalar *) qH;
574
575 for (i = 0; i < numPoints; i++) {
576 PetscReal vol = 0.;
577
578 for (j = 0; j < Nc * dimC * dimC; j++) {sH[i * Nc * dimC * dimC + j] = 0.;}
579 for (k = 0; k < Nq; k++) {
580 const PetscReal *invJ = &geom->invJ[(i * Nq + k) * dimC * dimC];
581
582 vol += geom->detJ[i * Nq + k] * weights[k];
583 for (j = 0; j < Nc; j++) {
584 PetscScalar pH[3][3] = {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}};
585 const PetscScalar *spH = &sqH[((i * Nq + k) * Nc + j) * dimC * dimC];
586
587 for (l = 0; l < dimC; l++) {
588 for (m = 0; m < dimC; m++) {
589 for (q = 0; q < dim; q++) {
590 for (r = 0; r < dim; r++) {
591 pH[l][m] += invJ[q * dimC + l] * invJ[r * dimC + m] * spH[q * dim + r];
592 }
593 }
594 }
595 }
596 for (l = 0; l < dimC; l++) {
597 for (m = 0; m < dimC; m++) {
598 sH[(i * Nc + j) * dimC * dimC + l * dimC + m] += geom->detJ[i * Nq + k] * weights[k] * pH[l][m];
599 }
600 }
601 }
602 }
603 for (k = 0; k < Nc * dimC * dimC; k++) sH[i * Nc * dimC * dimC + k] /= vol;
604 }
605 } else {
606 PetscReal * rH = (PetscReal *) H;
607 PetscReal * rqH = (PetscReal *) qH;
608
609 for (i = 0; i < numPoints; i++) {
610 PetscReal vol = 0.;
611
612 for (j = 0; j < Nc * dimC * dimC; j++) {rH[i * Nc * dimC * dimC + j] = 0.;}
613 for (k = 0; k < Nq; k++) {
614 const PetscReal *invJ = &geom->invJ[(i * Nq + k) * dimC * dimC];
615
616 vol += geom->detJ[i * Nq + k] * weights[k];
617 for (j = 0; j < Nc; j++) {
618 PetscReal pH[3][3] = {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}};
619 const PetscReal *rpH = &rqH[((i * Nq + k) * Nc + j) * dimC * dimC];
620
621 for (l = 0; l < dimC; l++) {
622 for (m = 0; m < dimC; m++) {
623 for (q = 0; q < dim; q++) {
624 for (r = 0; r < dim; r++) {
625 pH[l][m] += invJ[q * dimC + l] * invJ[r * dimC + m] * rpH[q * dim + r];
626 }
627 }
628 }
629 }
630 for (l = 0; l < dimC; l++) {
631 for (m = 0; m < dimC; m++) {
632 rH[(i * Nc + j) * dimC * dimC + l * dimC + m] += geom->detJ[i * Nq + k] * weights[k] * pH[l][m];
633 }
634 }
635 }
636 }
637 for (k = 0; k < Nc * dimC * dimC; k++) rH[i * Nc * dimC * dimC + k] /= vol;
638 }
639 }
640 }
641 if (B) ierr = DMRestoreWorkArray(field->dm, N, mpitype, &qB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),641,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
642 if (D) ierr = DMRestoreWorkArray(field->dm, N * dimC, mpitype, &qD);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),642,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
643 if (H) ierr = DMRestoreWorkArray(field->dm, N * dimC * dimC, mpitype, &qH);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),643,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
644 ierr = PetscFEGeomDestroy(&geom);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),644,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
645 ierr = PetscQuadratureDestroy(&quad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),645,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
646 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)
;
647}
648
649static PetscErrorCode DMFieldGetDegree_DS(DMField field, IS pointIS, PetscInt *minDegree, PetscInt *maxDegree)
650{
651 DMField_DS *dsfield;
652 PetscObject disc;
653 PetscInt h, imin, imax;
654 PetscClassId id;
655 PetscErrorCode ierr;
656
657 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
; petscstack->line[petscstack->currentsize] = 657; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
658 dsfield = (DMField_DS *) field->data;
659 ierr = ISGetMinMax(pointIS,&imin,&imax);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),659,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
660 if (imin >= imax) {
661 h = 0;
662 } else {
663 for (h = 0; h < dsfield->height; h++) {
664 PetscInt hEnd;
665
666 ierr = DMPlexGetHeightStratum(field->dm,h,NULL((void*)0),&hEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),666,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
667 if (imin < hEnd) break;
668 }
669 }
670 ierr = DMFieldDSGetHeightDisc(field,h,&disc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),670,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
671 ierr = PetscObjectGetClassId(disc,&id);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),671,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
672 if (id == PETSCFE_CLASSID) {
673 PetscFE fe = (PetscFE) disc;
674 PetscSpace sp;
675
676 ierr = PetscFEGetBasisSpace(fe, &sp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),676,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
677 ierr = PetscSpaceGetDegree(sp, minDegree, maxDegree);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),677,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
678 }
679 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)
;
680}
681
682static PetscErrorCode DMFieldCreateDefaultQuadrature_DS(DMField field, IS pointIS, PetscQuadrature *quad)
683{
684 PetscInt h, dim, imax, imin, cellHeight;
685 DM dm;
686 DMField_DS *dsfield;
687 PetscObject disc;
688 PetscFE fe;
689 PetscClassId id;
690 PetscErrorCode ierr;
691
692
693 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
; petscstack->line[petscstack->currentsize] = 693; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
694 dm = field->dm;
695 dsfield = (DMField_DS *) field->data;
696 ierr = ISGetMinMax(pointIS,&imin,&imax);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),696,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
697 ierr = DMGetDimension(dm,&dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),697,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
698 for (h = 0; h <= dim; h++) {
699 PetscInt hStart, hEnd;
700
701 ierr = DMPlexGetHeightStratum(dm,h,&hStart,&hEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),701,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
702 if (imax >= hStart && imin < hEnd) break;
703 }
704 ierr = DMPlexGetVTKCellHeight(dm, &cellHeight);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),704,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
705 h -= cellHeight;
706 *quad = NULL((void*)0);
707 if (h < dsfield->height) {
708 ierr = DMFieldDSGetHeightDisc(field,h,&disc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),708,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
709 ierr = PetscObjectGetClassId(disc,&id);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),709,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
710 if (id != PETSCFE_CLASSID) 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)
;
711 fe = (PetscFE) disc;
712 ierr = PetscFEGetQuadrature(fe,quad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),712,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
713 ierr = PetscObjectReference((PetscObject)*quad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),713,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
714 }
715 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)
;
716}
717
718static PetscErrorCode DMFieldComputeFaceData_DS(DMField field, IS pointIS, PetscQuadrature quad, PetscFEGeom *geom)
719{
720 const PetscInt *points;
721 PetscInt p, dim, dE, numFaces, Nq;
722 PetscInt maxDegree;
723 DMLabel depthLabel;
724 IS cellIS;
725 DM dm = field->dm;
726 PetscErrorCode ierr;
727
728 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
; petscstack->line[petscstack->currentsize] = 728; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
729 dim = geom->dim;
730 dE = geom->dimEmbed;
731 ierr = DMPlexGetDepthLabel(dm, &depthLabel);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),731,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
732 ierr = DMLabelGetStratumIS(depthLabel, dim + 1, &cellIS);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),732,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
733 ierr = DMFieldGetDegree(field,cellIS,NULL((void*)0),&maxDegree);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),733,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
734 ierr = ISGetIndices(pointIS, &points);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),734,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
735 numFaces = geom->numCells;
736 Nq = geom->numPoints;
737 if (maxDegree <= 1) {
1
Assuming 'maxDegree' is > 1
2
Taking false branch
738 PetscInt numCells, offset, *cells;
739 PetscFEGeom *cellGeom;
740 IS suppIS;
741 PetscQuadrature cellQuad = NULL((void*)0);
742
743 ierr = DMFieldCreateDefaultQuadrature(field,cellIS,&cellQuad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),743,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
744 for (p = 0, numCells = 0; p < numFaces; p++) {
745 PetscInt point = points[p];
746 PetscInt numSupp, numChildren;
747
748 ierr = DMPlexGetTreeChildren(dm, point, &numChildren, NULL((void*)0)); CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),748,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
749 if (numChildren) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Face data not valid for facets with children")return PetscError(((MPI_Comm)0x44000001),749,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,77,PETSC_ERROR_INITIAL,"Face data not valid for facets with children"
)
;
750 ierr = DMPlexGetSupportSize(dm, point,&numSupp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),750,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
751 if (numSupp > 2) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Point %D has %D support, expected at most 2\n", point, numSupp)return PetscError(((MPI_Comm)0x44000001),751,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,77,PETSC_ERROR_INITIAL,"Point %D has %D support, expected at most 2\n"
,point,numSupp)
;
752 numCells += numSupp;
753 }
754 ierr = PetscMalloc1(numCells, &cells)PetscMallocA(1,PETSC_FALSE,754,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(numCells)*sizeof(**(&cells)),(&cells))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),754,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
755 for (p = 0, offset = 0; p < numFaces; p++) {
756 PetscInt point = points[p];
757 PetscInt numSupp, s;
758 const PetscInt *supp;
759
760 ierr = DMPlexGetSupportSize(dm, point,&numSupp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),760,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
761 ierr = DMPlexGetSupport(dm, point, &supp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),761,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
762 for (s = 0; s < numSupp; s++, offset++) {
763 cells[offset] = supp[s];
764 }
765 }
766 ierr = ISCreateGeneral(PETSC_COMM_SELF((MPI_Comm)0x44000001),numCells,cells,PETSC_USE_POINTER, &suppIS);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),766,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
767 ierr = DMFieldCreateFEGeom(field,suppIS,cellQuad,PETSC_FALSE,&cellGeom);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),767,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
768 for (p = 0, offset = 0; p < numFaces; p++) {
769 PetscInt point = points[p];
770 PetscInt numSupp, s, q;
771 const PetscInt *supp;
772
773 ierr = DMPlexGetSupportSize(dm, point,&numSupp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),773,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
774 ierr = DMPlexGetSupport(dm, point, &supp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),774,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
775 for (s = 0; s < numSupp; s++, offset++) {
776 for (q = 0; q < Nq * dE * dE; q++) {
777 geom->suppJ[s][p * Nq * dE * dE + q] = cellGeom->J[offset * Nq * dE * dE + q];
778 geom->suppInvJ[s][p * Nq * dE * dE + q] = cellGeom->invJ[offset * Nq * dE * dE + q];
779 }
780 for (q = 0; q < Nq; q++) geom->suppDetJ[s][p * Nq + q] = cellGeom->detJ[offset * Nq + q];
781 }
782 }
783 ierr = PetscFEGeomDestroy(&cellGeom);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),783,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
784 ierr = ISDestroy(&suppIS);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),784,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
785 ierr = PetscFree(cells)((*PetscTrFree)((void*)(cells),785,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
) || ((cells) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),785,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
786 ierr = PetscQuadratureDestroy(&cellQuad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),786,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
787 } else {
788 PetscObject faceDisc, cellDisc;
789 PetscClassId faceId, cellId;
790 PetscDualSpace dsp;
791 DM K;
792 PetscInt (*co)[2][3];
793 PetscInt coneSize;
794 PetscInt **counts;
795 PetscInt f, i, o, q, s;
796 const PetscInt *coneK;
797 PetscInt minOrient, maxOrient, numOrient;
798 PetscInt *orients;
799 PetscReal **orientPoints;
800 PetscReal *cellPoints;
801 PetscReal *dummyWeights;
802 PetscQuadrature cellQuad = NULL((void*)0);
803
804 ierr = DMFieldDSGetHeightDisc(field, 1, &faceDisc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),804,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
805 ierr = DMFieldDSGetHeightDisc(field, 0, &cellDisc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),805,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
806 ierr = PetscObjectGetClassId(faceDisc,&faceId);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),806,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
807 ierr = PetscObjectGetClassId(cellDisc,&cellId);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),807,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
808 if (faceId != PETSCFE_CLASSID || cellId != PETSCFE_CLASSID) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Not supported\n")return PetscError(((MPI_Comm)0x44000001),808,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,77,PETSC_ERROR_INITIAL,"Not supported\n")
;
3
Taking false branch
809 ierr = PetscFEGetDualSpace((PetscFE)cellDisc, &dsp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),809,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
810 ierr = PetscDualSpaceGetDM(dsp, &K); CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),810,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
811 ierr = DMPlexGetConeSize(K,0,&coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),811,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
812 ierr = DMPlexGetCone(K,0,&coneK);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),812,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
813 ierr = PetscMalloc2(numFaces, &co, coneSize, &counts)PetscMallocA(2,PETSC_FALSE,813,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(numFaces)*sizeof(**(&co)),(&co),(size_t)(coneSize
)*sizeof(**(&counts)),(&counts))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),813,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
814 ierr = PetscMalloc1(dE*Nq, &cellPoints)PetscMallocA(1,PETSC_FALSE,814,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(dE*Nq)*sizeof(**(&cellPoints)),(&cellPoints
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),814,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
815 ierr = PetscMalloc1(Nq, &dummyWeights)PetscMallocA(1,PETSC_FALSE,815,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(Nq)*sizeof(**(&dummyWeights)),(&dummyWeights
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),815,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
816 ierr = PetscQuadratureCreate(PetscObjectComm((PetscObject)field), &cellQuad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),816,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
817 ierr = PetscQuadratureSetData(cellQuad, dE, 1, Nq, cellPoints, dummyWeights);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),817,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
818 minOrient = PETSC_MAX_INT2147483647;
819 maxOrient = PETSC_MIN_INT(-2147483647 - 1);
820 for (p = 0; p < numFaces; p++) { /* record the orientation of the facet wrt the support cells */
4
Assuming 'p' is >= 'numFaces'
5
Loop condition is false. Execution continues on line 854
821 PetscInt point = points[p];
822 PetscInt numSupp, numChildren;
823 const PetscInt *supp;
824
825 ierr = DMPlexGetTreeChildren(dm, point, &numChildren, NULL((void*)0)); CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),825,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
826 if (numChildren) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Face data not valid for facets with children")return PetscError(((MPI_Comm)0x44000001),826,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,77,PETSC_ERROR_INITIAL,"Face data not valid for facets with children"
)
;
827 ierr = DMPlexGetSupportSize(dm, point,&numSupp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),827,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
828 if (numSupp > 2) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Point %D has %D support, expected at most 2\n", point, numSupp)return PetscError(((MPI_Comm)0x44000001),828,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,77,PETSC_ERROR_INITIAL,"Point %D has %D support, expected at most 2\n"
,point,numSupp)
;
829 ierr = DMPlexGetSupport(dm, point, &supp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),829,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
830 for (s = 0; s < numSupp; s++) {
831 PetscInt cell = supp[s];
832 PetscInt numCone;
833 const PetscInt *cone, *orient;
834
835 ierr = DMPlexGetConeSize(dm, cell, &numCone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),835,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
836 if (numCone != coneSize) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Support point does not match reference element")return PetscError(((MPI_Comm)0x44000001),836,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,77,PETSC_ERROR_INITIAL,"Support point does not match reference element"
)
;
837 ierr = DMPlexGetCone(dm, cell, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),837,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
838 ierr = DMPlexGetConeOrientation(dm, cell, &orient);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),838,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
839 for (f = 0; f < coneSize; f++) {
840 if (cone[f] == point) break;
841 }
842 co[p][s][0] = f;
843 co[p][s][1] = orient[f];
844 co[p][s][2] = cell;
845 minOrient = PetscMin(minOrient, orient[f])(((minOrient)<(orient[f])) ? (minOrient) : (orient[f]));
846 maxOrient = PetscMax(maxOrient, orient[f])(((maxOrient)<(orient[f])) ? (orient[f]) : (maxOrient));
847 }
848 for (; s < 2; s++) {
849 co[p][s][0] = -1;
850 co[p][s][1] = -1;
851 co[p][s][2] = -1;
852 }
853 }
854 numOrient = maxOrient + 1 - minOrient;
855 ierr = DMPlexGetCone(K,0,&coneK);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),855,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
856 /* count all (face,orientation) doubles that appear */
857 ierr = PetscCalloc2(numOrient,&orients,numOrient,&orientPoints)PetscMallocA(2,PETSC_TRUE,857,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(numOrient)*sizeof(**(&orients)),(&orients),
(size_t)(numOrient)*sizeof(**(&orientPoints)),(&orientPoints
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),857,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
858 for (f = 0; f < coneSize; f++) {ierr = PetscCalloc1(numOrient+1, &counts[f])PetscMallocA(1,PETSC_TRUE,858,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(numOrient+1)*sizeof(**(&counts[f])),(&counts
[f]))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),858,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
6
Assuming 'f' is < 'coneSize'
7
Loop condition is true. Entering loop body
8
Assuming 'f' is >= 'coneSize'
9
Loop condition is false. Execution continues on line 859
859 for (p = 0; p < numFaces; p++) {
10
Loop condition is false. Execution continues on line 867
860 for (s = 0; s < 2; s++) {
861 if (co[p][s][0] >= 0) {
862 counts[co[p][s][0]][co[p][s][1] - minOrient]++;
863 orients[co[p][s][1] - minOrient]++;
864 }
865 }
866 }
867 for (o = 0; o < numOrient; o++) {
11
Loop condition is true. Entering loop body
14
Loop condition is true. Entering loop body
17
Loop condition is false. Execution continues on line 952
868 if (orients[o]) {
12
Assuming the condition is false
13
Taking false branch
15
Assuming the condition is false
16
Taking false branch
869 PetscInt orient = o + minOrient;
870 PetscInt q;
871
872 ierr = PetscMalloc1(Nq * dim, &orientPoints[o])PetscMallocA(1,PETSC_FALSE,872,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(Nq * dim)*sizeof(**(&orientPoints[o])),(&orientPoints
[o]))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),872,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
873 /* rotate the quadrature points appropriately */
874 switch (dim) {
875 case 0:
876 break;
877 case 1:
878 if (orient == -2 || orient == 1) {
879 for (q = 0; q < Nq; q++) {
880 orientPoints[o][q] = -geom->xi[q];
881 }
882 } else {
883 for (q = 0; q < Nq; q++) {
884 orientPoints[o][q] = geom->xi[q];
885 }
886 }
887 break;
888 case 2:
889 switch (coneSize) {
890 case 3:
891 for (q = 0; q < Nq; q++) {
892 PetscReal lambda[3];
893 PetscReal lambdao[3];
894
895 /* convert to barycentric */
896 lambda[0] = - (geom->xi[2 * q] + geom->xi[2 * q + 1]) / 2.;
897 lambda[1] = (geom->xi[2 * q] + 1.) / 2.;
898 lambda[2] = (geom->xi[2 * q + 1] + 1.) / 2.;
899 if (orient >= 0) {
900 for (i = 0; i < 3; i++) {
901 lambdao[i] = lambda[(orient + i) % 3];
902 }
903 } else {
904 for (i = 0; i < 3; i++) {
905 lambdao[i] = lambda[(-(orient + i) + 3) % 3];
906 }
907 }
908 /* convert to coordinates */
909 orientPoints[o][2 * q + 0] = -(lambdao[0] + lambdao[2]) + lambdao[1];
910 orientPoints[o][2 * q + 1] = -(lambdao[0] + lambdao[1]) + lambdao[2];
911 }
912 break;
913 case 4:
914 for (q = 0; q < Nq; q++) {
915 PetscReal xi[2], xio[2];
916 PetscInt oabs = (orient >= 0) ? orient : -(orient + 1);
917
918 xi[0] = geom->xi[2 * q];
919 xi[1] = geom->xi[2 * q + 1];
920 switch (oabs) {
921 case 1:
922 xio[0] = xi[1];
923 xio[1] = -xi[0];
924 break;
925 case 2:
926 xio[0] = -xi[0];
927 xio[1] = -xi[1];
928 case 3:
929 xio[0] = -xi[1];
930 xio[1] = xi[0];
931 case 0:
932 default:
933 xio[0] = xi[0];
934 xio[1] = xi[1];
935 break;
936 }
937 if (orient < 0) {
938 xio[0] = -xio[0];
939 }
940 orientPoints[o][2 * q + 0] = xio[0];
941 orientPoints[o][2 * q + 1] = xio[1];
942 }
943 break;
944 default:
945 SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"Cone size %D not yet supported\n", coneSize)return PetscError(((MPI_Comm)0x44000001),945,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,56,PETSC_ERROR_INITIAL,"Cone size %D not yet supported\n",coneSize
)
;
946 }
947 default:
948 SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"Dimension %D not yet supported\n", dim)return PetscError(((MPI_Comm)0x44000001),948,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,56,PETSC_ERROR_INITIAL,"Dimension %D not yet supported\n",dim
)
;
949 }
950 }
951 }
952 for (f = 0; f < coneSize; f++) {
18
Loop condition is true. Entering loop body
953 PetscInt face = coneK[f];
954 PetscReal v0[3];
955 PetscReal J[9], detJ;
956 PetscInt numCells, offset;
957 PetscInt *cells;
958 IS suppIS;
959
960 ierr = DMPlexComputeCellGeometryFEM(K, face, NULL((void*)0), v0, J, NULL((void*)0), &detJ);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),960,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
961 for (o = 0; o <= numOrient; o++) {
19
Loop condition is true. Entering loop body
962 PetscFEGeom *cellGeom;
963
964 if (!counts[f][o]) continue;
20
Assuming the condition is false
21
Taking false branch
965 /* If this (face,orientation) double appears,
966 * convert the face quadrature points into volume quadrature points */
967 for (q = 0; q < Nq; q++) {
22
Assuming 'q' is < 'Nq'
23
Loop condition is true. Entering loop body
968 PetscReal xi0[3] = {-1., -1., -1.};
969
970 CoordinatesRefToReal(dE, dim, xi0, v0, J, &orientPoints[o][dim * q + 0], &cellPoints[dE * q + 0]);
24
Calling 'CoordinatesRefToReal'
971 }
972 for (p = 0, numCells = 0; p < numFaces; p++) {
973 for (s = 0; s < 2; s++) {
974 if (co[p][s][0] == f && co[p][s][1] == o + minOrient) numCells++;
975 }
976 }
977 ierr = PetscMalloc1(numCells, &cells)PetscMallocA(1,PETSC_FALSE,977,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(numCells)*sizeof(**(&cells)),(&cells))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),977,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
978 for (p = 0, offset = 0; p < numFaces; p++) {
979 for (s = 0; s < 2; s++) {
980 if (co[p][s][0] == f && co[p][s][1] == o + minOrient) {
981 cells[offset++] = co[p][s][2];
982 }
983 }
984 }
985 ierr = ISCreateGeneral(PETSC_COMM_SELF((MPI_Comm)0x44000001),numCells,cells,PETSC_USE_POINTER, &suppIS);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),985,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
986 ierr = DMFieldCreateFEGeom(field,suppIS,cellQuad,PETSC_FALSE,&cellGeom);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),986,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
987 for (p = 0, offset = 0; p < numFaces; p++) {
988 for (s = 0; s < 2; s++) {
989 if (co[p][s][0] == f && co[p][s][1] == o + minOrient) {
990 for (q = 0; q < Nq * dE * dE; q++) {
991 geom->suppJ[s][p * Nq * dE * dE + q] = cellGeom->J[offset * Nq * dE * dE + q];
992 geom->suppInvJ[s][p * Nq * dE * dE + q] = cellGeom->invJ[offset * Nq * dE * dE + q];
993 }
994 for (q = 0; q < Nq; q++) geom->suppDetJ[s][p * Nq + q] = cellGeom->detJ[offset * Nq + q];
995 offset++;
996 }
997 }
998 }
999 ierr = PetscFEGeomDestroy(&cellGeom);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),999,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1000 ierr = ISDestroy(&suppIS);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1000,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1001 ierr = PetscFree(cells)((*PetscTrFree)((void*)(cells),1001,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
) || ((cells) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1001,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1002 }
1003 }
1004 for (o = 0; o < numOrient; o++) {
1005 if (orients[o]) {
1006 ierr = PetscFree(orientPoints[o])((*PetscTrFree)((void*)(orientPoints[o]),1006,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
) || ((orientPoints[o]) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1006,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1007 }
1008 }
1009 ierr = PetscFree2(orients,orientPoints)PetscFreeA(2,1009,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,&(orients),&(orientPoints))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1009,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1010 ierr = PetscQuadratureDestroy(&cellQuad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1010,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1011 for (f = 0; f < coneSize; f++) {ierr = PetscFree(counts[f])((*PetscTrFree)((void*)(counts[f]),1011,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
) || ((counts[f]) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1011,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1012 ierr = PetscFree2(co,counts)PetscFreeA(2,1012,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,&(co),&(counts))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1012,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1013 }
1014 ierr = ISRestoreIndices(pointIS, &points);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1014,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1015 ierr = ISDestroy(&cellIS);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1015,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1016 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)
;
1017}
1018
1019static PetscErrorCode DMFieldInitialize_DS(DMField field)
1020{
1021 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
; petscstack->line[petscstack->currentsize] = 1021; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1022 field->ops->destroy = DMFieldDestroy_DS;
1023 field->ops->evaluate = DMFieldEvaluate_DS;
1024 field->ops->evaluateFE = DMFieldEvaluateFE_DS;
1025 field->ops->evaluateFV = DMFieldEvaluateFV_DS;
1026 field->ops->getDegree = DMFieldGetDegree_DS;
1027 field->ops->createDefaultQuadrature = DMFieldCreateDefaultQuadrature_DS;
1028 field->ops->view = DMFieldView_DS;
1029 field->ops->computeFaceData = DMFieldComputeFaceData_DS;
1030 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)
;
1031}
1032
1033PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode DMFieldCreate_DS(DMField field)
1034{
1035 DMField_DS *dsfield;
1036 PetscErrorCode ierr;
1037
1038 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
; petscstack->line[petscstack->currentsize] = 1038; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1039 ierr = PetscNewLog(field,&dsfield)(PetscMallocA(1,PETSC_TRUE,1039,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(1)*sizeof(**(((&dsfield)))),(((&dsfield))))
|| PetscLogObjectMemory((PetscObject)field,sizeof(**(&dsfield
))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1039,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1040 field->data = dsfield;
1041 ierr = DMFieldInitialize_DS(field);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1041,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1042 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)
;
1043}
1044
1045PetscErrorCode DMFieldCreateDS(DM dm, PetscInt fieldNum, Vec vec,DMField *field)
1046{
1047 DMField b;
1048 DMField_DS *dsfield;
1049 PetscObject disc = NULL((void*)0);
1050 PetscBool isContainer = PETSC_FALSE;
1051 PetscClassId id = -1;
1052 PetscInt numComponents = -1, dsNumFields;
1053 PetscSection section;
1054 PetscErrorCode ierr;
1055
1056 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
; petscstack->line[petscstack->currentsize] = 1056; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1057 ierr = DMGetLocalSection(dm,&section);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1057,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1058 ierr = PetscSectionGetFieldComponents(section,fieldNum,&numComponents);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1058,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1059 ierr = DMGetNumFields(dm,&dsNumFields);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1059,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1060 if (dsNumFields) {ierr = DMGetField(dm,fieldNum,NULL((void*)0),&disc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1060,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1061 if (disc) {
1062 ierr = PetscObjectGetClassId(disc,&id);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1062,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1063 isContainer = (id == PETSC_CONTAINER_CLASSID) ? PETSC_TRUE : PETSC_FALSE;
1064 }
1065 if (!disc || isContainer) {
1066 MPI_Comm comm = PetscObjectComm((PetscObject) dm);
1067 PetscInt cStart, cEnd, dim, cellHeight;
1068 PetscInt localConeSize = 0, coneSize;
1069 PetscFE fe;
1070 PetscDualSpace Q;
1071 PetscSpace P;
1072 DM K;
1073 PetscQuadrature quad, fquad;
1074 PetscBool isSimplex;
1075
1076 ierr = DMPlexGetVTKCellHeight(dm, &cellHeight);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1076,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1077 ierr = DMPlexGetHeightStratum(dm, cellHeight, &cStart, &cEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1077,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1078 ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1078,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1079 if (cEnd > cStart) {
1080 ierr = DMPlexGetConeSize(dm, cStart, &localConeSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1080,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1081 }
1082 ierr = MPI_Allreduce(&localConeSize,&coneSize,1,MPIU_INT,MPI_MAX,comm)((petsc_allreduce_ct += PetscMPIParallelComm((comm)),0) || MPI_Allreduce
((&localConeSize),(&coneSize),(1),(((MPI_Datatype)0x4c000405
)),((MPI_Op)(0x58000001)),(comm)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1082,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1083 isSimplex = (coneSize == (dim + 1)) ? PETSC_TRUE : PETSC_FALSE;
1084 ierr = PetscSpaceCreate(comm, &P);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1084,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1085 ierr = PetscSpaceSetType(P,PETSCSPACEPOLYNOMIAL"poly");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1085,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1086 ierr = PetscSpaceSetDegree(P, 1, PETSC_DETERMINE-1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1086,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1087 ierr = PetscSpaceSetNumComponents(P, numComponents);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1087,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1088 ierr = PetscSpaceSetNumVariables(P, dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1088,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1089 ierr = PetscSpacePolynomialSetTensor(P, isSimplex ? PETSC_FALSE : PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1089,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1090 ierr = PetscSpaceSetUp(P);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1090,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1091 ierr = PetscDualSpaceCreate(comm, &Q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1091,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1092 ierr = PetscDualSpaceSetType(Q,PETSCDUALSPACELAGRANGE"lagrange");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1092,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1093 ierr = PetscDualSpaceCreateReferenceCell(Q, dim, isSimplex, &K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1093,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1094 ierr = PetscDualSpaceSetDM(Q, K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1094,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1095 ierr = DMDestroy(&K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1095,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1096 ierr = PetscDualSpaceSetNumComponents(Q, numComponents);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1096,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1097 ierr = PetscDualSpaceSetOrder(Q, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1097,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1098 ierr = PetscDualSpaceLagrangeSetTensor(Q, isSimplex ? PETSC_FALSE : PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1098,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1099 ierr = PetscDualSpaceSetUp(Q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1099,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1100 ierr = PetscFECreate(comm, &fe);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1100,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1101 ierr = PetscFESetType(fe,PETSCFEBASIC"basic");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1101,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1102 ierr = PetscFESetBasisSpace(fe, P);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1102,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1103 ierr = PetscFESetDualSpace(fe, Q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1103,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1104 ierr = PetscFESetNumComponents(fe, numComponents);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1104,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1105 ierr = PetscFESetUp(fe);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1105,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1106 ierr = PetscSpaceDestroy(&P);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1106,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1107 ierr = PetscDualSpaceDestroy(&Q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1107,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1108 if (isSimplex) {
1109 ierr = PetscDTGaussJacobiQuadrature(dim, 1, 1, -1.0, 1.0, &quad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1109,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1110 ierr = PetscDTGaussJacobiQuadrature(dim-1, 1, 1, -1.0, 1.0, &fquad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1110,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1111 }
1112 else {
1113 ierr = PetscDTGaussTensorQuadrature(dim, 1, 1, -1.0, 1.0, &quad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1113,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1114 ierr = PetscDTGaussTensorQuadrature(dim-1, 1, 1, -1.0, 1.0, &fquad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1114,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1115 }
1116 ierr = PetscFESetQuadrature(fe, quad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1116,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1117 ierr = PetscFESetFaceQuadrature(fe, fquad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1117,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1118 ierr = PetscQuadratureDestroy(&quad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1118,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1119 ierr = PetscQuadratureDestroy(&fquad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1119,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1120 disc = (PetscObject) fe;
1121 } else {
1122 ierr = PetscObjectReference(disc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1122,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1123 }
1124 ierr = PetscObjectGetClassId(disc,&id);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1124,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1125 if (id == PETSCFE_CLASSID) {
1126 PetscFE fe = (PetscFE) disc;
1127
1128 ierr = PetscFEGetNumComponents(fe,&numComponents);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1128,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1129 } else {SETERRQ(PetscObjectComm((PetscObject)dm),PETSC_ERR_SUP,"Not implemented")return PetscError(PetscObjectComm((PetscObject)dm),1129,__func__
,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,56,PETSC_ERROR_INITIAL,"Not implemented")
;}
1130 ierr = DMFieldCreate(dm,numComponents,DMFIELD_VERTEX,&b);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1130,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1131 ierr = DMFieldSetType(b,DMFIELDDS"ds");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1131,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1132 dsfield = (DMField_DS *) b->data;
1133 dsfield->fieldNum = fieldNum;
1134 ierr = DMGetDimension(dm,&dsfield->height);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1134,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1135 dsfield->height++;
1136 ierr = PetscCalloc1(dsfield->height,&dsfield->disc)PetscMallocA(1,PETSC_TRUE,1136,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,(size_t)(dsfield->height)*sizeof(**(&dsfield->disc
)),(&dsfield->disc))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1136,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1137 dsfield->disc[0] = disc;
1138 ierr = PetscObjectReference((PetscObject)vec);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1138,__func__,"/sandbox/petsc/petsc.next-tmp/src/dm/field/impls/ds/dmfieldds.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1139 dsfield->vec = vec;
1140 *field = b;
1141
1142 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)
;
1143}

/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h

1#if !defined(PETSCFEIMPL_H)
2#define PETSCFEIMPL_H
3
4#include <petscfe.h>
5#include <petscds.h>
6#include <petsc/private/petscimpl.h>
7#include <petsc/private/dmpleximpl.h>
8
9PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscBool PetscSpaceRegisterAllCalled;
10PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscBool PetscDualSpaceRegisterAllCalled;
11PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscBool PetscFERegisterAllCalled;
12PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscSpaceRegisterAll(void);
13PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscDualSpaceRegisterAll(void);
14PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscFERegisterAll(void);
15
16PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscBool FEcite;
17PETSC_EXTERNextern __attribute__((visibility ("default"))) const char FECitation[];
18
19typedef struct _PetscSpaceOps *PetscSpaceOps;
20struct _PetscSpaceOps {
21 PetscErrorCode (*setfromoptions)(PetscOptionItems*,PetscSpace);
22 PetscErrorCode (*setup)(PetscSpace);
23 PetscErrorCode (*view)(PetscSpace,PetscViewer);
24 PetscErrorCode (*destroy)(PetscSpace);
25
26 PetscErrorCode (*getdimension)(PetscSpace,PetscInt*);
27 PetscErrorCode (*evaluate)(PetscSpace,PetscInt,const PetscReal*,PetscReal*,PetscReal*,PetscReal*);
28 PetscErrorCode (*getheightsubspace)(PetscSpace,PetscInt,PetscSpace *);
29};
30
31struct _p_PetscSpace {
32 PETSCHEADER(struct _PetscSpaceOps)_p_PetscObject hdr; struct _PetscSpaceOps ops[1];
33 void *data; /* Implementation object */
34 PetscInt degree; /* The approximation order of the space */
35 PetscInt maxDegree; /* The containing approximation order of the space */
36 PetscInt Nc; /* The number of components */
37 PetscInt Nv; /* The number of variables in the space, e.g. x and y */
38 PetscInt dim; /* The dimension of the space */
39 DM dm; /* Shell to use for temp allocation */
40};
41
42typedef struct {
43 PetscBool symmetric; /* Use only symmetric polynomials */
44 PetscBool tensor; /* Flag for tensor product */
45 PetscInt *degrees; /* Degrees of single variable which we need to compute */
46 PetscSpacePolynomialType ptype; /* Allows us to make the Hdiv and Hcurl spaces */
47 PetscBool setupCalled;
48 PetscSpace *subspaces; /* Subspaces for each dimension */
49} PetscSpace_Poly;
50
51typedef struct {
52 PetscSpace *tensspaces;
53 PetscInt numTensSpaces;
54 PetscInt dim;
55 PetscBool uniform;
56 PetscBool setupCalled;
57 PetscSpace *heightsubspaces; /* Height subspaces */
58} PetscSpace_Tensor;
59
60typedef struct {
61 PetscQuadrature quad; /* The points defining the space */
62} PetscSpace_Point;
63
64typedef struct _PetscDualSpaceOps *PetscDualSpaceOps;
65struct _PetscDualSpaceOps {
66 PetscErrorCode (*setfromoptions)(PetscOptionItems*,PetscDualSpace);
67 PetscErrorCode (*setup)(PetscDualSpace);
68 PetscErrorCode (*view)(PetscDualSpace,PetscViewer);
69 PetscErrorCode (*destroy)(PetscDualSpace);
70
71 PetscErrorCode (*duplicate)(PetscDualSpace,PetscDualSpace*);
72 PetscErrorCode (*getdimension)(PetscDualSpace,PetscInt*);
73 PetscErrorCode (*getnumdof)(PetscDualSpace,const PetscInt**);
74 PetscErrorCode (*getheightsubspace)(PetscDualSpace,PetscInt,PetscDualSpace *);
75 PetscErrorCode (*getpointsubspace)(PetscDualSpace,PetscInt,PetscDualSpace *);
76 PetscErrorCode (*getsymmetries)(PetscDualSpace,const PetscInt****,const PetscScalar****);
77 PetscErrorCode (*apply)(PetscDualSpace, PetscInt, PetscReal, PetscFEGeom *, PetscInt, PetscErrorCode (*)(PetscInt, PetscReal, const PetscReal [], PetscInt, PetscScalar *, void *), void *, PetscScalar *);
78 PetscErrorCode (*applyall)(PetscDualSpace, const PetscScalar *, PetscScalar *);
79 PetscErrorCode (*createallpoints)(PetscDualSpace, PetscQuadrature *);
80};
81
82struct _p_PetscDualSpace {
83 PETSCHEADER(struct _PetscDualSpaceOps)_p_PetscObject hdr; struct _PetscDualSpaceOps ops[1];
84 void *data; /* Implementation object */
85 DM dm; /* The integration region K */
86 PetscInt order; /* The approximation order of the space */
87 PetscInt Nc; /* The number of components */
88 PetscQuadrature *functional; /* The basis of functionals for this space */
89 PetscQuadrature allPoints; /* Collects all quadrature points representing functionals in the basis */
90 PetscInt k; /* k-simplex corresponding to the dofs in this basis (we always use the 3D complex right now) */
91 PetscBool setupcalled;
92 PetscBool setfromoptionscalled;
93};
94
95typedef struct {
96 PetscInt *numDof; /* [d]: Number of dofs for d-dimensional point */
97 PetscBool simplexCell; /* Flag for simplices, as opposed to tensor cells */
98 PetscBool tensorSpace; /* Flag for tensor product space of polynomials, as opposed to a space of maximum degree */
99 PetscBool continuous; /* Flag for a continuous basis, as opposed to discontinuous across element boundaries */
100 PetscInt height; /* The number of subspaces stored */
101 PetscDualSpace *subspaces; /* [h]: The subspace for dimension dim-(h+1) */
102 PetscInt ***symmetries;
103 PetscInt numSelfSym;
104 PetscInt selfSymOff;
105} PetscDualSpace_Lag;
106
107typedef struct {
108 PetscInt *numDof; /* [d]: Number of dofs for d-dimensional point */
109 PetscBool simplexCell; /* Flag for simplices, as opposed to tensor cells */
110 PetscInt height; /* The number of subspaces stored */
111 PetscDualSpace *subspaces; /* [h]: The subspace for dimension dim-(h+1) */
112 PetscBool faceSpace; /* Flag indicating this is a subspace for a face (the only subspaces permitted) */
113 PetscInt ***symmetries;
114 PetscScalar ***flips;
115 PetscInt numSelfSym;
116 PetscInt selfSymOff;
117} PetscDualSpace_BDM;
118
119typedef struct {
120 PetscInt dim;
121 PetscInt *numDof;
122} PetscDualSpace_Simple;
123
124typedef struct _PetscFEOps *PetscFEOps;
125struct _PetscFEOps {
126 PetscErrorCode (*setfromoptions)(PetscOptionItems*,PetscFE);
127 PetscErrorCode (*setup)(PetscFE);
128 PetscErrorCode (*view)(PetscFE,PetscViewer);
129 PetscErrorCode (*destroy)(PetscFE);
130 PetscErrorCode (*getdimension)(PetscFE,PetscInt*);
131 PetscErrorCode (*gettabulation)(PetscFE,PetscInt,const PetscReal*,PetscReal*,PetscReal*,PetscReal*);
132 /* Element integration */
133 PetscErrorCode (*integrate)(PetscDS, PetscInt, PetscInt, PetscFEGeom *, const PetscScalar[], PetscDS, const PetscScalar[], PetscScalar[]);
134 PetscErrorCode (*integratebd)(PetscDS, PetscInt, PetscBdPointFunc, PetscInt, PetscFEGeom *, const PetscScalar[], PetscDS, const PetscScalar[], PetscScalar[]);
135 PetscErrorCode (*integrateresidual)(PetscDS, PetscInt, PetscInt, PetscFEGeom *, const PetscScalar[], const PetscScalar[], PetscDS, const PetscScalar[], PetscReal, PetscScalar[]);
136 PetscErrorCode (*integratebdresidual)(PetscDS, PetscInt, PetscInt, PetscFEGeom *, const PetscScalar[], const PetscScalar[], PetscDS, const PetscScalar[], PetscReal, PetscScalar[]);
137 PetscErrorCode (*integratejacobianaction)(PetscFE, PetscDS, PetscInt, PetscInt, PetscFEGeom *, const PetscScalar[], const PetscScalar[], PetscDS, const PetscScalar[], PetscReal, PetscReal, PetscScalar[]);
138 PetscErrorCode (*integratejacobian)(PetscDS, PetscFEJacobianType, PetscInt, PetscInt, PetscInt, PetscFEGeom *, const PetscScalar[], const PetscScalar[], PetscDS, const PetscScalar[], PetscReal, PetscReal, PetscScalar[]);
139 PetscErrorCode (*integratebdjacobian)(PetscDS, PetscInt, PetscInt, PetscInt, PetscFEGeom *, const PetscScalar[], const PetscScalar[], PetscDS, const PetscScalar[], PetscReal, PetscReal, PetscScalar[]);
140};
141
142struct _p_PetscFE {
143 PETSCHEADER(struct _PetscFEOps)_p_PetscObject hdr; struct _PetscFEOps ops[1];
144 void *data; /* Implementation object */
145 PetscSpace basisSpace; /* The basis space P */
146 PetscDualSpace dualSpace; /* The dual space P' */
147 PetscInt numComponents; /* The number of field components */
148 PetscQuadrature quadrature; /* Suitable quadrature on K */
149 PetscQuadrature faceQuadrature; /* Suitable face quadrature on \partial K */
150 PetscFE *subspaces; /* Subspaces for each dimension */
151 PetscReal *invV; /* Change of basis matrix, from prime to nodal basis set */
152 PetscReal *B, *D, *H; /* Tabulation of basis and derivatives at quadrature points */
153 PetscReal *Bf, *Df, *Hf; /* Tabulation of basis and derivatives at quadrature points on each face */
154 PetscReal *F; /* Tabulation of basis at face centroids */
155 PetscInt blockSize, numBlocks; /* Blocks are processed concurrently */
156 PetscInt batchSize, numBatches; /* A batch is made up of blocks, Batches are processed in serial */
157 PetscBool setupcalled;
158};
159
160typedef struct {
161 PetscInt cellType;
162} PetscFE_Basic;
163
164#ifdef PETSC_HAVE_OPENCL
165
166#ifdef __APPLE__
167#include <OpenCL/cl.h>
168#else
169#include <CL/cl.h>
170#endif
171
172typedef struct {
173 cl_platform_id pf_id;
174 cl_device_id dev_id;
175 cl_context ctx_id;
176 cl_command_queue queue_id;
177 PetscDataType realType;
178 PetscLogEvent residualEvent;
179 PetscInt op; /* ANDY: Stand-in for real equation code generation */
180} PetscFE_OpenCL;
181#endif
182
183typedef struct {
184 CellRefiner cellRefiner; /* The cell refiner defining the cell division */
185 PetscInt numSubelements; /* The number of subelements */
186 PetscReal *v0; /* The affine transformation for each subelement */
187 PetscReal *jac, *invjac;
188 PetscInt *embedding; /* Map from subelements dofs to element dofs */
189} PetscFE_Composite;
190
191/* Utility functions */
192PETSC_STATIC_INLINEstatic inline void CoordinatesRefToReal(PetscInt dimReal, PetscInt dimRef, const PetscReal xi0[], const PetscReal v0[], const PetscReal J[], const PetscReal xi[], PetscReal x[])
193{
194 PetscInt d, e;
195
196 for (d = 0; d < dimReal; ++d) {
25
Assuming 'd' is < 'dimReal'
26
Loop condition is true. Entering loop body
197 x[d] = v0[d];
198 for (e = 0; e < dimRef; ++e) {
27
Assuming 'e' is < 'dimRef'
28
Loop condition is true. Entering loop body
29
Assuming 'e' is < 'dimRef'
30
Loop condition is true. Entering loop body
31
Assuming 'e' is < 'dimRef'
32
Loop condition is true. Entering loop body
33
Assuming 'e' is < 'dimRef'
34
Loop condition is true. Entering loop body
199 x[d] += J[d*dimReal+e]*(xi[e] - xi0[e]);
35
The right operand of '-' is a garbage value due to array index out of bounds
200 }
201 }
202}
203
204PETSC_STATIC_INLINEstatic inline void CoordinatesRealToRef(PetscInt dimReal, PetscInt dimRef, const PetscReal xi0[], const PetscReal v0[], const PetscReal invJ[], const PetscReal x[], PetscReal xi[])
205{
206 PetscInt d, e;
207
208 for (d = 0; d < dimRef; ++d) {
209 xi[d] = xi0[d];
210 for (e = 0; e < dimReal; ++e) {
211 xi[d] += invJ[d*dimReal+e]*(x[e] - v0[e]);
212 }
213 }
214}
215
216PETSC_STATIC_INLINEstatic inline PetscErrorCode PetscFEInterpolate_Static(PetscFE fe, const PetscScalar x[], PetscFEGeom *fegeom, PetscInt q, PetscScalar interpolant[])
217{
218 PetscReal *basis;
219 PetscInt Nb, Nc, fc, f;
220 PetscErrorCode ierr;
221
222 PetscFunctionBeginHotdo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
; petscstack->line[petscstack->currentsize] = 222; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0)
;
223 ierr = PetscFEGetDimension(fe, &Nb);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),223,__func__,"/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
224 ierr = PetscFEGetNumComponents(fe, &Nc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),224,__func__,"/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
225 ierr = PetscFEGetDefaultTabulation(fe, &basis, NULL((void*)0), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),225,__func__,"/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
226 for (fc = 0; fc < Nc; ++fc) {
227 interpolant[fc] = 0.0;
228 for (f = 0; f < Nb; ++f) {
229 interpolant[fc] += x[f]*basis[(q*Nb + f)*Nc + fc];
230 }
231 }
232 ierr = PetscFEPushforward(fe, fegeom, 1, interpolant);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),232,__func__,"/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
233 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)
;
234}
235
236PETSC_STATIC_INLINEstatic inline PetscErrorCode PetscFEInterpolateGradient_Static(PetscFE fe, const PetscScalar x[], PetscFEGeom *fegeom, PetscInt q, PetscScalar interpolant[])
237{
238 PetscReal *basisDer;
239 PetscInt Nb, Nc, fc, f, d;
240 const PetscInt dim = fegeom->dimEmbed;
241 PetscErrorCode ierr;
242
243 PetscFunctionBeginHotdo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
; petscstack->line[petscstack->currentsize] = 243; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0)
;
244 ierr = PetscFEGetDimension(fe, &Nb);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),244,__func__,"/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
245 ierr = PetscFEGetNumComponents(fe, &Nc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),245,__func__,"/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
246 ierr = PetscFEGetDefaultTabulation(fe, NULL((void*)0), &basisDer, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),246,__func__,"/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
247 for (fc = 0; fc < Nc; ++fc) {
248 for (d = 0; d < dim; ++d) interpolant[fc*dim+d] = 0.0;
249 for (f = 0; f < Nb; ++f) {
250 for (d = 0; d < dim; ++d) {
251 interpolant[fc*dim+d] += x[f]*basisDer[((q*Nb + f)*Nc + fc)*dim + d];
252 }
253 }
254 }
255 ierr = PetscFEPushforwardGradient(fe, fegeom, 1, interpolant);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),255,__func__,"/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
256 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)
;
257}
258
259PETSC_STATIC_INLINEstatic inline PetscErrorCode PetscFEInterpolateFieldAndGradient_Static(PetscFE fe, const PetscScalar x[], PetscFEGeom *fegeom, PetscInt q, PetscScalar interpolant[], PetscScalar interpolantGrad[])
260{
261 PetscReal *basis, *basisDer;
262 PetscInt Nb, Nc, fc, f, d;
263 const PetscInt dim = fegeom->dimEmbed;
264 PetscErrorCode ierr;
265
266 PetscFunctionBeginHotdo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
; petscstack->line[petscstack->currentsize] = 266; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0)
;
267 ierr = PetscFEGetDimension(fe, &Nb);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),267,__func__,"/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
268 ierr = PetscFEGetNumComponents(fe, &Nc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),268,__func__,"/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
269 ierr = PetscFEGetDefaultTabulation(fe, &basis, &basisDer, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),269,__func__,"/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
270 for (fc = 0; fc < Nc; ++fc) {
271 interpolant[fc] = 0.0;
272 for (d = 0; d < dim; ++d) interpolantGrad[fc*dim+d] = 0.0;
273 for (f = 0; f < Nb; ++f) {
274 interpolant[fc] += x[f]*basis[(q*Nb + f)*Nc + fc];
275 for (d = 0; d < dim; ++d) interpolantGrad[fc*dim+d] += x[f]*basisDer[((q*Nb + f)*Nc + fc)*dim + d];
276 }
277 }
278 ierr = PetscFEPushforward(fe, fegeom, 1, interpolant);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),278,__func__,"/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
279 ierr = PetscFEPushforwardGradient(fe, fegeom, 1, interpolantGrad);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),279,__func__,"/sandbox/petsc/petsc.next-tmp/include/petsc/private/petscfeimpl.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
280 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)
;
281}
282
283PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode PetscDualSpaceLatticePointLexicographic_Internal(PetscInt, PetscInt, PetscInt[]);
284PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode PetscDualSpaceTensorPointLexicographic_Internal(PetscInt, PetscInt, PetscInt[]);
285
286PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode PetscFEEvaluateFieldJets_Internal(PetscDS, PetscInt, PetscInt, const PetscInt[], const PetscInt[], PetscInt, PetscReal *[], PetscReal *[], PetscFEGeom *, const PetscScalar[], const PetscScalar[], PetscScalar[], PetscScalar[], PetscScalar[]);
287PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode PetscFEEvaluateFaceFields_Internal(PetscDS, PetscInt, PetscInt, const PetscScalar[], PetscScalar[]);
288PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode PetscFEUpdateElementVec_Internal(PetscFE, PetscInt, PetscInt, PetscInt, PetscInt, PetscReal[], PetscReal[], PetscScalar[], PetscScalar[], PetscFEGeom *, PetscScalar[], PetscScalar[], PetscScalar[]);
289PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode PetscFEUpdateElementMat_Internal(PetscFE, PetscFE, PetscInt, PetscInt, PetscInt, const PetscReal[], const PetscReal[], PetscScalar[], PetscScalar[], PetscInt, PetscInt, const PetscReal[], const PetscReal[], PetscScalar[], PetscScalar[], PetscFEGeom *, const PetscScalar[], const PetscScalar[], const PetscScalar[], const PetscScalar[], PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar[]);
290
291PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscFEGetDimension_Basic(PetscFE, PetscInt *);
292PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscFEIntegrateResidual_Basic(PetscDS, PetscInt, PetscInt, PetscFEGeom *, const PetscScalar [], const PetscScalar [], PetscDS, const PetscScalar [], PetscReal, PetscScalar []);
293PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscFEIntegrateBdResidual_Basic(PetscDS, PetscInt, PetscInt, PetscFEGeom *, const PetscScalar [], const PetscScalar [], PetscDS, const PetscScalar [], PetscReal, PetscScalar[]);
294PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscFEIntegrateJacobian_Basic(PetscDS, PetscFEJacobianType, PetscInt, PetscInt, PetscInt, PetscFEGeom *, const PetscScalar [], const PetscScalar [], PetscDS, const PetscScalar [], PetscReal, PetscReal, PetscScalar []);
295#endif