00001 // -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- 00002 // vi: set et ts=4 sw=4 sts=4: 00003 /* 00004 This file is part of the Open Porous Media project (OPM). 00005 00006 OPM is free software: you can redistribute it and/or modify 00007 it under the terms of the GNU General Public License as published by 00008 the Free Software Foundation, either version 2 of the License, or 00009 (at your option) any later version. 00010 00011 OPM is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 GNU General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with OPM. If not, see <http://www.gnu.org/licenses/>. 00018 00019 Consult the COPYING file in the top-level source directory of this 00020 module for the precise wording of the license and the list of 00021 copyright holders. 00022 */ 00027 #ifndef OPM_PARKER_LENHARD_PARAMS_HPP 00028 #define OPM_PARKER_LENHARD_PARAMS_HPP 00029 00030 #include <opm/material/fluidmatrixinteractions/RegularizedVanGenuchten.hpp> 00031 #include <opm/material/common/EnsureFinalized.hpp> 00032 00033 #include <cassert> 00034 00035 namespace Opm 00036 { 00037 // forward declaration 00038 template <class ScalarT> 00039 class PLScanningCurve; 00040 00045 template <class TraitsT> 00046 class ParkerLenhardParams : public EnsureFinalized 00047 { 00048 public: 00049 using EnsureFinalized :: finalize; 00050 00051 typedef typename TraitsT::Scalar Scalar; 00052 typedef Opm::RegularizedVanGenuchten<TraitsT> VanGenuchten; 00053 typedef typename VanGenuchten::Params VanGenuchtenParams; 00054 typedef PLScanningCurve<Scalar> ScanningCurve; 00055 00056 ParkerLenhardParams() 00057 { 00058 currentSnr_ = 0; 00059 mdc_ = new ScanningCurve(/*Swr=*/0); 00060 pisc_ = csc_ = NULL; 00061 } 00062 00063 ParkerLenhardParams(const ParkerLenhardParams& p) 00064 : EnsureFinalized( p ) 00065 { 00066 currentSnr_ = 0; 00067 SwrPc_ = p.SwrPc_; 00068 mdc_ = new ScanningCurve(SwrPc_); 00069 pisc_ = csc_ = NULL; 00070 } 00071 00072 ~ParkerLenhardParams() 00073 { delete mdc_; } 00074 00079 const VanGenuchtenParams& micParams() const 00080 { EnsureFinalized::check(); return *micParams_; } 00081 00086 void setMicParams(const VanGenuchtenParams* val) 00087 { micParams_ = val; } 00088 00093 const VanGenuchtenParams& mdcParams() const 00094 { EnsureFinalized::check(); return *mdcParams_; } 00095 00100 void setMdcParams(const VanGenuchtenParams* val) 00101 { mdcParams_ = val; } 00102 00106 Scalar Snr() const 00107 { EnsureFinalized::check(); return Snr_; } 00108 00112 void setSnr(Scalar val) 00113 { Snr_ = val; } 00114 00118 Scalar SwrPc() const 00119 { EnsureFinalized::check(); return SwrPc_; } 00120 00124 Scalar SwrKr() const 00125 { EnsureFinalized::check(); return SwrKr_; } 00126 00131 void setSwr(Scalar pcSwr, Scalar krSwr = -1) 00132 { 00133 SwrPc_ = pcSwr; 00134 if (krSwr < 0) 00135 SwrKr_ = pcSwr; 00136 else 00137 SwrKr_ = krSwr; 00138 } 00139 00143 Scalar currentSnr() const 00144 { EnsureFinalized::check(); return currentSnr_; } 00145 00149 void setCurrentSnr(Scalar val) 00150 { currentSnr_ = val; } 00151 00155 ScanningCurve* mdc() const 00156 { EnsureFinalized::check(); return mdc_; } 00157 00161 void setMdc(ScanningCurve* val) 00162 { mdc_ = val; } 00163 00167 ScanningCurve* pisc() const 00168 { EnsureFinalized::check(); return pisc_; } 00169 00173 void setPisc(ScanningCurve* val) 00174 { pisc_ = val; } 00175 00179 ScanningCurve* csc() const 00180 { EnsureFinalized::check(); return csc_; } 00181 00185 void setCsc(ScanningCurve* val) 00186 { csc_ = val; } 00187 00188 private: 00189 const VanGenuchtenParams* micParams_; 00190 const VanGenuchtenParams* mdcParams_; 00191 Scalar SwrPc_; 00192 Scalar SwrKr_; 00193 Scalar Snr_; 00194 Scalar currentSnr_; 00195 mutable ScanningCurve* mdc_; 00196 mutable ScanningCurve* pisc_; 00197 mutable ScanningCurve* csc_; 00198 }; 00199 } // namespace Opm 00200 00201 #endif