diff --git a/AMDiS/src/ParallelDomainBase.cc b/AMDiS/src/ParallelDomainBase.cc index f288d8005e9b7030ffd16627df92c862f9b89452..5a2668fd53fde1ab52a23a78d004dff3646fd5c6 100644 --- a/AMDiS/src/ParallelDomainBase.cc +++ b/AMDiS/src/ParallelDomainBase.cc @@ -306,14 +306,11 @@ namespace AMDiS { clock_t first = clock(); - // MatCreate(PETSC_COMM_WORLD, &petscMatrix); - // MatSetSizes(petscMatrix, nRankRows, nRankRows, nOverallRows, nOverallRows); - //MatSetType(petscMatrix, MATAIJ); - using mtl::tag::major; using mtl::tag::nz; using mtl::begin; using mtl::end; namespace traits= mtl::traits; typedef DOFMatrix::base_matrix_type Matrix; + int nnz = 0; int d_nnz[nRankRows]; for (int i = 0; i < nRankRows; i++) d_nnz[i] = 0; @@ -344,10 +341,12 @@ namespace AMDiS { } } - INFO(info, 8)("t1 petsc matrix needed %.5f seconds\n", TIME_USED(first, clock())); + for (int i = 0; i < nRankRows; i++) + if (d_nnz[i] > nnz) + nnz = d_nnz[i]; MatCreateMPIAIJ(PETSC_COMM_WORLD, nRankRows, nRankRows, nOverallRows, nOverallRows, - 0, d_nnz, 0, NULL, &petscMatrix); + nnz, NULL, nnz / 10, NULL, &petscMatrix); using mtl::tag::major; using mtl::tag::nz; using mtl::begin; using mtl::end; namespace traits= mtl::traits; @@ -453,7 +452,7 @@ namespace AMDiS { KSPSetOperators(ksp, petscMatrix, petscMatrix, DIFFERENT_NONZERO_PATTERN); KSPGetPC(ksp, &pc); // PCSetType(pc, PCNONE); - PCSetType(pc, PCJACOBI); + PCSetType(pc, PCSOR); KSPSetTolerances(ksp, 1.e-7, PETSC_DEFAULT, PETSC_DEFAULT, PETSC_DEFAULT); KSPSetType(ksp, KSPBCGS); //KSPSetType(ksp, KSPCG);