From ec36d60dbc3fbfe535a3846326eaeccf70c644f7 Mon Sep 17 00:00:00 2001 From: Thomas Witkowski Date: Tue, 9 Oct 2012 09:54:34 +0000 Subject: [PATCH] Changed augmented coarse grid problem to its transpose. --- AMDiS/src/parallel/PetscSolverFeti.cc | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/AMDiS/src/parallel/PetscSolverFeti.cc b/AMDiS/src/parallel/PetscSolverFeti.cc index 007056ef..eb1d365a 100644 --- a/AMDiS/src/parallel/PetscSolverFeti.cc +++ b/AMDiS/src/parallel/PetscSolverFeti.cc @@ -2036,7 +2036,29 @@ namespace AMDiS { VecAXPY(tmp_primal0, -1.0, tmp_primal1); } - KSPSolve(ksp_schur_primal, tmp_primal0, tmp_primal0); + if (augmentedLagrange == false) { + KSPSolve(ksp_schur_primal, tmp_primal0, tmp_primal0); + } else { + Vec tmp_mu; + MatGetVecs(mat_augmented_lagrange, PETSC_NULL, &tmp_mu); + + MatMult(mat_lagrange, tmp_b1, tmp_lagrange); + MatMult(mat_augmented_lagrange, tmp_lagrange, tmp_mu); + VecScale(tmp_mu, -1.0); + + Vec vec_array[2] = {tmp_primal0, tmp_mu}; + Vec vec_nest; + VecCreateNest(PETSC_COMM_WORLD, 2, PETSC_NULL, vec_array, &vec_nest); + + KSPSolve(ksp_schur_primal, vec_nest, vec_nest); + + MatMultTranspose(mat_augmented_lagrange, tmp_mu, tmp_lagrange); + MatMultTranspose(mat_lagrange, tmp_lagrange, tmp_b1); + VecAXPY(tmp_b0, -1.0, tmp_b1); + + VecDestroy(&tmp_mu); + VecDestroy(&vec_nest); + } // === Solve for u_b. === -- GitLab