From 1f0eda53988a61d7cfaa35e05e6ec10fd22e279c Mon Sep 17 00:00:00 2001 From: Thomas Witkowski <thomas.witkowski@gmx.de> Date: Wed, 4 May 2011 12:49:54 +0000 Subject: [PATCH] Fixed problem in FETI-DP code for PDEs with multiple components. --- AMDiS/src/parallel/PetscSolverFeti.cc | 14 +++++++------- AMDiS/src/parallel/PetscSolverFeti.h | 4 +++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/AMDiS/src/parallel/PetscSolverFeti.cc b/AMDiS/src/parallel/PetscSolverFeti.cc index 8aaf8d05..39a36c12 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 d63f0031..0a29a941 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; }; -- GitLab