00001 #include "dfbucleyleverettgravitymob.h"
00002 #include "numericmethods.h"
00003
00004
00005 DFBucleyLeverettGravityMob::DFBucleyLeverettGravityMob(double vW,double vO,double srw,double sro)
00006 {
00007
00008 _vw = vW;
00009 _vo = vO;
00010 _MaxSw=1.-sro;
00011 _Srw=srw;
00012 _c1=_MaxSw*_MaxSw*_vo;
00013 _c2=(1.0-_Srw)*(1.0-_Srw)*_vw;
00014
00015 m_scanInfDX = new ProbeFunction1D(*this,0,0,1,10000);
00016
00017 }
00018
00019 DFBucleyLeverettGravityMob::DFBucleyLeverettGravityMob(DFBucleyLeverettGravityMob& f)
00020 {
00021 *this=f;
00022 m_scanInfDX = new ProbeFunction1D(*this,0,0,1,10000);
00023 }
00024
00025
00026
00027 double DFBucleyLeverettGravityMob::operator()(double x,unsigned cmp) const
00028 {
00029
00030 if (x >= _MaxSw)
00031 x=_MaxSw;
00032 else if (x < _Srw)
00033 x=_Srw;
00034
00035 register double kw = x-_Srw;
00036 register double ko = x-_MaxSw;
00037 register double kw2=kw*kw;
00038 register double ko2=ko*ko;
00039
00040 double denom = _c1*kw2 + _c2*ko2;
00041 denom*=denom;
00042 return 2*(_c2*ko2*ko2*kw+_c1*ko*kw2*kw2)/denom;
00043 }
00044
00045
00046 void DFBucleyLeverettGravityMob::getMinMaxValues(double a, double b,double &min,double &max) const
00047 {
00048 assert(a<=b);
00049 NumericMethods::adjustBounds(a,0,1);
00050 NumericMethods::adjustBounds(b,0,1);
00051
00052 m_scanInfDX->getMinMaxValues(a,b,min,max);
00053 }
00054
00055
00056
00057 DFBucleyLeverettGravityMob::~DFBucleyLeverettGravityMob()
00058 {
00059 delete m_scanInfDX;
00060 }