3.4
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
Loading...
Searching...
No Matches
newtonsolver.hh File Reference

Reference implementation of a Newton solver. More...

#include <cmath>
#include <memory>
#include <iostream>
#include <type_traits>
#include <algorithm>
#include <numeric>
#include <dune/common/timer.hh>
#include <dune/common/exceptions.hh>
#include <dune/common/parallel/mpicommunication.hh>
#include <dune/common/parallel/mpihelper.hh>
#include <dune/common/std/type_traits.hh>
#include <dune/common/indices.hh>
#include <dune/common/hybridutilities.hh>
#include <dune/istl/bvector.hh>
#include <dune/istl/multitypeblockvector.hh>
#include <dumux/common/parameters.hh>
#include <dumux/common/exceptions.hh>
#include <dumux/common/typetraits/vector.hh>
#include <dumux/common/typetraits/isvalid.hh>
#include <dumux/common/timeloop.hh>
#include <dumux/common/pdesolver.hh>
#include <dumux/common/variablesbackend.hh>
#include <dumux/io/format.hh>
#include <dumux/linear/linearsolveracceptsmultitypematrix.hh>
#include <dumux/linear/matrixconverter.hh>
#include <dumux/assembly/partialreassembler.hh>
#include "newtonconvergencewriter.hh"
#include "primaryvariableswitchadapter.hh"

Go to the source code of this file.

Description

Reference implementation of a Newton solver.

Classes

struct  Dumux::Detail::PriVarSwitchVariablesType< Assembler, exportsGridVars >
struct  Dumux::Detail::PriVarSwitchVariablesType< Assembler, false >
struct  Dumux::Detail::supportsPartialReassembly
 helper struct detecting if an assembler supports partial reassembly More...
struct  Dumux::Detail::BlockTypeHelper< S, isScalar >
struct  Dumux::Detail::BlockTypeHelper< S, true >
class  Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >
 An implementation of a Newton solver. More...

Namespaces

namespace  Dumux
namespace  Dumux::Detail

Typedefs

template<class Assembler>
using Dumux::Detail::AssemblerGridVariablesType = typename Assembler::GridVariables
template<class Assembler>
using Dumux::Detail::PriVarSwitchVariables = typename PriVarSwitchVariablesType<Assembler, assemblerExportsGridVariables<Assembler>>::Type
template<class LinearSolver, class Residual>
using Dumux::Detail::NormDetector = decltype(std::declval<LinearSolver>().norm(std::declval<Residual>()))
template<class C>
using Dumux::Detail::dynamicIndexAccess = decltype(std::declval<C>()[0])
template<class C>
using Dumux::Detail::staticIndexAccess = decltype(std::declval<C>()[Dune::Indices::_0])
template<class SolutionVector>
using Dumux::Detail::BlockType = typename BlockTypeHelper<SolutionVector, Dune::IsNumber<SolutionVector>::value>::type

Functions

template<class LinearSolver, class Residual>
static constexpr bool Dumux::Detail::hasNorm ()
template<class V, class Scalar, class Reduce, class Transform>
auto Dumux::Detail::hybridInnerProduct (const V &v1, const V &v2, Scalar init, Reduce &&r, Transform &&t) -> std::enable_if_t< hasDynamicIndexAccess< V >(), Scalar >
template<class V, class Scalar, class Reduce, class Transform>
auto Dumux::Detail::hybridInnerProduct (const V &v1, const V &v2, Scalar init, Reduce &&r, Transform &&t) -> std::enable_if_t< hasStaticIndexAccess< V >() &&!hasDynamicIndexAccess< V >(), Scalar >
template<class Scalar, class V>
auto Dumux::Detail::maxRelativeShift (const V &v1, const V &v2) -> std::enable_if_t< Dune::IsNumber< V >::value, Scalar >
template<class Scalar, class V>
auto Dumux::Detail::maxRelativeShift (const V &v1, const V &v2) -> std::enable_if_t<!Dune::IsNumber< V >::value, Scalar >
template<class To, class From>
void Dumux::Detail::assign (To &to, const From &from)
template<class T, std::enable_if_t< Dune::IsNumber< std::decay_t< T > >::value, int > = 0>
constexpr std::size_t Dumux::Detail::blockSize ()
template<class T, std::enable_if_t<!Dune::IsNumber< std::decay_t< T > >::value, int > = 0>
constexpr std::size_t Dumux::Detail::blockSize ()

Variables

template<class Assembler>
constexpr bool Dumux::Detail::assemblerExportsGridVariables = Dune::Std::is_detected_v<AssemblerGridVariablesType, Assembler>
template<class C>
static constexpr auto Dumux::Detail::hasDynamicIndexAccess = Dune::Std::is_detected<dynamicIndexAccess, C>{}
template<class C>
static constexpr auto Dumux::Detail::hasStaticIndexAccess = Dune::Std::is_detected<staticIndexAccess, C>{}