xref: /petsc/src/ksp/pc/impls/telescope/telescope.h (revision 57f12427cadb6d6ff9b0d763ec45ec841cf57a98)
11e07b27eSBarry Smith 
21e07b27eSBarry Smith #ifndef __PETSCPC_TELESCOPE_H
31e07b27eSBarry Smith #define __PETSCPC_TELESCOPE_H
41e07b27eSBarry Smith 
51e07b27eSBarry Smith /* Telescope */
68d9f7141SDave May typedef enum { TELESCOPE_DEFAULT = 0, TELESCOPE_DMDA, TELESCOPE_DMPLEX, TELESCOPE_COARSEDM } PCTelescopeType;
71e07b27eSBarry Smith 
81e07b27eSBarry Smith typedef struct _PC_Telescope *PC_Telescope;
91e07b27eSBarry Smith struct _PC_Telescope {
101e07b27eSBarry Smith   PetscSubcomm      psubcomm;
1148a10b22SPatrick Sanan   PetscSubcommType  subcommtype;
122a22aa42SDave May   MPI_Comm          subcomm;
131e07b27eSBarry Smith   PetscInt          redfactor; /* factor to reduce comm size by */
141e07b27eSBarry Smith   KSP               ksp;
151e07b27eSBarry Smith   IS                isin;
161e07b27eSBarry Smith   VecScatter        scatter;
171e07b27eSBarry Smith   Vec               xred,yred,xtmp;
181e07b27eSBarry Smith   Mat               Bred;
198d9f7141SDave May   PetscBool         ignore_dm,ignore_kspcomputeoperators,use_coarse_dm;
201e07b27eSBarry Smith   PCTelescopeType   sr_type;
211e07b27eSBarry Smith   void              *dm_ctx;
221e07b27eSBarry Smith   PetscErrorCode    (*pctelescope_setup_type)(PC,PC_Telescope);
231e07b27eSBarry Smith   PetscErrorCode    (*pctelescope_matcreate_type)(PC,PC_Telescope,MatReuse,Mat*);
24392968a1SPatrick Sanan   PetscErrorCode    (*pctelescope_matnullspacecreate_type)(PC,PC_Telescope,Mat);
251e07b27eSBarry Smith   PetscErrorCode    (*pctelescope_reset_type)(PC);
26e3acf2f7SBarry Smith };
271e07b27eSBarry Smith 
281e07b27eSBarry Smith /* DMDA */
291e07b27eSBarry Smith typedef struct {
301e07b27eSBarry Smith   DM              dmrepart;
311e07b27eSBarry Smith   Mat             permutation;
321e07b27eSBarry Smith   Vec             xp;
331e07b27eSBarry Smith   PetscInt        Mp_re,Np_re,Pp_re;
341e07b27eSBarry Smith   PetscInt        *range_i_re,*range_j_re,*range_k_re;
351e07b27eSBarry Smith   PetscInt        *start_i_re,*start_j_re,*start_k_re;
361e07b27eSBarry Smith } PC_Telescope_DMDACtx;
371e07b27eSBarry Smith 
38*57f12427SDave May PETSC_STATIC_INLINE PetscBool PetscSubcomm_isActiveRank(PetscSubcomm scomm)
39*57f12427SDave May {
40*57f12427SDave May   if (scomm->color == 0) return(PETSC_TRUE);
41*57f12427SDave May   else return(PETSC_FALSE);
42*57f12427SDave May }
431e07b27eSBarry Smith 
44*57f12427SDave May PETSC_STATIC_INLINE PetscBool PCTelescope_isActiveRank(PC_Telescope sred)
45*57f12427SDave May {
46*57f12427SDave May   if (sred->psubcomm) return(PetscSubcomm_isActiveRank(sred->psubcomm));
47*57f12427SDave May   else {
48*57f12427SDave May     if (sred->subcomm != MPI_COMM_NULL) return(PETSC_TRUE);
49*57f12427SDave May     else return (PETSC_FALSE);
50*57f12427SDave May   }
51*57f12427SDave May }
521e07b27eSBarry Smith 
531e07b27eSBarry Smith PetscErrorCode PCTelescopeSetUp_dmda(PC,PC_Telescope);
541e07b27eSBarry Smith PetscErrorCode PCTelescopeMatCreate_dmda(PC,PC_Telescope,MatReuse,Mat*);
55392968a1SPatrick Sanan PetscErrorCode PCTelescopeMatNullSpaceCreate_dmda(PC,PC_Telescope,Mat);
561e07b27eSBarry Smith PetscErrorCode PCApply_Telescope_dmda(PC,Vec,Vec);
578d9f7141SDave May PetscErrorCode PCApplyRichardson_Telescope_dmda(PC,Vec,Vec,Vec,PetscReal,PetscReal,PetscReal,PetscInt,PetscBool,PetscInt*,PCRichardsonConvergedReason*);
581e07b27eSBarry Smith PetscErrorCode PCReset_Telescope_dmda(PC);
598d9f7141SDave May PetscErrorCode PCTelescopeSetUp_CoarseDM(PC,PC_Telescope);
608d9f7141SDave May PetscErrorCode PCApply_Telescope_CoarseDM(PC,Vec,Vec);
618d9f7141SDave May PetscErrorCode PCTelescopeMatNullSpaceCreate_CoarseDM(PC,PC_Telescope,Mat);
628d9f7141SDave May PetscErrorCode PCReset_Telescope_CoarseDM(PC);
638d9f7141SDave May PetscErrorCode PCApplyRichardson_Telescope_CoarseDM(PC,Vec,Vec,Vec,PetscReal,PetscReal,PetscReal,PetscInt,PetscBool,PetscInt*,PCRichardsonConvergedReason*);
648ef9ca65SPatrick Sanan PetscErrorCode DMView_DA_Short(DM,PetscViewer);
651e07b27eSBarry Smith 
661e07b27eSBarry Smith #endif
67