File: | dm/dt/dualspace/impls/bdm/dspacebdm.c |
Warning: | line 708, column 48 Array access (from variable 'hsymmetries') results in a null pointer dereference |
[?] Use j/k keys for keyboard navigation
1 | #include <petsc/private/petscfeimpl.h> /*I "petscfe.h" I*/ | |||
2 | #include <petscdmplex.h> | |||
3 | ||||
4 | /* | |||
5 | Let's work out BDM_1: | |||
6 | ||||
7 | The model basis is | |||
8 | \phi(x, y) = / a + b x + c y \ | |||
9 | \ d + e x + f y / | |||
10 | which is a 6 dimensional space. There are also six dual basis functions, | |||
11 | \psi_0(v) = \int^1_{-1} dx v(x, -1) \cdot <0, -1> (1-x)/2 | |||
12 | \psi_1(v) = \int^1_{-1} dx v(x, -1) \cdot <0, -1> (1+x)/2 | |||
13 | \psi_2(v) = 1/2 \int^1_{-1} ds v(-s, s) \cdot <1, 1> (1-s)/2 TODO I think the 1/2 is wrong here | |||
14 | \psi_3(v) = 1/2 \int^1_{-1} ds v(-s, s) \cdot <1, 1> (1+s)/2 | |||
15 | \psi_4(v) = -\int^1_{-1} dy v(-1, y) \cdot <-1, 0> (1+y)/2 | |||
16 | \psi_5(v) = -\int^1_{-1} dy v(-1, y) \cdot <-1, 0> (1-y)/2 | |||
17 | So we do the integrals | |||
18 | \psi_0(\phi) = \int^1_{-1} dx (f - d - e x) (1-x)/2 = (f - d) + e/3 | |||
19 | \psi_1(\phi) = \int^1_{-1} dx (f - d - e x) (1+x)/2 = (f - d) - e/3 | |||
20 | \psi_2(\phi) = \int^1_{-1} ds (a - b s + c s + d - e s + f s) (1-s)/2 = (a + d)/2 - (c + f - b - e)/6 | |||
21 | \psi_3(\phi) = \int^1_{-1} ds (a - b s + c s + d - e s + f s) (1+s)/2 = (a + d)/2 + (c + f - b - e)/6 | |||
22 | \psi_4(\phi) = \int^1_{-1} dy (b - a - c y) (1+y)/2 = (a - b) + c/3 | |||
23 | \psi_5(\phi) = \int^1_{-1} dy (b - a - c y) (1-y)/2 = (a - b) - c/3 | |||
24 | so the nodal basis is | |||
25 | \phi_0 = / -(1+x)/2 \ | |||
26 | \ 1/2 + 3/2 x + y / | |||
27 | \phi_1 = / 1+x \ | |||
28 | \ -1 - 3/2 x - 1/2 y / | |||
29 | \phi_2 = / 1+x \ | |||
30 | \ -(1+y)/2 / | |||
31 | \phi_3 = / -(1+x)/2 \ | |||
32 | \ (1+y) / | |||
33 | \phi_4 = / -1 - 1/2 x - 3/2 y \ | |||
34 | \ (1+y) / | |||
35 | \phi_5 = / 1/2 + x + 3/2 y \ | |||
36 | \ -(1+y)/2 / | |||
37 | */ | |||
38 | ||||
39 | static PetscErrorCode PetscDualSpaceDestroy_BDM(PetscDualSpace sp) | |||
40 | { | |||
41 | PetscDualSpace_BDM *bdm = (PetscDualSpace_BDM *) sp->data; | |||
42 | PetscInt i; | |||
43 | PetscErrorCode ierr; | |||
44 | ||||
45 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ; petscstack->line[petscstack->currentsize] = 45; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
46 | if (bdm->symmetries) { | |||
47 | PetscInt **selfSyms = bdm->symmetries[0]; | |||
48 | PetscScalar **selfFlps = bdm->flips[0]; | |||
49 | ||||
50 | if (selfSyms) { | |||
51 | PetscInt **fSyms = &selfSyms[-bdm->selfSymOff], i; | |||
52 | PetscScalar **fFlps = &selfFlps[-bdm->selfSymOff]; | |||
53 | ||||
54 | for (i = 0; i < bdm->numSelfSym; i++) { | |||
55 | ierr = PetscFree(fSyms[i])((*PetscTrFree)((void*)(fSyms[i]),55,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((fSyms[i]) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),55,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
56 | ierr = PetscFree(fFlps[i])((*PetscTrFree)((void*)(fFlps[i]),56,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((fFlps[i]) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),56,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
57 | } | |||
58 | ierr = PetscFree(fSyms)((*PetscTrFree)((void*)(fSyms),58,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((fSyms) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),58,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
59 | ierr = PetscFree(fFlps)((*PetscTrFree)((void*)(fFlps),59,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((fFlps) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),59,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
60 | } | |||
61 | ierr = PetscFree(bdm->symmetries)((*PetscTrFree)((void*)(bdm->symmetries),61,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((bdm->symmetries) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),61,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
62 | ierr = PetscFree(bdm->flips)((*PetscTrFree)((void*)(bdm->flips),62,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((bdm->flips) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),62,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
63 | } | |||
64 | for (i = 0; i < bdm->height; i++) { | |||
65 | ierr = PetscDualSpaceDestroy(&bdm->subspaces[i]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),65,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
66 | } | |||
67 | ierr = PetscFree(bdm->subspaces)((*PetscTrFree)((void*)(bdm->subspaces),67,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((bdm->subspaces) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),67,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
68 | ierr = PetscFree(bdm->numDof)((*PetscTrFree)((void*)(bdm->numDof),68,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((bdm->numDof) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),68,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
69 | ierr = PetscFree(bdm)((*PetscTrFree)((void*)(bdm),69,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((bdm) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),69,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
70 | PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize > 0) { petscstack->currentsize--; petscstack->function [petscstack->currentsize] = 0; petscstack->file[petscstack ->currentsize] = 0; petscstack->line[petscstack->currentsize ] = 0; petscstack->petscroutine[petscstack->currentsize ] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack-> hotdepth-1)); } ; } while (0); return(0);} while (0); | |||
71 | } | |||
72 | ||||
73 | static PetscErrorCode PetscDualSpaceBDMView_Ascii(PetscDualSpace sp, PetscViewer viewer) | |||
74 | { | |||
75 | PetscErrorCode ierr; | |||
76 | ||||
77 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ; petscstack->line[petscstack->currentsize] = 77; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
78 | ierr = PetscViewerASCIIPrintf(viewer, "BDM(%D) dual space\n", sp->order);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),78,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
79 | 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); | |||
80 | } | |||
81 | ||||
82 | static PetscErrorCode PetscDualSpaceView_BDM(PetscDualSpace sp, PetscViewer viewer) | |||
83 | { | |||
84 | PetscBool iascii; | |||
85 | PetscErrorCode ierr; | |||
86 | ||||
87 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ; petscstack->line[petscstack->currentsize] = 87; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
88 | PetscValidHeaderSpecific(sp, PETSCDUALSPACE_CLASSID, 1)do { if (!sp) return PetscError(((MPI_Comm)0x44000001),88,__func__ ,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if ( !PetscCheckPointer(sp,PETSC_OBJECT)) return PetscError(((MPI_Comm )0x44000001),88,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d" ,1); if (((PetscObject)(sp))->classid != PETSCDUALSPACE_CLASSID ) { if (((PetscObject)(sp))->classid == -1) return PetscError (((MPI_Comm)0x44000001),88,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d" ,1); else return PetscError(((MPI_Comm)0x44000001),88,__func__ ,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d" ,1); } } while (0); | |||
89 | PetscValidHeaderSpecific(viewer, PETSC_VIEWER_CLASSID, 2)do { if (!viewer) return PetscError(((MPI_Comm)0x44000001),89 ,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",2); if ( !PetscCheckPointer(viewer,PETSC_OBJECT)) return PetscError((( MPI_Comm)0x44000001),89,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d" ,2); if (((PetscObject)(viewer))->classid != PETSC_VIEWER_CLASSID ) { if (((PetscObject)(viewer))->classid == -1) return PetscError (((MPI_Comm)0x44000001),89,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d" ,2); else return PetscError(((MPI_Comm)0x44000001),89,__func__ ,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d" ,2); } } while (0); | |||
90 | ierr = PetscObjectTypeCompare((PetscObject) viewer, PETSCVIEWERASCII"ascii", &iascii);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),90,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
91 | if (iascii) {ierr = PetscDualSpaceBDMView_Ascii(sp, viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),91,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
92 | 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); | |||
93 | } | |||
94 | ||||
95 | static PetscErrorCode PetscDualSpaceSetFromOptions_BDM(PetscOptionItems *PetscOptionsObject,PetscDualSpace sp) | |||
96 | { | |||
97 | PetscErrorCode ierr; | |||
98 | ||||
99 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ; petscstack->line[petscstack->currentsize] = 99; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
100 | ierr = PetscOptionsHead(PetscOptionsObject,"PetscDualSpace BDM Options");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),100,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
101 | ierr = PetscOptionsTail()0; do {if (PetscOptionsObject->count != 1) do { do { ; if ( petscstack && petscstack->currentsize > 0) { petscstack ->currentsize--; petscstack->function[petscstack->currentsize ] = 0; petscstack->file[petscstack->currentsize] = 0; petscstack ->line[petscstack->currentsize] = 0; petscstack->petscroutine [petscstack->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth = (((petscstack->hotdepth-1)< (0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return (0);} while (0);} while(0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),101,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
102 | 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); | |||
103 | } | |||
104 | ||||
105 | static PetscErrorCode PetscDualSpaceDuplicate_BDM(PetscDualSpace sp, PetscDualSpace *spNew) | |||
106 | { | |||
107 | PetscInt order, Nc; | |||
108 | const char *name; | |||
109 | PetscErrorCode ierr; | |||
110 | ||||
111 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ; petscstack->line[petscstack->currentsize] = 111; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
112 | ierr = PetscDualSpaceCreate(PetscObjectComm((PetscObject) sp), spNew);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),112,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
113 | ierr = PetscObjectGetName((PetscObject) sp, &name);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),113,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
114 | ierr = PetscObjectSetName((PetscObject) *spNew, name);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),114,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
115 | ierr = PetscDualSpaceSetType(*spNew, PETSCDUALSPACEBDM"bdm");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),115,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
116 | ierr = PetscDualSpaceGetOrder(sp, &order);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),116,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
117 | ierr = PetscDualSpaceSetOrder(*spNew, order);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),117,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
118 | ierr = PetscDualSpaceGetNumComponents(sp, &Nc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),118,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
119 | ierr = PetscDualSpaceSetNumComponents(*spNew, Nc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),119,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
120 | 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); | |||
121 | } | |||
122 | ||||
123 | static PetscErrorCode PetscDualSpaceGetDimension_SingleCell_BDM(PetscDualSpace sp, PetscInt order, PetscInt *dim) | |||
124 | { | |||
125 | PetscDualSpace_BDM *bdm = (PetscDualSpace_BDM *) sp->data; | |||
126 | PetscReal D = 1.0; | |||
127 | PetscInt n, d; | |||
128 | PetscErrorCode ierr; | |||
129 | ||||
130 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ; petscstack->line[petscstack->currentsize] = 130; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
131 | *dim = -1; | |||
132 | ierr = DMGetDimension(sp->dm, &n);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),132,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
133 | if (!n) {*dim = 0; 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);} | |||
134 | if (bdm->simplexCell) { | |||
135 | for (d = 1; d <= n; ++d) { | |||
136 | D *= ((PetscReal) (order+d))/d; | |||
137 | } | |||
138 | *dim = (PetscInt) (D + 0.5); | |||
139 | } else { | |||
140 | *dim = 1; | |||
141 | for (d = 0; d < n; ++d) *dim *= (order+1); | |||
142 | } | |||
143 | if (!bdm->faceSpace) { | |||
144 | *dim *= sp->Nc; | |||
145 | } | |||
146 | 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); | |||
147 | } | |||
148 | ||||
149 | static PetscErrorCode PetscDualSpaceCreateHeightSubspace_BDM(PetscDualSpace sp, PetscInt height, PetscDualSpace *bdsp) | |||
150 | { | |||
151 | PetscDualSpace_BDM *bdm = (PetscDualSpace_BDM *) sp->data; | |||
152 | PetscInt order; | |||
153 | PetscErrorCode ierr; | |||
154 | ||||
155 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ; petscstack->line[petscstack->currentsize] = 155; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
156 | ierr = PetscDualSpaceGetOrder(sp, &order);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),156,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
157 | if (!height) { | |||
158 | ierr = PetscObjectReference((PetscObject) sp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),158,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
159 | *bdsp = sp; | |||
160 | } else if (!order) { | |||
161 | *bdsp = NULL((void*)0); | |||
162 | } else if (height == 1) { | |||
163 | DM dm, K; | |||
164 | PetscInt dim; | |||
165 | ||||
166 | ierr = PetscDualSpaceGetDM(sp, &dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),166,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
167 | ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),167,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
168 | if (height > dim || height < 0) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Asked for dual space at height %d for dimension %d reference element\n", height, dim)return PetscError(((MPI_Comm)0x44000001),168,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,63,PETSC_ERROR_INITIAL,"Asked for dual space at height %d for dimension %d reference element\n" ,height,dim); | |||
169 | ierr = PetscDualSpaceDuplicate(sp, bdsp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),169,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
170 | ierr = PetscDualSpaceCreateReferenceCell(*bdsp, dim-height, bdm->simplexCell, &K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),170,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
171 | ierr = PetscDualSpaceSetDM(*bdsp, K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),171,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
172 | ierr = DMDestroy(&K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),172,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
173 | ((PetscDualSpace_BDM *) (*bdsp)->data)->faceSpace = PETSC_TRUE; | |||
174 | ierr = PetscDualSpaceSetUp(*bdsp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),174,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
175 | } else { | |||
176 | *bdsp = NULL((void*)0); | |||
177 | } | |||
178 | 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); | |||
179 | } | |||
180 | ||||
181 | static PetscErrorCode PetscDualSpaceBDMCreateFaceFE(PetscDualSpace sp, PetscBool tensor, PetscInt faceDim, PetscInt order, PetscFE *fe) | |||
182 | { | |||
183 | DM K; | |||
184 | PetscSpace P; | |||
185 | PetscDualSpace Q; | |||
186 | PetscQuadrature q; | |||
187 | const PetscInt Nc = 1; | |||
188 | PetscInt quadPointsPerEdge; | |||
189 | PetscErrorCode ierr; | |||
190 | ||||
191 | /* Create space */ | |||
192 | ierr = PetscSpaceCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), &P);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),192,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
193 | ierr = PetscSpaceSetType(P, PETSCSPACEPOLYNOMIAL"poly");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),193,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
194 | ierr = PetscSpacePolynomialSetTensor(P, tensor);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),194,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
195 | ierr = PetscSpaceSetNumComponents(P, Nc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),195,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
196 | ierr = PetscSpaceSetNumVariables(P, faceDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),196,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
197 | ierr = PetscSpaceSetDegree(P, order, order);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),197,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
198 | ierr = PetscSpaceSetUp(P);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),198,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
199 | /* Create dual space */ | |||
200 | ierr = PetscDualSpaceCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), &Q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),200,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
201 | ierr = PetscDualSpaceSetType(Q, PETSCDUALSPACELAGRANGE"lagrange");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),201,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
202 | ierr = PetscDualSpaceCreateReferenceCell(Q, faceDim, tensor ? PETSC_FALSE : PETSC_TRUE, &K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),202,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
203 | ierr = PetscDualSpaceSetDM(Q, K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),203,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
204 | ierr = DMDestroy(&K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),204,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
205 | ierr = PetscDualSpaceSetNumComponents(Q, Nc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),205,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
206 | ierr = PetscDualSpaceSetOrder(Q, order);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),206,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
207 | ierr = PetscDualSpaceLagrangeSetTensor(Q, tensor);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),207,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
208 | ierr = PetscDualSpaceSetUp(Q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),208,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
209 | /* Create element */ | |||
210 | ierr = PetscFECreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), fe);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),210,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
211 | ierr = PetscFESetType(*fe, PETSCFEBASIC"basic");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),211,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
212 | ierr = PetscFESetBasisSpace(*fe, P);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),212,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
213 | ierr = PetscFESetDualSpace(*fe, Q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),213,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
214 | ierr = PetscFESetNumComponents(*fe, Nc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),214,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
215 | ierr = PetscFESetUp(*fe);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),215,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
216 | ierr = PetscSpaceDestroy(&P);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),216,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
217 | ierr = PetscDualSpaceDestroy(&Q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),217,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
218 | /* Create quadrature (with specified order if given) */ | |||
219 | quadPointsPerEdge = PetscMax(order + 1, 1)(((order + 1)<(1)) ? (1) : (order + 1)); | |||
220 | if (tensor) {ierr = PetscDTGaussTensorQuadrature(faceDim, 1, quadPointsPerEdge, -1.0, 1.0, &q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),220,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
221 | else {ierr = PetscDTGaussJacobiQuadrature(faceDim, 1, quadPointsPerEdge, -1.0, 1.0, &q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),221,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
222 | ierr = PetscFESetQuadrature(*fe, q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),222,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
223 | ierr = PetscQuadratureDestroy(&q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),223,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
224 | 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); | |||
225 | } | |||
226 | ||||
227 | static PetscErrorCode PetscDualSpaceBDMCreateCellFE(PetscDualSpace sp, PetscBool tensor, PetscInt dim, PetscInt Nc, PetscInt order, PetscFE *fe) | |||
228 | { | |||
229 | DM K; | |||
230 | PetscSpace P; | |||
231 | PetscDualSpace Q; | |||
232 | PetscQuadrature q; | |||
233 | PetscInt quadPointsPerEdge; | |||
234 | PetscErrorCode ierr; | |||
235 | ||||
236 | /* Create space */ | |||
237 | ierr = PetscSpaceCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), &P);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),237,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
238 | ierr = PetscSpaceSetType(P, PETSCSPACEPOLYNOMIAL"poly");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),238,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
239 | ierr = PetscSpacePolynomialSetTensor(P, tensor);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),239,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
240 | ierr = PetscSpaceSetNumComponents(P, Nc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),240,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
241 | ierr = PetscSpaceSetNumVariables(P, dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),241,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
242 | ierr = PetscSpaceSetDegree(P, order, order);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),242,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
243 | ierr = PetscSpaceSetUp(P);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),243,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
244 | /* Create dual space */ | |||
245 | /* TODO Needs NED1 dual space */ | |||
246 | ierr = PetscDualSpaceCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), &Q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),246,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
247 | ierr = PetscDualSpaceSetType(Q, PETSCDUALSPACELAGRANGE"lagrange");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),247,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
248 | ierr = PetscDualSpaceCreateReferenceCell(Q, dim, tensor ? PETSC_FALSE : PETSC_TRUE, &K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),248,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
249 | ierr = PetscDualSpaceSetDM(Q, K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),249,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
250 | ierr = DMDestroy(&K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),250,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
251 | ierr = PetscDualSpaceSetNumComponents(Q, Nc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),251,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
252 | ierr = PetscDualSpaceSetOrder(Q, order);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),252,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
253 | ierr = PetscDualSpaceLagrangeSetTensor(Q, tensor);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),253,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
254 | ierr = PetscDualSpaceSetUp(Q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),254,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
255 | /* Create element */ | |||
256 | ierr = PetscFECreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), fe);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),256,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
257 | ierr = PetscFESetBasisSpace(*fe, P);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),257,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
258 | ierr = PetscFESetDualSpace(*fe, Q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),258,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
259 | ierr = PetscFESetNumComponents(*fe, Nc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),259,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
260 | ierr = PetscFESetUp(*fe);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),260,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
261 | ierr = PetscSpaceDestroy(&P);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),261,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
262 | ierr = PetscDualSpaceDestroy(&Q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),262,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
263 | /* Create quadrature (with specified order if given) */ | |||
264 | quadPointsPerEdge = PetscMax(order + 1, 1)(((order + 1)<(1)) ? (1) : (order + 1)); | |||
265 | if (tensor) {ierr = PetscDTGaussTensorQuadrature(dim, 1, quadPointsPerEdge, -1.0, 1.0, &q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),265,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
266 | else {ierr = PetscDTGaussJacobiQuadrature(dim, 1, quadPointsPerEdge, -1.0, 1.0, &q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),266,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
267 | ierr = PetscFESetQuadrature(*fe, q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),267,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
268 | ierr = PetscQuadratureDestroy(&q);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),268,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
269 | 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); | |||
270 | } | |||
271 | ||||
272 | static PetscErrorCode PetscDualSpaceSetUp_BDM(PetscDualSpace sp) | |||
273 | { | |||
274 | PetscDualSpace_BDM *bdm = (PetscDualSpace_BDM *) sp->data; | |||
275 | DM dm = sp->dm; | |||
276 | PetscInt order = sp->order; | |||
277 | PetscInt Nc = sp->Nc; | |||
278 | PetscBool faceSp = bdm->faceSpace; | |||
279 | MPI_Comm comm; | |||
280 | PetscSection csection; | |||
281 | Vec coordinates; | |||
282 | PetscInt depth, dim, cdim, pdimMax, pStart, pEnd, p, *pStratStart, *pStratEnd, coneSize, d, f = 0, c; | |||
283 | PetscBool simplex; | |||
284 | PetscErrorCode ierr; | |||
285 | ||||
286 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ; petscstack->line[petscstack->currentsize] = 286; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
287 | ierr = PetscObjectGetComm((PetscObject) sp, &comm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),287,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
288 | ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),288,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
289 | ierr = DMGetCoordinateDim(dm, &cdim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),289,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
290 | ierr = DMPlexGetDepth(dm, &depth);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),290,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
291 | ierr = DMPlexGetChart(dm, &pStart, &pEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),291,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
292 | if (depth != dim) SETERRQ2(comm, PETSC_ERR_ARG_WRONG, "BDM element requires interpolated meshes, but depth %D != topological dimension %D", depth, dim)return PetscError(comm,292,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,62,PETSC_ERROR_INITIAL,"BDM element requires interpolated meshes, but depth %D != topological dimension %D" ,depth,dim); | |||
293 | if (!order) SETERRQ(comm, PETSC_ERR_ARG_WRONG, "BDM elements not defined for order 0")return PetscError(comm,293,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,62,PETSC_ERROR_INITIAL,"BDM elements not defined for order 0" ); | |||
294 | if (!faceSp && Nc != cdim) SETERRQ2(comm, PETSC_ERR_ARG_WRONG, "BDM element has %D components != %D space dimension", Nc, cdim)return PetscError(comm,294,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,62,PETSC_ERROR_INITIAL,"BDM element has %D components != %D space dimension" ,Nc,cdim); | |||
295 | ierr = PetscCalloc1(dim+1, &bdm->numDof)PetscMallocA(1,PETSC_TRUE,295,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(dim+1)*sizeof(**(&bdm->numDof)),(&bdm-> numDof));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),295,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
296 | ierr = PetscMalloc2(depth+1, &pStratStart, depth+1, &pStratEnd)PetscMallocA(2,PETSC_FALSE,296,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(depth+1)*sizeof(**(&pStratStart)),(&pStratStart ),(size_t)(depth+1)*sizeof(**(&pStratEnd)),(&pStratEnd ));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),296,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
297 | for (d = 0; d <= depth; ++d) {ierr = DMPlexGetDepthStratum(dm, d, &pStratStart[d], &pStratEnd[d]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),297,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
298 | ierr = DMPlexGetConeSize(dm, pStratStart[depth], &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),298,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
299 | ierr = DMGetCoordinateSection(dm, &csection);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),299,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
300 | ierr = DMGetCoordinatesLocal(dm, &coordinates);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),300,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
301 | if (coneSize == dim+1) simplex = PETSC_TRUE; | |||
302 | else if (coneSize == 2 * dim) simplex = PETSC_FALSE; | |||
303 | else SETERRQ(comm, PETSC_ERR_SUP, "Only support simplices and tensor product cells")return PetscError(comm,303,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,56,PETSC_ERROR_INITIAL,"Only support simplices and tensor product cells" ); | |||
304 | bdm->simplexCell = simplex; | |||
305 | bdm->height = 0; | |||
306 | bdm->subspaces = NULL((void*)0); | |||
307 | /* Create the height 1 subspace for every dimension */ | |||
308 | if (order > 0 && dim > 0) { | |||
309 | PetscInt i; | |||
310 | ||||
311 | bdm->height = dim; | |||
312 | ierr = PetscMalloc1(dim, &bdm->subspaces)PetscMallocA(1,PETSC_FALSE,312,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(dim)*sizeof(**(&bdm->subspaces)),(&bdm-> subspaces));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),312,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
313 | ierr = PetscDualSpaceCreateHeightSubspace_BDM(sp, 1, &bdm->subspaces[0]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),313,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
314 | ierr = PetscDualSpaceSetUp(bdm->subspaces[0]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),314,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
315 | for (i = 1; i < dim; i++) { | |||
316 | ierr = PetscDualSpaceGetHeightSubspace(bdm->subspaces[i-1], 1, &bdm->subspaces[i]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),316,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
317 | ierr = PetscObjectReference((PetscObject) bdm->subspaces[i]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),317,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
318 | } | |||
319 | } | |||
320 | ierr = PetscDualSpaceGetDimension_SingleCell_BDM(sp, sp->order, &pdimMax);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),320,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
321 | pdimMax *= (pStratEnd[depth] - pStratStart[depth]); | |||
322 | ierr = PetscMalloc1(pdimMax, &sp->functional)PetscMallocA(1,PETSC_FALSE,322,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(pdimMax)*sizeof(**(&sp->functional)),(&sp ->functional));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),322,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
323 | if (!dim) { | |||
324 | bdm->numDof[0] = 0; | |||
325 | } else { | |||
326 | PetscFE faceFE, cellFE; | |||
327 | PetscSection section; | |||
328 | CellRefiner cellRefiner; | |||
329 | PetscInt faceDim = PetscMax(dim-1, 1)(((dim-1)<(1)) ? (1) : (dim-1)), faceNum = 0; | |||
330 | PetscReal *v0 = NULL((void*)0), *J = NULL((void*)0), *detJ = NULL((void*)0); | |||
331 | ||||
332 | ierr = PetscSectionCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), §ion);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),332,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
333 | ierr = PetscSectionSetChart(section, pStart, pEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),333,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
334 | if (!faceSp) { | |||
335 | ierr = DMPlexGetCellRefiner_Internal(dm, &cellRefiner);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),335,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
336 | ierr = CellRefinerGetAffineFaceTransforms_Internal(cellRefiner, NULL((void*)0), &v0, &J, NULL((void*)0), &detJ);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),336,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
337 | } | |||
338 | /* Create P_q(f) */ | |||
339 | ierr = PetscDualSpaceBDMCreateFaceFE(sp, simplex ? PETSC_FALSE : PETSC_TRUE, faceDim, order, &faceFE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),339,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
340 | /* Create NED^1_{q-1}(T) = P^d_{q-2} + S_{q-1}(T) */ | |||
341 | ierr = PetscDualSpaceBDMCreateCellFE(sp, simplex ? PETSC_FALSE : PETSC_TRUE, faceDim, Nc, order-1, &cellFE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),341,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
342 | for (p = pStart; p < pEnd; p++) { | |||
343 | PetscBool isFace, isCell; | |||
344 | PetscInt d; | |||
345 | ||||
346 | for (d = 0; d < depth; d++) {if (p >= pStratStart[d] && p < pStratEnd[d]) break;} | |||
347 | isFace = ((d == dim) && faceSp) || ((d == dim-1) && !faceSp) ? PETSC_TRUE : PETSC_FALSE; | |||
348 | isCell = ((d == dim) && !faceSp) ? PETSC_TRUE : PETSC_FALSE; | |||
349 | if (isFace) { | |||
350 | PetscQuadrature fq; | |||
351 | PetscReal *B, n[3]; | |||
352 | const PetscReal *fqpoints, *fqweights; | |||
353 | PetscInt faceDim = PetscMax(dim-1, 1)(((dim-1)<(1)) ? (1) : (dim-1)), Nq, q, fdim, fb; | |||
354 | ||||
355 | if (cdim == 1) {n[0] = 0.; n[1] = 1.;} | |||
356 | else {ierr = DMPlexComputeCellGeometryFVM(dm, p, NULL((void*)0), NULL((void*)0), n);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),356,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0);} | |||
357 | ierr = PetscFEGetDefaultTabulation(faceFE, &B, NULL((void*)0), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),357,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
358 | ierr = PetscFEGetQuadrature(faceFE, &fq);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),358,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
359 | ierr = PetscQuadratureGetData(fq, NULL((void*)0), NULL((void*)0), &Nq, &fqpoints, &fqweights);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),359,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
360 | /* Create a dual basis vector for each basis function */ | |||
361 | ierr = PetscFEGetDimension(faceFE, &fdim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),361,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
362 | for (fb = 0; fb < fdim; ++fb, ++f) { | |||
363 | PetscReal *qpoints, *qweights; | |||
364 | ||||
365 | ierr = PetscQuadratureCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), &sp->functional[f]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),365,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
366 | ierr = PetscMalloc1(Nq*dim, &qpoints)PetscMallocA(1,PETSC_FALSE,366,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(Nq*dim)*sizeof(**(&qpoints)),(&qpoints));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),366,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
367 | ierr = PetscCalloc1(Nq*Nc, &qweights)PetscMallocA(1,PETSC_TRUE,367,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(Nq*Nc)*sizeof(**(&qweights)),(&qweights));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),367,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
368 | ierr = PetscQuadratureSetOrder(sp->functional[f], order);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),368,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
369 | ierr = PetscQuadratureSetData(sp->functional[f], dim, Nc, Nq, qpoints, qweights);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),369,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
370 | for (q = 0; q < Nq; ++q) { | |||
371 | PetscInt g, h; | |||
372 | ||||
373 | if (faceDim < dim) { | |||
374 | /* Transform quadrature points from face coordinates to cell coordinates */ | |||
375 | for (g = 0; g < dim; ++g) { | |||
376 | qpoints[q*dim+g] = v0[faceNum*dim+g]; | |||
377 | for (h = 0; h < faceDim; ++h) qpoints[q*dim+g] += J[faceNum*dim*faceDim+g*faceDim+h] * fqpoints[q*faceDim+h]; | |||
378 | } | |||
379 | } else { | |||
380 | for (g = 0; g < dim; ++g) qpoints[q*dim+g] = fqpoints[q*faceDim+g]; | |||
381 | } | |||
382 | /* Make Radon measure for integral \hat n p ds */ | |||
383 | for (c = 0; c < Nc; ++c) qweights[q*Nc+c] = B[q*fdim+fb]*n[c]*fqweights[q]*(detJ ? detJ[faceNum] : 1.0); | |||
384 | } | |||
385 | } | |||
386 | bdm->numDof[d] = fdim; | |||
387 | ierr = PetscSectionSetDof(section, p, bdm->numDof[d]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),387,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
388 | ++faceNum; | |||
389 | } | |||
390 | if (order < 2) continue; | |||
391 | if (isCell) { | |||
392 | PetscSpace csp; | |||
393 | PetscQuadrature cq; | |||
394 | PetscReal *B; | |||
395 | const PetscReal *cqpoints, *cqweights; | |||
396 | PetscInt Nq, q, cdim, cb; | |||
397 | ||||
398 | ierr = PetscFEGetBasisSpace(cellFE, &csp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),398,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
399 | ierr = PetscFEGetQuadrature(cellFE, &cq);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),399,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
400 | ierr = PetscQuadratureGetData(cq, NULL((void*)0), NULL((void*)0), &Nq, &cqpoints, &cqweights);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),400,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
401 | /* Create a dual basis vector for each basis function */ | |||
402 | ierr = PetscSpaceGetDimension(csp, &cdim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),402,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
403 | ierr = PetscMalloc1(Nq*cdim*Nc, &B)PetscMallocA(1,PETSC_FALSE,403,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(Nq*cdim*Nc)*sizeof(**(&B)),(&B));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),403,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
404 | ierr = PetscSpaceEvaluate(csp, Nq, cqpoints, B, NULL((void*)0), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),404,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
405 | for (cb = 0; cb < cdim; ++cb, ++f) { | |||
406 | PetscReal *qpoints, *qweights; | |||
407 | ||||
408 | ierr = PetscQuadratureCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), &sp->functional[f]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),408,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
409 | ierr = PetscMalloc1(Nq*dim, &qpoints)PetscMallocA(1,PETSC_FALSE,409,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(Nq*dim)*sizeof(**(&qpoints)),(&qpoints));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),409,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
410 | ierr = PetscCalloc1(Nq*Nc, &qweights)PetscMallocA(1,PETSC_TRUE,410,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(Nq*Nc)*sizeof(**(&qweights)),(&qweights));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),410,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
411 | ierr = PetscQuadratureSetOrder(sp->functional[f], order);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),411,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
412 | ierr = PetscQuadratureSetData(sp->functional[f], dim, Nc, Nq, qpoints, qweights);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),412,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
413 | ierr = PetscArraycpy(qpoints, cqpoints, Nq*dim)((sizeof(*(qpoints)) != sizeof(*(cqpoints))) || PetscMemcpy(qpoints ,cqpoints,(Nq*dim)*sizeof(*(qpoints))));;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),413,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
414 | for (q = 0; q < Nq; ++q) { | |||
415 | /* Make Radon measure for integral p dx */ | |||
416 | for (c = 0; c < Nc; ++c) qweights[q*Nc+c] = B[(q*cdim+cb)*Nc+c]*cqweights[q*Nc+c]; | |||
417 | } | |||
418 | } | |||
419 | ierr = PetscFree(B)((*PetscTrFree)((void*)(B),419,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((B) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),419,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
420 | bdm->numDof[d] = cdim; | |||
421 | ierr = PetscSectionSetDof(section, p, bdm->numDof[d]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),421,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
422 | } | |||
423 | } | |||
424 | ierr = PetscFEDestroy(&faceFE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),424,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
425 | ierr = PetscFEDestroy(&cellFE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),425,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
426 | ierr = PetscFree(v0)((*PetscTrFree)((void*)(v0),426,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((v0) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),426,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
427 | ierr = PetscFree(J)((*PetscTrFree)((void*)(J),427,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((J) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),427,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
428 | ierr = PetscFree(detJ)((*PetscTrFree)((void*)(detJ),428,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((detJ) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),428,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
429 | ierr = PetscSectionSetUp(section);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),429,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
430 | { /* reorder to closure order */ | |||
431 | PetscQuadrature *reorder = NULL((void*)0); | |||
432 | PetscInt *key, count; | |||
433 | ||||
434 | ierr = PetscCalloc1(f, &key)PetscMallocA(1,PETSC_TRUE,434,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(f)*sizeof(**(&key)),(&key));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),434,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
435 | ierr = PetscMalloc1(f, &reorder)PetscMallocA(1,PETSC_FALSE,435,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(f)*sizeof(**(&reorder)),(&reorder));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),435,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
436 | for (p = pStratStart[depth], count = 0; p < pStratEnd[depth]; p++) { | |||
437 | PetscInt *closure = NULL((void*)0), closureSize, c; | |||
438 | ||||
439 | ierr = DMPlexGetTransitiveClosure(dm, p, PETSC_TRUE, &closureSize, &closure);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),439,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
440 | for (c = 0; c < closureSize*2; c += 2) { | |||
441 | PetscInt point = closure[c], dof, off, i; | |||
442 | ||||
443 | ierr = PetscSectionGetDof(section, point, &dof);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),443,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
444 | ierr = PetscSectionGetOffset(section, point, &off);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),444,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
445 | for (i = 0; i < dof; ++i) { | |||
446 | PetscInt fi = off + i; | |||
447 | ||||
448 | if (!key[fi]) { | |||
449 | key[fi] = 1; | |||
450 | reorder[count++] = sp->functional[fi]; | |||
451 | } | |||
452 | } | |||
453 | } | |||
454 | ierr = DMPlexRestoreTransitiveClosure(dm, p, PETSC_TRUE, &closureSize, &closure);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),454,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
455 | } | |||
456 | ierr = PetscFree(key)((*PetscTrFree)((void*)(key),456,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((key) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),456,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
457 | ierr = PetscFree(sp->functional)((*PetscTrFree)((void*)(sp->functional),457,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((sp->functional) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),457,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
458 | sp->functional = reorder; | |||
459 | } | |||
460 | ierr = PetscSectionDestroy(§ion);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),460,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
461 | } | |||
462 | if (pStratEnd[depth] == 1 && f != pdimMax) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Number of dual basis vectors %D not equal to dimension %D", f, pdimMax)return PetscError(((MPI_Comm)0x44000001),462,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,77,PETSC_ERROR_INITIAL,"Number of dual basis vectors %D not equal to dimension %D" ,f,pdimMax); | |||
463 | if (f > pdimMax) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Number of dual basis vectors %D is greater than max size %D", f, pdimMax)return PetscError(((MPI_Comm)0x44000001),463,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,77,PETSC_ERROR_INITIAL,"Number of dual basis vectors %D is greater than max size %D" ,f,pdimMax); | |||
464 | ierr = PetscFree2(pStratStart, pStratEnd)PetscFreeA(2,464,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,&(pStratStart),&(pStratEnd));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),464,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
465 | 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); | |||
466 | } | |||
467 | ||||
468 | static PetscErrorCode PetscDualSpaceGetDimension_BDM(PetscDualSpace sp, PetscInt *dim) | |||
469 | { | |||
470 | DM K; | |||
471 | const PetscInt *numDof; | |||
472 | PetscInt spatialDim, cEnd, size = 0, d; | |||
473 | PetscErrorCode ierr; | |||
474 | ||||
475 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ; petscstack->line[petscstack->currentsize] = 475; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
476 | ierr = PetscDualSpaceGetDM(sp, &K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),476,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
477 | ierr = PetscDualSpaceGetNumDof(sp, &numDof);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),477,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
478 | ierr = DMGetDimension(K, &spatialDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),478,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
479 | ierr = DMPlexGetHeightStratum(K, 0, NULL((void*)0), &cEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),479,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
480 | if (cEnd == 1) {ierr = PetscDualSpaceGetDimension_SingleCell_BDM(sp, sp->order, dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),480,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); 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);} | |||
481 | for (d = 0; d <= spatialDim; ++d) { | |||
482 | PetscInt pStart, pEnd; | |||
483 | ||||
484 | ierr = DMPlexGetDepthStratum(K, d, &pStart, &pEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),484,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
485 | size += (pEnd-pStart)*numDof[d]; | |||
486 | } | |||
487 | *dim = size; | |||
488 | 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); | |||
489 | } | |||
490 | ||||
491 | static PetscErrorCode PetscDualSpaceGetNumDof_BDM(PetscDualSpace sp, const PetscInt **numDof) | |||
492 | { | |||
493 | PetscDualSpace_BDM *bdm = (PetscDualSpace_BDM *) sp->data; | |||
494 | ||||
495 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ; petscstack->line[petscstack->currentsize] = 495; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
496 | *numDof = bdm->numDof; | |||
497 | 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); | |||
498 | } | |||
499 | ||||
500 | static PetscErrorCode PetscDualSpaceGetHeightSubspace_BDM(PetscDualSpace sp, PetscInt height, PetscDualSpace *bdsp) | |||
501 | { | |||
502 | PetscDualSpace_BDM *bdm = (PetscDualSpace_BDM *) sp->data; | |||
503 | PetscErrorCode ierr; | |||
504 | ||||
505 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ; petscstack->line[petscstack->currentsize] = 505; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
506 | PetscValidHeaderSpecific(sp, PETSCDUALSPACE_CLASSID, 1)do { if (!sp) return PetscError(((MPI_Comm)0x44000001),506,__func__ ,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if ( !PetscCheckPointer(sp,PETSC_OBJECT)) return PetscError(((MPI_Comm )0x44000001),506,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d" ,1); if (((PetscObject)(sp))->classid != PETSCDUALSPACE_CLASSID ) { if (((PetscObject)(sp))->classid == -1) return PetscError (((MPI_Comm)0x44000001),506,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d" ,1); else return PetscError(((MPI_Comm)0x44000001),506,__func__ ,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d" ,1); } } while (0); | |||
507 | PetscValidPointer(bdsp, 2)do { if (!bdsp) return PetscError(((MPI_Comm)0x44000001),507, __func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if (!PetscCheckPointer(bdsp,PETSC_CHAR)) return PetscError(((MPI_Comm )0x44000001),507,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",2); } while (0); | |||
508 | if (height == 0) { | |||
509 | *bdsp = sp; | |||
510 | } else { | |||
511 | DM dm; | |||
512 | PetscInt dim; | |||
513 | ||||
514 | ierr = PetscDualSpaceGetDM(sp, &dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),514,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
515 | ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),515,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
516 | if (height > dim || height < 0) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Asked for dual space at height %D for dimension %D reference element\n", height, dim)return PetscError(((MPI_Comm)0x44000001),516,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,63,PETSC_ERROR_INITIAL,"Asked for dual space at height %D for dimension %D reference element\n" ,height,dim); | |||
517 | if (height <= bdm->height) {*bdsp = bdm->subspaces[height-1];} | |||
518 | else {*bdsp = NULL((void*)0);} | |||
519 | } | |||
520 | 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); | |||
521 | } | |||
522 | ||||
523 | #define BaryIndex(perEdge,a,b,c)(((b)*(2*perEdge+1-(b)))/2)+(c) (((b)*(2*perEdge+1-(b)))/2)+(c) | |||
524 | ||||
525 | #define CartIndex(perEdge,a,b)(perEdge*(a)+b) (perEdge*(a)+b) | |||
526 | ||||
527 | static PetscErrorCode PetscDualSpaceGetSymmetries_BDM(PetscDualSpace sp, const PetscInt ****perms, const PetscScalar ****rots) | |||
528 | { | |||
529 | ||||
530 | PetscDualSpace_BDM *bdm = (PetscDualSpace_BDM *) sp->data; | |||
531 | PetscInt dim, order, p, Nc; | |||
532 | PetscErrorCode ierr; | |||
533 | ||||
534 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ; petscstack->line[petscstack->currentsize] = 534; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
535 | ierr = PetscDualSpaceGetOrder(sp, &order);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),535,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
536 | ierr = PetscDualSpaceGetNumComponents(sp, &Nc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),536,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
537 | ierr = DMGetDimension(sp->dm, &dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),537,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
538 | if (dim < 1) 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); | |||
| ||||
539 | if (dim > 3) SETERRQ1(PetscObjectComm((PetscObject) sp), PETSC_ERR_SUP, "BDM symmetries not implemented for dim = %D > 3", dim)return PetscError(PetscObjectComm((PetscObject) sp),539,__func__ ,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,56,PETSC_ERROR_INITIAL,"BDM symmetries not implemented for dim = %D > 3" ,dim); | |||
540 | if (!bdm->symmetries) { /* store symmetries */ | |||
541 | PetscInt ***symmetries, **cellSymmetries; | |||
542 | PetscScalar ***flips, **cellFlips; | |||
543 | PetscInt numPoints, numFaces, d; | |||
544 | ||||
545 | if (bdm->simplexCell) { | |||
546 | numPoints = 1; | |||
547 | for (d = 0; d < dim; d++) numPoints = numPoints * 2 + 1; | |||
548 | numFaces = 1 + dim; | |||
549 | } else { | |||
550 | numPoints = PetscPowInt(3,dim); | |||
551 | numFaces = 2 * dim; | |||
552 | } | |||
553 | ierr = PetscCalloc1(numPoints, &symmetries)PetscMallocA(1,PETSC_TRUE,553,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(numPoints)*sizeof(**(&symmetries)),(&symmetries ));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),553,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
554 | ierr = PetscCalloc1(numPoints, &flips)PetscMallocA(1,PETSC_TRUE,554,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(numPoints)*sizeof(**(&flips)),(&flips));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),554,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
555 | /* compute self symmetries */ | |||
556 | bdm->numSelfSym = 2 * numFaces; | |||
557 | bdm->selfSymOff = numFaces; | |||
558 | ierr = PetscCalloc1(2*numFaces, &cellSymmetries)PetscMallocA(1,PETSC_TRUE,558,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(2*numFaces)*sizeof(**(&cellSymmetries)),(&cellSymmetries ));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),558,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
559 | ierr = PetscCalloc1(2*numFaces, &cellFlips)PetscMallocA(1,PETSC_TRUE,559,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(2*numFaces)*sizeof(**(&cellFlips)),(&cellFlips ));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),559,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
560 | /* we want to be able to index symmetries directly with the orientations, which range from [-numFaces,numFaces) */ | |||
561 | symmetries[0] = &cellSymmetries[bdm->selfSymOff]; | |||
562 | flips[0] = &cellFlips[bdm->selfSymOff]; | |||
563 | switch (dim) { | |||
564 | case 1: /* Edge symmetries */ | |||
565 | { | |||
566 | PetscScalar *invert; | |||
567 | PetscInt *reverse; | |||
568 | PetscInt dofPerEdge = order+1, eNc = 1 /* ??? */, i, j; | |||
569 | ||||
570 | ierr = PetscMalloc1(dofPerEdge*eNc, &reverse)PetscMallocA(1,PETSC_FALSE,570,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(dofPerEdge*eNc)*sizeof(**(&reverse)),(&reverse ));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),570,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
571 | ierr = PetscMalloc1(dofPerEdge*eNc, &invert)PetscMallocA(1,PETSC_FALSE,571,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(dofPerEdge*eNc)*sizeof(**(&invert)),(&invert ));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),571,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
572 | for (i = 0; i < dofPerEdge; ++i) { | |||
573 | for (j = 0; j < eNc; ++j) { | |||
574 | reverse[i*eNc + j] = eNc * (dofPerEdge - 1 - i) + j; | |||
575 | invert[i*eNc + j] = -1.0; | |||
576 | } | |||
577 | } | |||
578 | symmetries[0][-2] = reverse; | |||
579 | flips[0][-2] = invert; | |||
580 | ||||
581 | /* yes, this is redundant, but it makes it easier to cleanup if I don't have to worry about what not to free */ | |||
582 | ierr = PetscMalloc1(dofPerEdge*eNc, &reverse)PetscMallocA(1,PETSC_FALSE,582,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(dofPerEdge*eNc)*sizeof(**(&reverse)),(&reverse ));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),582,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
583 | ierr = PetscMalloc1(dofPerEdge*eNc, &invert)PetscMallocA(1,PETSC_FALSE,583,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(dofPerEdge*eNc)*sizeof(**(&invert)),(&invert ));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),583,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
584 | for (i = 0; i < dofPerEdge; i++) { | |||
585 | for (j = 0; j < eNc; j++) { | |||
586 | reverse[i*eNc + j] = eNc * (dofPerEdge - 1 - i) + j; | |||
587 | invert[i*eNc + j] = -1.0; | |||
588 | } | |||
589 | } | |||
590 | symmetries[0][1] = reverse; | |||
591 | flips[0][1] = invert; | |||
592 | break; | |||
593 | } | |||
594 | case 2: /* Face symmetries */ | |||
595 | { | |||
596 | PetscInt dofPerEdge = bdm->simplexCell ? (order - 2) : (order - 1), s; | |||
597 | PetscInt dofPerFace; | |||
598 | ||||
599 | for (s = -numFaces; s < numFaces; s++) { | |||
600 | PetscScalar *flp; | |||
601 | PetscInt *sym, fNc = 1, i, j, k, l; | |||
602 | ||||
603 | if (!s) continue; | |||
604 | if (bdm->simplexCell) { | |||
605 | dofPerFace = (dofPerEdge * (dofPerEdge + 1))/2; | |||
606 | ierr = PetscMalloc1(fNc*dofPerFace,&sym)PetscMallocA(1,PETSC_FALSE,606,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(fNc*dofPerFace)*sizeof(**(&sym)),(&sym));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),606,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
607 | ierr = PetscMalloc1(fNc*dofPerFace,&flp)PetscMallocA(1,PETSC_FALSE,607,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(fNc*dofPerFace)*sizeof(**(&flp)),(&flp));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),607,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
608 | for (j = 0, l = 0; j < dofPerEdge; j++) { | |||
609 | for (k = 0; k < dofPerEdge - j; k++, l++) { | |||
610 | i = dofPerEdge - 1 - j - k; | |||
611 | switch (s) { | |||
612 | case -3: | |||
613 | sym[fNc*l] = BaryIndex(dofPerEdge,i,k,j)(((k)*(2*dofPerEdge+1-(k)))/2)+(j); | |||
614 | break; | |||
615 | case -2: | |||
616 | sym[fNc*l] = BaryIndex(dofPerEdge,j,i,k)(((i)*(2*dofPerEdge+1-(i)))/2)+(k); | |||
617 | break; | |||
618 | case -1: | |||
619 | sym[fNc*l] = BaryIndex(dofPerEdge,k,j,i)(((j)*(2*dofPerEdge+1-(j)))/2)+(i); | |||
620 | break; | |||
621 | case 1: | |||
622 | sym[fNc*l] = BaryIndex(dofPerEdge,k,i,j)(((i)*(2*dofPerEdge+1-(i)))/2)+(j); | |||
623 | break; | |||
624 | case 2: | |||
625 | sym[fNc*l] = BaryIndex(dofPerEdge,j,k,i)(((k)*(2*dofPerEdge+1-(k)))/2)+(i); | |||
626 | break; | |||
627 | } | |||
628 | flp[fNc*l] = s < 0 ? -1.0 : 1.0; | |||
629 | } | |||
630 | } | |||
631 | } else { | |||
632 | dofPerFace = dofPerEdge * dofPerEdge; | |||
633 | ierr = PetscMalloc1(fNc*dofPerFace,&sym)PetscMallocA(1,PETSC_FALSE,633,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(fNc*dofPerFace)*sizeof(**(&sym)),(&sym));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),633,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
634 | ierr = PetscMalloc1(fNc*dofPerFace,&flp)PetscMallocA(1,PETSC_FALSE,634,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(fNc*dofPerFace)*sizeof(**(&flp)),(&flp));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),634,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
635 | for (j = 0, l = 0; j < dofPerEdge; j++) { | |||
636 | for (k = 0; k < dofPerEdge; k++, l++) { | |||
637 | switch (s) { | |||
638 | case -4: | |||
639 | sym[fNc*l] = CartIndex(dofPerEdge,k,j)(dofPerEdge*(k)+j); | |||
640 | break; | |||
641 | case -3: | |||
642 | sym[fNc*l] = CartIndex(dofPerEdge,(dofPerEdge - 1 - j),k)(dofPerEdge*((dofPerEdge - 1 - j))+k); | |||
643 | break; | |||
644 | case -2: | |||
645 | sym[fNc*l] = CartIndex(dofPerEdge,(dofPerEdge - 1 - k),(dofPerEdge - 1 - j))(dofPerEdge*((dofPerEdge - 1 - k))+(dofPerEdge - 1 - j)); | |||
646 | break; | |||
647 | case -1: | |||
648 | sym[fNc*l] = CartIndex(dofPerEdge,j,(dofPerEdge - 1 - k))(dofPerEdge*(j)+(dofPerEdge - 1 - k)); | |||
649 | break; | |||
650 | case 1: | |||
651 | sym[fNc*l] = CartIndex(dofPerEdge,(dofPerEdge - 1 - k),j)(dofPerEdge*((dofPerEdge - 1 - k))+j); | |||
652 | break; | |||
653 | case 2: | |||
654 | sym[fNc*l] = CartIndex(dofPerEdge,(dofPerEdge - 1 - j),(dofPerEdge - 1 - k))(dofPerEdge*((dofPerEdge - 1 - j))+(dofPerEdge - 1 - k)); | |||
655 | break; | |||
656 | case 3: | |||
657 | sym[fNc*l] = CartIndex(dofPerEdge,k,(dofPerEdge - 1 - j))(dofPerEdge*(k)+(dofPerEdge - 1 - j)); | |||
658 | break; | |||
659 | } | |||
660 | flp[fNc*l] = s < 0 ? -1.0 : 1.0; | |||
661 | } | |||
662 | } | |||
663 | } | |||
664 | for (i = 0; i < dofPerFace; i++) { | |||
665 | sym[fNc*i] *= fNc; | |||
666 | for (j = 1; j < fNc; j++) { | |||
667 | sym[fNc*i+j] = sym[fNc*i] + j; | |||
668 | flp[fNc*i+j] = flp[fNc*i]; | |||
669 | } | |||
670 | } | |||
671 | symmetries[0][s] = sym; | |||
672 | flips[0][s] = flp; | |||
673 | } | |||
674 | break; | |||
675 | } | |||
676 | default: SETERRQ1(PetscObjectComm((PetscObject) sp), PETSC_ERR_SUP, "No symmetries for point of dimension %D", dim)return PetscError(PetscObjectComm((PetscObject) sp),676,__func__ ,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,56,PETSC_ERROR_INITIAL,"No symmetries for point of dimension %D" ,dim); | |||
677 | } | |||
678 | /* Copy subspace symmetries */ | |||
679 | { | |||
680 | PetscDualSpace hsp; | |||
681 | DM K; | |||
682 | const PetscInt ***hsymmetries; | |||
683 | const PetscScalar ***hflips; | |||
684 | ||||
685 | ierr = PetscDualSpaceGetHeightSubspace(sp, 1, &hsp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),685,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
686 | ierr = PetscDualSpaceGetSymmetries(hsp, &hsymmetries, &hflips);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),686,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
687 | if (hsymmetries || hflips) { | |||
688 | PetscBool *seen; | |||
689 | const PetscInt *cone; | |||
690 | PetscInt KclosureSize, *Kclosure = NULL((void*)0); | |||
691 | ||||
692 | ierr = PetscDualSpaceGetDM(sp, &K);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),692,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
693 | ierr = PetscCalloc1(numPoints, &seen)PetscMallocA(1,PETSC_TRUE,693,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(numPoints)*sizeof(**(&seen)),(&seen));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),693,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
694 | ierr = DMPlexGetCone(K, 0, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),694,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
695 | ierr = DMPlexGetTransitiveClosure(K, 0, PETSC_TRUE, &KclosureSize, &Kclosure);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),695,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
696 | for (p = 0; p < numFaces; ++p) { | |||
697 | PetscInt closureSize, *closure = NULL((void*)0), q; | |||
698 | ||||
699 | ierr = DMPlexGetTransitiveClosure(K, cone[p], PETSC_TRUE, &closureSize, &closure);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),699,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
700 | for (q = 0; q < closureSize; ++q) { | |||
701 | PetscInt point = closure[q*2], r; | |||
702 | ||||
703 | if (!seen[point]) { | |||
704 | for (r = 0; r < KclosureSize; ++r) { | |||
705 | if (Kclosure[r*2] == point) break; | |||
706 | } | |||
707 | seen[point] = PETSC_TRUE; | |||
708 | symmetries[r] = (PetscInt **) hsymmetries[q]; | |||
| ||||
709 | flips[r] = (PetscScalar **) hflips[q]; | |||
710 | } | |||
711 | } | |||
712 | ierr = DMPlexRestoreTransitiveClosure(K, cone[p], PETSC_TRUE, &closureSize, &closure);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),712,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
713 | } | |||
714 | ierr = DMPlexRestoreTransitiveClosure(K, 0, PETSC_TRUE, &KclosureSize, &Kclosure);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),714,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
715 | ierr = PetscFree(seen)((*PetscTrFree)((void*)(seen),715,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ) || ((seen) = 0,0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),715,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
716 | } | |||
717 | } | |||
718 | bdm->symmetries = symmetries; | |||
719 | bdm->flips = flips; | |||
720 | } | |||
721 | if (perms) *perms = (const PetscInt ***) bdm->symmetries; | |||
722 | if (rots) *rots = (const PetscScalar ***) bdm->flips; | |||
723 | 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); | |||
724 | } | |||
725 | ||||
726 | static PetscErrorCode PetscDualSpaceInitialize_BDM(PetscDualSpace sp) | |||
727 | { | |||
728 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.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 | sp->ops->destroy = PetscDualSpaceDestroy_BDM; | |||
730 | sp->ops->view = PetscDualSpaceView_BDM; | |||
731 | sp->ops->setfromoptions = PetscDualSpaceSetFromOptions_BDM; | |||
732 | sp->ops->duplicate = PetscDualSpaceDuplicate_BDM; | |||
733 | sp->ops->setup = PetscDualSpaceSetUp_BDM; | |||
734 | sp->ops->getdimension = PetscDualSpaceGetDimension_BDM; | |||
735 | sp->ops->getnumdof = PetscDualSpaceGetNumDof_BDM; | |||
736 | sp->ops->getheightsubspace = PetscDualSpaceGetHeightSubspace_BDM; | |||
737 | sp->ops->getsymmetries = PetscDualSpaceGetSymmetries_BDM; | |||
738 | sp->ops->apply = PetscDualSpaceApplyDefault; | |||
739 | sp->ops->applyall = PetscDualSpaceApplyAllDefault; | |||
740 | sp->ops->createallpoints = PetscDualSpaceCreateAllPointsDefault; | |||
741 | 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); | |||
742 | } | |||
743 | /*MC | |||
744 | PETSCDUALSPACEBDM = "bdm" - A PetscDualSpace object that encapsulates a dual space for Brezzi-Douglas-Marini elements | |||
745 | ||||
746 | Level: intermediate | |||
747 | ||||
748 | .seealso: PetscDualSpaceType, PetscDualSpaceCreate(), PetscDualSpaceSetType() | |||
749 | M*/ | |||
750 | ||||
751 | PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscDualSpaceCreate_BDM(PetscDualSpace sp) | |||
752 | { | |||
753 | PetscDualSpace_BDM *bdm; | |||
754 | PetscErrorCode ierr; | |||
755 | ||||
756 | PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize < 64)) { petscstack->function[petscstack->currentsize ] = __func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ; petscstack->line[petscstack->currentsize] = 756; petscstack ->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack ->currentsize++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE || petscstack->hotdepth); } ; } while (0) ; ; } while (0); | |||
757 | PetscValidHeaderSpecific(sp, PETSCDUALSPACE_CLASSID, 1)do { if (!sp) return PetscError(((MPI_Comm)0x44000001),757,__func__ ,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if ( !PetscCheckPointer(sp,PETSC_OBJECT)) return PetscError(((MPI_Comm )0x44000001),757,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d" ,1); if (((PetscObject)(sp))->classid != PETSCDUALSPACE_CLASSID ) { if (((PetscObject)(sp))->classid == -1) return PetscError (((MPI_Comm)0x44000001),757,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d" ,1); else return PetscError(((MPI_Comm)0x44000001),757,__func__ ,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d" ,1); } } while (0); | |||
758 | ierr = PetscNewLog(sp, &bdm)(PetscMallocA(1,PETSC_TRUE,758,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,(size_t)(1)*sizeof(**(((&bdm)))),(((&bdm)))) || PetscLogObjectMemory ((PetscObject)sp,sizeof(**(&bdm))));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),758,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
759 | sp->data = bdm; | |||
760 | sp->k = 3; | |||
761 | ||||
762 | bdm->numDof = NULL((void*)0); | |||
763 | bdm->simplexCell = PETSC_TRUE; | |||
764 | ||||
765 | ierr = PetscDualSpaceInitialize_BDM(sp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm )0x44000001),765,__func__,"/sandbox/petsc/petsc.master/src/dm/dt/dualspace/impls/bdm/dspacebdm.c" ,ierr,PETSC_ERROR_REPEAT," ");} while (0); | |||
766 | 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); | |||
767 | } |