Lines Matching refs:def

7   PC_Deflation *def = (PC_Deflation *)pc->data;  in PCDeflationSetInitOnly_Deflation()  local
10 def->init = flg; in PCDeflationSetInitOnly_Deflation()
43 PC_Deflation *def = (PC_Deflation *)pc->data; in PCDeflationSetLevels_Deflation() local
46 if (current) def->lvl = current; in PCDeflationSetLevels_Deflation()
47 def->maxlvl = max; in PCDeflationSetLevels_Deflation()
78 PC_Deflation *def = (PC_Deflation *)pc->data; in PCDeflationSetReductionFactor_Deflation() local
81 def->reductionfact = red; in PCDeflationSetReductionFactor_Deflation()
115 PC_Deflation *def = (PC_Deflation *)pc->data; in PCDeflationSetCorrectionFactor_Deflation() local
119 def->correct = PETSC_TRUE; in PCDeflationSetCorrectionFactor_Deflation()
120 def->correctfact = fact; in PCDeflationSetCorrectionFactor_Deflation()
121 if (def->correctfact == 0.0) def->correct = PETSC_FALSE; in PCDeflationSetCorrectionFactor_Deflation()
157 PC_Deflation *def = (PC_Deflation *)pc->data; in PCDeflationSetSpaceToCompute_Deflation() local
160 if (type) def->spacetype = type; in PCDeflationSetSpaceToCompute_Deflation()
161 if (size > 0) def->spacesize = size; in PCDeflationSetSpaceToCompute_Deflation()
200 PC_Deflation *def = (PC_Deflation *)pc->data; in PCDeflationSetSpace_Deflation() local
206 PetscCall(MatDestroy(&def->Wt)); in PCDeflationSetSpace_Deflation()
207 def->Wt = W; in PCDeflationSetSpace_Deflation()
209 PetscCall(MatDestroy(&def->W)); in PCDeflationSetSpace_Deflation()
210 def->W = W; in PCDeflationSetSpace_Deflation()
250 PC_Deflation *def = (PC_Deflation *)pc->data; in PCDeflationSetProjectionNullSpaceMat_Deflation() local
254 PetscCall(MatDestroy(&def->WtA)); in PCDeflationSetProjectionNullSpaceMat_Deflation()
255 def->WtA = mat; in PCDeflationSetProjectionNullSpaceMat_Deflation()
283 PC_Deflation *def = (PC_Deflation *)pc->data; in PCDeflationSetCoarseMat_Deflation() local
287 PetscCall(MatDestroy(&def->WtAW)); in PCDeflationSetCoarseMat_Deflation()
288 def->WtAW = mat; in PCDeflationSetCoarseMat_Deflation()
316 PC_Deflation *def = (PC_Deflation *)pc->data; in PCDeflationGetCoarseKSP_Deflation() local
319 *ksp = def->WtAWinv; in PCDeflationGetCoarseKSP_Deflation()
349 PC_Deflation *def = (PC_Deflation *)pc->data; in PCDeflationGetPC_Deflation() local
352 *apc = def->pc; in PCDeflationGetPC_Deflation()
385 PC_Deflation *def = (PC_Deflation *)pc->data; in PCPreSolve_Deflation() local
391 w1 = def->workcoarse[0]; in PCPreSolve_Deflation()
392 w2 = def->workcoarse[1]; in PCPreSolve_Deflation()
393 r = def->work; in PCPreSolve_Deflation()
405 if (def->Wt) { in PCPreSolve_Deflation()
406 PetscCall(MatMult(def->Wt, r, w1)); /* w1 <- W'*r */ in PCPreSolve_Deflation()
408 PetscCall(MatMultHermitianTranspose(def->W, r, w1)); /* w1 <- W'*r */ in PCPreSolve_Deflation()
410 PetscCall(KSPSolve(def->WtAWinv, w1, w2)); /* w2 <- (W'*A*W)^{-1}*w1 */ in PCPreSolve_Deflation()
411 PetscCall(MatMult(def->W, w2, r)); /* r <- W*w2 */ in PCPreSolve_Deflation()
425 PC_Deflation *def = (PC_Deflation *)pc->data; in PCApply_Deflation() local
430 w1 = def->workcoarse[0]; in PCApply_Deflation()
431 w2 = def->workcoarse[1]; in PCApply_Deflation()
432 u = def->work; in PCApply_Deflation()
435 PetscCall(PCApply(def->pc, r, z)); /* z <- M^{-1}*r */ in PCApply_Deflation()
436 if (!def->init) { in PCApply_Deflation()
437 PetscCall(MatMult(def->WtA, z, w1)); /* w1 <- W'*A*z */ in PCApply_Deflation()
438 if (def->correct) { in PCApply_Deflation()
439 if (def->Wt) { in PCApply_Deflation()
440 PetscCall(MatMult(def->Wt, r, w2)); /* w2 <- W'*r */ in PCApply_Deflation()
442 PetscCall(MatMultHermitianTranspose(def->W, r, w2)); /* w2 <- W'*r */ in PCApply_Deflation()
444 PetscCall(VecAXPY(w1, -1.0 * def->correctfact, w2)); /* w1 <- w1 - l*w2 */ in PCApply_Deflation()
446 PetscCall(KSPSolve(def->WtAWinv, w1, w2)); /* w2 <- (W'*A*W)^{-1}*w1 */ in PCApply_Deflation()
447 PetscCall(MatMult(def->W, w2, u)); /* u <- W*w2 */ in PCApply_Deflation()
455 PC_Deflation *def = (PC_Deflation *)pc->data; in PCSetUp_Deflation() local
471 if (!def->lvl && !def->prefix) PetscCall(PCGetOptionsPrefix(pc, &def->prefix)); in PCSetUp_Deflation()
472 if (def->lvl) PetscCall(PetscSNPrintf(prefix, sizeof(prefix), "%" PetscInt_FMT "_", def->lvl)); in PCSetUp_Deflation()
475 if (def->W || def->Wt) { in PCSetUp_Deflation()
476 def->spacetype = PC_DEFLATION_SPACE_USER; in PCSetUp_Deflation()
482 if (def->W) { in PCSetUp_Deflation()
483 PetscCall(PetscObjectTypeCompare((PetscObject)def->W, MATCOMPOSITE, &match)); in PCSetUp_Deflation()
485 PetscCall(MatCompositeGetType(def->W, &ctype)); in PCSetUp_Deflation()
486 PetscCall(MatCompositeGetNumberMat(def->W, &size)); in PCSetUp_Deflation()
489 PetscCall(MatCreateHermitianTranspose(def->Wt, &def->W)); in PCSetUp_Deflation()
490 PetscCall(PetscObjectTypeCompare((PetscObject)def->Wt, MATCOMPOSITE, &match)); in PCSetUp_Deflation()
492 PetscCall(MatCompositeGetType(def->Wt, &ctype)); in PCSetUp_Deflation()
493 PetscCall(MatCompositeGetNumberMat(def->Wt, &size)); in PCSetUp_Deflation()
499 if (def->lvl < def->maxlvl) { in PCSetUp_Deflation()
501 for (i = 0; i < size; i++) PetscCall(MatCompositeGetMat(def->W, i, &mats[i])); in PCSetUp_Deflation()
503 PetscCall(MatDestroy(&def->W)); in PCSetUp_Deflation()
504 def->W = mats[size]; in PCSetUp_Deflation()
517 PetscCall(MatCompositeMerge(def->W)); in PCSetUp_Deflation()
520 if (def->lvl < def->maxlvl) { in PCSetUp_Deflation()
522 for (i = 0; i < size; i++) PetscCall(MatCompositeGetMat(def->Wt, i, &mats[i])); in PCSetUp_Deflation()
524 PetscCall(MatDestroy(&def->Wt)); in PCSetUp_Deflation()
525 def->Wt = mats[0]; in PCSetUp_Deflation()
537 PetscCall(MatCompositeMerge(def->Wt)); in PCSetUp_Deflation()
543 PetscCall(MatDestroy(&def->W)); in PCSetUp_Deflation()
544 PetscCall(MatHermitianTranspose(def->Wt, MAT_INITIAL_MATRIX, &def->W)); in PCSetUp_Deflation()
548 if (!def->WtA) { in PCSetUp_Deflation()
549 if (def->Wt) { in PCSetUp_Deflation()
550 PetscCall(MatMatMult(def->Wt, Amat, MAT_INITIAL_MATRIX, PETSC_CURRENT, &def->WtA)); in PCSetUp_Deflation()
553 PetscCall(MatHermitianTranspose(def->W, MAT_INITIAL_MATRIX, &def->Wt)); in PCSetUp_Deflation()
554 PetscCall(MatMatMult(def->Wt, Amat, MAT_INITIAL_MATRIX, PETSC_CURRENT, &def->WtA)); in PCSetUp_Deflation()
556 PetscCall(MatTransposeMatMult(def->W, Amat, MAT_INITIAL_MATRIX, PETSC_CURRENT, &def->WtA)); in PCSetUp_Deflation()
561 if (!def->WtAWinv) { in PCSetUp_Deflation()
562 PetscCall(MatGetSize(def->W, NULL, &m)); in PCSetUp_Deflation()
563 if (!def->WtAW) { in PCSetUp_Deflation()
564 PetscCall(MatMatMult(def->WtA, def->W, MAT_INITIAL_MATRIX, PETSC_CURRENT, &def->WtAW)); in PCSetUp_Deflation()
567 if (isset) PetscCall(MatSetOption(def->WtAW, MAT_SPD, flgspd)); in PCSetUp_Deflation()
573 PetscCall(MatGetColumnNorms(def->WtAW, NORM_INFINITY, norms)); in PCSetUp_Deflation()
574 …Check(norms[i] > 100 * PETSC_MACHINE_EPSILON, PetscObjectComm((PetscObject)def->WtAW), PETSC_ERR_S… in PCSetUp_Deflation()
577 } else PetscCall(MatIsSPDKnown(def->WtAW, &isset, &flgspd)); in PCSetUp_Deflation()
580 PetscCall(KSPCreate(comm, &def->WtAWinv)); in PCSetUp_Deflation()
581 PetscCall(KSPSetNestLevel(def->WtAWinv, pc->kspnestlevel)); in PCSetUp_Deflation()
582 PetscCall(KSPSetOperators(def->WtAWinv, def->WtAW, def->WtAW)); in PCSetUp_Deflation()
583 PetscCall(KSPGetPC(def->WtAWinv, &pcinner)); in PCSetUp_Deflation()
586 innerksp = def->WtAWinv; in PCSetUp_Deflation()
588 if (!def->ksptype) { in PCSetUp_Deflation()
589 def->ksptype = KSPFGMRES; in PCSetUp_Deflation()
591 def->ksptype = KSPFCG; in PCSetUp_Deflation()
594 PetscCall(KSPSetType(innerksp, def->ksptype)); /* TODO iherit from KSP + tolerances */ in PCSetUp_Deflation()
597 PetscCall(PCDeflationSetLevels_Deflation(pcinner, def->lvl + 1, def->maxlvl)); in PCSetUp_Deflation()
599 if (def->prefix) ((PC_Deflation *)pcinner->data)->prefix = def->prefix; in PCSetUp_Deflation()
600 ((PC_Deflation *)pcinner->data)->init = def->init; in PCSetUp_Deflation()
601 ((PC_Deflation *)pcinner->data)->ksptype = def->ksptype; in PCSetUp_Deflation()
602 ((PC_Deflation *)pcinner->data)->correct = def->correct; in PCSetUp_Deflation()
603 ((PC_Deflation *)pcinner->data)->correctfact = def->correctfact; in PCSetUp_Deflation()
604 ((PC_Deflation *)pcinner->data)->reductionfact = def->reductionfact; in PCSetUp_Deflation()
607 PetscCall(KSPSetType(def->WtAWinv, KSPPREONLY)); in PCSetUp_Deflation()
610 if (def->prefix) PetscCall(KSPSetOptionsPrefix(def->WtAWinv, def->prefix)); in PCSetUp_Deflation()
611 PetscCall(KSPAppendOptionsPrefix(def->WtAWinv, "deflation_tel_")); in PCSetUp_Deflation()
616 red = def->reductionfact; in PCSetUp_Deflation()
620 …PetscCall(PetscObjectTypeCompareAny((PetscObject)def->WtAW, &match, MATSEQDENSE, MATMPIDENSE, MATD… in PCSetUp_Deflation()
631 PetscCall(MatGetFactorAvailable(def->WtAW, MATSOLVERSUPERLU, MAT_FACTOR_LU, &match)); in PCSetUp_Deflation()
635 PetscCall(MatGetFactorAvailable(def->WtAW, MATSOLVERSUPERLU_DIST, MAT_FACTOR_LU, &match)); in PCSetUp_Deflation()
642 if (def->prefix) { in PCSetUp_Deflation()
643 PetscCall(KSPSetOptionsPrefix(innerksp, def->prefix)); in PCSetUp_Deflation()
653 PetscCall(KSPSetFromOptions(def->WtAWinv)); in PCSetUp_Deflation()
654 PetscCall(KSPSetUp(def->WtAWinv)); in PCSetUp_Deflation()
657 if (!def->pc) { in PCSetUp_Deflation()
658 PetscCall(PCCreate(comm, &def->pc)); in PCSetUp_Deflation()
659 PetscCall(PCSetOperators(def->pc, Amat, Amat)); in PCSetUp_Deflation()
660 PetscCall(PCSetType(def->pc, PCNONE)); in PCSetUp_Deflation()
661 if (def->prefix) PetscCall(PCSetOptionsPrefix(def->pc, def->prefix)); in PCSetUp_Deflation()
662 PetscCall(PCAppendOptionsPrefix(def->pc, "deflation_")); in PCSetUp_Deflation()
663 PetscCall(PCAppendOptionsPrefix(def->pc, prefix)); in PCSetUp_Deflation()
664 PetscCall(PCAppendOptionsPrefix(def->pc, "pc_")); in PCSetUp_Deflation()
666 PetscCall(PCSetDM(def->pc, dm)); in PCSetUp_Deflation()
667 PetscCall(PCSetFromOptions(def->pc)); in PCSetUp_Deflation()
668 PetscCall(PCSetUp(def->pc)); in PCSetUp_Deflation()
672 PetscCall(MatCreateVecs(Amat, NULL, &def->work)); in PCSetUp_Deflation()
673 PetscCall(KSPCreateVecs(def->WtAWinv, 2, &def->workcoarse, 0, NULL)); in PCSetUp_Deflation()
679 PC_Deflation *def = (PC_Deflation *)pc->data; in PCReset_Deflation() local
682 PetscCall(VecDestroy(&def->work)); in PCReset_Deflation()
683 PetscCall(VecDestroyVecs(2, &def->workcoarse)); in PCReset_Deflation()
684 PetscCall(MatDestroy(&def->W)); in PCReset_Deflation()
685 PetscCall(MatDestroy(&def->Wt)); in PCReset_Deflation()
686 PetscCall(MatDestroy(&def->WtA)); in PCReset_Deflation()
687 PetscCall(MatDestroy(&def->WtAW)); in PCReset_Deflation()
688 PetscCall(KSPDestroy(&def->WtAWinv)); in PCReset_Deflation()
689 PetscCall(PCDestroy(&def->pc)); in PCReset_Deflation()
713 PC_Deflation *def = (PC_Deflation *)pc->data; in PCView_Deflation() local
721def->correct) PetscCall(PetscViewerASCIIPrintf(viewer, "using CP correction, factor = %g+%gi\n", (… in PCView_Deflation()
722 …if (!def->lvl) PetscCall(PetscViewerASCIIPrintf(viewer, "deflation space type: %s\n", PCDeflationS… in PCView_Deflation()
726 PetscCall(PCView(def->pc, viewer)); in PCView_Deflation()
731 PetscCall(KSPGetTotalIterations(def->WtAWinv, &its)); in PCView_Deflation()
733 PetscCall(KSPView(def->WtAWinv, viewer)); in PCView_Deflation()
741 PC_Deflation *def = (PC_Deflation *)pc->data; in PCSetFromOptions_Deflation() local
745 … "Use only initialization step - Initdef", "PCDeflationSetInitOnly", def->init, &def->init, NULL)); in PCSetFromOptions_Deflation()
746 …ion_levels", "Maximum of deflation levels", "PCDeflationSetLevels", def->maxlvl, &def->maxlvl, NUL… in PCSetFromOptions_Deflation()
747 …m solution using PCTELESCOPE", "PCDeflationSetReductionFactor", def->reductionfact, &def->reductio… in PCSetFromOptions_Deflation()
748 …arse problem correction Q to P", "PCDeflationSetCorrectionFactor", def->correct, &def->correct, NU… in PCSetFromOptions_Deflation()
749 …as coarse problem correction", "PCDeflationSetCorrectionFactor", def->correctfact, &def->correctfa… in PCSetFromOptions_Deflation()
750 …", "PCDeflationSetSpace", PCDeflationSpaceTypes, (PetscEnum)def->spacetype, (PetscEnum *)&def->spa… in PCSetFromOptions_Deflation()
751 …t size of the deflation space to compute", "PCDeflationSetSpace", def->spacesize, &def->spacesize,… in PCSetFromOptions_Deflation()
752 … deflation space instead of truncating (wavelets)", "PCDeflation", def->extendsp, &def->extendsp, … in PCSetFromOptions_Deflation()
839 PC_Deflation *def; in PCCreate_Deflation() local
842 PetscCall(PetscNew(&def)); in PCCreate_Deflation()
843 pc->data = (void *)def; in PCCreate_Deflation()
845 def->init = PETSC_FALSE; in PCCreate_Deflation()
846 def->correct = PETSC_FALSE; in PCCreate_Deflation()
847 def->correctfact = 1.0; in PCCreate_Deflation()
848 def->reductionfact = -1; in PCCreate_Deflation()
849 def->spacetype = PC_DEFLATION_SPACE_HAAR; in PCCreate_Deflation()
850 def->spacesize = 1; in PCCreate_Deflation()
851 def->extendsp = PETSC_FALSE; in PCCreate_Deflation()
852 def->lvl = 0; in PCCreate_Deflation()
853 def->maxlvl = 0; in PCCreate_Deflation()
854 def->W = NULL; in PCCreate_Deflation()
855 def->Wt = NULL; in PCCreate_Deflation()