Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
dumux-repositories
dumux
Commits
baf92456
Commit
baf92456
authored
Mar 03, 2021
by
Kilian Weishaupt
Committed by
Timo Koch
Mar 03, 2021
Browse files
[mpadapter] Store copy of pcKrSw law if called with temporary
parent
9bbbf104
Changes
5
Hide whitespace changes
Inline
Side-by-side
dumux/material/fluidmatrixinteractions/mp/mpadapter.hh
View file @
baf92456
...
...
@@ -107,7 +107,7 @@ namespace Dumux::FluidMatrix {
* \ingroup Fluidmatrixinteractions
* \brief An adapter for mpnc to use the capillary pressure-saturation relationships
*/
template
<
class
MaterialLaw
,
int
numFluidPhases
=
MaterialLaw
::
numFluidPhases
()>
template
<
class
MaterialLaw
,
int
numFluidPhases
=
std
::
decay_t
<
MaterialLaw
>
::
numFluidPhases
()
>
class
MPAdapter
{
static_assert
(
AlwaysFalse
<
MaterialLaw
>::
value
,
"Adapter not implemented for the specified number of phases"
);
...
...
@@ -119,10 +119,10 @@ class MPAdapter<MaterialLaw, 2>
:
public
Adapter
<
MPAdapter
<
MaterialLaw
,
2
>
,
MultiPhasePcKrSw
>
{
public:
using
Scalar
=
typename
MaterialLaw
::
Scalar
;
using
Scalar
=
typename
std
::
decay_t
<
MaterialLaw
>
::
Scalar
;
MPAdapter
(
const
MaterialLaw
&
pcKrS
)
:
pcKrS_
(
pcKrS
)
MPAdapter
(
MaterialLaw
&
&
pcKrS
)
:
pcKrS_
(
std
::
forward
<
MaterialLaw
>
(
pcKrS
)
)
{}
/*!
...
...
@@ -161,9 +161,18 @@ public:
return
values
;
}
private:
const
MaterialLaw
&
pcKrS_
;
MaterialLaw
pcKrS_
;
};
/*!
* \ingroup Fluidmatrixinteractions
* \brief Deduction guide for the MPAdapter class.
* Makes sure that MPAdapter stores a copy of T if
* the constructor is called with a temporary object.
*/
template
<
typename
T
>
MPAdapter
(
T
&&
)
->
MPAdapter
<
T
>
;
}
// end namespace Dumux::FluidMatrix
...
...
test/porousmediumflow/mpnc/2p2ccomparison/spatialparams.hh
View file @
baf92456
...
...
@@ -53,7 +53,6 @@ class MPNCComparisonSpatialParams
using
GlobalPosition
=
typename
SubControlVolume
::
GlobalPosition
;
using
PcKrSwCurve
=
FluidMatrix
::
BrooksCoreyDefault
<
Scalar
>
;
using
MPAdapter
=
Dumux
::
FluidMatrix
::
MPAdapter
<
PcKrSwCurve
,
2
>
;
public:
using
PermeabilityType
=
Scalar
;
...
...
@@ -96,7 +95,7 @@ public:
*/
auto
fluidMatrixInteractionAtPos
(
const
GlobalPosition
&
globalPos
)
const
{
return
makeFluidMatrixInteraction
(
MPAdapter
(
pcKrSw_
));
return
makeFluidMatrixInteraction
(
FluidMatrix
::
MPAdapter
(
pcKrSw_
));
}
/*!
...
...
test/porousmediumflow/mpnc/kinetic/spatialparams.hh
View file @
baf92456
...
...
@@ -63,7 +63,6 @@ class EvaporationAtmosphereSpatialParams
static
constexpr
auto
dimWorld
=
GridView
::
dimensionworld
;
using
PcKrSwCurve
=
FluidMatrix
::
BrooksCoreyDefault
<
Scalar
>
;
using
MPAdapter
=
Dumux
::
FluidMatrix
::
MPAdapter
<
PcKrSwCurve
,
2
>
;
using
NonwettingSolidInterfacialArea
=
FluidMatrix
::
InterfacialArea
<
Scalar
,
FluidMatrix
::
InterfacialAreaExponentialCubic
,
...
...
@@ -248,9 +247,9 @@ public:
auto
fluidMatrixInteractionAtPos
(
const
GlobalPosition
&
globalPos
)
const
{
if
(
inFF_
(
globalPos
))
return
makeFluidMatrixInteraction
(
MPAdapter
(
*
pcKrSwCurveFF_
),
*
aNsFreeFlow_
,
*
aNwFreeFlow_
,
*
aWs_
);
return
makeFluidMatrixInteraction
(
FluidMatrix
::
MPAdapter
(
*
pcKrSwCurveFF_
),
*
aNsFreeFlow_
,
*
aNwFreeFlow_
,
*
aWs_
);
else
if
(
inPM_
(
globalPos
))
return
makeFluidMatrixInteraction
(
MPAdapter
(
*
pcKrSwCurvePM_
),
*
aNs_
,
*
aNw_
,
*
aWs_
);
return
makeFluidMatrixInteraction
(
FluidMatrix
::
MPAdapter
(
*
pcKrSwCurvePM_
),
*
aNs_
,
*
aNw_
,
*
aWs_
);
else
DUNE_THROW
(
Dune
::
InvalidStateException
,
"You should not be here: x="
<<
globalPos
[
0
]
<<
" y= "
<<
globalPos
[
dimWorld
-
1
]);
}
...
...
test/porousmediumflow/mpnc/obstacle/spatialparams.hh
View file @
baf92456
...
...
@@ -54,7 +54,6 @@ class ObstacleSpatialParams
using
GlobalPosition
=
typename
SubControlVolume
::
GlobalPosition
;
using
PcKrSwCurve
=
FluidMatrix
::
SmoothedLinearLaw
<
Scalar
>
;
using
MPAdapter
=
Dumux
::
FluidMatrix
::
MPAdapter
<
PcKrSwCurve
,
2
>
;
public:
//! Export the type used for the permeability
...
...
@@ -93,7 +92,7 @@ public:
*/
auto
fluidMatrixInteractionAtPos
(
const
GlobalPosition
&
globalPos
)
const
{
return
makeFluidMatrixInteraction
(
MPAdapter
(
pcKrSwCurve_
));
return
makeFluidMatrixInteraction
(
FluidMatrix
::
MPAdapter
(
pcKrSwCurve_
));
}
/*!
...
...
test/porousmediumflow/mpnc/thermalnonequilibrium/spatialparams.hh
View file @
baf92456
...
...
@@ -58,7 +58,6 @@ class CombustionSpatialParams
using
GlobalPosition
=
typename
SubControlVolume
::
GlobalPosition
;
using
PcKrSwCurve
=
FluidMatrix
::
HeatPipeLaw
<
Scalar
>
;
using
MPAdapter
=
Dumux
::
FluidMatrix
::
MPAdapter
<
PcKrSwCurve
,
2
>
;
public:
//! Export the type used for the permeability
...
...
@@ -195,7 +194,7 @@ public:
*/
auto
fluidMatrixInteractionAtPos
(
const
GlobalPosition
&
globalPos
)
const
{
return
makeFluidMatrixInteraction
(
MPAdapter
(
*
pcKrSwCurve_
));
return
makeFluidMatrixInteraction
(
FluidMatrix
::
MPAdapter
(
*
pcKrSwCurve_
));
}
private:
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment