Bug Summary

File:mat/impls/aij/mpi/fdmpiaij.c
Warning:line 24, column 14
Division by zero

Annotated Source Code

[?] Use j/k keys for keyboard navigation

/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c

1#include <../src/mat/impls/sell/mpi/mpisell.h>
2#include <../src/mat/impls/aij/mpi/mpiaij.h>
3#include <../src/mat/impls/baij/mpi/mpibaij.h>
4#include <petsc/private/isimpl.h>
5
6PetscErrorCode MatFDColoringApply_BAIJ(Mat J,MatFDColoring coloring,Vec x1,void *sctx)
7{
8 PetscErrorCode (*f)(void*,Vec,Vec,void*)=(PetscErrorCode (*)(void*,Vec,Vec,void*))coloring->f;
9 PetscErrorCode ierr;
10 PetscInt k,cstart,cend,l,row,col,nz,spidx,i,j;
11 PetscScalar dx=0.0,*w3_array,*dy_i,*dy=coloring->dy;
12 PetscScalar *vscale_array;
13 const PetscScalar *xx;
14 PetscReal epsilon=coloring->error_rel,umin=coloring->umin,unorm;
15 Vec w1=coloring->w1,w2=coloring->w2,w3,vscale=coloring->vscale;
16 void *fctx=coloring->fctx;
17 PetscInt ctype=coloring->ctype,nxloc,nrows_k;
18 PetscScalar *valaddr;
19 MatEntry *Jentry=coloring->matentry;
20 MatEntry2 *Jentry2=coloring->matentry2;
21 const PetscInt ncolors=coloring->ncolors,*ncolumns=coloring->ncolumns,*nrows=coloring->nrows;
22 PetscInt bs=J->rmap->bs;
23
24 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
; petscstack->line[petscstack->currentsize] = 24; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
25 ierr = VecPinToCPU(x1,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),25,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
26 /* (1) Set w1 = F(x1) */
27 if (!coloring->fset) {
28 ierr = PetscLogEventBegin(MAT_FDColoringFunction,coloring,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[MAT_FDColoringFunction].active) ? (*PetscLogPLB)((MAT_FDColoringFunction
),0,(PetscObject)(coloring),(PetscObject)(0),(PetscObject)(0)
,(PetscObject)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),28,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
29 ierr = (*f)(sctx,x1,w1,fctx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),29,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
30 ierr = PetscLogEventEnd(MAT_FDColoringFunction,coloring,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[MAT_FDColoringFunction].active) ? (*PetscLogPLE)((MAT_FDColoringFunction
),0,(PetscObject)(coloring),(PetscObject)(0),(PetscObject)(0)
,(PetscObject)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),30,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
31 } else {
32 coloring->fset = PETSC_FALSE;
33 }
34
35 /* (2) Compute vscale = 1./dx - the local scale factors, including ghost points */
36 ierr = VecGetLocalSize(x1,&nxloc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),36,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
37 if (coloring->htype[0] == 'w') {
38 /* vscale = dx is a constant scalar */
39 ierr = VecNorm(x1,NORM_2,&unorm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),39,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
40 dx = 1.0/(PetscSqrtReal(1.0 + unorm)sqrt(1.0 + unorm)*epsilon);
41 } else {
42 ierr = VecGetArrayRead(x1,&xx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),42,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
43 ierr = VecGetArray(vscale,&vscale_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),43,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
44 for (col=0; col<nxloc; col++) {
45 dx = xx[col];
46 if (PetscAbsScalar(dx) < umin) {
47 if (PetscRealPart(dx)(dx) >= 0.0) dx = umin;
48 else if (PetscRealPart(dx)(dx) < 0.0 ) dx = -umin;
49 }
50 dx *= epsilon;
51 vscale_array[col] = 1.0/dx;
52 }
53 ierr = VecRestoreArrayRead(x1,&xx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),53,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
54 ierr = VecRestoreArray(vscale,&vscale_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),54,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
55 }
56 if (ctype == IS_COLORING_GLOBAL && coloring->htype[0] == 'd') {
57 ierr = VecGhostUpdateBegin(vscale,INSERT_VALUES,SCATTER_FORWARD);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),57,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
58 ierr = VecGhostUpdateEnd(vscale,INSERT_VALUES,SCATTER_FORWARD);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),58,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
59 }
60
61 /* (3) Loop over each color */
62 if (!coloring->w3) {
63 ierr = VecDuplicate(x1,&coloring->w3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),63,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
64 /* Vec is used instensively in particular piece of scalar CPU code; won't benifit from bouncing back and forth to the GPU */
65 ierr = VecPinToCPU(coloring->w3,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),65,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
66 ierr = PetscLogObjectParent((PetscObject)coloring,(PetscObject)coloring->w3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),66,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
67 }
68 w3 = coloring->w3;
69
70 ierr = VecGetOwnershipRange(x1,&cstart,&cend);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),70,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; /* used by ghosted vscale */
71 if (vscale) {
72 ierr = VecGetArray(vscale,&vscale_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),72,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
73 }
74 nz = 0;
75 for (k=0; k<ncolors; k++) {
76 coloring->currentcolor = k;
77
78 /*
79 (3-1) Loop over each column associated with color
80 adding the perturbation to the vector w3 = x1 + dx.
81 */
82 ierr = VecCopy(x1,w3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),82,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
83 dy_i = dy;
84 for (i=0; i<bs; i++) { /* Loop over a block of columns */
85 ierr = VecGetArray(w3,&w3_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),85,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
86 if (ctype == IS_COLORING_GLOBAL) w3_array -= cstart; /* shift pointer so global index can be used */
87 if (coloring->htype[0] == 'w') {
88 for (l=0; l<ncolumns[k]; l++) {
89 col = i + bs*coloring->columns[k][l]; /* local column (in global index!) of the matrix we are probing for */
90 w3_array[col] += 1.0/dx;
91 if (i) w3_array[col-1] -= 1.0/dx; /* resume original w3[col-1] */
92 }
93 } else { /* htype == 'ds' */
94 vscale_array -= cstart; /* shift pointer so global index can be used */
95 for (l=0; l<ncolumns[k]; l++) {
96 col = i + bs*coloring->columns[k][l]; /* local column (in global index!) of the matrix we are probing for */
97 w3_array[col] += 1.0/vscale_array[col];
98 if (i) w3_array[col-1] -= 1.0/vscale_array[col-1]; /* resume original w3[col-1] */
99 }
100 vscale_array += cstart;
101 }
102 if (ctype == IS_COLORING_GLOBAL) w3_array += cstart;
103 ierr = VecRestoreArray(w3,&w3_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),103,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
104
105 /*
106 (3-2) Evaluate function at w3 = x1 + dx (here dx is a vector of perturbations)
107 w2 = F(x1 + dx) - F(x1)
108 */
109 ierr = PetscLogEventBegin(MAT_FDColoringFunction,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[MAT_FDColoringFunction].active) ? (*PetscLogPLB)((MAT_FDColoringFunction
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),109,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
110 ierr = VecPlaceArray(w2,dy_i);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),110,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; /* place w2 to the array dy_i */
111 ierr = (*f)(sctx,w3,w2,fctx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),111,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
112 ierr = PetscLogEventEnd(MAT_FDColoringFunction,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[MAT_FDColoringFunction].active) ? (*PetscLogPLE)((MAT_FDColoringFunction
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),112,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
113 ierr = VecAXPY(w2,-1.0,w1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),113,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
114 ierr = VecResetArray(w2);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),114,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
115 dy_i += nxloc; /* points to dy+i*nxloc */
116 }
117
118 /*
119 (3-3) Loop over rows of vector, putting results into Jacobian matrix
120 */
121 nrows_k = nrows[k];
122 if (coloring->htype[0] == 'w') {
123 for (l=0; l<nrows_k; l++) {
124 row = bs*Jentry2[nz].row; /* local row index */
125 valaddr = Jentry2[nz++].valaddr;
126 spidx = 0;
127 dy_i = dy;
128 for (i=0; i<bs; i++) { /* column of the block */
129 for (j=0; j<bs; j++) { /* row of the block */
130 valaddr[spidx++] = dy_i[row+j]*dx;
131 }
132 dy_i += nxloc; /* points to dy+i*nxloc */
133 }
134 }
135 } else { /* htype == 'ds' */
136 for (l=0; l<nrows_k; l++) {
137 row = bs*Jentry[nz].row; /* local row index */
138 col = bs*Jentry[nz].col; /* local column index */
139 valaddr = Jentry[nz++].valaddr;
140 spidx = 0;
141 dy_i = dy;
142 for (i=0; i<bs; i++) { /* column of the block */
143 for (j=0; j<bs; j++) { /* row of the block */
144 valaddr[spidx++] = dy_i[row+j]*vscale_array[col+i];
145 }
146 dy_i += nxloc; /* points to dy+i*nxloc */
147 }
148 }
149 }
150 }
151 ierr = MatAssemblyBegin(J,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),151,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
152 ierr = MatAssemblyEnd(J,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),152,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
153 if (vscale) {
154 ierr = VecRestoreArray(vscale,&vscale_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),154,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
155 }
156
157 coloring->currentcolor = -1;
158 ierr = VecPinToCPU(x1,PETSC_FALSE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),158,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
159 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)
;
160}
161
162/* this is declared PETSC_EXTERN because it is used by MatFDColoringUseDM() which is in the DM library */
163PetscErrorCode MatFDColoringApply_AIJ(Mat J,MatFDColoring coloring,Vec x1,void *sctx)
164{
165 PetscErrorCode (*f)(void*,Vec,Vec,void*) = (PetscErrorCode (*)(void*,Vec,Vec,void*))coloring->f;
166 PetscErrorCode ierr;
167 PetscInt k,cstart,cend,l,row,col,nz;
168 PetscScalar dx=0.0,*y,*w3_array;
169 const PetscScalar *xx;
170 PetscScalar *vscale_array;
171 PetscReal epsilon=coloring->error_rel,umin=coloring->umin,unorm;
172 Vec w1=coloring->w1,w2=coloring->w2,w3,vscale=coloring->vscale;
173 void *fctx=coloring->fctx;
174 ISColoringType ctype=coloring->ctype;
175 PetscInt nxloc,nrows_k;
176 MatEntry *Jentry=coloring->matentry;
177 MatEntry2 *Jentry2=coloring->matentry2;
178 const PetscInt ncolors=coloring->ncolors,*ncolumns=coloring->ncolumns,*nrows=coloring->nrows;
179
180 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
; petscstack->line[petscstack->currentsize] = 180; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
181 ierr = VecPinToCPU(x1,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),181,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
182 if ((ctype == IS_COLORING_LOCAL) && (J->ops->fdcoloringapply == MatFDColoringApply_AIJ)) SETERRQ(PetscObjectComm((PetscObject)J),PETSC_ERR_SUP,"Must call MatColoringUseDM() with IS_COLORING_LOCAL")return PetscError(PetscObjectComm((PetscObject)J),182,__func__
,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,56,PETSC_ERROR_INITIAL,"Must call MatColoringUseDM() with IS_COLORING_LOCAL"
)
;
183 /* (1) Set w1 = F(x1) */
184 if (!coloring->fset) {
185 ierr = PetscLogEventBegin(MAT_FDColoringFunction,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[MAT_FDColoringFunction].active) ? (*PetscLogPLB)((MAT_FDColoringFunction
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),185,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
186 ierr = (*f)(sctx,x1,w1,fctx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),186,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
187 ierr = PetscLogEventEnd(MAT_FDColoringFunction,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[MAT_FDColoringFunction].active) ? (*PetscLogPLE)((MAT_FDColoringFunction
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),187,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
188 } else {
189 coloring->fset = PETSC_FALSE;
190 }
191
192 /* (2) Compute vscale = 1./dx - the local scale factors, including ghost points */
193 if (coloring->htype[0] == 'w') {
194 /* vscale = 1./dx is a constant scalar */
195 ierr = VecNorm(x1,NORM_2,&unorm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),195,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
196 dx = 1.0/(PetscSqrtReal(1.0 + unorm)sqrt(1.0 + unorm)*epsilon);
197 } else {
198 ierr = VecGetLocalSize(x1,&nxloc);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),198,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
199 ierr = VecGetArrayRead(x1,&xx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),199,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
200 ierr = VecGetArray(vscale,&vscale_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),200,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
201 for (col=0; col<nxloc; col++) {
202 dx = xx[col];
203 if (PetscAbsScalar(dx) < umin) {
204 if (PetscRealPart(dx)(dx) >= 0.0) dx = umin;
205 else if (PetscRealPart(dx)(dx) < 0.0 ) dx = -umin;
206 }
207 dx *= epsilon;
208 vscale_array[col] = 1.0/dx;
209 }
210 ierr = VecRestoreArrayRead(x1,&xx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),210,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
211 ierr = VecRestoreArray(vscale,&vscale_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),211,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
212 }
213 if (ctype == IS_COLORING_GLOBAL && coloring->htype[0] == 'd') {
214 ierr = VecGhostUpdateBegin(vscale,INSERT_VALUES,SCATTER_FORWARD);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),214,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
215 ierr = VecGhostUpdateEnd(vscale,INSERT_VALUES,SCATTER_FORWARD);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),215,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
216 }
217
218 /* (3) Loop over each color */
219 if (!coloring->w3) {
220 ierr = VecDuplicate(x1,&coloring->w3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),220,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
221 ierr = PetscLogObjectParent((PetscObject)coloring,(PetscObject)coloring->w3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),221,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
222 }
223 w3 = coloring->w3;
224
225 ierr = VecGetOwnershipRange(x1,&cstart,&cend);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),225,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; /* used by ghosted vscale */
226 if (vscale) {
227 ierr = VecGetArray(vscale,&vscale_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),227,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
228 }
229 nz = 0;
230
231 if (coloring->bcols > 1) { /* use blocked insertion of Jentry */
232 PetscInt i,m=J->rmap->n,nbcols,bcols=coloring->bcols;
233 PetscScalar *dy=coloring->dy,*dy_k;
234
235 nbcols = 0;
236 for (k=0; k<ncolors; k+=bcols) {
237
238 /*
239 (3-1) Loop over each column associated with color
240 adding the perturbation to the vector w3 = x1 + dx.
241 */
242
243 dy_k = dy;
244 if (k + bcols > ncolors) bcols = ncolors - k;
245 for (i=0; i<bcols; i++) {
246 coloring->currentcolor = k+i;
247
248 ierr = VecCopy(x1,w3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),248,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
249 ierr = VecGetArray(w3,&w3_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),249,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
250 if (ctype == IS_COLORING_GLOBAL) w3_array -= cstart; /* shift pointer so global index can be used */
251 if (coloring->htype[0] == 'w') {
252 for (l=0; l<ncolumns[k+i]; l++) {
253 col = coloring->columns[k+i][l]; /* local column (in global index!) of the matrix we are probing for */
254 w3_array[col] += 1.0/dx;
255 }
256 } else { /* htype == 'ds' */
257 vscale_array -= cstart; /* shift pointer so global index can be used */
258 for (l=0; l<ncolumns[k+i]; l++) {
259 col = coloring->columns[k+i][l]; /* local column (in global index!) of the matrix we are probing for */
260 w3_array[col] += 1.0/vscale_array[col];
261 }
262 vscale_array += cstart;
263 }
264 if (ctype == IS_COLORING_GLOBAL) w3_array += cstart;
265 ierr = VecRestoreArray(w3,&w3_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),265,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
266
267 /*
268 (3-2) Evaluate function at w3 = x1 + dx (here dx is a vector of perturbations)
269 w2 = F(x1 + dx) - F(x1)
270 */
271 ierr = PetscLogEventBegin(MAT_FDColoringFunction,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[MAT_FDColoringFunction].active) ? (*PetscLogPLB)((MAT_FDColoringFunction
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),271,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
272 ierr = VecPlaceArray(w2,dy_k);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),272,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; /* place w2 to the array dy_i */
273 ierr = (*f)(sctx,w3,w2,fctx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),273,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
274 ierr = PetscLogEventEnd(MAT_FDColoringFunction,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[MAT_FDColoringFunction].active) ? (*PetscLogPLE)((MAT_FDColoringFunction
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),274,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
275 ierr = VecAXPY(w2,-1.0,w1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),275,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
276 ierr = VecResetArray(w2);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),276,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
277 dy_k += m; /* points to dy+i*nxloc */
278 }
279
280 /*
281 (3-3) Loop over block rows of vector, putting results into Jacobian matrix
282 */
283 nrows_k = nrows[nbcols++];
284
285 if (coloring->htype[0] == 'w') {
286 for (l=0; l<nrows_k; l++) {
287 row = Jentry2[nz].row; /* local row index */
288 *(Jentry2[nz++].valaddr) = dy[row]*dx;
289 }
290 } else { /* htype == 'ds' */
291 for (l=0; l<nrows_k; l++) {
292 row = Jentry[nz].row; /* local row index */
293 *(Jentry[nz].valaddr) = dy[row]*vscale_array[Jentry[nz].col];
294 nz++;
295 }
296 }
297 }
298 } else { /* bcols == 1 */
299 for (k=0; k<ncolors; k++) {
300 coloring->currentcolor = k;
301
302 /*
303 (3-1) Loop over each column associated with color
304 adding the perturbation to the vector w3 = x1 + dx.
305 */
306 ierr = VecCopy(x1,w3);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),306,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
307 ierr = VecGetArray(w3,&w3_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),307,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
308 if (ctype == IS_COLORING_GLOBAL) w3_array -= cstart; /* shift pointer so global index can be used */
309 if (coloring->htype[0] == 'w') {
310 for (l=0; l<ncolumns[k]; l++) {
311 col = coloring->columns[k][l]; /* local column (in global index!) of the matrix we are probing for */
312 w3_array[col] += 1.0/dx;
313 }
314 } else { /* htype == 'ds' */
315 vscale_array -= cstart; /* shift pointer so global index can be used */
316 for (l=0; l<ncolumns[k]; l++) {
317 col = coloring->columns[k][l]; /* local column (in global index!) of the matrix we are probing for */
318 w3_array[col] += 1.0/vscale_array[col];
319 }
320 vscale_array += cstart;
321 }
322 if (ctype == IS_COLORING_GLOBAL) w3_array += cstart;
323 ierr = VecRestoreArray(w3,&w3_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),323,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
324
325 /*
326 (3-2) Evaluate function at w3 = x1 + dx (here dx is a vector of perturbations)
327 w2 = F(x1 + dx) - F(x1)
328 */
329 ierr = PetscLogEventBegin(MAT_FDColoringFunction,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[MAT_FDColoringFunction].active) ? (*PetscLogPLB)((MAT_FDColoringFunction
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),329,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
330 ierr = (*f)(sctx,w3,w2,fctx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),330,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
331 ierr = PetscLogEventEnd(MAT_FDColoringFunction,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[MAT_FDColoringFunction].active) ? (*PetscLogPLE)((MAT_FDColoringFunction
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),331,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
332 ierr = VecAXPY(w2,-1.0,w1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),332,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
333
334 /*
335 (3-3) Loop over rows of vector, putting results into Jacobian matrix
336 */
337 nrows_k = nrows[k];
338 ierr = VecGetArray(w2,&y);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),338,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
339 if (coloring->htype[0] == 'w') {
340 for (l=0; l<nrows_k; l++) {
341 row = Jentry2[nz].row; /* local row index */
342 *(Jentry2[nz++].valaddr) = y[row]*dx;
343 }
344 } else { /* htype == 'ds' */
345 for (l=0; l<nrows_k; l++) {
346 row = Jentry[nz].row; /* local row index */
347 *(Jentry[nz].valaddr) = y[row]*vscale_array[Jentry[nz].col];
348 nz++;
349 }
350 }
351 ierr = VecRestoreArray(w2,&y);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),351,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
352 }
353 }
354
355 ierr = MatAssemblyBegin(J,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),355,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
356 ierr = MatAssemblyEnd(J,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),356,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
357 if (vscale) {
358 ierr = VecRestoreArray(vscale,&vscale_array);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),358,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
359 }
360 coloring->currentcolor = -1;
361 ierr = VecPinToCPU(x1,PETSC_FALSE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),361,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
362 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)
;
363}
364
365PetscErrorCode MatFDColoringSetUp_MPIXAIJ(Mat mat,ISColoring iscoloring,MatFDColoring c)
366{
367 PetscErrorCode ierr;
368 PetscMPIInt size,*ncolsonproc,*disp,nn;
369 PetscInt i,n,nrows,nrows_i,j,k,m,ncols,col,*rowhit,cstart,cend,colb;
370 const PetscInt *is,*A_ci,*A_cj,*B_ci,*B_cj,*row=NULL((void*)0),*ltog=NULL((void*)0);
371 PetscInt nis=iscoloring->n,nctot,*cols,tmp = 0;
372 ISLocalToGlobalMapping map=mat->cmap->mapping;
373 PetscInt ctype=c->ctype,*spidxA,*spidxB,nz,bs,bs2,spidx;
374 Mat A,B;
375 PetscScalar *A_val,*B_val,**valaddrhit;
376 MatEntry *Jentry;
377 MatEntry2 *Jentry2;
378 PetscBool isBAIJ,isSELL;
379 PetscInt bcols=c->bcols;
380#if defined(PETSC_USE_CTABLE1)
381 PetscTable colmap=NULL((void*)0);
382#else
383 PetscInt *colmap=NULL((void*)0); /* local col number of off-diag col */
384#endif
385
386 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
; petscstack->line[petscstack->currentsize] = 386; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
387 if (ctype == IS_COLORING_LOCAL) {
1
Assuming 'ctype' is not equal to IS_COLORING_LOCAL
2
Taking false branch
388 if (!map) SETERRQ(PetscObjectComm((PetscObject)mat),PETSC_ERR_ARG_INCOMP,"When using ghosted differencing matrix must have local to global mapping provided with MatSetLocalToGlobalMapping")return PetscError(PetscObjectComm((PetscObject)mat),388,__func__
,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,75,PETSC_ERROR_INITIAL,"When using ghosted differencing matrix must have local to global mapping provided with MatSetLocalToGlobalMapping"
)
;
389 ierr = ISLocalToGlobalMappingGetIndices(map,&ltog);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),389,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
390 }
391
392 ierr = MatGetBlockSize(mat,&bs);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),392,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
393 ierr = PetscObjectTypeCompare((PetscObject)mat,MATMPIBAIJ"mpibaij",&isBAIJ);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),393,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
394 ierr = PetscObjectTypeCompare((PetscObject)mat,MATMPISELL"mpisell",&isSELL);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),394,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
395 if (isBAIJ) {
3
Assuming 'isBAIJ' is 0
4
Taking false branch
396 Mat_MPIBAIJ *baij=(Mat_MPIBAIJ*)mat->data;
397 Mat_SeqBAIJ *spA,*spB;
398 A = baij->A; spA = (Mat_SeqBAIJ*)A->data; A_val = spA->a;
399 B = baij->B; spB = (Mat_SeqBAIJ*)B->data; B_val = spB->a;
400 nz = spA->nz + spB->nz; /* total nonzero entries of mat */
401 if (!baij->colmap) {
402 ierr = MatCreateColmap_MPIBAIJ_Private(mat);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),402,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
403 }
404 colmap = baij->colmap;
405 ierr = MatGetColumnIJ_SeqBAIJ_Color(A,0,PETSC_FALSE,PETSC_FALSE,&ncols,&A_ci,&A_cj,&spidxA,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),405,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
406 ierr = MatGetColumnIJ_SeqBAIJ_Color(B,0,PETSC_FALSE,PETSC_FALSE,&ncols,&B_ci,&B_cj,&spidxB,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),406,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
407
408 if (ctype == IS_COLORING_GLOBAL && c->htype[0] == 'd') { /* create vscale for storing dx */
409 PetscInt *garray;
410 ierr = PetscMalloc1(B->cmap->n,&garray)PetscMallocA(1,PETSC_FALSE,410,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,(size_t)(B->cmap->n)*sizeof(**(&garray)),(&garray
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),410,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
411 for (i=0; i<baij->B->cmap->n/bs; i++) {
412 for (j=0; j<bs; j++) {
413 garray[i*bs+j] = bs*baij->garray[i]+j;
414 }
415 }
416 ierr = VecCreateGhost(PetscObjectComm((PetscObject)mat),mat->cmap->n,PETSC_DETERMINE-1,B->cmap->n,garray,&c->vscale);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),416,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
417 ierr = VecPinToCPU(c->vscale,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),417,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
418 ierr = PetscFree(garray)((*PetscTrFree)((void*)(garray),418,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
) || ((garray) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),418,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
419 }
420 } else if (isSELL) {
5
Assuming 'isSELL' is 0
6
Taking false branch
421 Mat_MPISELL *sell=(Mat_MPISELL*)mat->data;
422 Mat_SeqSELL *spA,*spB;
423 A = sell->A; spA = (Mat_SeqSELL*)A->data; A_val = spA->val;
424 B = sell->B; spB = (Mat_SeqSELL*)B->data; B_val = spB->val;
425 nz = spA->nz + spB->nz; /* total nonzero entries of mat */
426 if (!sell->colmap) {
427 /* Allow access to data structures of local part of matrix
428 - creates aij->colmap which maps global column number to local number in part B */
429 ierr = MatCreateColmap_MPISELL_Private(mat);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),429,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
430 }
431 colmap = sell->colmap;
432 ierr = MatGetColumnIJ_SeqSELL_Color(A,0,PETSC_FALSE,PETSC_FALSE,&ncols,&A_ci,&A_cj,&spidxA,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),432,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
433 ierr = MatGetColumnIJ_SeqSELL_Color(B,0,PETSC_FALSE,PETSC_FALSE,&ncols,&B_ci,&B_cj,&spidxB,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),433,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
434
435 bs = 1; /* only bs=1 is supported for non MPIBAIJ matrix */
436
437 if (ctype == IS_COLORING_GLOBAL && c->htype[0] == 'd') { /* create vscale for storing dx */
438 ierr = VecCreateGhost(PetscObjectComm((PetscObject)mat),mat->cmap->n,PETSC_DETERMINE-1,B->cmap->n,sell->garray,&c->vscale);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),438,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
439 ierr = VecPinToCPU(c->vscale,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),439,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
440 }
441 } else {
442 Mat_MPIAIJ *aij=(Mat_MPIAIJ*)mat->data;
443 Mat_SeqAIJ *spA,*spB;
444 A = aij->A; spA = (Mat_SeqAIJ*)A->data; A_val = spA->a;
445 B = aij->B; spB = (Mat_SeqAIJ*)B->data; B_val = spB->a;
446 nz = spA->nz + spB->nz; /* total nonzero entries of mat */
447 if (!aij->colmap) {
7
Assuming the condition is false
8
Taking false branch
448 /* Allow access to data structures of local part of matrix
449 - creates aij->colmap which maps global column number to local number in part B */
450 ierr = MatCreateColmap_MPIAIJ_Private(mat);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),450,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
451 }
452 colmap = aij->colmap;
453 ierr = MatGetColumnIJ_SeqAIJ_Color(A,0,PETSC_FALSE,PETSC_FALSE,&ncols,&A_ci,&A_cj,&spidxA,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),453,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
454 ierr = MatGetColumnIJ_SeqAIJ_Color(B,0,PETSC_FALSE,PETSC_FALSE,&ncols,&B_ci,&B_cj,&spidxB,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),454,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
455
456 bs = 1; /* only bs=1 is supported for non MPIBAIJ matrix */
457
458 if (ctype == IS_COLORING_GLOBAL && c->htype[0] == 'd') { /* create vscale for storing dx */
9
Assuming 'ctype' is equal to IS_COLORING_GLOBAL
10
Assuming the condition is false
11
Taking false branch
459 ierr = VecCreateGhost(PetscObjectComm((PetscObject)mat),mat->cmap->n,PETSC_DETERMINE-1,B->cmap->n,aij->garray,&c->vscale);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),459,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
460 ierr = VecPinToCPU(c->vscale,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),460,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
461 }
462 }
463
464 m = mat->rmap->n/bs;
465 cstart = mat->cmap->rstart/bs;
466 cend = mat->cmap->rend/bs;
467
468 ierr = PetscMalloc2(nis,&c->ncolumns,nis,&c->columns)PetscMallocA(2,PETSC_FALSE,468,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,(size_t)(nis)*sizeof(**(&c->ncolumns)),(&c->ncolumns
),(size_t)(nis)*sizeof(**(&c->columns)),(&c->columns
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),468,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
469 ierr = PetscMalloc1(nis,&c->nrows)PetscMallocA(1,PETSC_FALSE,469,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,(size_t)(nis)*sizeof(**(&c->nrows)),(&c->nrows
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),469,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
470 ierr = PetscLogObjectMemory((PetscObject)c,3*nis*sizeof(PetscInt));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),470,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
471
472 if (c->htype[0] == 'd') {
12
Assuming the condition is false
13
Taking false branch
473 ierr = PetscMalloc1(nz,&Jentry)PetscMallocA(1,PETSC_FALSE,473,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,(size_t)(nz)*sizeof(**(&Jentry)),(&Jentry))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),473,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
474 ierr = PetscLogObjectMemory((PetscObject)c,nz*sizeof(MatEntry));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),474,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
475 c->matentry = Jentry;
476 } else if (c->htype[0] == 'w') {
14
Assuming the condition is true
15
Taking true branch
477 ierr = PetscMalloc1(nz,&Jentry2)PetscMallocA(1,PETSC_FALSE,477,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,(size_t)(nz)*sizeof(**(&Jentry2)),(&Jentry2))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),477,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
478 ierr = PetscLogObjectMemory((PetscObject)c,nz*sizeof(MatEntry2));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),478,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
479 c->matentry2 = Jentry2;
480 } else SETERRQ(PetscObjectComm((PetscObject)mat),PETSC_ERR_SUP,"htype is not supported")return PetscError(PetscObjectComm((PetscObject)mat),480,__func__
,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,56,PETSC_ERROR_INITIAL,"htype is not supported")
;
481
482 ierr = PetscMalloc2(m+1,&rowhit,m+1,&valaddrhit)PetscMallocA(2,PETSC_FALSE,482,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,(size_t)(m+1)*sizeof(**(&rowhit)),(&rowhit),(size_t)
(m+1)*sizeof(**(&valaddrhit)),(&valaddrhit))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),482,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
483 nz = 0;
484 ierr = ISColoringGetIS(iscoloring,PETSC_OWN_POINTER, PETSC_IGNORE((void*)0),&c->isa);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),484,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
485
486 if (ctype == IS_COLORING_GLOBAL) {
16
Taking true branch
487 ierr = MPI_Comm_size(PetscObjectComm((PetscObject)mat),&size);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),487,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
488 ierr = PetscMalloc2(size,&ncolsonproc,size,&disp)PetscMallocA(2,PETSC_FALSE,488,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,(size_t)(size)*sizeof(**(&ncolsonproc)),(&ncolsonproc
),(size_t)(size)*sizeof(**(&disp)),(&disp))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),488,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
489 }
490
491 for (i=0; i<nis; i++) { /* for each local color */
17
Assuming 'i' is < 'nis'
18
Loop condition is true. Entering loop body
34
Assuming 'i' is < 'nis'
35
Loop condition is true. Entering loop body
492 ierr = ISGetLocalSize(c->isa[i],&n);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),492,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
493 ierr = ISGetIndices(c->isa[i],&is);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),493,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
494
495 c->ncolumns[i] = n; /* local number of columns of this color on this process */
496 c->columns[i] = (PetscInt*)is;
497
498 if (ctype == IS_COLORING_GLOBAL) {
19
Taking true branch
36
Taking true branch
499 /* Determine nctot, the total (parallel) number of columns of this color */
500 /* ncolsonproc[j]: local ncolumns on proc[j] of this color */
501 ierr = PetscMPIIntCast(n,&nn);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),501,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
502 ierr = MPI_Allgather(&nn,1,MPI_INT,ncolsonproc,1,MPI_INT,PetscObjectComm((PetscObject)mat))((petsc_gather_ct += PetscMPIParallelComm((PetscObjectComm((PetscObject
)mat))),0) || MPI_Allgather((&nn),(1),(((MPI_Datatype)0x4c000405
)),(ncolsonproc),(1),(((MPI_Datatype)0x4c000405)),(PetscObjectComm
((PetscObject)mat))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),502,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
503 nctot = 0; for (j=0; j<size; j++) nctot += ncolsonproc[j];
20
Assuming 'j' is < 'size'
21
Loop condition is true. Entering loop body
22
Assuming 'j' is >= 'size'
23
Loop condition is false. Execution continues on line 504
37
Loop condition is true. Entering loop body
38
Loop condition is false. Execution continues on line 504
504 if (!nctot) {
24
Assuming 'nctot' is not equal to 0
25
Taking false branch
39
Assuming 'nctot' is not equal to 0
40
Taking false branch
505 ierr = PetscInfo(mat,"Coloring of matrix has some unneeded colors with no corresponding rows\n")PetscInfo_Private(__func__,mat,"Coloring of matrix has some unneeded colors with no corresponding rows\n"
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),505,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
506 }
507
508 disp[0] = 0;
509 for (j=1; j<size; j++) {
26
Loop condition is false. Execution continues on line 514
41
Loop condition is false. Execution continues on line 514
510 disp[j] = disp[j-1] + ncolsonproc[j-1];
511 }
512
513 /* Get cols, the complete list of columns for this color on each process */
514 ierr = PetscMalloc1(nctot+1,&cols)PetscMallocA(1,PETSC_FALSE,514,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,(size_t)(nctot+1)*sizeof(**(&cols)),(&cols))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),514,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
515 ierr = MPI_Allgatherv((void*)is,n,MPIU_INT,cols,ncolsonproc,disp,MPIU_INT,PetscObjectComm((PetscObject)mat))((petsc_gather_ct += PetscMPIParallelComm((PetscObjectComm((PetscObject
)mat))),0) || MPI_Allgatherv(((void*)is),(n),(((MPI_Datatype)
0x4c000405)),(cols),(ncolsonproc),(disp),(((MPI_Datatype)0x4c000405
)),(PetscObjectComm((PetscObject)mat))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),515,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
516 } else if (ctype == IS_COLORING_LOCAL) {
517 /* Determine local number of columns of this color on this process, including ghost points */
518 nctot = n;
519 cols = (PetscInt*)is;
520 } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Not provided for this MatFDColoring type")return PetscError(((MPI_Comm)0x44000001),520,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,56,PETSC_ERROR_INITIAL,"Not provided for this MatFDColoring type"
)
;
521
522 /* Mark all rows affect by these columns */
523 ierr = PetscArrayzero(rowhit,m)PetscMemzero(rowhit,(m)*sizeof(*(rowhit)));;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),523,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
524 bs2 = bs*bs;
525 nrows_i = 0;
526 for (j=0; j<nctot; j++) { /* loop over columns*/
27
Assuming 'j' is >= 'nctot'
28
Loop condition is false. Execution continues on line 570
42
Assuming 'j' is < 'nctot'
43
Loop condition is true. Entering loop body
47
Assuming 'j' is < 'nctot'
48
Loop condition is true. Entering loop body
527 if (ctype == IS_COLORING_LOCAL) {
44
Taking false branch
49
Taking false branch
528 col = ltog[cols[j]];
529 } else {
530 col = cols[j];
531 }
532 if (col >= cstart && col < cend) { /* column is in A, diagonal block of mat */
533 tmp = A_ci[col-cstart];
534 row = A_cj + tmp;
535 nrows = A_ci[col-cstart+1] - tmp;
536 nrows_i += nrows;
537
538 /* loop over columns of A marking them in rowhit */
539 for (k=0; k<nrows; k++) {
540 /* set valaddrhit for part A */
541 spidx = bs2*spidxA[tmp + k];
542 valaddrhit[*row] = &A_val[spidx];
543 rowhit[*row++] = col - cstart + 1; /* local column index */
544 }
545 } else { /* column is in B, off-diagonal block of mat */
546#if defined(PETSC_USE_CTABLE1)
547 ierr = PetscTableFind(colmap,col+1,&colb);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),547,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
50
Calling 'PetscTableFind'
548 colb--;
549#else
550 colb = colmap[col] - 1; /* local column index */
551#endif
552 if (colb == -1) {
45
Taking true branch
553 nrows = 0;
554 } else {
555 colb = colb/bs;
556 tmp = B_ci[colb];
557 row = B_cj + tmp;
558 nrows = B_ci[colb+1] - tmp;
559 }
560 nrows_i += nrows;
561 /* loop over columns of B marking them in rowhit */
562 for (k=0; k<nrows; k++) {
46
Loop condition is false. Execution continues on line 526
563 /* set valaddrhit for part B */
564 spidx = bs2*spidxB[tmp + k];
565 valaddrhit[*row] = &B_val[spidx];
566 rowhit[*row++] = colb + 1 + cend - cstart; /* local column index */
567 }
568 }
569 }
570 c->nrows[i] = nrows_i;
571
572 if (c->htype[0] == 'd') {
29
Assuming the condition is false
30
Taking false branch
573 for (j=0; j<m; j++) {
574 if (rowhit[j]) {
575 Jentry[nz].row = j; /* local row index */
576 Jentry[nz].col = rowhit[j] - 1; /* local column index */
577 Jentry[nz].valaddr = valaddrhit[j]; /* address of mat value for this entry */
578 nz++;
579 }
580 }
581 } else { /* c->htype == 'wp' */
582 for (j=0; j<m; j++) {
31
Assuming 'j' is >= 'm'
32
Loop condition is false. Execution continues on line 590
583 if (rowhit[j]) {
584 Jentry2[nz].row = j; /* local row index */
585 Jentry2[nz].valaddr = valaddrhit[j]; /* address of mat value for this entry */
586 nz++;
587 }
588 }
589 }
590 if (ctype == IS_COLORING_GLOBAL) {
33
Taking true branch
591 ierr = PetscFree(cols)((*PetscTrFree)((void*)(cols),591,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
) || ((cols) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),591,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
592 }
593 }
594 if (ctype == IS_COLORING_GLOBAL) {
595 ierr = PetscFree2(ncolsonproc,disp)PetscFreeA(2,595,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,&(ncolsonproc),&(disp))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),595,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
596 }
597
598 if (bcols > 1) { /* reorder Jentry for faster MatFDColoringApply() */
599 ierr = MatFDColoringSetUpBlocked_AIJ_Private(mat,c,nz);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),599,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
600 }
601
602 if (isBAIJ) {
603 ierr = MatRestoreColumnIJ_SeqBAIJ_Color(A,0,PETSC_FALSE,PETSC_FALSE,&ncols,&A_ci,&A_cj,&spidxA,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),603,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
604 ierr = MatRestoreColumnIJ_SeqBAIJ_Color(B,0,PETSC_FALSE,PETSC_FALSE,&ncols,&B_ci,&B_cj,&spidxB,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),604,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
605 ierr = PetscMalloc1(bs*mat->rmap->n,&c->dy)PetscMallocA(1,PETSC_FALSE,605,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,(size_t)(bs*mat->rmap->n)*sizeof(**(&c->dy)),(&
c->dy))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),605,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
606 } else if (isSELL) {
607 ierr = MatRestoreColumnIJ_SeqSELL_Color(A,0,PETSC_FALSE,PETSC_FALSE,&ncols,&A_ci,&A_cj,&spidxA,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),607,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
608 ierr = MatRestoreColumnIJ_SeqSELL_Color(B,0,PETSC_FALSE,PETSC_FALSE,&ncols,&B_ci,&B_cj,&spidxB,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),608,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
609 }else {
610 ierr = MatRestoreColumnIJ_SeqAIJ_Color(A,0,PETSC_FALSE,PETSC_FALSE,&ncols,&A_ci,&A_cj,&spidxA,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),610,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
611 ierr = MatRestoreColumnIJ_SeqAIJ_Color(B,0,PETSC_FALSE,PETSC_FALSE,&ncols,&B_ci,&B_cj,&spidxB,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),611,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
612 }
613
614 ierr = ISColoringRestoreIS(iscoloring,PETSC_OWN_POINTER,&c->isa);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),614,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
615 ierr = PetscFree2(rowhit,valaddrhit)PetscFreeA(2,615,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,&(rowhit),&(valaddrhit))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),615,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
616
617 if (ctype == IS_COLORING_LOCAL) {
618 ierr = ISLocalToGlobalMappingRestoreIndices(map,&ltog);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),618,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
619 }
620 ierr = PetscInfo3(c,"ncolors %D, brows %D and bcols %D are used.\n",c->ncolors,c->brows,c->bcols)PetscInfo_Private(__func__,c,"ncolors %D, brows %D and bcols %D are used.\n"
,c->ncolors,c->brows,c->bcols)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),620,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
621 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)
;
622}
623
624PetscErrorCode MatFDColoringCreate_MPIXAIJ(Mat mat,ISColoring iscoloring,MatFDColoring c)
625{
626 PetscErrorCode ierr;
627 PetscInt bs,nis=iscoloring->n,m=mat->rmap->n;
628 PetscBool isBAIJ,isSELL;
629
630 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
; petscstack->line[petscstack->currentsize] = 630; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
631 /* set default brows and bcols for speedup inserting the dense matrix into sparse Jacobian;
632 bcols is chosen s.t. dy-array takes 50% of memory space as mat */
633 ierr = MatGetBlockSize(mat,&bs);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),633,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
634 ierr = PetscObjectTypeCompare((PetscObject)mat,MATMPIBAIJ"mpibaij",&isBAIJ);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),634,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
635 ierr = PetscObjectTypeCompare((PetscObject)mat,MATMPISELL"mpisell",&isSELL);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),635,__func__,"/sandbox/petsc/petsc.master/src/mat/impls/aij/mpi/fdmpiaij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
636 if (isBAIJ || m == 0) {
637 c->brows = m;
638 c->bcols = 1;
639 } else if (isSELL) {
640 /* bcols is chosen s.t. dy-array takes 50% of local memory space as mat */
641 Mat_MPISELL *sell=(Mat_MPISELL*)mat->data;
642 Mat_SeqSELL *spA,*spB;
643 Mat A,B;
644 PetscInt nz,brows,bcols;
645 PetscReal mem;
646
647 bs = 1; /* only bs=1 is supported for MPISELL matrix */
648
649 A = sell->A; spA = (Mat_SeqSELL*)A->data;
650 B = sell->B; spB = (Mat_SeqSELL*)B->data;
651 nz = spA->nz + spB->nz; /* total local nonzero entries of mat */
652 mem = nz*(sizeof(PetscScalar) + sizeof(PetscInt)) + 3*m*sizeof(PetscInt);
653 bcols = (PetscInt)(0.5*mem /(m*sizeof(PetscScalar)));
654 brows = 1000/bcols;
655 if (bcols > nis) bcols = nis;
656 if (brows == 0 || brows > m) brows = m;
657 c->brows = brows;
658 c->bcols = bcols;
659 } else { /* mpiaij matrix */
660 /* bcols is chosen s.t. dy-array takes 50% of local memory space as mat */
661 Mat_MPIAIJ *aij=(Mat_MPIAIJ*)mat->data;
662 Mat_SeqAIJ *spA,*spB;
663 Mat A,B;
664 PetscInt nz,brows,bcols;
665 PetscReal mem;
666
667 bs = 1; /* only bs=1 is supported for MPIAIJ matrix */
668
669 A = aij->A; spA = (Mat_SeqAIJ*)A->data;
670 B = aij->B; spB = (Mat_SeqAIJ*)B->data;
671 nz = spA->nz + spB->nz; /* total local nonzero entries of mat */
672 mem = nz*(sizeof(PetscScalar) + sizeof(PetscInt)) + 3*m*sizeof(PetscInt);
673 bcols = (PetscInt)(0.5*mem /(m*sizeof(PetscScalar)));
674 brows = 1000/bcols;
675 if (bcols > nis) bcols = nis;
676 if (brows == 0 || brows > m) brows = m;
677 c->brows = brows;
678 c->bcols = bcols;
679 }
680
681 c->M = mat->rmap->N/bs; /* set the global rows and columns and local rows */
682 c->N = mat->cmap->N/bs;
683 c->m = mat->rmap->n/bs;
684 c->rstart = mat->rmap->rstart/bs;
685 c->ncolors = nis;
686 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)
;
687}

/sandbox/petsc/petsc.master/include/petscctable.h

1#ifndef __PETSCCTABLE_H
2#define __PETSCCTABLE_H
3#include <petscsys.h>
4
5struct _n_PetscTable {
6 PetscInt *keytable;
7 PetscInt *table;
8 PetscInt count;
9 PetscInt tablesize;
10 PetscInt head;
11 PetscInt maxkey; /* largest key allowed */
12};
13
14typedef struct _n_PetscTable* PetscTable;
15typedef PetscInt* PetscTablePosition;
16
17PETSC_STATIC_INLINEstatic inline unsigned long PetscHash(PetscTable ta,unsigned long x)
18{
19 return(x%(unsigned long)ta->tablesize);
20}
21
22PETSC_STATIC_INLINEstatic inline unsigned long PetscHashStep(PetscTable ta,unsigned long x)
23{
24 return(1+(x%(unsigned long)(ta->tablesize-1)));
52
Division by zero
25}
26
27PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscTableCreate(const PetscInt,PetscInt,PetscTable*);
28PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscTableCreateCopy(const PetscTable,PetscTable*);
29PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscTableDestroy(PetscTable*);
30PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscTableGetCount(const PetscTable,PetscInt*);
31PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscTableIsEmpty(const PetscTable,PetscInt*);
32PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscTableAddExpand(PetscTable,PetscInt,PetscInt,InsertMode);
33PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscTableAddCountExpand(PetscTable,PetscInt);
34PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscTableGetHeadPosition(PetscTable,PetscTablePosition*);
35PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscTableGetNext(PetscTable,PetscTablePosition*,PetscInt*,PetscInt*);
36PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode PetscTableRemoveAll(PetscTable);
37
38PETSC_STATIC_INLINEstatic inline PetscErrorCode PetscTableAdd(PetscTable ta,PetscInt key,PetscInt data,InsertMode imode)
39{
40 PetscErrorCode ierr;
41 PetscInt i,hash = (PetscInt)PetscHash(ta,(unsigned long)key);
42 PetscInt hashstep = (PetscInt)PetscHashStep(ta,(unsigned long)key);
43
44 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/include/petscctable.h"; petscstack
->line[petscstack->currentsize] = 44; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
45 if (key <= 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"key <= 0")return PetscError(((MPI_Comm)0x44000001),45,__func__,"/sandbox/petsc/petsc.master/include/petscctable.h"
,63,PETSC_ERROR_INITIAL,"key <= 0")
;
46 if (key > ta->maxkey) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"key %D is greater than largest key allowed %D",key,ta->maxkey)return PetscError(((MPI_Comm)0x44000001),46,__func__,"/sandbox/petsc/petsc.master/include/petscctable.h"
,63,PETSC_ERROR_INITIAL,"key %D is greater than largest key allowed %D"
,key,ta->maxkey)
;
47 if (!data) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Null data")return PetscError(((MPI_Comm)0x44000001),47,__func__,"/sandbox/petsc/petsc.master/include/petscctable.h"
,63,PETSC_ERROR_INITIAL,"Null data")
;
48
49 for (i=0; i<ta->tablesize; i++) {
50 if (ta->keytable[hash] == key) {
51 switch (imode) {
52 case INSERT_VALUES:
53 ta->table[hash] = data; /* over write */
54 break;
55 case ADD_VALUES:
56 ta->table[hash] += data;
57 break;
58 case MAX_VALUES:
59 ta->table[hash] = PetscMax(ta->table[hash],data)(((ta->table[hash])<(data)) ? (data) : (ta->table[hash
]))
;
60 break;
61 case NOT_SET_VALUES:
62 case INSERT_ALL_VALUES:
63 case ADD_ALL_VALUES:
64 case INSERT_BC_VALUES:
65 case ADD_BC_VALUES:
66 SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Unsupported InsertMode")return PetscError(((MPI_Comm)0x44000001),66,__func__,"/sandbox/petsc/petsc.master/include/petscctable.h"
,56,PETSC_ERROR_INITIAL,"Unsupported InsertMode")
;
67 }
68 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)
;
69 } else if (!ta->keytable[hash]) {
70 if (ta->count < 5*(ta->tablesize/6) - 1) {
71 ta->count++; /* add */
72 ta->keytable[hash] = key;
73 ta->table[hash] = data;
74 } else {
75 ierr = PetscTableAddExpand(ta,key,data,imode);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),75,__func__,"/sandbox/petsc/petsc.master/include/petscctable.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
76 }
77 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
78 }
79 hash = (hash + hashstep)%ta->tablesize;
80 }
81 SETERRQ(PETSC_COMM_SELF,PETSC_ERR_COR,"Full table")return PetscError(((MPI_Comm)0x44000001),81,__func__,"/sandbox/petsc/petsc.master/include/petscctable.h"
,74,PETSC_ERROR_INITIAL,"Full table")
;
82 /* PetscFunctionReturn(0); */
83}
84
85PETSC_STATIC_INLINEstatic inline PetscErrorCode PetscTableAddCount(PetscTable ta,PetscInt key)
86{
87 PetscErrorCode ierr;
88 PetscInt i,hash = (PetscInt)PetscHash(ta,(unsigned long)key);
89 PetscInt hashstep = (PetscInt)PetscHashStep(ta,(unsigned long)key);
90
91 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/include/petscctable.h"; 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 if (key <= 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"key <= 0")return PetscError(((MPI_Comm)0x44000001),92,__func__,"/sandbox/petsc/petsc.master/include/petscctable.h"
,63,PETSC_ERROR_INITIAL,"key <= 0")
;
93 if (key > ta->maxkey) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"key %D is greater than largest key allowed %D",key,ta->maxkey)return PetscError(((MPI_Comm)0x44000001),93,__func__,"/sandbox/petsc/petsc.master/include/petscctable.h"
,63,PETSC_ERROR_INITIAL,"key %D is greater than largest key allowed %D"
,key,ta->maxkey)
;
94
95 for (i=0; i<ta->tablesize; i++) {
96 if (ta->keytable[hash] == key) {
97 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)
;
98 } else if (!ta->keytable[hash]) {
99 if (ta->count < 5*(ta->tablesize/6) - 1) {
100 ta->count++; /* add */
101 ta->keytable[hash] = key;
102 ta->table[hash] = ta->count;
103 } else {
104 ierr = PetscTableAddCountExpand(ta,key);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),104,__func__,"/sandbox/petsc/petsc.master/include/petscctable.h"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
105 }
106 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)
;
107 }
108 hash = (hash + hashstep)%ta->tablesize;
109 }
110 SETERRQ(PETSC_COMM_SELF,PETSC_ERR_COR,"Full table")return PetscError(((MPI_Comm)0x44000001),110,__func__,"/sandbox/petsc/petsc.master/include/petscctable.h"
,74,PETSC_ERROR_INITIAL,"Full table")
;
111 /* PetscFunctionReturn(0); */
112}
113
114/*
115 PetscTableFind - checks if a key is in the table
116
117 If data==0, then no table entry exists.
118
119*/
120PETSC_STATIC_INLINEstatic inline PetscErrorCode PetscTableFind(PetscTable ta,PetscInt key,PetscInt *data)
121{
122 PetscInt ii = 0;
123 PetscInt hash = (PetscInt)PetscHash(ta,(unsigned long)key);
124 PetscInt hashstep = (PetscInt)PetscHashStep(ta,(unsigned long)key);
51
Calling 'PetscHashStep'
125
126 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.master/include/petscctable.h"; petscstack
->line[petscstack->currentsize] = 126; petscstack->petscroutine
[petscstack->currentsize] = PETSC_TRUE; petscstack->currentsize
++; } if (petscstack) { petscstack->hotdepth += (PETSC_FALSE
|| petscstack->hotdepth); } ; } while (0); ; } while (0)
;
127 *data = 0;
128 if (key <= 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Key <= 0")return PetscError(((MPI_Comm)0x44000001),128,__func__,"/sandbox/petsc/petsc.master/include/petscctable.h"
,63,PETSC_ERROR_INITIAL,"Key <= 0")
;
129 if (key > ta->maxkey) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"key %D is greater than largest key allowed %D",key,ta->maxkey)return PetscError(((MPI_Comm)0x44000001),129,__func__,"/sandbox/petsc/petsc.master/include/petscctable.h"
,63,PETSC_ERROR_INITIAL,"key %D is greater than largest key allowed %D"
,key,ta->maxkey)
;
130
131 while (ii++ < ta->tablesize) {
132 if (!ta->keytable[hash]) break;
133 else if (ta->keytable[hash] == key) {
134 *data = ta->table[hash];
135 break;
136 }
137 hash = (hash + hashstep)%ta->tablesize;
138 }
139 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)
;
140}
141
142#endif