Skip to content
Snippets Groups Projects
Commit a40e365e authored by Jonathan Youett's avatar Jonathan Youett
Browse files

Adjust to upstream changes

parent c63d18ed
No related branches found
No related tags found
No related merge requests found
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
#ifdef HAVE_IPOPT #ifdef HAVE_IPOPT
#include <dune/solvers/solvers/quadraticipopt.hh> #include <dune/solvers/solvers/quadraticipopt.hh>
#endif #endif
#include <dune/solvers/iterationsteps/blockgsstep.hh> #include <dune/solvers/iterationsteps/blockgssteps.hh>
#include <dune/solvers/iterationsteps/multigridstep.hh> #include <dune/solvers/iterationsteps/multigridstep.hh>
#include <dune/solvers/transferoperators/compressedmultigridtransfer.hh> #include <dune/solvers/transferoperators/compressedmultigridtransfer.hh>
#include <dune/solvers/solvers/loopsolver.hh> #include <dune/solvers/solvers/loopsolver.hh>
...@@ -182,48 +182,49 @@ int main (int argc, char *argv[]) try ...@@ -182,48 +182,49 @@ int main (int argc, char *argv[]) try
#if !defined HAVE_IPOPT #if !defined HAVE_IPOPT
#error You need to have IPOpt installed if you want to use it as the base solver! #error You need to have IPOpt installed if you want to use it as the base solver!
#endif #endif
QuadraticIPOptSolver<OperatorType,VectorType> baseSolver; QuadraticIPOptSolver<OperatorType,VectorType> baseSolver(baseTolerance, 100, Solver::QUIET);
baseSolver.tolerance_ = baseTolerance;
baseSolver.verbosity_ = Solver::QUIET;
#else // Gauss-Seidel is the base solver #else // Gauss-Seidel is the base solver
BlockGSStep<OperatorType, VectorType> baseSolverStep; auto baseSolverStep = Dune::Solvers::BlockGSStepFactory<OperatorType, VectorType>::create(
Dune::Solvers::BlockGS::LocalSolvers::direct(0.0));
EnergyNorm<OperatorType,VectorType> baseEnergyNorm(baseSolverStep); EnergyNorm<OperatorType,VectorType> baseEnergyNorm(baseSolverStep);
LoopSolver<VectorType> baseSolver(&baseSolverStep, LoopSolver<VectorType> baseSolver(baseSolverStep,
baseIt, baseIt,
baseTolerance, baseTolerance,
&baseEnergyNorm, baseEnergyNorm,
Solver::QUIET); Solver::QUIET);
#endif #endif
// Make pre and postsmoothers // Make pre and postsmoothers
BlockGSStep<OperatorType, VectorType> presmoother; auto presmoother = Dune::Solvers::BlockGSStepFactory<OperatorType, VectorType>::create(
BlockGSStep<OperatorType, VectorType> postsmoother; Dune::Solvers::BlockGS::LocalSolvers::direct(0.0));
auto postsmoother = Dune::Solvers::BlockGSStepFactory<OperatorType, VectorType>::create(
Dune::Solvers::BlockGS::LocalSolvers::direct(0.0));
MultigridStep<OperatorType, VectorType> multigridStep(stiffnessMatrix, x, rhs); MultigridStep<OperatorType, VectorType> multigridStep(stiffnessMatrix, x, rhs);
multigridStep.setMGType(mu, nu1, nu2); multigridStep.setMGType(mu, nu1, nu2);
multigridStep.ignoreNodes_ = &dirichletNodes; multigridStep.setIgnore(dirichletNodes);
multigridStep.basesolver_ = &baseSolver; multigridStep.setBaseSolver(baseSolver);
multigridStep.setSmoother(&presmoother,&postsmoother); multigridStep.setSmoother(&presmoother,&postsmoother);
std::vector<CompressedMultigridTransfer<VectorType>* > mgTransfers(grid->maxLevel()); std::vector<std::shared_ptr<CompressedMultigridTransfer<VectorType> > > mgTransfers(grid->maxLevel());
for (size_t i=0; i<mgTransfers.size(); i++) { for (size_t i=0; i<mgTransfers.size(); i++) {
mgTransfers[i] = new CompressedMultigridTransfer<VectorType>; mgTransfers[i] = std::make_shared<CompressedMultigridTransfer<VectorType> >();
mgTransfers[i]->setup(*grid, i, i+1); mgTransfers[i]->setup(*grid, i, i+1);
} }
multigridStep.setTransferOperators(mgTransfers); multigridStep.setTransferOperators(mgTransfers);
EnergyNorm<OperatorType, VectorType> energyNorm(multigridStep); EnergyNorm<OperatorType, VectorType> energyNorm(multigridStep);
LoopSolver<VectorType> solver(&multigridStep, LoopSolver<VectorType> solver(multigridStep,
numIt, numIt,
tolerance, tolerance,
&energyNorm, energyNorm,
Solver::FULL); Solver::FULL);
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include <dune/istl/io.hh> #include <dune/istl/io.hh>
#include <dune/solvers/iterationsteps/blockgsstep.hh> #include <dune/solvers/iterationsteps/blockgssteps.hh>
#include <dune/solvers/iterationsteps/multigridstep.hh> #include <dune/solvers/iterationsteps/multigridstep.hh>
#include <dune/solvers/transferoperators/compressedmultigridtransfer.hh> #include <dune/solvers/transferoperators/compressedmultigridtransfer.hh>
#include <dune/solvers/norms/energynorm.hh> #include <dune/solvers/norms/energynorm.hh>
...@@ -177,24 +177,23 @@ int main (int argc, char *argv[]) try { ...@@ -177,24 +177,23 @@ int main (int argc, char *argv[]) try {
// /////////////////////////// // ///////////////////////////
// First create a base solver // First create a base solver
BlockGSStep<MatrixType, VectorType> baseSolverStep; auto baseSolverStep = Dune::Solvers::BlockGSStepFactory<MatrixType, VectorType>::create(
Dune::Solvers::BlockGS::LocalSolvers::direct(0.0));
EnergyNorm<MatrixType, VectorType> baseEnergyNorm(baseSolverStep); EnergyNorm<MatrixType, VectorType> baseEnergyNorm(baseSolverStep);
::LoopSolver<VectorType> baseSolver(&baseSolverStep, ::LoopSolver<VectorType> baseSolver(baseSolverStep,
baseIt, baseIt,
baseTolerance, baseTolerance,
&baseEnergyNorm, baseEnergyNorm,
Solver::QUIET); Solver::QUIET);
baseSolver.verbosity_ = Solver::QUIET;
baseSolver.tolerance_ = baseTolerance;
// Make pre and postsmoothers // Make pre and postsmoothers
BlockGSStep<MatrixType, VectorType> presmoother;
BlockGSStep<MatrixType, VectorType> postsmoother;
auto presmoother = Dune::Solvers::BlockGSStepFactory<MatrixType, VectorType>::create(
Dune::Solvers::BlockGS::LocalSolvers::direct(0.0));
auto postsmoother = Dune::Solvers::BlockGSStepFactory<MatrixType, VectorType>::create(
Dune::Solvers::BlockGS::LocalSolvers::direct(0.0));
//FEM leads to: //FEM leads to:
//Quasistatic equation of the form : N*D'(t)+K*D(t)=rhs(t) N viscous_stiffness K elastic_stiffness D displacement //Quasistatic equation of the form : N*D'(t)+K*D(t)=rhs(t) N viscous_stiffness K elastic_stiffness D displacement
...@@ -215,23 +214,23 @@ int main (int argc, char *argv[]) try { ...@@ -215,23 +214,23 @@ int main (int argc, char *argv[]) try {
MultigridStep<MatrixType, VectorType> multigridStep(lgs, x, erhs); MultigridStep<MatrixType, VectorType> multigridStep(lgs, x, erhs);
multigridStep.setMGType(mu, nu1, nu2); multigridStep.setMGType(mu, nu1, nu2);
multigridStep.ignoreNodes_ = &dirichletNodes; multigridStep.setIgnore(dirichletNodes);
multigridStep.basesolver_ = &baseSolver; multigridStep.setBaseSolver(baseSolver);
multigridStep.setSmoother(&presmoother,&postsmoother); multigridStep.setSmoother(&presmoother,&postsmoother);
std::vector<CompressedMultigridTransfer<VectorType>* > transfers(grid->maxLevel()); std::vector<std::shared_ptr<CompressedMultigridTransfer<VectorType> > > transfers(grid->maxLevel());
for (size_t i=0; i<transfers.size(); i++) { for (size_t i=0; i<transfers.size(); i++) {
transfers[i] = new CompressedMultigridTransfer<VectorType>; transfers[i] = std::make_shared<CompressedMultigridTransfer<VectorType> >();
transfers[i]->setup(*grid, i, i+1); transfers[i]->setup(*grid, i, i+1);
} }
multigridStep.setTransferOperators(transfers); multigridStep.setTransferOperators(transfers);
EnergyNorm<MatrixType, VectorType> energyNorm(multigridStep); EnergyNorm<MatrixType, VectorType> energyNorm(multigridStep);
::LoopSolver<VectorType> solver(&multigridStep, ::LoopSolver<VectorType> solver(multigridStep,
numIt, numIt,
tolerance, tolerance,
&energyNorm, energyNorm,
Solver::FULL); Solver::FULL);
solver.preprocess(); solver.preprocess();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment