1687625d7SJacob Faibussowitsch #ifndef PETSC_NNIMPL_H 2687625d7SJacob Faibussowitsch #define PETSC_NNIMPL_H 34b9ad928SBarry Smith 45e5bbd0aSStefano Zampini #include <petsc/private/pcisimpl.h> 54b9ad928SBarry Smith 64b9ad928SBarry Smith /* 74b9ad928SBarry Smith Private context (data structure) for the NN preconditioner. 84b9ad928SBarry Smith */ 94b9ad928SBarry Smith typedef struct { 10*35cb6cd3SPierre Jolivet /* First MUST come the following line, for the stuff that is common to FETI and Neumann-Neumann. */ 114b9ad928SBarry Smith PC_IS pcis; 122fa5cd67SKarl Rupp 134b9ad928SBarry Smith /* Then, everything else. */ 144b9ad928SBarry Smith Mat coarse_mat; 154b9ad928SBarry Smith Vec coarse_x; 164b9ad928SBarry Smith Vec coarse_b; 174b9ad928SBarry Smith KSP ksp_coarse; 184b9ad928SBarry Smith PetscScalar **DZ_IN; /* proc[k].DZ_IN[i][] = bit of vector to be received from processor i by proc. k */ 194b9ad928SBarry Smith PetscScalar factor_coarse_rhs; 204b9ad928SBarry Smith } PC_NN; 214b9ad928SBarry Smith 225a576424SJed Brown PETSC_EXTERN PetscErrorCode PCNNCreateCoarseMatrix(PC); 235a576424SJed Brown 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); 245a576424SJed Brown 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); 255a576424SJed Brown 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); 264b9ad928SBarry Smith 27687625d7SJacob Faibussowitsch #endif // PETSC_NNIMPL_H 28