12#ifndef DUMUX_ASSEMBLY_BOUNDARY_FLUX_INTEGRAL_HH
13#define DUMUX_ASSEMBLY_BOUNDARY_FLUX_INTEGRAL_HH
17#include <dumux/common/typetraits/localdofs_.hh>
34 class ElementVariables,
class BoundaryTypes>
37 const ElementDiscretization& elemDisc,
38 const ElementVariables& elemVars,
39 const typename ElementDiscretization::SubControlVolumeFace& scvf,
43 BoundaryFluxes boundaryFlux(0.0);
45 boundaryFlux += qpData.weight() * problem.
boundaryFlux(elemDisc, elemVars, qpData.ipData());
47 const auto& insideScv = elemDisc.scv(scvf.insideScvIdx());
48 boundaryFlux *= elemVars[insideScv].extrusionFactor();
50 for (
int eqIdx = 0; eqIdx < BoundaryFluxes::dimension; ++eqIdx)
51 if (bcTypes.isFluxBoundary(eqIdx))
52 residual[insideScv.localDofIndex()][eqIdx] += boundaryFlux[eqIdx];
66template<
class ResidualVector,
class Problem,
class ElementDiscretization,
70 const ElementDiscretization& elemDisc,
71 const ElementVariables& elemVars,
72 const typename ElementDiscretization::BoundaryFace& boundaryFace,
79 const auto& ipData = qpData.ipData();
80 const auto& ipCache = cache(elemVars, ipData);
81 const BoundaryFluxes boundaryFlux = qpData.weight() * problem.
boundaryFlux(elemDisc, elemVars, ipData);
82 const auto& shapeValues = ipCache.shapeValues();
84 for (
const auto& localDof : nonCVLocalDofs(elemDisc))
85 for (
int eqIdx = 0; eqIdx < BoundaryFluxes::dimension; ++eqIdx)
86 if (bcTypes.isFluxBoundary(eqIdx))
87 residual[localDof.index()][eqIdx] += shapeValues[localDof.index()] * boundaryFlux[eqIdx];
Class to specify the type of a boundary.
Definition common/boundarytypes.hh:26
Base class for all standard finite volume or finite element problems.
Definition common/problem.hh:39
NumEqVector boundaryFlux(const ElementDiscretization &elemDisc, const ElementVariables &elemVars, const FaceIpData &faceIpData) const
Evaluate the boundary conditions for a neumann boundary segment.
Definition common/problem.hh:186
Concept for finite-volume discretizations.
Definition concepts.hh:26
Concepts for discretization types.
void addFVBoundaryFluxIntegral(ResidualVector &residual, const Problem &problem, const ElementDiscretization &elemDisc, const ElementVariables &elemVars, const typename ElementDiscretization::SubControlVolumeFace &scvf, const BoundaryTypes &bcTypes)
Adds boundary flux contributions to the residual for a single FV sub-control volume face.
Definition boundaryfluxintegral.hh:35
void addFEBoundaryFluxIntegral(ResidualVector &residual, const Problem &problem, const ElementDiscretization &elemDisc, const ElementVariables &elemVars, const typename ElementDiscretization::BoundaryFace &boundaryFace, const BoundaryTypes &bcTypes)
Adds boundary flux contributions to the residual related to FE discretization.
Definition boundaryfluxintegral.hh:68
Class representing dofs on elements for control-volume finite element schemes.
auto quadratureRule(const FVElementGeometry &fvGeometry, const typename FVElementGeometry::SubControlVolume &scv, QuadratureRules::MidpointQuadrature)
Midpoint quadrature for scv.
Definition quadraturerules.hh:159
Definition assembly/assembler.hh:44
Quadrature rules over sub-control volumes and sub-control volume faces.
Problem::NumEqVector NumEqVector
Definition common/problem.hh:59