Bug Summary

File:mat/impls/baij/seq/baij.c
Warning:line 1886, column 22
Dereference of null pointer

Annotated Source Code

[?] Use j/k keys for keyboard navigation

1
2/*
3 Defines the basic matrix operations for the BAIJ (compressed row)
4 matrix storage format.
5*/
6#include <../src/mat/impls/baij/seq/baij.h> /*I "petscmat.h" I*/
7#include <petscblaslapack.h>
8#include <petsc/private/kernels/blockinvert.h>
9#include <petsc/private/kernels/blockmatmult.h>
10
11#if defined(PETSC_HAVE_HYPRE)
12PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode MatConvert_AIJ_HYPRE(Mat,MatType,MatReuse,Mat*);
13#endif
14
15#if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE)
16PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode MatConvert_SeqBAIJ_SeqBAIJMKL(Mat,MatType,MatReuse,Mat*);
17#endif
18PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode MatConvert_XAIJ_IS(Mat,MatType,MatReuse,Mat*);
19PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode MatPtAP_IS_XAIJ(Mat,Mat,MatReuse,PetscReal,Mat*);
20
21PetscErrorCode MatInvertBlockDiagonal_SeqBAIJ(Mat A,const PetscScalar **values)
22{
23 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*) A->data;
24 PetscErrorCode ierr;
25 PetscInt *diag_offset,i,bs = A->rmap->bs,mbs = a->mbs,ipvt[5],bs2 = bs*bs,*v_pivots;
26 MatScalar *v = a->a,*odiag,*diag,work[25],*v_work;
27 PetscReal shift = 0.0;
28 PetscBool allowzeropivot,zeropivotdetected=PETSC_FALSE;
29
30 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 30; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
31 allowzeropivot = PetscNot(A->erroriffailure)((A->erroriffailure) ? PETSC_FALSE : PETSC_TRUE);
32
33 if (a->idiagvalid) {
34 if (values) *values = a->idiag;
35 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)
;
36 }
37 ierr = MatMarkDiagonal_SeqBAIJ(A);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),37,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
38 diag_offset = a->diag;
39 if (!a->idiag) {
40 ierr = PetscMalloc1(bs2*mbs,&a->idiag)PetscMallocA(1,PETSC_FALSE,40,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(bs2*mbs)*sizeof(**(&a->idiag)),(&a->idiag
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),40,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
41 ierr = PetscLogObjectMemory((PetscObject)A,bs2*mbs*sizeof(PetscScalar));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),41,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
42 }
43 diag = a->idiag;
44 if (values) *values = a->idiag;
45 /* factor and invert each block */
46 switch (bs) {
47 case 1:
48 for (i=0; i<mbs; i++) {
49 odiag = v + 1*diag_offset[i];
50 diag[0] = odiag[0];
51
52 if (PetscAbsScalar(diag[0] + shift) < PETSC_MACHINE_EPSILON2.2204460492503131e-16) {
53 if (allowzeropivot) {
54 A->factorerrortype = MAT_FACTOR_NUMERIC_ZEROPIVOT;
55 A->factorerror_zeropivot_value = PetscAbsScalar(diag[0]);
56 A->factorerror_zeropivot_row = i;
57 ierr = PetscInfo1(A,"Zero pivot, row %D\n",i)PetscInfo_Private(__func__,A,"Zero pivot, row %D\n",i);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),57,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
58 } else SETERRQ3(PETSC_COMM_SELF,PETSC_ERR_MAT_LU_ZRPVT,"Zero pivot, row %D pivot value %g tolerance %g",i,(double)PetscAbsScalar(diag[0]),(double)PETSC_MACHINE_EPSILON)return PetscError(((MPI_Comm)0x44000001),58,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,71,PETSC_ERROR_INITIAL,"Zero pivot, row %D pivot value %g tolerance %g"
,i,(double)PetscAbsScalar(diag[0]),(double)2.2204460492503131e-16
)
;
59 }
60
61 diag[0] = (PetscScalar)1.0 / (diag[0] + shift);
62 diag += 1;
63 }
64 break;
65 case 2:
66 for (i=0; i<mbs; i++) {
67 odiag = v + 4*diag_offset[i];
68 diag[0] = odiag[0]; diag[1] = odiag[1]; diag[2] = odiag[2]; diag[3] = odiag[3];
69 ierr = PetscKernel_A_gets_inverse_A_2(diag,shift,allowzeropivot,&zeropivotdetected);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),69,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
70 if (zeropivotdetected) A->factorerrortype = MAT_FACTOR_NUMERIC_ZEROPIVOT;
71 diag += 4;
72 }
73 break;
74 case 3:
75 for (i=0; i<mbs; i++) {
76 odiag = v + 9*diag_offset[i];
77 diag[0] = odiag[0]; diag[1] = odiag[1]; diag[2] = odiag[2]; diag[3] = odiag[3];
78 diag[4] = odiag[4]; diag[5] = odiag[5]; diag[6] = odiag[6]; diag[7] = odiag[7];
79 diag[8] = odiag[8];
80 ierr = PetscKernel_A_gets_inverse_A_3(diag,shift,allowzeropivot,&zeropivotdetected);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),80,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
81 if (zeropivotdetected) A->factorerrortype = MAT_FACTOR_NUMERIC_ZEROPIVOT;
82 diag += 9;
83 }
84 break;
85 case 4:
86 for (i=0; i<mbs; i++) {
87 odiag = v + 16*diag_offset[i];
88 ierr = PetscArraycpy(diag,odiag,16)((sizeof(*(diag)) != sizeof(*(odiag))) || PetscMemcpy(diag,odiag
,(16)*sizeof(*(diag))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),88,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
89 ierr = PetscKernel_A_gets_inverse_A_4(diag,shift,allowzeropivot,&zeropivotdetected);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),89,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
90 if (zeropivotdetected) A->factorerrortype = MAT_FACTOR_NUMERIC_ZEROPIVOT;
91 diag += 16;
92 }
93 break;
94 case 5:
95 for (i=0; i<mbs; i++) {
96 odiag = v + 25*diag_offset[i];
97 ierr = PetscArraycpy(diag,odiag,25)((sizeof(*(diag)) != sizeof(*(odiag))) || PetscMemcpy(diag,odiag
,(25)*sizeof(*(diag))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),97,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
98 ierr = PetscKernel_A_gets_inverse_A_5(diag,ipvt,work,shift,allowzeropivot,&zeropivotdetected);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),98,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
99 if (zeropivotdetected) A->factorerrortype = MAT_FACTOR_NUMERIC_ZEROPIVOT;
100 diag += 25;
101 }
102 break;
103 case 6:
104 for (i=0; i<mbs; i++) {
105 odiag = v + 36*diag_offset[i];
106 ierr = PetscArraycpy(diag,odiag,36)((sizeof(*(diag)) != sizeof(*(odiag))) || PetscMemcpy(diag,odiag
,(36)*sizeof(*(diag))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),106,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
107 ierr = PetscKernel_A_gets_inverse_A_6(diag,shift,allowzeropivot,&zeropivotdetected);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),107,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
108 if (zeropivotdetected) A->factorerrortype = MAT_FACTOR_NUMERIC_ZEROPIVOT;
109 diag += 36;
110 }
111 break;
112 case 7:
113 for (i=0; i<mbs; i++) {
114 odiag = v + 49*diag_offset[i];
115 ierr = PetscArraycpy(diag,odiag,49)((sizeof(*(diag)) != sizeof(*(odiag))) || PetscMemcpy(diag,odiag
,(49)*sizeof(*(diag))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),115,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
116 ierr = PetscKernel_A_gets_inverse_A_7(diag,shift,allowzeropivot,&zeropivotdetected);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),116,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
117 if (zeropivotdetected) A->factorerrortype = MAT_FACTOR_NUMERIC_ZEROPIVOT;
118 diag += 49;
119 }
120 break;
121 default:
122 ierr = PetscMalloc2(bs,&v_work,bs,&v_pivots)PetscMallocA(2,PETSC_FALSE,122,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(bs)*sizeof(**(&v_work)),(&v_work),(size_t)(
bs)*sizeof(**(&v_pivots)),(&v_pivots))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),122,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
123 for (i=0; i<mbs; i++) {
124 odiag = v + bs2*diag_offset[i];
125 ierr = PetscArraycpy(diag,odiag,bs2)((sizeof(*(diag)) != sizeof(*(odiag))) || PetscMemcpy(diag,odiag
,(bs2)*sizeof(*(diag))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),125,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
126 ierr = PetscKernel_A_gets_inverse_A(bs,diag,v_pivots,v_work,allowzeropivot,&zeropivotdetected)(PetscLINPACKgefa((diag),(bs),(v_pivots),(allowzeropivot),(&
zeropivotdetected)) || PetscLINPACKgedi((diag),(bs),(v_pivots
),(v_work)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),126,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
127 if (zeropivotdetected) A->factorerrortype = MAT_FACTOR_NUMERIC_ZEROPIVOT;
128 diag += bs2;
129 }
130 ierr = PetscFree2(v_work,v_pivots)PetscFreeA(2,130,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,&(v_work),&(v_pivots))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),130,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
131 }
132 a->idiagvalid = PETSC_TRUE;
133 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
134}
135
136PetscErrorCode MatSOR_SeqBAIJ(Mat A,Vec bb,PetscReal omega,MatSORType flag,PetscReal fshift,PetscInt its,PetscInt lits,Vec xx)
137{
138 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
139 PetscScalar *x,*work,*w,*workt,*t;
140 const MatScalar *v,*aa = a->a, *idiag;
141 const PetscScalar *b,*xb;
142 PetscScalar s[7], xw[7]={0}; /* avoid some compilers thinking xw is uninitialized */
143 PetscErrorCode ierr;
144 PetscInt m = a->mbs,i,i2,nz,bs = A->rmap->bs,bs2 = bs*bs,k,j,idx,it;
145 const PetscInt *diag,*ai = a->i,*aj = a->j,*vi;
146
147 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 147; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
148 its = its*lits;
149 if (flag & SOR_EISENSTAT) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support yet for Eisenstat")return PetscError(((MPI_Comm)0x44000001),149,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,56,PETSC_ERROR_INITIAL,"No support yet for Eisenstat")
;
150 if (its <= 0) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Relaxation requires global its %D and local its %D both positive",its,lits)return PetscError(((MPI_Comm)0x44000001),150,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,62,PETSC_ERROR_INITIAL,"Relaxation requires global its %D and local its %D both positive"
,its,lits)
;
151 if (fshift) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Sorry, no support for diagonal shift")return PetscError(((MPI_Comm)0x44000001),151,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,56,PETSC_ERROR_INITIAL,"Sorry, no support for diagonal shift"
)
;
152 if (omega != 1.0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Sorry, no support for non-trivial relaxation factor")return PetscError(((MPI_Comm)0x44000001),152,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,56,PETSC_ERROR_INITIAL,"Sorry, no support for non-trivial relaxation factor"
)
;
153 if ((flag & SOR_APPLY_UPPER) || (flag & SOR_APPLY_LOWER)) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Sorry, no support for applying upper or lower triangular parts")return PetscError(((MPI_Comm)0x44000001),153,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,56,PETSC_ERROR_INITIAL,"Sorry, no support for applying upper or lower triangular parts"
)
;
154
155 if (!a->idiagvalid) {ierr = MatInvertBlockDiagonal(A,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),155,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
156
157 if (!m) 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)
;
158 diag = a->diag;
159 idiag = a->idiag;
160 k = PetscMax(A->rmap->n,A->cmap->n)(((A->rmap->n)<(A->cmap->n)) ? (A->cmap->
n) : (A->rmap->n))
;
161 if (!a->mult_work) {
162 ierr = PetscMalloc1(k+1,&a->mult_work)PetscMallocA(1,PETSC_FALSE,162,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(k+1)*sizeof(**(&a->mult_work)),(&a->mult_work
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),162,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
163 }
164 if (!a->sor_workt) {
165 ierr = PetscMalloc1(k,&a->sor_workt)PetscMallocA(1,PETSC_FALSE,165,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(k)*sizeof(**(&a->sor_workt)),(&a->sor_workt
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),165,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
166 }
167 if (!a->sor_work) {
168 ierr = PetscMalloc1(bs,&a->sor_work)PetscMallocA(1,PETSC_FALSE,168,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(bs)*sizeof(**(&a->sor_work)),(&a->sor_work
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),168,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
169 }
170 work = a->mult_work;
171 t = a->sor_workt;
172 w = a->sor_work;
173
174 ierr = VecGetArray(xx,&x);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),174,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
175 ierr = VecGetArrayRead(bb,&b);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),175,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
176
177 if (flag & SOR_ZERO_INITIAL_GUESS) {
178 if (flag & SOR_FORWARD_SWEEP || flag & SOR_LOCAL_FORWARD_SWEEP) {
179 switch (bs) {
180 case 1:
181 PetscKernel_v_gets_A_times_w_1(x,idiag,b)do { x[0] = idiag[0]*b[0]; } while (0);
182 t[0] = b[0];
183 i2 = 1;
184 idiag += 1;
185 for (i=1; i<m; i++) {
186 v = aa + ai[i];
187 vi = aj + ai[i];
188 nz = diag[i] - ai[i];
189 s[0] = b[i2];
190 for (j=0; j<nz; j++) {
191 xw[0] = x[vi[j]];
192 PetscKernel_v_gets_v_minus_A_times_w_1(s,(v+j),xw)do { s[0] -= (v+j)[0]*xw[0]; } while (0);
193 }
194 t[i2] = s[0];
195 PetscKernel_v_gets_A_times_w_1(xw,idiag,s)do { xw[0] = idiag[0]*s[0]; } while (0);
196 x[i2] = xw[0];
197 idiag += 1;
198 i2 += 1;
199 }
200 break;
201 case 2:
202 PetscKernel_v_gets_A_times_w_2(x,idiag,b)do { x[0] = idiag[0]*b[0] + idiag[2]*b[1]; x[1] = idiag[1]*b[
0] + idiag[3]*b[1]; } while (0)
;
203 t[0] = b[0]; t[1] = b[1];
204 i2 = 2;
205 idiag += 4;
206 for (i=1; i<m; i++) {
207 v = aa + 4*ai[i];
208 vi = aj + ai[i];
209 nz = diag[i] - ai[i];
210 s[0] = b[i2]; s[1] = b[i2+1];
211 for (j=0; j<nz; j++) {
212 idx = 2*vi[j];
213 it = 4*j;
214 xw[0] = x[idx]; xw[1] = x[1+idx];
215 PetscKernel_v_gets_v_minus_A_times_w_2(s,(v+it),xw)do { s[0] -= (v+it)[0]*xw[0] + (v+it)[2]*xw[1]; s[1] -= (v+it
)[1]*xw[0] + (v+it)[3]*xw[1]; } while (0)
;
216 }
217 t[i2] = s[0]; t[i2+1] = s[1];
218 PetscKernel_v_gets_A_times_w_2(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[2]*s[1]; xw[1] = idiag[1]*
s[0] + idiag[3]*s[1]; } while (0)
;
219 x[i2] = xw[0]; x[i2+1] = xw[1];
220 idiag += 4;
221 i2 += 2;
222 }
223 break;
224 case 3:
225 PetscKernel_v_gets_A_times_w_3(x,idiag,b)do { x[0] = idiag[0]*b[0] + idiag[3]*b[1] + idiag[6]*b[2]; x[
1] = idiag[1]*b[0] + idiag[4]*b[1] + idiag[7]*b[2]; x[2] = idiag
[2]*b[0] + idiag[5]*b[1] + idiag[8]*b[2]; } while (0)
;
226 t[0] = b[0]; t[1] = b[1]; t[2] = b[2];
227 i2 = 3;
228 idiag += 9;
229 for (i=1; i<m; i++) {
230 v = aa + 9*ai[i];
231 vi = aj + ai[i];
232 nz = diag[i] - ai[i];
233 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2];
234 while (nz--) {
235 idx = 3*(*vi++);
236 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx];
237 PetscKernel_v_gets_v_minus_A_times_w_3(s,v,xw)do { s[0] -= v[0]*xw[0] + v[3]*xw[1] + v[6]*xw[2]; s[1] -= v[
1]*xw[0] + v[4]*xw[1] + v[7]*xw[2]; s[2] -= v[2]*xw[0] + v[5]
*xw[1] + v[8]*xw[2]; } while (0)
;
238 v += 9;
239 }
240 t[i2] = s[0]; t[i2+1] = s[1]; t[i2+2] = s[2];
241 PetscKernel_v_gets_A_times_w_3(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[3]*s[1] + idiag[6]*s[2]; xw
[1] = idiag[1]*s[0] + idiag[4]*s[1] + idiag[7]*s[2]; xw[2] = idiag
[2]*s[0] + idiag[5]*s[1] + idiag[8]*s[2]; } while (0)
;
242 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2];
243 idiag += 9;
244 i2 += 3;
245 }
246 break;
247 case 4:
248 PetscKernel_v_gets_A_times_w_4(x,idiag,b)do { x[0] = idiag[0]*b[0] + idiag[4]*b[1] + idiag[8] *b[2] + idiag
[12]*b[3]; x[1] = idiag[1]*b[0] + idiag[5]*b[1] + idiag[9] *b
[2] + idiag[13]*b[3]; x[2] = idiag[2]*b[0] + idiag[6]*b[1] + idiag
[10]*b[2] + idiag[14]*b[3]; x[3] = idiag[3]*b[0] + idiag[7]*b
[1] + idiag[11]*b[2] + idiag[15]*b[3]; } while (0)
;
249 t[0] = b[0]; t[1] = b[1]; t[2] = b[2]; t[3] = b[3];
250 i2 = 4;
251 idiag += 16;
252 for (i=1; i<m; i++) {
253 v = aa + 16*ai[i];
254 vi = aj + ai[i];
255 nz = diag[i] - ai[i];
256 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2]; s[3] = b[i2+3];
257 while (nz--) {
258 idx = 4*(*vi++);
259 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx]; xw[3] = x[3+idx];
260 PetscKernel_v_gets_v_minus_A_times_w_4(s,v,xw)do { s[0] -= v[0]*xw[0] + v[4]*xw[1] + v[8] *xw[2] + v[12]*xw
[3]; s[1] -= v[1]*xw[0] + v[5]*xw[1] + v[9] *xw[2] + v[13]*xw
[3]; s[2] -= v[2]*xw[0] + v[6]*xw[1] + v[10]*xw[2] + v[14]*xw
[3]; s[3] -= v[3]*xw[0] + v[7]*xw[1] + v[11]*xw[2] + v[15]*xw
[3]; } while (0)
;
261 v += 16;
262 }
263 t[i2] = s[0]; t[i2+1] = s[1]; t[i2+2] = s[2]; t[i2 + 3] = s[3];
264 PetscKernel_v_gets_A_times_w_4(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[4]*s[1] + idiag[8] *s[2] +
idiag[12]*s[3]; xw[1] = idiag[1]*s[0] + idiag[5]*s[1] + idiag
[9] *s[2] + idiag[13]*s[3]; xw[2] = idiag[2]*s[0] + idiag[6]*
s[1] + idiag[10]*s[2] + idiag[14]*s[3]; xw[3] = idiag[3]*s[0]
+ idiag[7]*s[1] + idiag[11]*s[2] + idiag[15]*s[3]; } while (
0)
;
265 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2]; x[i2+3] = xw[3];
266 idiag += 16;
267 i2 += 4;
268 }
269 break;
270 case 5:
271 PetscKernel_v_gets_A_times_w_5(x,idiag,b)do { x[0] = idiag[0]*b[0] + idiag[5]*b[1] + idiag[10]*b[2] + idiag
[15]*b[3] + idiag[20]*b[4]; x[1] = idiag[1]*b[0] + idiag[6]*b
[1] + idiag[11]*b[2] + idiag[16]*b[3] + idiag[21]*b[4]; x[2] =
idiag[2]*b[0] + idiag[7]*b[1] + idiag[12]*b[2] + idiag[17]*b
[3] + idiag[22]*b[4]; x[3] = idiag[3]*b[0] + idiag[8]*b[1] + idiag
[13]*b[2] + idiag[18]*b[3] + idiag[23]*b[4]; x[4] = idiag[4]*
b[0] + idiag[9]*b[1] + idiag[14]*b[2] + idiag[19]*b[3] + idiag
[24]*b[4]; } while (0)
;
272 t[0] = b[0]; t[1] = b[1]; t[2] = b[2]; t[3] = b[3]; t[4] = b[4];
273 i2 = 5;
274 idiag += 25;
275 for (i=1; i<m; i++) {
276 v = aa + 25*ai[i];
277 vi = aj + ai[i];
278 nz = diag[i] - ai[i];
279 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2]; s[3] = b[i2+3]; s[4] = b[i2+4];
280 while (nz--) {
281 idx = 5*(*vi++);
282 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx]; xw[3] = x[3+idx]; xw[4] = x[4+idx];
283 PetscKernel_v_gets_v_minus_A_times_w_5(s,v,xw)do { s[0] -= v[0]*xw[0] + v[5]*xw[1] + v[10]*xw[2] + v[15]*xw
[3] + v[20]*xw[4]; s[1] -= v[1]*xw[0] + v[6]*xw[1] + v[11]*xw
[2] + v[16]*xw[3] + v[21]*xw[4]; s[2] -= v[2]*xw[0] + v[7]*xw
[1] + v[12]*xw[2] + v[17]*xw[3] + v[22]*xw[4]; s[3] -= v[3]*xw
[0] + v[8]*xw[1] + v[13]*xw[2] + v[18]*xw[3] + v[23]*xw[4]; s
[4] -= v[4]*xw[0] + v[9]*xw[1] + v[14]*xw[2] + v[19]*xw[3] + v
[24]*xw[4]; } while (0)
;
284 v += 25;
285 }
286 t[i2] = s[0]; t[i2+1] = s[1]; t[i2+2] = s[2]; t[i2+3] = s[3]; t[i2+4] = s[4];
287 PetscKernel_v_gets_A_times_w_5(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[5]*s[1] + idiag[10]*s[2] +
idiag[15]*s[3] + idiag[20]*s[4]; xw[1] = idiag[1]*s[0] + idiag
[6]*s[1] + idiag[11]*s[2] + idiag[16]*s[3] + idiag[21]*s[4]; xw
[2] = idiag[2]*s[0] + idiag[7]*s[1] + idiag[12]*s[2] + idiag[
17]*s[3] + idiag[22]*s[4]; xw[3] = idiag[3]*s[0] + idiag[8]*s
[1] + idiag[13]*s[2] + idiag[18]*s[3] + idiag[23]*s[4]; xw[4]
= idiag[4]*s[0] + idiag[9]*s[1] + idiag[14]*s[2] + idiag[19]
*s[3] + idiag[24]*s[4]; } while (0)
;
288 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2]; x[i2+3] = xw[3]; x[i2+4] = xw[4];
289 idiag += 25;
290 i2 += 5;
291 }
292 break;
293 case 6:
294 PetscKernel_v_gets_A_times_w_6(x,idiag,b)do { x[0] = idiag[0]*b[0] + idiag[6] *b[1] + idiag[12]*b[2] +
idiag[18]*b[3] + idiag[24]*b[4] + idiag[30]*b[5]; x[1] = idiag
[1]*b[0] + idiag[7] *b[1] + idiag[13]*b[2] + idiag[19]*b[3] +
idiag[25]*b[4] + idiag[31]*b[5]; x[2] = idiag[2]*b[0] + idiag
[8] *b[1] + idiag[14]*b[2] + idiag[20]*b[3] + idiag[26]*b[4] +
idiag[32]*b[5]; x[3] = idiag[3]*b[0] + idiag[9] *b[1] + idiag
[15]*b[2] + idiag[21]*b[3] + idiag[27]*b[4] + idiag[33]*b[5];
x[4] = idiag[4]*b[0] + idiag[10]*b[1] + idiag[16]*b[2] + idiag
[22]*b[3] + idiag[28]*b[4] + idiag[34]*b[5]; x[5] = idiag[5]*
b[0] + idiag[11]*b[1] + idiag[17]*b[2] + idiag[23]*b[3] + idiag
[29]*b[4] + idiag[35]*b[5]; } while (0)
;
295 t[0] = b[0]; t[1] = b[1]; t[2] = b[2]; t[3] = b[3]; t[4] = b[4]; t[5] = b[5];
296 i2 = 6;
297 idiag += 36;
298 for (i=1; i<m; i++) {
299 v = aa + 36*ai[i];
300 vi = aj + ai[i];
301 nz = diag[i] - ai[i];
302 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2]; s[3] = b[i2+3]; s[4] = b[i2+4]; s[5] = b[i2+5];
303 while (nz--) {
304 idx = 6*(*vi++);
305 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx];
306 xw[3] = x[3+idx]; xw[4] = x[4+idx]; xw[5] = x[5+idx];
307 PetscKernel_v_gets_v_minus_A_times_w_6(s,v,xw)do { s[0] -= v[0]*xw[0] + v[6] *xw[1] + v[12]*xw[2] + v[18]*xw
[3] + v[24]*xw[4] + v[30]*xw[5]; s[1] -= v[1]*xw[0] + v[7] *xw
[1] + v[13]*xw[2] + v[19]*xw[3] + v[25]*xw[4] + v[31]*xw[5]; s
[2] -= v[2]*xw[0] + v[8] *xw[1] + v[14]*xw[2] + v[20]*xw[3] +
v[26]*xw[4] + v[32]*xw[5]; s[3] -= v[3]*xw[0] + v[9] *xw[1] +
v[15]*xw[2] + v[21]*xw[3] + v[27]*xw[4] + v[33]*xw[5]; s[4] -=
v[4]*xw[0] + v[10]*xw[1] + v[16]*xw[2] + v[22]*xw[3] + v[28]
*xw[4] + v[34]*xw[5]; s[5] -= v[5]*xw[0] + v[11]*xw[1] + v[17
]*xw[2] + v[23]*xw[3] + v[29]*xw[4] + v[35]*xw[5]; } while (0
)
;
308 v += 36;
309 }
310 t[i2] = s[0]; t[i2+1] = s[1]; t[i2+2] = s[2];
311 t[i2+3] = s[3]; t[i2+4] = s[4]; t[i2+5] = s[5];
312 PetscKernel_v_gets_A_times_w_6(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[6] *s[1] + idiag[12]*s[2] +
idiag[18]*s[3] + idiag[24]*s[4] + idiag[30]*s[5]; xw[1] = idiag
[1]*s[0] + idiag[7] *s[1] + idiag[13]*s[2] + idiag[19]*s[3] +
idiag[25]*s[4] + idiag[31]*s[5]; xw[2] = idiag[2]*s[0] + idiag
[8] *s[1] + idiag[14]*s[2] + idiag[20]*s[3] + idiag[26]*s[4] +
idiag[32]*s[5]; xw[3] = idiag[3]*s[0] + idiag[9] *s[1] + idiag
[15]*s[2] + idiag[21]*s[3] + idiag[27]*s[4] + idiag[33]*s[5];
xw[4] = idiag[4]*s[0] + idiag[10]*s[1] + idiag[16]*s[2] + idiag
[22]*s[3] + idiag[28]*s[4] + idiag[34]*s[5]; xw[5] = idiag[5]
*s[0] + idiag[11]*s[1] + idiag[17]*s[2] + idiag[23]*s[3] + idiag
[29]*s[4] + idiag[35]*s[5]; } while (0)
;
313 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2]; x[i2+3] = xw[3]; x[i2+4] = xw[4]; x[i2+5] = xw[5];
314 idiag += 36;
315 i2 += 6;
316 }
317 break;
318 case 7:
319 PetscKernel_v_gets_A_times_w_7(x,idiag,b)do { x[0] = idiag[0]*b[0] + idiag[7] *b[1] + idiag[14]*b[2] +
idiag[21]*b[3] + idiag[28]*b[4] + idiag[35]*b[5] + idiag[42]
*b[6]; x[1] = idiag[1]*b[0] + idiag[8] *b[1] + idiag[15]*b[2]
+ idiag[22]*b[3] + idiag[29]*b[4] + idiag[36]*b[5] + idiag[43
]*b[6]; x[2] = idiag[2]*b[0] + idiag[9] *b[1] + idiag[16]*b[2
] + idiag[23]*b[3] + idiag[30]*b[4] + idiag[37]*b[5] + idiag[
44]*b[6]; x[3] = idiag[3]*b[0] + idiag[10]*b[1] + idiag[17]*b
[2] + idiag[24]*b[3] + idiag[31]*b[4] + idiag[38]*b[5] + idiag
[45]*b[6]; x[4] = idiag[4]*b[0] + idiag[11]*b[1] + idiag[18]*
b[2] + idiag[25]*b[3] + idiag[32]*b[4] + idiag[39]*b[5] + idiag
[46]*b[6]; x[5] = idiag[5]*b[0] + idiag[12]*b[1] + idiag[19]*
b[2] + idiag[26]*b[3] + idiag[33]*b[4] + idiag[40]*b[5] + idiag
[47]*b[6]; x[6] = idiag[6]*b[0] + idiag[13]*b[1] + idiag[20]*
b[2] + idiag[27]*b[3] + idiag[34]*b[4] + idiag[41]*b[5] + idiag
[48]*b[6]; } while (0)
;
320 t[0] = b[0]; t[1] = b[1]; t[2] = b[2];
321 t[3] = b[3]; t[4] = b[4]; t[5] = b[5]; t[6] = b[6];
322 i2 = 7;
323 idiag += 49;
324 for (i=1; i<m; i++) {
325 v = aa + 49*ai[i];
326 vi = aj + ai[i];
327 nz = diag[i] - ai[i];
328 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2];
329 s[3] = b[i2+3]; s[4] = b[i2+4]; s[5] = b[i2+5]; s[6] = b[i2+6];
330 while (nz--) {
331 idx = 7*(*vi++);
332 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx];
333 xw[3] = x[3+idx]; xw[4] = x[4+idx]; xw[5] = x[5+idx]; xw[6] = x[6+idx];
334 PetscKernel_v_gets_v_minus_A_times_w_7(s,v,xw)do { s[0] -= v[0]*xw[0] + v[7] *xw[1] + v[14]*xw[2] + v[21]*xw
[3] + v[28]*xw[4] + v[35]*xw[5] + v[42]*xw[6]; s[1] -= v[1]*xw
[0] + v[8] *xw[1] + v[15]*xw[2] + v[22]*xw[3] + v[29]*xw[4] +
v[36]*xw[5] + v[43]*xw[6]; s[2] -= v[2]*xw[0] + v[9] *xw[1] +
v[16]*xw[2] + v[23]*xw[3] + v[30]*xw[4] + v[37]*xw[5] + v[44
]*xw[6]; s[3] -= v[3]*xw[0] + v[10]*xw[1] + v[17]*xw[2] + v[24
]*xw[3] + v[31]*xw[4] + v[38]*xw[5] + v[45]*xw[6]; s[4] -= v[
4]*xw[0] + v[11]*xw[1] + v[18]*xw[2] + v[25]*xw[3] + v[32]*xw
[4] + v[39]*xw[5] + v[46]*xw[6]; s[5] -= v[5]*xw[0] + v[12]*xw
[1] + v[19]*xw[2] + v[26]*xw[3] + v[33]*xw[4] + v[40]*xw[5] +
v[47]*xw[6]; s[6] -= v[6]*xw[0] + v[13]*xw[1] + v[20]*xw[2] +
v[27]*xw[3] + v[34]*xw[4] + v[41]*xw[5] + v[48]*xw[6]; } while
(0)
;
335 v += 49;
336 }
337 t[i2] = s[0]; t[i2+1] = s[1]; t[i2+2] = s[2];
338 t[i2+3] = s[3]; t[i2+4] = s[4]; t[i2+5] = s[5]; t[i2+6] = s[6];
339 PetscKernel_v_gets_A_times_w_7(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[7] *s[1] + idiag[14]*s[2] +
idiag[21]*s[3] + idiag[28]*s[4] + idiag[35]*s[5] + idiag[42]
*s[6]; xw[1] = idiag[1]*s[0] + idiag[8] *s[1] + idiag[15]*s[2
] + idiag[22]*s[3] + idiag[29]*s[4] + idiag[36]*s[5] + idiag[
43]*s[6]; xw[2] = idiag[2]*s[0] + idiag[9] *s[1] + idiag[16]*
s[2] + idiag[23]*s[3] + idiag[30]*s[4] + idiag[37]*s[5] + idiag
[44]*s[6]; xw[3] = idiag[3]*s[0] + idiag[10]*s[1] + idiag[17]
*s[2] + idiag[24]*s[3] + idiag[31]*s[4] + idiag[38]*s[5] + idiag
[45]*s[6]; xw[4] = idiag[4]*s[0] + idiag[11]*s[1] + idiag[18]
*s[2] + idiag[25]*s[3] + idiag[32]*s[4] + idiag[39]*s[5] + idiag
[46]*s[6]; xw[5] = idiag[5]*s[0] + idiag[12]*s[1] + idiag[19]
*s[2] + idiag[26]*s[3] + idiag[33]*s[4] + idiag[40]*s[5] + idiag
[47]*s[6]; xw[6] = idiag[6]*s[0] + idiag[13]*s[1] + idiag[20]
*s[2] + idiag[27]*s[3] + idiag[34]*s[4] + idiag[41]*s[5] + idiag
[48]*s[6]; } while (0)
;
340 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2];
341 x[i2+3] = xw[3]; x[i2+4] = xw[4]; x[i2+5] = xw[5]; x[i2+6] = xw[6];
342 idiag += 49;
343 i2 += 7;
344 }
345 break;
346 default:
347 PetscKernel_w_gets_Ar_times_v(bs,bs,b,idiag,x){ PetscScalar _one = 1.0,_zero = 0.0; PetscBLASInt _ione = 1,
_bbs,_bncols; PetscErrorCode _ierr; _ierr = PetscBLASIntCast(
bs,&_bbs);do {if (__builtin_expect(!!(_ierr),0)) return PetscError
(((MPI_Comm)0x44000001),347,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); _ierr = PetscBLASIntCast
(bs,&_bncols);do {if (__builtin_expect(!!(_ierr),0)) return
PetscError(((MPI_Comm)0x44000001),347,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = "BLASgemv"; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
; petscstack->line[petscstack->currentsize] = 347; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
dgemv_("N",&(_bbs),&_bncols,&_one,idiag,&(_bbs
),b,&_ione,&_zero,x,&_ione); do { do {PetscErrorCode
_7_ierr = PetscMallocValidate(347,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
);do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError(
((MPI_Comm)0x44000001),347,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} while(0); 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); } while (0); } while(0); }
;
348 ierr = PetscArraycpy(t,b,bs)((sizeof(*(t)) != sizeof(*(b))) || PetscMemcpy(t,b,(bs)*sizeof
(*(t))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),348,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
349 i2 = bs;
350 idiag += bs2;
351 for (i=1; i<m; i++) {
352 v = aa + bs2*ai[i];
353 vi = aj + ai[i];
354 nz = diag[i] - ai[i];
355
356 ierr = PetscArraycpy(w,b+i2,bs)((sizeof(*(w)) != sizeof(*(b+i2))) || PetscMemcpy(w,b+i2,(bs)
*sizeof(*(w))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),356,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
357 /* copy all rows of x that are needed into contiguous space */
358 workt = work;
359 for (j=0; j<nz; j++) {
360 ierr = PetscArraycpy(workt,x + bs*(*vi++),bs)((sizeof(*(workt)) != sizeof(*(x + bs*(*vi++)))) || PetscMemcpy
(workt,x + bs*(*vi++),(bs)*sizeof(*(workt))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),360,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
361 workt += bs;
362 }
363 PetscKernel_w_gets_w_minus_Ar_times_v(bs,bs*nz,w,v,work){ PetscScalar _one = 1.0,_mone = -1.0; PetscBLASInt _ione = 1
,_bbs,_bncols; PetscErrorCode _ierr; _ierr = PetscBLASIntCast
(bs,&_bbs);do {if (__builtin_expect(!!(_ierr),0)) return PetscError
(((MPI_Comm)0x44000001),363,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); _ierr = PetscBLASIntCast
(bs*nz,&_bncols);do {if (__builtin_expect(!!(_ierr),0)) return
PetscError(((MPI_Comm)0x44000001),363,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = "BLASgemv"; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
; petscstack->line[petscstack->currentsize] = 363; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
dgemv_("N",&(_bbs),&(_bncols),&_mone,v,&(_bbs
),work,&_ione,&_one,w,&_ione); do { do {PetscErrorCode
_7_ierr = PetscMallocValidate(363,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
);do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError(
((MPI_Comm)0x44000001),363,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} while(0); 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); } while (0); } while(0); }
;
364 ierr = PetscArraycpy(t+i2,w,bs)((sizeof(*(t+i2)) != sizeof(*(w))) || PetscMemcpy(t+i2,w,(bs)
*sizeof(*(t+i2))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),364,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
365 PetscKernel_w_gets_Ar_times_v(bs,bs,w,idiag,x+i2){ PetscScalar _one = 1.0,_zero = 0.0; PetscBLASInt _ione = 1,
_bbs,_bncols; PetscErrorCode _ierr; _ierr = PetscBLASIntCast(
bs,&_bbs);do {if (__builtin_expect(!!(_ierr),0)) return PetscError
(((MPI_Comm)0x44000001),365,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); _ierr = PetscBLASIntCast
(bs,&_bncols);do {if (__builtin_expect(!!(_ierr),0)) return
PetscError(((MPI_Comm)0x44000001),365,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = "BLASgemv"; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
; petscstack->line[petscstack->currentsize] = 365; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
dgemv_("N",&(_bbs),&_bncols,&_one,idiag,&(_bbs
),w,&_ione,&_zero,x+i2,&_ione); do { do {PetscErrorCode
_7_ierr = PetscMallocValidate(365,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
);do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError(
((MPI_Comm)0x44000001),365,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} while(0); 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); } while (0); } while(0); }
;
366
367 idiag += bs2;
368 i2 += bs;
369 }
370 break;
371 }
372 /* for logging purposes assume number of nonzero in lower half is 1/2 of total */
373 ierr = PetscLogFlops(1.0*bs2*a->nz);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),373,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
374 xb = t;
375 }
376 else xb = b;
377 if (flag & SOR_BACKWARD_SWEEP || flag & SOR_LOCAL_BACKWARD_SWEEP) {
378 idiag = a->idiag+bs2*(a->mbs-1);
379 i2 = bs * (m-1);
380 switch (bs) {
381 case 1:
382 s[0] = xb[i2];
383 PetscKernel_v_gets_A_times_w_1(xw,idiag,s)do { xw[0] = idiag[0]*s[0]; } while (0);
384 x[i2] = xw[0];
385 i2 -= 1;
386 for (i=m-2; i>=0; i--) {
387 v = aa + (diag[i]+1);
388 vi = aj + diag[i] + 1;
389 nz = ai[i+1] - diag[i] - 1;
390 s[0] = xb[i2];
391 for (j=0; j<nz; j++) {
392 xw[0] = x[vi[j]];
393 PetscKernel_v_gets_v_minus_A_times_w_1(s,(v+j),xw)do { s[0] -= (v+j)[0]*xw[0]; } while (0);
394 }
395 PetscKernel_v_gets_A_times_w_1(xw,idiag,s)do { xw[0] = idiag[0]*s[0]; } while (0);
396 x[i2] = xw[0];
397 idiag -= 1;
398 i2 -= 1;
399 }
400 break;
401 case 2:
402 s[0] = xb[i2]; s[1] = xb[i2+1];
403 PetscKernel_v_gets_A_times_w_2(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[2]*s[1]; xw[1] = idiag[1]*
s[0] + idiag[3]*s[1]; } while (0)
;
404 x[i2] = xw[0]; x[i2+1] = xw[1];
405 i2 -= 2;
406 idiag -= 4;
407 for (i=m-2; i>=0; i--) {
408 v = aa + 4*(diag[i] + 1);
409 vi = aj + diag[i] + 1;
410 nz = ai[i+1] - diag[i] - 1;
411 s[0] = xb[i2]; s[1] = xb[i2+1];
412 for (j=0; j<nz; j++) {
413 idx = 2*vi[j];
414 it = 4*j;
415 xw[0] = x[idx]; xw[1] = x[1+idx];
416 PetscKernel_v_gets_v_minus_A_times_w_2(s,(v+it),xw)do { s[0] -= (v+it)[0]*xw[0] + (v+it)[2]*xw[1]; s[1] -= (v+it
)[1]*xw[0] + (v+it)[3]*xw[1]; } while (0)
;
417 }
418 PetscKernel_v_gets_A_times_w_2(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[2]*s[1]; xw[1] = idiag[1]*
s[0] + idiag[3]*s[1]; } while (0)
;
419 x[i2] = xw[0]; x[i2+1] = xw[1];
420 idiag -= 4;
421 i2 -= 2;
422 }
423 break;
424 case 3:
425 s[0] = xb[i2]; s[1] = xb[i2+1]; s[2] = xb[i2+2];
426 PetscKernel_v_gets_A_times_w_3(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[3]*s[1] + idiag[6]*s[2]; xw
[1] = idiag[1]*s[0] + idiag[4]*s[1] + idiag[7]*s[2]; xw[2] = idiag
[2]*s[0] + idiag[5]*s[1] + idiag[8]*s[2]; } while (0)
;
427 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2];
428 i2 -= 3;
429 idiag -= 9;
430 for (i=m-2; i>=0; i--) {
431 v = aa + 9*(diag[i]+1);
432 vi = aj + diag[i] + 1;
433 nz = ai[i+1] - diag[i] - 1;
434 s[0] = xb[i2]; s[1] = xb[i2+1]; s[2] = xb[i2+2];
435 while (nz--) {
436 idx = 3*(*vi++);
437 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx];
438 PetscKernel_v_gets_v_minus_A_times_w_3(s,v,xw)do { s[0] -= v[0]*xw[0] + v[3]*xw[1] + v[6]*xw[2]; s[1] -= v[
1]*xw[0] + v[4]*xw[1] + v[7]*xw[2]; s[2] -= v[2]*xw[0] + v[5]
*xw[1] + v[8]*xw[2]; } while (0)
;
439 v += 9;
440 }
441 PetscKernel_v_gets_A_times_w_3(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[3]*s[1] + idiag[6]*s[2]; xw
[1] = idiag[1]*s[0] + idiag[4]*s[1] + idiag[7]*s[2]; xw[2] = idiag
[2]*s[0] + idiag[5]*s[1] + idiag[8]*s[2]; } while (0)
;
442 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2];
443 idiag -= 9;
444 i2 -= 3;
445 }
446 break;
447 case 4:
448 s[0] = xb[i2]; s[1] = xb[i2+1]; s[2] = xb[i2+2]; s[3] = xb[i2+3];
449 PetscKernel_v_gets_A_times_w_4(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[4]*s[1] + idiag[8] *s[2] +
idiag[12]*s[3]; xw[1] = idiag[1]*s[0] + idiag[5]*s[1] + idiag
[9] *s[2] + idiag[13]*s[3]; xw[2] = idiag[2]*s[0] + idiag[6]*
s[1] + idiag[10]*s[2] + idiag[14]*s[3]; xw[3] = idiag[3]*s[0]
+ idiag[7]*s[1] + idiag[11]*s[2] + idiag[15]*s[3]; } while (
0)
;
450 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2]; x[i2+3] = xw[3];
451 i2 -= 4;
452 idiag -= 16;
453 for (i=m-2; i>=0; i--) {
454 v = aa + 16*(diag[i]+1);
455 vi = aj + diag[i] + 1;
456 nz = ai[i+1] - diag[i] - 1;
457 s[0] = xb[i2]; s[1] = xb[i2+1]; s[2] = xb[i2+2]; s[3] = xb[i2+3];
458 while (nz--) {
459 idx = 4*(*vi++);
460 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx]; xw[3] = x[3+idx];
461 PetscKernel_v_gets_v_minus_A_times_w_4(s,v,xw)do { s[0] -= v[0]*xw[0] + v[4]*xw[1] + v[8] *xw[2] + v[12]*xw
[3]; s[1] -= v[1]*xw[0] + v[5]*xw[1] + v[9] *xw[2] + v[13]*xw
[3]; s[2] -= v[2]*xw[0] + v[6]*xw[1] + v[10]*xw[2] + v[14]*xw
[3]; s[3] -= v[3]*xw[0] + v[7]*xw[1] + v[11]*xw[2] + v[15]*xw
[3]; } while (0)
;
462 v += 16;
463 }
464 PetscKernel_v_gets_A_times_w_4(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[4]*s[1] + idiag[8] *s[2] +
idiag[12]*s[3]; xw[1] = idiag[1]*s[0] + idiag[5]*s[1] + idiag
[9] *s[2] + idiag[13]*s[3]; xw[2] = idiag[2]*s[0] + idiag[6]*
s[1] + idiag[10]*s[2] + idiag[14]*s[3]; xw[3] = idiag[3]*s[0]
+ idiag[7]*s[1] + idiag[11]*s[2] + idiag[15]*s[3]; } while (
0)
;
465 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2]; x[i2+3] = xw[3];
466 idiag -= 16;
467 i2 -= 4;
468 }
469 break;
470 case 5:
471 s[0] = xb[i2]; s[1] = xb[i2+1]; s[2] = xb[i2+2]; s[3] = xb[i2+3]; s[4] = xb[i2+4];
472 PetscKernel_v_gets_A_times_w_5(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[5]*s[1] + idiag[10]*s[2] +
idiag[15]*s[3] + idiag[20]*s[4]; xw[1] = idiag[1]*s[0] + idiag
[6]*s[1] + idiag[11]*s[2] + idiag[16]*s[3] + idiag[21]*s[4]; xw
[2] = idiag[2]*s[0] + idiag[7]*s[1] + idiag[12]*s[2] + idiag[
17]*s[3] + idiag[22]*s[4]; xw[3] = idiag[3]*s[0] + idiag[8]*s
[1] + idiag[13]*s[2] + idiag[18]*s[3] + idiag[23]*s[4]; xw[4]
= idiag[4]*s[0] + idiag[9]*s[1] + idiag[14]*s[2] + idiag[19]
*s[3] + idiag[24]*s[4]; } while (0)
;
473 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2]; x[i2+3] = xw[3]; x[i2+4] = xw[4];
474 i2 -= 5;
475 idiag -= 25;
476 for (i=m-2; i>=0; i--) {
477 v = aa + 25*(diag[i]+1);
478 vi = aj + diag[i] + 1;
479 nz = ai[i+1] - diag[i] - 1;
480 s[0] = xb[i2]; s[1] = xb[i2+1]; s[2] = xb[i2+2]; s[3] = xb[i2+3]; s[4] = xb[i2+4];
481 while (nz--) {
482 idx = 5*(*vi++);
483 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx]; xw[3] = x[3+idx]; xw[4] = x[4+idx];
484 PetscKernel_v_gets_v_minus_A_times_w_5(s,v,xw)do { s[0] -= v[0]*xw[0] + v[5]*xw[1] + v[10]*xw[2] + v[15]*xw
[3] + v[20]*xw[4]; s[1] -= v[1]*xw[0] + v[6]*xw[1] + v[11]*xw
[2] + v[16]*xw[3] + v[21]*xw[4]; s[2] -= v[2]*xw[0] + v[7]*xw
[1] + v[12]*xw[2] + v[17]*xw[3] + v[22]*xw[4]; s[3] -= v[3]*xw
[0] + v[8]*xw[1] + v[13]*xw[2] + v[18]*xw[3] + v[23]*xw[4]; s
[4] -= v[4]*xw[0] + v[9]*xw[1] + v[14]*xw[2] + v[19]*xw[3] + v
[24]*xw[4]; } while (0)
;
485 v += 25;
486 }
487 PetscKernel_v_gets_A_times_w_5(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[5]*s[1] + idiag[10]*s[2] +
idiag[15]*s[3] + idiag[20]*s[4]; xw[1] = idiag[1]*s[0] + idiag
[6]*s[1] + idiag[11]*s[2] + idiag[16]*s[3] + idiag[21]*s[4]; xw
[2] = idiag[2]*s[0] + idiag[7]*s[1] + idiag[12]*s[2] + idiag[
17]*s[3] + idiag[22]*s[4]; xw[3] = idiag[3]*s[0] + idiag[8]*s
[1] + idiag[13]*s[2] + idiag[18]*s[3] + idiag[23]*s[4]; xw[4]
= idiag[4]*s[0] + idiag[9]*s[1] + idiag[14]*s[2] + idiag[19]
*s[3] + idiag[24]*s[4]; } while (0)
;
488 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2]; x[i2+3] = xw[3]; x[i2+4] = xw[4];
489 idiag -= 25;
490 i2 -= 5;
491 }
492 break;
493 case 6:
494 s[0] = xb[i2]; s[1] = xb[i2+1]; s[2] = xb[i2+2]; s[3] = xb[i2+3]; s[4] = xb[i2+4]; s[5] = xb[i2+5];
495 PetscKernel_v_gets_A_times_w_6(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[6] *s[1] + idiag[12]*s[2] +
idiag[18]*s[3] + idiag[24]*s[4] + idiag[30]*s[5]; xw[1] = idiag
[1]*s[0] + idiag[7] *s[1] + idiag[13]*s[2] + idiag[19]*s[3] +
idiag[25]*s[4] + idiag[31]*s[5]; xw[2] = idiag[2]*s[0] + idiag
[8] *s[1] + idiag[14]*s[2] + idiag[20]*s[3] + idiag[26]*s[4] +
idiag[32]*s[5]; xw[3] = idiag[3]*s[0] + idiag[9] *s[1] + idiag
[15]*s[2] + idiag[21]*s[3] + idiag[27]*s[4] + idiag[33]*s[5];
xw[4] = idiag[4]*s[0] + idiag[10]*s[1] + idiag[16]*s[2] + idiag
[22]*s[3] + idiag[28]*s[4] + idiag[34]*s[5]; xw[5] = idiag[5]
*s[0] + idiag[11]*s[1] + idiag[17]*s[2] + idiag[23]*s[3] + idiag
[29]*s[4] + idiag[35]*s[5]; } while (0)
;
496 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2]; x[i2+3] = xw[3]; x[i2+4] = xw[4]; x[i2+5] = xw[5];
497 i2 -= 6;
498 idiag -= 36;
499 for (i=m-2; i>=0; i--) {
500 v = aa + 36*(diag[i]+1);
501 vi = aj + diag[i] + 1;
502 nz = ai[i+1] - diag[i] - 1;
503 s[0] = xb[i2]; s[1] = xb[i2+1]; s[2] = xb[i2+2]; s[3] = xb[i2+3]; s[4] = xb[i2+4]; s[5] = xb[i2+5];
504 while (nz--) {
505 idx = 6*(*vi++);
506 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx];
507 xw[3] = x[3+idx]; xw[4] = x[4+idx]; xw[5] = x[5+idx];
508 PetscKernel_v_gets_v_minus_A_times_w_6(s,v,xw)do { s[0] -= v[0]*xw[0] + v[6] *xw[1] + v[12]*xw[2] + v[18]*xw
[3] + v[24]*xw[4] + v[30]*xw[5]; s[1] -= v[1]*xw[0] + v[7] *xw
[1] + v[13]*xw[2] + v[19]*xw[3] + v[25]*xw[4] + v[31]*xw[5]; s
[2] -= v[2]*xw[0] + v[8] *xw[1] + v[14]*xw[2] + v[20]*xw[3] +
v[26]*xw[4] + v[32]*xw[5]; s[3] -= v[3]*xw[0] + v[9] *xw[1] +
v[15]*xw[2] + v[21]*xw[3] + v[27]*xw[4] + v[33]*xw[5]; s[4] -=
v[4]*xw[0] + v[10]*xw[1] + v[16]*xw[2] + v[22]*xw[3] + v[28]
*xw[4] + v[34]*xw[5]; s[5] -= v[5]*xw[0] + v[11]*xw[1] + v[17
]*xw[2] + v[23]*xw[3] + v[29]*xw[4] + v[35]*xw[5]; } while (0
)
;
509 v += 36;
510 }
511 PetscKernel_v_gets_A_times_w_6(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[6] *s[1] + idiag[12]*s[2] +
idiag[18]*s[3] + idiag[24]*s[4] + idiag[30]*s[5]; xw[1] = idiag
[1]*s[0] + idiag[7] *s[1] + idiag[13]*s[2] + idiag[19]*s[3] +
idiag[25]*s[4] + idiag[31]*s[5]; xw[2] = idiag[2]*s[0] + idiag
[8] *s[1] + idiag[14]*s[2] + idiag[20]*s[3] + idiag[26]*s[4] +
idiag[32]*s[5]; xw[3] = idiag[3]*s[0] + idiag[9] *s[1] + idiag
[15]*s[2] + idiag[21]*s[3] + idiag[27]*s[4] + idiag[33]*s[5];
xw[4] = idiag[4]*s[0] + idiag[10]*s[1] + idiag[16]*s[2] + idiag
[22]*s[3] + idiag[28]*s[4] + idiag[34]*s[5]; xw[5] = idiag[5]
*s[0] + idiag[11]*s[1] + idiag[17]*s[2] + idiag[23]*s[3] + idiag
[29]*s[4] + idiag[35]*s[5]; } while (0)
;
512 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2]; x[i2+3] = xw[3]; x[i2+4] = xw[4]; x[i2+5] = xw[5];
513 idiag -= 36;
514 i2 -= 6;
515 }
516 break;
517 case 7:
518 s[0] = xb[i2]; s[1] = xb[i2+1]; s[2] = xb[i2+2];
519 s[3] = xb[i2+3]; s[4] = xb[i2+4]; s[5] = xb[i2+5]; s[6] = xb[i2+6];
520 PetscKernel_v_gets_A_times_w_7(x,idiag,b)do { x[0] = idiag[0]*b[0] + idiag[7] *b[1] + idiag[14]*b[2] +
idiag[21]*b[3] + idiag[28]*b[4] + idiag[35]*b[5] + idiag[42]
*b[6]; x[1] = idiag[1]*b[0] + idiag[8] *b[1] + idiag[15]*b[2]
+ idiag[22]*b[3] + idiag[29]*b[4] + idiag[36]*b[5] + idiag[43
]*b[6]; x[2] = idiag[2]*b[0] + idiag[9] *b[1] + idiag[16]*b[2
] + idiag[23]*b[3] + idiag[30]*b[4] + idiag[37]*b[5] + idiag[
44]*b[6]; x[3] = idiag[3]*b[0] + idiag[10]*b[1] + idiag[17]*b
[2] + idiag[24]*b[3] + idiag[31]*b[4] + idiag[38]*b[5] + idiag
[45]*b[6]; x[4] = idiag[4]*b[0] + idiag[11]*b[1] + idiag[18]*
b[2] + idiag[25]*b[3] + idiag[32]*b[4] + idiag[39]*b[5] + idiag
[46]*b[6]; x[5] = idiag[5]*b[0] + idiag[12]*b[1] + idiag[19]*
b[2] + idiag[26]*b[3] + idiag[33]*b[4] + idiag[40]*b[5] + idiag
[47]*b[6]; x[6] = idiag[6]*b[0] + idiag[13]*b[1] + idiag[20]*
b[2] + idiag[27]*b[3] + idiag[34]*b[4] + idiag[41]*b[5] + idiag
[48]*b[6]; } while (0)
;
521 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2];
522 x[i2+3] = xw[3]; x[i2+4] = xw[4]; x[i2+5] = xw[5]; x[i2+6] = xw[6];
523 i2 -= 7;
524 idiag -= 49;
525 for (i=m-2; i>=0; i--) {
526 v = aa + 49*(diag[i]+1);
527 vi = aj + diag[i] + 1;
528 nz = ai[i+1] - diag[i] - 1;
529 s[0] = xb[i2]; s[1] = xb[i2+1]; s[2] = xb[i2+2];
530 s[3] = xb[i2+3]; s[4] = xb[i2+4]; s[5] = xb[i2+5]; s[6] = xb[i2+6];
531 while (nz--) {
532 idx = 7*(*vi++);
533 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx];
534 xw[3] = x[3+idx]; xw[4] = x[4+idx]; xw[5] = x[5+idx]; xw[6] = x[6+idx];
535 PetscKernel_v_gets_v_minus_A_times_w_7(s,v,xw)do { s[0] -= v[0]*xw[0] + v[7] *xw[1] + v[14]*xw[2] + v[21]*xw
[3] + v[28]*xw[4] + v[35]*xw[5] + v[42]*xw[6]; s[1] -= v[1]*xw
[0] + v[8] *xw[1] + v[15]*xw[2] + v[22]*xw[3] + v[29]*xw[4] +
v[36]*xw[5] + v[43]*xw[6]; s[2] -= v[2]*xw[0] + v[9] *xw[1] +
v[16]*xw[2] + v[23]*xw[3] + v[30]*xw[4] + v[37]*xw[5] + v[44
]*xw[6]; s[3] -= v[3]*xw[0] + v[10]*xw[1] + v[17]*xw[2] + v[24
]*xw[3] + v[31]*xw[4] + v[38]*xw[5] + v[45]*xw[6]; s[4] -= v[
4]*xw[0] + v[11]*xw[1] + v[18]*xw[2] + v[25]*xw[3] + v[32]*xw
[4] + v[39]*xw[5] + v[46]*xw[6]; s[5] -= v[5]*xw[0] + v[12]*xw
[1] + v[19]*xw[2] + v[26]*xw[3] + v[33]*xw[4] + v[40]*xw[5] +
v[47]*xw[6]; s[6] -= v[6]*xw[0] + v[13]*xw[1] + v[20]*xw[2] +
v[27]*xw[3] + v[34]*xw[4] + v[41]*xw[5] + v[48]*xw[6]; } while
(0)
;
536 v += 49;
537 }
538 PetscKernel_v_gets_A_times_w_7(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[7] *s[1] + idiag[14]*s[2] +
idiag[21]*s[3] + idiag[28]*s[4] + idiag[35]*s[5] + idiag[42]
*s[6]; xw[1] = idiag[1]*s[0] + idiag[8] *s[1] + idiag[15]*s[2
] + idiag[22]*s[3] + idiag[29]*s[4] + idiag[36]*s[5] + idiag[
43]*s[6]; xw[2] = idiag[2]*s[0] + idiag[9] *s[1] + idiag[16]*
s[2] + idiag[23]*s[3] + idiag[30]*s[4] + idiag[37]*s[5] + idiag
[44]*s[6]; xw[3] = idiag[3]*s[0] + idiag[10]*s[1] + idiag[17]
*s[2] + idiag[24]*s[3] + idiag[31]*s[4] + idiag[38]*s[5] + idiag
[45]*s[6]; xw[4] = idiag[4]*s[0] + idiag[11]*s[1] + idiag[18]
*s[2] + idiag[25]*s[3] + idiag[32]*s[4] + idiag[39]*s[5] + idiag
[46]*s[6]; xw[5] = idiag[5]*s[0] + idiag[12]*s[1] + idiag[19]
*s[2] + idiag[26]*s[3] + idiag[33]*s[4] + idiag[40]*s[5] + idiag
[47]*s[6]; xw[6] = idiag[6]*s[0] + idiag[13]*s[1] + idiag[20]
*s[2] + idiag[27]*s[3] + idiag[34]*s[4] + idiag[41]*s[5] + idiag
[48]*s[6]; } while (0)
;
539 x[i2] = xw[0]; x[i2+1] = xw[1]; x[i2+2] = xw[2];
540 x[i2+3] = xw[3]; x[i2+4] = xw[4]; x[i2+5] = xw[5]; x[i2+6] = xw[6];
541 idiag -= 49;
542 i2 -= 7;
543 }
544 break;
545 default:
546 ierr = PetscArraycpy(w,xb+i2,bs)((sizeof(*(w)) != sizeof(*(xb+i2))) || PetscMemcpy(w,xb+i2,(bs
)*sizeof(*(w))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),546,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
547 PetscKernel_w_gets_Ar_times_v(bs,bs,w,idiag,x+i2){ PetscScalar _one = 1.0,_zero = 0.0; PetscBLASInt _ione = 1,
_bbs,_bncols; PetscErrorCode _ierr; _ierr = PetscBLASIntCast(
bs,&_bbs);do {if (__builtin_expect(!!(_ierr),0)) return PetscError
(((MPI_Comm)0x44000001),547,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); _ierr = PetscBLASIntCast
(bs,&_bncols);do {if (__builtin_expect(!!(_ierr),0)) return
PetscError(((MPI_Comm)0x44000001),547,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = "BLASgemv"; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
; petscstack->line[petscstack->currentsize] = 547; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
dgemv_("N",&(_bbs),&_bncols,&_one,idiag,&(_bbs
),w,&_ione,&_zero,x+i2,&_ione); do { do {PetscErrorCode
_7_ierr = PetscMallocValidate(547,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
);do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError(
((MPI_Comm)0x44000001),547,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} while(0); 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); } while (0); } while(0); }
;
548 i2 -= bs;
549 idiag -= bs2;
550 for (i=m-2; i>=0; i--) {
551 v = aa + bs2*(diag[i]+1);
552 vi = aj + diag[i] + 1;
553 nz = ai[i+1] - diag[i] - 1;
554
555 ierr = PetscArraycpy(w,xb+i2,bs)((sizeof(*(w)) != sizeof(*(xb+i2))) || PetscMemcpy(w,xb+i2,(bs
)*sizeof(*(w))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),555,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
556 /* copy all rows of x that are needed into contiguous space */
557 workt = work;
558 for (j=0; j<nz; j++) {
559 ierr = PetscArraycpy(workt,x + bs*(*vi++),bs)((sizeof(*(workt)) != sizeof(*(x + bs*(*vi++)))) || PetscMemcpy
(workt,x + bs*(*vi++),(bs)*sizeof(*(workt))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),559,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
560 workt += bs;
561 }
562 PetscKernel_w_gets_w_minus_Ar_times_v(bs,bs*nz,w,v,work){ PetscScalar _one = 1.0,_mone = -1.0; PetscBLASInt _ione = 1
,_bbs,_bncols; PetscErrorCode _ierr; _ierr = PetscBLASIntCast
(bs,&_bbs);do {if (__builtin_expect(!!(_ierr),0)) return PetscError
(((MPI_Comm)0x44000001),562,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); _ierr = PetscBLASIntCast
(bs*nz,&_bncols);do {if (__builtin_expect(!!(_ierr),0)) return
PetscError(((MPI_Comm)0x44000001),562,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = "BLASgemv"; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
; petscstack->line[petscstack->currentsize] = 562; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
dgemv_("N",&(_bbs),&(_bncols),&_mone,v,&(_bbs
),work,&_ione,&_one,w,&_ione); do { do {PetscErrorCode
_7_ierr = PetscMallocValidate(562,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
);do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError(
((MPI_Comm)0x44000001),562,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} while(0); 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); } while (0); } while(0); }
;
563 PetscKernel_w_gets_Ar_times_v(bs,bs,w,idiag,x+i2){ PetscScalar _one = 1.0,_zero = 0.0; PetscBLASInt _ione = 1,
_bbs,_bncols; PetscErrorCode _ierr; _ierr = PetscBLASIntCast(
bs,&_bbs);do {if (__builtin_expect(!!(_ierr),0)) return PetscError
(((MPI_Comm)0x44000001),563,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); _ierr = PetscBLASIntCast
(bs,&_bncols);do {if (__builtin_expect(!!(_ierr),0)) return
PetscError(((MPI_Comm)0x44000001),563,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = "BLASgemv"; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
; petscstack->line[petscstack->currentsize] = 563; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
dgemv_("N",&(_bbs),&_bncols,&_one,idiag,&(_bbs
),w,&_ione,&_zero,x+i2,&_ione); do { do {PetscErrorCode
_7_ierr = PetscMallocValidate(563,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
);do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError(
((MPI_Comm)0x44000001),563,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} while(0); 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); } while (0); } while(0); }
;
564
565 idiag -= bs2;
566 i2 -= bs;
567 }
568 break;
569 }
570 ierr = PetscLogFlops(1.0*bs2*(a->nz));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),570,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
571 }
572 its--;
573 }
574 while (its--) {
575 if (flag & SOR_FORWARD_SWEEP || flag & SOR_LOCAL_FORWARD_SWEEP) {
576 idiag = a->idiag;
577 i2 = 0;
578 switch (bs) {
579 case 1:
580 for (i=0; i<m; i++) {
581 v = aa + ai[i];
582 vi = aj + ai[i];
583 nz = ai[i+1] - ai[i];
584 s[0] = b[i2];
585 for (j=0; j<nz; j++) {
586 xw[0] = x[vi[j]];
587 PetscKernel_v_gets_v_minus_A_times_w_1(s,(v+j),xw)do { s[0] -= (v+j)[0]*xw[0]; } while (0);
588 }
589 PetscKernel_v_gets_A_times_w_1(xw,idiag,s)do { xw[0] = idiag[0]*s[0]; } while (0);
590 x[i2] += xw[0];
591 idiag += 1;
592 i2 += 1;
593 }
594 break;
595 case 2:
596 for (i=0; i<m; i++) {
597 v = aa + 4*ai[i];
598 vi = aj + ai[i];
599 nz = ai[i+1] - ai[i];
600 s[0] = b[i2]; s[1] = b[i2+1];
601 for (j=0; j<nz; j++) {
602 idx = 2*vi[j];
603 it = 4*j;
604 xw[0] = x[idx]; xw[1] = x[1+idx];
605 PetscKernel_v_gets_v_minus_A_times_w_2(s,(v+it),xw)do { s[0] -= (v+it)[0]*xw[0] + (v+it)[2]*xw[1]; s[1] -= (v+it
)[1]*xw[0] + (v+it)[3]*xw[1]; } while (0)
;
606 }
607 PetscKernel_v_gets_A_times_w_2(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[2]*s[1]; xw[1] = idiag[1]*
s[0] + idiag[3]*s[1]; } while (0)
;
608 x[i2] += xw[0]; x[i2+1] += xw[1];
609 idiag += 4;
610 i2 += 2;
611 }
612 break;
613 case 3:
614 for (i=0; i<m; i++) {
615 v = aa + 9*ai[i];
616 vi = aj + ai[i];
617 nz = ai[i+1] - ai[i];
618 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2];
619 while (nz--) {
620 idx = 3*(*vi++);
621 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx];
622 PetscKernel_v_gets_v_minus_A_times_w_3(s,v,xw)do { s[0] -= v[0]*xw[0] + v[3]*xw[1] + v[6]*xw[2]; s[1] -= v[
1]*xw[0] + v[4]*xw[1] + v[7]*xw[2]; s[2] -= v[2]*xw[0] + v[5]
*xw[1] + v[8]*xw[2]; } while (0)
;
623 v += 9;
624 }
625 PetscKernel_v_gets_A_times_w_3(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[3]*s[1] + idiag[6]*s[2]; xw
[1] = idiag[1]*s[0] + idiag[4]*s[1] + idiag[7]*s[2]; xw[2] = idiag
[2]*s[0] + idiag[5]*s[1] + idiag[8]*s[2]; } while (0)
;
626 x[i2] += xw[0]; x[i2+1] += xw[1]; x[i2+2] += xw[2];
627 idiag += 9;
628 i2 += 3;
629 }
630 break;
631 case 4:
632 for (i=0; i<m; i++) {
633 v = aa + 16*ai[i];
634 vi = aj + ai[i];
635 nz = ai[i+1] - ai[i];
636 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2]; s[3] = b[i2+3];
637 while (nz--) {
638 idx = 4*(*vi++);
639 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx]; xw[3] = x[3+idx];
640 PetscKernel_v_gets_v_minus_A_times_w_4(s,v,xw)do { s[0] -= v[0]*xw[0] + v[4]*xw[1] + v[8] *xw[2] + v[12]*xw
[3]; s[1] -= v[1]*xw[0] + v[5]*xw[1] + v[9] *xw[2] + v[13]*xw
[3]; s[2] -= v[2]*xw[0] + v[6]*xw[1] + v[10]*xw[2] + v[14]*xw
[3]; s[3] -= v[3]*xw[0] + v[7]*xw[1] + v[11]*xw[2] + v[15]*xw
[3]; } while (0)
;
641 v += 16;
642 }
643 PetscKernel_v_gets_A_times_w_4(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[4]*s[1] + idiag[8] *s[2] +
idiag[12]*s[3]; xw[1] = idiag[1]*s[0] + idiag[5]*s[1] + idiag
[9] *s[2] + idiag[13]*s[3]; xw[2] = idiag[2]*s[0] + idiag[6]*
s[1] + idiag[10]*s[2] + idiag[14]*s[3]; xw[3] = idiag[3]*s[0]
+ idiag[7]*s[1] + idiag[11]*s[2] + idiag[15]*s[3]; } while (
0)
;
644 x[i2] += xw[0]; x[i2+1] += xw[1]; x[i2+2] += xw[2]; x[i2+3] += xw[3];
645 idiag += 16;
646 i2 += 4;
647 }
648 break;
649 case 5:
650 for (i=0; i<m; i++) {
651 v = aa + 25*ai[i];
652 vi = aj + ai[i];
653 nz = ai[i+1] - ai[i];
654 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2]; s[3] = b[i2+3]; s[4] = b[i2+4];
655 while (nz--) {
656 idx = 5*(*vi++);
657 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx]; xw[3] = x[3+idx]; xw[4] = x[4+idx];
658 PetscKernel_v_gets_v_minus_A_times_w_5(s,v,xw)do { s[0] -= v[0]*xw[0] + v[5]*xw[1] + v[10]*xw[2] + v[15]*xw
[3] + v[20]*xw[4]; s[1] -= v[1]*xw[0] + v[6]*xw[1] + v[11]*xw
[2] + v[16]*xw[3] + v[21]*xw[4]; s[2] -= v[2]*xw[0] + v[7]*xw
[1] + v[12]*xw[2] + v[17]*xw[3] + v[22]*xw[4]; s[3] -= v[3]*xw
[0] + v[8]*xw[1] + v[13]*xw[2] + v[18]*xw[3] + v[23]*xw[4]; s
[4] -= v[4]*xw[0] + v[9]*xw[1] + v[14]*xw[2] + v[19]*xw[3] + v
[24]*xw[4]; } while (0)
;
659 v += 25;
660 }
661 PetscKernel_v_gets_A_times_w_5(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[5]*s[1] + idiag[10]*s[2] +
idiag[15]*s[3] + idiag[20]*s[4]; xw[1] = idiag[1]*s[0] + idiag
[6]*s[1] + idiag[11]*s[2] + idiag[16]*s[3] + idiag[21]*s[4]; xw
[2] = idiag[2]*s[0] + idiag[7]*s[1] + idiag[12]*s[2] + idiag[
17]*s[3] + idiag[22]*s[4]; xw[3] = idiag[3]*s[0] + idiag[8]*s
[1] + idiag[13]*s[2] + idiag[18]*s[3] + idiag[23]*s[4]; xw[4]
= idiag[4]*s[0] + idiag[9]*s[1] + idiag[14]*s[2] + idiag[19]
*s[3] + idiag[24]*s[4]; } while (0)
;
662 x[i2] += xw[0]; x[i2+1] += xw[1]; x[i2+2] += xw[2]; x[i2+3] += xw[3]; x[i2+4] += xw[4];
663 idiag += 25;
664 i2 += 5;
665 }
666 break;
667 case 6:
668 for (i=0; i<m; i++) {
669 v = aa + 36*ai[i];
670 vi = aj + ai[i];
671 nz = ai[i+1] - ai[i];
672 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2]; s[3] = b[i2+3]; s[4] = b[i2+4]; s[5] = b[i2+5];
673 while (nz--) {
674 idx = 6*(*vi++);
675 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx];
676 xw[3] = x[3+idx]; xw[4] = x[4+idx]; xw[5] = x[5+idx];
677 PetscKernel_v_gets_v_minus_A_times_w_6(s,v,xw)do { s[0] -= v[0]*xw[0] + v[6] *xw[1] + v[12]*xw[2] + v[18]*xw
[3] + v[24]*xw[4] + v[30]*xw[5]; s[1] -= v[1]*xw[0] + v[7] *xw
[1] + v[13]*xw[2] + v[19]*xw[3] + v[25]*xw[4] + v[31]*xw[5]; s
[2] -= v[2]*xw[0] + v[8] *xw[1] + v[14]*xw[2] + v[20]*xw[3] +
v[26]*xw[4] + v[32]*xw[5]; s[3] -= v[3]*xw[0] + v[9] *xw[1] +
v[15]*xw[2] + v[21]*xw[3] + v[27]*xw[4] + v[33]*xw[5]; s[4] -=
v[4]*xw[0] + v[10]*xw[1] + v[16]*xw[2] + v[22]*xw[3] + v[28]
*xw[4] + v[34]*xw[5]; s[5] -= v[5]*xw[0] + v[11]*xw[1] + v[17
]*xw[2] + v[23]*xw[3] + v[29]*xw[4] + v[35]*xw[5]; } while (0
)
;
678 v += 36;
679 }
680 PetscKernel_v_gets_A_times_w_6(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[6] *s[1] + idiag[12]*s[2] +
idiag[18]*s[3] + idiag[24]*s[4] + idiag[30]*s[5]; xw[1] = idiag
[1]*s[0] + idiag[7] *s[1] + idiag[13]*s[2] + idiag[19]*s[3] +
idiag[25]*s[4] + idiag[31]*s[5]; xw[2] = idiag[2]*s[0] + idiag
[8] *s[1] + idiag[14]*s[2] + idiag[20]*s[3] + idiag[26]*s[4] +
idiag[32]*s[5]; xw[3] = idiag[3]*s[0] + idiag[9] *s[1] + idiag
[15]*s[2] + idiag[21]*s[3] + idiag[27]*s[4] + idiag[33]*s[5];
xw[4] = idiag[4]*s[0] + idiag[10]*s[1] + idiag[16]*s[2] + idiag
[22]*s[3] + idiag[28]*s[4] + idiag[34]*s[5]; xw[5] = idiag[5]
*s[0] + idiag[11]*s[1] + idiag[17]*s[2] + idiag[23]*s[3] + idiag
[29]*s[4] + idiag[35]*s[5]; } while (0)
;
681 x[i2] += xw[0]; x[i2+1] += xw[1]; x[i2+2] += xw[2];
682 x[i2+3] += xw[3]; x[i2+4] += xw[4]; x[i2+5] += xw[5];
683 idiag += 36;
684 i2 += 6;
685 }
686 break;
687 case 7:
688 for (i=0; i<m; i++) {
689 v = aa + 49*ai[i];
690 vi = aj + ai[i];
691 nz = ai[i+1] - ai[i];
692 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2];
693 s[3] = b[i2+3]; s[4] = b[i2+4]; s[5] = b[i2+5]; s[6] = b[i2+6];
694 while (nz--) {
695 idx = 7*(*vi++);
696 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx];
697 xw[3] = x[3+idx]; xw[4] = x[4+idx]; xw[5] = x[5+idx]; xw[6] = x[6+idx];
698 PetscKernel_v_gets_v_minus_A_times_w_7(s,v,xw)do { s[0] -= v[0]*xw[0] + v[7] *xw[1] + v[14]*xw[2] + v[21]*xw
[3] + v[28]*xw[4] + v[35]*xw[5] + v[42]*xw[6]; s[1] -= v[1]*xw
[0] + v[8] *xw[1] + v[15]*xw[2] + v[22]*xw[3] + v[29]*xw[4] +
v[36]*xw[5] + v[43]*xw[6]; s[2] -= v[2]*xw[0] + v[9] *xw[1] +
v[16]*xw[2] + v[23]*xw[3] + v[30]*xw[4] + v[37]*xw[5] + v[44
]*xw[6]; s[3] -= v[3]*xw[0] + v[10]*xw[1] + v[17]*xw[2] + v[24
]*xw[3] + v[31]*xw[4] + v[38]*xw[5] + v[45]*xw[6]; s[4] -= v[
4]*xw[0] + v[11]*xw[1] + v[18]*xw[2] + v[25]*xw[3] + v[32]*xw
[4] + v[39]*xw[5] + v[46]*xw[6]; s[5] -= v[5]*xw[0] + v[12]*xw
[1] + v[19]*xw[2] + v[26]*xw[3] + v[33]*xw[4] + v[40]*xw[5] +
v[47]*xw[6]; s[6] -= v[6]*xw[0] + v[13]*xw[1] + v[20]*xw[2] +
v[27]*xw[3] + v[34]*xw[4] + v[41]*xw[5] + v[48]*xw[6]; } while
(0)
;
699 v += 49;
700 }
701 PetscKernel_v_gets_A_times_w_7(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[7] *s[1] + idiag[14]*s[2] +
idiag[21]*s[3] + idiag[28]*s[4] + idiag[35]*s[5] + idiag[42]
*s[6]; xw[1] = idiag[1]*s[0] + idiag[8] *s[1] + idiag[15]*s[2
] + idiag[22]*s[3] + idiag[29]*s[4] + idiag[36]*s[5] + idiag[
43]*s[6]; xw[2] = idiag[2]*s[0] + idiag[9] *s[1] + idiag[16]*
s[2] + idiag[23]*s[3] + idiag[30]*s[4] + idiag[37]*s[5] + idiag
[44]*s[6]; xw[3] = idiag[3]*s[0] + idiag[10]*s[1] + idiag[17]
*s[2] + idiag[24]*s[3] + idiag[31]*s[4] + idiag[38]*s[5] + idiag
[45]*s[6]; xw[4] = idiag[4]*s[0] + idiag[11]*s[1] + idiag[18]
*s[2] + idiag[25]*s[3] + idiag[32]*s[4] + idiag[39]*s[5] + idiag
[46]*s[6]; xw[5] = idiag[5]*s[0] + idiag[12]*s[1] + idiag[19]
*s[2] + idiag[26]*s[3] + idiag[33]*s[4] + idiag[40]*s[5] + idiag
[47]*s[6]; xw[6] = idiag[6]*s[0] + idiag[13]*s[1] + idiag[20]
*s[2] + idiag[27]*s[3] + idiag[34]*s[4] + idiag[41]*s[5] + idiag
[48]*s[6]; } while (0)
;
702 x[i2] += xw[0]; x[i2+1] += xw[1]; x[i2+2] += xw[2];
703 x[i2+3] += xw[3]; x[i2+4] += xw[4]; x[i2+5] += xw[5]; x[i2+6] += xw[6];
704 idiag += 49;
705 i2 += 7;
706 }
707 break;
708 default:
709 for (i=0; i<m; i++) {
710 v = aa + bs2*ai[i];
711 vi = aj + ai[i];
712 nz = ai[i+1] - ai[i];
713
714 ierr = PetscArraycpy(w,b+i2,bs)((sizeof(*(w)) != sizeof(*(b+i2))) || PetscMemcpy(w,b+i2,(bs)
*sizeof(*(w))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),714,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
715 /* copy all rows of x that are needed into contiguous space */
716 workt = work;
717 for (j=0; j<nz; j++) {
718 ierr = PetscArraycpy(workt,x + bs*(*vi++),bs)((sizeof(*(workt)) != sizeof(*(x + bs*(*vi++)))) || PetscMemcpy
(workt,x + bs*(*vi++),(bs)*sizeof(*(workt))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),718,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
719 workt += bs;
720 }
721 PetscKernel_w_gets_w_minus_Ar_times_v(bs,bs*nz,w,v,work){ PetscScalar _one = 1.0,_mone = -1.0; PetscBLASInt _ione = 1
,_bbs,_bncols; PetscErrorCode _ierr; _ierr = PetscBLASIntCast
(bs,&_bbs);do {if (__builtin_expect(!!(_ierr),0)) return PetscError
(((MPI_Comm)0x44000001),721,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); _ierr = PetscBLASIntCast
(bs*nz,&_bncols);do {if (__builtin_expect(!!(_ierr),0)) return
PetscError(((MPI_Comm)0x44000001),721,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = "BLASgemv"; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
; petscstack->line[petscstack->currentsize] = 721; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
dgemv_("N",&(_bbs),&(_bncols),&_mone,v,&(_bbs
),work,&_ione,&_one,w,&_ione); do { do {PetscErrorCode
_7_ierr = PetscMallocValidate(721,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
);do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError(
((MPI_Comm)0x44000001),721,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} while(0); 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); } while (0); } while(0); }
;
722 PetscKernel_w_gets_w_plus_Ar_times_v(bs,bs,w,idiag,x+i2){ PetscScalar _one = 1.0; PetscBLASInt _ione = 1,_bbs,_bncols
; PetscErrorCode _ierr; _ierr = PetscBLASIntCast(bs,&_bbs
);do {if (__builtin_expect(!!(_ierr),0)) return PetscError(((
MPI_Comm)0x44000001),722,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); _ierr = PetscBLASIntCast
(bs,&_bncols);do {if (__builtin_expect(!!(_ierr),0)) return
PetscError(((MPI_Comm)0x44000001),722,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = "BLASgemv"; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
; petscstack->line[petscstack->currentsize] = 722; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
dgemv_("N",&(_bbs),&(_bncols),&_one,idiag,&(
_bbs),w,&_ione,&_one,x+i2,&_ione); do { do {PetscErrorCode
_7_ierr = PetscMallocValidate(722,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
);do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError(
((MPI_Comm)0x44000001),722,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} while(0); 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); } while (0); } while(0); }
;
723
724 idiag += bs2;
725 i2 += bs;
726 }
727 break;
728 }
729 ierr = PetscLogFlops(2.0*bs2*a->nz);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),729,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
730 }
731 if (flag & SOR_BACKWARD_SWEEP || flag & SOR_LOCAL_BACKWARD_SWEEP) {
732 idiag = a->idiag+bs2*(a->mbs-1);
733 i2 = bs * (m-1);
734 switch (bs) {
735 case 1:
736 for (i=m-1; i>=0; i--) {
737 v = aa + ai[i];
738 vi = aj + ai[i];
739 nz = ai[i+1] - ai[i];
740 s[0] = b[i2];
741 for (j=0; j<nz; j++) {
742 xw[0] = x[vi[j]];
743 PetscKernel_v_gets_v_minus_A_times_w_1(s,(v+j),xw)do { s[0] -= (v+j)[0]*xw[0]; } while (0);
744 }
745 PetscKernel_v_gets_A_times_w_1(xw,idiag,s)do { xw[0] = idiag[0]*s[0]; } while (0);
746 x[i2] += xw[0];
747 idiag -= 1;
748 i2 -= 1;
749 }
750 break;
751 case 2:
752 for (i=m-1; i>=0; i--) {
753 v = aa + 4*ai[i];
754 vi = aj + ai[i];
755 nz = ai[i+1] - ai[i];
756 s[0] = b[i2]; s[1] = b[i2+1];
757 for (j=0; j<nz; j++) {
758 idx = 2*vi[j];
759 it = 4*j;
760 xw[0] = x[idx]; xw[1] = x[1+idx];
761 PetscKernel_v_gets_v_minus_A_times_w_2(s,(v+it),xw)do { s[0] -= (v+it)[0]*xw[0] + (v+it)[2]*xw[1]; s[1] -= (v+it
)[1]*xw[0] + (v+it)[3]*xw[1]; } while (0)
;
762 }
763 PetscKernel_v_gets_A_times_w_2(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[2]*s[1]; xw[1] = idiag[1]*
s[0] + idiag[3]*s[1]; } while (0)
;
764 x[i2] += xw[0]; x[i2+1] += xw[1];
765 idiag -= 4;
766 i2 -= 2;
767 }
768 break;
769 case 3:
770 for (i=m-1; i>=0; i--) {
771 v = aa + 9*ai[i];
772 vi = aj + ai[i];
773 nz = ai[i+1] - ai[i];
774 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2];
775 while (nz--) {
776 idx = 3*(*vi++);
777 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx];
778 PetscKernel_v_gets_v_minus_A_times_w_3(s,v,xw)do { s[0] -= v[0]*xw[0] + v[3]*xw[1] + v[6]*xw[2]; s[1] -= v[
1]*xw[0] + v[4]*xw[1] + v[7]*xw[2]; s[2] -= v[2]*xw[0] + v[5]
*xw[1] + v[8]*xw[2]; } while (0)
;
779 v += 9;
780 }
781 PetscKernel_v_gets_A_times_w_3(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[3]*s[1] + idiag[6]*s[2]; xw
[1] = idiag[1]*s[0] + idiag[4]*s[1] + idiag[7]*s[2]; xw[2] = idiag
[2]*s[0] + idiag[5]*s[1] + idiag[8]*s[2]; } while (0)
;
782 x[i2] += xw[0]; x[i2+1] += xw[1]; x[i2+2] += xw[2];
783 idiag -= 9;
784 i2 -= 3;
785 }
786 break;
787 case 4:
788 for (i=m-1; i>=0; i--) {
789 v = aa + 16*ai[i];
790 vi = aj + ai[i];
791 nz = ai[i+1] - ai[i];
792 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2]; s[3] = b[i2+3];
793 while (nz--) {
794 idx = 4*(*vi++);
795 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx]; xw[3] = x[3+idx];
796 PetscKernel_v_gets_v_minus_A_times_w_4(s,v,xw)do { s[0] -= v[0]*xw[0] + v[4]*xw[1] + v[8] *xw[2] + v[12]*xw
[3]; s[1] -= v[1]*xw[0] + v[5]*xw[1] + v[9] *xw[2] + v[13]*xw
[3]; s[2] -= v[2]*xw[0] + v[6]*xw[1] + v[10]*xw[2] + v[14]*xw
[3]; s[3] -= v[3]*xw[0] + v[7]*xw[1] + v[11]*xw[2] + v[15]*xw
[3]; } while (0)
;
797 v += 16;
798 }
799 PetscKernel_v_gets_A_times_w_4(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[4]*s[1] + idiag[8] *s[2] +
idiag[12]*s[3]; xw[1] = idiag[1]*s[0] + idiag[5]*s[1] + idiag
[9] *s[2] + idiag[13]*s[3]; xw[2] = idiag[2]*s[0] + idiag[6]*
s[1] + idiag[10]*s[2] + idiag[14]*s[3]; xw[3] = idiag[3]*s[0]
+ idiag[7]*s[1] + idiag[11]*s[2] + idiag[15]*s[3]; } while (
0)
;
800 x[i2] += xw[0]; x[i2+1] += xw[1]; x[i2+2] += xw[2]; x[i2+3] += xw[3];
801 idiag -= 16;
802 i2 -= 4;
803 }
804 break;
805 case 5:
806 for (i=m-1; i>=0; i--) {
807 v = aa + 25*ai[i];
808 vi = aj + ai[i];
809 nz = ai[i+1] - ai[i];
810 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2]; s[3] = b[i2+3]; s[4] = b[i2+4];
811 while (nz--) {
812 idx = 5*(*vi++);
813 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx]; xw[3] = x[3+idx]; xw[4] = x[4+idx];
814 PetscKernel_v_gets_v_minus_A_times_w_5(s,v,xw)do { s[0] -= v[0]*xw[0] + v[5]*xw[1] + v[10]*xw[2] + v[15]*xw
[3] + v[20]*xw[4]; s[1] -= v[1]*xw[0] + v[6]*xw[1] + v[11]*xw
[2] + v[16]*xw[3] + v[21]*xw[4]; s[2] -= v[2]*xw[0] + v[7]*xw
[1] + v[12]*xw[2] + v[17]*xw[3] + v[22]*xw[4]; s[3] -= v[3]*xw
[0] + v[8]*xw[1] + v[13]*xw[2] + v[18]*xw[3] + v[23]*xw[4]; s
[4] -= v[4]*xw[0] + v[9]*xw[1] + v[14]*xw[2] + v[19]*xw[3] + v
[24]*xw[4]; } while (0)
;
815 v += 25;
816 }
817 PetscKernel_v_gets_A_times_w_5(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[5]*s[1] + idiag[10]*s[2] +
idiag[15]*s[3] + idiag[20]*s[4]; xw[1] = idiag[1]*s[0] + idiag
[6]*s[1] + idiag[11]*s[2] + idiag[16]*s[3] + idiag[21]*s[4]; xw
[2] = idiag[2]*s[0] + idiag[7]*s[1] + idiag[12]*s[2] + idiag[
17]*s[3] + idiag[22]*s[4]; xw[3] = idiag[3]*s[0] + idiag[8]*s
[1] + idiag[13]*s[2] + idiag[18]*s[3] + idiag[23]*s[4]; xw[4]
= idiag[4]*s[0] + idiag[9]*s[1] + idiag[14]*s[2] + idiag[19]
*s[3] + idiag[24]*s[4]; } while (0)
;
818 x[i2] += xw[0]; x[i2+1] += xw[1]; x[i2+2] += xw[2]; x[i2+3] += xw[3]; x[i2+4] += xw[4];
819 idiag -= 25;
820 i2 -= 5;
821 }
822 break;
823 case 6:
824 for (i=m-1; i>=0; i--) {
825 v = aa + 36*ai[i];
826 vi = aj + ai[i];
827 nz = ai[i+1] - ai[i];
828 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2]; s[3] = b[i2+3]; s[4] = b[i2+4]; s[5] = b[i2+5];
829 while (nz--) {
830 idx = 6*(*vi++);
831 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx];
832 xw[3] = x[3+idx]; xw[4] = x[4+idx]; xw[5] = x[5+idx];
833 PetscKernel_v_gets_v_minus_A_times_w_6(s,v,xw)do { s[0] -= v[0]*xw[0] + v[6] *xw[1] + v[12]*xw[2] + v[18]*xw
[3] + v[24]*xw[4] + v[30]*xw[5]; s[1] -= v[1]*xw[0] + v[7] *xw
[1] + v[13]*xw[2] + v[19]*xw[3] + v[25]*xw[4] + v[31]*xw[5]; s
[2] -= v[2]*xw[0] + v[8] *xw[1] + v[14]*xw[2] + v[20]*xw[3] +
v[26]*xw[4] + v[32]*xw[5]; s[3] -= v[3]*xw[0] + v[9] *xw[1] +
v[15]*xw[2] + v[21]*xw[3] + v[27]*xw[4] + v[33]*xw[5]; s[4] -=
v[4]*xw[0] + v[10]*xw[1] + v[16]*xw[2] + v[22]*xw[3] + v[28]
*xw[4] + v[34]*xw[5]; s[5] -= v[5]*xw[0] + v[11]*xw[1] + v[17
]*xw[2] + v[23]*xw[3] + v[29]*xw[4] + v[35]*xw[5]; } while (0
)
;
834 v += 36;
835 }
836 PetscKernel_v_gets_A_times_w_6(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[6] *s[1] + idiag[12]*s[2] +
idiag[18]*s[3] + idiag[24]*s[4] + idiag[30]*s[5]; xw[1] = idiag
[1]*s[0] + idiag[7] *s[1] + idiag[13]*s[2] + idiag[19]*s[3] +
idiag[25]*s[4] + idiag[31]*s[5]; xw[2] = idiag[2]*s[0] + idiag
[8] *s[1] + idiag[14]*s[2] + idiag[20]*s[3] + idiag[26]*s[4] +
idiag[32]*s[5]; xw[3] = idiag[3]*s[0] + idiag[9] *s[1] + idiag
[15]*s[2] + idiag[21]*s[3] + idiag[27]*s[4] + idiag[33]*s[5];
xw[4] = idiag[4]*s[0] + idiag[10]*s[1] + idiag[16]*s[2] + idiag
[22]*s[3] + idiag[28]*s[4] + idiag[34]*s[5]; xw[5] = idiag[5]
*s[0] + idiag[11]*s[1] + idiag[17]*s[2] + idiag[23]*s[3] + idiag
[29]*s[4] + idiag[35]*s[5]; } while (0)
;
837 x[i2] += xw[0]; x[i2+1] += xw[1]; x[i2+2] += xw[2];
838 x[i2+3] += xw[3]; x[i2+4] += xw[4]; x[i2+5] += xw[5];
839 idiag -= 36;
840 i2 -= 6;
841 }
842 break;
843 case 7:
844 for (i=m-1; i>=0; i--) {
845 v = aa + 49*ai[i];
846 vi = aj + ai[i];
847 nz = ai[i+1] - ai[i];
848 s[0] = b[i2]; s[1] = b[i2+1]; s[2] = b[i2+2];
849 s[3] = b[i2+3]; s[4] = b[i2+4]; s[5] = b[i2+5]; s[6] = b[i2+6];
850 while (nz--) {
851 idx = 7*(*vi++);
852 xw[0] = x[idx]; xw[1] = x[1+idx]; xw[2] = x[2+idx];
853 xw[3] = x[3+idx]; xw[4] = x[4+idx]; xw[5] = x[5+idx]; xw[6] = x[6+idx];
854 PetscKernel_v_gets_v_minus_A_times_w_7(s,v,xw)do { s[0] -= v[0]*xw[0] + v[7] *xw[1] + v[14]*xw[2] + v[21]*xw
[3] + v[28]*xw[4] + v[35]*xw[5] + v[42]*xw[6]; s[1] -= v[1]*xw
[0] + v[8] *xw[1] + v[15]*xw[2] + v[22]*xw[3] + v[29]*xw[4] +
v[36]*xw[5] + v[43]*xw[6]; s[2] -= v[2]*xw[0] + v[9] *xw[1] +
v[16]*xw[2] + v[23]*xw[3] + v[30]*xw[4] + v[37]*xw[5] + v[44
]*xw[6]; s[3] -= v[3]*xw[0] + v[10]*xw[1] + v[17]*xw[2] + v[24
]*xw[3] + v[31]*xw[4] + v[38]*xw[5] + v[45]*xw[6]; s[4] -= v[
4]*xw[0] + v[11]*xw[1] + v[18]*xw[2] + v[25]*xw[3] + v[32]*xw
[4] + v[39]*xw[5] + v[46]*xw[6]; s[5] -= v[5]*xw[0] + v[12]*xw
[1] + v[19]*xw[2] + v[26]*xw[3] + v[33]*xw[4] + v[40]*xw[5] +
v[47]*xw[6]; s[6] -= v[6]*xw[0] + v[13]*xw[1] + v[20]*xw[2] +
v[27]*xw[3] + v[34]*xw[4] + v[41]*xw[5] + v[48]*xw[6]; } while
(0)
;
855 v += 49;
856 }
857 PetscKernel_v_gets_A_times_w_7(xw,idiag,s)do { xw[0] = idiag[0]*s[0] + idiag[7] *s[1] + idiag[14]*s[2] +
idiag[21]*s[3] + idiag[28]*s[4] + idiag[35]*s[5] + idiag[42]
*s[6]; xw[1] = idiag[1]*s[0] + idiag[8] *s[1] + idiag[15]*s[2
] + idiag[22]*s[3] + idiag[29]*s[4] + idiag[36]*s[5] + idiag[
43]*s[6]; xw[2] = idiag[2]*s[0] + idiag[9] *s[1] + idiag[16]*
s[2] + idiag[23]*s[3] + idiag[30]*s[4] + idiag[37]*s[5] + idiag
[44]*s[6]; xw[3] = idiag[3]*s[0] + idiag[10]*s[1] + idiag[17]
*s[2] + idiag[24]*s[3] + idiag[31]*s[4] + idiag[38]*s[5] + idiag
[45]*s[6]; xw[4] = idiag[4]*s[0] + idiag[11]*s[1] + idiag[18]
*s[2] + idiag[25]*s[3] + idiag[32]*s[4] + idiag[39]*s[5] + idiag
[46]*s[6]; xw[5] = idiag[5]*s[0] + idiag[12]*s[1] + idiag[19]
*s[2] + idiag[26]*s[3] + idiag[33]*s[4] + idiag[40]*s[5] + idiag
[47]*s[6]; xw[6] = idiag[6]*s[0] + idiag[13]*s[1] + idiag[20]
*s[2] + idiag[27]*s[3] + idiag[34]*s[4] + idiag[41]*s[5] + idiag
[48]*s[6]; } while (0)
;
858 x[i2] += xw[0]; x[i2+1] += xw[1]; x[i2+2] += xw[2];
859 x[i2+3] += xw[3]; x[i2+4] += xw[4]; x[i2+5] += xw[5]; x[i2+6] += xw[6];
860 idiag -= 49;
861 i2 -= 7;
862 }
863 break;
864 default:
865 for (i=m-1; i>=0; i--) {
866 v = aa + bs2*ai[i];
867 vi = aj + ai[i];
868 nz = ai[i+1] - ai[i];
869
870 ierr = PetscArraycpy(w,b+i2,bs)((sizeof(*(w)) != sizeof(*(b+i2))) || PetscMemcpy(w,b+i2,(bs)
*sizeof(*(w))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),870,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
871 /* copy all rows of x that are needed into contiguous space */
872 workt = work;
873 for (j=0; j<nz; j++) {
874 ierr = PetscArraycpy(workt,x + bs*(*vi++),bs)((sizeof(*(workt)) != sizeof(*(x + bs*(*vi++)))) || PetscMemcpy
(workt,x + bs*(*vi++),(bs)*sizeof(*(workt))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),874,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
875 workt += bs;
876 }
877 PetscKernel_w_gets_w_minus_Ar_times_v(bs,bs*nz,w,v,work){ PetscScalar _one = 1.0,_mone = -1.0; PetscBLASInt _ione = 1
,_bbs,_bncols; PetscErrorCode _ierr; _ierr = PetscBLASIntCast
(bs,&_bbs);do {if (__builtin_expect(!!(_ierr),0)) return PetscError
(((MPI_Comm)0x44000001),877,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); _ierr = PetscBLASIntCast
(bs*nz,&_bncols);do {if (__builtin_expect(!!(_ierr),0)) return
PetscError(((MPI_Comm)0x44000001),877,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = "BLASgemv"; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
; petscstack->line[petscstack->currentsize] = 877; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
dgemv_("N",&(_bbs),&(_bncols),&_mone,v,&(_bbs
),work,&_ione,&_one,w,&_ione); do { do {PetscErrorCode
_7_ierr = PetscMallocValidate(877,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
);do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError(
((MPI_Comm)0x44000001),877,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} while(0); 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); } while (0); } while(0); }
;
878 PetscKernel_w_gets_w_plus_Ar_times_v(bs,bs,w,idiag,x+i2){ PetscScalar _one = 1.0; PetscBLASInt _ione = 1,_bbs,_bncols
; PetscErrorCode _ierr; _ierr = PetscBLASIntCast(bs,&_bbs
);do {if (__builtin_expect(!!(_ierr),0)) return PetscError(((
MPI_Comm)0x44000001),878,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); _ierr = PetscBLASIntCast
(bs,&_bncols);do {if (__builtin_expect(!!(_ierr),0)) return
PetscError(((MPI_Comm)0x44000001),878,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_ierr,PETSC_ERROR_REPEAT," ");} while (0); do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = "BLASgemv"; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
; petscstack->line[petscstack->currentsize] = 878; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
dgemv_("N",&(_bbs),&(_bncols),&_one,idiag,&(
_bbs),w,&_ione,&_one,x+i2,&_ione); do { do {PetscErrorCode
_7_ierr = PetscMallocValidate(878,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
);do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError(
((MPI_Comm)0x44000001),878,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} while(0); 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); } while (0); } while(0); }
;
879
880 idiag -= bs2;
881 i2 -= bs;
882 }
883 break;
884 }
885 ierr = PetscLogFlops(2.0*bs2*(a->nz));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),885,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
886 }
887 }
888 ierr = VecRestoreArray(xx,&x);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),888,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
889 ierr = VecRestoreArrayRead(bb,&b);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),889,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
890 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)
;
891}
892
893
894/*
895 Special version for direct calls from Fortran (Used in PETSc-fun3d)
896*/
897#if defined(PETSC_HAVE_FORTRAN_CAPS)
898#define matsetvaluesblocked4_ MATSETVALUESBLOCKED4
899#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE1)
900#define matsetvaluesblocked4_ matsetvaluesblocked4
901#endif
902
903PETSC_EXTERNextern __attribute__((visibility ("default"))) void matsetvaluesblocked4_(Mat *AA,PetscInt *mm,const PetscInt im[],PetscInt *nn,const PetscInt in[],const PetscScalar v[])
904{
905 Mat A = *AA;
906 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
907 PetscInt *rp,k,low,high,t,ii,jj,row,nrow,i,col,l,N,m = *mm,n = *nn;
908 PetscInt *ai =a->i,*ailen=a->ilen;
909 PetscInt *aj =a->j,stepval,lastcol = -1;
910 const PetscScalar *value = v;
911 MatScalar *ap,*aa = a->a,*bap;
912 PetscErrorCode ierr;
913
914 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 914; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
915 if (A->rmap->bs != 4) SETERRABORT(PetscObjectComm((PetscObject)A),PETSC_ERR_ARG_WRONG,"Can only be called with a block size of 4")do {PetscError(PetscObjectComm((PetscObject)A),915,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,62,PETSC_ERROR_INITIAL,"Can only be called with a block size of 4"
);MPI_Abort(PetscObjectComm((PetscObject)A),62);} while (0)
;
916 stepval = (n-1)*4;
917 for (k=0; k<m; k++) { /* loop over added rows */
918 row = im[k];
919 rp = aj + ai[row];
920 ap = aa + 16*ai[row];
921 nrow = ailen[row];
922 low = 0;
923 high = nrow;
924 for (l=0; l<n; l++) { /* loop over added columns */
925 col = in[l];
926 if (col <= lastcol) low = 0;
927 else high = nrow;
928 lastcol = col;
929 value = v + k*(stepval+4 + l)*4;
930 while (high-low > 7) {
931 t = (low+high)/2;
932 if (rp[t] > col) high = t;
933 else low = t;
934 }
935 for (i=low; i<high; i++) {
936 if (rp[i] > col) break;
937 if (rp[i] == col) {
938 bap = ap + 16*i;
939 for (ii=0; ii<4; ii++,value+=stepval) {
940 for (jj=ii; jj<16; jj+=4) {
941 bap[jj] += *value++;
942 }
943 }
944 goto noinsert2;
945 }
946 }
947 N = nrow++ - 1;
948 high++; /* added new column index thus must search to one higher than before */
949 /* shift up all the later entries in this row */
950 for (ii=N; ii>=i; ii--) {
951 rp[ii+1] = rp[ii];
952 ierr = PetscArraycpy(ap+16*(ii+1),ap+16*(ii),16)((sizeof(*(ap+16*(ii+1))) != sizeof(*(ap+16*(ii)))) || PetscMemcpy
(ap+16*(ii+1),ap+16*(ii),(16)*sizeof(*(ap+16*(ii+1)))))
;CHKERRV(ierr)do {if (__builtin_expect(!!(ierr),0)) {ierr = PetscError(((MPI_Comm
)0x44000001),952,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");return;}} while(0)
;
953 }
954 if (N >= i) {
955 ierr = PetscArrayzero(ap+16*i,16)PetscMemzero(ap+16*i,(16)*sizeof(*(ap+16*i)));CHKERRV(ierr)do {if (__builtin_expect(!!(ierr),0)) {ierr = PetscError(((MPI_Comm
)0x44000001),955,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");return;}} while(0)
;
956 }
957 rp[i] = col;
958 bap = ap + 16*i;
959 for (ii=0; ii<4; ii++,value+=stepval) {
960 for (jj=ii; jj<16; jj+=4) {
961 bap[jj] = *value++;
962 }
963 }
964 noinsert2:;
965 low = i;
966 }
967 ailen[row] = nrow;
968 }
969 PetscFunctionReturnVoid()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;} while (0)
;
970}
971
972#if defined(PETSC_HAVE_FORTRAN_CAPS)
973#define matsetvalues4_ MATSETVALUES4
974#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE1)
975#define matsetvalues4_ matsetvalues4
976#endif
977
978PETSC_EXTERNextern __attribute__((visibility ("default"))) void matsetvalues4_(Mat *AA,PetscInt *mm,PetscInt *im,PetscInt *nn,PetscInt *in,PetscScalar *v)
979{
980 Mat A = *AA;
981 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
982 PetscInt *rp,k,low,high,t,row,nrow,i,col,l,N,n = *nn,m = *mm;
983 PetscInt *ai=a->i,*ailen=a->ilen;
984 PetscInt *aj=a->j,brow,bcol;
985 PetscInt ridx,cidx,lastcol = -1;
986 MatScalar *ap,value,*aa=a->a,*bap;
987 PetscErrorCode ierr;
988
989 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 989; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
990 for (k=0; k<m; k++) { /* loop over added rows */
991 row = im[k]; brow = row/4;
992 rp = aj + ai[brow];
993 ap = aa + 16*ai[brow];
994 nrow = ailen[brow];
995 low = 0;
996 high = nrow;
997 for (l=0; l<n; l++) { /* loop over added columns */
998 col = in[l]; bcol = col/4;
999 ridx = row % 4; cidx = col % 4;
1000 value = v[l + k*n];
1001 if (col <= lastcol) low = 0;
1002 else high = nrow;
1003 lastcol = col;
1004 while (high-low > 7) {
1005 t = (low+high)/2;
1006 if (rp[t] > bcol) high = t;
1007 else low = t;
1008 }
1009 for (i=low; i<high; i++) {
1010 if (rp[i] > bcol) break;
1011 if (rp[i] == bcol) {
1012 bap = ap + 16*i + 4*cidx + ridx;
1013 *bap += value;
1014 goto noinsert1;
1015 }
1016 }
1017 N = nrow++ - 1;
1018 high++; /* added new column thus must search to one higher than before */
1019 /* shift up all the later entries in this row */
1020 ierr = PetscArraymove(rp+i+1,rp+i,N-i+1)((sizeof(*(rp+i+1)) != sizeof(*(rp+i))) || PetscMemmove(rp+i+
1,rp+i,(N-i+1)*sizeof(*(rp+i+1))))
;CHKERRV(ierr)do {if (__builtin_expect(!!(ierr),0)) {ierr = PetscError(((MPI_Comm
)0x44000001),1020,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");return;}} while(0)
;
1021 ierr = PetscArraymove(ap+16*i+16,ap+16*i,16*(N-i+1))((sizeof(*(ap+16*i+16)) != sizeof(*(ap+16*i))) || PetscMemmove
(ap+16*i+16,ap+16*i,(16*(N-i+1))*sizeof(*(ap+16*i+16))))
;CHKERRV(ierr)do {if (__builtin_expect(!!(ierr),0)) {ierr = PetscError(((MPI_Comm
)0x44000001),1021,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");return;}} while(0)
;
1022 ierr = PetscArrayzero(ap+16*i,16)PetscMemzero(ap+16*i,(16)*sizeof(*(ap+16*i)));CHKERRV(ierr)do {if (__builtin_expect(!!(ierr),0)) {ierr = PetscError(((MPI_Comm
)0x44000001),1022,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");return;}} while(0)
;
1023 rp[i] = bcol;
1024 ap[16*i + 4*cidx + ridx] = value;
1025noinsert1:;
1026 low = i;
1027 }
1028 ailen[brow] = nrow;
1029 }
1030 PetscFunctionReturnVoid()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;} while (0)
;
1031}
1032
1033/*
1034 Checks for missing diagonals
1035*/
1036PetscErrorCode MatMissingDiagonal_SeqBAIJ(Mat A,PetscBool *missing,PetscInt *d)
1037{
1038 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
1039 PetscErrorCode ierr;
1040 PetscInt *diag,*ii = a->i,i;
1041
1042 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1042; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1043 ierr = MatMarkDiagonal_SeqBAIJ(A);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1043,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1044 *missing = PETSC_FALSE;
1045 if (A->rmap->n > 0 && !ii) {
1046 *missing = PETSC_TRUE;
1047 if (d) *d = 0;
1048 ierr = PetscInfo(A,"Matrix has no entries therefore is missing diagonal\n")PetscInfo_Private(__func__,A,"Matrix has no entries therefore is missing diagonal\n"
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1048,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1049 } else {
1050 PetscInt n;
1051 n = PetscMin(a->mbs, a->nbs)(((a->mbs)<(a->nbs)) ? (a->mbs) : (a->nbs));
1052 diag = a->diag;
1053 for (i=0; i<n; i++) {
1054 if (diag[i] >= ii[i+1]) {
1055 *missing = PETSC_TRUE;
1056 if (d) *d = i;
1057 ierr = PetscInfo1(A,"Matrix is missing block diagonal number %D\n",i)PetscInfo_Private(__func__,A,"Matrix is missing block diagonal number %D\n"
,i)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1057,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1058 break;
1059 }
1060 }
1061 }
1062 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)
;
1063}
1064
1065PetscErrorCode MatMarkDiagonal_SeqBAIJ(Mat A)
1066{
1067 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
1068 PetscErrorCode ierr;
1069 PetscInt i,j,m = a->mbs;
1070
1071 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1071; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1072 if (!a->diag) {
1073 ierr = PetscMalloc1(m,&a->diag)PetscMallocA(1,PETSC_FALSE,1073,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(m)*sizeof(**(&a->diag)),(&a->diag))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1073,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1074 ierr = PetscLogObjectMemory((PetscObject)A,m*sizeof(PetscInt));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1074,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1075 a->free_diag = PETSC_TRUE;
1076 }
1077 for (i=0; i<m; i++) {
1078 a->diag[i] = a->i[i+1];
1079 for (j=a->i[i]; j<a->i[i+1]; j++) {
1080 if (a->j[j] == i) {
1081 a->diag[i] = j;
1082 break;
1083 }
1084 }
1085 }
1086 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)
;
1087}
1088
1089
1090static PetscErrorCode MatGetRowIJ_SeqBAIJ(Mat A,PetscInt oshift,PetscBool symmetric,PetscBool blockcompressed,PetscInt *nn,const PetscInt *inia[],const PetscInt *inja[],PetscBool *done)
1091{
1092 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
1093 PetscErrorCode ierr;
1094 PetscInt i,j,n = a->mbs,nz = a->i[n],*tia,*tja,bs = A->rmap->bs,k,l,cnt;
1095 PetscInt **ia = (PetscInt**)inia,**ja = (PetscInt**)inja;
1096
1097 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1097; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1098 *nn = n;
1099 if (!ia) 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)
;
1100 if (symmetric) {
1101 ierr = MatToSymmetricIJ_SeqAIJ(n,a->i,a->j,PETSC_TRUE,0,0,&tia,&tja);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1101,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1102 nz = tia[n];
1103 } else {
1104 tia = a->i; tja = a->j;
1105 }
1106
1107 if (!blockcompressed && bs > 1) {
1108 (*nn) *= bs;
1109 /* malloc & create the natural set of indices */
1110 ierr = PetscMalloc1((n+1)*bs,ia)PetscMallocA(1,PETSC_FALSE,1110,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)((n+1)*bs)*sizeof(**(ia)),(ia))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1110,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1111 if (n) {
1112 (*ia)[0] = oshift;
1113 for (j=1; j<bs; j++) {
1114 (*ia)[j] = (tia[1]-tia[0])*bs+(*ia)[j-1];
1115 }
1116 }
1117
1118 for (i=1; i<n; i++) {
1119 (*ia)[i*bs] = (tia[i]-tia[i-1])*bs + (*ia)[i*bs-1];
1120 for (j=1; j<bs; j++) {
1121 (*ia)[i*bs+j] = (tia[i+1]-tia[i])*bs + (*ia)[i*bs+j-1];
1122 }
1123 }
1124 if (n) {
1125 (*ia)[n*bs] = (tia[n]-tia[n-1])*bs + (*ia)[n*bs-1];
1126 }
1127
1128 if (inja) {
1129 ierr = PetscMalloc1(nz*bs*bs,ja)PetscMallocA(1,PETSC_FALSE,1129,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(nz*bs*bs)*sizeof(**(ja)),(ja))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1129,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1130 cnt = 0;
1131 for (i=0; i<n; i++) {
1132 for (j=0; j<bs; j++) {
1133 for (k=tia[i]; k<tia[i+1]; k++) {
1134 for (l=0; l<bs; l++) {
1135 (*ja)[cnt++] = bs*tja[k] + l;
1136 }
1137 }
1138 }
1139 }
1140 }
1141
1142 if (symmetric) { /* deallocate memory allocated in MatToSymmetricIJ_SeqAIJ() */
1143 ierr = PetscFree(tia)((*PetscTrFree)((void*)(tia),1143,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((tia) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1143,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1144 ierr = PetscFree(tja)((*PetscTrFree)((void*)(tja),1144,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((tja) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1144,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1145 }
1146 } else if (oshift == 1) {
1147 if (symmetric) {
1148 nz = tia[A->rmap->n/bs];
1149 /* add 1 to i and j indices */
1150 for (i=0; i<A->rmap->n/bs+1; i++) tia[i] = tia[i] + 1;
1151 *ia = tia;
1152 if (ja) {
1153 for (i=0; i<nz; i++) tja[i] = tja[i] + 1;
1154 *ja = tja;
1155 }
1156 } else {
1157 nz = a->i[A->rmap->n/bs];
1158 /* malloc space and add 1 to i and j indices */
1159 ierr = PetscMalloc1(A->rmap->n/bs+1,ia)PetscMallocA(1,PETSC_FALSE,1159,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(A->rmap->n/bs+1)*sizeof(**(ia)),(ia))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1159,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1160 for (i=0; i<A->rmap->n/bs+1; i++) (*ia)[i] = a->i[i] + 1;
1161 if (ja) {
1162 ierr = PetscMalloc1(nz,ja)PetscMallocA(1,PETSC_FALSE,1162,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(nz)*sizeof(**(ja)),(ja))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1162,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1163 for (i=0; i<nz; i++) (*ja)[i] = a->j[i] + 1;
1164 }
1165 }
1166 } else {
1167 *ia = tia;
1168 if (ja) *ja = tja;
1169 }
1170 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)
;
1171}
1172
1173static PetscErrorCode MatRestoreRowIJ_SeqBAIJ(Mat A,PetscInt oshift,PetscBool symmetric,PetscBool blockcompressed,PetscInt *nn,const PetscInt *ia[],const PetscInt *ja[],PetscBool *done)
1174{
1175 PetscErrorCode ierr;
1176
1177 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1177; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1178 if (!ia) 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)
;
1179 if ((!blockcompressed && A->rmap->bs > 1) || (symmetric || oshift == 1)) {
1180 ierr = PetscFree(*ia)((*PetscTrFree)((void*)(*ia),1180,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((*ia) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1180,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1181 if (ja) {ierr = PetscFree(*ja)((*PetscTrFree)((void*)(*ja),1181,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((*ja) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1181,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1182 }
1183 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)
;
1184}
1185
1186PetscErrorCode MatDestroy_SeqBAIJ(Mat A)
1187{
1188 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
1189 PetscErrorCode ierr;
1190
1191 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1191; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1192#if defined(PETSC_USE_LOG1)
1193 PetscLogObjectState((PetscObject)A,"Rows=%D, Cols=%D, NZ=%D",A->rmap->N,A->cmap->n,a->nz);
1194#endif
1195 ierr = MatSeqXAIJFreeAIJ(A,&a->a,&a->j,&a->i);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1195,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1196 ierr = ISDestroy(&a->row);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1196,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1197 ierr = ISDestroy(&a->col);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1197,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1198 if (a->free_diag) {ierr = PetscFree(a->diag)((*PetscTrFree)((void*)(a->diag),1198,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((a->diag) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1198,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1199 ierr = PetscFree(a->idiag)((*PetscTrFree)((void*)(a->idiag),1199,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((a->idiag) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1199,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1200 if (a->free_imax_ilen) {ierr = PetscFree2(a->imax,a->ilen)PetscFreeA(2,1200,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,&(a->imax),&(a->ilen))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1200,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1201 ierr = PetscFree(a->solve_work)((*PetscTrFree)((void*)(a->solve_work),1201,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((a->solve_work) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1201,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1202 ierr = PetscFree(a->mult_work)((*PetscTrFree)((void*)(a->mult_work),1202,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((a->mult_work) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1202,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1203 ierr = PetscFree(a->sor_workt)((*PetscTrFree)((void*)(a->sor_workt),1203,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((a->sor_workt) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1203,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1204 ierr = PetscFree(a->sor_work)((*PetscTrFree)((void*)(a->sor_work),1204,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((a->sor_work) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1204,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1205 ierr = ISDestroy(&a->icol);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1205,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1206 ierr = PetscFree(a->saved_values)((*PetscTrFree)((void*)(a->saved_values),1206,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((a->saved_values) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1206,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1207 ierr = PetscFree2(a->compressedrow.i,a->compressedrow.rindex)PetscFreeA(2,1207,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,&(a->compressedrow.i),&(a->compressedrow.rindex
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1207,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1208
1209 ierr = MatDestroy(&a->sbaijMat);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1209,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1210 ierr = MatDestroy(&a->parent);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1210,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1211 ierr = PetscFree(A->data)((*PetscTrFree)((void*)(A->data),1211,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((A->data) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1211,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1212
1213 ierr = PetscObjectChangeTypeName((PetscObject)A,0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1213,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1214 ierr = PetscObjectComposeFunction((PetscObject)A,"MatInvertBlockDiagonal_C",NULL)PetscObjectComposeFunction_Private((PetscObject)A,"MatInvertBlockDiagonal_C"
,(PetscVoidFunction)(((void*)0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1214,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1215 ierr = PetscObjectComposeFunction((PetscObject)A,"MatStoreValues_C",NULL)PetscObjectComposeFunction_Private((PetscObject)A,"MatStoreValues_C"
,(PetscVoidFunction)(((void*)0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1215,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1216 ierr = PetscObjectComposeFunction((PetscObject)A,"MatRetrieveValues_C",NULL)PetscObjectComposeFunction_Private((PetscObject)A,"MatRetrieveValues_C"
,(PetscVoidFunction)(((void*)0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1216,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1217 ierr = PetscObjectComposeFunction((PetscObject)A,"MatSeqBAIJSetColumnIndices_C",NULL)PetscObjectComposeFunction_Private((PetscObject)A,"MatSeqBAIJSetColumnIndices_C"
,(PetscVoidFunction)(((void*)0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1217,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1218 ierr = PetscObjectComposeFunction((PetscObject)A,"MatConvert_seqbaij_seqaij_C",NULL)PetscObjectComposeFunction_Private((PetscObject)A,"MatConvert_seqbaij_seqaij_C"
,(PetscVoidFunction)(((void*)0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1218,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1219 ierr = PetscObjectComposeFunction((PetscObject)A,"MatConvert_seqbaij_seqsbaij_C",NULL)PetscObjectComposeFunction_Private((PetscObject)A,"MatConvert_seqbaij_seqsbaij_C"
,(PetscVoidFunction)(((void*)0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1219,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1220 ierr = PetscObjectComposeFunction((PetscObject)A,"MatSeqBAIJSetPreallocation_C",NULL)PetscObjectComposeFunction_Private((PetscObject)A,"MatSeqBAIJSetPreallocation_C"
,(PetscVoidFunction)(((void*)0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1220,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1221 ierr = PetscObjectComposeFunction((PetscObject)A,"MatSeqBAIJSetPreallocationCSR_C",NULL)PetscObjectComposeFunction_Private((PetscObject)A,"MatSeqBAIJSetPreallocationCSR_C"
,(PetscVoidFunction)(((void*)0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1221,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1222 ierr = PetscObjectComposeFunction((PetscObject)A,"MatConvert_seqbaij_seqbstrm_C",NULL)PetscObjectComposeFunction_Private((PetscObject)A,"MatConvert_seqbaij_seqbstrm_C"
,(PetscVoidFunction)(((void*)0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1222,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1223 ierr = PetscObjectComposeFunction((PetscObject)A,"MatIsTranspose_C",NULL)PetscObjectComposeFunction_Private((PetscObject)A,"MatIsTranspose_C"
,(PetscVoidFunction)(((void*)0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1223,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1224#if defined(PETSC_HAVE_HYPRE)
1225 ierr = PetscObjectComposeFunction((PetscObject)A,"MatConvert_seqbaij_hypre_C",NULL)PetscObjectComposeFunction_Private((PetscObject)A,"MatConvert_seqbaij_hypre_C"
,(PetscVoidFunction)(((void*)0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1225,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1226#endif
1227 ierr = PetscObjectComposeFunction((PetscObject)A,"MatConvert_seqbaij_is_C",NULL)PetscObjectComposeFunction_Private((PetscObject)A,"MatConvert_seqbaij_is_C"
,(PetscVoidFunction)(((void*)0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1227,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1228 ierr = PetscObjectComposeFunction((PetscObject)A,"MatPtAP_is_seqaij_C",NULL)PetscObjectComposeFunction_Private((PetscObject)A,"MatPtAP_is_seqaij_C"
,(PetscVoidFunction)(((void*)0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1228,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1229 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)
;
1230}
1231
1232PetscErrorCode MatSetOption_SeqBAIJ(Mat A,MatOption op,PetscBool flg)
1233{
1234 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
1235 PetscErrorCode ierr;
1236
1237 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1237; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1238 switch (op) {
1239 case MAT_ROW_ORIENTED:
1240 a->roworiented = flg;
1241 break;
1242 case MAT_KEEP_NONZERO_PATTERN:
1243 a->keepnonzeropattern = flg;
1244 break;
1245 case MAT_NEW_NONZERO_LOCATIONS:
1246 a->nonew = (flg ? 0 : 1);
1247 break;
1248 case MAT_NEW_NONZERO_LOCATION_ERR:
1249 a->nonew = (flg ? -1 : 0);
1250 break;
1251 case MAT_NEW_NONZERO_ALLOCATION_ERR:
1252 a->nonew = (flg ? -2 : 0);
1253 break;
1254 case MAT_UNUSED_NONZERO_LOCATION_ERR:
1255 a->nounused = (flg ? -1 : 0);
1256 break;
1257 case MAT_NEW_DIAGONALS:
1258 case MAT_IGNORE_OFF_PROC_ENTRIES:
1259 case MAT_USE_HASH_TABLE:
1260 case MAT_SORTED_FULL:
1261 ierr = PetscInfo1(A,"Option %s ignored\n",MatOptions[op])PetscInfo_Private(__func__,A,"Option %s ignored\n",MatOptions
[op])
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1261,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1262 break;
1263 case MAT_SPD:
1264 case MAT_SYMMETRIC:
1265 case MAT_STRUCTURALLY_SYMMETRIC:
1266 case MAT_HERMITIAN:
1267 case MAT_SYMMETRY_ETERNAL:
1268 case MAT_SUBMAT_SINGLEIS:
1269 case MAT_STRUCTURE_ONLY:
1270 /* These options are handled directly by MatSetOption() */
1271 break;
1272 default:
1273 SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"unknown option %d",op)return PetscError(((MPI_Comm)0x44000001),1273,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,56,PETSC_ERROR_INITIAL,"unknown option %d",op)
;
1274 }
1275 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)
;
1276}
1277
1278/* used for both SeqBAIJ and SeqSBAIJ matrices */
1279PetscErrorCode MatGetRow_SeqBAIJ_private(Mat A,PetscInt row,PetscInt *nz,PetscInt **idx,PetscScalar **v,PetscInt *ai,PetscInt *aj,PetscScalar *aa)
1280{
1281 PetscErrorCode ierr;
1282 PetscInt itmp,i,j,k,M,bn,bp,*idx_i,bs,bs2;
1283 MatScalar *aa_i;
1284 PetscScalar *v_i;
1285
1286 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1286; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1287 bs = A->rmap->bs;
1288 bs2 = bs*bs;
1289 if (row < 0 || row >= A->rmap->N) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Row %D out of range", row)return PetscError(((MPI_Comm)0x44000001),1289,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Row %D out of range",row)
;
1290
1291 bn = row/bs; /* Block number */
1292 bp = row % bs; /* Block Position */
1293 M = ai[bn+1] - ai[bn];
1294 *nz = bs*M;
1295
1296 if (v) {
1297 *v = 0;
1298 if (*nz) {
1299 ierr = PetscMalloc1(*nz,v)PetscMallocA(1,PETSC_FALSE,1299,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(*nz)*sizeof(**(v)),(v))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1299,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1300 for (i=0; i<M; i++) { /* for each block in the block row */
1301 v_i = *v + i*bs;
1302 aa_i = aa + bs2*(ai[bn] + i);
1303 for (j=bp,k=0; j<bs2; j+=bs,k++) v_i[k] = aa_i[j];
1304 }
1305 }
1306 }
1307
1308 if (idx) {
1309 *idx = 0;
1310 if (*nz) {
1311 ierr = PetscMalloc1(*nz,idx)PetscMallocA(1,PETSC_FALSE,1311,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(*nz)*sizeof(**(idx)),(idx))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1311,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1312 for (i=0; i<M; i++) { /* for each block in the block row */
1313 idx_i = *idx + i*bs;
1314 itmp = bs*aj[ai[bn] + i];
1315 for (j=0; j<bs; j++) idx_i[j] = itmp++;
1316 }
1317 }
1318 }
1319 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)
;
1320}
1321
1322PetscErrorCode MatGetRow_SeqBAIJ(Mat A,PetscInt row,PetscInt *nz,PetscInt **idx,PetscScalar **v)
1323{
1324 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
1325 PetscErrorCode ierr;
1326
1327 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1327; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1328 ierr = MatGetRow_SeqBAIJ_private(A,row,nz,idx,v,a->i,a->j,a->a);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1328,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1329 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)
;
1330}
1331
1332PetscErrorCode MatRestoreRow_SeqBAIJ(Mat A,PetscInt row,PetscInt *nz,PetscInt **idx,PetscScalar **v)
1333{
1334 PetscErrorCode ierr;
1335
1336 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1336; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1337 if (idx) {ierr = PetscFree(*idx)((*PetscTrFree)((void*)(*idx),1337,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((*idx) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1337,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1338 if (v) {ierr = PetscFree(*v)((*PetscTrFree)((void*)(*v),1338,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((*v) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1338,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1339 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)
;
1340}
1341
1342PetscErrorCode MatTranspose_SeqBAIJ(Mat A,MatReuse reuse,Mat *B)
1343{
1344 Mat_SeqBAIJ *a=(Mat_SeqBAIJ*)A->data,*at;
1345 Mat C;
1346 PetscErrorCode ierr;
1347 PetscInt i,j,k,*aj=a->j,*ai=a->i,bs=A->rmap->bs,mbs=a->mbs,nbs=a->nbs,*atfill;
1348 PetscInt bs2=a->bs2,*ati,*atj,anzj,kr;
1349 MatScalar *ata,*aa=a->a;
1350
1351 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1351; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1352 ierr = PetscCalloc1(1+nbs,&atfill)PetscMallocA(1,PETSC_TRUE,1352,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(1+nbs)*sizeof(**(&atfill)),(&atfill))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1352,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1353 if (reuse == MAT_INITIAL_MATRIX || reuse == MAT_INPLACE_MATRIX) {
1354 for (i=0; i<ai[mbs]; i++) atfill[aj[i]] += 1; /* count num of non-zeros in row aj[i] */
1355
1356 ierr = MatCreate(PetscObjectComm((PetscObject)A),&C);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1356,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1357 ierr = MatSetSizes(C,A->cmap->n,A->rmap->N,A->cmap->n,A->rmap->N);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1357,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1358 ierr = MatSetType(C,((PetscObject)A)->type_name);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1358,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1359 ierr = MatSeqBAIJSetPreallocation(C,bs,0,atfill);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1359,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1360
1361 at = (Mat_SeqBAIJ*)C->data;
1362 ati = at->i;
1363 for (i=0; i<nbs; i++) at->ilen[i] = at->imax[i] = ati[i+1] - ati[i];
1364 } else {
1365 C = *B;
1366 at = (Mat_SeqBAIJ*)C->data;
1367 ati = at->i;
1368 }
1369
1370 atj = at->j;
1371 ata = at->a;
1372
1373 /* Copy ati into atfill so we have locations of the next free space in atj */
1374 ierr = PetscArraycpy(atfill,ati,nbs)((sizeof(*(atfill)) != sizeof(*(ati))) || PetscMemcpy(atfill,
ati,(nbs)*sizeof(*(atfill))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1374,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1375
1376 /* Walk through A row-wise and mark nonzero entries of A^T. */
1377 for (i=0; i<mbs; i++) {
1378 anzj = ai[i+1] - ai[i];
1379 for (j=0; j<anzj; j++) {
1380 atj[atfill[*aj]] = i;
1381 for (kr=0; kr<bs; kr++) {
1382 for (k=0; k<bs; k++) {
1383 ata[bs2*atfill[*aj]+k*bs+kr] = *aa++;
1384 }
1385 }
1386 atfill[*aj++] += 1;
1387 }
1388 }
1389 ierr = MatAssemblyBegin(C,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1389,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1390 ierr = MatAssemblyEnd(C,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1390,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1391
1392 /* Clean up temporary space and complete requests. */
1393 ierr = PetscFree(atfill)((*PetscTrFree)((void*)(atfill),1393,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((atfill) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1393,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1394
1395 if (reuse == MAT_INITIAL_MATRIX || reuse == MAT_REUSE_MATRIX) {
1396 ierr = MatSetBlockSizes(C,PetscAbs(A->cmap->bs)(((A->cmap->bs) >= 0) ? (A->cmap->bs) : (-(A->
cmap->bs)))
,PetscAbs(A->rmap->bs)(((A->rmap->bs) >= 0) ? (A->rmap->bs) : (-(A->
rmap->bs)))
);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1396,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1397 *B = C;
1398 } else {
1399 ierr = MatHeaderMerge(A,&C);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1399,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1400 }
1401 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)
;
1402}
1403
1404PetscErrorCode MatIsTranspose_SeqBAIJ(Mat A,Mat B,PetscReal tol,PetscBool *f)
1405{
1406 PetscErrorCode ierr;
1407 Mat Btrans;
1408
1409 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1409; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1410 *f = PETSC_FALSE;
1411 ierr = MatTranspose_SeqBAIJ(A,MAT_INITIAL_MATRIX,&Btrans);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1411,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1412 ierr = MatEqual_SeqBAIJ(B,Btrans,f);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1412,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1413 ierr = MatDestroy(&Btrans);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1413,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1414 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)
;
1415}
1416
1417static PetscErrorCode MatView_SeqBAIJ_Binary(Mat A,PetscViewer viewer)
1418{
1419 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
1420 PetscErrorCode ierr;
1421 PetscInt i,*col_lens,bs = A->rmap->bs,count,*jj,j,k,l,bs2=a->bs2;
1422 int fd;
1423 PetscScalar *aa;
1424 FILE *file;
1425
1426 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1426; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1427 ierr = PetscViewerBinaryGetDescriptor(viewer,&fd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1427,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1428 ierr = PetscMalloc1(4+A->rmap->N,&col_lens)PetscMallocA(1,PETSC_FALSE,1428,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(4+A->rmap->N)*sizeof(**(&col_lens)),(&
col_lens))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1428,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1429 col_lens[0] = MAT_FILE_CLASSID1211216;
1430
1431 col_lens[1] = A->rmap->N;
1432 col_lens[2] = A->cmap->n;
1433 col_lens[3] = a->nz*bs2;
1434
1435 /* store lengths of each row and write (including header) to file */
1436 count = 0;
1437 for (i=0; i<a->mbs; i++) {
1438 for (j=0; j<bs; j++) {
1439 col_lens[4+count++] = bs*(a->i[i+1] - a->i[i]);
1440 }
1441 }
1442 ierr = PetscBinaryWrite(fd,col_lens,4+A->rmap->N,PETSC_INT,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1442,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1443 ierr = PetscFree(col_lens)((*PetscTrFree)((void*)(col_lens),1443,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((col_lens) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1443,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1444
1445 /* store column indices (zero start index) */
1446 ierr = PetscMalloc1((a->nz+1)*bs2,&jj)PetscMallocA(1,PETSC_FALSE,1446,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)((a->nz+1)*bs2)*sizeof(**(&jj)),(&jj))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1446,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1447 count = 0;
1448 for (i=0; i<a->mbs; i++) {
1449 for (j=0; j<bs; j++) {
1450 for (k=a->i[i]; k<a->i[i+1]; k++) {
1451 for (l=0; l<bs; l++) {
1452 jj[count++] = bs*a->j[k] + l;
1453 }
1454 }
1455 }
1456 }
1457 ierr = PetscBinaryWrite(fd,jj,bs2*a->nz,PETSC_INT,PETSC_FALSE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1457,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1458 ierr = PetscFree(jj)((*PetscTrFree)((void*)(jj),1458,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((jj) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1458,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1459
1460 /* store nonzero values */
1461 ierr = PetscMalloc1((a->nz+1)*bs2,&aa)PetscMallocA(1,PETSC_FALSE,1461,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)((a->nz+1)*bs2)*sizeof(**(&aa)),(&aa))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1461,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1462 count = 0;
1463 for (i=0; i<a->mbs; i++) {
1464 for (j=0; j<bs; j++) {
1465 for (k=a->i[i]; k<a->i[i+1]; k++) {
1466 for (l=0; l<bs; l++) {
1467 aa[count++] = a->a[bs2*k + l*bs + j];
1468 }
1469 }
1470 }
1471 }
1472 ierr = PetscBinaryWrite(fd,aa,bs2*a->nz,PETSC_SCALARPETSC_DOUBLE,PETSC_FALSE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1472,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1473 ierr = PetscFree(aa)((*PetscTrFree)((void*)(aa),1473,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((aa) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1473,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1474
1475 ierr = PetscViewerBinaryGetInfoPointer(viewer,&file);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1475,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1476 if (file) {
1477 fprintf(file,"-matload_block_size %d\n",(int)A->rmap->bs);
1478 }
1479 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)
;
1480}
1481
1482static PetscErrorCode MatView_SeqBAIJ_ASCII_structonly(Mat A,PetscViewer viewer)
1483{
1484 PetscErrorCode ierr;
1485 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
1486 PetscInt i,bs = A->rmap->bs,k;
1487
1488 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1488; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1489 ierr = PetscViewerASCIIUseTabs(viewer,PETSC_FALSE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1489,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1490 for (i=0; i<a->mbs; i++) {
1491 ierr = PetscViewerASCIIPrintf(viewer,"row %D-%D:",i*bs,i*bs+bs-1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1491,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1492 for (k=a->i[i]; k<a->i[i+1]; k++) {
1493 ierr = PetscViewerASCIIPrintf(viewer," (%D-%D) ",bs*a->j[k],bs*a->j[k]+bs-1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1493,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1494 }
1495 ierr = PetscViewerASCIIPrintf(viewer,"\n");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1495,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1496 }
1497 ierr = PetscViewerASCIIUseTabs(viewer,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1497,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1498 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)
;
1499}
1500
1501static PetscErrorCode MatView_SeqBAIJ_ASCII(Mat A,PetscViewer viewer)
1502{
1503 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
1504 PetscErrorCode ierr;
1505 PetscInt i,j,bs = A->rmap->bs,k,l,bs2=a->bs2;
1506 PetscViewerFormat format;
1507
1508 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1508; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1509 if (A->structure_only) {
1510 ierr = MatView_SeqBAIJ_ASCII_structonly(A,viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1510,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1511 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)
;
1512 }
1513
1514 ierr = PetscViewerGetFormat(viewer,&format);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1514,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1515 if (format == PETSC_VIEWER_ASCII_INFO || format == PETSC_VIEWER_ASCII_INFO_DETAIL) {
1516 ierr = PetscViewerASCIIPrintf(viewer," block size is %D\n",bs);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1516,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1517 } else if (format == PETSC_VIEWER_ASCII_MATLAB) {
1518 const char *matname;
1519 Mat aij;
1520 ierr = MatConvert(A,MATSEQAIJ"seqaij",MAT_INITIAL_MATRIX,&aij);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1520,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1521 ierr = PetscObjectGetName((PetscObject)A,&matname);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1521,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1522 ierr = PetscObjectSetName((PetscObject)aij,matname);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1522,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1523 ierr = MatView(aij,viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1523,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1524 ierr = MatDestroy(&aij);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1524,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1525 } else if (format == PETSC_VIEWER_ASCII_FACTOR_INFO) {
1526 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)
;
1527 } else if (format == PETSC_VIEWER_ASCII_COMMON) {
1528 ierr = PetscViewerASCIIUseTabs(viewer,PETSC_FALSE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1528,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1529 for (i=0; i<a->mbs; i++) {
1530 for (j=0; j<bs; j++) {
1531 ierr = PetscViewerASCIIPrintf(viewer,"row %D:",i*bs+j);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1531,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1532 for (k=a->i[i]; k<a->i[i+1]; k++) {
1533 for (l=0; l<bs; l++) {
1534#if defined(PETSC_USE_COMPLEX)
1535 if (PetscImaginaryPart(a->a[bs2*k + l*bs + j])((PetscReal)0.) > 0.0 && PetscRealPart(a->a[bs2*k + l*bs + j])(a->a[bs2*k + l*bs + j]) != 0.0) {
1536 ierr = PetscViewerASCIIPrintf(viewer," (%D, %g + %gi) ",bs*a->j[k]+l,
1537 (double)PetscRealPart(a->a[bs2*k + l*bs + j])(a->a[bs2*k + l*bs + j]),(double)PetscImaginaryPart(a->a[bs2*k + l*bs + j])((PetscReal)0.));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1537,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1538 } else if (PetscImaginaryPart(a->a[bs2*k + l*bs + j])((PetscReal)0.) < 0.0 && PetscRealPart(a->a[bs2*k + l*bs + j])(a->a[bs2*k + l*bs + j]) != 0.0) {
1539 ierr = PetscViewerASCIIPrintf(viewer," (%D, %g - %gi) ",bs*a->j[k]+l,
1540 (double)PetscRealPart(a->a[bs2*k + l*bs + j])(a->a[bs2*k + l*bs + j]),-(double)PetscImaginaryPart(a->a[bs2*k + l*bs + j])((PetscReal)0.));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1540,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1541 } else if (PetscRealPart(a->a[bs2*k + l*bs + j])(a->a[bs2*k + l*bs + j]) != 0.0) {
1542 ierr = PetscViewerASCIIPrintf(viewer," (%D, %g) ",bs*a->j[k]+l,(double)PetscRealPart(a->a[bs2*k + l*bs + j])(a->a[bs2*k + l*bs + j]));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1542,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1543 }
1544#else
1545 if (a->a[bs2*k + l*bs + j] != 0.0) {
1546 ierr = PetscViewerASCIIPrintf(viewer," (%D, %g) ",bs*a->j[k]+l,(double)a->a[bs2*k + l*bs + j]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1546,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1547 }
1548#endif
1549 }
1550 }
1551 ierr = PetscViewerASCIIPrintf(viewer,"\n");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1551,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1552 }
1553 }
1554 ierr = PetscViewerASCIIUseTabs(viewer,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1554,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1555 } else {
1556 ierr = PetscViewerASCIIUseTabs(viewer,PETSC_FALSE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1556,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1557 for (i=0; i<a->mbs; i++) {
1558 for (j=0; j<bs; j++) {
1559 ierr = PetscViewerASCIIPrintf(viewer,"row %D:",i*bs+j);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1559,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1560 for (k=a->i[i]; k<a->i[i+1]; k++) {
1561 for (l=0; l<bs; l++) {
1562#if defined(PETSC_USE_COMPLEX)
1563 if (PetscImaginaryPart(a->a[bs2*k + l*bs + j])((PetscReal)0.) > 0.0) {
1564 ierr = PetscViewerASCIIPrintf(viewer," (%D, %g + %g i) ",bs*a->j[k]+l,
1565 (double)PetscRealPart(a->a[bs2*k + l*bs + j])(a->a[bs2*k + l*bs + j]),(double)PetscImaginaryPart(a->a[bs2*k + l*bs + j])((PetscReal)0.));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1565,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1566 } else if (PetscImaginaryPart(a->a[bs2*k + l*bs + j])((PetscReal)0.) < 0.0) {
1567 ierr = PetscViewerASCIIPrintf(viewer," (%D, %g - %g i) ",bs*a->j[k]+l,
1568 (double)PetscRealPart(a->a[bs2*k + l*bs + j])(a->a[bs2*k + l*bs + j]),-(double)PetscImaginaryPart(a->a[bs2*k + l*bs + j])((PetscReal)0.));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1568,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1569 } else {
1570 ierr = PetscViewerASCIIPrintf(viewer," (%D, %g) ",bs*a->j[k]+l,(double)PetscRealPart(a->a[bs2*k + l*bs + j])(a->a[bs2*k + l*bs + j]));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1570,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1571 }
1572#else
1573 ierr = PetscViewerASCIIPrintf(viewer," (%D, %g) ",bs*a->j[k]+l,(double)a->a[bs2*k + l*bs + j]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1573,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1574#endif
1575 }
1576 }
1577 ierr = PetscViewerASCIIPrintf(viewer,"\n");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1577,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1578 }
1579 }
1580 ierr = PetscViewerASCIIUseTabs(viewer,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1580,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1581 }
1582 ierr = PetscViewerFlush(viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1582,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1583 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)
;
1584}
1585
1586#include <petscdraw.h>
1587static PetscErrorCode MatView_SeqBAIJ_Draw_Zoom(PetscDraw draw,void *Aa)
1588{
1589 Mat A = (Mat) Aa;
1590 Mat_SeqBAIJ *a=(Mat_SeqBAIJ*)A->data;
1591 PetscErrorCode ierr;
1592 PetscInt row,i,j,k,l,mbs=a->mbs,color,bs=A->rmap->bs,bs2=a->bs2;
1593 PetscReal xl,yl,xr,yr,x_l,x_r,y_l,y_r;
1594 MatScalar *aa;
1595 PetscViewer viewer;
1596 PetscViewerFormat format;
1597
1598 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1598; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1599 ierr = PetscObjectQuery((PetscObject)A,"Zoomviewer",(PetscObject*)&viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1599,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1600 ierr = PetscViewerGetFormat(viewer,&format);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1600,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1601 ierr = PetscDrawGetCoordinates(draw,&xl,&yl,&xr,&yr);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1601,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1602
1603 /* loop over matrix elements drawing boxes */
1604
1605 if (format != PETSC_VIEWER_DRAW_CONTOUR) {
1606 ierr = PetscDrawCollectiveBegin(draw)0; do { PetscErrorCode _Petsc_ierr; jmp_buf _Petsc_jmpbuf; volatile
PetscXIOErrorHandler _Petsc_xioerrhdl = ((void*)0); PetscBool
_Petsc_isdrawx, _Petsc_xioerr, _Petsc_xioerr_local = PETSC_FALSE
; _Petsc_ierr = PetscObjectTypeCompare((PetscObject)(draw),"x"
,&_Petsc_isdrawx);do {if (__builtin_expect(!!(_Petsc_ierr
),0)) return PetscError(((MPI_Comm)0x44000001),1606,__func__,
"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",_Petsc_ierr
,PETSC_ERROR_REPEAT," ");} while (0); if (_Petsc_isdrawx) { _Petsc_ierr
= PetscMemcpy(&_Petsc_jmpbuf,&PetscXIOErrorHandlerJumpBuf
,sizeof(_Petsc_jmpbuf));do {if (__builtin_expect(!!(_Petsc_ierr
),0)) return PetscError(((MPI_Comm)0x44000001),1606,__func__,
"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",_Petsc_ierr
,PETSC_ERROR_REPEAT," ");} while (0); _Petsc_xioerrhdl = PetscSetXIOErrorHandler
(PetscXIOErrorHandlerJump); if (_setjmp (PetscXIOErrorHandlerJumpBuf
)) {_Petsc_xioerr_local = PETSC_TRUE; do {_Petsc_ierr = 0; if
(_Petsc_isdrawx) { (void)PetscSetXIOErrorHandler(_Petsc_xioerrhdl
); _Petsc_ierr = PetscMemcpy(&PetscXIOErrorHandlerJumpBuf
,&_Petsc_jmpbuf,sizeof(PetscXIOErrorHandlerJumpBuf));do {
if (__builtin_expect(!!(_Petsc_ierr),0)) return PetscError(((
MPI_Comm)0x44000001),1606,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (0); _Petsc_ierr
= ((petsc_allreduce_ct += PetscMPIParallelComm((PetscObjectComm
((PetscObject)(draw)))),0) || MPI_Allreduce((&_Petsc_xioerr_local
),(&_Petsc_xioerr),(1),(MPIU_BOOL),((MPI_Op)(0x58000007))
,(PetscObjectComm((PetscObject)(draw)))));do {if (__builtin_expect
(!!(_Petsc_ierr),0)) return PetscError(((MPI_Comm)0x44000001)
,1606,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (0); if (_Petsc_xioerr
) { _Petsc_ierr = PetscDrawSetType((draw),"null");do {if (__builtin_expect
(!!(_Petsc_ierr),0)) return PetscError(((MPI_Comm)0x44000001)
,1606,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (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); } } } while(0);do {if (__builtin_expect
(!!(_Petsc_ierr),0)) return PetscError(((MPI_Comm)0x44000001)
,1606,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (0);} } do {} while
(0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1606,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1607 /* Blue for negative, Cyan for zero and Red for positive */
1608 color = PETSC_DRAW_BLUE5;
1609 for (i=0,row=0; i<mbs; i++,row+=bs) {
1610 for (j=a->i[i]; j<a->i[i+1]; j++) {
1611 y_l = A->rmap->N - row - 1.0; y_r = y_l + 1.0;
1612 x_l = a->j[j]*bs; x_r = x_l + 1.0;
1613 aa = a->a + j*bs2;
1614 for (k=0; k<bs; k++) {
1615 for (l=0; l<bs; l++) {
1616 if (PetscRealPart(*aa++)(*aa++) >= 0.) continue;
1617 ierr = PetscDrawRectangle(draw,x_l+k,y_l-l,x_r+k,y_r-l,color,color,color,color);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1617,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1618 }
1619 }
1620 }
1621 }
1622 color = PETSC_DRAW_CYAN4;
1623 for (i=0,row=0; i<mbs; i++,row+=bs) {
1624 for (j=a->i[i]; j<a->i[i+1]; j++) {
1625 y_l = A->rmap->N - row - 1.0; y_r = y_l + 1.0;
1626 x_l = a->j[j]*bs; x_r = x_l + 1.0;
1627 aa = a->a + j*bs2;
1628 for (k=0; k<bs; k++) {
1629 for (l=0; l<bs; l++) {
1630 if (PetscRealPart(*aa++)(*aa++) != 0.) continue;
1631 ierr = PetscDrawRectangle(draw,x_l+k,y_l-l,x_r+k,y_r-l,color,color,color,color);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1631,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1632 }
1633 }
1634 }
1635 }
1636 color = PETSC_DRAW_RED2;
1637 for (i=0,row=0; i<mbs; i++,row+=bs) {
1638 for (j=a->i[i]; j<a->i[i+1]; j++) {
1639 y_l = A->rmap->N - row - 1.0; y_r = y_l + 1.0;
1640 x_l = a->j[j]*bs; x_r = x_l + 1.0;
1641 aa = a->a + j*bs2;
1642 for (k=0; k<bs; k++) {
1643 for (l=0; l<bs; l++) {
1644 if (PetscRealPart(*aa++)(*aa++) <= 0.) continue;
1645 ierr = PetscDrawRectangle(draw,x_l+k,y_l-l,x_r+k,y_r-l,color,color,color,color);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1645,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1646 }
1647 }
1648 }
1649 }
1650 ierr = PetscDrawCollectiveEnd(draw)0; if (_Petsc_isdrawx) { (void)PetscSetXIOErrorHandler(_Petsc_xioerrhdl
); _Petsc_ierr = PetscMemcpy(&PetscXIOErrorHandlerJumpBuf
,&_Petsc_jmpbuf,sizeof(PetscXIOErrorHandlerJumpBuf));do {
if (__builtin_expect(!!(_Petsc_ierr),0)) return PetscError(((
MPI_Comm)0x44000001),1650,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (0); _Petsc_ierr
= ((petsc_allreduce_ct += PetscMPIParallelComm((PetscObjectComm
((PetscObject)(draw)))),0) || MPI_Allreduce((&_Petsc_xioerr_local
),(&_Petsc_xioerr),(1),(MPIU_BOOL),((MPI_Op)(0x58000007))
,(PetscObjectComm((PetscObject)(draw)))));do {if (__builtin_expect
(!!(_Petsc_ierr),0)) return PetscError(((MPI_Comm)0x44000001)
,1650,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (0); if (_Petsc_xioerr
) { _Petsc_ierr = PetscDrawSetType((draw),"null");do {if (__builtin_expect
(!!(_Petsc_ierr),0)) return PetscError(((MPI_Comm)0x44000001)
,1650,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (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); } } } while(0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1650,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1651 } else {
1652 /* use contour shading to indicate magnitude of values */
1653 /* first determine max of all nonzero values */
1654 PetscReal minv = 0.0, maxv = 0.0;
1655 PetscDraw popup;
1656
1657 for (i=0; i<a->nz*a->bs2; i++) {
1658 if (PetscAbsScalar(a->a[i]) > maxv) maxv = PetscAbsScalar(a->a[i]);
1659 }
1660 if (minv >= maxv) maxv = minv + PETSC_SMALL1.e-10;
1661 ierr = PetscDrawGetPopup(draw,&popup);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1661,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1662 ierr = PetscDrawScalePopup(popup,0.0,maxv);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1662,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1663
1664 ierr = PetscDrawCollectiveBegin(draw)0; do { PetscErrorCode _Petsc_ierr; jmp_buf _Petsc_jmpbuf; volatile
PetscXIOErrorHandler _Petsc_xioerrhdl = ((void*)0); PetscBool
_Petsc_isdrawx, _Petsc_xioerr, _Petsc_xioerr_local = PETSC_FALSE
; _Petsc_ierr = PetscObjectTypeCompare((PetscObject)(draw),"x"
,&_Petsc_isdrawx);do {if (__builtin_expect(!!(_Petsc_ierr
),0)) return PetscError(((MPI_Comm)0x44000001),1664,__func__,
"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",_Petsc_ierr
,PETSC_ERROR_REPEAT," ");} while (0); if (_Petsc_isdrawx) { _Petsc_ierr
= PetscMemcpy(&_Petsc_jmpbuf,&PetscXIOErrorHandlerJumpBuf
,sizeof(_Petsc_jmpbuf));do {if (__builtin_expect(!!(_Petsc_ierr
),0)) return PetscError(((MPI_Comm)0x44000001),1664,__func__,
"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",_Petsc_ierr
,PETSC_ERROR_REPEAT," ");} while (0); _Petsc_xioerrhdl = PetscSetXIOErrorHandler
(PetscXIOErrorHandlerJump); if (_setjmp (PetscXIOErrorHandlerJumpBuf
)) {_Petsc_xioerr_local = PETSC_TRUE; do {_Petsc_ierr = 0; if
(_Petsc_isdrawx) { (void)PetscSetXIOErrorHandler(_Petsc_xioerrhdl
); _Petsc_ierr = PetscMemcpy(&PetscXIOErrorHandlerJumpBuf
,&_Petsc_jmpbuf,sizeof(PetscXIOErrorHandlerJumpBuf));do {
if (__builtin_expect(!!(_Petsc_ierr),0)) return PetscError(((
MPI_Comm)0x44000001),1664,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (0); _Petsc_ierr
= ((petsc_allreduce_ct += PetscMPIParallelComm((PetscObjectComm
((PetscObject)(draw)))),0) || MPI_Allreduce((&_Petsc_xioerr_local
),(&_Petsc_xioerr),(1),(MPIU_BOOL),((MPI_Op)(0x58000007))
,(PetscObjectComm((PetscObject)(draw)))));do {if (__builtin_expect
(!!(_Petsc_ierr),0)) return PetscError(((MPI_Comm)0x44000001)
,1664,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (0); if (_Petsc_xioerr
) { _Petsc_ierr = PetscDrawSetType((draw),"null");do {if (__builtin_expect
(!!(_Petsc_ierr),0)) return PetscError(((MPI_Comm)0x44000001)
,1664,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (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); } } } while(0);do {if (__builtin_expect
(!!(_Petsc_ierr),0)) return PetscError(((MPI_Comm)0x44000001)
,1664,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (0);} } do {} while
(0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1664,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1665 for (i=0,row=0; i<mbs; i++,row+=bs) {
1666 for (j=a->i[i]; j<a->i[i+1]; j++) {
1667 y_l = A->rmap->N - row - 1.0; y_r = y_l + 1.0;
1668 x_l = a->j[j]*bs; x_r = x_l + 1.0;
1669 aa = a->a + j*bs2;
1670 for (k=0; k<bs; k++) {
1671 for (l=0; l<bs; l++) {
1672 MatScalar v = *aa++;
1673 color = PetscDrawRealToColor(PetscAbsScalar(v),minv,maxv);
1674 ierr = PetscDrawRectangle(draw,x_l+k,y_l-l,x_r+k,y_r-l,color,color,color,color);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1674,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1675 }
1676 }
1677 }
1678 }
1679 ierr = PetscDrawCollectiveEnd(draw)0; if (_Petsc_isdrawx) { (void)PetscSetXIOErrorHandler(_Petsc_xioerrhdl
); _Petsc_ierr = PetscMemcpy(&PetscXIOErrorHandlerJumpBuf
,&_Petsc_jmpbuf,sizeof(PetscXIOErrorHandlerJumpBuf));do {
if (__builtin_expect(!!(_Petsc_ierr),0)) return PetscError(((
MPI_Comm)0x44000001),1679,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (0); _Petsc_ierr
= ((petsc_allreduce_ct += PetscMPIParallelComm((PetscObjectComm
((PetscObject)(draw)))),0) || MPI_Allreduce((&_Petsc_xioerr_local
),(&_Petsc_xioerr),(1),(MPIU_BOOL),((MPI_Op)(0x58000007))
,(PetscObjectComm((PetscObject)(draw)))));do {if (__builtin_expect
(!!(_Petsc_ierr),0)) return PetscError(((MPI_Comm)0x44000001)
,1679,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (0); if (_Petsc_xioerr
) { _Petsc_ierr = PetscDrawSetType((draw),"null");do {if (__builtin_expect
(!!(_Petsc_ierr),0)) return PetscError(((MPI_Comm)0x44000001)
,1679,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_Petsc_ierr,PETSC_ERROR_REPEAT," ");} while (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); } } } while(0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1679,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1680 }
1681 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)
;
1682}
1683
1684static PetscErrorCode MatView_SeqBAIJ_Draw(Mat A,PetscViewer viewer)
1685{
1686 PetscErrorCode ierr;
1687 PetscReal xl,yl,xr,yr,w,h;
1688 PetscDraw draw;
1689 PetscBool isnull;
1690
1691 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1691; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1692 ierr = PetscViewerDrawGetDraw(viewer,0,&draw);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1692,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1693 ierr = PetscDrawIsNull(draw,&isnull);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1693,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1694 if (isnull) 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)
;
1695
1696 xr = A->cmap->n; yr = A->rmap->N; h = yr/10.0; w = xr/10.0;
1697 xr += w; yr += h; xl = -w; yl = -h;
1698 ierr = PetscDrawSetCoordinates(draw,xl,yl,xr,yr);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1698,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1699 ierr = PetscObjectCompose((PetscObject)A,"Zoomviewer",(PetscObject)viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1699,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1700 ierr = PetscDrawZoom(draw,MatView_SeqBAIJ_Draw_Zoom,A);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1700,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1701 ierr = PetscObjectCompose((PetscObject)A,"Zoomviewer",NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1701,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1702 ierr = PetscDrawSave(draw);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1702,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1703 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)
;
1704}
1705
1706PetscErrorCode MatView_SeqBAIJ(Mat A,PetscViewer viewer)
1707{
1708 PetscErrorCode ierr;
1709 PetscBool iascii,isbinary,isdraw;
1710
1711 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1711; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1712 ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII"ascii",&iascii);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1712,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1713 ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERBINARY"binary",&isbinary);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1713,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1714 ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERDRAW"draw",&isdraw);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1714,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1715 if (iascii) {
1716 ierr = MatView_SeqBAIJ_ASCII(A,viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1716,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1717 } else if (isbinary) {
1718 ierr = MatView_SeqBAIJ_Binary(A,viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1718,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1719 } else if (isdraw) {
1720 ierr = MatView_SeqBAIJ_Draw(A,viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1720,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1721 } else {
1722 Mat B;
1723 ierr = MatConvert(A,MATSEQAIJ"seqaij",MAT_INITIAL_MATRIX,&B);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1723,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1724 ierr = MatView(B,viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1724,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1725 ierr = MatDestroy(&B);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1725,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1726 }
1727 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)
;
1728}
1729
1730
1731PetscErrorCode MatGetValues_SeqBAIJ(Mat A,PetscInt m,const PetscInt im[],PetscInt n,const PetscInt in[],PetscScalar v[])
1732{
1733 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
1734 PetscInt *rp,k,low,high,t,row,nrow,i,col,l,*aj = a->j;
1735 PetscInt *ai = a->i,*ailen = a->ilen;
1736 PetscInt brow,bcol,ridx,cidx,bs=A->rmap->bs,bs2=a->bs2;
1737 MatScalar *ap,*aa = a->a;
1738
1739 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1739; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1740 for (k=0; k<m; k++) { /* loop over rows */
1741 row = im[k]; brow = row/bs;
1742 if (row < 0) {v += n; continue;} /* SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Negative row"); */
1743 if (row >= A->rmap->N) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Row %D too large", row)return PetscError(((MPI_Comm)0x44000001),1743,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Row %D too large",row)
;
1744 rp = aj + ai[brow]; ap = aa + bs2*ai[brow];
1745 nrow = ailen[brow];
1746 for (l=0; l<n; l++) { /* loop over columns */
1747 if (in[l] < 0) {v++; continue;} /* SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Negative column"); */
1748 if (in[l] >= A->cmap->n) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Column %D too large", in[l])return PetscError(((MPI_Comm)0x44000001),1748,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Column %D too large",in[l])
;
1749 col = in[l];
1750 bcol = col/bs;
1751 cidx = col%bs;
1752 ridx = row%bs;
1753 high = nrow;
1754 low = 0; /* assume unsorted */
1755 while (high-low > 5) {
1756 t = (low+high)/2;
1757 if (rp[t] > bcol) high = t;
1758 else low = t;
1759 }
1760 for (i=low; i<high; i++) {
1761 if (rp[i] > bcol) break;
1762 if (rp[i] == bcol) {
1763 *v++ = ap[bs2*i+bs*cidx+ridx];
1764 goto finished;
1765 }
1766 }
1767 *v++ = 0.0;
1768finished:;
1769 }
1770 }
1771 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)
;
1772}
1773
1774PetscErrorCode MatSetValuesBlocked_SeqBAIJ(Mat A,PetscInt m,const PetscInt im[],PetscInt n,const PetscInt in[],const PetscScalar v[],InsertMode is)
1775{
1776 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
1777 PetscInt *rp,k,low,high,t,ii,jj,row,nrow,i,col,l,rmax,N,lastcol = -1;
1778 PetscInt *imax=a->imax,*ai=a->i,*ailen=a->ilen;
1779 PetscErrorCode ierr;
1780 PetscInt *aj =a->j,nonew=a->nonew,bs2=a->bs2,bs=A->rmap->bs,stepval;
1781 PetscBool roworiented=a->roworiented;
1782 const PetscScalar *value = v;
1783 MatScalar *ap=NULL((void*)0),*aa = a->a,*bap;
1784
1785 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1785; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1786 if (roworiented) {
1
Assuming 'roworiented' is 0
2
Taking false branch
1787 stepval = (n-1)*bs;
1788 } else {
1789 stepval = (m-1)*bs;
1790 }
1791 for (k=0; k<m; k++) { /* loop over added rows */
3
Assuming 'k' is < 'm'
4
Loop condition is true. Entering loop body
29
Assuming 'k' is < 'm'
30
Loop condition is true. Entering loop body
1792 row = im[k];
1793 if (row < 0) continue;
5
Assuming 'row' is >= 0
6
Taking false branch
31
Assuming 'row' is >= 0
32
Taking false branch
1794#if defined(PETSC_USE_DEBUG1)
1795 if (row >= a->mbs) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Block row index too large %D max %D",row,a->mbs-1)return PetscError(((MPI_Comm)0x44000001),1795,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Block row index too large %D max %D"
,row,a->mbs-1)
;
7
Taking false branch
33
Taking false branch
1796#endif
1797 rp = aj + ai[row];
1798 if (!A->structure_only) ap = aa + bs2*ai[row];
8
Assuming the condition is false
9
Taking false branch
34
Taking false branch
1799 rmax = imax[row];
1800 nrow = ailen[row];
1801 low = 0;
1802 high = nrow;
1803 for (l=0; l<n; l++) { /* loop over added columns */
10
Assuming 'l' is < 'n'
11
Loop condition is true. Entering loop body
27
Assuming 'l' is >= 'n'
28
Loop condition is false. Execution continues on line 1894
35
Loop condition is true. Entering loop body
1804 if (in[l] < 0) continue;
12
Assuming the condition is false
13
Taking false branch
36
Taking false branch
1805#if defined(PETSC_USE_DEBUG1)
1806 if (in[l] >= a->nbs) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Block column index too large %D max %D",in[l],a->nbs-1)return PetscError(((MPI_Comm)0x44000001),1806,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Block column index too large %D max %D"
,in[l],a->nbs-1)
;
14
Taking false branch
37
Taking false branch
1807#endif
1808 col = in[l];
1809 if (!A->structure_only) {
15
Taking false branch
38
Taking false branch
1810 if (roworiented) {
1811 value = v + (k*(stepval+bs) + l)*bs;
1812 } else {
1813 value = v + (l*(stepval+bs) + k)*bs;
1814 }
1815 }
1816 if (col <= lastcol) low = 0;
16
Taking false branch
39
Taking true branch
1817 else high = nrow;
1818 lastcol = col;
1819 while (high-low > 7) {
17
Assuming the condition is false
18
Loop condition is false. Execution continues on line 1824
40
Assuming the condition is false
41
Loop condition is false. Execution continues on line 1824
1820 t = (low+high)/2;
1821 if (rp[t] > col) high = t;
1822 else low = t;
1823 }
1824 for (i=low; i<high; i++) {
19
Assuming 'i' is >= 'high'
20
Loop condition is false. Execution continues on line 1863
42
Assuming 'i' is >= 'high'
43
Loop condition is false. Execution continues on line 1863
1825 if (rp[i] > col) break;
1826 if (rp[i] == col) {
1827 if (A->structure_only) goto noinsert2;
1828 bap = ap + bs2*i;
1829 if (roworiented) {
1830 if (is == ADD_VALUES) {
1831 for (ii=0; ii<bs; ii++,value+=stepval) {
1832 for (jj=ii; jj<bs2; jj+=bs) {
1833 bap[jj] += *value++;
1834 }
1835 }
1836 } else {
1837 for (ii=0; ii<bs; ii++,value+=stepval) {
1838 for (jj=ii; jj<bs2; jj+=bs) {
1839 bap[jj] = *value++;
1840 }
1841 }
1842 }
1843 } else {
1844 if (is == ADD_VALUES) {
1845 for (ii=0; ii<bs; ii++,value+=bs+stepval) {
1846 for (jj=0; jj<bs; jj++) {
1847 bap[jj] += value[jj];
1848 }
1849 bap += bs;
1850 }
1851 } else {
1852 for (ii=0; ii<bs; ii++,value+=bs+stepval) {
1853 for (jj=0; jj<bs; jj++) {
1854 bap[jj] = value[jj];
1855 }
1856 bap += bs;
1857 }
1858 }
1859 }
1860 goto noinsert2;
1861 }
1862 }
1863 if (nonew == 1) goto noinsert2;
21
Assuming 'nonew' is not equal to 1
22
Taking false branch
44
Taking false branch
1864 if (nonew == -1) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Inserting a new blocked index new nonzero block (%D, %D) in the matrix", row, col)return PetscError(((MPI_Comm)0x44000001),1864,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Inserting a new blocked index new nonzero block (%D, %D) in the matrix"
,row,col)
;
23
Assuming the condition is false
24
Taking false branch
45
Taking false branch
1865 if (A->structure_only) {
25
Taking true branch
46
Taking true branch
1866 MatSeqXAIJReallocateAIJ_structure_only(A,a->mbs,bs2,nrow,row,col,rmax,ai,aj,rp,imax,nonew,MatScalar)if (nrow >= rmax) { Mat_SeqAIJ *Ain = (Mat_SeqAIJ*)A->data
; PetscInt CHUNKSIZE = 15,new_nz = ai[a->mbs] + CHUNKSIZE,
len,*new_i=0,*new_j=0; if (nonew == -2) return PetscError(((MPI_Comm
)0x44000001),1866,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"New nonzero at (%D,%D) caused a malloc\nUse MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE) to turn off this check"
,row,col); ierr = PetscMallocA(1,PETSC_FALSE,1866,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(new_nz)*sizeof(**(&new_j)),(&new_j));do {if
(__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm)
0x44000001),1866,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); ierr = PetscMallocA
(1,PETSC_FALSE,1866,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(a->mbs+1)*sizeof(**(&new_i)),(&new_i));do
{if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1866,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); for (ii=0; ii<row
+1; ii++) {new_i[ii] = ai[ii];} for (ii=row+1; ii<a->mbs
+1; ii++) {new_i[ii] = ai[ii]+CHUNKSIZE;} ierr = ((sizeof(*(new_j
)) != sizeof(*(aj))) || PetscMemcpy(new_j,aj,(ai[row]+nrow)*sizeof
(*(new_j))));do {if (__builtin_expect(!!(ierr),0)) return PetscError
(((MPI_Comm)0x44000001),1866,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); len = (new_nz - CHUNKSIZE
- ai[row] - nrow); ierr = ((sizeof(*(new_j+ai[row]+nrow+CHUNKSIZE
)) != sizeof(*(aj+ai[row]+nrow))) || PetscMemcpy(new_j+ai[row
]+nrow+CHUNKSIZE,aj+ai[row]+nrow,(len)*sizeof(*(new_j+ai[row]
+nrow+CHUNKSIZE))));do {if (__builtin_expect(!!(ierr),0)) return
PetscError(((MPI_Comm)0x44000001),1866,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); ierr = MatSeqXAIJFreeAIJ
(A,&Ain->a,&Ain->j,&Ain->i);do {if (__builtin_expect
(!!(ierr),0)) return PetscError(((MPI_Comm)0x44000001),1866,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",ierr
,PETSC_ERROR_REPEAT," ");} while (0); Ain->a = ((void*)0);
ai = Ain->i = new_i; aj = Ain->j = new_j; Ain->singlemalloc
= PETSC_FALSE; Ain->free_a = PETSC_FALSE; rp = aj + ai[row
]; rmax = imax[row] = imax[row] + CHUNKSIZE; Ain->maxnz +=
bs2*CHUNKSIZE; Ain->reallocs++; }
;
1867 } else {
1868 MatSeqXAIJReallocateAIJ(A,a->mbs,bs2,nrow,row,col,rmax,aa,ai,aj,rp,ap,imax,nonew,MatScalar)if (nrow >= rmax) { Mat_SeqAIJ *Ain = (Mat_SeqAIJ*)A->data
; PetscInt CHUNKSIZE = 15,new_nz = ai[a->mbs] + CHUNKSIZE,
len,*new_i=0,*new_j=0; MatScalar *new_a; if (nonew == -2) return
PetscError(((MPI_Comm)0x44000001),1868,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"New nonzero at (%D,%D) caused a malloc\nUse MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE) to turn off this check"
,row,col); ierr = PetscMallocA(3,PETSC_FALSE,1868,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(bs2*new_nz)*sizeof(**(&new_a)),(&new_a),(size_t
)(new_nz)*sizeof(**(&new_j)),(&new_j),(size_t)(a->
mbs+1)*sizeof(**(&new_i)),(&new_i));do {if (__builtin_expect
(!!(ierr),0)) return PetscError(((MPI_Comm)0x44000001),1868,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",ierr
,PETSC_ERROR_REPEAT," ");} while (0); for (ii=0; ii<row+1;
ii++) {new_i[ii] = ai[ii];} for (ii=row+1; ii<a->mbs+1
; ii++) {new_i[ii] = ai[ii]+CHUNKSIZE;} ierr = ((sizeof(*(new_j
)) != sizeof(*(aj))) || PetscMemcpy(new_j,aj,(ai[row]+nrow)*sizeof
(*(new_j))));do {if (__builtin_expect(!!(ierr),0)) return PetscError
(((MPI_Comm)0x44000001),1868,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); len = (new_nz - CHUNKSIZE
- ai[row] - nrow); ierr = ((sizeof(*(new_j+ai[row]+nrow+CHUNKSIZE
)) != sizeof(*(aj+ai[row]+nrow))) || PetscMemcpy(new_j+ai[row
]+nrow+CHUNKSIZE,aj+ai[row]+nrow,(len)*sizeof(*(new_j+ai[row]
+nrow+CHUNKSIZE))));do {if (__builtin_expect(!!(ierr),0)) return
PetscError(((MPI_Comm)0x44000001),1868,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); ierr = ((sizeof(*(
new_a)) != sizeof(*(aa))) || PetscMemcpy(new_a,aa,(bs2*(ai[row
]+nrow))*sizeof(*(new_a))));do {if (__builtin_expect(!!(ierr)
,0)) return PetscError(((MPI_Comm)0x44000001),1868,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); ierr = PetscMemzero
(new_a+bs2*(ai[row]+nrow),(bs2*CHUNKSIZE)*sizeof(*(new_a+bs2*
(ai[row]+nrow))));do {if (__builtin_expect(!!(ierr),0)) return
PetscError(((MPI_Comm)0x44000001),1868,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); ierr = ((sizeof(*(
new_a+bs2*(ai[row]+nrow+CHUNKSIZE))) != sizeof(*(aa+bs2*(ai[row
]+nrow)))) || PetscMemcpy(new_a+bs2*(ai[row]+nrow+CHUNKSIZE),
aa+bs2*(ai[row]+nrow),(bs2*len)*sizeof(*(new_a+bs2*(ai[row]+nrow
+CHUNKSIZE)))));do {if (__builtin_expect(!!(ierr),0)) return PetscError
(((MPI_Comm)0x44000001),1868,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); ierr = MatSeqXAIJFreeAIJ
(A,&Ain->a,&Ain->j,&Ain->i);do {if (__builtin_expect
(!!(ierr),0)) return PetscError(((MPI_Comm)0x44000001),1868,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",ierr
,PETSC_ERROR_REPEAT," ");} while (0); aa = new_a; Ain->a =
(MatScalar*) new_a; ai = Ain->i = new_i; aj = Ain->j =
new_j; Ain->singlemalloc = PETSC_TRUE; rp = aj + ai[row];
ap = aa + bs2*ai[row]; rmax = imax[row] = imax[row] + CHUNKSIZE
; Ain->maxnz += bs2*CHUNKSIZE; Ain->reallocs++; }
;
1869 }
1870 N = nrow++ - 1; high++;
1871 /* shift up all the later entries in this row */
1872 ierr = PetscArraymove(rp+i+1,rp+i,N-i+1)((sizeof(*(rp+i+1)) != sizeof(*(rp+i))) || PetscMemmove(rp+i+
1,rp+i,(N-i+1)*sizeof(*(rp+i+1))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1872,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1873 rp[i] = col;
1874 if (!A->structure_only) {
26
Taking false branch
47
Assuming the condition is true
48
Taking true branch
1875 ierr = PetscArraymove(ap+bs2*(i+1),ap+bs2*i,bs2*(N-i+1))((sizeof(*(ap+bs2*(i+1))) != sizeof(*(ap+bs2*i))) || PetscMemmove
(ap+bs2*(i+1),ap+bs2*i,(bs2*(N-i+1))*sizeof(*(ap+bs2*(i+1))))
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1875,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1876 bap = ap + bs2*i;
1877 if (roworiented) {
49
Taking false branch
1878 for (ii=0; ii<bs; ii++,value+=stepval) {
1879 for (jj=ii; jj<bs2; jj+=bs) {
1880 bap[jj] = *value++;
1881 }
1882 }
1883 } else {
1884 for (ii=0; ii<bs; ii++,value+=stepval) {
50
Assuming 'ii' is < 'bs'
51
Loop condition is true. Entering loop body
1885 for (jj=0; jj<bs; jj++) {
52
Loop condition is true. Entering loop body
1886 *bap++ = *value++;
53
Null pointer value stored to 'bap'
54
Dereference of null pointer
1887 }
1888 }
1889 }
1890 }
1891noinsert2:;
1892 low = i;
1893 }
1894 ailen[row] = nrow;
1895 }
1896 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)
;
1897}
1898
1899PetscErrorCode MatAssemblyEnd_SeqBAIJ(Mat A,MatAssemblyType mode)
1900{
1901 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
1902 PetscInt fshift = 0,i,*ai = a->i,*aj = a->j,*imax = a->imax;
1903 PetscInt m = A->rmap->N,*ip,N,*ailen = a->ilen;
1904 PetscErrorCode ierr;
1905 PetscInt mbs = a->mbs,bs2 = a->bs2,rmax = 0;
1906 MatScalar *aa = a->a,*ap;
1907 PetscReal ratio=0.6;
1908
1909 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1909; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1910 if (mode == MAT_FLUSH_ASSEMBLY) 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)
;
1911
1912 if (m) rmax = ailen[0];
1913 for (i=1; i<mbs; i++) {
1914 /* move each row back by the amount of empty slots (fshift) before it*/
1915 fshift += imax[i-1] - ailen[i-1];
1916 rmax = PetscMax(rmax,ailen[i])(((rmax)<(ailen[i])) ? (ailen[i]) : (rmax));
1917 if (fshift) {
1918 ip = aj + ai[i];
1919 ap = aa + bs2*ai[i];
1920 N = ailen[i];
1921 ierr = PetscArraymove(ip-fshift,ip,N)((sizeof(*(ip-fshift)) != sizeof(*(ip))) || PetscMemmove(ip-fshift
,ip,(N)*sizeof(*(ip-fshift))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1921,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1922 if (!A->structure_only) {
1923 ierr = PetscArraymove(ap-bs2*fshift,ap,bs2*N)((sizeof(*(ap-bs2*fshift)) != sizeof(*(ap))) || PetscMemmove(
ap-bs2*fshift,ap,(bs2*N)*sizeof(*(ap-bs2*fshift))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1923,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1924 }
1925 }
1926 ai[i] = ai[i-1] + ailen[i-1];
1927 }
1928 if (mbs) {
1929 fshift += imax[mbs-1] - ailen[mbs-1];
1930 ai[mbs] = ai[mbs-1] + ailen[mbs-1];
1931 }
1932
1933 /* reset ilen and imax for each row */
1934 a->nonzerorowcnt = 0;
1935 if (A->structure_only) {
1936 ierr = PetscFree2(a->imax,a->ilen)PetscFreeA(2,1936,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,&(a->imax),&(a->ilen))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1936,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1937 } else { /* !A->structure_only */
1938 for (i=0; i<mbs; i++) {
1939 ailen[i] = imax[i] = ai[i+1] - ai[i];
1940 a->nonzerorowcnt += ((ai[i+1] - ai[i]) > 0);
1941 }
1942 }
1943 a->nz = ai[mbs];
1944
1945 /* diagonals may have moved, so kill the diagonal pointers */
1946 a->idiagvalid = PETSC_FALSE;
1947 if (fshift && a->diag) {
1948 ierr = PetscFree(a->diag)((*PetscTrFree)((void*)(a->diag),1948,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((a->diag) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1948,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1949 ierr = PetscLogObjectMemory((PetscObject)A,-(mbs+1)*sizeof(PetscInt));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1949,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1950 a->diag = 0;
1951 }
1952 if (fshift && a->nounused == -1) SETERRQ4(PETSC_COMM_SELF,PETSC_ERR_PLIB, "Unused space detected in matrix: %D X %D block size %D, %D unneeded", m, A->cmap->n, A->rmap->bs, fshift*bs2)return PetscError(((MPI_Comm)0x44000001),1952,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,77,PETSC_ERROR_INITIAL,"Unused space detected in matrix: %D X %D block size %D, %D unneeded"
,m,A->cmap->n,A->rmap->bs,fshift*bs2)
;
1953 ierr = PetscInfo5(A,"Matrix size: %D X %D, block size %D; storage space: %D unneeded, %D used\n",m,A->cmap->n,A->rmap->bs,fshift*bs2,a->nz*bs2)PetscInfo_Private(__func__,A,"Matrix size: %D X %D, block size %D; storage space: %D unneeded, %D used\n"
,m,A->cmap->n,A->rmap->bs,fshift*bs2,a->nz*bs2
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1953,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1954 ierr = PetscInfo1(A,"Number of mallocs during MatSetValues is %D\n",a->reallocs)PetscInfo_Private(__func__,A,"Number of mallocs during MatSetValues is %D\n"
,a->reallocs)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1954,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1955 ierr = PetscInfo1(A,"Most nonzeros blocks in any row is %D\n",rmax)PetscInfo_Private(__func__,A,"Most nonzeros blocks in any row is %D\n"
,rmax)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1955,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1956
1957 A->info.mallocs += a->reallocs;
1958 a->reallocs = 0;
1959 A->info.nz_unneeded = (PetscReal)fshift*bs2;
1960 a->rmax = rmax;
1961
1962 if (!A->structure_only) {
1963 ierr = MatCheckCompressedRow(A,a->nonzerorowcnt,&a->compressedrow,a->i,mbs,ratio);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1963,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1964 }
1965 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)
;
1966}
1967
1968/*
1969 This function returns an array of flags which indicate the locations of contiguous
1970 blocks that should be zeroed. for eg: if bs = 3 and is = [0,1,2,3,5,6,7,8,9]
1971 then the resulting sizes = [3,1,1,3,1] correspondig to sets [(0,1,2),(3),(5),(6,7,8),(9)]
1972 Assume: sizes should be long enough to hold all the values.
1973*/
1974static PetscErrorCode MatZeroRows_SeqBAIJ_Check_Blocks(PetscInt idx[],PetscInt n,PetscInt bs,PetscInt sizes[], PetscInt *bs_max)
1975{
1976 PetscInt i,j,k,row;
1977 PetscBool flg;
1978
1979 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 1979; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1980 for (i=0,j=0; i<n; j++) {
1981 row = idx[i];
1982 if (row%bs!=0) { /* Not the begining of a block */
1983 sizes[j] = 1;
1984 i++;
1985 } else if (i+bs > n) { /* complete block doesn't exist (at idx end) */
1986 sizes[j] = 1; /* Also makes sure atleast 'bs' values exist for next else */
1987 i++;
1988 } else { /* Begining of the block, so check if the complete block exists */
1989 flg = PETSC_TRUE;
1990 for (k=1; k<bs; k++) {
1991 if (row+k != idx[i+k]) { /* break in the block */
1992 flg = PETSC_FALSE;
1993 break;
1994 }
1995 }
1996 if (flg) { /* No break in the bs */
1997 sizes[j] = bs;
1998 i += bs;
1999 } else {
2000 sizes[j] = 1;
2001 i++;
2002 }
2003 }
2004 }
2005 *bs_max = j;
2006 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)
;
2007}
2008
2009PetscErrorCode MatZeroRows_SeqBAIJ(Mat A,PetscInt is_n,const PetscInt is_idx[],PetscScalar diag,Vec x, Vec b)
2010{
2011 Mat_SeqBAIJ *baij=(Mat_SeqBAIJ*)A->data;
2012 PetscErrorCode ierr;
2013 PetscInt i,j,k,count,*rows;
2014 PetscInt bs=A->rmap->bs,bs2=baij->bs2,*sizes,row,bs_max;
2015 PetscScalar zero = 0.0;
2016 MatScalar *aa;
2017 const PetscScalar *xx;
2018 PetscScalar *bb;
2019
2020 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2020; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2021 /* fix right hand side if needed */
2022 if (x && b) {
2023 ierr = VecGetArrayRead(x,&xx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2023,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2024 ierr = VecGetArray(b,&bb);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2024,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2025 for (i=0; i<is_n; i++) {
2026 bb[is_idx[i]] = diag*xx[is_idx[i]];
2027 }
2028 ierr = VecRestoreArrayRead(x,&xx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2028,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2029 ierr = VecRestoreArray(b,&bb);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2029,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2030 }
2031
2032 /* Make a copy of the IS and sort it */
2033 /* allocate memory for rows,sizes */
2034 ierr = PetscMalloc2(is_n,&rows,2*is_n,&sizes)PetscMallocA(2,PETSC_FALSE,2034,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(is_n)*sizeof(**(&rows)),(&rows),(size_t)(2*
is_n)*sizeof(**(&sizes)),(&sizes))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2034,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2035
2036 /* copy IS values to rows, and sort them */
2037 for (i=0; i<is_n; i++) rows[i] = is_idx[i];
2038 ierr = PetscSortInt(is_n,rows);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2038,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2039
2040 if (baij->keepnonzeropattern) {
2041 for (i=0; i<is_n; i++) sizes[i] = 1;
2042 bs_max = is_n;
2043 } else {
2044 ierr = MatZeroRows_SeqBAIJ_Check_Blocks(rows,is_n,bs,sizes,&bs_max);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2044,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2045 A->nonzerostate++;
2046 }
2047
2048 for (i=0,j=0; i<bs_max; j+=sizes[i],i++) {
2049 row = rows[j];
2050 if (row < 0 || row > A->rmap->N) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"row %D out of range",row)return PetscError(((MPI_Comm)0x44000001),2050,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"row %D out of range",row)
;
2051 count = (baij->i[row/bs +1] - baij->i[row/bs])*bs;
2052 aa = ((MatScalar*)(baij->a)) + baij->i[row/bs]*bs2 + (row%bs);
2053 if (sizes[i] == bs && !baij->keepnonzeropattern) {
2054 if (diag != (PetscScalar)0.0) {
2055 if (baij->ilen[row/bs] > 0) {
2056 baij->ilen[row/bs] = 1;
2057 baij->j[baij->i[row/bs]] = row/bs;
2058
2059 ierr = PetscArrayzero(aa,count*bs)PetscMemzero(aa,(count*bs)*sizeof(*(aa)));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2059,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2060 }
2061 /* Now insert all the diagonal values for this bs */
2062 for (k=0; k<bs; k++) {
2063 ierr = (*A->ops->setvalues)(A,1,rows+j+k,1,rows+j+k,&diag,INSERT_VALUES);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2063,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2064 }
2065 } else { /* (diag == 0.0) */
2066 baij->ilen[row/bs] = 0;
2067 } /* end (diag == 0.0) */
2068 } else { /* (sizes[i] != bs) */
2069#if defined(PETSC_USE_DEBUG1)
2070 if (sizes[i] != 1) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"Internal Error. Value should be 1")return PetscError(((MPI_Comm)0x44000001),2070,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,77,PETSC_ERROR_INITIAL,"Internal Error. Value should be 1")
;
2071#endif
2072 for (k=0; k<count; k++) {
2073 aa[0] = zero;
2074 aa += bs;
2075 }
2076 if (diag != (PetscScalar)0.0) {
2077 ierr = (*A->ops->setvalues)(A,1,rows+j,1,rows+j,&diag,INSERT_VALUES);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2077,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2078 }
2079 }
2080 }
2081
2082 ierr = PetscFree2(rows,sizes)PetscFreeA(2,2082,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,&(rows),&(sizes))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2082,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2083 ierr = MatAssemblyEnd_SeqBAIJ(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2083,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2084 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)
;
2085}
2086
2087PetscErrorCode MatZeroRowsColumns_SeqBAIJ(Mat A,PetscInt is_n,const PetscInt is_idx[],PetscScalar diag,Vec x, Vec b)
2088{
2089 Mat_SeqBAIJ *baij=(Mat_SeqBAIJ*)A->data;
2090 PetscErrorCode ierr;
2091 PetscInt i,j,k,count;
2092 PetscInt bs =A->rmap->bs,bs2=baij->bs2,row,col;
2093 PetscScalar zero = 0.0;
2094 MatScalar *aa;
2095 const PetscScalar *xx;
2096 PetscScalar *bb;
2097 PetscBool *zeroed,vecs = PETSC_FALSE;
2098
2099 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2099; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2100 /* fix right hand side if needed */
2101 if (x && b) {
2102 ierr = VecGetArrayRead(x,&xx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2102,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2103 ierr = VecGetArray(b,&bb);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2103,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2104 vecs = PETSC_TRUE;
2105 }
2106
2107 /* zero the columns */
2108 ierr = PetscCalloc1(A->rmap->n,&zeroed)PetscMallocA(1,PETSC_TRUE,2108,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(A->rmap->n)*sizeof(**(&zeroed)),(&zeroed
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2108,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2109 for (i=0; i<is_n; i++) {
2110 if (is_idx[i] < 0 || is_idx[i] >= A->rmap->N) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"row %D out of range",is_idx[i])return PetscError(((MPI_Comm)0x44000001),2110,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"row %D out of range",is_idx[i])
;
2111 zeroed[is_idx[i]] = PETSC_TRUE;
2112 }
2113 for (i=0; i<A->rmap->N; i++) {
2114 if (!zeroed[i]) {
2115 row = i/bs;
2116 for (j=baij->i[row]; j<baij->i[row+1]; j++) {
2117 for (k=0; k<bs; k++) {
2118 col = bs*baij->j[j] + k;
2119 if (zeroed[col]) {
2120 aa = ((MatScalar*)(baij->a)) + j*bs2 + (i%bs) + bs*k;
2121 if (vecs) bb[i] -= aa[0]*xx[col];
2122 aa[0] = 0.0;
2123 }
2124 }
2125 }
2126 } else if (vecs) bb[i] = diag*xx[i];
2127 }
2128 ierr = PetscFree(zeroed)((*PetscTrFree)((void*)(zeroed),2128,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((zeroed) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2128,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2129 if (vecs) {
2130 ierr = VecRestoreArrayRead(x,&xx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2130,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2131 ierr = VecRestoreArray(b,&bb);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2131,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2132 }
2133
2134 /* zero the rows */
2135 for (i=0; i<is_n; i++) {
2136 row = is_idx[i];
2137 count = (baij->i[row/bs +1] - baij->i[row/bs])*bs;
2138 aa = ((MatScalar*)(baij->a)) + baij->i[row/bs]*bs2 + (row%bs);
2139 for (k=0; k<count; k++) {
2140 aa[0] = zero;
2141 aa += bs;
2142 }
2143 if (diag != (PetscScalar)0.0) {
2144 ierr = (*A->ops->setvalues)(A,1,&row,1,&row,&diag,INSERT_VALUES);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2144,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2145 }
2146 }
2147 ierr = MatAssemblyEnd_SeqBAIJ(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2147,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2148 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)
;
2149}
2150
2151PetscErrorCode MatSetValues_SeqBAIJ(Mat A,PetscInt m,const PetscInt im[],PetscInt n,const PetscInt in[],const PetscScalar v[],InsertMode is)
2152{
2153 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
2154 PetscInt *rp,k,low,high,t,ii,row,nrow,i,col,l,rmax,N,lastcol = -1;
2155 PetscInt *imax=a->imax,*ai=a->i,*ailen=a->ilen;
2156 PetscInt *aj =a->j,nonew=a->nonew,bs=A->rmap->bs,brow,bcol;
2157 PetscErrorCode ierr;
2158 PetscInt ridx,cidx,bs2=a->bs2;
2159 PetscBool roworiented=a->roworiented;
2160 MatScalar *ap=NULL((void*)0),value=0.0,*aa=a->a,*bap;
2161
2162 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2162; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2163 for (k=0; k<m; k++) { /* loop over added rows */
2164 row = im[k];
2165 brow = row/bs;
2166 if (row < 0) continue;
2167#if defined(PETSC_USE_DEBUG1)
2168 if (row >= A->rmap->N) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Row too large: row %D max %D",row,A->rmap->N-1)return PetscError(((MPI_Comm)0x44000001),2168,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Row too large: row %D max %D",row,A->
rmap->N-1)
;
2169#endif
2170 rp = aj + ai[brow];
2171 if (!A->structure_only) ap = aa + bs2*ai[brow];
2172 rmax = imax[brow];
2173 nrow = ailen[brow];
2174 low = 0;
2175 high = nrow;
2176 for (l=0; l<n; l++) { /* loop over added columns */
2177 if (in[l] < 0) continue;
2178#if defined(PETSC_USE_DEBUG1)
2179 if (in[l] >= A->cmap->n) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Column too large: col %D max %D",in[l],A->cmap->n-1)return PetscError(((MPI_Comm)0x44000001),2179,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Column too large: col %D max %D",in[
l],A->cmap->n-1)
;
2180#endif
2181 col = in[l]; bcol = col/bs;
2182 ridx = row % bs; cidx = col % bs;
2183 if (!A->structure_only) {
2184 if (roworiented) {
2185 value = v[l + k*n];
2186 } else {
2187 value = v[k + l*m];
2188 }
2189 }
2190 if (col <= lastcol) low = 0; else high = nrow;
2191 lastcol = col;
2192 while (high-low > 7) {
2193 t = (low+high)/2;
2194 if (rp[t] > bcol) high = t;
2195 else low = t;
2196 }
2197 for (i=low; i<high; i++) {
2198 if (rp[i] > bcol) break;
2199 if (rp[i] == bcol) {
2200 bap = ap + bs2*i + bs*cidx + ridx;
2201 if (!A->structure_only) {
2202 if (is == ADD_VALUES) *bap += value;
2203 else *bap = value;
2204 }
2205 goto noinsert1;
2206 }
2207 }
2208 if (nonew == 1) goto noinsert1;
2209 if (nonew == -1) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Inserting a new nonzero (%D, %D) in the matrix", row, col)return PetscError(((MPI_Comm)0x44000001),2209,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Inserting a new nonzero (%D, %D) in the matrix"
,row,col)
;
2210 if (A->structure_only) {
2211 MatSeqXAIJReallocateAIJ_structure_only(A,a->mbs,bs2,nrow,brow,bcol,rmax,ai,aj,rp,imax,nonew,MatScalar)if (nrow >= rmax) { Mat_SeqAIJ *Ain = (Mat_SeqAIJ*)A->data
; PetscInt CHUNKSIZE = 15,new_nz = ai[a->mbs] + CHUNKSIZE,
len,*new_i=0,*new_j=0; if (nonew == -2) return PetscError(((MPI_Comm
)0x44000001),2211,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"New nonzero at (%D,%D) caused a malloc\nUse MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE) to turn off this check"
,brow,bcol); ierr = PetscMallocA(1,PETSC_FALSE,2211,__func__,
"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",(size_t
)(new_nz)*sizeof(**(&new_j)),(&new_j));do {if (__builtin_expect
(!!(ierr),0)) return PetscError(((MPI_Comm)0x44000001),2211,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",ierr
,PETSC_ERROR_REPEAT," ");} while (0); ierr = PetscMallocA(1,PETSC_FALSE
,2211,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(a->mbs+1)*sizeof(**(&new_i)),(&new_i));do
{if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2211,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); for (ii=0; ii<brow
+1; ii++) {new_i[ii] = ai[ii];} for (ii=brow+1; ii<a->mbs
+1; ii++) {new_i[ii] = ai[ii]+CHUNKSIZE;} ierr = ((sizeof(*(new_j
)) != sizeof(*(aj))) || PetscMemcpy(new_j,aj,(ai[brow]+nrow)*
sizeof(*(new_j))));do {if (__builtin_expect(!!(ierr),0)) return
PetscError(((MPI_Comm)0x44000001),2211,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); len = (new_nz - CHUNKSIZE
- ai[brow] - nrow); ierr = ((sizeof(*(new_j+ai[brow]+nrow+CHUNKSIZE
)) != sizeof(*(aj+ai[brow]+nrow))) || PetscMemcpy(new_j+ai[brow
]+nrow+CHUNKSIZE,aj+ai[brow]+nrow,(len)*sizeof(*(new_j+ai[brow
]+nrow+CHUNKSIZE))));do {if (__builtin_expect(!!(ierr),0)) return
PetscError(((MPI_Comm)0x44000001),2211,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); ierr = MatSeqXAIJFreeAIJ
(A,&Ain->a,&Ain->j,&Ain->i);do {if (__builtin_expect
(!!(ierr),0)) return PetscError(((MPI_Comm)0x44000001),2211,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",ierr
,PETSC_ERROR_REPEAT," ");} while (0); Ain->a = ((void*)0);
ai = Ain->i = new_i; aj = Ain->j = new_j; Ain->singlemalloc
= PETSC_FALSE; Ain->free_a = PETSC_FALSE; rp = aj + ai[brow
]; rmax = imax[brow] = imax[brow] + CHUNKSIZE; Ain->maxnz +=
bs2*CHUNKSIZE; Ain->reallocs++; }
;
2212 } else {
2213 MatSeqXAIJReallocateAIJ(A,a->mbs,bs2,nrow,brow,bcol,rmax,aa,ai,aj,rp,ap,imax,nonew,MatScalar)if (nrow >= rmax) { Mat_SeqAIJ *Ain = (Mat_SeqAIJ*)A->data
; PetscInt CHUNKSIZE = 15,new_nz = ai[a->mbs] + CHUNKSIZE,
len,*new_i=0,*new_j=0; MatScalar *new_a; if (nonew == -2) return
PetscError(((MPI_Comm)0x44000001),2213,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"New nonzero at (%D,%D) caused a malloc\nUse MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE) to turn off this check"
,brow,bcol); ierr = PetscMallocA(3,PETSC_FALSE,2213,__func__,
"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",(size_t
)(bs2*new_nz)*sizeof(**(&new_a)),(&new_a),(size_t)(new_nz
)*sizeof(**(&new_j)),(&new_j),(size_t)(a->mbs+1)*sizeof
(**(&new_i)),(&new_i));do {if (__builtin_expect(!!(ierr
),0)) return PetscError(((MPI_Comm)0x44000001),2213,__func__,
"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",ierr
,PETSC_ERROR_REPEAT," ");} while (0); for (ii=0; ii<brow+1
; ii++) {new_i[ii] = ai[ii];} for (ii=brow+1; ii<a->mbs
+1; ii++) {new_i[ii] = ai[ii]+CHUNKSIZE;} ierr = ((sizeof(*(new_j
)) != sizeof(*(aj))) || PetscMemcpy(new_j,aj,(ai[brow]+nrow)*
sizeof(*(new_j))));do {if (__builtin_expect(!!(ierr),0)) return
PetscError(((MPI_Comm)0x44000001),2213,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); len = (new_nz - CHUNKSIZE
- ai[brow] - nrow); ierr = ((sizeof(*(new_j+ai[brow]+nrow+CHUNKSIZE
)) != sizeof(*(aj+ai[brow]+nrow))) || PetscMemcpy(new_j+ai[brow
]+nrow+CHUNKSIZE,aj+ai[brow]+nrow,(len)*sizeof(*(new_j+ai[brow
]+nrow+CHUNKSIZE))));do {if (__builtin_expect(!!(ierr),0)) return
PetscError(((MPI_Comm)0x44000001),2213,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); ierr = ((sizeof(*(
new_a)) != sizeof(*(aa))) || PetscMemcpy(new_a,aa,(bs2*(ai[brow
]+nrow))*sizeof(*(new_a))));do {if (__builtin_expect(!!(ierr)
,0)) return PetscError(((MPI_Comm)0x44000001),2213,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); ierr = PetscMemzero
(new_a+bs2*(ai[brow]+nrow),(bs2*CHUNKSIZE)*sizeof(*(new_a+bs2
*(ai[brow]+nrow))));do {if (__builtin_expect(!!(ierr),0)) return
PetscError(((MPI_Comm)0x44000001),2213,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); ierr = ((sizeof(*(
new_a+bs2*(ai[brow]+nrow+CHUNKSIZE))) != sizeof(*(aa+bs2*(ai[
brow]+nrow)))) || PetscMemcpy(new_a+bs2*(ai[brow]+nrow+CHUNKSIZE
),aa+bs2*(ai[brow]+nrow),(bs2*len)*sizeof(*(new_a+bs2*(ai[brow
]+nrow+CHUNKSIZE)))));do {if (__builtin_expect(!!(ierr),0)) return
PetscError(((MPI_Comm)0x44000001),2213,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0); ierr = MatSeqXAIJFreeAIJ
(A,&Ain->a,&Ain->j,&Ain->i);do {if (__builtin_expect
(!!(ierr),0)) return PetscError(((MPI_Comm)0x44000001),2213,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",ierr
,PETSC_ERROR_REPEAT," ");} while (0); aa = new_a; Ain->a =
(MatScalar*) new_a; ai = Ain->i = new_i; aj = Ain->j =
new_j; Ain->singlemalloc = PETSC_TRUE; rp = aj + ai[brow]
; ap = aa + bs2*ai[brow]; rmax = imax[brow] = imax[brow] + CHUNKSIZE
; Ain->maxnz += bs2*CHUNKSIZE; Ain->reallocs++; }
;
2214 }
2215 N = nrow++ - 1; high++;
2216 /* shift up all the later entries in this row */
2217 ierr = PetscArraymove(rp+i+1,rp+i,N-i+1)((sizeof(*(rp+i+1)) != sizeof(*(rp+i))) || PetscMemmove(rp+i+
1,rp+i,(N-i+1)*sizeof(*(rp+i+1))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2217,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2218 rp[i] = bcol;
2219 if (!A->structure_only) {
2220 ierr = PetscArraymove(ap+bs2*(i+1),ap+bs2*i,bs2*(N-i+1))((sizeof(*(ap+bs2*(i+1))) != sizeof(*(ap+bs2*i))) || PetscMemmove
(ap+bs2*(i+1),ap+bs2*i,(bs2*(N-i+1))*sizeof(*(ap+bs2*(i+1))))
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2220,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2221 ierr = PetscArrayzero(ap+bs2*i,bs2)PetscMemzero(ap+bs2*i,(bs2)*sizeof(*(ap+bs2*i)));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2221,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2222 ap[bs2*i + bs*cidx + ridx] = value;
2223 }
2224 a->nz++;
2225 A->nonzerostate++;
2226noinsert1:;
2227 low = i;
2228 }
2229 ailen[brow] = nrow;
2230 }
2231 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)
;
2232}
2233
2234PetscErrorCode MatILUFactor_SeqBAIJ(Mat inA,IS row,IS col,const MatFactorInfo *info)
2235{
2236 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)inA->data;
2237 Mat outA;
2238 PetscErrorCode ierr;
2239 PetscBool row_identity,col_identity;
2240
2241 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2241; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2242 if (info->levels != 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Only levels = 0 supported for in-place ILU")return PetscError(((MPI_Comm)0x44000001),2242,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,56,PETSC_ERROR_INITIAL,"Only levels = 0 supported for in-place ILU"
)
;
2243 ierr = ISIdentity(row,&row_identity);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2243,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2244 ierr = ISIdentity(col,&col_identity);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2244,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2245 if (!row_identity || !col_identity) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Row and column permutations must be identity for in-place ILU")return PetscError(((MPI_Comm)0x44000001),2245,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,62,PETSC_ERROR_INITIAL,"Row and column permutations must be identity for in-place ILU"
)
;
2246
2247 outA = inA;
2248 inA->factortype = MAT_FACTOR_LU;
2249 ierr = PetscFree(inA->solvertype)((*PetscTrFree)((void*)(inA->solvertype),2249,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((inA->solvertype) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2249,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2250 ierr = PetscStrallocpy(MATSOLVERPETSC"petsc",&inA->solvertype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2250,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2251
2252 ierr = MatMarkDiagonal_SeqBAIJ(inA);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2252,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2253
2254 ierr = PetscObjectReference((PetscObject)row);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2254,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2255 ierr = ISDestroy(&a->row);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2255,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2256 a->row = row;
2257 ierr = PetscObjectReference((PetscObject)col);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2257,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2258 ierr = ISDestroy(&a->col);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2258,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2259 a->col = col;
2260
2261 /* Create the invert permutation so that it can be used in MatLUFactorNumeric() */
2262 ierr = ISDestroy(&a->icol);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2262,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2263 ierr = ISInvertPermutation(col,PETSC_DECIDE-1,&a->icol);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2263,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2264 ierr = PetscLogObjectParent((PetscObject)inA,(PetscObject)a->icol);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2264,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2265
2266 ierr = MatSeqBAIJSetNumericFactorization_inplace(inA,(PetscBool)(row_identity && col_identity));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2266,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2267 if (!a->solve_work) {
2268 ierr = PetscMalloc1(inA->rmap->N+inA->rmap->bs,&a->solve_work)PetscMallocA(1,PETSC_FALSE,2268,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(inA->rmap->N+inA->rmap->bs)*sizeof(**(&
a->solve_work)),(&a->solve_work))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2268,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2269 ierr = PetscLogObjectMemory((PetscObject)inA,(inA->rmap->N+inA->rmap->bs)*sizeof(PetscScalar));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2269,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2270 }
2271 ierr = MatLUFactorNumeric(outA,inA,info);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2271,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2272 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)
;
2273}
2274
2275PetscErrorCode MatSeqBAIJSetColumnIndices_SeqBAIJ(Mat mat,PetscInt *indices)
2276{
2277 Mat_SeqBAIJ *baij = (Mat_SeqBAIJ*)mat->data;
2278 PetscInt i,nz,mbs;
2279
2280 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2280; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2281 nz = baij->maxnz;
2282 mbs = baij->mbs;
2283 for (i=0; i<nz; i++) {
2284 baij->j[i] = indices[i];
2285 }
2286 baij->nz = nz;
2287 for (i=0; i<mbs; i++) {
2288 baij->ilen[i] = baij->imax[i];
2289 }
2290 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)
;
2291}
2292
2293/*@
2294 MatSeqBAIJSetColumnIndices - Set the column indices for all the rows
2295 in the matrix.
2296
2297 Input Parameters:
2298+ mat - the SeqBAIJ matrix
2299- indices - the column indices
2300
2301 Level: advanced
2302
2303 Notes:
2304 This can be called if you have precomputed the nonzero structure of the
2305 matrix and want to provide it to the matrix object to improve the performance
2306 of the MatSetValues() operation.
2307
2308 You MUST have set the correct numbers of nonzeros per row in the call to
2309 MatCreateSeqBAIJ(), and the columns indices MUST be sorted.
2310
2311 MUST be called before any calls to MatSetValues();
2312
2313@*/
2314PetscErrorCode MatSeqBAIJSetColumnIndices(Mat mat,PetscInt *indices)
2315{
2316 PetscErrorCode ierr;
2317
2318 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2318; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2319 PetscValidHeaderSpecific(mat,MAT_CLASSID,1)do { if (!mat) return PetscError(((MPI_Comm)0x44000001),2319,
__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(mat,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),2319,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(mat))->classid != MAT_CLASSID) { if
(((PetscObject)(mat))->classid == -1) return PetscError((
(MPI_Comm)0x44000001),2319,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),2319,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",62
,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d",1
); } } while (0)
;
2320 PetscValidPointer(indices,2)do { if (!indices) return PetscError(((MPI_Comm)0x44000001),2320
,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(indices,PETSC_CHAR)) return PetscError((
(MPI_Comm)0x44000001),2320,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",2);
} while (0)
;
2321 ierr = PetscUseMethod(mat,"MatSeqBAIJSetColumnIndices_C",(Mat,PetscInt*),(mat,indices))0; do { PetscErrorCode (*_7_f)(Mat,PetscInt*), _7_ierr; _7_ierr
= PetscObjectQueryFunction_Private(((PetscObject)(mat)),("MatSeqBAIJSetColumnIndices_C"
),(PetscVoidFunction*)(&_7_f));do {if (__builtin_expect(!
!(_7_ierr),0)) return PetscError(((MPI_Comm)0x44000001),2321,
__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0); if (_7_f) {_7_ierr
= (*_7_f)(mat,indices);do {if (__builtin_expect(!!(_7_ierr),
0)) return PetscError(((MPI_Comm)0x44000001),2321,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} else return PetscError
(PetscObjectComm((PetscObject)(mat)),2321,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,56,PETSC_ERROR_INITIAL,"Cannot locate function %s in object"
,"MatSeqBAIJSetColumnIndices_C"); } while(0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2321,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2322 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)
;
2323}
2324
2325PetscErrorCode MatGetRowMaxAbs_SeqBAIJ(Mat A,Vec v,PetscInt idx[])
2326{
2327 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
2328 PetscErrorCode ierr;
2329 PetscInt i,j,n,row,bs,*ai,*aj,mbs;
2330 PetscReal atmp;
2331 PetscScalar *x,zero = 0.0;
2332 MatScalar *aa;
2333 PetscInt ncols,brow,krow,kcol;
2334
2335 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2335; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2336 if (A->factortype) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONGSTATE,"Not for factored matrix")return PetscError(((MPI_Comm)0x44000001),2336,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,73,PETSC_ERROR_INITIAL,"Not for factored matrix")
;
2337 bs = A->rmap->bs;
2338 aa = a->a;
2339 ai = a->i;
2340 aj = a->j;
2341 mbs = a->mbs;
2342
2343 ierr = VecSet(v,zero);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2343,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2344 ierr = VecGetArray(v,&x);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2344,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2345 ierr = VecGetLocalSize(v,&n);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2345,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2346 if (n != A->rmap->N) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_SIZ,"Nonconforming matrix and vector")return PetscError(((MPI_Comm)0x44000001),2346,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,60,PETSC_ERROR_INITIAL,"Nonconforming matrix and vector")
;
2347 for (i=0; i<mbs; i++) {
2348 ncols = ai[1] - ai[0]; ai++;
2349 brow = bs*i;
2350 for (j=0; j<ncols; j++) {
2351 for (kcol=0; kcol<bs; kcol++) {
2352 for (krow=0; krow<bs; krow++) {
2353 atmp = PetscAbsScalar(*aa);aa++;
2354 row = brow + krow; /* row index */
2355 if (PetscAbsScalar(x[row]) < atmp) {x[row] = atmp; if (idx) idx[row] = bs*(*aj) + kcol;}
2356 }
2357 }
2358 aj++;
2359 }
2360 }
2361 ierr = VecRestoreArray(v,&x);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2361,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2362 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)
;
2363}
2364
2365PetscErrorCode MatCopy_SeqBAIJ(Mat A,Mat B,MatStructure str)
2366{
2367 PetscErrorCode ierr;
2368
2369 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2369; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2370 /* If the two matrices have the same copy implementation, use fast copy. */
2371 if (str == SAME_NONZERO_PATTERN && (A->ops->copy == B->ops->copy)) {
2372 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
2373 Mat_SeqBAIJ *b = (Mat_SeqBAIJ*)B->data;
2374 PetscInt ambs=a->mbs,bmbs=b->mbs,abs=A->rmap->bs,bbs=B->rmap->bs,bs2=abs*abs;
2375
2376 if (a->i[ambs] != b->i[bmbs]) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_INCOMP,"Number of nonzero blocks in matrices A %D and B %D are different",a->i[ambs],b->i[bmbs])return PetscError(((MPI_Comm)0x44000001),2376,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,75,PETSC_ERROR_INITIAL,"Number of nonzero blocks in matrices A %D and B %D are different"
,a->i[ambs],b->i[bmbs])
;
2377 if (abs != bbs) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_INCOMP,"Block size A %D and B %D are different",abs,bbs)return PetscError(((MPI_Comm)0x44000001),2377,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,75,PETSC_ERROR_INITIAL,"Block size A %D and B %D are different"
,abs,bbs)
;
2378 ierr = PetscArraycpy(b->a,a->a,bs2*a->i[ambs])((sizeof(*(b->a)) != sizeof(*(a->a))) || PetscMemcpy(b->
a,a->a,(bs2*a->i[ambs])*sizeof(*(b->a))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2378,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2379 ierr = PetscObjectStateIncrease((PetscObject)B)(((PetscObject)B)->state++,0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2379,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2380 } else {
2381 ierr = MatCopy_Basic(A,B,str);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2381,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2382 }
2383 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)
;
2384}
2385
2386PetscErrorCode MatSetUp_SeqBAIJ(Mat A)
2387{
2388 PetscErrorCode ierr;
2389
2390 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2390; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2391 ierr = MatSeqBAIJSetPreallocation(A,A->rmap->bs,PETSC_DEFAULT-2,0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2391,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2392 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)
;
2393}
2394
2395PetscErrorCode MatSeqBAIJGetArray_SeqBAIJ(Mat A,PetscScalar *array[])
2396{
2397 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
2398
2399 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2399; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2400 *array = a->a;
2401 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)
;
2402}
2403
2404PetscErrorCode MatSeqBAIJRestoreArray_SeqBAIJ(Mat A,PetscScalar *array[])
2405{
2406 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2406; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2407 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)
;
2408}
2409
2410PetscErrorCode MatAXPYGetPreallocation_SeqBAIJ(Mat Y,Mat X,PetscInt *nnz)
2411{
2412 PetscInt bs = Y->rmap->bs,mbs = Y->rmap->N/bs;
2413 Mat_SeqBAIJ *x = (Mat_SeqBAIJ*)X->data;
2414 Mat_SeqBAIJ *y = (Mat_SeqBAIJ*)Y->data;
2415 PetscErrorCode ierr;
2416
2417 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2417; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2418 /* Set the number of nonzeros in the new matrix */
2419 ierr = MatAXPYGetPreallocation_SeqX_private(mbs,x->i,x->j,y->i,y->j,nnz);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2419,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2420 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)
;
2421}
2422
2423PetscErrorCode MatAXPY_SeqBAIJ(Mat Y,PetscScalar a,Mat X,MatStructure str)
2424{
2425 Mat_SeqBAIJ *x = (Mat_SeqBAIJ*)X->data,*y = (Mat_SeqBAIJ*)Y->data;
2426 PetscErrorCode ierr;
2427 PetscInt bs=Y->rmap->bs,bs2=bs*bs;
2428 PetscBLASInt one=1;
2429
2430 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2430; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2431 if (str == SAME_NONZERO_PATTERN) {
2432 PetscScalar alpha = a;
2433 PetscBLASInt bnz;
2434 ierr = PetscBLASIntCast(x->nz*bs2,&bnz);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2434,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2435 PetscStackCallBLAS("BLASaxpy",BLASaxpy_(&bnz,&alpha,x->a,&one,y->a,&one))do { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = "BLASaxpy"; petscstack->file[petscstack->currentsize
] = "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
; petscstack->line[petscstack->currentsize] = 2435; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
daxpy_(&bnz,&alpha,x->a,&one,y->a,&one
); do { do {PetscErrorCode _7_ierr = PetscMallocValidate(2435
,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
);do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError(
((MPI_Comm)0x44000001),2435,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} while(0); 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); } while (0); } while(0)
;
2436 ierr = PetscObjectStateIncrease((PetscObject)Y)(((PetscObject)Y)->state++,0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2436,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2437 } else if (str == SUBSET_NONZERO_PATTERN) { /* nonzeros of X is a subset of Y's */
2438 ierr = MatAXPY_Basic(Y,a,X,str);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2438,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2439 } else {
2440 Mat B;
2441 PetscInt *nnz;
2442 if (bs != X->rmap->bs) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_SIZ,"Matrices must have same block size")return PetscError(((MPI_Comm)0x44000001),2442,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,60,PETSC_ERROR_INITIAL,"Matrices must have same block size")
;
2443 ierr = PetscMalloc1(Y->rmap->N,&nnz)PetscMallocA(1,PETSC_FALSE,2443,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(Y->rmap->N)*sizeof(**(&nnz)),(&nnz))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2443,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2444 ierr = MatCreate(PetscObjectComm((PetscObject)Y),&B);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2444,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2445 ierr = PetscObjectSetName((PetscObject)B,((PetscObject)Y)->name);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2445,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2446 ierr = MatSetSizes(B,Y->rmap->n,Y->cmap->n,Y->rmap->N,Y->cmap->N);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2446,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2447 ierr = MatSetBlockSizesFromMats(B,Y,Y);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2447,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2448 ierr = MatSetType(B,(MatType) ((PetscObject)Y)->type_name);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2448,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2449 ierr = MatAXPYGetPreallocation_SeqBAIJ(Y,X,nnz);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2449,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2450 ierr = MatSeqBAIJSetPreallocation(B,bs,0,nnz);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2450,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2451 ierr = MatAXPY_BasicWithPreallocation(B,Y,a,X,str);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2451,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2452 ierr = MatHeaderReplace(Y,&B);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2452,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2453 ierr = PetscFree(nnz)((*PetscTrFree)((void*)(nnz),2453,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((nnz) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2453,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2454 }
2455 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)
;
2456}
2457
2458PetscErrorCode MatRealPart_SeqBAIJ(Mat A)
2459{
2460 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
2461 PetscInt i,nz = a->bs2*a->i[a->mbs];
2462 MatScalar *aa = a->a;
2463
2464 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2464; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2465 for (i=0; i<nz; i++) aa[i] = PetscRealPart(aa[i])(aa[i]);
2466 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)
;
2467}
2468
2469PetscErrorCode MatImaginaryPart_SeqBAIJ(Mat A)
2470{
2471 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
2472 PetscInt i,nz = a->bs2*a->i[a->mbs];
2473 MatScalar *aa = a->a;
2474
2475 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2475; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2476 for (i=0; i<nz; i++) aa[i] = PetscImaginaryPart(aa[i])((PetscReal)0.);
2477 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)
;
2478}
2479
2480/*
2481 Code almost idential to MatGetColumnIJ_SeqAIJ() should share common code
2482*/
2483PetscErrorCode MatGetColumnIJ_SeqBAIJ(Mat A,PetscInt oshift,PetscBool symmetric,PetscBool inodecompressed,PetscInt *nn,const PetscInt *ia[],const PetscInt *ja[],PetscBool *done)
2484{
2485 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
2486 PetscErrorCode ierr;
2487 PetscInt bs = A->rmap->bs,i,*collengths,*cia,*cja,n = A->cmap->n/bs,m = A->rmap->n/bs;
2488 PetscInt nz = a->i[m],row,*jj,mr,col;
2489
2490 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2490; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2491 *nn = n;
2492 if (!ia) 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)
;
2493 if (symmetric) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Not for BAIJ matrices")return PetscError(((MPI_Comm)0x44000001),2493,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,56,PETSC_ERROR_INITIAL,"Not for BAIJ matrices")
;
2494 else {
2495 ierr = PetscCalloc1(n,&collengths)PetscMallocA(1,PETSC_TRUE,2495,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(n)*sizeof(**(&collengths)),(&collengths))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2495,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2496 ierr = PetscMalloc1(n+1,&cia)PetscMallocA(1,PETSC_FALSE,2496,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(n+1)*sizeof(**(&cia)),(&cia))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2496,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2497 ierr = PetscMalloc1(nz,&cja)PetscMallocA(1,PETSC_FALSE,2497,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(nz)*sizeof(**(&cja)),(&cja))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2497,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2498 jj = a->j;
2499 for (i=0; i<nz; i++) {
2500 collengths[jj[i]]++;
2501 }
2502 cia[0] = oshift;
2503 for (i=0; i<n; i++) {
2504 cia[i+1] = cia[i] + collengths[i];
2505 }
2506 ierr = PetscArrayzero(collengths,n)PetscMemzero(collengths,(n)*sizeof(*(collengths)));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2506,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2507 jj = a->j;
2508 for (row=0; row<m; row++) {
2509 mr = a->i[row+1] - a->i[row];
2510 for (i=0; i<mr; i++) {
2511 col = *jj++;
2512
2513 cja[cia[col] + collengths[col]++ - oshift] = row + oshift;
2514 }
2515 }
2516 ierr = PetscFree(collengths)((*PetscTrFree)((void*)(collengths),2516,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((collengths) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2516,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2517 *ia = cia; *ja = cja;
2518 }
2519 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)
;
2520}
2521
2522PetscErrorCode MatRestoreColumnIJ_SeqBAIJ(Mat A,PetscInt oshift,PetscBool symmetric,PetscBool inodecompressed,PetscInt *n,const PetscInt *ia[],const PetscInt *ja[],PetscBool *done)
2523{
2524 PetscErrorCode ierr;
2525
2526 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2526; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2527 if (!ia) 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)
;
2528 ierr = PetscFree(*ia)((*PetscTrFree)((void*)(*ia),2528,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((*ia) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2528,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2529 ierr = PetscFree(*ja)((*PetscTrFree)((void*)(*ja),2529,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((*ja) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2529,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2530 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)
;
2531}
2532
2533/*
2534 MatGetColumnIJ_SeqBAIJ_Color() and MatRestoreColumnIJ_SeqBAIJ_Color() are customized from
2535 MatGetColumnIJ_SeqBAIJ() and MatRestoreColumnIJ_SeqBAIJ() by adding an output
2536 spidx[], index of a->a, to be used in MatTransposeColoringCreate() and MatFDColoringCreate()
2537 */
2538PetscErrorCode MatGetColumnIJ_SeqBAIJ_Color(Mat A,PetscInt oshift,PetscBool symmetric,PetscBool inodecompressed,PetscInt *nn,const PetscInt *ia[],const PetscInt *ja[],PetscInt *spidx[],PetscBool *done)
2539{
2540 Mat_SeqBAIJ *a = (Mat_SeqBAIJ*)A->data;
2541 PetscErrorCode ierr;
2542 PetscInt i,*collengths,*cia,*cja,n=a->nbs,m=a->mbs;
2543 PetscInt nz = a->i[m],row,*jj,mr,col;
2544 PetscInt *cspidx;
2545
2546 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2546; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2547 *nn = n;
2548 if (!ia) 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)
;
2549
2550 ierr = PetscCalloc1(n,&collengths)PetscMallocA(1,PETSC_TRUE,2550,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(n)*sizeof(**(&collengths)),(&collengths))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2550,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2551 ierr = PetscMalloc1(n+1,&cia)PetscMallocA(1,PETSC_FALSE,2551,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(n+1)*sizeof(**(&cia)),(&cia))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2551,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2552 ierr = PetscMalloc1(nz,&cja)PetscMallocA(1,PETSC_FALSE,2552,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(nz)*sizeof(**(&cja)),(&cja))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2552,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2553 ierr = PetscMalloc1(nz,&cspidx)PetscMallocA(1,PETSC_FALSE,2553,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(nz)*sizeof(**(&cspidx)),(&cspidx))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2553,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2554 jj = a->j;
2555 for (i=0; i<nz; i++) {
2556 collengths[jj[i]]++;
2557 }
2558 cia[0] = oshift;
2559 for (i=0; i<n; i++) {
2560 cia[i+1] = cia[i] + collengths[i];
2561 }
2562 ierr = PetscArrayzero(collengths,n)PetscMemzero(collengths,(n)*sizeof(*(collengths)));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2562,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2563 jj = a->j;
2564 for (row=0; row<m; row++) {
2565 mr = a->i[row+1] - a->i[row];
2566 for (i=0; i<mr; i++) {
2567 col = *jj++;
2568 cspidx[cia[col] + collengths[col] - oshift] = a->i[row] + i; /* index of a->j */
2569 cja[cia[col] + collengths[col]++ - oshift] = row + oshift;
2570 }
2571 }
2572 ierr = PetscFree(collengths)((*PetscTrFree)((void*)(collengths),2572,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((collengths) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2572,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2573 *ia = cia;
2574 *ja = cja;
2575 *spidx = cspidx;
2576 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)
;
2577}
2578
2579PetscErrorCode MatRestoreColumnIJ_SeqBAIJ_Color(Mat A,PetscInt oshift,PetscBool symmetric,PetscBool inodecompressed,PetscInt *n,const PetscInt *ia[],const PetscInt *ja[],PetscInt *spidx[],PetscBool *done)
2580{
2581 PetscErrorCode ierr;
2582
2583 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2583; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2584 ierr = MatRestoreColumnIJ_SeqBAIJ(A,oshift,symmetric,inodecompressed,n,ia,ja,done);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2584,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2585 ierr = PetscFree(*spidx)((*PetscTrFree)((void*)(*spidx),2585,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((*spidx) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2585,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2586 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)
;
2587}
2588
2589PetscErrorCode MatShift_SeqBAIJ(Mat Y,PetscScalar a)
2590{
2591 PetscErrorCode ierr;
2592 Mat_SeqBAIJ *aij = (Mat_SeqBAIJ*)Y->data;
2593
2594 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2594; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2595 if (!Y->preallocated || !aij->nz) {
2596 ierr = MatSeqBAIJSetPreallocation(Y,Y->rmap->bs,1,NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2596,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2597 }
2598 ierr = MatShift_Basic(Y,a);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2598,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2599 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)
;
2600}
2601
2602/* -------------------------------------------------------------------*/
2603static struct _MatOps MatOps_Values = {MatSetValues_SeqBAIJ,
2604 MatGetRow_SeqBAIJ,
2605 MatRestoreRow_SeqBAIJ,
2606 MatMult_SeqBAIJ_N,
2607 /* 4*/ MatMultAdd_SeqBAIJ_N,
2608 MatMultTranspose_SeqBAIJ,
2609 MatMultTransposeAdd_SeqBAIJ,
2610 0,
2611 0,
2612 0,
2613 /* 10*/ 0,
2614 MatLUFactor_SeqBAIJ,
2615 0,
2616 0,
2617 MatTranspose_SeqBAIJ,
2618 /* 15*/ MatGetInfo_SeqBAIJ,
2619 MatEqual_SeqBAIJ,
2620 MatGetDiagonal_SeqBAIJ,
2621 MatDiagonalScale_SeqBAIJ,
2622 MatNorm_SeqBAIJ,
2623 /* 20*/ 0,
2624 MatAssemblyEnd_SeqBAIJ,
2625 MatSetOption_SeqBAIJ,
2626 MatZeroEntries_SeqBAIJ,
2627 /* 24*/ MatZeroRows_SeqBAIJ,
2628 0,
2629 0,
2630 0,
2631 0,
2632 /* 29*/ MatSetUp_SeqBAIJ,
2633 0,
2634 0,
2635 0,
2636 0,
2637 /* 34*/ MatDuplicate_SeqBAIJ,
2638 0,
2639 0,
2640 MatILUFactor_SeqBAIJ,
2641 0,
2642 /* 39*/ MatAXPY_SeqBAIJ,
2643 MatCreateSubMatrices_SeqBAIJ,
2644 MatIncreaseOverlap_SeqBAIJ,
2645 MatGetValues_SeqBAIJ,
2646 MatCopy_SeqBAIJ,
2647 /* 44*/ 0,
2648 MatScale_SeqBAIJ,
2649 MatShift_SeqBAIJ,
2650 0,
2651 MatZeroRowsColumns_SeqBAIJ,
2652 /* 49*/ 0,
2653 MatGetRowIJ_SeqBAIJ,
2654 MatRestoreRowIJ_SeqBAIJ,
2655 MatGetColumnIJ_SeqBAIJ,
2656 MatRestoreColumnIJ_SeqBAIJ,
2657 /* 54*/ MatFDColoringCreate_SeqXAIJ,
2658 0,
2659 0,
2660 0,
2661 MatSetValuesBlocked_SeqBAIJ,
2662 /* 59*/ MatCreateSubMatrix_SeqBAIJ,
2663 MatDestroy_SeqBAIJ,
2664 MatView_SeqBAIJ,
2665 0,
2666 0,
2667 /* 64*/ 0,
2668 0,
2669 0,
2670 0,
2671 0,
2672 /* 69*/ MatGetRowMaxAbs_SeqBAIJ,
2673 0,
2674 MatConvert_Basic,
2675 0,
2676 0,
2677 /* 74*/ 0,
2678 MatFDColoringApply_BAIJ,
2679 0,
2680 0,
2681 0,
2682 /* 79*/ 0,
2683 0,
2684 0,
2685 0,
2686 MatLoad_SeqBAIJ,
2687 /* 84*/ 0,
2688 0,
2689 0,
2690 0,
2691 0,
2692 /* 89*/ 0,
2693 0,
2694 0,
2695 0,
2696 0,
2697 /* 94*/ 0,
2698 0,
2699 0,
2700 0,
2701 0,
2702 /* 99*/ 0,
2703 0,
2704 0,
2705 0,
2706 0,
2707 /*104*/ 0,
2708 MatRealPart_SeqBAIJ,
2709 MatImaginaryPart_SeqBAIJ,
2710 0,
2711 0,
2712 /*109*/ 0,
2713 0,
2714 0,
2715 0,
2716 MatMissingDiagonal_SeqBAIJ,
2717 /*114*/ 0,
2718 0,
2719 0,
2720 0,
2721 0,
2722 /*119*/ 0,
2723 0,
2724 MatMultHermitianTranspose_SeqBAIJ,
2725 MatMultHermitianTransposeAdd_SeqBAIJ,
2726 0,
2727 /*124*/ 0,
2728 0,
2729 MatInvertBlockDiagonal_SeqBAIJ,
2730 0,
2731 0,
2732 /*129*/ 0,
2733 0,
2734 0,
2735 0,
2736 0,
2737 /*134*/ 0,
2738 0,
2739 0,
2740 0,
2741 0,
2742 /*139*/ MatSetBlockSizes_Default,
2743 0,
2744 0,
2745 MatFDColoringSetUp_SeqXAIJ,
2746 0,
2747 /*144*/MatCreateMPIMatConcatenateSeqMat_SeqBAIJ,
2748 MatDestroySubMatrices_SeqBAIJ
2749};
2750
2751PetscErrorCode MatStoreValues_SeqBAIJ(Mat mat)
2752{
2753 Mat_SeqBAIJ *aij = (Mat_SeqBAIJ*)mat->data;
2754 PetscInt nz = aij->i[aij->mbs]*aij->bs2;
2755 PetscErrorCode ierr;
2756
2757 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2757; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2758 if (aij->nonew != 1) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ORDER,"Must call MatSetOption(A,MAT_NEW_NONZERO_LOCATIONS,PETSC_FALSE);first")return PetscError(((MPI_Comm)0x44000001),2758,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,58,PETSC_ERROR_INITIAL,"Must call MatSetOption(A,MAT_NEW_NONZERO_LOCATIONS,PETSC_FALSE);first"
)
;
2759
2760 /* allocate space for values if not already there */
2761 if (!aij->saved_values) {
2762 ierr = PetscMalloc1(nz+1,&aij->saved_values)PetscMallocA(1,PETSC_FALSE,2762,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(nz+1)*sizeof(**(&aij->saved_values)),(&aij
->saved_values))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2762,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2763 ierr = PetscLogObjectMemory((PetscObject)mat,(nz+1)*sizeof(PetscScalar));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2763,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2764 }
2765
2766 /* copy values over */
2767 ierr = PetscArraycpy(aij->saved_values,aij->a,nz)((sizeof(*(aij->saved_values)) != sizeof(*(aij->a))) ||
PetscMemcpy(aij->saved_values,aij->a,(nz)*sizeof(*(aij
->saved_values))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2767,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2768 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)
;
2769}
2770
2771PetscErrorCode MatRetrieveValues_SeqBAIJ(Mat mat)
2772{
2773 Mat_SeqBAIJ *aij = (Mat_SeqBAIJ*)mat->data;
2774 PetscErrorCode ierr;
2775 PetscInt nz = aij->i[aij->mbs]*aij->bs2;
2776
2777 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2777; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2778 if (aij->nonew != 1) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ORDER,"Must call MatSetOption(A,MAT_NEW_NONZERO_LOCATIONS,PETSC_FALSE);first")return PetscError(((MPI_Comm)0x44000001),2778,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,58,PETSC_ERROR_INITIAL,"Must call MatSetOption(A,MAT_NEW_NONZERO_LOCATIONS,PETSC_FALSE);first"
)
;
2779 if (!aij->saved_values) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ORDER,"Must call MatStoreValues(A);first")return PetscError(((MPI_Comm)0x44000001),2779,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,58,PETSC_ERROR_INITIAL,"Must call MatStoreValues(A);first")
;
2780
2781 /* copy values over */
2782 ierr = PetscArraycpy(aij->a,aij->saved_values,nz)((sizeof(*(aij->a)) != sizeof(*(aij->saved_values))) ||
PetscMemcpy(aij->a,aij->saved_values,(nz)*sizeof(*(aij
->a))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2782,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2783 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)
;
2784}
2785
2786PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode MatConvert_SeqBAIJ_SeqAIJ(Mat, MatType,MatReuse,Mat*);
2787PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode MatConvert_SeqBAIJ_SeqSBAIJ(Mat, MatType,MatReuse,Mat*);
2788
2789PetscErrorCode MatSeqBAIJSetPreallocation_SeqBAIJ(Mat B,PetscInt bs,PetscInt nz,PetscInt *nnz)
2790{
2791 Mat_SeqBAIJ *b;
2792 PetscErrorCode ierr;
2793 PetscInt i,mbs,nbs,bs2;
2794 PetscBool flg = PETSC_FALSE,skipallocation = PETSC_FALSE,realalloc = PETSC_FALSE;
2795
2796 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2796; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2797 if (nz >= 0 || nnz) realalloc = PETSC_TRUE;
2798 if (nz == MAT_SKIP_ALLOCATION-4) {
2799 skipallocation = PETSC_TRUE;
2800 nz = 0;
2801 }
2802
2803 ierr = MatSetBlockSize(B,PetscAbs(bs)(((bs) >= 0) ? (bs) : (-(bs))));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2803,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2804 ierr = PetscLayoutSetUp(B->rmap);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2804,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2805 ierr = PetscLayoutSetUp(B->cmap);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2805,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2806 ierr = PetscLayoutGetBlockSize(B->rmap,&bs);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2806,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2807
2808 B->preallocated = PETSC_TRUE;
2809
2810 mbs = B->rmap->n/bs;
2811 nbs = B->cmap->n/bs;
2812 bs2 = bs*bs;
2813
2814 if (mbs*bs!=B->rmap->n || nbs*bs!=B->cmap->n) SETERRQ3(PETSC_COMM_SELF,PETSC_ERR_ARG_SIZ,"Number rows %D, cols %D must be divisible by blocksize %D",B->rmap->N,B->cmap->n,bs)return PetscError(((MPI_Comm)0x44000001),2814,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,60,PETSC_ERROR_INITIAL,"Number rows %D, cols %D must be divisible by blocksize %D"
,B->rmap->N,B->cmap->n,bs)
;
2815
2816 if (nz == PETSC_DEFAULT-2 || nz == PETSC_DECIDE-1) nz = 5;
2817 if (nz < 0) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"nz cannot be less than 0: value %D",nz)return PetscError(((MPI_Comm)0x44000001),2817,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"nz cannot be less than 0: value %D",
nz)
;
2818 if (nnz) {
2819 for (i=0; i<mbs; i++) {
2820 if (nnz[i] < 0) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"nnz cannot be less than 0: local row %D value %D",i,nnz[i])return PetscError(((MPI_Comm)0x44000001),2820,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"nnz cannot be less than 0: local row %D value %D"
,i,nnz[i])
;
2821 if (nnz[i] > nbs) SETERRQ3(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"nnz cannot be greater than block row length: local row %D value %D rowlength %D",i,nnz[i],nbs)return PetscError(((MPI_Comm)0x44000001),2821,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"nnz cannot be greater than block row length: local row %D value %D rowlength %D"
,i,nnz[i],nbs)
;
2822 }
2823 }
2824
2825 b = (Mat_SeqBAIJ*)B->data;
2826 ierr = PetscOptionsBegin(PetscObjectComm((PetscObject)B),NULL,"Optimize options for SEQBAIJ matrix 2 ","Mat")0; do { PetscOptionItems PetscOptionsObjectBase; PetscOptionItems
*PetscOptionsObject = &PetscOptionsObjectBase; PetscMemzero
(PetscOptionsObject,sizeof(PetscOptionItems)); for (PetscOptionsObject
->count=(PetscOptionsPublish?-1:1); PetscOptionsObject->
count<2; PetscOptionsObject->count++) { PetscErrorCode _5_ierr
= PetscOptionsBegin_Private(PetscOptionsObject,PetscObjectComm
((PetscObject)B),((void*)0),"Optimize options for SEQBAIJ matrix 2 "
,"Mat");do {if (__builtin_expect(!!(_5_ierr),0)) return PetscError
(((MPI_Comm)0x44000001),2826,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_5_ierr,PETSC_ERROR_REPEAT," ");} while (0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2826,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2827 ierr = PetscOptionsBool("-mat_no_unroll","Do not optimize for block size (slow)",NULL,flg,&flg,NULL)PetscOptionsBool_Private(PetscOptionsObject,"-mat_no_unroll",
"Do not optimize for block size (slow)",((void*)0),flg,&flg
,((void*)0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2827,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2828 ierr = PetscOptionsEnd()_5_ierr = PetscOptionsEnd_Private(PetscOptionsObject);do {if (
__builtin_expect(!!(_5_ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2828,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_5_ierr,PETSC_ERROR_REPEAT," ");} while (0);}} while (0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2828,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2829
2830 if (!flg) {
2831 switch (bs) {
2832 case 1:
2833 B->ops->mult = MatMult_SeqBAIJ_1;
2834 B->ops->multadd = MatMultAdd_SeqBAIJ_1;
2835 break;
2836 case 2:
2837 B->ops->mult = MatMult_SeqBAIJ_2;
2838 B->ops->multadd = MatMultAdd_SeqBAIJ_2;
2839 break;
2840 case 3:
2841 B->ops->mult = MatMult_SeqBAIJ_3;
2842 B->ops->multadd = MatMultAdd_SeqBAIJ_3;
2843 break;
2844 case 4:
2845 B->ops->mult = MatMult_SeqBAIJ_4;
2846 B->ops->multadd = MatMultAdd_SeqBAIJ_4;
2847 break;
2848 case 5:
2849 B->ops->mult = MatMult_SeqBAIJ_5;
2850 B->ops->multadd = MatMultAdd_SeqBAIJ_5;
2851 break;
2852 case 6:
2853 B->ops->mult = MatMult_SeqBAIJ_6;
2854 B->ops->multadd = MatMultAdd_SeqBAIJ_6;
2855 break;
2856 case 7:
2857 B->ops->mult = MatMult_SeqBAIJ_7;
2858 B->ops->multadd = MatMultAdd_SeqBAIJ_7;
2859 break;
2860 case 9:
2861#if defined(PETSC_HAVE_IMMINTRIN_H1) && defined(__AVX2__) && defined(__FMA__) && defined(PETSC_USE_REAL_DOUBLE1) && !defined(PETSC_USE_COMPLEX) && !defined(PETSC_USE_64BIT_INDICES)
2862 B->ops->mult = MatMult_SeqBAIJ_9_AVX2;
2863 B->ops->multadd = MatMultAdd_SeqBAIJ_9_AVX2;
2864#else
2865 B->ops->mult = MatMult_SeqBAIJ_N;
2866 B->ops->multadd = MatMultAdd_SeqBAIJ_N;
2867#endif
2868 break;
2869 case 11:
2870 B->ops->mult = MatMult_SeqBAIJ_11;
2871 B->ops->multadd = MatMultAdd_SeqBAIJ_11;
2872 break;
2873 case 15:
2874 B->ops->mult = MatMult_SeqBAIJ_15_ver1;
2875 B->ops->multadd = MatMultAdd_SeqBAIJ_N;
2876 break;
2877 default:
2878 B->ops->mult = MatMult_SeqBAIJ_N;
2879 B->ops->multadd = MatMultAdd_SeqBAIJ_N;
2880 break;
2881 }
2882 }
2883 B->ops->sor = MatSOR_SeqBAIJ;
2884 b->mbs = mbs;
2885 b->nbs = nbs;
2886 if (!skipallocation) {
2887 if (!b->imax) {
2888 ierr = PetscMalloc2(mbs,&b->imax,mbs,&b->ilen)PetscMallocA(2,PETSC_FALSE,2888,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(mbs)*sizeof(**(&b->imax)),(&b->imax),
(size_t)(mbs)*sizeof(**(&b->ilen)),(&b->ilen))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2888,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2889 ierr = PetscLogObjectMemory((PetscObject)B,2*mbs*sizeof(PetscInt));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2889,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2890
2891 b->free_imax_ilen = PETSC_TRUE;
2892 }
2893 /* b->ilen will count nonzeros in each block row so far. */
2894 for (i=0; i<mbs; i++) b->ilen[i] = 0;
2895 if (!nnz) {
2896 if (nz == PETSC_DEFAULT-2 || nz == PETSC_DECIDE-1) nz = 5;
2897 else if (nz < 0) nz = 1;
2898 nz = PetscMin(nz,nbs)(((nz)<(nbs)) ? (nz) : (nbs));
2899 for (i=0; i<mbs; i++) b->imax[i] = nz;
2900 nz = nz*mbs;
2901 } else {
2902 PetscInt64 nz64 = 0;
2903 for (i=0; i<mbs; i++) {b->imax[i] = nnz[i]; nz64 += nnz[i];}
2904 ierr = PetscIntCast(nz64,&nz);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2904,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2905 }
2906
2907 /* allocate the matrix space */
2908 ierr = MatSeqXAIJFreeAIJ(B,&b->a,&b->j,&b->i);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2908,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2909 if (B->structure_only) {
2910 ierr = PetscMalloc1(nz,&b->j)PetscMallocA(1,PETSC_FALSE,2910,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(nz)*sizeof(**(&b->j)),(&b->j))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2910,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2911 ierr = PetscMalloc1(B->rmap->N+1,&b->i)PetscMallocA(1,PETSC_FALSE,2911,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(B->rmap->N+1)*sizeof(**(&b->i)),(&
b->i))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2911,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2912 ierr = PetscLogObjectMemory((PetscObject)B,(B->rmap->N+1)*sizeof(PetscInt)+nz*sizeof(PetscInt));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2912,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2913 } else {
2914 ierr = PetscMalloc3(bs2*nz,&b->a,nz,&b->j,B->rmap->N+1,&b->i)PetscMallocA(3,PETSC_FALSE,2914,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(bs2*nz)*sizeof(**(&b->a)),(&b->a),(size_t
)(nz)*sizeof(**(&b->j)),(&b->j),(size_t)(B->
rmap->N+1)*sizeof(**(&b->i)),(&b->i))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2914,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2915 ierr = PetscLogObjectMemory((PetscObject)B,(B->rmap->N+1)*sizeof(PetscInt)+nz*(bs2*sizeof(PetscScalar)+sizeof(PetscInt)));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2915,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2916 ierr = PetscArrayzero(b->a,nz*bs2)PetscMemzero(b->a,(nz*bs2)*sizeof(*(b->a)));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2916,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2917 }
2918 ierr = PetscArrayzero(b->j,nz)PetscMemzero(b->j,(nz)*sizeof(*(b->j)));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2918,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2919
2920 if (B->structure_only) {
2921 b->singlemalloc = PETSC_FALSE;
2922 b->free_a = PETSC_FALSE;
2923 } else {
2924 b->singlemalloc = PETSC_TRUE;
2925 b->free_a = PETSC_TRUE;
2926 }
2927 b->free_ij = PETSC_TRUE;
2928
2929 b->i[0] = 0;
2930 for (i=1; i<mbs+1; i++) {
2931 b->i[i] = b->i[i-1] + b->imax[i-1];
2932 }
2933
2934 } else {
2935 b->free_a = PETSC_FALSE;
2936 b->free_ij = PETSC_FALSE;
2937 }
2938
2939 b->bs2 = bs2;
2940 b->mbs = mbs;
2941 b->nz = 0;
2942 b->maxnz = nz;
2943 B->info.nz_unneeded = (PetscReal)b->maxnz*bs2;
2944 B->was_assembled = PETSC_FALSE;
2945 B->assembled = PETSC_FALSE;
2946 if (realalloc) {ierr = MatSetOption(B,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2946,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
2947 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)
;
2948}
2949
2950PetscErrorCode MatSeqBAIJSetPreallocationCSR_SeqBAIJ(Mat B,PetscInt bs,const PetscInt ii[],const PetscInt jj[],const PetscScalar V[])
2951{
2952 PetscInt i,m,nz,nz_max=0,*nnz;
2953 PetscScalar *values=0;
2954 PetscBool roworiented = ((Mat_SeqBAIJ*)B->data)->roworiented;
2955 PetscErrorCode ierr;
2956
2957 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 2957; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
2958 if (bs < 1) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Invalid block size specified, must be positive but it is %D",bs)return PetscError(((MPI_Comm)0x44000001),2958,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Invalid block size specified, must be positive but it is %D"
,bs)
;
2959 ierr = PetscLayoutSetBlockSize(B->rmap,bs);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2959,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2960 ierr = PetscLayoutSetBlockSize(B->cmap,bs);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2960,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2961 ierr = PetscLayoutSetUp(B->rmap);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2961,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2962 ierr = PetscLayoutSetUp(B->cmap);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2962,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2963 ierr = PetscLayoutGetBlockSize(B->rmap,&bs);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2963,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2964 m = B->rmap->n/bs;
2965
2966 if (ii[0] != 0) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE, "ii[0] must be 0 but it is %D",ii[0])return PetscError(((MPI_Comm)0x44000001),2966,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"ii[0] must be 0 but it is %D",ii[0])
;
2967 ierr = PetscMalloc1(m+1, &nnz)PetscMallocA(1,PETSC_FALSE,2967,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(m+1)*sizeof(**(&nnz)),(&nnz))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2967,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2968 for (i=0; i<m; i++) {
2969 nz = ii[i+1]- ii[i];
2970 if (nz < 0) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE, "Local row %D has a negative number of columns %D",i,nz)return PetscError(((MPI_Comm)0x44000001),2970,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Local row %D has a negative number of columns %D"
,i,nz)
;
2971 nz_max = PetscMax(nz_max, nz)(((nz_max)<(nz)) ? (nz) : (nz_max));
2972 nnz[i] = nz;
2973 }
2974 ierr = MatSeqBAIJSetPreallocation(B,bs,0,nnz);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2974,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2975 ierr = PetscFree(nnz)((*PetscTrFree)((void*)(nnz),2975,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((nnz) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2975,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2976
2977 values = (PetscScalar*)V;
2978 if (!values) {
2979 ierr = PetscCalloc1(bs*bs*(nz_max+1),&values)PetscMallocA(1,PETSC_TRUE,2979,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(bs*bs*(nz_max+1))*sizeof(**(&values)),(&values
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2979,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2980 }
2981 for (i=0; i<m; i++) {
2982 PetscInt ncols = ii[i+1] - ii[i];
2983 const PetscInt *icols = jj + ii[i];
2984 const PetscScalar *svals = values + (V ? (bs*bs*ii[i]) : 0);
2985 if (!roworiented) {
2986 ierr = MatSetValuesBlocked_SeqBAIJ(B,1,&i,ncols,icols,svals,INSERT_VALUES);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2986,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2987 } else {
2988 PetscInt j;
2989 for (j=0; j<ncols; j++) {
2990 const PetscScalar *svals = values + (V ? (bs*bs*(ii[i]+j)) : 0);
2991 ierr = MatSetValuesBlocked_SeqBAIJ(B,1,&i,1,&icols[j],svals,INSERT_VALUES);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2991,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2992 }
2993 }
2994 }
2995 if (!V) { ierr = PetscFree(values)((*PetscTrFree)((void*)(values),2995,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((values) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2995,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; }
2996 ierr = MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2996,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2997 ierr = MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2997,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2998 ierr = MatSetOption(B,MAT_NEW_NONZERO_LOCATION_ERR,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),2998,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
2999 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)
;
3000}
3001
3002/*MC
3003 MATSEQBAIJ - MATSEQBAIJ = "seqbaij" - A matrix type to be used for sequential block sparse matrices, based on
3004 block sparse compressed row format.
3005
3006 Options Database Keys:
3007. -mat_type seqbaij - sets the matrix type to "seqbaij" during a call to MatSetFromOptions()
3008
3009 Level: beginner
3010
3011.seealso: MatCreateSeqBAIJ()
3012M*/
3013
3014PETSC_INTERNextern __attribute__((visibility ("hidden"))) PetscErrorCode MatConvert_SeqBAIJ_SeqBSTRM(Mat, MatType,MatReuse,Mat*);
3015
3016PETSC_EXTERNextern __attribute__((visibility ("default"))) PetscErrorCode MatCreate_SeqBAIJ(Mat B)
3017{
3018 PetscErrorCode ierr;
3019 PetscMPIInt size;
3020 Mat_SeqBAIJ *b;
3021
3022 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 3022; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
3023 ierr = MPI_Comm_size(PetscObjectComm((PetscObject)B),&size);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3023,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3024 if (size > 1) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Comm must be of size 1")return PetscError(((MPI_Comm)0x44000001),3024,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,62,PETSC_ERROR_INITIAL,"Comm must be of size 1")
;
3025
3026 ierr = PetscNewLog(B,&b)(PetscMallocA(1,PETSC_TRUE,3026,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(1)*sizeof(**(((&b)))),(((&b)))) || PetscLogObjectMemory
((PetscObject)B,sizeof(**(&b))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3026,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3027 B->data = (void*)b;
3028 ierr = PetscMemcpy(B->ops,&MatOps_Values,sizeof(struct _MatOps));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3028,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3029
3030 b->row = 0;
3031 b->col = 0;
3032 b->icol = 0;
3033 b->reallocs = 0;
3034 b->saved_values = 0;
3035
3036 b->roworiented = PETSC_TRUE;
3037 b->nonew = 0;
3038 b->diag = 0;
3039 B->spptr = 0;
3040 B->info.nz_unneeded = (PetscReal)b->maxnz*b->bs2;
3041 b->keepnonzeropattern = PETSC_FALSE;
3042
3043 ierr = PetscObjectComposeFunction((PetscObject)B,"MatInvertBlockDiagonal_C",MatInvertBlockDiagonal_SeqBAIJ)PetscObjectComposeFunction_Private((PetscObject)B,"MatInvertBlockDiagonal_C"
,(PetscVoidFunction)(MatInvertBlockDiagonal_SeqBAIJ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3043,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3044 ierr = PetscObjectComposeFunction((PetscObject)B,"MatStoreValues_C",MatStoreValues_SeqBAIJ)PetscObjectComposeFunction_Private((PetscObject)B,"MatStoreValues_C"
,(PetscVoidFunction)(MatStoreValues_SeqBAIJ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3044,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3045 ierr = PetscObjectComposeFunction((PetscObject)B,"MatRetrieveValues_C",MatRetrieveValues_SeqBAIJ)PetscObjectComposeFunction_Private((PetscObject)B,"MatRetrieveValues_C"
,(PetscVoidFunction)(MatRetrieveValues_SeqBAIJ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3045,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3046 ierr = PetscObjectComposeFunction((PetscObject)B,"MatSeqBAIJSetColumnIndices_C",MatSeqBAIJSetColumnIndices_SeqBAIJ)PetscObjectComposeFunction_Private((PetscObject)B,"MatSeqBAIJSetColumnIndices_C"
,(PetscVoidFunction)(MatSeqBAIJSetColumnIndices_SeqBAIJ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3046,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3047 ierr = PetscObjectComposeFunction((PetscObject)B,"MatConvert_seqbaij_seqaij_C",MatConvert_SeqBAIJ_SeqAIJ)PetscObjectComposeFunction_Private((PetscObject)B,"MatConvert_seqbaij_seqaij_C"
,(PetscVoidFunction)(MatConvert_SeqBAIJ_SeqAIJ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3047,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3048 ierr = PetscObjectComposeFunction((PetscObject)B,"MatConvert_seqbaij_seqsbaij_C",MatConvert_SeqBAIJ_SeqSBAIJ)PetscObjectComposeFunction_Private((PetscObject)B,"MatConvert_seqbaij_seqsbaij_C"
,(PetscVoidFunction)(MatConvert_SeqBAIJ_SeqSBAIJ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3048,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3049 ierr = PetscObjectComposeFunction((PetscObject)B,"MatSeqBAIJSetPreallocation_C",MatSeqBAIJSetPreallocation_SeqBAIJ)PetscObjectComposeFunction_Private((PetscObject)B,"MatSeqBAIJSetPreallocation_C"
,(PetscVoidFunction)(MatSeqBAIJSetPreallocation_SeqBAIJ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3049,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3050 ierr = PetscObjectComposeFunction((PetscObject)B,"MatSeqBAIJSetPreallocationCSR_C",MatSeqBAIJSetPreallocationCSR_SeqBAIJ)PetscObjectComposeFunction_Private((PetscObject)B,"MatSeqBAIJSetPreallocationCSR_C"
,(PetscVoidFunction)(MatSeqBAIJSetPreallocationCSR_SeqBAIJ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3050,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3051 ierr = PetscObjectComposeFunction((PetscObject)B,"MatIsTranspose_C",MatIsTranspose_SeqBAIJ)PetscObjectComposeFunction_Private((PetscObject)B,"MatIsTranspose_C"
,(PetscVoidFunction)(MatIsTranspose_SeqBAIJ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3051,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3052#if defined(PETSC_HAVE_HYPRE)
3053 ierr = PetscObjectComposeFunction((PetscObject)B,"MatConvert_seqbaij_hypre_C",MatConvert_AIJ_HYPRE)PetscObjectComposeFunction_Private((PetscObject)B,"MatConvert_seqbaij_hypre_C"
,(PetscVoidFunction)(MatConvert_AIJ_HYPRE))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3053,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3054#endif
3055 ierr = PetscObjectComposeFunction((PetscObject)B,"MatConvert_seqbaij_is_C",MatConvert_XAIJ_IS)PetscObjectComposeFunction_Private((PetscObject)B,"MatConvert_seqbaij_is_C"
,(PetscVoidFunction)(MatConvert_XAIJ_IS))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3055,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3056 ierr = PetscObjectComposeFunction((PetscObject)B,"MatPtAP_is_seqbaij_C",MatPtAP_IS_XAIJ)PetscObjectComposeFunction_Private((PetscObject)B,"MatPtAP_is_seqbaij_C"
,(PetscVoidFunction)(MatPtAP_IS_XAIJ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3056,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3057 ierr = PetscObjectChangeTypeName((PetscObject)B,MATSEQBAIJ"seqbaij");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3057,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3058 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)
;
3059}
3060
3061PetscErrorCode MatDuplicateNoCreate_SeqBAIJ(Mat C,Mat A,MatDuplicateOption cpvalues,PetscBool mallocmatspace)
3062{
3063 Mat_SeqBAIJ *c = (Mat_SeqBAIJ*)C->data,*a = (Mat_SeqBAIJ*)A->data;
3064 PetscErrorCode ierr;
3065 PetscInt i,mbs = a->mbs,nz = a->nz,bs2 = a->bs2;
3066
3067 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 3067; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
3068 if (a->i[mbs] != nz) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"Corrupt matrix")return PetscError(((MPI_Comm)0x44000001),3068,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,77,PETSC_ERROR_INITIAL,"Corrupt matrix")
;
3069
3070 if (cpvalues == MAT_SHARE_NONZERO_PATTERN) {
3071 c->imax = a->imax;
3072 c->ilen = a->ilen;
3073 c->free_imax_ilen = PETSC_FALSE;
3074 } else {
3075 ierr = PetscMalloc2(mbs,&c->imax,mbs,&c->ilen)PetscMallocA(2,PETSC_FALSE,3075,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(mbs)*sizeof(**(&c->imax)),(&c->imax),
(size_t)(mbs)*sizeof(**(&c->ilen)),(&c->ilen))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3075,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3076 ierr = PetscLogObjectMemory((PetscObject)C,2*mbs*sizeof(PetscInt));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3076,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3077 for (i=0; i<mbs; i++) {
3078 c->imax[i] = a->imax[i];
3079 c->ilen[i] = a->ilen[i];
3080 }
3081 c->free_imax_ilen = PETSC_TRUE;
3082 }
3083
3084 /* allocate the matrix space */
3085 if (mallocmatspace) {
3086 if (cpvalues == MAT_SHARE_NONZERO_PATTERN) {
3087 ierr = PetscCalloc1(bs2*nz,&c->a)PetscMallocA(1,PETSC_TRUE,3087,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(bs2*nz)*sizeof(**(&c->a)),(&c->a))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3087,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3088 ierr = PetscLogObjectMemory((PetscObject)C,a->i[mbs]*bs2*sizeof(PetscScalar));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3088,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3089
3090 c->i = a->i;
3091 c->j = a->j;
3092 c->singlemalloc = PETSC_FALSE;
3093 c->free_a = PETSC_TRUE;
3094 c->free_ij = PETSC_FALSE;
3095 c->parent = A;
3096 C->preallocated = PETSC_TRUE;
3097 C->assembled = PETSC_TRUE;
3098
3099 ierr = PetscObjectReference((PetscObject)A);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3099,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3100 ierr = MatSetOption(A,MAT_NEW_NONZERO_LOCATION_ERR,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3100,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3101 ierr = MatSetOption(C,MAT_NEW_NONZERO_LOCATION_ERR,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3101,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3102 } else {
3103 ierr = PetscMalloc3(bs2*nz,&c->a,nz,&c->j,mbs+1,&c->i)PetscMallocA(3,PETSC_FALSE,3103,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(bs2*nz)*sizeof(**(&c->a)),(&c->a),(size_t
)(nz)*sizeof(**(&c->j)),(&c->j),(size_t)(mbs+1)
*sizeof(**(&c->i)),(&c->i))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3103,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3104 ierr = PetscLogObjectMemory((PetscObject)C,a->i[mbs]*(bs2*sizeof(PetscScalar)+sizeof(PetscInt))+(mbs+1)*sizeof(PetscInt));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3104,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3105
3106 c->singlemalloc = PETSC_TRUE;
3107 c->free_a = PETSC_TRUE;
3108 c->free_ij = PETSC_TRUE;
3109
3110 ierr = PetscArraycpy(c->i,a->i,mbs+1)((sizeof(*(c->i)) != sizeof(*(a->i))) || PetscMemcpy(c->
i,a->i,(mbs+1)*sizeof(*(c->i))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3110,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3111 if (mbs > 0) {
3112 ierr = PetscArraycpy(c->j,a->j,nz)((sizeof(*(c->j)) != sizeof(*(a->j))) || PetscMemcpy(c->
j,a->j,(nz)*sizeof(*(c->j))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3112,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3113 if (cpvalues == MAT_COPY_VALUES) {
3114 ierr = PetscArraycpy(c->a,a->a,bs2*nz)((sizeof(*(c->a)) != sizeof(*(a->a))) || PetscMemcpy(c->
a,a->a,(bs2*nz)*sizeof(*(c->a))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3114,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3115 } else {
3116 ierr = PetscArrayzero(c->a,bs2*nz)PetscMemzero(c->a,(bs2*nz)*sizeof(*(c->a)));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3116,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3117 }
3118 }
3119 C->preallocated = PETSC_TRUE;
3120 C->assembled = PETSC_TRUE;
3121 }
3122 }
3123
3124 c->roworiented = a->roworiented;
3125 c->nonew = a->nonew;
3126
3127 ierr = PetscLayoutReference(A->rmap,&C->rmap);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3127,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3128 ierr = PetscLayoutReference(A->cmap,&C->cmap);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3128,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3129
3130 c->bs2 = a->bs2;
3131 c->mbs = a->mbs;
3132 c->nbs = a->nbs;
3133
3134 if (a->diag) {
3135 if (cpvalues == MAT_SHARE_NONZERO_PATTERN) {
3136 c->diag = a->diag;
3137 c->free_diag = PETSC_FALSE;
3138 } else {
3139 ierr = PetscMalloc1(mbs+1,&c->diag)PetscMallocA(1,PETSC_FALSE,3139,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(mbs+1)*sizeof(**(&c->diag)),(&c->diag
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3139,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3140 ierr = PetscLogObjectMemory((PetscObject)C,(mbs+1)*sizeof(PetscInt));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3140,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3141 for (i=0; i<mbs; i++) c->diag[i] = a->diag[i];
3142 c->free_diag = PETSC_TRUE;
3143 }
3144 } else c->diag = 0;
3145
3146 c->nz = a->nz;
3147 c->maxnz = a->nz; /* Since we allocate exactly the right amount */
3148 c->solve_work = NULL((void*)0);
3149 c->mult_work = NULL((void*)0);
3150 c->sor_workt = NULL((void*)0);
3151 c->sor_work = NULL((void*)0);
3152
3153 c->compressedrow.use = a->compressedrow.use;
3154 c->compressedrow.nrows = a->compressedrow.nrows;
3155 if (a->compressedrow.use) {
3156 i = a->compressedrow.nrows;
3157 ierr = PetscMalloc2(i+1,&c->compressedrow.i,i+1,&c->compressedrow.rindex)PetscMallocA(2,PETSC_FALSE,3157,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(i+1)*sizeof(**(&c->compressedrow.i)),(&c
->compressedrow.i),(size_t)(i+1)*sizeof(**(&c->compressedrow
.rindex)),(&c->compressedrow.rindex))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3157,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3158 ierr = PetscLogObjectMemory((PetscObject)C,(2*i+1)*sizeof(PetscInt));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3158,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3159 ierr = PetscArraycpy(c->compressedrow.i,a->compressedrow.i,i+1)((sizeof(*(c->compressedrow.i)) != sizeof(*(a->compressedrow
.i))) || PetscMemcpy(c->compressedrow.i,a->compressedrow
.i,(i+1)*sizeof(*(c->compressedrow.i))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3159,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3160 ierr = PetscArraycpy(c->compressedrow.rindex,a->compressedrow.rindex,i)((sizeof(*(c->compressedrow.rindex)) != sizeof(*(a->compressedrow
.rindex))) || PetscMemcpy(c->compressedrow.rindex,a->compressedrow
.rindex,(i)*sizeof(*(c->compressedrow.rindex))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3160,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3161 } else {
3162 c->compressedrow.use = PETSC_FALSE;
3163 c->compressedrow.i = NULL((void*)0);
3164 c->compressedrow.rindex = NULL((void*)0);
3165 }
3166 C->nonzerostate = A->nonzerostate;
3167
3168 ierr = PetscFunctionListDuplicate(((PetscObject)A)->qlist,&((PetscObject)C)->qlist);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3168,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3169 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)
;
3170}
3171
3172PetscErrorCode MatDuplicate_SeqBAIJ(Mat A,MatDuplicateOption cpvalues,Mat *B)
3173{
3174 PetscErrorCode ierr;
3175
3176 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 3176; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
3177 ierr = MatCreate(PetscObjectComm((PetscObject)A),B);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3177,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3178 ierr = MatSetSizes(*B,A->rmap->N,A->cmap->n,A->rmap->N,A->cmap->n);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3178,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3179 ierr = MatSetType(*B,MATSEQBAIJ"seqbaij");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3179,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3180 ierr = MatDuplicateNoCreate_SeqBAIJ(*B,A,cpvalues,PETSC_TRUE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3180,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3181 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)
;
3182}
3183
3184PetscErrorCode MatLoad_SeqBAIJ(Mat newmat,PetscViewer viewer)
3185{
3186 Mat_SeqBAIJ *a;
3187 PetscErrorCode ierr;
3188 PetscInt i,nz,header[4],*rowlengths=0,M,N,bs = newmat->rmap->bs;
3189 PetscInt *mask,mbs,*jj,j,rowcount,nzcount,k,*browlengths,maskcount;
3190 PetscInt kmax,jcount,block,idx,point,nzcountb,extra_rows,rows,cols;
3191 PetscInt *masked,nmask,tmp,bs2,ishift;
3192 PetscMPIInt size;
3193 int fd;
3194 PetscScalar *aa;
3195 MPI_Comm comm;
3196 PetscBool isbinary;
3197
3198 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 3198; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
3199 ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERBINARY"binary",&isbinary);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3199,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3200 if (!isbinary) SETERRQ2(PetscObjectComm((PetscObject)newmat),PETSC_ERR_SUP,"Viewer type %s not yet supported for reading %s matrices",((PetscObject)viewer)->type_name,((PetscObject)newmat)->type_name)return PetscError(PetscObjectComm((PetscObject)newmat),3200,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",56
,PETSC_ERROR_INITIAL,"Viewer type %s not yet supported for reading %s matrices"
,((PetscObject)viewer)->type_name,((PetscObject)newmat)->
type_name)
;
3201
3202 /* force binary viewer to load .info file if it has not yet done so */
3203 ierr = PetscViewerSetUp(viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3203,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3204 ierr = PetscObjectGetComm((PetscObject)viewer,&comm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3204,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3205 ierr = PetscOptionsBegin(comm,NULL,"Options for loading SEQBAIJ matrix","Mat")0; do { PetscOptionItems PetscOptionsObjectBase; PetscOptionItems
*PetscOptionsObject = &PetscOptionsObjectBase; PetscMemzero
(PetscOptionsObject,sizeof(PetscOptionItems)); for (PetscOptionsObject
->count=(PetscOptionsPublish?-1:1); PetscOptionsObject->
count<2; PetscOptionsObject->count++) { PetscErrorCode _5_ierr
= PetscOptionsBegin_Private(PetscOptionsObject,comm,((void*)
0),"Options for loading SEQBAIJ matrix","Mat");do {if (__builtin_expect
(!!(_5_ierr),0)) return PetscError(((MPI_Comm)0x44000001),3205
,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_5_ierr,PETSC_ERROR_REPEAT," ");} while (0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3205,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3206 ierr = PetscOptionsInt("-matload_block_size","Set the blocksize used to store the matrix","MatLoad",bs,&bs,NULL)PetscOptionsInt_Private(PetscOptionsObject,"-matload_block_size"
,"Set the blocksize used to store the matrix","MatLoad",bs,&
bs,((void*)0),(-2147483647 - 1),2147483647)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3206,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3207 ierr = PetscOptionsEnd()_5_ierr = PetscOptionsEnd_Private(PetscOptionsObject);do {if (
__builtin_expect(!!(_5_ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3207,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_5_ierr,PETSC_ERROR_REPEAT," ");} while (0);}} while (0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3207,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3208 if (bs < 0) bs = 1;
3209 bs2 = bs*bs;
3210
3211 ierr = MPI_Comm_size(comm,&size);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3211,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3212 if (size > 1) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"view must have one processor")return PetscError(((MPI_Comm)0x44000001),3212,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,62,PETSC_ERROR_INITIAL,"view must have one processor")
;
3213 ierr = PetscViewerBinaryGetDescriptor(viewer,&fd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3213,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3214 ierr = PetscBinaryRead(fd,header,4,NULL((void*)0),PETSC_INT);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3214,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3215 if (header[0] != MAT_FILE_CLASSID1211216) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_FILE_UNEXPECTED,"not Mat object")return PetscError(((MPI_Comm)0x44000001),3215,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,79,PETSC_ERROR_INITIAL,"not Mat object")
;
3216 M = header[1]; N = header[2]; nz = header[3];
3217
3218 if (header[3] < 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_FILE_UNEXPECTED,"Matrix stored in special format, cannot load as SeqBAIJ")return PetscError(((MPI_Comm)0x44000001),3218,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,79,PETSC_ERROR_INITIAL,"Matrix stored in special format, cannot load as SeqBAIJ"
)
;
3219 if (M != N) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Can only do square matrices")return PetscError(((MPI_Comm)0x44000001),3219,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,56,PETSC_ERROR_INITIAL,"Can only do square matrices")
;
3220
3221 /*
3222 This code adds extra rows to make sure the number of rows is
3223 divisible by the blocksize
3224 */
3225 mbs = M/bs;
3226 extra_rows = bs - M + bs*(mbs);
3227 if (extra_rows == bs) extra_rows = 0;
3228 else mbs++;
3229 if (extra_rows) {
3230 ierr = PetscInfo(viewer,"Padding loaded matrix to match blocksize\n")PetscInfo_Private(__func__,viewer,"Padding loaded matrix to match blocksize\n"
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3230,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3231 }
3232
3233 /* Set global sizes if not already set */
3234 if (newmat->rmap->n < 0 && newmat->rmap->N < 0 && newmat->cmap->n < 0 && newmat->cmap->N < 0) {
3235 ierr = MatSetSizes(newmat,PETSC_DECIDE-1,PETSC_DECIDE-1,M+extra_rows,N+extra_rows);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3235,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3236 } else { /* Check if the matrix global sizes are correct */
3237 ierr = MatGetSize(newmat,&rows,&cols);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3237,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3238 if (rows < 0 && cols < 0) { /* user might provide local size instead of global size */
3239 ierr = MatGetLocalSize(newmat,&rows,&cols);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3239,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3240 }
3241 if (M != rows || N != cols) SETERRQ4(PETSC_COMM_SELF,PETSC_ERR_FILE_UNEXPECTED,"Matrix in file of different length (%d, %d) than the input matrix (%d, %d)",M,N,rows,cols)return PetscError(((MPI_Comm)0x44000001),3241,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,79,PETSC_ERROR_INITIAL,"Matrix in file of different length (%d, %d) than the input matrix (%d, %d)"
,M,N,rows,cols)
;
3242 }
3243
3244 /* read in row lengths */
3245 ierr = PetscMalloc1(M+extra_rows,&rowlengths)PetscMallocA(1,PETSC_FALSE,3245,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(M+extra_rows)*sizeof(**(&rowlengths)),(&rowlengths
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3245,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3246 ierr = PetscBinaryRead(fd,rowlengths,M,NULL((void*)0),PETSC_INT);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3246,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3247 for (i=0; i<extra_rows; i++) rowlengths[M+i] = 1;
3248
3249 /* read in column indices */
3250 ierr = PetscMalloc1(nz+extra_rows,&jj)PetscMallocA(1,PETSC_FALSE,3250,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(nz+extra_rows)*sizeof(**(&jj)),(&jj))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3250,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3251 ierr = PetscBinaryRead(fd,jj,nz,NULL((void*)0),PETSC_INT);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3251,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3252 for (i=0; i<extra_rows; i++) jj[nz+i] = M+i;
3253
3254 /* loop over row lengths determining block row lengths */
3255 ierr = PetscCalloc1(mbs,&browlengths)PetscMallocA(1,PETSC_TRUE,3255,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(mbs)*sizeof(**(&browlengths)),(&browlengths
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3255,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3256 ierr = PetscMalloc2(mbs,&mask,mbs,&masked)PetscMallocA(2,PETSC_FALSE,3256,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(mbs)*sizeof(**(&mask)),(&mask),(size_t)(mbs
)*sizeof(**(&masked)),(&masked))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3256,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3257 ierr = PetscArrayzero(mask,mbs)PetscMemzero(mask,(mbs)*sizeof(*(mask)));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3257,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3258 rowcount = 0;
3259 nzcount = 0;
3260 for (i=0; i<mbs; i++) {
3261 nmask = 0;
3262 for (j=0; j<bs; j++) {
3263 kmax = rowlengths[rowcount];
3264 for (k=0; k<kmax; k++) {
3265 tmp = jj[nzcount++]/bs;
3266 if (!mask[tmp]) {masked[nmask++] = tmp; mask[tmp] = 1;}
3267 }
3268 rowcount++;
3269 }
3270 browlengths[i] += nmask;
3271 /* zero out the mask elements we set */
3272 for (j=0; j<nmask; j++) mask[masked[j]] = 0;
3273 }
3274
3275 /* Do preallocation */
3276 ierr = MatSeqBAIJSetPreallocation(newmat,bs,0,browlengths);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3276,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3277 a = (Mat_SeqBAIJ*)newmat->data;
3278
3279 /* set matrix "i" values */
3280 a->i[0] = 0;
3281 for (i=1; i<= mbs; i++) {
3282 a->i[i] = a->i[i-1] + browlengths[i-1];
3283 a->ilen[i-1] = browlengths[i-1];
3284 }
3285 a->nz = 0;
3286 for (i=0; i<mbs; i++) a->nz += browlengths[i];
3287
3288 /* read in nonzero values */
3289 ierr = PetscMalloc1(nz+extra_rows,&aa)PetscMallocA(1,PETSC_FALSE,3289,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(nz+extra_rows)*sizeof(**(&aa)),(&aa))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3289,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3290 ierr = PetscBinaryRead(fd,aa,nz,NULL((void*)0),PETSC_SCALARPETSC_DOUBLE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3290,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3291 for (i=0; i<extra_rows; i++) aa[nz+i] = 1.0;
3292
3293 /* set "a" and "j" values into matrix */
3294 nzcount = 0; jcount = 0;
3295 for (i=0; i<mbs; i++) {
3296 nzcountb = nzcount;
3297 nmask = 0;
3298 for (j=0; j<bs; j++) {
3299 kmax = rowlengths[i*bs+j];
3300 for (k=0; k<kmax; k++) {
3301 tmp = jj[nzcount++]/bs;
3302 if (!mask[tmp]) { masked[nmask++] = tmp; mask[tmp] = 1;}
3303 }
3304 }
3305 /* sort the masked values */
3306 ierr = PetscSortInt(nmask,masked);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3306,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3307
3308 /* set "j" values into matrix */
3309 maskcount = 1;
3310 for (j=0; j<nmask; j++) {
3311 a->j[jcount++] = masked[j];
3312 mask[masked[j]] = maskcount++;
3313 }
3314 /* set "a" values into matrix */
3315 ishift = bs2*a->i[i];
3316 for (j=0; j<bs; j++) {
3317 kmax = rowlengths[i*bs+j];
3318 for (k=0; k<kmax; k++) {
3319 tmp = jj[nzcountb]/bs;
3320 block = mask[tmp] - 1;
3321 point = jj[nzcountb] - bs*tmp;
3322 idx = ishift + bs2*block + j + bs*point;
3323 a->a[idx] = (MatScalar)aa[nzcountb++];
3324 }
3325 }
3326 /* zero out the mask elements we set */
3327 for (j=0; j<nmask; j++) mask[masked[j]] = 0;
3328 }
3329 if (jcount != a->nz) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_FILE_UNEXPECTED,"Bad binary matrix")return PetscError(((MPI_Comm)0x44000001),3329,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,79,PETSC_ERROR_INITIAL,"Bad binary matrix")
;
3330
3331 ierr = PetscFree(rowlengths)((*PetscTrFree)((void*)(rowlengths),3331,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((rowlengths) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3331,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3332 ierr = PetscFree(browlengths)((*PetscTrFree)((void*)(browlengths),3332,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((browlengths) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3332,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3333 ierr = PetscFree(aa)((*PetscTrFree)((void*)(aa),3333,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((aa) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3333,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3334 ierr = PetscFree(jj)((*PetscTrFree)((void*)(jj),3334,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((jj) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3334,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3335 ierr = PetscFree2(mask,masked)PetscFreeA(2,3335,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,&(mask),&(masked))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3335,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3336
3337 ierr = MatAssemblyBegin(newmat,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3337,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3338 ierr = MatAssemblyEnd(newmat,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3338,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3339 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)
;
3340}
3341
3342/*@C
3343 MatCreateSeqBAIJ - Creates a sparse matrix in block AIJ (block
3344 compressed row) format. For good matrix assembly performance the
3345 user should preallocate the matrix storage by setting the parameter nz
3346 (or the array nnz). By setting these parameters accurately, performance
3347 during matrix assembly can be increased by more than a factor of 50.
3348
3349 Collective
3350
3351 Input Parameters:
3352+ comm - MPI communicator, set to PETSC_COMM_SELF
3353. bs - size of block, the blocks are ALWAYS square. One can use MatSetBlockSizes() to set a different row and column blocksize but the row
3354 blocksize always defines the size of the blocks. The column blocksize sets the blocksize of the vectors obtained with MatCreateVecs()
3355. m - number of rows
3356. n - number of columns
3357. nz - number of nonzero blocks per block row (same for all rows)
3358- nnz - array containing the number of nonzero blocks in the various block rows
3359 (possibly different for each block row) or NULL
3360
3361 Output Parameter:
3362. A - the matrix
3363
3364 It is recommended that one use the MatCreate(), MatSetType() and/or MatSetFromOptions(),
3365 MatXXXXSetPreallocation() paradigm instead of this routine directly.
3366 [MatXXXXSetPreallocation() is, for example, MatSeqAIJSetPreallocation]
3367
3368 Options Database Keys:
3369+ -mat_no_unroll - uses code that does not unroll the loops in the
3370 block calculations (much slower)
3371- -mat_block_size - size of the blocks to use
3372
3373 Level: intermediate
3374
3375 Notes:
3376 The number of rows and columns must be divisible by blocksize.
3377
3378 If the nnz parameter is given then the nz parameter is ignored
3379
3380 A nonzero block is any block that as 1 or more nonzeros in it
3381
3382 The block AIJ format is fully compatible with standard Fortran 77
3383 storage. That is, the stored row and column indices can begin at
3384 either one (as in Fortran) or zero. See the users' manual for details.
3385
3386 Specify the preallocated storage with either nz or nnz (not both).
3387 Set nz=PETSC_DEFAULT and nnz=NULL for PETSc to control dynamic memory
3388 allocation. See Users-Manual: ch_mat for details.
3389 matrices.
3390
3391.seealso: MatCreate(), MatCreateSeqAIJ(), MatSetValues(), MatCreateBAIJ()
3392@*/
3393PetscErrorCode MatCreateSeqBAIJ(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt nz,const PetscInt nnz[],Mat *A)
3394{
3395 PetscErrorCode ierr;
3396
3397 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 3397; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
3398 ierr = MatCreate(comm,A);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3398,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3399 ierr = MatSetSizes(*A,m,n,m,n);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3399,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3400 ierr = MatSetType(*A,MATSEQBAIJ"seqbaij");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3400,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3401 ierr = MatSeqBAIJSetPreallocation(*A,bs,nz,(PetscInt*)nnz);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3401,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3402 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)
;
3403}
3404
3405/*@C
3406 MatSeqBAIJSetPreallocation - Sets the block size and expected nonzeros
3407 per row in the matrix. For good matrix assembly performance the
3408 user should preallocate the matrix storage by setting the parameter nz
3409 (or the array nnz). By setting these parameters accurately, performance
3410 during matrix assembly can be increased by more than a factor of 50.
3411
3412 Collective
3413
3414 Input Parameters:
3415+ B - the matrix
3416. bs - size of block, the blocks are ALWAYS square. One can use MatSetBlockSizes() to set a different row and column blocksize but the row
3417 blocksize always defines the size of the blocks. The column blocksize sets the blocksize of the vectors obtained with MatCreateVecs()
3418. nz - number of block nonzeros per block row (same for all rows)
3419- nnz - array containing the number of block nonzeros in the various block rows
3420 (possibly different for each block row) or NULL
3421
3422 Options Database Keys:
3423+ -mat_no_unroll - uses code that does not unroll the loops in the
3424 block calculations (much slower)
3425- -mat_block_size - size of the blocks to use
3426
3427 Level: intermediate
3428
3429 Notes:
3430 If the nnz parameter is given then the nz parameter is ignored
3431
3432 You can call MatGetInfo() to get information on how effective the preallocation was;
3433 for example the fields mallocs,nz_allocated,nz_used,nz_unneeded;
3434 You can also run with the option -info and look for messages with the string
3435 malloc in them to see if additional memory allocation was needed.
3436
3437 The block AIJ format is fully compatible with standard Fortran 77
3438 storage. That is, the stored row and column indices can begin at
3439 either one (as in Fortran) or zero. See the users' manual for details.
3440
3441 Specify the preallocated storage with either nz or nnz (not both).
3442 Set nz=PETSC_DEFAULT and nnz=NULL for PETSc to control dynamic memory
3443 allocation. See Users-Manual: ch_mat for details.
3444
3445.seealso: MatCreate(), MatCreateSeqAIJ(), MatSetValues(), MatCreateBAIJ(), MatGetInfo()
3446@*/
3447PetscErrorCode MatSeqBAIJSetPreallocation(Mat B,PetscInt bs,PetscInt nz,const PetscInt nnz[])
3448{
3449 PetscErrorCode ierr;
3450
3451 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 3451; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
3452 PetscValidHeaderSpecific(B,MAT_CLASSID,1)do { if (!B) return PetscError(((MPI_Comm)0x44000001),3452,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",85
,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (!PetscCheckPointer
(B,PETSC_OBJECT)) return PetscError(((MPI_Comm)0x44000001),3452
,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(B))->classid != MAT_CLASSID) { if (
((PetscObject)(B))->classid == -1) return PetscError(((MPI_Comm
)0x44000001),3452,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),3452,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",62
,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d",1
); } } while (0)
;
3453 PetscValidType(B,1)do { if (!((PetscObject)B)->type_name) return PetscError((
(MPI_Comm)0x44000001),3453,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,73,PETSC_ERROR_INITIAL,"%s object's type is not set: Argument # %d"
,((PetscObject)B)->class_name,1); } while (0)
;
3454 PetscValidLogicalCollectiveInt(B,bs,2)do { PetscErrorCode _7_ierr; PetscInt b1[2],b2[2]; b1[0] = -bs
; b1[1] = bs; _7_ierr = (PetscAllreduceBarrierCheck(PetscObjectComm
((PetscObject)B),2,3454,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((petsc_allreduce_ct += PetscMPIParallelComm((PetscObjectComm
((PetscObject)B))),0) || MPI_Allreduce((b1),(b2),(2),(((MPI_Datatype
)0x4c000405)),((MPI_Op)(0x58000001)),(PetscObjectComm((PetscObject
)B)))));do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError
(((MPI_Comm)0x44000001),3454,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0); if (-b2[0] != b2
[1]) return PetscError(PetscObjectComm((PetscObject)B),3454,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",62
,PETSC_ERROR_INITIAL,"Int value must be same on all processes, argument # %d"
,2); } while (0)
;
3455 ierr = PetscTryMethod(B,"MatSeqBAIJSetPreallocation_C",(Mat,PetscInt,PetscInt,const PetscInt[]),(B,bs,nz,nnz))0; do { PetscErrorCode (*_7_f)(Mat,PetscInt,PetscInt,const PetscInt
[]), _7_ierr; _7_ierr = PetscObjectQueryFunction_Private(((PetscObject
)(B)),("MatSeqBAIJSetPreallocation_C"),(PetscVoidFunction*)(&
_7_f));do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError
(((MPI_Comm)0x44000001),3455,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0); if (_7_f) {_7_ierr
= (*_7_f)(B,bs,nz,nnz);do {if (__builtin_expect(!!(_7_ierr),
0)) return PetscError(((MPI_Comm)0x44000001),3455,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} } while(0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3455,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3456 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)
;
3457}
3458
3459/*@C
3460 MatSeqBAIJSetPreallocationCSR - Allocates memory for a sparse sequential matrix in AIJ format
3461 (the default sequential PETSc format).
3462
3463 Collective
3464
3465 Input Parameters:
3466+ B - the matrix
3467. i - the indices into j for the start of each local row (starts with zero)
3468. j - the column indices for each local row (starts with zero) these must be sorted for each row
3469- v - optional values in the matrix
3470
3471 Level: developer
3472
3473 Notes:
3474 The order of the entries in values is specified by the MatOption MAT_ROW_ORIENTED. For example, C programs
3475 may want to use the default MAT_ROW_ORIENTED=PETSC_TRUE and use an array v[nnz][bs][bs] where the second index is
3476 over rows within a block and the last index is over columns within a block row. Fortran programs will likely set
3477 MAT_ROW_ORIENTED=PETSC_FALSE and use a Fortran array v(bs,bs,nnz) in which the first index is over rows within a
3478 block column and the second index is over columns within a block.
3479
3480.seealso: MatCreate(), MatCreateSeqBAIJ(), MatSetValues(), MatSeqBAIJSetPreallocation(), MATSEQBAIJ
3481@*/
3482PetscErrorCode MatSeqBAIJSetPreallocationCSR(Mat B,PetscInt bs,const PetscInt i[],const PetscInt j[], const PetscScalar v[])
3483{
3484 PetscErrorCode ierr;
3485
3486 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 3486; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
3487 PetscValidHeaderSpecific(B,MAT_CLASSID,1)do { if (!B) return PetscError(((MPI_Comm)0x44000001),3487,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",85
,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (!PetscCheckPointer
(B,PETSC_OBJECT)) return PetscError(((MPI_Comm)0x44000001),3487
,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(B))->classid != MAT_CLASSID) { if (
((PetscObject)(B))->classid == -1) return PetscError(((MPI_Comm
)0x44000001),3487,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),3487,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",62
,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d",1
); } } while (0)
;
3488 PetscValidType(B,1)do { if (!((PetscObject)B)->type_name) return PetscError((
(MPI_Comm)0x44000001),3488,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,73,PETSC_ERROR_INITIAL,"%s object's type is not set: Argument # %d"
,((PetscObject)B)->class_name,1); } while (0)
;
3489 PetscValidLogicalCollectiveInt(B,bs,2)do { PetscErrorCode _7_ierr; PetscInt b1[2],b2[2]; b1[0] = -bs
; b1[1] = bs; _7_ierr = (PetscAllreduceBarrierCheck(PetscObjectComm
((PetscObject)B),2,3489,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
) || ((petsc_allreduce_ct += PetscMPIParallelComm((PetscObjectComm
((PetscObject)B))),0) || MPI_Allreduce((b1),(b2),(2),(((MPI_Datatype
)0x4c000405)),((MPI_Op)(0x58000001)),(PetscObjectComm((PetscObject
)B)))));do {if (__builtin_expect(!!(_7_ierr),0)) return PetscError
(((MPI_Comm)0x44000001),3489,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0); if (-b2[0] != b2
[1]) return PetscError(PetscObjectComm((PetscObject)B),3489,__func__
,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c",62
,PETSC_ERROR_INITIAL,"Int value must be same on all processes, argument # %d"
,2); } while (0)
;
3490 ierr = PetscTryMethod(B,"MatSeqBAIJSetPreallocationCSR_C",(Mat,PetscInt,const PetscInt[],const PetscInt[],const PetscScalar[]),(B,bs,i,j,v))0; do { PetscErrorCode (*_7_f)(Mat,PetscInt,const PetscInt[],
const PetscInt[],const PetscScalar[]), _7_ierr; _7_ierr = PetscObjectQueryFunction_Private
(((PetscObject)(B)),("MatSeqBAIJSetPreallocationCSR_C"),(PetscVoidFunction
*)(&_7_f));do {if (__builtin_expect(!!(_7_ierr),0)) return
PetscError(((MPI_Comm)0x44000001),3490,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0); if (_7_f) {_7_ierr
= (*_7_f)(B,bs,i,j,v);do {if (__builtin_expect(!!(_7_ierr),0
)) return PetscError(((MPI_Comm)0x44000001),3490,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,_7_ierr,PETSC_ERROR_REPEAT," ");} while (0);} } while(0)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3490,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3491 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)
;
3492}
3493
3494
3495/*@
3496 MatCreateSeqBAIJWithArrays - Creates an sequential BAIJ matrix using matrix elements provided by the user.
3497
3498 Collective
3499
3500 Input Parameters:
3501+ comm - must be an MPI communicator of size 1
3502. bs - size of block
3503. m - number of rows
3504. n - number of columns
3505. i - row indices; that is i[0] = 0, i[row] = i[row-1] + number of elements in that row block row of the matrix
3506. j - column indices
3507- a - matrix values
3508
3509 Output Parameter:
3510. mat - the matrix
3511
3512 Level: advanced
3513
3514 Notes:
3515 The i, j, and a arrays are not copied by this routine, the user must free these arrays
3516 once the matrix is destroyed
3517
3518 You cannot set new nonzero locations into this matrix, that will generate an error.
3519
3520 The i and j indices are 0 based
3521
3522 When block size is greater than 1 the matrix values must be stored using the BAIJ storage format (see the BAIJ code to determine this).
3523
3524 The order of the entries in values is the same as the block compressed sparse row storage format; that is, it is
3525 the same as a three dimensional array in Fortran values(bs,bs,nnz) that contains the first column of the first
3526 block, followed by the second column of the first block etc etc. That is, the blocks are contiguous in memory
3527 with column-major ordering within blocks.
3528
3529.seealso: MatCreate(), MatCreateBAIJ(), MatCreateSeqBAIJ()
3530
3531@*/
3532PetscErrorCode MatCreateSeqBAIJWithArrays(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt i[],PetscInt j[],PetscScalar a[],Mat *mat)
3533{
3534 PetscErrorCode ierr;
3535 PetscInt ii;
3536 Mat_SeqBAIJ *baij;
3537
3538 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 3538; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
3539 if (bs != 1) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"block size %D > 1 is not supported yet",bs)return PetscError(((MPI_Comm)0x44000001),3539,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,56,PETSC_ERROR_INITIAL,"block size %D > 1 is not supported yet"
,bs)
;
3540 if (m > 0 && i[0]) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"i (row indices) must start with 0")return PetscError(((MPI_Comm)0x44000001),3540,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"i (row indices) must start with 0")
;
3541
3542 ierr = MatCreate(comm,mat);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3542,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3543 ierr = MatSetSizes(*mat,m,n,m,n);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3543,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3544 ierr = MatSetType(*mat,MATSEQBAIJ"seqbaij");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3544,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3545 ierr = MatSeqBAIJSetPreallocation(*mat,bs,MAT_SKIP_ALLOCATION-4,0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3545,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3546 baij = (Mat_SeqBAIJ*)(*mat)->data;
3547 ierr = PetscMalloc2(m,&baij->imax,m,&baij->ilen)PetscMallocA(2,PETSC_FALSE,3547,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,(size_t)(m)*sizeof(**(&baij->imax)),(&baij->imax
),(size_t)(m)*sizeof(**(&baij->ilen)),(&baij->ilen
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3547,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3548 ierr = PetscLogObjectMemory((PetscObject)*mat,2*m*sizeof(PetscInt));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3548,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3549
3550 baij->i = i;
3551 baij->j = j;
3552 baij->a = a;
3553
3554 baij->singlemalloc = PETSC_FALSE;
3555 baij->nonew = -1; /*this indicates that inserting a new value in the matrix that generates a new nonzero is an error*/
3556 baij->free_a = PETSC_FALSE;
3557 baij->free_ij = PETSC_FALSE;
3558
3559 for (ii=0; ii<m; ii++) {
3560 baij->ilen[ii] = baij->imax[ii] = i[ii+1] - i[ii];
3561#if defined(PETSC_USE_DEBUG1)
3562 if (i[ii+1] - i[ii] < 0) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Negative row length in i (row indices) row = %d length = %d",ii,i[ii+1] - i[ii])return PetscError(((MPI_Comm)0x44000001),3562,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Negative row length in i (row indices) row = %d length = %d"
,ii,i[ii+1] - i[ii])
;
3563#endif
3564 }
3565#if defined(PETSC_USE_DEBUG1)
3566 for (ii=0; ii<baij->i[m]; ii++) {
3567 if (j[ii] < 0) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Negative column index at location = %d index = %d",ii,j[ii])return PetscError(((MPI_Comm)0x44000001),3567,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Negative column index at location = %d index = %d"
,ii,j[ii])
;
3568 if (j[ii] > n - 1) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Column index to large at location = %d index = %d",ii,j[ii])return PetscError(((MPI_Comm)0x44000001),3568,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,63,PETSC_ERROR_INITIAL,"Column index to large at location = %d index = %d"
,ii,j[ii])
;
3569 }
3570#endif
3571
3572 ierr = MatAssemblyBegin(*mat,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3572,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3573 ierr = MatAssemblyEnd(*mat,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3573,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3574 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)
;
3575}
3576
3577PetscErrorCode MatCreateMPIMatConcatenateSeqMat_SeqBAIJ(MPI_Comm comm,Mat inmat,PetscInt n,MatReuse scall,Mat *outmat)
3578{
3579 PetscErrorCode ierr;
3580 PetscMPIInt size;
3581
3582 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c";
petscstack->line[petscstack->currentsize] = 3582; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
3583 ierr = MPI_Comm_size(comm,&size);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3583,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3584 if (size == 1 && scall == MAT_REUSE_MATRIX) {
3585 ierr = MatCopy(inmat,*outmat,SAME_NONZERO_PATTERN);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3585,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3586 } else {
3587 ierr = MatCreateMPIMatConcatenateSeqMat_MPIBAIJ(comm,inmat,n,scall,outmat);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),3587,__func__,"/sandbox/petsc/petsc.next/src/mat/impls/baij/seq/baij.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
3588 }
3589 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)
;
3590}