From 2899de390d1e9e739ca5a9aa08276df95d70c3e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Atgeirr=20Fl=C3=B8=20Rasmussen?= Date: Thu, 5 Jan 2012 11:17:52 +0100 Subject: [PATCH] Added class SaturationPropsFromDeck. --- opm/core/fluid/SaturationPropsFromDeck.hpp | 91 ++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 opm/core/fluid/SaturationPropsFromDeck.hpp diff --git a/opm/core/fluid/SaturationPropsFromDeck.hpp b/opm/core/fluid/SaturationPropsFromDeck.hpp new file mode 100644 index 000000000..5b30279d0 --- /dev/null +++ b/opm/core/fluid/SaturationPropsFromDeck.hpp @@ -0,0 +1,91 @@ +/* + Copyright 2010, 2011, 2012 SINTEF ICT, Applied Mathematics. + + This file is part of the Open Porous Media project (OPM). + + OPM is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OPM is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OPM. If not, see . +*/ + +#ifndef OPM_SATURATIONPROPSFROMDECK_HEADER_INCLUDED +#define OPM_SATURATIONPROPSFROMDECK_HEADER_INCLUDED + +#include +#include +#include + +namespace Opm +{ + + class SaturationPropsFromDeck : public BlackoilPhases + { + public: + /// Default constructor. + SaturationPropsFromDeck(); + + /// Initialize from deck. + void init(const Dune::EclipseGridParser& deck); + + /// Relative permeability. + /// \param[in] n Number of data points. + /// \param[in] s Array of nP saturation values. + /// \param[out] kr Array of nP relperm values, array must be valid before calling. + /// \param[out] dkrds If non-null: array of nP^2 relperm derivative values, + /// array must be valid before calling. + /// The P^2 derivative matrix is + /// m_{ij} = \frac{dkr_i}{ds^j}, + /// and is output in Fortran order (m_00 m_10 m_20 m01 ...) + void relperm(const int n, + const double* s, + double* kr, + double* dkrds) const; + + /// Capillary pressure. + /// \param[in] n Number of data points. + /// \param[in] s Array of nP saturation values. + /// \param[out] pc Array of nP capillary pressure values, array must be valid before calling. + /// \param[out] dpcds If non-null: array of nP^2 derivative values, + /// array must be valid before calling. + /// The P^2 derivative matrix is + /// m_{ij} = \frac{dpc_i}{ds^j}, + /// and is output in Fortran order (m_00 m_10 m_20 m01 ...) + void capPress(const int n, + const double* s, + double* pv, + double* dpcds) const; + + private: + void evalKr(const double* s, double* kr) const; + void evalKrDeriv(const double* s, double* kr, double* dkrds) const; + void evalPc(const double* s, double* pc) const; + void evalPcDeriv(const double* s, double* pc, double* dpcds) const; + + private: + PhaseUsage phase_usage_; + Dune::utils::UniformTableLinear krw_; + Dune::utils::UniformTableLinear krow_; + Dune::utils::UniformTableLinear pcow_; + Dune::utils::UniformTableLinear krg_; + Dune::utils::UniformTableLinear krog_; + Dune::utils::UniformTableLinear pcog_; + double krocw_; // = krow_(s_wc) + }; + + + +} // namespace Opm + + + + +#endif // OPM_SATURATIONPROPSFROMDECK_HEADER_INCLUDED