/usr/lib/petscdir/3.7.7/x86_64-linux-gnu-complex-debug/include/petsc/private/pcmgimpl.h is in libpetsc-complex-3.7.7-dbg 3.7.7+dfsg1-2build5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | /*
Data structure used for Multigrid preconditioner.
*/
#if !defined(__MG_IMPL)
#define __MG_IMPL
#include <petsc/private/pcimpl.h>
#include <petscksp.h>
/*
Each level has its own copy of this data.
Level (0) is always the coarsest level and Level (levels-1) is the finest.
*/
typedef struct {
PetscInt cycles; /* Type of cycle to run: 1 V 2 W */
PetscInt level; /* level = 0 coarsest level */
PetscInt levels; /* number of active levels used */
Vec b; /* Right hand side */
Vec x; /* Solution */
Vec r; /* Residual */
PetscErrorCode (*residual)(Mat,Vec,Vec,Vec);
Mat A; /* matrix used in forming residual*/
KSP smoothd; /* pre smoother */
KSP smoothu; /* post smoother */
Mat interpolate;
Mat restrct; /* restrict is a reserved word in C99 and on Cray */
Vec rscale; /* scaling of restriction matrix */
PetscLogEvent eventsmoothsetup; /* if logging times for each level */
PetscLogEvent eventsmoothsolve;
PetscLogEvent eventresidual;
PetscLogEvent eventinterprestrict;
} PC_MG_Levels;
/*
This data structure is shared by all the levels.
*/
typedef struct {
PCMGType am; /* Multiplicative, additive or full */
PetscInt cyclesperpcapply; /* Number of cycles to use in each PCApply(), multiplicative only*/
PetscInt maxlevels; /* total number of levels allocated */
PetscInt galerkin; /* use Galerkin process to compute coarser matrices, 0=no, 1=yes, 2=yes but computed externally */
PetscBool usedmfornumberoflevels; /* sets the number of levels by getting this information out of the DM */
PetscInt nlevels;
PC_MG_Levels **levels;
PetscInt default_smoothu; /* number of smooths per level if not over-ridden */
PetscInt default_smoothd; /* with calls to KSPSetTolerances() */
PetscReal rtol,abstol,dtol,ttol; /* tolerances for when running with PCApplyRichardson_MG */
void *innerctx; /* optional data for preconditioner, like PCEXOTIC that inherits off of PCMG */
PetscLogStage stageApply;
PetscErrorCode (*view)(PC,PetscViewer); /* GAMG and other objects that use PCMG can set their own viewer here */
} PC_MG;
PETSC_INTERN PetscErrorCode PCSetUp_MG(PC);
PETSC_INTERN PetscErrorCode PCDestroy_MG(PC);
PETSC_INTERN PetscErrorCode PCSetFromOptions_MG(PetscOptionItems *PetscOptionsObject,PC);
PETSC_INTERN PetscErrorCode PCView_MG(PC,PetscViewer);
PETSC_DEPRECATED("Use PCMGResidualDefault()") PETSC_STATIC_INLINE PetscErrorCode PCMGResidual_Default(Mat A,Vec b,Vec x,Vec r) {
return PCMGResidualDefault(A,b,x,r);
}
#endif
|