From 5edc5bbde13e7aa843667305716e1d8f2f767228 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Fri, 2 Nov 2012 15:17:38 +0100 Subject: [PATCH] Use lambda --- src/one-body-sample.org | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/one-body-sample.org b/src/one-body-sample.org index 56a4df03..84c155fc 100644 --- a/src/one-body-sample.org +++ b/src/one-body-sample.org @@ -394,27 +394,30 @@ timeSteppingScheme->setup(ell, tau, time, problem_rhs, problem_iterate, problem_A); + auto solveDisplacementProblem = [&](VectorType &_problem_iterate, + SingletonVectorType const &_alpha) { + auto myGlobalNonlinearity = assemble_nonlinearity<MatrixType, VectorType> + (parset.sub("boundary.friction"), *nodalIntegrals, _alpha, + surfaceNormalStress); + + MyConvexProblemType const myConvexProblem + (problem_A, *myGlobalNonlinearity, problem_rhs); + MyBlockProblemType myBlockProblem(parset, myConvexProblem); + auto multigridStep = mySolver.getSolver(); + multigridStep->setProblem(_problem_iterate, myBlockProblem); + + LoopSolver<VectorType> overallSolver + (multigridStep, parset.get<size_t>("solver.tnnmg.maxiterations"), + parset.get<double>("solver.tolerance"), &energyNorm, verbosity, + false); // absolute error + overallSolver.solve(); + }; + // Since the velocity explodes in the quasistatic case, use the // displacement as a convergence criterion VectorType u_saved; for (size_t state_fpi = 1; state_fpi <= state_fpi_max; ++state_fpi) { - { - auto myGlobalNonlinearity - = assemble_nonlinearity<MatrixType, VectorType> - (parset.sub("boundary.friction"), *nodalIntegrals, alpha, - surfaceNormalStress); - - MyConvexProblemType const myConvexProblem - (problem_A, *myGlobalNonlinearity, problem_rhs); - MyBlockProblemType myBlockProblem(parset, myConvexProblem); - auto multigridStep = mySolver.getSolver(); - multigridStep->setProblem(problem_iterate, myBlockProblem); - - LoopSolver<VectorType> overallSolver - (multigridStep, parset.get<size_t>("solver.tnnmg.maxiterations"), - solver_tolerance, &energyNorm, verbosity, false); // absolute error - overallSolver.solve(); - } + solveDisplacementProblem(problem_iterate, alpha); timeSteppingScheme->postProcess(problem_iterate); timeSteppingScheme->extractDisplacement(u); -- GitLab