Skip to content
Snippets Groups Projects
Commit 7c400af1 authored by Sander, Oliver's avatar Sander, Oliver
Browse files

Adapt to changes in dune-solvers

In particular, MonotoneMultiGridStep use shared_ptr much more
frequently now.  Also, various of its data members are now
protected, and getters/setters have to be used.
parent 6fbe4865
No related branches found
No related tags found
No related merge requests found
......@@ -81,12 +81,12 @@ setup(const GridType& grid,
// ////////////////////////////////
#ifdef HAVE_IPOPT
// First create an IPOpt base solver
auto baseSolver0 = new QuadraticIPOptSolver<MatrixType00,CorrectionType0>;
baseSolver0->verbosity_ = NumProc::QUIET;
baseSolver0->tolerance_ = baseTolerance;
auto baseSolver1 = new QuadraticIPOptSolver<MatrixType11,CorrectionType1>;
baseSolver1->verbosity_ = NumProc::QUIET;
baseSolver1->tolerance_ = baseTolerance;
auto baseSolver0 = std::make_shared<QuadraticIPOptSolver<MatrixType00,CorrectionType0>>();
baseSolver0->setVerbosity(NumProc::QUIET);
baseSolver0->setTolerance(baseTolerance);
auto baseSolver1 = std::make_shared<QuadraticIPOptSolver<MatrixType11,CorrectionType1>>();
baseSolver1->setVerbosity(NumProc::QUIET);
baseSolver1->setTolerance(baseTolerance);
#else
// First create a Gauss-seidel base solver
TrustRegionGSStep<MatrixType00, CorrectionType0>* baseSolverStep0 = new TrustRegionGSStep<MatrixType00, CorrectionType0>;
......@@ -129,10 +129,10 @@ setup(const GridType& grid,
mmgStep0->setMGType(mu, nu1, nu2);
mmgStep0->ignoreNodes_ = globalDirichletNodes0;
mmgStep0->basesolver_ = baseSolver0;
mmgStep0->setBaseSolver(baseSolver0);
mmgStep0->setSmoother(presmoother0, postsmoother0);
mmgStep0->obstacleRestrictor_= new MandelObstacleRestrictor<CorrectionType0>();
mmgStep0->verbosity_ = Solver::QUIET;
mmgStep0->setObstacleRestrictor(std::make_shared<MandelObstacleRestrictor<CorrectionType0>>());
mmgStep0->setVerbosity(Solver::QUIET);
TrustRegionGSStep<MatrixType11, CorrectionType1>* presmoother1 = new TrustRegionGSStep<MatrixType11, CorrectionType1>;
TrustRegionGSStep<MatrixType11, CorrectionType1>* postsmoother1 = new TrustRegionGSStep<MatrixType11, CorrectionType1>;
......@@ -141,10 +141,10 @@ setup(const GridType& grid,
mmgStep1->setMGType(mu, nu1, nu2);
mmgStep1->ignoreNodes_ = globalDirichletNodes1;
mmgStep1->basesolver_ = baseSolver1;
mmgStep1->setBaseSolver(baseSolver1);
mmgStep1->setSmoother(presmoother1, postsmoother1);
mmgStep1->obstacleRestrictor_= new MandelObstacleRestrictor<CorrectionType1>();
mmgStep1->verbosity_ = Solver::QUIET;
mmgStep1->setObstacleRestrictor(std::make_shared<MandelObstacleRestrictor<CorrectionType1>>());
mmgStep1->setVerbosity(Solver::QUIET);
// //////////////////////////////////////////////////////////////////////////////////////
// Assemble a Laplace matrix to create a norm that's equivalent to the H1-norm
......@@ -193,12 +193,6 @@ setup(const GridType& grid,
// Create the transfer operators
// ////////////////////////////////////
for (size_t k=0; k<mmgStep0->mgTransfer_.size(); k++)
delete(mmgStep0->mgTransfer_[k]);
for (size_t k=0; k<mmgStep1->mgTransfer_.size(); k++)
delete(mmgStep1->mgTransfer_[k]);
mmgStep0->mgTransfer_.resize(numLevels-1);
mmgStep1->mgTransfer_.resize(numLevels-1);
......@@ -213,13 +207,13 @@ setup(const GridType& grid,
DuneFunctionsBasis<Dune::Functions::PQkNodalBasis<typename GridType::LeafGridView,1> >,
FufemBasis0>(pkToP1TransferMatrix,p1Basis,*basis0_);
mmgStep0->mgTransfer_.back() = new TruncatedCompressedMGTransfer<CorrectionType0>;
mmgStep0->mgTransfer_.back() = std::make_shared<TruncatedCompressedMGTransfer<CorrectionType0>>();
Dune::shared_ptr<TransferOperatorType> topTransferOperator = Dune::make_shared<TransferOperatorType>(pkToP1TransferMatrix);
dynamic_cast<TruncatedCompressedMGTransfer<CorrectionType0>*>(mmgStep0->mgTransfer_.back())->setMatrix(topTransferOperator);
std::dynamic_pointer_cast<TruncatedCompressedMGTransfer<CorrectionType0>>(mmgStep0->mgTransfer_.back())->setMatrix(topTransferOperator);
for (size_t i=0; i<mmgStep0->mgTransfer_.size()-1; i++){
// Construct the local multigrid transfer matrix
TruncatedCompressedMGTransfer<CorrectionType0>* newTransferOp0 = new TruncatedCompressedMGTransfer<CorrectionType0>;
auto newTransferOp0 = std::make_shared<TruncatedCompressedMGTransfer<CorrectionType0>>();
newTransferOp0->setup(*grid_,i+1,i+2);
mmgStep0->mgTransfer_[i] = newTransferOp0;
......@@ -234,7 +228,7 @@ setup(const GridType& grid,
for (size_t i=0; i<mmgStep0->mgTransfer_.size(); i++){
// Construct the local multigrid transfer matrix
TruncatedCompressedMGTransfer<CorrectionType0>* newTransferOp0 = new TruncatedCompressedMGTransfer<CorrectionType0>;
auto newTransferOp0 = std::make_shared<TruncatedCompressedMGTransfer<CorrectionType0>>();
newTransferOp0->setup(*grid_,i,i+1);
mmgStep0->mgTransfer_[i] = newTransferOp0;
......@@ -253,13 +247,13 @@ setup(const GridType& grid,
DuneFunctionsBasis<Dune::Functions::PQkNodalBasis<typename GridType::LeafGridView,1> >,
FufemBasis1>(pkToP1TransferMatrix,p1Basis,*basis1_);
mmgStep1->mgTransfer_.back() = new TruncatedCompressedMGTransfer<CorrectionType1>;
Dune::shared_ptr<TransferOperatorType> topTransferOperator = Dune::make_shared<TransferOperatorType>(pkToP1TransferMatrix);
dynamic_cast<TruncatedCompressedMGTransfer<CorrectionType1>*>(mmgStep1->mgTransfer_.back())->setMatrix(topTransferOperator);
mmgStep1->mgTransfer_.back() = std::make_shared<TruncatedCompressedMGTransfer<CorrectionType1>>();
std::shared_ptr<TransferOperatorType> topTransferOperator = std::make_shared<TransferOperatorType>(pkToP1TransferMatrix);
std::dynamic_pointer_cast<TruncatedCompressedMGTransfer<CorrectionType1>>(mmgStep1->mgTransfer_.back())->setMatrix(topTransferOperator);
for (size_t i=0; i<mmgStep1->mgTransfer_.size()-1; i++){
// Construct the local multigrid transfer matrix
TruncatedCompressedMGTransfer<CorrectionType1>* newTransferOp1 = new TruncatedCompressedMGTransfer<CorrectionType1>;
auto newTransferOp1 = std::make_shared<TruncatedCompressedMGTransfer<CorrectionType1>>();
newTransferOp1->setup(*grid_,i+1,i+2);
mmgStep1->mgTransfer_[i] = newTransferOp1;
}
......@@ -273,7 +267,7 @@ setup(const GridType& grid,
for (size_t i=0; i<mmgStep1->mgTransfer_.size(); i++){
// Construct the local multigrid transfer matrix
TruncatedCompressedMGTransfer<CorrectionType1>* newTransferOp = new TruncatedCompressedMGTransfer<CorrectionType1>;
auto newTransferOp = std::make_shared<TruncatedCompressedMGTransfer<CorrectionType1>>();
newTransferOp->setup(*grid_,i,i+1);
mmgStep1->mgTransfer_[i] = newTransferOp;
}
......@@ -291,8 +285,8 @@ setup(const GridType& grid,
hasObstacle0_.resize(assembler->basis_.size({0}), true);
hasObstacle1_.resize(assembler->basis_.size({1}), true);
#endif
mmgStep0->hasObstacle_ = &hasObstacle0_;
mmgStep1->hasObstacle_ = &hasObstacle1_;
mmgStep0->setHasObstacles(hasObstacle0_);
mmgStep1->setHasObstacles(hasObstacle1_);
}
}
......@@ -403,13 +397,13 @@ void MixedRiemannianTrustRegionSolver<GridType,Basis,Basis0,TargetSpace0,Basis1,
mmgStep0->setProblem(stiffnessMatrix[_0][_0], corr_global[_0], residual[_0]);
trustRegionObstacles0 = trustRegion0.obstacles();
mmgStep0->obstacles_ = &trustRegionObstacles0;
mmgStep0->setObstacles(trustRegionObstacles0);
mmgStep0->preprocess();
mmgStep1->setProblem(stiffnessMatrix[_1][_1], corr_global[_1], residual[_1]);
trustRegionObstacles1 = trustRegion1.obstacles();
mmgStep1->obstacles_ = &trustRegionObstacles1;
mmgStep1->setObstacles(trustRegionObstacles1);
mmgStep1->preprocess();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment