xref: /petsc/src/ksp/pc/impls/telescope/telescope.h (revision 970231d20df44f79b27787157e39d441e79f434b)
1a4963045SJacob Faibussowitsch #pragma once
21e07b27eSBarry Smith 
31e07b27eSBarry Smith /* Telescope */
49371c9d4SSatish Balay typedef enum {
59371c9d4SSatish Balay   TELESCOPE_DEFAULT = 0,
69371c9d4SSatish Balay   TELESCOPE_DMDA,
79371c9d4SSatish Balay   TELESCOPE_DMPLEX,
89371c9d4SSatish Balay   TELESCOPE_COARSEDM
99371c9d4SSatish Balay } PCTelescopeType;
101e07b27eSBarry Smith 
111e07b27eSBarry Smith typedef struct _PC_Telescope *PC_Telescope;
121e07b27eSBarry Smith struct _PC_Telescope {
131e07b27eSBarry Smith   PetscSubcomm     psubcomm;
1448a10b22SPatrick Sanan   PetscSubcommType subcommtype;
152a22aa42SDave May   MPI_Comm         subcomm;
161e07b27eSBarry Smith   PetscInt         redfactor; /* factor to reduce comm size by */
171e07b27eSBarry Smith   KSP              ksp;
181e07b27eSBarry Smith   IS               isin;
191e07b27eSBarry Smith   VecScatter       scatter;
201e07b27eSBarry Smith   Vec              xred, yred, xtmp;
211e07b27eSBarry Smith   Mat              Bred;
228d9f7141SDave May   PetscBool        ignore_dm, ignore_kspcomputeoperators, use_coarse_dm;
231e07b27eSBarry Smith   PCTelescopeType  sr_type;
241e07b27eSBarry Smith   void            *dm_ctx;
251e07b27eSBarry Smith   PetscErrorCode (*pctelescope_setup_type)(PC, PC_Telescope);
261e07b27eSBarry Smith   PetscErrorCode (*pctelescope_matcreate_type)(PC, PC_Telescope, MatReuse, Mat *);
27392968a1SPatrick Sanan   PetscErrorCode (*pctelescope_matnullspacecreate_type)(PC, PC_Telescope, Mat);
281e07b27eSBarry Smith   PetscErrorCode (*pctelescope_reset_type)(PC);
29e3acf2f7SBarry Smith };
301e07b27eSBarry Smith 
311e07b27eSBarry Smith /* DMDA */
321e07b27eSBarry Smith typedef struct {
331e07b27eSBarry Smith   DM        dmrepart;
341e07b27eSBarry Smith   Mat       permutation;
351e07b27eSBarry Smith   Vec       xp;
361e07b27eSBarry Smith   PetscInt  Mp_re, Np_re, Pp_re;
371e07b27eSBarry Smith   PetscInt *range_i_re, *range_j_re, *range_k_re;
381e07b27eSBarry Smith   PetscInt *start_i_re, *start_j_re, *start_k_re;
391e07b27eSBarry Smith } PC_Telescope_DMDACtx;
401e07b27eSBarry Smith 
PetscSubcomm_isActiveRank(PetscSubcomm scomm)41d71ae5a4SJacob Faibussowitsch static inline PetscBool PetscSubcomm_isActiveRank(PetscSubcomm scomm)
42d71ae5a4SJacob Faibussowitsch {
43*4ad8454bSPierre Jolivet   if (scomm->color == 0) return PETSC_TRUE;
44*4ad8454bSPierre Jolivet   else return PETSC_FALSE;
4557f12427SDave May }
461e07b27eSBarry Smith 
PCTelescope_isActiveRank(PC_Telescope sred)47d71ae5a4SJacob Faibussowitsch static inline PetscBool PCTelescope_isActiveRank(PC_Telescope sred)
48d71ae5a4SJacob Faibussowitsch {
49*4ad8454bSPierre Jolivet   if (sred->psubcomm) return PetscSubcomm_isActiveRank(sred->psubcomm);
5057f12427SDave May   else {
51*4ad8454bSPierre Jolivet     if (sred->subcomm != MPI_COMM_NULL) return PETSC_TRUE;
52*4ad8454bSPierre Jolivet     else return PETSC_FALSE;
5357f12427SDave May   }
5457f12427SDave May }
551e07b27eSBarry Smith 
561e07b27eSBarry Smith PetscErrorCode PCTelescopeSetUp_dmda(PC, PC_Telescope);
571e07b27eSBarry Smith PetscErrorCode PCTelescopeMatCreate_dmda(PC, PC_Telescope, MatReuse, Mat *);
58392968a1SPatrick Sanan PetscErrorCode PCTelescopeMatNullSpaceCreate_dmda(PC, PC_Telescope, Mat);
591e07b27eSBarry Smith PetscErrorCode PCApply_Telescope_dmda(PC, Vec, Vec);
608d9f7141SDave May PetscErrorCode PCApplyRichardson_Telescope_dmda(PC, Vec, Vec, Vec, PetscReal, PetscReal, PetscReal, PetscInt, PetscBool, PetscInt *, PCRichardsonConvergedReason *);
611e07b27eSBarry Smith PetscErrorCode PCReset_Telescope_dmda(PC);
628d9f7141SDave May PetscErrorCode PCTelescopeSetUp_CoarseDM(PC, PC_Telescope);
638d9f7141SDave May PetscErrorCode PCApply_Telescope_CoarseDM(PC, Vec, Vec);
648d9f7141SDave May PetscErrorCode PCTelescopeMatNullSpaceCreate_CoarseDM(PC, PC_Telescope, Mat);
658d9f7141SDave May PetscErrorCode PCReset_Telescope_CoarseDM(PC);
668d9f7141SDave May PetscErrorCode PCApplyRichardson_Telescope_CoarseDM(PC, Vec, Vec, Vec, PetscReal, PetscReal, PetscReal, PetscInt, PetscBool, PetscInt *, PCRichardsonConvergedReason *);
678ef9ca65SPatrick Sanan PetscErrorCode DMView_DA_Short(DM, PetscViewer);
68