diff --git a/src/factories/stackedblocksfactory.cc b/src/factories/stackedblocksfactory.cc index 648518f353bd00ef354978f9c47ed9ae66a91a24..051afa4623f3fe9e13bb398bbd124b2a363a9402 100644 --- a/src/factories/stackedblocksfactory.cc +++ b/src/factories/stackedblocksfactory.cc @@ -202,11 +202,6 @@ void StackedBlocksFactory<HostGridType, VectorType>::setBoundaryConditions() { for (int j=0; j<leafVertexCount; j++) { if (leafFaces_[i]->upper.containsVertex(j)) (*velocityDirichletNodes)[j][0] = true; - - #if MY_DIM == 3 //TODO: wrong, needs revision - if (leafFaces_[i]->front.containsVertex(j) || leafFaces_[i]->back.containsVertex(j)) - zeroDirichletNodes->at(j)[2] = true; - #endif } std::shared_ptr<LeafBoundaryCondition> velocityDirichletBoundary = std::make_shared<LeafBoundaryCondition>("dirichlet"); @@ -229,6 +224,11 @@ void StackedBlocksFactory<HostGridType, VectorType>::setBoundaryConditions() { (*zeroDirichletNodes)[j][d] = true; } } + + #if MY_DIM == 3 //TODO: wrong, needs revision + if (leafFaces_[0]->front.containsVertex(j) || leafFaces_[0]->back.containsVertex(j)) + (*zeroDirichletNodes)[j][2] = true; + #endif } std::shared_ptr<LeafBoundaryCondition> zeroDirichletBoundary = std::make_shared<LeafBoundaryCondition>("dirichlet"); diff --git a/src/multi-body-problem.cfg b/src/multi-body-problem.cfg index 8df2a20d9042b057aea7798bbb123dd1ffc9ebd6..b3a4ff9e8e63ef272ea4b23aec19d19924eca809 100644 --- a/src/multi-body-problem.cfg +++ b/src/multi-body-problem.cfg @@ -77,7 +77,7 @@ maximumIterations = 10000 verbosity = quiet [solver.tnnmg.main] -pre = 10 +pre = 1 multi = 5 # number of multigrid steps post = 0 diff --git a/src/solverfactorytest.cc b/src/solverfactorytest.cc index 9ae2798e41838ba5d2398ddb648141861eaf1e0e..5365726f355ae523c07b73edd03510f123fcd0dc 100644 --- a/src/solverfactorytest.cc +++ b/src/solverfactorytest.cc @@ -177,10 +177,10 @@ void solveProblem(const ContactNetwork& contactNetwork, refSolver.solve(); std::cout << correctionNorms.size() << std::endl; - if (initial) { + /*if (initial) { x = refX; return; - } + }*/ // set up solver factory solver // set up functional diff --git a/src/spatial-solving/solverfactory.cc b/src/spatial-solving/solverfactory.cc index 0650c522e86f12f4a4f62b0b61d38ab9e40fb601..7084672a0f4cc0d28318ed8a0c160504cc9541a6 100644 --- a/src/spatial-solving/solverfactory.cc +++ b/src/spatial-solving/solverfactory.cc @@ -19,10 +19,10 @@ SolverFactory<Functional, BitVector>::SolverFactory( const BitVector& ignoreNodes) : J_(Dune::Solvers::wrap_own_share<const Functional>(std::forward<Functional>(J))) { - auto localSolver = Dune::TNNMG::gaussSeidelLocalSolver(LocalSolver()); - nonlinearSmoother_ = std::make_shared<NonlinearSmoother>(*J_, dummyIterate_, localSolver); + //auto localSolver = Dune::TNNMG::gaussSeidelLocalSolver(LocalSolver()); + //nonlinearSmoother_ = std::make_shared<NonlinearSmoother>(*J_, dummyIterate_, localSolver); - //nonlinearSmoother_ = std::make_shared<NonlinearSmoother>(*J_, dummyIterate_, LocalSolver()); + nonlinearSmoother_ = std::make_shared<NonlinearSmoother>(*J_, dummyIterate_, LocalSolver()); auto linearSolver_ptr = Dune::Solvers::wrap_own_share<std::decay_t<LinearSolver>>(std::forward<LinearSolver>(linearSolver)); diff --git a/src/spatial-solving/solverfactory.hh b/src/spatial-solving/solverfactory.hh index 203bd9558af161de74aab81f3989a703b203a39c..a68755ec85c85cd0e8171684406781f92f58b373 100644 --- a/src/spatial-solving/solverfactory.hh +++ b/src/spatial-solving/solverfactory.hh @@ -28,8 +28,8 @@ class SolverFactory { using Vector = typename Functional::Vector; using BitVector = BitVectorType; - using LocalSolver = Dune::TNNMG::ScalarObstacleSolver;//LocalBisectionSolver; - using NonlinearSmoother = Dune::TNNMG::NonlinearGSStep<Functional, Dune::TNNMG::GaussSeidelLocalSolver<LocalSolver>, BitVector>; + using LocalSolver = LocalBisectionSolver;//Dune::TNNMG::ScalarObstacleSolver;//LocalBisectionSolver; + using NonlinearSmoother = Dune::TNNMG::NonlinearGSStep<Functional, LocalBisectionSolver, BitVector>;//Dune::TNNMG::NonlinearGSStep<Functional, Dune::TNNMG::GaussSeidelLocalSolver<LocalSolver>, BitVector>; using Linearization = Linearization<Functional, BitVector>; using DefectProjection = typename Dune::TNNMG::ObstacleDefectProjection; diff --git a/src/spatial-solving/tnnmg/functional.hh b/src/spatial-solving/tnnmg/functional.hh index 098c7208d7466b8a3bd32012b400167d002c4902..8305b04bd1026692cf03392e58ab53a5a326c0b5 100644 --- a/src/spatial-solving/tnnmg/functional.hh +++ b/src/spatial-solving/tnnmg/functional.hh @@ -352,13 +352,13 @@ auto coordinateRestriction(const ShiftedFunctional<M, V, Nonlinearity, R>& f, co auto&& phii = f.phi().restriction(i); - /*auto v = ri; + auto v = ri; double const vnorm = v.two_norm(); if (vnorm > 1.0) - v /= vnorm;*/ + v /= vnorm; - //return FirstOrderModelFunctional<LocalVector, decltype(phii), LocalLowerObstacle, LocalUpperObstacle, LocalVector, LocalVector, Range>(*Aii_p, std::move(ri), std::move(phii), std::move(dli), std::move(dui), std::move(f.origin()[i]), std::move(v)); - return Functional<LocalMatrix&, LocalVector, decltype(phii), LocalLowerObstacle, LocalUpperObstacle, Range>(*Aii_p, std::move(ri), std::move(phii), std::move(dli), std::move(dui)); + return FirstOrderModelFunctional<LocalVector, decltype(phii), LocalLowerObstacle, LocalUpperObstacle, LocalVector, LocalVector, Range>(*Aii_p, std::move(ri), std::move(phii), std::move(dli), std::move(dui), std::move(f.origin()[i]), std::move(v)); + //return Functional<LocalMatrix&, LocalVector, decltype(phii), LocalLowerObstacle, LocalUpperObstacle, Range>(*Aii_p, std::move(ri), std::move(phii), std::move(dli), std::move(dui)); }