00001 #include "fbucleyleveretttotalmob.h" 00002 #include "numericmethods.h" 00003 00004 00005 00006 double FBucleyLeverettTotalMob::operator()(double dd,unsigned cmp) const 00007 { 00008 assert(cmp == 0); //method does not implement derivative; 00009 if (dd < m_srw) 00010 dd = m_srw; 00011 if (dd > m_MaxSw) 00012 dd = m_MaxSw; 00013 00014 00015 double d1 = (dd-m_srw); 00016 double d2 = m_MaxSw - dd; 00017 00018 00019 00020 return d1*d1*m_cw + d2*d2*m_co; 00021 00022 00023 } 00024 00025 FBucleyLeverettTotalMob::FBucleyLeverettTotalMob(double vw,double vo,double srw,double sro) 00026 { 00027 m_vw = vw; 00028 m_vo = vo; 00029 m_srw=srw; 00030 m_cw=1.0/((1.-srw)*(1.-srw)*vw); 00031 m_co=1.0/((1-sro)*(1-sro)*vo); 00032 m_MaxSw = 1.0-sro; 00033 } 00034 00035 00036 00037 00038 00039 void FBucleyLeverettTotalMob::setParameters(const VecDouble &v) 00040 { 00041 assert(v.size()==2); 00042 m_vw=v(0); 00043 m_vo=v(1); 00044 }