3.5-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
box/effectivestresslaw.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3/*****************************************************************************
4 * See the file COPYING for full copying permissions. *
5 * *
6 * This program is free software: you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation, either version 3 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
18 *****************************************************************************/
25#ifndef DUMUX_DISCRETIZATION_BOX_EFFECTIVE_STRESS_LAW_HH
26#define DUMUX_DISCRETIZATION_BOX_EFFECTIVE_STRESS_LAW_HH
27
32
33namespace Dumux {
34
42template<class StressType, class GridGeometry>
43class EffectiveStressLaw<StressType, GridGeometry, typename GridGeometry::DiscretizationMethod>
44{
45 using FVElementGeometry = typename GridGeometry::LocalView;
46 using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace;
47 using Extrusion = Extrusion_t<GridGeometry>;
48
49 using GridView = typename GridGeometry::GridView;
50 using Element = typename GridView::template Codim<0>::Entity;
51
52 static constexpr int dim = GridView::dimension;
53 static constexpr int dimWorld = GridView::dimensionworld;
54 static_assert(dim == dimWorld, "EffectiveStressLaw not implemented for network/surface grids");
55 static_assert(StressType::discMethod == DiscretizationMethods::box, "The provided stress type must be specialized for the box scheme");
56
57public:
59 using Scalar = typename StressType::Scalar;
61 using StressTensor = typename StressType::StressTensor;
63 using ForceVector = typename StressType::ForceVector;
65
67 // state the discretization method this implementation belongs to
68 static constexpr DiscretizationMethod discMethod{};
69
73 template<class Problem, class ElementVolumeVariables, class ElementFluxVarsCache>
74 static ForceVector force(const Problem& problem,
75 const Element& element,
76 const FVElementGeometry& fvGeometry,
77 const ElementVolumeVariables& elemVolVars,
78 const SubControlVolumeFace& scvf,
79 const ElementFluxVarsCache& elemFluxVarCache)
80 {
81 const auto sigma = stressTensor(problem, element, fvGeometry, elemVolVars, elemFluxVarCache[scvf]);
82
83 ForceVector scvfForce(0.0);
84 sigma.mv(scvf.unitOuterNormal(), scvfForce);
85 scvfForce *= Extrusion::area(scvf);
86
87 return scvfForce;
88 }
89
91 template<class Problem, class ElementVolumeVariables, class FluxVarsCache>
92 static StressTensor stressTensor(const Problem& problem,
93 const Element& element,
94 const FVElementGeometry& fvGeometry,
95 const ElementVolumeVariables& elemVolVars,
96 const FluxVarsCache& fluxVarsCache)
97 {
98 // compute the purely mechanical stress
99 auto sigma = StressType::stressTensor(problem, element, fvGeometry, elemVolVars, fluxVarsCache);
100
101 // obtain biot coefficient and effective pore pressure
102 const auto biotCoeff = problem.spatialParams().biotCoefficient(element, fvGeometry, elemVolVars, fluxVarsCache);
103 const auto effPress = Deprecated::effectivePorePressure(problem, element, fvGeometry, elemVolVars, fluxVarsCache);
104
105 // subtract pore pressure from the diagonal entries
106 const auto bcp = biotCoeff*effPress;
107 for (int i = 0; i < dim; ++i)
108 sigma[i][i] -= bcp;
109
110 return sigma;
111 }
112
114 template<class Problem, class ElementVolumeVariables, class FluxVarsCache>
115 static StressTensor effectiveStressTensor(const Problem& problem,
116 const Element& element,
117 const FVElementGeometry& fvGeometry,
118 const ElementVolumeVariables& elemVolVars,
119 const FluxVarsCache& fluxVarsCache)
120 { return StressType::stressTensor(problem, element, fvGeometry, elemVolVars, fluxVarsCache); }
121};
122
123} // end namespace Dumux
124
125#endif
Helpers for deprecation.
Helper classes to compute the integration elements.
The available discretization methods in Dumux.
The effective stress law specialized for different discretization schemes. This computes the stress t...
Definition: adapt.hh:29
typename Extrusion< T >::type Extrusion_t
Convenience alias for obtaining the extrusion type.
Definition: extrusion.hh:177
constexpr Box box
Definition: method.hh:139
Definition: method.hh:73
typename StressType::ForceVector ForceVector
export the type used for force vectors
Definition: box/effectivestresslaw.hh:63
static StressTensor stressTensor(const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const FluxVarsCache &fluxVarsCache)
assembles the (total) stress tensor of the porous medium at a given integration point
Definition: box/effectivestresslaw.hh:92
typename StressType::Scalar Scalar
export the type used for scalar values
Definition: box/effectivestresslaw.hh:59
static StressTensor effectiveStressTensor(const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const FluxVarsCache &fluxVarsCache)
assembles the (effective) stress tensor of the solid skeleton at a given integration point
Definition: box/effectivestresslaw.hh:115
static ForceVector force(const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const SubControlVolumeFace &scvf, const ElementFluxVarsCache &elemFluxVarCache)
Computes the force (in Newton) acting on a sub-control volume face.
Definition: box/effectivestresslaw.hh:74
typename StressType::StressTensor StressTensor
export the type used for the stress tensor
Definition: box/effectivestresslaw.hh:61
This computes the stress tensor and surface forces resulting from poro-mechanical deformation.
Definition: effectivestresslaw_fwd.hh:39