1 2 #if !defined(__pcnn_h) 3 #define __pcnn_h 4 5 #include <../src/ksp/pc/impls/is/pcis.h> 6 7 /* 8 Private context (data structure) for the NN preconditioner. 9 */ 10 typedef struct { 11 /* First MUST come the folowing line, for the stuff that is common to FETI and Neumann-Neumann. */ 12 PC_IS pcis; 13 14 /* Then, everything else. */ 15 Mat coarse_mat; 16 Vec coarse_x; 17 Vec coarse_b; 18 KSP ksp_coarse; 19 PetscScalar **DZ_IN; /* proc[k].DZ_IN[i][] = bit of vector to be received from processor i by proc. k */ 20 PetscScalar factor_coarse_rhs; 21 } PC_NN; 22 23 PETSC_EXTERN PetscErrorCode PCNNCreateCoarseMatrix (PC); 24 PETSC_EXTERN PetscErrorCode PCNNApplySchurToChunk(PC pc,PetscInt n,PetscInt *idx,PetscScalar *chunk,PetscScalar * array_N,Vec vec1_B,Vec vec2_B,Vec vec1_D,Vec vec2_D); 25 PETSC_EXTERN PetscErrorCode PCNNApplyInterfacePreconditioner(PC pc,Vec r,Vec z,PetscScalar *work_N,Vec vec1_B,Vec vec2_B,Vec vec3_B,Vec vec1_D,Vec vec2_D,Vec vec1_N,Vec vec2_N); 26 PETSC_EXTERN PetscErrorCode PCNNBalancing(PC pc,Vec r,Vec u,Vec z,Vec vec1_B,Vec vec2_B,Vec vec3_B,Vec vec1_D,Vec vec2_D,PetscScalar *work_N); 27 28 #endif /* __pcnn_h */ 29 30 31 32 33 34 35