12#ifndef DUMUX_LOCAL_ASSEMBLER_BASE_HH
13#define DUMUX_LOCAL_ASSEMBLER_BASE_HH
18#include <dune/grid/common/gridenums.hh>
32template<
class TypeTag,
class Assembler,
class Implementation,
bool useImplicitAssembly>
41 using ElementVariables =
typename GridVariablesCache::LocalView;
42 using Element =
typename GridView::template Codim<0>::Entity;
45 using LocalResidual = std::decay_t<decltype(std::declval<Assembler>().localResidual())>;
53 const SolutionVector&
curSol)
69 const SolutionVector&
curSol,
70 const ElementDiscretization&
elemDisc,
89 {
return useImplicitAssembly; }
98 if (this->
assembler().isStationaryProblem())
99 DUNE_THROW(Dune::InvalidStateException,
"Using explicit jacobian assembler with stationary local residual");
115 if constexpr (
requires (
const Assembler& a) { a.currentStageWeights(); })
117 const auto [temporalWeight, spatialWeight] =
assembler().currentStageWeights();
120 else if (!
assembler().isStationaryProblem())
139 template<
class Scalar>
141 Scalar temporalWeight,
142 Scalar spatialWeight)
const
145 for (
auto& r : spatial) r *= spatialWeight;
147 auto temporal = localResidual_.evalStorageCurrentLevel(element_, elemDisc_, elemVars);
148 for (
auto& r : temporal) r *= temporalWeight;
173 return localResidual_.evalFluxAndSource(element_, elemDisc_, elemVars);
182 return localResidual_.evalStorage(element_, elemDisc_, prevElemVars_, curElemVars_);
205 if (!this->
assembler().isStationaryProblem())
217 {
return assembler_.problem(); }
221 {
return assembler_; }
229 {
return elementIsGhost_; }
237 {
return elemDisc_; }
241 {
return curElemVars_; }
245 {
return prevElemVars_; }
249 {
return localResidual_; }
253 {
return elemDisc_; }
257 {
return curElemVars_; }
261 {
return prevElemVars_; }
265 {
return localResidual_; }
269 {
return *
static_cast<Implementation*
>(
this); }
272 {
return *
static_cast<const Implementation*
>(
this); }
277 const Element& element_;
278 const SolutionVector& curSol_;
280 ElementDiscretization elemDisc_;
281 ElementVariables curElemVars_;
282 ElementVariables prevElemVars_;
285 bool elementIsGhost_;
A linear system assembler (residual and Jacobian) for general discretization schemes.
Definition assembly/assembler.hh:83
const SolutionVector & prevSol() const
The solution of the previous time step.
Definition assembly/assembler.hh:331
GetPropType< TypeTag, Properties::SolutionVector > SolutionVector
Definition assembly/assembler.hh:96
GVC GridVariablesCache
export type of the grid variables cache
Definition discretization/gridvariables.hh:33
const Assembler & assembler() const
The assembler.
Definition assembly/localassemblerbase.hh:220
static constexpr bool isImplicit()
Returns true if the assembler considers implicit assembly.
Definition assembly/localassemblerbase.hh:88
const ElementVariables & curElemVars() const
The current element variables.
Definition assembly/localassemblerbase.hh:256
ElementResidualVector evalLocalStorageResidual() const
Convenience function to evaluate storage term (i.e., the term with a time derivative) of the local re...
Definition assembly/localassemblerbase.hh:180
void bindLocalViews()
Convenience function bind and prepare all relevant variables required for the evaluation of the local...
Definition assembly/localassemblerbase.hh:189
ElementResidualVector evalLocalResidual(const ElementVariables &elemVars) const
Evaluates the complete local residual for the current element.
Definition assembly/localassemblerbase.hh:113
LocalAssemblerBase(const Assembler &assembler, const Element &element, const SolutionVector &curSol, const ElementDiscretization &elemDisc, const ElementVariables &curElemVars, const ElementVariables &prevElemVars, const LocalResidual &localResidual, const bool elementIsGhost)
The constructor. General version explicitly expecting each argument.
Definition assembly/localassemblerbase.hh:67
const ElementVariables & prevElemVars() const
The element variables of the previous time step.
Definition assembly/localassemblerbase.hh:260
typename LocalResidual::ElementResidualVector ElementResidualVector
Definition assembly/localassemblerbase.hh:46
const Element & element() const
The current element.
Definition assembly/localassemblerbase.hh:224
const LocalResidual & localResidual() const
The local residual for the current element.
Definition assembly/localassemblerbase.hh:264
ElementDiscretization & elemDisc()
The element discretization.
Definition assembly/localassemblerbase.hh:236
bool elementIsGhost() const
Returns if element is a ghost entity.
Definition assembly/localassemblerbase.hh:228
Implementation & asImp_()
Definition assembly/localassemblerbase.hh:268
const ElementDiscretization & elemDisc() const
The element discretization.
Definition assembly/localassemblerbase.hh:252
ElementVariables & curElemVars()
The current element variables.
Definition assembly/localassemblerbase.hh:240
ElementResidualVector evalLocalResidual() const
Convenience function to evaluate the complete local residual for the current element....
Definition assembly/localassemblerbase.hh:95
LocalAssemblerBase(const Assembler &assembler, const Element &element, const SolutionVector &curSol)
The constructor. Delegates to the general constructor.
Definition assembly/localassemblerbase.hh:51
const Problem & problem() const
The problem.
Definition assembly/localassemblerbase.hh:216
ElementResidualVector evalLocalFluxAndSourceResidual(const ElementVariables &elemVars) const
Evaluates the flux and source terms (i.e., the terms without a time derivative) of the local residual...
Definition assembly/localassemblerbase.hh:171
ElementResidualVector evalLocalFluxAndSourceResidual() const
Convenience function to evaluate the flux and source terms (i.e., the terms without a time derivative...
Definition assembly/localassemblerbase.hh:159
LocalResidual & localResidual()
The local residual for the current element.
Definition assembly/localassemblerbase.hh:248
std::decay_t< decltype(std::declval< Assembler >().localResidual())> LocalResidual
Definition assembly/localassemblerbase.hh:45
const Implementation & asImp_() const
Definition assembly/localassemblerbase.hh:271
ElementVariables & prevElemVars()
The element variables of the previous time step.
Definition assembly/localassemblerbase.hh:244
const SolutionVector & curSol() const
The current solution.
Definition assembly/localassemblerbase.hh:232
ElementResidualVector evalLocalResidualForStage(const ElementVariables &elemVars, Scalar temporalWeight, Scalar spatialWeight) const
Evaluate the stage-weighted residual for multi-stage (e.g. Runge-Kutta) assembly.
Definition assembly/localassemblerbase.hh:140
The element-wise residual for grid-based discretization schemes.
Definition assembly/localresidual.hh:39
ReservedBlockVector< NumEqVector, Dumux::Detail::LocalDofs::maxNumLocalDofs< ElementDiscretization >()> ElementResidualVector
the container storing all element residuals
Definition assembly/localresidual.hh:56
Defines all properties used in Dumux.
GridCache::LocalView localView(const GridCache &gridCache)
Free function to get the local view of a grid cache object.
Definition localview.hh:26
typename GetProp< TypeTag, Property >::type GetPropType
get the type alias defined in the property
Definition propertysystem.hh:296
decltype(auto) gridDiscretization(const T &t, Args &&... args)
The grid discretization.
Definition griddiscretization.hh:65
Definition assembly/assembler.hh:44
Definition common/pdesolver.hh:24