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 }