Lines Matching full:r
3 C = R * A * R^T
25 PetscErrorCode MatRARtSymbolic_SeqAIJ_SeqAIJ_colorrart(Mat A, Mat R, PetscReal fill, Mat C) in MatRARtSymbolic_SeqAIJ_SeqAIJ_colorrart() argument
38 PetscCall(MatTransposeSymbolic(R, &P)); in MatRARtSymbolic_SeqAIJ_SeqAIJ_colorrart()
42 PetscCall(MatSetBlockSizes(C, R->rmap->bs, R->rmap->bs)); in MatRARtSymbolic_SeqAIJ_SeqAIJ_colorrart()
54 /* Create MatTransposeColoring from symbolic C=R*A*R^T */ in MatRARtSymbolic_SeqAIJ_SeqAIJ_colorrart()
75 /* Create RARt_dense = R*A*Rt_dense */ in MatRARtSymbolic_SeqAIJ_SeqAIJ_colorrart()
83 …/* Allocate work array to store columns of A*R^T used in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDen… in MatRARtSymbolic_SeqAIJ_SeqAIJ_colorrart()
93 PetscCall(PetscInfo(C, "C=R*(A*Rt) via coloring C - use sparse-dense inner products\n")); in MatRARtSymbolic_SeqAIJ_SeqAIJ_colorrart()
94 …t_FMT ")/(m*ncolors)=%g\n", RARt_dense->rmap->n, RARt_dense->cmap->n, R->cmap->n, R->rmap->n, c->n… in MatRARtSymbolic_SeqAIJ_SeqAIJ_colorrart()
101 RAB = R * A * B, R and A in seqaij format, B in dense format;
103 static PetscErrorCode MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense(Mat R, Mat A, Mat B, Mat RAB, Pet… in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense() argument
105 Mat_SeqAIJ *a = (Mat_SeqAIJ *)A->data, *r = (Mat_SeqAIJ *)R->data; in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense() local
112 PetscInt *rj, rm = R->rmap->n, dm = RAB->rmap->n, dn = RAB->cmap->n; in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
118 …scCheck(am == R->cmap->n, PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "Number columns in R %" PetscInt_FMT… in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
119 …R->rmap->n == RAB->rmap->n, PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "Number rows in RAB %" PetscInt_FM… in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
124 AB_den=A*B takes almost all execution time in R*A*B for src/ksp/ksp/tutorials/ex56.c in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
133 PetscCall(MatMatMultNumeric_SeqAIJ_SeqDense(R, AB_den, RAB)); in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
171 /* RAB[:,col] = R*C[:,col] */ in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
173 for (i = 0; i < rm; i++) { /* over rows of R in those columns */ in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
175 n = r->i[i + 1] - r->i[i]; in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
176 rj = r->j + r->i[i]; in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
177 ra = r->a + r->i[i]; in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
201 for (i = 0; i < rm; i++) { /* over rows of R in those columns */ in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
203 n = r->i[i + 1] - r->i[i]; in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
204 rj = r->j + r->i[i]; in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
205 ra = r->a + r->i[i]; in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
210 PetscCall(PetscLogFlops(cn * 2.0 * (a->nz + r->nz))); in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
219 PetscErrorCode MatRARtNumeric_SeqAIJ_SeqAIJ_colorrart(Mat A, Mat R, Mat C) in MatRARtNumeric_SeqAIJ_SeqAIJ_colorrart() argument
230 /* Get dense Rt by Apply MatTransposeColoring to R */ in MatRARtNumeric_SeqAIJ_SeqAIJ_colorrart()
233 PetscCall(MatTransColoringApplySpToDen(matcoloring, R, Rt)); in MatRARtNumeric_SeqAIJ_SeqAIJ_colorrart()
235 /* Get dense RARt = R*A*Rt -- dominates! */ in MatRARtNumeric_SeqAIJ_SeqAIJ_colorrart()
237 PetscCall(MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense(R, A, Rt, RARt, rart->work)); in MatRARtNumeric_SeqAIJ_SeqAIJ_colorrart()
244 PetscErrorCode MatRARtSymbolic_SeqAIJ_SeqAIJ_matmattransposemult(Mat A, Mat R, PetscReal fill, Mat … in MatRARtSymbolic_SeqAIJ_SeqAIJ_matmattransposemult() argument
253 /* create symbolic ARt = A*R^T */ in MatRARtSymbolic_SeqAIJ_SeqAIJ_matmattransposemult()
254 PetscCall(MatProductCreate(A, R, NULL, &ARt)); in MatRARtSymbolic_SeqAIJ_SeqAIJ_matmattransposemult()
261 /* compute symbolic C = R*ARt */ in MatRARtSymbolic_SeqAIJ_SeqAIJ_matmattransposemult()
262 /* set algorithm for C = R*ARt */ in MatRARtSymbolic_SeqAIJ_SeqAIJ_matmattransposemult()
265 PetscCall(MatMatMultSymbolic_SeqAIJ_SeqAIJ(R, ARt, fill, C)); in MatRARtSymbolic_SeqAIJ_SeqAIJ_matmattransposemult()
276 …PetscCall(PetscInfo(C, "Use ARt=A*R^T, C=R*ARt via MatMatTransposeMult(). Coloring can be applied … in MatRARtSymbolic_SeqAIJ_SeqAIJ_matmattransposemult()
280 PetscErrorCode MatRARtNumeric_SeqAIJ_SeqAIJ_matmattransposemult(Mat A, Mat R, Mat C) in MatRARtNumeric_SeqAIJ_SeqAIJ_matmattransposemult() argument
288 PetscCall(MatMatTransposeMultNumeric_SeqAIJ_SeqAIJ(A, R, rart->ARt)); /* dominate! */ in MatRARtNumeric_SeqAIJ_SeqAIJ_matmattransposemult()
289 PetscCall(MatMatMultNumeric_SeqAIJ_SeqAIJ(R, rart->ARt, C)); in MatRARtNumeric_SeqAIJ_SeqAIJ_matmattransposemult()
293 PetscErrorCode MatRARtSymbolic_SeqAIJ_SeqAIJ(Mat A, Mat R, PetscReal fill, Mat C) in MatRARtSymbolic_SeqAIJ_SeqAIJ() argument
301 PetscCall(MatTranspose(R, MAT_INITIAL_MATRIX, &Rt)); in MatRARtSymbolic_SeqAIJ_SeqAIJ()
302 PetscCall(MatMatMatMultSymbolic_SeqAIJ_SeqAIJ_SeqAIJ(R, A, Rt, fill, C)); in MatRARtSymbolic_SeqAIJ_SeqAIJ()
311 …PetscCall(PetscInfo(C, "Use Rt=R^T and C=R*A*Rt via MatMatMatMult() to avoid sparse inner products… in MatRARtSymbolic_SeqAIJ_SeqAIJ()
315 PetscErrorCode MatRARtNumeric_SeqAIJ_SeqAIJ(Mat A, Mat R, Mat C) in MatRARtNumeric_SeqAIJ_SeqAIJ() argument
323 PetscCall(MatTranspose(R, MAT_REUSE_MATRIX, &rart->Rt)); in MatRARtNumeric_SeqAIJ_SeqAIJ()
326 PetscCall(MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqAIJ(R, A, rart->Rt, C)); in MatRARtNumeric_SeqAIJ_SeqAIJ()
331 PetscErrorCode MatRARt_SeqAIJ_SeqAIJ(Mat A, Mat R, MatReuse scall, PetscReal fill, Mat *C) in MatRARt_SeqAIJ_SeqAIJ() argument
342 PetscCall(PetscLogEventBegin(MAT_RARtSymbolic, A, R, 0, 0)); in MatRARt_SeqAIJ_SeqAIJ()
346 /* via matmattransposemult: ARt=A*R^T, C=R*ARt - matrix coloring can be applied to A*R^T */ in MatRARt_SeqAIJ_SeqAIJ()
347 PetscCall(MatRARtSymbolic_SeqAIJ_SeqAIJ_matmattransposemult(A, R, fill, *C)); in MatRARt_SeqAIJ_SeqAIJ()
350 /* via coloring_rart: apply coloring C = R*A*R^T */ in MatRARt_SeqAIJ_SeqAIJ()
351 PetscCall(MatRARtSymbolic_SeqAIJ_SeqAIJ_colorrart(A, R, fill, *C)); in MatRARt_SeqAIJ_SeqAIJ()
354 /* via matmatmatmult: Rt=R^T, C=R*A*Rt - avoid inefficient sparse inner products */ in MatRARt_SeqAIJ_SeqAIJ()
355 PetscCall(MatRARtSymbolic_SeqAIJ_SeqAIJ(A, R, fill, *C)); in MatRARt_SeqAIJ_SeqAIJ()
358 PetscCall(PetscLogEventEnd(MAT_RARtSymbolic, A, R, 0, 0)); in MatRARt_SeqAIJ_SeqAIJ()
361 PetscCall(PetscLogEventBegin(MAT_RARtNumeric, A, R, 0, 0)); in MatRARt_SeqAIJ_SeqAIJ()
362 PetscCall(((*C)->ops->rartnumeric)(A, R, *C)); in MatRARt_SeqAIJ_SeqAIJ()
363 PetscCall(PetscLogEventEnd(MAT_RARtNumeric, A, R, 0, 0)); in MatRARt_SeqAIJ_SeqAIJ()
370 Mat A = product->A, R = product->B; in MatProductSymbolic_RARt_SeqAIJ_SeqAIJ() local
376 PetscCall(PetscStrcmp(alg, "r*a*rt", &flg)); in MatProductSymbolic_RARt_SeqAIJ_SeqAIJ()
378 PetscCall(MatRARtSymbolic_SeqAIJ_SeqAIJ(A, R, fill, C)); in MatProductSymbolic_RARt_SeqAIJ_SeqAIJ()
382 PetscCall(PetscStrcmp(alg, "r*art", &flg)); in MatProductSymbolic_RARt_SeqAIJ_SeqAIJ()
384 PetscCall(MatRARtSymbolic_SeqAIJ_SeqAIJ_matmattransposemult(A, R, fill, C)); in MatProductSymbolic_RARt_SeqAIJ_SeqAIJ()
390 PetscCall(MatRARtSymbolic_SeqAIJ_SeqAIJ_colorrart(A, R, fill, C)); in MatProductSymbolic_RARt_SeqAIJ_SeqAIJ()