diff --git a/linelast.cc b/linelast.cc index c2e9833a35b1488945a3df365c401675822868d7..ffcf7494b360563a15b42d808da5f33343cf4cbf 100644 --- a/linelast.cc +++ b/linelast.cc @@ -188,7 +188,7 @@ int main (int argc, char *argv[]) try EnergyNorm<OperatorType,VectorType> baseEnergyNorm(baseSolverStep); - IterativeSolver<VectorType> baseSolver(&baseSolverStep, + LoopSolver<VectorType> baseSolver(&baseSolverStep, baseIt, baseTolerance, &baseEnergyNorm, @@ -200,20 +200,20 @@ int main (int argc, char *argv[]) try BlockGSStep<OperatorType, VectorType> postsmoother; - MultigridStep<OperatorType, VectorType> multigridStep(stiffnessMatrix, x, rhs, grid.maxLevel()+1); + MultigridStep<OperatorType, VectorType> multigridStep(stiffnessMatrix, x, rhs); multigridStep.setMGType(1, nu1, nu2); multigridStep.ignoreNodes_ = &dirichletNodes.back(); multigridStep.basesolver_ = &baseSolver; multigridStep.setSmoother(&presmoother,&postsmoother); - multigridStep.mgTransfer_.resize(grid.maxLevel()); - for (int i=0; i<multigridStep.mgTransfer_.size(); i++) { - CompressedMultigridTransfer<VectorType>* newTransferOp = new CompressedMultigridTransfer<VectorType>; - newTransferOp->setup(grid, i, i+1); - multigridStep.mgTransfer_[i] = newTransferOp; + std::vector<CompressedMultigridTransfer<VectorType>* > mgTransfers(grid->maxLevel()); + for (int i=0; i<mgTransfers.size(); i++) { + mgTransfers[i] = new CompressedMultigridTransfer<VectorType>; + mgTransfers[i]->setup(*grid, i, i+1); } + multigridStep.setTransferOperators(mgTransfers); EnergyNorm<OperatorType, VectorType> energyNorm(multigridStep); LoopSolver<VectorType> solver(&multigridStep, @@ -225,7 +225,6 @@ int main (int argc, char *argv[]) try solver.preprocess(); - multigridStep.preprocess(); // Compute solution solver.solve();