Bug Summary

File:dm/impls/da/dalocal.c
Warning:line 325, column 9
Dereference of null pointer (loaded from variable 'cone')

Annotated Source Code

[?] Use j/k keys for keyboard navigation

1
2/*
3 Code for manipulating distributed regular arrays in parallel.
4*/
5
6#include <petsc/private/dmdaimpl.h> /*I "petscdmda.h" I*/
7#include <petscbt.h>
8#include <petscsf.h>
9#include <petscds.h>
10#include <petscfe.h>
11
12/*
13 This allows the DMDA vectors to properly tell MATLAB their dimensions
14*/
15#if defined(PETSC_HAVE_MATLAB_ENGINE)
16#include <engine.h> /* MATLAB include file */
17#include <mex.h> /* MATLAB include file */
18static PetscErrorCode VecMatlabEnginePut_DA2d(PetscObject obj,void *mengine)
19{
20 PetscErrorCode ierr;
21 PetscInt n,m;
22 Vec vec = (Vec)obj;
23 PetscScalar *array;
24 mxArray *mat;
25 DM da;
26
27 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 27; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
28 ierr = VecGetDM(vec, &da);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),28,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
29 if (!da) SETERRQ(PetscObjectComm((PetscObject)vec),PETSC_ERR_ARG_WRONGSTATE,"Vector not associated with a DMDA")return PetscError(PetscObjectComm((PetscObject)vec),29,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",73,PETSC_ERROR_INITIAL
,"Vector not associated with a DMDA")
;
30 ierr = DMDAGetGhostCorners(da,0,0,0,&m,&n,0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),30,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
31
32 ierr = VecGetArray(vec,&array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),32,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
33#if !defined(PETSC_USE_COMPLEX)
34 mat = mxCreateDoubleMatrix(m,n,mxREAL);
35#else
36 mat = mxCreateDoubleMatrix(m,n,mxCOMPLEX);
37#endif
38 ierr = PetscArraycpy(mxGetPr(mat),array,n*m)((sizeof(*(mxGetPr(mat))) != sizeof(*(array))) || PetscMemcpy
(mxGetPr(mat),array,(n*m)*sizeof(*(mxGetPr(mat)))));
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),38,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
39 ierr = PetscObjectName(obj);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),39,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
40 engPutVariable((Engine*)mengine,obj->name,mat);
41
42 ierr = VecRestoreArray(vec,&array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),42,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
43 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)
;
44}
45#endif
46
47PetscErrorCode DMCreateLocalVector_DA(DM da,Vec *g)
48{
49 PetscErrorCode ierr;
50 DM_DA *dd = (DM_DA*)da->data;
51
52 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 52; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
53 PetscValidHeaderSpecific(da,DM_CLASSID,1)do { if (!da) return PetscError(((MPI_Comm)0x44000001),53,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",85,PETSC_ERROR_INITIAL
,"Null Object: Parameter # %d",1); if (!PetscCheckPointer(da,
PETSC_OBJECT)) return PetscError(((MPI_Comm)0x44000001),53,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",64,PETSC_ERROR_INITIAL
,"Invalid Pointer to Object: Parameter # %d",1); if (((PetscObject
)(da))->classid != DM_CLASSID) { if (((PetscObject)(da))->
classid == -1) return PetscError(((MPI_Comm)0x44000001),53,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",64,PETSC_ERROR_INITIAL
,"Object already free: Parameter # %d",1); else return PetscError
(((MPI_Comm)0x44000001),53,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,1); } } while (0)
;
54 PetscValidPointer(g,2)do { if (!g) return PetscError(((MPI_Comm)0x44000001),54,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",85,PETSC_ERROR_INITIAL
,"Null Pointer: Parameter # %d",2); if (!PetscCheckPointer(g,
PETSC_CHAR)) return PetscError(((MPI_Comm)0x44000001),54,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",68,PETSC_ERROR_INITIAL
,"Invalid Pointer: Parameter # %d",2); } while (0)
;
55 ierr = VecCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001),g);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),55,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
56 ierr = VecSetSizes(*g,dd->nlocal,PETSC_DETERMINE-1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),56,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
57 ierr = VecSetBlockSize(*g,dd->w);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),57,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
58 ierr = VecSetType(*g,da->vectype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),58,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
59 ierr = VecSetDM(*g, da);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),59,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
60#if defined(PETSC_HAVE_MATLAB_ENGINE)
61 if (dd->w == 1 && da->dim == 2) {
62 ierr = PetscObjectComposeFunction((PetscObject)*g,"PetscMatlabEnginePut_C",VecMatlabEnginePut_DA2d)PetscObjectComposeFunction_Private((PetscObject)*g,"PetscMatlabEnginePut_C"
,(PetscVoidFunction)(VecMatlabEnginePut_DA2d))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),62,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
63 }
64#endif
65 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)
;
66}
67
68/*@
69 DMDAGetNumCells - Get the number of cells in the local piece of the DMDA. This includes ghost cells.
70
71 Input Parameter:
72. dm - The DM object
73
74 Output Parameters:
75+ numCellsX - The number of local cells in the x-direction
76. numCellsY - The number of local cells in the y-direction
77. numCellsZ - The number of local cells in the z-direction
78- numCells - The number of local cells
79
80 Level: developer
81
82.seealso: DMDAGetCellPoint()
83@*/
84PetscErrorCode DMDAGetNumCells(DM dm, PetscInt *numCellsX, PetscInt *numCellsY, PetscInt *numCellsZ, PetscInt *numCells)
85{
86 DM_DA *da = (DM_DA*) dm->data;
87 const PetscInt dim = dm->dim;
88 const PetscInt mx = (da->Xe - da->Xs)/da->w, my = da->Ye - da->Ys, mz = da->Ze - da->Zs;
89 const PetscInt nC = (mx)*(dim > 1 ? (my)*(dim > 2 ? (mz) : 1) : 1);
90
91 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 91; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
92 PetscValidHeaderSpecificType(dm, DM_CLASSID, 1,DMDA)do { PetscErrorCode __ierr; PetscBool same; do { if (!dm) return
PetscError(((MPI_Comm)0x44000001),92,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(dm,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),92,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(dm))->classid != DM_CLASSID) { if (
((PetscObject)(dm))->classid == -1) return PetscError(((MPI_Comm
)0x44000001),92,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),92,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",62,PETSC_ERROR_INITIAL
,"Wrong type of object: Parameter # %d",1); } } while (0); __ierr
= PetscObjectTypeCompare((PetscObject)dm,"da",&same);do {
if (__builtin_expect(!!(__ierr),0)) return PetscError(((MPI_Comm
)0x44000001),92,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,__ierr,PETSC_ERROR_REPEAT," ");} while (0); if (!same) return
PetscError(((MPI_Comm)0x44000001),92,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,62,PETSC_ERROR_INITIAL,"Wrong subtype object:Parameter # %d must have implementation %s it is %s"
,1,"da",((PetscObject)dm)->type_name); } while (0)
;
93 if (numCellsX) {
94 PetscValidIntPointer(numCellsX,2)do { if (!numCellsX) return PetscError(((MPI_Comm)0x44000001)
,94,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(numCellsX,PETSC_INT)) return PetscError(
((MPI_Comm)0x44000001),94,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,2); } while (0)
;
95 *numCellsX = mx;
96 }
97 if (numCellsY) {
98 PetscValidIntPointer(numCellsY,3)do { if (!numCellsY) return PetscError(((MPI_Comm)0x44000001)
,98,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(numCellsY,PETSC_INT)) return PetscError(
((MPI_Comm)0x44000001),98,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,3); } while (0)
;
99 *numCellsY = my;
100 }
101 if (numCellsZ) {
102 PetscValidIntPointer(numCellsZ,4)do { if (!numCellsZ) return PetscError(((MPI_Comm)0x44000001)
,102,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",4); if
(!PetscCheckPointer(numCellsZ,PETSC_INT)) return PetscError(
((MPI_Comm)0x44000001),102,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,4); } while (0)
;
103 *numCellsZ = mz;
104 }
105 if (numCells) {
106 PetscValidIntPointer(numCells,5)do { if (!numCells) return PetscError(((MPI_Comm)0x44000001),
106,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",5); if
(!PetscCheckPointer(numCells,PETSC_INT)) return PetscError((
(MPI_Comm)0x44000001),106,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,5); } while (0)
;
107 *numCells = nC;
108 }
109 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
110}
111
112/*@
113 DMDAGetCellPoint - Get the DM point corresponding to the tuple (i, j, k) in the DMDA
114
115 Input Parameters:
116+ dm - The DM object
117- i,j,k - The global indices for the cell
118
119 Output Parameters:
120. point - The local DM point
121
122 Level: developer
123
124.seealso: DMDAGetNumCells()
125@*/
126PetscErrorCode DMDAGetCellPoint(DM dm, PetscInt i, PetscInt j, PetscInt k, PetscInt *point)
127{
128 const PetscInt dim = dm->dim;
129 DMDALocalInfo info;
130 PetscErrorCode ierr;
131
132 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 132; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
133 PetscValidHeaderSpecificType(dm, DM_CLASSID, 1,DMDA)do { PetscErrorCode __ierr; PetscBool same; do { if (!dm) return
PetscError(((MPI_Comm)0x44000001),133,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(dm,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),133,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(dm))->classid != DM_CLASSID) { if (
((PetscObject)(dm))->classid == -1) return PetscError(((MPI_Comm
)0x44000001),133,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),133,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",62,PETSC_ERROR_INITIAL
,"Wrong type of object: Parameter # %d",1); } } while (0); __ierr
= PetscObjectTypeCompare((PetscObject)dm,"da",&same);do {
if (__builtin_expect(!!(__ierr),0)) return PetscError(((MPI_Comm
)0x44000001),133,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,__ierr,PETSC_ERROR_REPEAT," ");} while (0); if (!same) return
PetscError(((MPI_Comm)0x44000001),133,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,62,PETSC_ERROR_INITIAL,"Wrong subtype object:Parameter # %d must have implementation %s it is %s"
,1,"da",((PetscObject)dm)->type_name); } while (0)
;
134 PetscValidIntPointer(point,5)do { if (!point) return PetscError(((MPI_Comm)0x44000001),134
,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",5); if
(!PetscCheckPointer(point,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),134,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,5); } while (0)
;
135 ierr = DMDAGetLocalInfo(dm, &info);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),135,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
136 if (dim > 0) {if ((i < info.gxs) || (i >= info.gxs+info.gxm)) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "X index %d not in [%d, %d)", i, info.gxs, info.gxs+info.gxm)return PetscError(((MPI_Comm)0x44000001),136,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,63,PETSC_ERROR_INITIAL,"X index %d not in [%d, %d)",i,info.gxs
,info.gxs+info.gxm)
;}
137 if (dim > 1) {if ((j < info.gys) || (j >= info.gys+info.gym)) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Y index %d not in [%d, %d)", j, info.gys, info.gys+info.gym)return PetscError(((MPI_Comm)0x44000001),137,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,63,PETSC_ERROR_INITIAL,"Y index %d not in [%d, %d)",j,info.gys
,info.gys+info.gym)
;}
138 if (dim > 2) {if ((k < info.gzs) || (k >= info.gzs+info.gzm)) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Z index %d not in [%d, %d)", k, info.gzs, info.gzs+info.gzm)return PetscError(((MPI_Comm)0x44000001),138,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,63,PETSC_ERROR_INITIAL,"Z index %d not in [%d, %d)",k,info.gzs
,info.gzs+info.gzm)
;}
139 *point = i + (dim > 1 ? (j + (dim > 2 ? k*info.gym : 0))*info.gxm : 0);
140 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)
;
141}
142
143PetscErrorCode DMDAGetNumVertices(DM dm, PetscInt *numVerticesX, PetscInt *numVerticesY, PetscInt *numVerticesZ, PetscInt *numVertices)
144{
145 DM_DA *da = (DM_DA*) dm->data;
146 const PetscInt dim = dm->dim;
147 const PetscInt mx = (da->Xe - da->Xs)/da->w, my = da->Ye - da->Ys, mz = da->Ze - da->Zs;
148 const PetscInt nVx = mx+1;
149 const PetscInt nVy = dim > 1 ? (my+1) : 1;
150 const PetscInt nVz = dim > 2 ? (mz+1) : 1;
151 const PetscInt nV = nVx*nVy*nVz;
152
153 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 153; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
154 if (numVerticesX) {
155 PetscValidIntPointer(numVerticesX,2)do { if (!numVerticesX) return PetscError(((MPI_Comm)0x44000001
),155,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(numVerticesX,PETSC_INT)) return PetscError
(((MPI_Comm)0x44000001),155,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,2); } while (0)
;
156 *numVerticesX = nVx;
157 }
158 if (numVerticesY) {
159 PetscValidIntPointer(numVerticesY,3)do { if (!numVerticesY) return PetscError(((MPI_Comm)0x44000001
),159,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(numVerticesY,PETSC_INT)) return PetscError
(((MPI_Comm)0x44000001),159,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,3); } while (0)
;
160 *numVerticesY = nVy;
161 }
162 if (numVerticesZ) {
163 PetscValidIntPointer(numVerticesZ,4)do { if (!numVerticesZ) return PetscError(((MPI_Comm)0x44000001
),163,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",4); if
(!PetscCheckPointer(numVerticesZ,PETSC_INT)) return PetscError
(((MPI_Comm)0x44000001),163,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,4); } while (0)
;
164 *numVerticesZ = nVz;
165 }
166 if (numVertices) {
167 PetscValidIntPointer(numVertices,5)do { if (!numVertices) return PetscError(((MPI_Comm)0x44000001
),167,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",5); if
(!PetscCheckPointer(numVertices,PETSC_INT)) return PetscError
(((MPI_Comm)0x44000001),167,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,5); } while (0)
;
168 *numVertices = nV;
169 }
170 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)
;
171}
172
173PetscErrorCode DMDAGetNumFaces(DM dm, PetscInt *numXFacesX, PetscInt *numXFaces, PetscInt *numYFacesY, PetscInt *numYFaces, PetscInt *numZFacesZ, PetscInt *numZFaces)
174{
175 DM_DA *da = (DM_DA*) dm->data;
176 const PetscInt dim = dm->dim;
177 const PetscInt mx = (da->Xe - da->Xs)/da->w, my = da->Ye - da->Ys, mz = da->Ze - da->Zs;
178 const PetscInt nxF = (dim > 1 ? (my)*(dim > 2 ? (mz) : 1) : 1);
179 const PetscInt nXF = (mx+1)*nxF;
180 const PetscInt nyF = mx*(dim > 2 ? mz : 1);
181 const PetscInt nYF = dim > 1 ? (my+1)*nyF : 0;
182 const PetscInt nzF = mx*(dim > 1 ? my : 0);
183 const PetscInt nZF = dim > 2 ? (mz+1)*nzF : 0;
184
185 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 185; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
186 if (numXFacesX) {
187 PetscValidIntPointer(numXFacesX,2)do { if (!numXFacesX) return PetscError(((MPI_Comm)0x44000001
),187,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(numXFacesX,PETSC_INT)) return PetscError
(((MPI_Comm)0x44000001),187,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,2); } while (0)
;
188 *numXFacesX = nxF;
189 }
190 if (numXFaces) {
191 PetscValidIntPointer(numXFaces,3)do { if (!numXFaces) return PetscError(((MPI_Comm)0x44000001)
,191,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(numXFaces,PETSC_INT)) return PetscError(
((MPI_Comm)0x44000001),191,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,3); } while (0)
;
192 *numXFaces = nXF;
193 }
194 if (numYFacesY) {
195 PetscValidIntPointer(numYFacesY,4)do { if (!numYFacesY) return PetscError(((MPI_Comm)0x44000001
),195,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",4); if
(!PetscCheckPointer(numYFacesY,PETSC_INT)) return PetscError
(((MPI_Comm)0x44000001),195,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,4); } while (0)
;
196 *numYFacesY = nyF;
197 }
198 if (numYFaces) {
199 PetscValidIntPointer(numYFaces,5)do { if (!numYFaces) return PetscError(((MPI_Comm)0x44000001)
,199,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",5); if
(!PetscCheckPointer(numYFaces,PETSC_INT)) return PetscError(
((MPI_Comm)0x44000001),199,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,5); } while (0)
;
200 *numYFaces = nYF;
201 }
202 if (numZFacesZ) {
203 PetscValidIntPointer(numZFacesZ,6)do { if (!numZFacesZ) return PetscError(((MPI_Comm)0x44000001
),203,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",6); if
(!PetscCheckPointer(numZFacesZ,PETSC_INT)) return PetscError
(((MPI_Comm)0x44000001),203,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,6); } while (0)
;
204 *numZFacesZ = nzF;
205 }
206 if (numZFaces) {
207 PetscValidIntPointer(numZFaces,7)do { if (!numZFaces) return PetscError(((MPI_Comm)0x44000001)
,207,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",7); if
(!PetscCheckPointer(numZFaces,PETSC_INT)) return PetscError(
((MPI_Comm)0x44000001),207,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,7); } while (0)
;
208 *numZFaces = nZF;
209 }
210 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)
;
211}
212
213PetscErrorCode DMDAGetHeightStratum(DM dm, PetscInt height, PetscInt *pStart, PetscInt *pEnd)
214{
215 const PetscInt dim = dm->dim;
216 PetscInt nC, nV, nXF, nYF, nZF;
217 PetscErrorCode ierr;
218
219 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 219; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
220 if (pStart) PetscValidIntPointer(pStart,3)do { if (!pStart) return PetscError(((MPI_Comm)0x44000001),220
,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(pStart,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),220,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,3); } while (0)
;
221 if (pEnd) PetscValidIntPointer(pEnd,4)do { if (!pEnd) return PetscError(((MPI_Comm)0x44000001),221,
__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",4); if
(!PetscCheckPointer(pEnd,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),221,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,4); } while (0)
;
222 ierr = DMDAGetNumCells(dm, NULL((void*)0), NULL((void*)0), NULL((void*)0), &nC);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),222,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
223 ierr = DMDAGetNumVertices(dm, NULL((void*)0), NULL((void*)0), NULL((void*)0), &nV);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),223,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
224 ierr = DMDAGetNumFaces(dm, NULL((void*)0), &nXF, NULL((void*)0), &nYF, NULL((void*)0), &nZF);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),224,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
225 if (height == 0) {
226 /* Cells */
227 if (pStart) *pStart = 0;
228 if (pEnd) *pEnd = nC;
229 } else if (height == 1) {
230 /* Faces */
231 if (pStart) *pStart = nC+nV;
232 if (pEnd) *pEnd = nC+nV+nXF+nYF+nZF;
233 } else if (height == dim) {
234 /* Vertices */
235 if (pStart) *pStart = nC;
236 if (pEnd) *pEnd = nC+nV;
237 } else if (height < 0) {
238 /* All points */
239 if (pStart) *pStart = 0;
240 if (pEnd) *pEnd = nC+nV+nXF+nYF+nZF;
241 } else SETERRQ1(PetscObjectComm((PetscObject)dm), PETSC_ERR_ARG_OUTOFRANGE, "No points of height %d in the DA", height)return PetscError(PetscObjectComm((PetscObject)dm),241,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",63,PETSC_ERROR_INITIAL
,"No points of height %d in the DA",height)
;
242 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)
;
243}
244
245PetscErrorCode DMDAGetDepthStratum(DM dm, PetscInt depth, PetscInt *pStart, PetscInt *pEnd)
246{
247 const PetscInt dim = dm->dim;
248 PetscInt nC, nV, nXF, nYF, nZF;
249 PetscErrorCode ierr;
250
251 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 251; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
252 if (pStart) PetscValidIntPointer(pStart,3)do { if (!pStart) return PetscError(((MPI_Comm)0x44000001),252
,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(pStart,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),252,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,3); } while (0)
;
253 if (pEnd) PetscValidIntPointer(pEnd,4)do { if (!pEnd) return PetscError(((MPI_Comm)0x44000001),253,
__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",4); if
(!PetscCheckPointer(pEnd,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),253,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to Int: Parameter # %d"
,4); } while (0)
;
254 ierr = DMDAGetNumCells(dm, NULL((void*)0), NULL((void*)0), NULL((void*)0), &nC);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),254,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
255 ierr = DMDAGetNumVertices(dm, NULL((void*)0), NULL((void*)0), NULL((void*)0), &nV);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),255,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
256 ierr = DMDAGetNumFaces(dm, NULL((void*)0), &nXF, NULL((void*)0), &nYF, NULL((void*)0), &nZF);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),256,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
257 if (depth == dim) {
258 /* Cells */
259 if (pStart) *pStart = 0;
260 if (pEnd) *pEnd = nC;
261 } else if (depth == dim-1) {
262 /* Faces */
263 if (pStart) *pStart = nC+nV;
264 if (pEnd) *pEnd = nC+nV+nXF+nYF+nZF;
265 } else if (depth == 0) {
266 /* Vertices */
267 if (pStart) *pStart = nC;
268 if (pEnd) *pEnd = nC+nV;
269 } else if (depth < 0) {
270 /* All points */
271 if (pStart) *pStart = 0;
272 if (pEnd) *pEnd = nC+nV+nXF+nYF+nZF;
273 } else SETERRQ1(PetscObjectComm((PetscObject)dm), PETSC_ERR_ARG_OUTOFRANGE, "No points of depth %d in the DA", depth)return PetscError(PetscObjectComm((PetscObject)dm),273,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",63,PETSC_ERROR_INITIAL
,"No points of depth %d in the DA",depth)
;
274 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)
;
275}
276
277PetscErrorCode DMDAGetConeSize(DM dm, PetscInt p, PetscInt *coneSize)
278{
279 const PetscInt dim = dm->dim;
280 PetscInt nC, nV, nXF, nYF, nZF;
281 PetscErrorCode ierr;
282
283 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 283; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
284 *coneSize = 0;
285 ierr = DMDAGetNumCells(dm, NULL((void*)0), NULL((void*)0), NULL((void*)0), &nC);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),285,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
286 ierr = DMDAGetNumVertices(dm, NULL((void*)0), NULL((void*)0), NULL((void*)0), &nV);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),286,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
287 ierr = DMDAGetNumFaces(dm, NULL((void*)0), &nXF, NULL((void*)0), &nYF, NULL((void*)0), &nZF);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),287,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
288 switch (dim) {
289 case 2:
290 if (p >= 0) {
291 if (p < nC) {
292 *coneSize = 4;
293 } else if (p < nC+nV) {
294 *coneSize = 0;
295 } else if (p < nC+nV+nXF+nYF+nZF) {
296 *coneSize = 2;
297 } else SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Point %d should be in [0, %d)", p, nC+nV+nXF+nYF+nZF)return PetscError(((MPI_Comm)0x44000001),297,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,63,PETSC_ERROR_INITIAL,"Point %d should be in [0, %d)",p,nC+
nV+nXF+nYF+nZF)
;
298 } else SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Negative point %d is invalid", p)return PetscError(((MPI_Comm)0x44000001),298,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,63,PETSC_ERROR_INITIAL,"Negative point %d is invalid",p)
;
299 break;
300 case 3:
301 SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Too lazy to do 3D")return PetscError(((MPI_Comm)0x44000001),301,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,56,PETSC_ERROR_INITIAL,"Too lazy to do 3D")
;
302 break;
303 }
304 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)
;
305}
306
307PetscErrorCode DMDAGetCone(DM dm, PetscInt p, PetscInt *cone[])
308{
309 const PetscInt dim = dm->dim;
310 PetscInt nCx, nCy, nCz, nC, nVx, nVy, nVz, nV, nxF, nyF, nzF, nXF, nYF, nZF;
311 PetscErrorCode ierr;
312
313 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 313; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
314 if (!cone) {ierr = DMGetWorkArray(dm, 6, MPIU_INT((MPI_Datatype)0x4c000405), cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),314,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1
Assuming 'cone' is null
2
Taking true branch
315 ierr = DMDAGetNumCells(dm, &nCx, &nCy, &nCz, &nC);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),315,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
316 ierr = DMDAGetNumVertices(dm, &nVx, &nVy, &nVz, &nV);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),316,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
317 ierr = DMDAGetNumFaces(dm, &nxF, &nXF, &nyF, &nYF, &nzF, &nZF);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),317,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
318 switch (dim) {
3
Control jumps to 'case 2:' at line 319
319 case 2:
320 if (p >= 0) {
4
Assuming 'p' is >= 0
5
Taking true branch
321 if (p < nC) {
6
Taking true branch
322 const PetscInt cy = p / nCx;
323 const PetscInt cx = p % nCx;
324
325 (*cone)[0] = cy*nxF + cx + nC+nV;
7
Dereference of null pointer (loaded from variable 'cone')
326 (*cone)[1] = cx*nyF + cy + nyF + nC+nV+nXF;
327 (*cone)[2] = cy*nxF + cx + nxF + nC+nV;
328 (*cone)[3] = cx*nyF + cy + nC+nV+nXF;
329 SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Too lazy to do cell cones")return PetscError(((MPI_Comm)0x44000001),329,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,56,PETSC_ERROR_INITIAL,"Too lazy to do cell cones")
;
330 } else if (p < nC+nV) {
331 } else if (p < nC+nV+nXF) {
332 const PetscInt fy = (p - nC+nV) / nxF;
333 const PetscInt fx = (p - nC+nV) % nxF;
334
335 (*cone)[0] = fy*nVx + fx + nC;
336 (*cone)[1] = fy*nVx + fx + 1 + nC;
337 } else if (p < nC+nV+nXF+nYF) {
338 const PetscInt fx = (p - nC+nV+nXF) / nyF;
339 const PetscInt fy = (p - nC+nV+nXF) % nyF;
340
341 (*cone)[0] = fy*nVx + fx + nC;
342 (*cone)[1] = fy*nVx + fx + nVx + nC;
343 } else SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Point %d should be in [0, %d)", p, nC+nV+nXF+nYF+nZF)return PetscError(((MPI_Comm)0x44000001),343,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,63,PETSC_ERROR_INITIAL,"Point %d should be in [0, %d)",p,nC+
nV+nXF+nYF+nZF)
;
344 } else SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Negative point %d is invalid", p)return PetscError(((MPI_Comm)0x44000001),344,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,63,PETSC_ERROR_INITIAL,"Negative point %d is invalid",p)
;
345 break;
346 case 3:
347 SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Too lazy to do 3D")return PetscError(((MPI_Comm)0x44000001),347,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,56,PETSC_ERROR_INITIAL,"Too lazy to do 3D")
;
348 break;
349 }
350 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)
;
351}
352
353PetscErrorCode DMDARestoreCone(DM dm, PetscInt p, PetscInt *cone[])
354{
355 PetscErrorCode ierr;
356
357 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 357; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
358 ierr = DMGetWorkArray(dm, 6, MPIU_INT((MPI_Datatype)0x4c000405), cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),358,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
359 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)
;
360}
361
362PetscErrorCode DMDASetVertexCoordinates(DM dm, PetscReal xl, PetscReal xu, PetscReal yl, PetscReal yu, PetscReal zl, PetscReal zu)
363{
364 DM_DA *da = (DM_DA *) dm->data;
365 Vec coordinates;
366 PetscSection section;
367 PetscScalar *coords;
368 PetscReal h[3];
369 PetscInt dim, size, M, N, P, nVx, nVy, nVz, nV, vStart, vEnd, v, i, j, k;
370 PetscErrorCode ierr;
371
372 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 372; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
373 PetscValidHeaderSpecificType(dm, DM_CLASSID, 1,DMDA)do { PetscErrorCode __ierr; PetscBool same; do { if (!dm) return
PetscError(((MPI_Comm)0x44000001),373,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(dm,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),373,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(dm))->classid != DM_CLASSID) { if (
((PetscObject)(dm))->classid == -1) return PetscError(((MPI_Comm
)0x44000001),373,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),373,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",62,PETSC_ERROR_INITIAL
,"Wrong type of object: Parameter # %d",1); } } while (0); __ierr
= PetscObjectTypeCompare((PetscObject)dm,"da",&same);do {
if (__builtin_expect(!!(__ierr),0)) return PetscError(((MPI_Comm
)0x44000001),373,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,__ierr,PETSC_ERROR_REPEAT," ");} while (0); if (!same) return
PetscError(((MPI_Comm)0x44000001),373,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,62,PETSC_ERROR_INITIAL,"Wrong subtype object:Parameter # %d must have implementation %s it is %s"
,1,"da",((PetscObject)dm)->type_name); } while (0)
;
374 ierr = DMDAGetInfo(dm, &dim, &M, &N, &P, 0,0,0,0,0,0,0,0,0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),374,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
375 if (dim > 3) SETERRQ(PetscObjectComm((PetscObject)dm),PETSC_ERR_PLIB,"The following code only works for dim <= 3")return PetscError(PetscObjectComm((PetscObject)dm),375,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",77,PETSC_ERROR_INITIAL
,"The following code only works for dim <= 3")
;
376 h[0] = (xu - xl)/M;
377 h[1] = (yu - yl)/N;
378 h[2] = (zu - zl)/P;
379 ierr = DMDAGetDepthStratum(dm, 0, &vStart, &vEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),379,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
380 ierr = DMDAGetNumVertices(dm, &nVx, &nVy, &nVz, &nV);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),380,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
381 ierr = PetscSectionCreate(PetscObjectComm((PetscObject) dm), &section);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),381,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
382 ierr = PetscSectionSetNumFields(section, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),382,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
383 ierr = PetscSectionSetFieldComponents(section, 0, dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),383,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
384 ierr = PetscSectionSetChart(section, vStart, vEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),384,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
385 for (v = vStart; v < vEnd; ++v) {
386 ierr = PetscSectionSetDof(section, v, dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),386,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
387 }
388 ierr = PetscSectionSetUp(section);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),388,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
389 ierr = PetscSectionGetStorageSize(section, &size);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),389,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
390 ierr = VecCreateSeq(PETSC_COMM_SELF((MPI_Comm)0x44000001), size, &coordinates);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),390,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
391 ierr = PetscObjectSetName((PetscObject)coordinates,"coordinates");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),391,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
392 ierr = VecGetArray(coordinates, &coords);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),392,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
393 for (k = 0; k < nVz; ++k) {
394 PetscInt ind[3], d, off;
395
396 ind[0] = 0;
397 ind[1] = 0;
398 ind[2] = k + da->zs;
399 for (j = 0; j < nVy; ++j) {
400 ind[1] = j + da->ys;
401 for (i = 0; i < nVx; ++i) {
402 const PetscInt vertex = (k*nVy + j)*nVx + i + vStart;
403
404 ierr = PetscSectionGetOffset(section, vertex, &off);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),404,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
405 ind[0] = i + da->xs;
406 for (d = 0; d < dim; ++d) {
407 coords[off+d] = h[d]*ind[d];
408 }
409 }
410 }
411 }
412 ierr = VecRestoreArray(coordinates, &coords);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),412,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
413 ierr = DMSetCoordinateSection(dm, PETSC_DETERMINE-1, section);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),413,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
414 ierr = DMSetCoordinatesLocal(dm, coordinates);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),414,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
415 ierr = PetscSectionDestroy(&section);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),415,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
416 ierr = VecDestroy(&coordinates);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),416,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
417 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)
;
418}
419
420/* ------------------------------------------------------------------- */
421
422/*@C
423 DMDAGetArray - Gets a work array for a DMDA
424
425 Input Parameter:
426+ da - information about my local patch
427- ghosted - do you want arrays for the ghosted or nonghosted patch
428
429 Output Parameters:
430. vptr - array data structured
431
432 Note: The vector values are NOT initialized and may have garbage in them, so you may need
433 to zero them.
434
435 Level: advanced
436
437.seealso: DMDARestoreArray()
438
439@*/
440PetscErrorCode DMDAGetArray(DM da,PetscBool ghosted,void *vptr)
441{
442 PetscErrorCode ierr;
443 PetscInt j,i,xs,ys,xm,ym,zs,zm;
444 char *iarray_start;
445 void **iptr = (void**)vptr;
446 DM_DA *dd = (DM_DA*)da->data;
447
448 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 448; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
449 PetscValidHeaderSpecificType(da,DM_CLASSID,1,DMDA)do { PetscErrorCode __ierr; PetscBool same; do { if (!da) return
PetscError(((MPI_Comm)0x44000001),449,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(da,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),449,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(da))->classid != DM_CLASSID) { if (
((PetscObject)(da))->classid == -1) return PetscError(((MPI_Comm
)0x44000001),449,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),449,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",62,PETSC_ERROR_INITIAL
,"Wrong type of object: Parameter # %d",1); } } while (0); __ierr
= PetscObjectTypeCompare((PetscObject)da,"da",&same);do {
if (__builtin_expect(!!(__ierr),0)) return PetscError(((MPI_Comm
)0x44000001),449,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,__ierr,PETSC_ERROR_REPEAT," ");} while (0); if (!same) return
PetscError(((MPI_Comm)0x44000001),449,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,62,PETSC_ERROR_INITIAL,"Wrong subtype object:Parameter # %d must have implementation %s it is %s"
,1,"da",((PetscObject)da)->type_name); } while (0)
;
450 if (ghosted) {
451 for (i=0; i<DMDA_MAX_WORK_ARRAYS2; i++) {
452 if (dd->arrayghostedin[i]) {
453 *iptr = dd->arrayghostedin[i];
454 iarray_start = (char*)dd->startghostedin[i];
455 dd->arrayghostedin[i] = NULL((void*)0);
456 dd->startghostedin[i] = NULL((void*)0);
457
458 goto done;
459 }
460 }
461 xs = dd->Xs;
462 ys = dd->Ys;
463 zs = dd->Zs;
464 xm = dd->Xe-dd->Xs;
465 ym = dd->Ye-dd->Ys;
466 zm = dd->Ze-dd->Zs;
467 } else {
468 for (i=0; i<DMDA_MAX_WORK_ARRAYS2; i++) {
469 if (dd->arrayin[i]) {
470 *iptr = dd->arrayin[i];
471 iarray_start = (char*)dd->startin[i];
472 dd->arrayin[i] = NULL((void*)0);
473 dd->startin[i] = NULL((void*)0);
474
475 goto done;
476 }
477 }
478 xs = dd->xs;
479 ys = dd->ys;
480 zs = dd->zs;
481 xm = dd->xe-dd->xs;
482 ym = dd->ye-dd->ys;
483 zm = dd->ze-dd->zs;
484 }
485
486 switch (da->dim) {
487 case 1: {
488 void *ptr;
489
490 ierr = PetscMalloc(xm*sizeof(PetscScalar),&iarray_start)((*PetscTrMalloc)((xm*sizeof(PetscScalar)),PETSC_FALSE,490,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",(void
**)(&iarray_start)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),490,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
491
492 ptr = (void*)(iarray_start - xs*sizeof(PetscScalar));
493 *iptr = (void*)ptr;
494 break;
495 }
496 case 2: {
497 void **ptr;
498
499 ierr = PetscMalloc((ym+1)*sizeof(void*)+xm*ym*sizeof(PetscScalar),&iarray_start)((*PetscTrMalloc)(((ym+1)*sizeof(void*)+xm*ym*sizeof(PetscScalar
)),PETSC_FALSE,499,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,(void**)(&iarray_start)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),499,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
500
501 ptr = (void**)(iarray_start + xm*ym*sizeof(PetscScalar) - ys*sizeof(void*));
502 for (j=ys; j<ys+ym; j++) ptr[j] = iarray_start + sizeof(PetscScalar)*(xm*(j-ys) - xs);
503 *iptr = (void*)ptr;
504 break;
505 }
506 case 3: {
507 void ***ptr,**bptr;
508
509 ierr = PetscMalloc((zm+1)*sizeof(void**)+(ym*zm+1)*sizeof(void*)+xm*ym*zm*sizeof(PetscScalar),&iarray_start)((*PetscTrMalloc)(((zm+1)*sizeof(void**)+(ym*zm+1)*sizeof(void
*)+xm*ym*zm*sizeof(PetscScalar)),PETSC_FALSE,509,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,(void**)(&iarray_start)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),509,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
510
511 ptr = (void***)(iarray_start + xm*ym*zm*sizeof(PetscScalar) - zs*sizeof(void*));
512 bptr = (void**)(iarray_start + xm*ym*zm*sizeof(PetscScalar) + zm*sizeof(void**));
513 for (i=zs; i<zs+zm; i++) ptr[i] = bptr + ((i-zs)*ym - ys);
514 for (i=zs; i<zs+zm; i++) {
515 for (j=ys; j<ys+ym; j++) {
516 ptr[i][j] = iarray_start + sizeof(PetscScalar)*(xm*ym*(i-zs) + xm*(j-ys) - xs);
517 }
518 }
519 *iptr = (void*)ptr;
520 break;
521 }
522 default:
523 SETERRQ1(PetscObjectComm((PetscObject)da),PETSC_ERR_SUP,"Dimension %D not supported",da->dim)return PetscError(PetscObjectComm((PetscObject)da),523,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",56,PETSC_ERROR_INITIAL
,"Dimension %D not supported",da->dim)
;
524 }
525
526done:
527 /* add arrays to the checked out list */
528 if (ghosted) {
529 for (i=0; i<DMDA_MAX_WORK_ARRAYS2; i++) {
530 if (!dd->arrayghostedout[i]) {
531 dd->arrayghostedout[i] = *iptr;
532 dd->startghostedout[i] = iarray_start;
533 break;
534 }
535 }
536 } else {
537 for (i=0; i<DMDA_MAX_WORK_ARRAYS2; i++) {
538 if (!dd->arrayout[i]) {
539 dd->arrayout[i] = *iptr;
540 dd->startout[i] = iarray_start;
541 break;
542 }
543 }
544 }
545 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)
;
546}
547
548/*@C
549 DMDARestoreArray - Restores an array of derivative types for a DMDA
550
551 Input Parameter:
552+ da - information about my local patch
553. ghosted - do you want arrays for the ghosted or nonghosted patch
554- vptr - array data structured
555
556 Level: advanced
557
558.seealso: DMDAGetArray()
559
560@*/
561PetscErrorCode DMDARestoreArray(DM da,PetscBool ghosted,void *vptr)
562{
563 PetscInt i;
564 void **iptr = (void**)vptr,*iarray_start = 0;
565 DM_DA *dd = (DM_DA*)da->data;
566
567 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"; petscstack
->line[petscstack->currentsize] = 567; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
568 PetscValidHeaderSpecificType(da,DM_CLASSID,1,DMDA)do { PetscErrorCode __ierr; PetscBool same; do { if (!da) return
PetscError(((MPI_Comm)0x44000001),568,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(da,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),568,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(da))->classid != DM_CLASSID) { if (
((PetscObject)(da))->classid == -1) return PetscError(((MPI_Comm
)0x44000001),568,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),568,__func__
,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c",62,PETSC_ERROR_INITIAL
,"Wrong type of object: Parameter # %d",1); } } while (0); __ierr
= PetscObjectTypeCompare((PetscObject)da,"da",&same);do {
if (__builtin_expect(!!(__ierr),0)) return PetscError(((MPI_Comm
)0x44000001),568,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,__ierr,PETSC_ERROR_REPEAT," ");} while (0); if (!same) return
PetscError(((MPI_Comm)0x44000001),568,__func__,"/sandbox/petsc/petsc.master/src/dm/impls/da/dalocal.c"
,62,PETSC_ERROR_INITIAL,"Wrong subtype object:Parameter # %d must have implementation %s it is %s"
,1,"da",((PetscObject)da)->type_name); } while (0)
;
569 if (ghosted) {
570 for (i=0; i<DMDA_MAX_WORK_ARRAYS2; i++) {
571 if (dd->arrayghostedout[i] == *iptr) {
572 iarray_start = dd->startghostedout[i];
573 dd->arrayghostedout[i] = NULL((void*)0);
574 dd->startghostedout[i] = NULL((void*)0);
575 break;
576 }
577 }
578 for (i=0; i<DMDA_MAX_WORK_ARRAYS2; i++) {
579 if (!dd->arrayghostedin[i]) {
580 dd->arrayghostedin[i] = *iptr;
581 dd->startghostedin[i] = iarray_start;
582 break;
583 }
584 }
585 } else {
586 for (i=0; i<DMDA_MAX_WORK_ARRAYS2; i++) {
587 if (dd->arrayout[i] == *iptr) {
588 iarray_start = dd->startout[i];
589 dd->arrayout[i] = NULL((void*)0);
590 dd->startout[i] = NULL((void*)0);
591 break;
592 }
593 }
594 for (i=0; i<DMDA_MAX_WORK_ARRAYS2; i++) {
595 if (!dd->arrayin[i]) {
596 dd->arrayin[i] = *iptr;
597 dd->startin[i] = iarray_start;
598 break;
599 }
600 }
601 }
602 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)
;
603}
604