Lines Matching refs:A

9 static PetscErrorCode MatSetValues_MPI_Hash(Mat A, PetscInt m, const PetscInt *rows, PetscInt n, co…  in MatSetValues_MPI_Hash()  argument
11 PetscConcat(Mat_MPI, TYPE) *a = (PetscConcat(Mat_MPI, TYPE) *)A->data; in MatSetValues_MPI_Hash()
12 const PetscInt rStart = A->rmap->rstart; in MatSetValues_MPI_Hash()
13 const PetscInt rEnd = A->rmap->rend; in MatSetValues_MPI_Hash()
14 const PetscInt cStart = A->cmap->rstart; in MatSetValues_MPI_Hash()
15 const PetscInt cEnd = A->cmap->rend; in MatSetValues_MPI_Hash()
17 const PetscInt bs = A->rmap->bs; in MatSetValues_MPI_Hash()
19 const PetscBool ignorezeroentries = ((Mat_SeqAIJ *)a->A->data)->ignorezeroentries; in MatSetValues_MPI_Hash()
26 …PetscCheck(!A->nooffprocentries, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Setting off process row %"… in MatSetValues_MPI_Hash()
28 A->assembled = PETSC_FALSE; in MatSetValues_MPI_Hash()
30 …PetscCall(MatStashValuesRow_Private(&A->stash, rows[r], n, cols, PetscSafePointerPlusOffset(values… in MatSetValues_MPI_Hash()
32 …PetscCall(MatStashValuesCol_Private(&A->stash, rows[r], n, cols, PetscSafePointerPlusOffset(values… in MatSetValues_MPI_Hash()
45 PetscCall(MatSetValue(a->A, rows[r] - rStart, cols[c] - cStart, value, addv)); in MatSetValues_MPI_Hash()
56 static PetscErrorCode MatAssemblyBegin_MPI_Hash(Mat A, PETSC_UNUSED MatAssemblyType type) in MatAssemblyBegin_MPI_Hash() argument
58 PetscConcat(Mat_MPI, TYPE) *a = (PetscConcat(Mat_MPI, TYPE) *)A->data; in MatAssemblyBegin_MPI_Hash()
62 if (a->donotstash || A->nooffprocentries) PetscFunctionReturn(PETSC_SUCCESS); in MatAssemblyBegin_MPI_Hash()
63 PetscCall(MatStashScatterBegin_Private(A, &A->stash, A->rmap->range)); in MatAssemblyBegin_MPI_Hash()
64 PetscCall(MatStashGetInfo_Private(&A->stash, &nstash, &reallocs)); in MatAssemblyBegin_MPI_Hash()
65 …PetscCall(PetscInfo(A, "Stash has %" PetscInt_FMT " entries, uses %" PetscInt_FMT " mallocs.\n", n… in MatAssemblyBegin_MPI_Hash()
69 static PetscErrorCode MatFinishScatterAndSetValues_MPI_Hash(Mat A) in MatFinishScatterAndSetValues_MPI_Hash() argument
71 PetscConcat(Mat_MPI, TYPE) *a = (PetscConcat(Mat_MPI, TYPE) *)A->data; in MatFinishScatterAndSetValues_MPI_Hash()
78 if (!a->donotstash && !A->nooffprocentries) { in MatFinishScatterAndSetValues_MPI_Hash()
80 PetscCall(MatStashScatterGetMesg_Private(&A->stash, &n, &row, &col, &val, &flg)); in MatFinishScatterAndSetValues_MPI_Hash()
91 PetscCall(MatSetValues_MPI_Hash(A, 1, row + i, ncols, col + i, val + i, A->insertmode)); in MatFinishScatterAndSetValues_MPI_Hash()
95 PetscCall(MatStashScatterEnd_Private(&A->stash)); in MatFinishScatterAndSetValues_MPI_Hash()
100 static PetscErrorCode MatAssemblyEnd_MPI_Hash(Mat A, MatAssemblyType type) in MatAssemblyEnd_MPI_Hash() argument
102 PetscConcat(Mat_MPI, TYPE) *a = (PetscConcat(Mat_MPI, TYPE) *)A->data; in MatAssemblyEnd_MPI_Hash()
105 PetscCall(MatFinishScatterAndSetValues_MPI_Hash(A)); in MatAssemblyEnd_MPI_Hash()
108 A->insertmode = NOT_SET_VALUES; /* this was set by the previous calls to MatSetValues() */ in MatAssemblyEnd_MPI_Hash()
110 A->ops[0] = a->cops; in MatAssemblyEnd_MPI_Hash()
111 A->hash_active = PETSC_FALSE; in MatAssemblyEnd_MPI_Hash()
113 PetscCall(MatAssemblyBegin(a->A, MAT_FINAL_ASSEMBLY)); in MatAssemblyEnd_MPI_Hash()
114 PetscCall(MatAssemblyEnd(a->A, MAT_FINAL_ASSEMBLY)); in MatAssemblyEnd_MPI_Hash()
117 PetscCall(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY)); in MatAssemblyEnd_MPI_Hash()
118 PetscCall(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY)); in MatAssemblyEnd_MPI_Hash()
122 static PetscErrorCode MatCopyHashToXAIJ_MPI_Hash(Mat A, Mat B) in MatCopyHashToXAIJ_MPI_Hash() argument
124 …PetscConcat(Mat_MPI, TYPE) *a = (PetscConcat(Mat_MPI, TYPE) *)A->data, *b = (PetscConcat(Mat_MPI, … in MatCopyHashToXAIJ_MPI_Hash()
128 PetscCall(MatAssemblyBegin_MPI_Hash(A, /*unused*/ MAT_FINAL_ASSEMBLY)); in MatCopyHashToXAIJ_MPI_Hash()
129 PetscCall(MatFinishScatterAndSetValues_MPI_Hash(A)); in MatCopyHashToXAIJ_MPI_Hash()
131 PetscCall(MatCopyHashToXAIJ(a->A, b->A)); in MatCopyHashToXAIJ_MPI_Hash()
138 static PetscErrorCode MatDestroy_MPI_Hash(Mat A) in MatDestroy_MPI_Hash() argument
140 PetscConcat(Mat_MPI, TYPE) *a = (PetscConcat(Mat_MPI, TYPE) *)A->data; in MatDestroy_MPI_Hash()
143 PetscCall(MatStashDestroy_Private(&A->stash)); in MatDestroy_MPI_Hash()
144 PetscCall(MatDestroy(&a->A)); in MatDestroy_MPI_Hash()
146 PetscCall((*a->cops.destroy)(A)); in MatDestroy_MPI_Hash()
150 static PetscErrorCode MatZeroEntries_MPI_Hash(PETSC_UNUSED Mat A) in MatZeroEntries_MPI_Hash() argument
156 static PetscErrorCode MatSetRandom_MPI_Hash(Mat A, PETSC_UNUSED PetscRandom r) in MatSetRandom_MPI_Hash() argument
158 …SETERRQ(PetscObjectComm((PetscObject)A), PETSC_ERR_ARG_WRONGSTATE, "Must set preallocation first"); in MatSetRandom_MPI_Hash()
161 static PetscErrorCode MatSetUp_MPI_Hash(Mat A) in MatSetUp_MPI_Hash() argument
163 PetscConcat(Mat_MPI, TYPE) *a = (PetscConcat(Mat_MPI, TYPE) *)A->data; in MatSetUp_MPI_Hash()
170 …PetscCall(PetscInfo(A, "Using hash-based MatSetValues() for MATMPI" PetscStringize(TYPE) " because… in MatSetUp_MPI_Hash()
171 PetscCall(PetscLayoutSetUp(A->rmap)); in MatSetUp_MPI_Hash()
172 PetscCall(PetscLayoutSetUp(A->cmap)); in MatSetUp_MPI_Hash()
173 if (A->rmap->bs < 1) A->rmap->bs = 1; in MatSetUp_MPI_Hash()
174 if (A->cmap->bs < 1) A->cmap->bs = 1; in MatSetUp_MPI_Hash()
175 PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)A), &size)); in MatSetUp_MPI_Hash()
178 PetscCall(MatGetBlockSize(A, &bs)); in MatSetUp_MPI_Hash()
181 a->mbs = A->rmap->n / bs; in MatSetUp_MPI_Hash()
182 a->nbs = A->cmap->n / bs; in MatSetUp_MPI_Hash()
183 a->Mbs = A->rmap->N / bs; in MatSetUp_MPI_Hash()
184 a->Nbs = A->cmap->N / bs; in MatSetUp_MPI_Hash()
186 for (PetscInt i = 0; i <= a->size; i++) a->rangebs[i] = A->rmap->range[i] / bs; in MatSetUp_MPI_Hash()
187 a->rstartbs = A->rmap->rstart / bs; in MatSetUp_MPI_Hash()
188 a->rendbs = A->rmap->rend / bs; in MatSetUp_MPI_Hash()
189 a->cstartbs = A->cmap->rstart / bs; in MatSetUp_MPI_Hash()
190 a->cendbs = A->cmap->rend / bs; in MatSetUp_MPI_Hash()
191 PetscCall(MatStashCreate_Private(PetscObjectComm((PetscObject)A), A->rmap->bs, &A->bstash)); in MatSetUp_MPI_Hash()
194 PetscCall(MatCreate(PETSC_COMM_SELF, &a->A)); in MatSetUp_MPI_Hash()
195 PetscCall(MatSetSizes(a->A, A->rmap->n, A->cmap->n, A->rmap->n, A->cmap->n)); in MatSetUp_MPI_Hash()
196 PetscCall(MatSetBlockSizesFromMats(a->A, A, A)); in MatSetUp_MPI_Hash()
198 PetscCall(MatSetType(a->A, MATSEQAIJCUSPARSE)); in MatSetUp_MPI_Hash()
200 PetscCall(MatSetType(a->A, PetscConcat(MATSEQ, TYPE))); in MatSetUp_MPI_Hash()
202 PetscCall(MatSetUp(a->A)); in MatSetUp_MPI_Hash()
205 …PetscCall(MatSetSizes(a->B, A->rmap->n, size > 1 ? A->cmap->N : 0, A->rmap->n, size > 1 ? A->cmap-… in MatSetUp_MPI_Hash()
206 PetscCall(MatSetBlockSizesFromMats(a->B, A, A)); in MatSetUp_MPI_Hash()
219 a->cops = A->ops[0]; in MatSetUp_MPI_Hash()
220 A->ops->assemblybegin = MatAssemblyBegin_MPI_Hash; in MatSetUp_MPI_Hash()
221 A->ops->assemblyend = MatAssemblyEnd_MPI_Hash; in MatSetUp_MPI_Hash()
222 A->ops->setvalues = MatSetValues_MPI_Hash; in MatSetUp_MPI_Hash()
223 A->ops->destroy = MatDestroy_MPI_Hash; in MatSetUp_MPI_Hash()
224 A->ops->zeroentries = MatZeroEntries_MPI_Hash; in MatSetUp_MPI_Hash()
225 A->ops->setrandom = MatSetRandom_MPI_Hash; in MatSetUp_MPI_Hash()
226 A->ops->copyhashtoxaij = MatCopyHashToXAIJ_MPI_Hash; in MatSetUp_MPI_Hash()
227 A->ops->setvaluesblocked = NULL; in MatSetUp_MPI_Hash()
229 A->preallocated = PETSC_TRUE; in MatSetUp_MPI_Hash()
230 A->hash_active = PETSC_TRUE; in MatSetUp_MPI_Hash()