diff --git a/AMDiS/src/parallel/PetscSolverFeti.cc b/AMDiS/src/parallel/PetscSolverFeti.cc index 8aaf8d05007f6b39e7ca22cbc63b80b61476221d..39a36c1209d00ddce99276a8f2d10ac194aa46d9 100644 --- a/AMDiS/src/parallel/PetscSolverFeti.cc +++ b/AMDiS/src/parallel/PetscSolverFeti.cc @@ -578,8 +578,8 @@ namespace AMDiS { MatCreateShell(PETSC_COMM_WORLD, - nRankLagrange, nRankLagrange, - nOverallLagrange, nOverallLagrange, + nRankLagrange * nComponents, nRankLagrange * nComponents, + nOverallLagrange * nComponents, nOverallLagrange * nComponents, &petscFetiData, &mat_feti); MatShellSetOperation(mat_feti, MATOP_MULT, (void(*)(void))petscMultMatFeti); @@ -607,7 +607,8 @@ namespace AMDiS { petscFetiPreconData.mat_interior_bound = &mat_interior_bound; petscFetiPreconData.mat_bound_interior = &mat_bound_interior; petscFetiPreconData.ksp_interior = &ksp_interior; - petscFetiPreconData.nInterior = nRankB - duals.size(); + petscFetiPreconData.nLocalInterior = nLocalInterior; + petscFetiPreconData.nLocalBound = nLocalBound; VecDuplicate(f_b, &(petscFetiPreconData.tmp_vec_b)); @@ -615,7 +616,6 @@ namespace AMDiS { MatGetVecs(mat_bound_bound, PETSC_NULL, &(petscFetiPreconData.tmp_vec_bound1)); MatGetVecs(mat_interior_interior, PETSC_NULL, &(petscFetiPreconData.tmp_vec_interior)); - KSPGetPC(ksp_feti, &precon_feti); PCSetType(precon_feti, PCSHELL); PCShellSetContext(precon_feti, static_cast<void*>(&petscFetiPreconData)); @@ -1116,9 +1116,9 @@ namespace AMDiS { - int nRankNest = (nRankB + nRankPrimals) * nComponents + nRankLagrange; - int nOverallNest = (nOverallB + nOverallPrimals) * nComponents + nOverallLagrange; - int rStartNest = (rStartB + rStartPrimals) * nComponents + rStartLagrange; + int nRankNest = (nRankB + nRankPrimals + nRankLagrange) * nComponents; + int nOverallNest = (nOverallB + nOverallPrimals + nOverallLagrange) * nComponents; + int rStartNest = (rStartB + rStartPrimals + rStartLagrange) * nComponents; { // === Test some matrix sizes. === diff --git a/AMDiS/src/parallel/PetscSolverFeti.h b/AMDiS/src/parallel/PetscSolverFeti.h index d63f0031b22c22aaa12757e532813ac144bbbdaa..0a29a9414cfd63a37c65dcfa6ae514d44753b051 100644 --- a/AMDiS/src/parallel/PetscSolverFeti.h +++ b/AMDiS/src/parallel/PetscSolverFeti.h @@ -104,7 +104,9 @@ namespace AMDiS { Vec tmp_vec_interior; - int nInterior; + int nLocalInterior; + + int nLocalBound; };