diff --git a/AMDiS/src/parallel/PetscSolverNSCH.cc b/AMDiS/src/parallel/PetscSolverNSCH.cc index e97da33a3f6361df709436f0a41c56264f2fb0d9..607b24e076290b996f9296c14dae5188d4e3e771 100644 --- a/AMDiS/src/parallel/PetscSolverNSCH.cc +++ b/AMDiS/src/parallel/PetscSolverNSCH.cc @@ -31,18 +31,16 @@ namespace AMDiS { CahnHilliardData2* data = static_cast<CahnHilliardData2*>(ctx); /// extract vectors - Vec b1, b2, b34, b5, x1, x2, x34, x5, b3,b4; - data->globalMatrixSolver->extractVectorComponent(b, 0+3, &b1); - data->globalMatrixSolver->extractVectorComponent(b, 1+3, &b2); - data->globalMatrixSolver->extractVectorComponent(b, 0, &b34, 2); - data->globalMatrixSolver->extractVectorComponent(b, 2, &b5); + Vec b1, b2, b34, b5, x1, x2, x34, x5; + data->globalMatrixSolver->extractVectorComponent(b, data->dim+1, &b1); + data->globalMatrixSolver->extractVectorComponent(b, data->dim+2, &b2); + data->globalMatrixSolver->extractVectorComponent(b, 0, &b34, data->dim); + data->globalMatrixSolver->extractVectorComponent(b, data->dim, &b5); - data->globalMatrixSolver->extractVectorComponent(x, 0+3, &x1); - data->globalMatrixSolver->extractVectorComponent(x, 1+3, &x2); - data->globalMatrixSolver->extractVectorComponent(x, 0, &x34, 2); - data->globalMatrixSolver->extractVectorComponent(x, 2, &x5); - data->globalMatrixSolver->extractVectorComponent(b, 0, &b3, 1); - data->globalMatrixSolver->extractVectorComponent(b, 1, &b4, 1); + data->globalMatrixSolver->extractVectorComponent(x, data->dim+1, &x1); + data->globalMatrixSolver->extractVectorComponent(x, data->dim+2, &x2); + data->globalMatrixSolver->extractVectorComponent(x, 0, &x34, data->dim); + data->globalMatrixSolver->extractVectorComponent(x, data->dim, &x5); /// solve Cahn-Hilliard Preconditioner @@ -190,7 +188,7 @@ namespace AMDiS { double wtime = MPI::Wtime(); int dim = componentSpaces[0]->getMesh()->getDim(); pressureComponent=dim; - const FiniteElemSpace *cahnHilliardFeSpace = componentSpaces[0+3]; + const FiniteElemSpace *cahnHilliardFeSpace = componentSpaces[dim+1]; const FiniteElemSpace *velocityFeSpace= componentSpaces[0]; const FiniteElemSpace *pressureFeSpace = componentSpaces[pressureComponent]; @@ -199,6 +197,7 @@ namespace AMDiS { PCShellSetContext(pc, &matShellContext); matShellContext.globalMatrixSolver = (this); matShellContext.mpiCommGlobal= &(meshDistributor->getMpiComm(0)); + matShellContext.dim = dim; /// Init Cahn-Hilliard part @@ -222,16 +221,16 @@ namespace AMDiS { laplaceOp2.addTerm(&sot); // -delta*K massMatrixCH.assembleOperator(massOpCH); - massMatrixSolverCH = createSubSolver(0+3, "mass_"); + massMatrixSolverCH = createSubSolver(dim+1, "mass_"); massMatrixSolverCH->fillPetscMatrix(&massMatrixCH); // === matrix (M + eps*sqrt(delta)*K) === laplaceMatrixCH.assembleOperator(laplaceOpCH); - laplaceMatrixSolverCH = createSubSolver(0+3, "laplace_"); + laplaceMatrixSolverCH = createSubSolver(dim+1, "laplace_"); laplaceMatrixSolverCH->fillPetscMatrix(&laplaceMatrixCH); // === matrix (-delta*K) === deltaKMatrix.assembleOperator(laplaceOp2); - deltaKMatrixSolver = createSubSolver(0+3, "laplace2_"); + deltaKMatrixSolver = createSubSolver(dim+1, "laplace2_"); deltaKMatrixSolver->fillPetscMatrix(&deltaKMatrix); } @@ -317,9 +316,9 @@ namespace AMDiS { conDifMatrixSolver->fillPetscMatrix(&conDifMatrix); matShellContext.matConDif = conDifMatrixSolver->getMatInterior(); - extractMatrixComponent(mat[0][0], 2, 1, 0, 2, &(matShellContext.matDiv)); - extractMatrixComponent(mat[0][0], 0, 2, 2, 1, &(matShellContext.matGrad)); - extractMatrixComponent(mat[0][0], 0, 2, 0, 2, &(matShellContext.velocityMat)); + extractMatrixComponent(mat[0][0], dim, 1, 0, dim, &(matShellContext.matDiv)); + extractMatrixComponent(mat[0][0], 0, dim, dim, 1, &(matShellContext.matGrad)); + extractMatrixComponent(mat[0][0], 0, dim, 0, dim, &(matShellContext.velocityMat)); ///erstelle kspVelocity KSPCreate((meshDistributor->getMpiComm(0)), &(matShellContext.kspVelocity)); diff --git a/AMDiS/src/parallel/PetscSolverNSCH.h b/AMDiS/src/parallel/PetscSolverNSCH.h index c5a0b92668f0275012015acf4c25c69988ef79b4..311878693a497ec490e620a52d9e04ee3914808b 100644 --- a/AMDiS/src/parallel/PetscSolverNSCH.h +++ b/AMDiS/src/parallel/PetscSolverNSCH.h @@ -31,6 +31,7 @@ namespace AMDiS { Mat matMassCH, matMinusDeltaK, matGrad, matDiv, matConDif, matSchur, velocityMat; PetscSolverGlobalMatrix *globalMatrixSolver; double *eps, *delta; + int dim; MPI::Intracomm *mpiCommGlobal; };