Lines Matching refs:A
17 PETSC_INTERN PetscErrorCode MatConvert_SeqAIJSELL_SeqAIJ(Mat A, MatType type, MatReuse reuse, Mat *newmat)
22 Mat_SeqAIJSELL *aijsell = (Mat_SeqAIJSELL *)A->spptr;
25 if (reuse == MAT_INITIAL_MATRIX) PetscCall(MatDuplicate(A, MAT_COPY_VALUES, &B));
53 static PetscErrorCode MatDestroy_SeqAIJSELL(Mat A)
55 Mat_SeqAIJSELL *aijsell = (Mat_SeqAIJSELL *)A->spptr;
61 /* Clean up everything in the Mat_SeqAIJSELL data structure, then free A->spptr. */
63 PetscCall(PetscFree(A->spptr));
66 /* Change the type of A back to SEQAIJ and use MatDestroy_SeqAIJ()
68 PetscCall(PetscObjectChangeTypeName((PetscObject)A, MATSEQAIJ));
72 PetscCall(PetscObjectComposeFunction((PetscObject)A, "MatConvert_seqaijsell_seqaij_C", NULL));
73 PetscCall(MatDestroy_SeqAIJ(A));
79 PETSC_INTERN PetscErrorCode MatSeqAIJSELL_build_shadow(Mat A)
81 Mat_SeqAIJSELL *aijsell = (Mat_SeqAIJSELL *)A->spptr;
85 PetscCall(PetscObjectStateGet((PetscObject)A, &state));
91 PetscCall(PetscLogEventBegin(MAT_Convert, A, 0, 0, 0));
93 PetscCall(MatConvert_SeqAIJ_SeqSELL(A, MATSEQSELL, MAT_REUSE_MATRIX, &aijsell->S));
95 PetscCall(MatConvert_SeqAIJ_SeqSELL(A, MATSEQSELL, MAT_INITIAL_MATRIX, &aijsell->S));
97 PetscCall(PetscLogEventEnd(MAT_Convert, A, 0, 0, 0));
100 PetscCall(PetscObjectStateGet((PetscObject)A, &aijsell->state));
104 static PetscErrorCode MatDuplicate_SeqAIJSELL(Mat A, MatDuplicateOption op, Mat *M)
110 PetscCall(MatDuplicate_SeqAIJ(A, op, M));
111 aijsell = (Mat_SeqAIJSELL *)A->spptr;
116 if (aijsell->eager_shadow) PetscCall(MatSeqAIJSELL_build_shadow(A));
120 static PetscErrorCode MatAssemblyEnd_SeqAIJSELL(Mat A, MatAssemblyType mode)
122 Mat_SeqAIJ *a = (Mat_SeqAIJ *)A->data;
123 Mat_SeqAIJSELL *aijsell = (Mat_SeqAIJSELL *)A->spptr;
139 PetscCall(MatAssemblyEnd_SeqAIJ(A, mode));
143 if (aijsell->eager_shadow) PetscCall(MatSeqAIJSELL_build_shadow(A));
147 static PetscErrorCode MatMult_SeqAIJSELL(Mat A, Vec xx, Vec yy)
149 Mat_SeqAIJSELL *aijsell = (Mat_SeqAIJSELL *)A->spptr;
152 PetscCall(MatSeqAIJSELL_build_shadow(A));
157 static PetscErrorCode MatMultTranspose_SeqAIJSELL(Mat A, Vec xx, Vec yy)
159 Mat_SeqAIJSELL *aijsell = (Mat_SeqAIJSELL *)A->spptr;
162 PetscCall(MatSeqAIJSELL_build_shadow(A));
167 static PetscErrorCode MatMultAdd_SeqAIJSELL(Mat A, Vec xx, Vec yy, Vec zz)
169 Mat_SeqAIJSELL *aijsell = (Mat_SeqAIJSELL *)A->spptr;
172 PetscCall(MatSeqAIJSELL_build_shadow(A));
177 static PetscErrorCode MatMultTransposeAdd_SeqAIJSELL(Mat A, Vec xx, Vec yy, Vec zz)
179 Mat_SeqAIJSELL *aijsell = (Mat_SeqAIJSELL *)A->spptr;
182 PetscCall(MatSeqAIJSELL_build_shadow(A));
187 static PetscErrorCode MatSOR_SeqAIJSELL(Mat A, Vec bb, PetscReal omega, MatSORType flag, PetscReal fshift, PetscInt its, PetscInt lits, Vec xx)
189 Mat_SeqAIJSELL *aijsell = (Mat_SeqAIJSELL *)A->spptr;
192 PetscCall(MatSeqAIJSELL_build_shadow(A));
201 PETSC_INTERN PetscErrorCode MatConvert_SeqAIJ_SeqAIJSELL(Mat A, MatType type, MatReuse reuse, Mat *newmat)
210 if (reuse == MAT_INITIAL_MATRIX) PetscCall(MatDuplicate(A, MAT_COPY_VALUES, &B));
212 PetscCall(PetscObjectTypeCompare((PetscObject)A, type, &sametype));
234 PetscOptionsBegin(PetscObjectComm((PetscObject)A), ((PetscObject)A)->prefix, "AIJSELL Options", "Mat");
238 /* If A has already been assembled and eager shadowing is specified, build the shadow matrix. */
239 if (A->assembled && aijsell->eager_shadow) PetscCall(MatSeqAIJSELL_build_shadow(A));
268 . A - the matrix
289 PetscErrorCode MatCreateSeqAIJSELL(MPI_Comm comm, PetscInt m, PetscInt n, PetscInt nz, const PetscInt nnz[], Mat *A)
292 PetscCall(MatCreate(comm, A));
293 PetscCall(MatSetSizes(*A, m, n, m, n));
294 PetscCall(MatSetType(*A, MATSEQAIJSELL));
295 PetscCall(MatSeqAIJSetPreallocation_SeqAIJ(*A, nz, nnz));
299 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJSELL(Mat A)
302 PetscCall(MatSetType(A, MATSEQAIJ));
303 PetscCall(MatConvert_SeqAIJ_SeqAIJSELL(A, MATSEQAIJSELL, MAT_INPLACE_MATRIX, &A));