Skip to content
Snippets Groups Projects
Commit 9cecfe47 authored by Dmitri Naumov's avatar Dmitri Naumov
Browse files

[MatL] RF; Add two derivatives in material props.

One is the d permeability / d saturation, another is
the second derivative d^2 p_cap / dS^2
parent 2945f71d
No related branches found
No related tags found
No related merge requests found
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "RichardsFlowMaterialProperties.h" #include "RichardsFlowMaterialProperties.h"
#include <logog/include/logog.hpp> #include <logog/include/logog.hpp>
#include <boost/math/special_functions/pow.hpp>
#include "MaterialLib/Fluid/FluidProperty.h" #include "MaterialLib/Fluid/FluidProperty.h"
#include "MaterialLib/PorousMedium/Porosity/Porosity.h" #include "MaterialLib/PorousMedium/Porosity/Porosity.h"
...@@ -118,6 +119,13 @@ double RichardsFlowMaterialProperties::getRelativePermeability( ...@@ -118,6 +119,13 @@ double RichardsFlowMaterialProperties::getRelativePermeability(
return _relative_permeability_models[0]->getValue(saturation); return _relative_permeability_models[0]->getValue(saturation);
} }
double RichardsFlowMaterialProperties::getRelativePermeabilityDerivative(
const double /*t*/, const ProcessLib::SpatialPosition& /*pos*/,
const double /*p*/, const double /*T*/, const double saturation) const
{
return _relative_permeability_models[0]->getdValue(saturation);
}
double RichardsFlowMaterialProperties::getSaturation( double RichardsFlowMaterialProperties::getSaturation(
const int material_id, const double /*t*/, const int material_id, const double /*t*/,
const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/, const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
...@@ -125,6 +133,7 @@ double RichardsFlowMaterialProperties::getSaturation( ...@@ -125,6 +133,7 @@ double RichardsFlowMaterialProperties::getSaturation(
{ {
return _capillary_pressure_models[material_id]->getSaturation(pc); return _capillary_pressure_models[material_id]->getSaturation(pc);
} }
double RichardsFlowMaterialProperties::getSaturationDerivative( double RichardsFlowMaterialProperties::getSaturationDerivative(
const int material_id, const double /*t*/, const int material_id, const double /*t*/,
const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/, const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
...@@ -134,5 +143,17 @@ double RichardsFlowMaterialProperties::getSaturationDerivative( ...@@ -134,5 +143,17 @@ double RichardsFlowMaterialProperties::getSaturationDerivative(
_capillary_pressure_models[material_id]->getdPcdS(saturation); _capillary_pressure_models[material_id]->getdPcdS(saturation);
return 1 / dpcdsw; return 1 / dpcdsw;
} }
double RichardsFlowMaterialProperties::getSaturationDerivative2(
const int material_id, const double /*t*/,
const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/,
const double /*T*/, const double saturation) const
{
const double dpcdsw =
_capillary_pressure_models[material_id]->getdPcdS(saturation);
const double d2pcdsw2 =
_capillary_pressure_models[material_id]->getd2PcdS2(saturation);
return -d2pcdsw2 / boost::math::pow<3>(dpcdsw);
}
} // end of namespace } // end of namespace
} // end of namespace } // end of namespace
...@@ -86,6 +86,10 @@ public: ...@@ -86,6 +86,10 @@ public:
const double p, const double T, const double p, const double T,
const double saturation) const; const double saturation) const;
double getRelativePermeabilityDerivative(
const double t, const ProcessLib::SpatialPosition& pos, const double p,
const double T, const double saturation) const;
double getSaturation(const int material_id, const double t, double getSaturation(const int material_id, const double t,
const ProcessLib::SpatialPosition& pos, const double p, const ProcessLib::SpatialPosition& pos, const double p,
const double T, const double pc) const; const double T, const double pc) const;
...@@ -93,6 +97,10 @@ public: ...@@ -93,6 +97,10 @@ public:
const ProcessLib::SpatialPosition& pos, const ProcessLib::SpatialPosition& pos,
const double p, const double T, const double p, const double T,
const double saturation) const; const double saturation) const;
double getSaturationDerivative2(const int material_id, const double t,
const ProcessLib::SpatialPosition& pos,
const double p, const double T,
const double saturation) const;
double getFluidDensity(const double p, const double T) const; double getFluidDensity(const double p, const double T) const;
double getFluidViscosity(const double p, const double T) const; double getFluidViscosity(const double p, const double T) const;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment