diff --git a/dune/gfe/mixedriemanniantrsolver.cc b/dune/gfe/mixedriemanniantrsolver.cc index 5282aaa6d4127534f13d93d093af6951ce8fba30..198a79c5b9deaafb4d68b40e7b6ddf76d2dd5835 100644 --- a/dune/gfe/mixedriemanniantrsolver.cc +++ b/dune/gfe/mixedriemanniantrsolver.cc @@ -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();