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 |
[?] Use j/k keys for keyboard navigation
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 | ||||
7 | typedef struct _n_DMField_DS | |||
8 | { | |||
9 | PetscInt fieldNum; | |||
10 | Vec vec; | |||
11 | PetscInt height; | |||
12 | PetscObject *disc; | |||
13 | PetscBool multifieldVec; | |||
14 | } | |||
15 | DMField_DS; | |||
16 | ||||
17 | static 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.master/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.master/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.master/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.master/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.master/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.master/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.master/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 | ||||
34 | static 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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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 | ||||
60 | static 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.master/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.master/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.master/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 | ||||
95 | static 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.master/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.master/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.master/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.master/src/dm/field/impls/ds/dmfieldds.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
115 | ierr = DMGetDefaultSection(dm,§ion);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),115,__func__,"/sandbox/petsc/petsc.master/src/dm/field/impls/ds/dmfieldds.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
116 | ierr = PetscSectionGetField(section,dsfield->fieldNum,§ion);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),116,__func__,"/sandbox/petsc/petsc.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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 | ||||
182 | static 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.master/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 = DMGetDefaultSection(field->dm,§ion);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),206,__func__,"/sandbox/petsc/petsc.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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 | ||||
427 | static 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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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 | ||||
649 | static 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.master/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.master/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.master/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.master/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.master/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.master/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.master/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 | ||||
682 | static 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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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 | ||||
718 | static 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.master/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.master/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.master/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.master/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.master/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) { | |||
| ||||
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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/src/dm/field/impls/ds/dmfieldds.c" ,77,PETSC_ERROR_INITIAL,"Not supported\n"); | |||
809 | ierr = PetscFEGetDualSpace((PetscFE)cellDisc, &dsp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),809,__func__,"/sandbox/petsc/petsc.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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 */ | |||
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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/src/dm/field/impls/ds/dmfieldds.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
859 | for (p = 0; p < numFaces; p++) { | |||
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++) { | |||
868 | if (orients[o]) { | |||
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.master/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.master/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.master/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.master/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++) { | |||
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.master/src/dm/field/impls/ds/dmfieldds.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
961 | for (o = 0; o <= numOrient; o++) { | |||
962 | PetscFEGeom *cellGeom; | |||
963 | ||||
964 | if (!counts[f][o]) continue; | |||
965 | /* If this (face,orientation) double appears, | |||
966 | * convert the face quadrature points into volume quadrature points */ | |||
967 | for (q = 0; q < Nq; q++) { | |||
968 | PetscReal xi0[3] = {-1., -1., -1.}; | |||
969 | ||||
970 | CoordinatesRefToReal(dE, dim, xi0, v0, J, &orientPoints[o][dim * q + 0], &cellPoints[dE * q + 0]); | |||
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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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 | ||||
1019 | static 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.master/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 | ||||
1033 | PETSC_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.master/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.master/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.master/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.master/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 | ||||
1045 | PetscErrorCode 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.master/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 = DMGetDefaultSection(dm,§ion);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),1057,__func__,"/sandbox/petsc/petsc.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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.master/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 | } |
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 | ||||
9 | PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscBool PetscSpaceRegisterAllCalled; | |||
10 | PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscBool PetscDualSpaceRegisterAllCalled; | |||
11 | PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscBool PetscFERegisterAllCalled; | |||
12 | PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscSpaceRegisterAll(void); | |||
13 | PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscDualSpaceRegisterAll(void); | |||
14 | PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscFERegisterAll(void); | |||
15 | ||||
16 | PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscBool FEcite; | |||
17 | PETSC_EXTERNextern __attribute__((visibility ("default"))) const char FECitation[]; | |||
18 | ||||
19 | typedef struct _PetscSpaceOps *PetscSpaceOps; | |||
20 | struct _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 | ||||
31 | struct _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 | ||||
42 | typedef 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 | ||||
51 | typedef 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 | ||||
60 | typedef struct { | |||
61 | PetscQuadrature quad; /* The points defining the space */ | |||
62 | } PetscSpace_Point; | |||
63 | ||||
64 | typedef struct _PetscDualSpaceOps *PetscDualSpaceOps; | |||
65 | struct _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 | ||||
82 | struct _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 | ||||
95 | typedef 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 | ||||
107 | typedef 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 | ||||
119 | typedef struct { | |||
120 | PetscInt dim; | |||
121 | PetscInt *numDof; | |||
122 | } PetscDualSpace_Simple; | |||
123 | ||||
124 | typedef struct _PetscFEOps *PetscFEOps; | |||
125 | struct _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 | ||||
142 | struct _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 | ||||
160 | typedef 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 | ||||
172 | typedef 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 | ||||
183 | typedef 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 */ | |||
192 | PETSC_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) { | |||
197 | x[d] = v0[d]; | |||
198 | for (e = 0; e < dimRef; ++e) { | |||
199 | x[d] += J[d*dimReal+e]*(xi[e] - xi0[e]); | |||
| ||||
200 | } | |||
201 | } | |||
202 | } | |||
203 | ||||
204 | PETSC_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 | ||||
216 | PETSC_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.master/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.master/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.master/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.master/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.master/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 | ||||
236 | PETSC_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.master/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.master/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.master/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.master/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.master/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 | ||||
259 | PETSC_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.master/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.master/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.master/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.master/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.master/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.master/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 | ||||
283 | PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode PetscDualSpaceLatticePointLexicographic_Internal(PetscInt, PetscInt, PetscInt[]); | |||
284 | PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode PetscDualSpaceTensorPointLexicographic_Internal(PetscInt, PetscInt, PetscInt[]); | |||
285 | ||||
286 | PETSC_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[]); | |||
287 | PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode PetscFEEvaluateFaceFields_Internal(PetscDS, PetscInt, PetscInt, const PetscScalar[], PetscScalar[]); | |||
288 | PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode PetscFEUpdateElementVec_Internal(PetscFE, PetscInt, PetscInt, PetscInt, PetscInt, PetscReal[], PetscReal[], PetscScalar[], PetscScalar[], PetscFEGeom *, PetscScalar[], PetscScalar[], PetscScalar[]); | |||
289 | PETSC_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 | ||||
291 | PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscFEGetDimension_Basic(PetscFE, PetscInt *); | |||
292 | PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscFEIntegrateResidual_Basic(PetscDS, PetscInt, PetscInt, PetscFEGeom *, const PetscScalar [], const PetscScalar [], PetscDS, const PetscScalar [], PetscReal, PetscScalar []); | |||
293 | PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscFEIntegrateBdResidual_Basic(PetscDS, PetscInt, PetscInt, PetscFEGeom *, const PetscScalar [], const PetscScalar [], PetscDS, const PetscScalar [], PetscReal, PetscScalar[]); | |||
294 | PETSC_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 |