xref: /petsc/src/ksp/pc/impls/is/nn/nn.h (revision 35cb6cd333087cc89d8d5031932d4f38af02614d)
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