Lines Matching refs:sred

105 static DM private_PCTelescopeGetSubDM(PC_Telescope sred)  in private_PCTelescopeGetSubDM()  argument
109 if (!PCTelescope_isActiveRank(sred)) { in private_PCTelescopeGetSubDM()
112 switch (sred->sr_type) { in private_PCTelescopeGetSubDM()
117 subdm = ((PC_Telescope_DMDACtx *)sred->dm_ctx)->dmrepart; in private_PCTelescopeGetSubDM()
123 if (sred->ksp) PetscCallAbort(PETSC_COMM_SELF, KSPGetDM(sred->ksp, &subdm)); in private_PCTelescopeGetSubDM()
130 static PetscErrorCode PCTelescopeSetUp_default(PC pc, PC_Telescope sred) in PCTelescopeSetUp_default() argument
142 comm = PetscSubcommParent(sred->psubcomm); in PCTelescopeSetUp_default()
143 subcomm = PetscSubcommChild(sred->psubcomm); in PCTelescopeSetUp_default()
153 if (PCTelescope_isActiveRank(sred)) { in PCTelescopeSetUp_default()
163 if (PCTelescope_isActiveRank(sred)) PetscCall(VecDuplicate(xred, &yred)); in PCTelescopeSetUp_default()
170 if (PCTelescope_isActiveRank(sred)) { in PCTelescopeSetUp_default()
181 sred->isin = isin; in PCTelescopeSetUp_default()
182 sred->scatter = scatter; in PCTelescopeSetUp_default()
183 sred->xred = xred; in PCTelescopeSetUp_default()
184 sred->yred = yred; in PCTelescopeSetUp_default()
185 sred->xtmp = xtmp; in PCTelescopeSetUp_default()
190 static PetscErrorCode PCTelescopeMatCreate_default(PC pc, PC_Telescope sred, MatReuse reuse, Mat *A) in PCTelescopeMatCreate_default() argument
201 subcomm = PetscSubcommChild(sred->psubcomm); in PCTelescopeMatCreate_default()
204 isrow = sred->isin; in PCTelescopeMatCreate_default()
214 if (PCTelescope_isActiveRank(sred)) { in PCTelescopeMatCreate_default()
229 static PetscErrorCode PCTelescopeSubNullSpaceCreate_Telescope(PC pc, PC_Telescope sred, MatNullSpac… in PCTelescopeSubNullSpaceCreate_Telescope() argument
238 subcomm = PetscSubcommChild(sred->psubcomm); in PCTelescopeSubNullSpaceCreate_Telescope()
241 if (PCTelescope_isActiveRank(sred)) { in PCTelescopeSubNullSpaceCreate_Telescope()
242 if (n) PetscCall(VecDuplicateVecs(sred->xred, n, &sub_vecs)); in PCTelescopeSubNullSpaceCreate_Telescope()
252 PetscCall(VecScatterBegin(sred->scatter, vecs[k], sred->xtmp, INSERT_VALUES, SCATTER_FORWARD)); in PCTelescopeSubNullSpaceCreate_Telescope()
253 PetscCall(VecScatterEnd(sred->scatter, vecs[k], sred->xtmp, INSERT_VALUES, SCATTER_FORWARD)); in PCTelescopeSubNullSpaceCreate_Telescope()
256 PetscCall(VecGetArrayRead(sred->xtmp, &x_array)); in PCTelescopeSubNullSpaceCreate_Telescope()
263 PetscCall(VecRestoreArrayRead(sred->xtmp, &x_array)); in PCTelescopeSubNullSpaceCreate_Telescope()
267 if (PCTelescope_isActiveRank(sred)) { in PCTelescopeSubNullSpaceCreate_Telescope()
277 static PetscErrorCode PCTelescopeMatNullSpaceCreate_default(PC pc, PC_Telescope sred, Mat sub_mat) in PCTelescopeMatNullSpaceCreate_default() argument
289 PetscCall(PCTelescopeSubNullSpaceCreate_Telescope(pc, sred, nullspace, &sub_nullspace)); in PCTelescopeMatNullSpaceCreate_default()
290 if (PCTelescope_isActiveRank(sred)) { in PCTelescopeMatNullSpaceCreate_default()
302 … PetscCall(PCTelescopeSubNullSpaceCreate_Telescope(pc, sred, nearnullspace, &sub_nearnullspace)); in PCTelescopeMatNullSpaceCreate_default()
303 if (PCTelescope_isActiveRank(sred)) { in PCTelescopeMatNullSpaceCreate_default()
314 PC_Telescope sred = (PC_Telescope)pc->data; in PCView_Telescope() local
328 subdm = private_PCTelescopeGetSubDM(sred); in PCView_Telescope()
330 if (sred->psubcomm) { in PCView_Telescope()
331 comm = PetscSubcommParent(sred->psubcomm); in PCView_Telescope()
332 subcomm = PetscSubcommChild(sred->psubcomm); in PCView_Telescope()
337 …iewer, "PETSc subcomm: parent comm size reduction factor = %" PetscInt_FMT "\n", sred->redfactor)); in PCView_Telescope()
339 switch (sred->subcommtype) { in PCView_Telescope()
341 …etscViewerASCIIPrintf(viewer, "PETSc subcomm: type = %s\n", PetscSubcommTypes[sred->subcommtype])); in PCView_Telescope()
344 …PetscViewerASCIIPrintf(viewer, "PETSc subcomm type = %s\n", PetscSubcommTypes[sred->subcommtype])); in PCView_Telescope()
352 subcomm = sred->subcomm; in PCView_Telescope()
353 if (!PCTelescope_isActiveRank(sred)) subcomm = PETSC_COMM_SELF; in PCView_Telescope()
361 if (PCTelescope_isActiveRank(sred)) { in PCView_Telescope()
364 if (dm && sred->ignore_dm) PetscCall(PetscViewerASCIIPrintf(subviewer, "ignoring DM\n")); in PCView_Telescope()
365 …if (sred->ignore_kspcomputeoperators) PetscCall(PetscViewerASCIIPrintf(subviewer, "ignoring KSPCom… in PCView_Telescope()
366 switch (sred->sr_type) { in PCView_Telescope()
407 PetscCall(KSPView(sred->ksp, subviewer)); in PCView_Telescope()
418 PC_Telescope sred = (PC_Telescope)pc->data; in PCSetUp_Telescope() local
448 if (sred->use_coarse_dm) { in PCSetUp_Telescope()
453 if (sred->ignore_dm) { in PCSetUp_Telescope()
458 sred->sr_type = sr_type; in PCSetUp_Telescope()
460 sr_type = sred->sr_type; in PCSetUp_Telescope()
466 sred->pctelescope_setup_type = PCTelescopeSetUp_default; in PCSetUp_Telescope()
467 sred->pctelescope_matcreate_type = PCTelescopeMatCreate_default; in PCSetUp_Telescope()
468 sred->pctelescope_matnullspacecreate_type = PCTelescopeMatNullSpaceCreate_default; in PCSetUp_Telescope()
469 sred->pctelescope_reset_type = NULL; in PCSetUp_Telescope()
474 sred->pctelescope_setup_type = PCTelescopeSetUp_dmda; in PCSetUp_Telescope()
475 sred->pctelescope_matcreate_type = PCTelescopeMatCreate_dmda; in PCSetUp_Telescope()
476 sred->pctelescope_matnullspacecreate_type = PCTelescopeMatNullSpaceCreate_dmda; in PCSetUp_Telescope()
477 sred->pctelescope_reset_type = PCReset_Telescope_dmda; in PCSetUp_Telescope()
484 sred->pctelescope_setup_type = PCTelescopeSetUp_CoarseDM; in PCSetUp_Telescope()
485 sred->pctelescope_matcreate_type = NULL; in PCSetUp_Telescope()
486 sred->pctelescope_matnullspacecreate_type = NULL; /* PCTelescopeMatNullSpaceCreate_CoarseDM; */ in PCSetUp_Telescope()
487 sred->pctelescope_reset_type = PCReset_Telescope_CoarseDM; in PCSetUp_Telescope()
496 if (!sred->psubcomm) { in PCSetUp_Telescope()
497 PetscCall(PetscSubcommCreate(comm, &sred->psubcomm)); in PCSetUp_Telescope()
498 PetscCall(PetscSubcommSetNumber(sred->psubcomm, sred->redfactor)); in PCSetUp_Telescope()
499 PetscCall(PetscSubcommSetType(sred->psubcomm, sred->subcommtype)); in PCSetUp_Telescope()
500 sred->subcomm = PetscSubcommChild(sred->psubcomm); in PCSetUp_Telescope()
528 sred->subcomm = comm_coarse_partition; in PCSetUp_Telescope()
531 subcomm = sred->subcomm; in PCSetUp_Telescope()
537 if (PCTelescope_isActiveRank(sred)) { in PCSetUp_Telescope()
538 PetscCall(KSPCreate(subcomm, &sred->ksp)); in PCSetUp_Telescope()
539 PetscCall(KSPSetNestLevel(sred->ksp, pc->kspnestlevel)); in PCSetUp_Telescope()
540 PetscCall(KSPSetErrorIfNotConverged(sred->ksp, pc->erroriffailure)); in PCSetUp_Telescope()
541 PetscCall(PetscObjectIncrementTabLevel((PetscObject)sred->ksp, (PetscObject)pc, 1)); in PCSetUp_Telescope()
542 PetscCall(KSPSetType(sred->ksp, KSPPREONLY)); in PCSetUp_Telescope()
544 PetscCall(KSPSetOptionsPrefix(sred->ksp, prefix)); in PCSetUp_Telescope()
545 PetscCall(KSPAppendOptionsPrefix(sred->ksp, "telescope_")); in PCSetUp_Telescope()
550 …if (!pc->setupcalled && sred->pctelescope_setup_type) PetscCall(sred->pctelescope_setup_type(pc, s… in PCSetUp_Telescope()
553 …if (sred->pctelescope_matcreate_type) PetscCall(sred->pctelescope_matcreate_type(pc, sred, MAT_INI… in PCSetUp_Telescope()
554 …if (sred->pctelescope_matnullspacecreate_type) PetscCall(sred->pctelescope_matnullspacecreate_type… in PCSetUp_Telescope()
556 …if (sred->pctelescope_matcreate_type) PetscCall(sred->pctelescope_matcreate_type(pc, sred, MAT_REU… in PCSetUp_Telescope()
560 if (PCTelescope_isActiveRank(sred)) { in PCSetUp_Telescope()
561 PetscCall(KSPSetOperators(sred->ksp, sred->Bred, sred->Bred)); in PCSetUp_Telescope()
562 if (pc->setfromoptionscalled && !pc->setupcalled) PetscCall(KSPSetFromOptions(sred->ksp)); in PCSetUp_Telescope()
569 PC_Telescope sred = (PC_Telescope)pc->data; in PCApply_Telescope() local
579 xtmp = sred->xtmp; in PCApply_Telescope()
580 scatter = sred->scatter; in PCApply_Telescope()
581 xred = sred->xred; in PCApply_Telescope()
582 yred = sred->yred; in PCApply_Telescope()
599 if (PCTelescope_isActiveRank(sred)) { in PCApply_Telescope()
600 PetscCall(KSPSolve(sred->ksp, xred, yred)); in PCApply_Telescope()
601 PetscCall(KSPCheckSolve(sred->ksp, pc, yred)); in PCApply_Telescope()
620 PC_Telescope sred = (PC_Telescope)pc->data; in PCApplyRichardson_Telescope() local
628 xtmp = sred->xtmp; in PCApplyRichardson_Telescope()
629 scatter = sred->scatter; in PCApplyRichardson_Telescope()
630 yred = sred->yred; in PCApplyRichardson_Telescope()
653 if (PCTelescope_isActiveRank(sred)) { in PCApplyRichardson_Telescope()
654 PetscCall(KSPGetInitialGuessNonzero(sred->ksp, &default_init_guess_value)); in PCApplyRichardson_Telescope()
655 if (!zeroguess) PetscCall(KSPSetInitialGuessNonzero(sred->ksp, PETSC_TRUE)); in PCApplyRichardson_Telescope()
660 …if (PCTelescope_isActiveRank(sred)) PetscCall(KSPSetInitialGuessNonzero(sred->ksp, default_init_gu… in PCApplyRichardson_Telescope()
669 PC_Telescope sred = (PC_Telescope)pc->data; in PCReset_Telescope() local
672 PetscCall(ISDestroy(&sred->isin)); in PCReset_Telescope()
673 PetscCall(VecScatterDestroy(&sred->scatter)); in PCReset_Telescope()
674 PetscCall(VecDestroy(&sred->xred)); in PCReset_Telescope()
675 PetscCall(VecDestroy(&sred->yred)); in PCReset_Telescope()
676 PetscCall(VecDestroy(&sred->xtmp)); in PCReset_Telescope()
677 PetscCall(MatDestroy(&sred->Bred)); in PCReset_Telescope()
678 PetscCall(KSPReset(sred->ksp)); in PCReset_Telescope()
679 if (sred->pctelescope_reset_type) PetscCall(sred->pctelescope_reset_type(pc)); in PCReset_Telescope()
685 PC_Telescope sred = (PC_Telescope)pc->data; in PCDestroy_Telescope() local
689 PetscCall(KSPDestroy(&sred->ksp)); in PCDestroy_Telescope()
690 PetscCall(PetscSubcommDestroy(&sred->psubcomm)); in PCDestroy_Telescope()
691 PetscCall(PetscFree(sred->dm_ctx)); in PCDestroy_Telescope()
710 PC_Telescope sred = (PC_Telescope)pc->data; in PCSetFromOptions_Telescope() local
720 … contiguous)", "PCTelescopeSetSubcommType", PetscSubcommTypes, (PetscEnum)sred->subcommtype, (Pets… in PCSetFromOptions_Telescope()
722 …Factor to reduce comm size by", "PCTelescopeSetReductionFactor", sred->redfactor, &sred->redfactor… in PCSetFromOptions_Telescope()
723 …PetscCheck(sred->redfactor <= size, comm, PETSC_ERR_ARG_WRONG, "-pc_telescope_reduction_factor <= … in PCSetFromOptions_Telescope()
724 …", "Ignore any DM attached to the PC", "PCTelescopeSetIgnoreDM", sred->ignore_dm, &sred->ignore_dm… in PCSetFromOptions_Telescope()
725 …o compute A", "PCTelescopeSetIgnoreKSPComputeOperators", sred->ignore_kspcomputeoperators, &sred->… in PCSetFromOptions_Telescope()
726 …communicator from the coarse DM", "PCTelescopeSetUseCoarseDM", sred->use_coarse_dm, &sred->use_coa… in PCSetFromOptions_Telescope()
1363 struct _PC_Telescope *sred; in PCCreate_Telescope() local
1366 PetscCall(PetscNew(&sred)); in PCCreate_Telescope()
1367 sred->psubcomm = NULL; in PCCreate_Telescope()
1368 sred->subcommtype = PETSC_SUBCOMM_INTERLACED; in PCCreate_Telescope()
1369 sred->subcomm = MPI_COMM_NULL; in PCCreate_Telescope()
1370 sred->redfactor = 1; in PCCreate_Telescope()
1371 sred->ignore_dm = PETSC_FALSE; in PCCreate_Telescope()
1372 sred->ignore_kspcomputeoperators = PETSC_FALSE; in PCCreate_Telescope()
1373 sred->use_coarse_dm = PETSC_FALSE; in PCCreate_Telescope()
1374 pc->data = (void *)sred; in PCCreate_Telescope()
1385 sred->pctelescope_setup_type = PCTelescopeSetUp_default; in PCCreate_Telescope()
1386 sred->pctelescope_matcreate_type = PCTelescopeMatCreate_default; in PCCreate_Telescope()
1387 sred->pctelescope_matnullspacecreate_type = PCTelescopeMatNullSpaceCreate_default; in PCCreate_Telescope()
1388 sred->pctelescope_reset_type = NULL; in PCCreate_Telescope()