Lines Matching refs:deluxe_ctx
63 PCBDDCDeluxeScaling deluxe_ctx = pcbddc->deluxe_ctx; in PCBDDCScalingExtension_Deluxe() local
68 if (deluxe_ctx->n_simple) { /* scale deluxe vertices using diagonal scaling */ in PCBDDCScalingExtension_Deluxe()
75 …for (i = 0; i < deluxe_ctx->n_simple; i++) array[deluxe_ctx->idx_simple_B[i]] = array_x[deluxe_ctx… in PCBDDCScalingExtension_Deluxe()
81 if (deluxe_ctx->seq_mat) { in PCBDDCScalingExtension_Deluxe()
83 for (i = 0; i < deluxe_ctx->seq_n; i++) { in PCBDDCScalingExtension_Deluxe()
84 if (deluxe_ctx->change) { in PCBDDCScalingExtension_Deluxe()
85 …PetscCall(VecScatterBegin(deluxe_ctx->seq_scctx[i], x, deluxe_ctx->seq_work2[i], INSERT_VALUES, SC… in PCBDDCScalingExtension_Deluxe()
86 …PetscCall(VecScatterEnd(deluxe_ctx->seq_scctx[i], x, deluxe_ctx->seq_work2[i], INSERT_VALUES, SCAT… in PCBDDCScalingExtension_Deluxe()
87 if (deluxe_ctx->change_with_qr) { in PCBDDCScalingExtension_Deluxe()
90 PetscCall(KSPGetOperators(deluxe_ctx->change[i], &change, NULL)); in PCBDDCScalingExtension_Deluxe()
91 PetscCall(MatMultTranspose(change, deluxe_ctx->seq_work2[i], deluxe_ctx->seq_work1[i])); in PCBDDCScalingExtension_Deluxe()
93 … PetscCall(KSPSolve(deluxe_ctx->change[i], deluxe_ctx->seq_work2[i], deluxe_ctx->seq_work1[i])); in PCBDDCScalingExtension_Deluxe()
96 …PetscCall(VecScatterBegin(deluxe_ctx->seq_scctx[i], x, deluxe_ctx->seq_work1[i], INSERT_VALUES, SC… in PCBDDCScalingExtension_Deluxe()
97 …PetscCall(VecScatterEnd(deluxe_ctx->seq_scctx[i], x, deluxe_ctx->seq_work1[i], INSERT_VALUES, SCAT… in PCBDDCScalingExtension_Deluxe()
99 …PetscCall(MatMultTranspose(deluxe_ctx->seq_mat[i], deluxe_ctx->seq_work1[i], deluxe_ctx->seq_work2… in PCBDDCScalingExtension_Deluxe()
100 if (deluxe_ctx->seq_mat_inv_sum[i]) { in PCBDDCScalingExtension_Deluxe()
103 PetscCall(VecGetArray(deluxe_ctx->seq_work2[i], &x)); in PCBDDCScalingExtension_Deluxe()
104 PetscCall(VecPlaceArray(deluxe_ctx->seq_work1[i], x)); in PCBDDCScalingExtension_Deluxe()
105 PetscCall(VecRestoreArray(deluxe_ctx->seq_work2[i], &x)); in PCBDDCScalingExtension_Deluxe()
106 …PetscCall(MatSolveTranspose(deluxe_ctx->seq_mat_inv_sum[i], deluxe_ctx->seq_work1[i], deluxe_ctx->… in PCBDDCScalingExtension_Deluxe()
107 PetscCall(VecResetArray(deluxe_ctx->seq_work1[i])); in PCBDDCScalingExtension_Deluxe()
109 if (deluxe_ctx->change) { in PCBDDCScalingExtension_Deluxe()
112 PetscCall(KSPGetOperators(deluxe_ctx->change[i], &change, NULL)); in PCBDDCScalingExtension_Deluxe()
113 PetscCall(MatMult(change, deluxe_ctx->seq_work2[i], deluxe_ctx->seq_work1[i])); in PCBDDCScalingExtension_Deluxe()
114 …PetscCall(VecScatterBegin(deluxe_ctx->seq_scctx[i], deluxe_ctx->seq_work1[i], pcbddc->work_scaling… in PCBDDCScalingExtension_Deluxe()
115 …PetscCall(VecScatterEnd(deluxe_ctx->seq_scctx[i], deluxe_ctx->seq_work1[i], pcbddc->work_scaling, … in PCBDDCScalingExtension_Deluxe()
117 …PetscCall(VecScatterBegin(deluxe_ctx->seq_scctx[i], deluxe_ctx->seq_work2[i], pcbddc->work_scaling… in PCBDDCScalingExtension_Deluxe()
118 …PetscCall(VecScatterEnd(deluxe_ctx->seq_scctx[i], deluxe_ctx->seq_work2[i], pcbddc->work_scaling, … in PCBDDCScalingExtension_Deluxe()
157 PCBDDCDeluxeScaling deluxe_ctx = pcbddc->deluxe_ctx; in PCBDDCScalingRestriction_Deluxe() local
163 if (deluxe_ctx->n_simple) { /* scale deluxe vertices using diagonal scaling */ in PCBDDCScalingRestriction_Deluxe()
169 …for (i = 0; i < deluxe_ctx->n_simple; i++) array_y[deluxe_ctx->idx_simple_B[i]] *= array_D[deluxe_… in PCBDDCScalingRestriction_Deluxe()
174 if (deluxe_ctx->seq_mat) { in PCBDDCScalingRestriction_Deluxe()
176 for (i = 0; i < deluxe_ctx->seq_n; i++) { in PCBDDCScalingRestriction_Deluxe()
177 if (deluxe_ctx->change) { in PCBDDCScalingRestriction_Deluxe()
180 …PetscCall(VecScatterBegin(deluxe_ctx->seq_scctx[i], y, deluxe_ctx->seq_work2[i], INSERT_VALUES, SC… in PCBDDCScalingRestriction_Deluxe()
181 …PetscCall(VecScatterEnd(deluxe_ctx->seq_scctx[i], y, deluxe_ctx->seq_work2[i], INSERT_VALUES, SCAT… in PCBDDCScalingRestriction_Deluxe()
182 PetscCall(KSPGetOperators(deluxe_ctx->change[i], &change, NULL)); in PCBDDCScalingRestriction_Deluxe()
183 PetscCall(MatMultTranspose(change, deluxe_ctx->seq_work2[i], deluxe_ctx->seq_work1[i])); in PCBDDCScalingRestriction_Deluxe()
185 …PetscCall(VecScatterBegin(deluxe_ctx->seq_scctx[i], y, deluxe_ctx->seq_work1[i], INSERT_VALUES, SC… in PCBDDCScalingRestriction_Deluxe()
186 …PetscCall(VecScatterEnd(deluxe_ctx->seq_scctx[i], y, deluxe_ctx->seq_work1[i], INSERT_VALUES, SCAT… in PCBDDCScalingRestriction_Deluxe()
188 if (deluxe_ctx->seq_mat_inv_sum[i]) { in PCBDDCScalingRestriction_Deluxe()
191 PetscCall(VecGetArray(deluxe_ctx->seq_work1[i], &x)); in PCBDDCScalingRestriction_Deluxe()
192 PetscCall(VecPlaceArray(deluxe_ctx->seq_work2[i], x)); in PCBDDCScalingRestriction_Deluxe()
193 PetscCall(VecRestoreArray(deluxe_ctx->seq_work1[i], &x)); in PCBDDCScalingRestriction_Deluxe()
194 …PetscCall(MatSolve(deluxe_ctx->seq_mat_inv_sum[i], deluxe_ctx->seq_work1[i], deluxe_ctx->seq_work2… in PCBDDCScalingRestriction_Deluxe()
195 PetscCall(VecResetArray(deluxe_ctx->seq_work2[i])); in PCBDDCScalingRestriction_Deluxe()
197 … PetscCall(MatMult(deluxe_ctx->seq_mat[i], deluxe_ctx->seq_work1[i], deluxe_ctx->seq_work2[i])); in PCBDDCScalingRestriction_Deluxe()
198 if (deluxe_ctx->change) { in PCBDDCScalingRestriction_Deluxe()
199 if (deluxe_ctx->change_with_qr) { in PCBDDCScalingRestriction_Deluxe()
202 PetscCall(KSPGetOperators(deluxe_ctx->change[i], &change, NULL)); in PCBDDCScalingRestriction_Deluxe()
203 PetscCall(MatMult(change, deluxe_ctx->seq_work2[i], deluxe_ctx->seq_work1[i])); in PCBDDCScalingRestriction_Deluxe()
205 …PetscCall(KSPSolveTranspose(deluxe_ctx->change[i], deluxe_ctx->seq_work2[i], deluxe_ctx->seq_work1… in PCBDDCScalingRestriction_Deluxe()
207 …PetscCall(VecScatterBegin(deluxe_ctx->seq_scctx[i], deluxe_ctx->seq_work1[i], y, INSERT_VALUES, SC… in PCBDDCScalingRestriction_Deluxe()
208 …PetscCall(VecScatterEnd(deluxe_ctx->seq_scctx[i], deluxe_ctx->seq_work1[i], y, INSERT_VALUES, SCAT… in PCBDDCScalingRestriction_Deluxe()
210 …PetscCall(VecScatterBegin(deluxe_ctx->seq_scctx[i], deluxe_ctx->seq_work2[i], y, INSERT_VALUES, SC… in PCBDDCScalingRestriction_Deluxe()
211 …PetscCall(VecScatterEnd(deluxe_ctx->seq_scctx[i], deluxe_ctx->seq_work2[i], y, INSERT_VALUES, SCAT… in PCBDDCScalingRestriction_Deluxe()
265 if (!pcbddc->deluxe_ctx) PetscCall(PCBDDCScalingCreate_Deluxe(pc)); in PCBDDCScalingSetUp()
343 if (pcbddc->deluxe_ctx) PetscCall(PCBDDCScalingDestroy_Deluxe(pc)); in PCBDDCScalingDestroy()
353 PCBDDCDeluxeScaling deluxe_ctx; in PCBDDCScalingCreate_Deluxe() local
356 PetscCall(PetscNew(&deluxe_ctx)); in PCBDDCScalingCreate_Deluxe()
357 pcbddc->deluxe_ctx = deluxe_ctx; in PCBDDCScalingCreate_Deluxe()
366 PetscCall(PCBDDCScalingReset_Deluxe_Solvers(pcbddc->deluxe_ctx)); in PCBDDCScalingDestroy_Deluxe()
367 PetscCall(PetscFree(pcbddc->deluxe_ctx)); in PCBDDCScalingDestroy_Deluxe()
371 static PetscErrorCode PCBDDCScalingReset_Deluxe_Solvers(PCBDDCDeluxeScaling deluxe_ctx) in PCBDDCScalingReset_Deluxe_Solvers() argument
376 PetscCall(PetscFree(deluxe_ctx->idx_simple_B)); in PCBDDCScalingReset_Deluxe_Solvers()
377 deluxe_ctx->n_simple = 0; in PCBDDCScalingReset_Deluxe_Solvers()
378 for (i = 0; i < deluxe_ctx->seq_n; i++) { in PCBDDCScalingReset_Deluxe_Solvers()
379 PetscCall(VecScatterDestroy(&deluxe_ctx->seq_scctx[i])); in PCBDDCScalingReset_Deluxe_Solvers()
380 PetscCall(VecDestroy(&deluxe_ctx->seq_work1[i])); in PCBDDCScalingReset_Deluxe_Solvers()
381 PetscCall(VecDestroy(&deluxe_ctx->seq_work2[i])); in PCBDDCScalingReset_Deluxe_Solvers()
382 PetscCall(MatDestroy(&deluxe_ctx->seq_mat[i])); in PCBDDCScalingReset_Deluxe_Solvers()
383 PetscCall(MatDestroy(&deluxe_ctx->seq_mat_inv_sum[i])); in PCBDDCScalingReset_Deluxe_Solvers()
385 …PetscCall(PetscFree5(deluxe_ctx->seq_scctx, deluxe_ctx->seq_work1, deluxe_ctx->seq_work2, deluxe_c… in PCBDDCScalingReset_Deluxe_Solvers()
386 PetscCall(PetscFree(deluxe_ctx->workspace)); in PCBDDCScalingReset_Deluxe_Solvers()
387 deluxe_ctx->seq_n = 0; in PCBDDCScalingReset_Deluxe_Solvers()
395 PCBDDCDeluxeScaling deluxe_ctx = pcbddc->deluxe_ctx; in PCBDDCScalingSetUp_Deluxe() local
400 if (pcbddc->recompute_topography) PetscCall(PCBDDCScalingReset_Deluxe_Solvers(deluxe_ctx)); in PCBDDCScalingSetUp_Deluxe()
412 if (!deluxe_ctx->n_simple) { in PCBDDCScalingSetUp_Deluxe()
413 deluxe_ctx->n_simple = n_dir + n_com; in PCBDDCScalingSetUp_Deluxe()
414 PetscCall(PetscMalloc1(deluxe_ctx->n_simple, &deluxe_ctx->idx_simple_B)); in PCBDDCScalingSetUp_Deluxe()
420 …alToLocalMappingApply(pcis->BtoNmap, IS_GTOLM_DROP, n_com, idxs, &nmap, deluxe_ctx->idx_simple_B)); in PCBDDCScalingSetUp_Deluxe()
429 …lToLocalMappingApply(pcis->BtoNmap, IS_GTOLM_DROP, n_dir, idxs, &nmap, deluxe_ctx->idx_simple_B + … in PCBDDCScalingSetUp_Deluxe()
433 PetscCall(PetscSortInt(deluxe_ctx->n_simple, deluxe_ctx->idx_simple_B)); in PCBDDCScalingSetUp_Deluxe()
435 …deluxe_ctx->n_simple == n_dir + n_com, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Number of simply scaled d… in PCBDDCScalingSetUp_Deluxe()
438 deluxe_ctx->n_simple = 0; in PCBDDCScalingSetUp_Deluxe()
439 deluxe_ctx->idx_simple_B = NULL; in PCBDDCScalingSetUp_Deluxe()
447 PCBDDCDeluxeScaling deluxe_ctx = pcbddc->deluxe_ctx; in PCBDDCScalingSetUp_Deluxe_Private() local
459 if (!deluxe_ctx->seq_n) { in PCBDDCScalingSetUp_Deluxe_Private()
460 deluxe_ctx->seq_n = sub_schurs->n_subs; in PCBDDCScalingSetUp_Deluxe_Private()
461 …deluxe_ctx->seq_n, &deluxe_ctx->seq_scctx, deluxe_ctx->seq_n, &deluxe_ctx->seq_work1, deluxe_ctx->… in PCBDDCScalingSetUp_Deluxe_Private()
463 …deluxe_ctx->seq_n == sub_schurs->n_subs, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Number of deluxe subpro… in PCBDDCScalingSetUp_Deluxe_Private()
466 deluxe_ctx->change = sub_schurs->change; in PCBDDCScalingSetUp_Deluxe_Private()
467 deluxe_ctx->change_with_qr = sub_schurs->change_with_qr; in PCBDDCScalingSetUp_Deluxe_Private()
476 if (newsetup) PetscCall(PetscMalloc1(2 * max_subset_size, &deluxe_ctx->workspace)); in PCBDDCScalingSetUp_Deluxe_Private()
481 for (i = 0; i < deluxe_ctx->seq_n; i++) { in PCBDDCScalingSetUp_Deluxe_Private()
488 …all(VecCreateSeqWithArray(PETSC_COMM_SELF, 1, subset_size, deluxe_ctx->workspace, &deluxe_ctx->seq… in PCBDDCScalingSetUp_Deluxe_Private()
489 …CreateSeqWithArray(PETSC_COMM_SELF, 1, subset_size, deluxe_ctx->workspace + subset_size, &deluxe_c… in PCBDDCScalingSetUp_Deluxe_Private()
493 …PetscCall(VecScatterCreate(pcbddc->work_scaling, sub, deluxe_ctx->seq_work1[i], NULL, &deluxe_ctx-… in PCBDDCScalingSetUp_Deluxe_Private()
498 PetscCall(MatDestroy(&deluxe_ctx->seq_mat[i])); in PCBDDCScalingSetUp_Deluxe_Private()
499 …reateSeqDense(PETSC_COMM_SELF, subset_size, subset_size, matdata + cum2, &deluxe_ctx->seq_mat[i])); in PCBDDCScalingSetUp_Deluxe_Private()
502 PetscCall(MatDestroy(&deluxe_ctx->seq_mat_inv_sum[i])); in PCBDDCScalingSetUp_Deluxe_Private()
503 …eSeqDense(PETSC_COMM_SELF, subset_size, subset_size, matdata2 + cum2, &deluxe_ctx->seq_mat_inv_sum… in PCBDDCScalingSetUp_Deluxe_Private()
504 PetscCall(MatSetOption(deluxe_ctx->seq_mat_inv_sum[i], MAT_SPD, sub_schurs->is_posdef)); in PCBDDCScalingSetUp_Deluxe_Private()
505 … PetscCall(MatSetOption(deluxe_ctx->seq_mat_inv_sum[i], MAT_HERMITIAN, sub_schurs->is_hermitian)); in PCBDDCScalingSetUp_Deluxe_Private()
508 PetscCall(MatCholeskyFactor(deluxe_ctx->seq_mat_inv_sum[i], NULL, NULL)); in PCBDDCScalingSetUp_Deluxe_Private()
511 PetscCall(MatLUFactor(deluxe_ctx->seq_mat_inv_sum[i], NULL, NULL, NULL)); in PCBDDCScalingSetUp_Deluxe_Private()
519 PetscCall(MatTranspose(deluxe_ctx->seq_mat[i], MAT_INITIAL_MATRIX, &X)); in PCBDDCScalingSetUp_Deluxe_Private()
521 PetscCall(PetscObjectReference((PetscObject)deluxe_ctx->seq_mat[i])); in PCBDDCScalingSetUp_Deluxe_Private()
522 X = deluxe_ctx->seq_mat[i]; in PCBDDCScalingSetUp_Deluxe_Private()
526 PetscCall(PCBDDCMatTransposeMatSolve_SeqDense(deluxe_ctx->seq_mat_inv_sum[i], X, Y)); in PCBDDCScalingSetUp_Deluxe_Private()
528 PetscCall(MatMatSolve(deluxe_ctx->seq_mat_inv_sum[i], X, Y)); in PCBDDCScalingSetUp_Deluxe_Private()
530 PetscCall(MatDestroy(&deluxe_ctx->seq_mat_inv_sum[i])); in PCBDDCScalingSetUp_Deluxe_Private()
531 PetscCall(MatDestroy(&deluxe_ctx->seq_mat[i])); in PCBDDCScalingSetUp_Deluxe_Private()
533 if (deluxe_ctx->change) { in PCBDDCScalingSetUp_Deluxe_Private()
535 …PetscCheck(deluxe_ctx->change_with_qr, PETSC_COMM_SELF, PETSC_ERR_SUP, "Only QR based change of ba… in PCBDDCScalingSetUp_Deluxe_Private()
536 PetscCall(KSPGetOperators(deluxe_ctx->change[i], &C, NULL)); in PCBDDCScalingSetUp_Deluxe_Private()
543 deluxe_ctx->seq_mat[i] = Y; in PCBDDCScalingSetUp_Deluxe_Private()
552 deluxe_ctx->change = NULL; in PCBDDCScalingSetUp_Deluxe_Private()
553 deluxe_ctx->change_with_qr = PETSC_FALSE; in PCBDDCScalingSetUp_Deluxe_Private()
556 if (deluxe_ctx->change && !deluxe_ctx->change_with_qr) { in PCBDDCScalingSetUp_Deluxe_Private()
557 for (i = 0; i < deluxe_ctx->seq_n; i++) { in PCBDDCScalingSetUp_Deluxe_Private()
561 PetscCall(KSPGetPC(deluxe_ctx->change[i], &pc)); in PCBDDCScalingSetUp_Deluxe_Private()
563 PetscCall(KSPSetFromOptions(deluxe_ctx->change[i])); in PCBDDCScalingSetUp_Deluxe_Private()
565 PetscCall(KSPSetUp(deluxe_ctx->change[i])); in PCBDDCScalingSetUp_Deluxe_Private()