- •Термодинамика углеводородных систем
- •Расчет фазового состоянии многокомпонентной системы углеводородов
- •Оглавление
- •Введение
- •Что такое нефть?
- •Композиционная модель описания нефти
- •Математическая постановка задачи
- •Уравнение Пенга-Робинсона через коэффициент сверхсжимаемости
- •Блок-схема программы
- •Листинг Файлmain.Php
- •Файл api.Php
- •Результаты вычислений
- •Анализ результатов
- •Список литературы
Блок-схема программы
Рисунок 1. Блок-схема программы
Листинг Файлmain.Php
<?php
$a=0;
$b=0;
$pi=pi();
$R=8.31;
//Задаем пластовые условия
$patm=20000000;
$T=300;
//Метанол CH40
$dolya[1]=0.4;
$Pkr[1]=7990000;
$Tkr[1]=512.6;
$Vkr[1]=0.000118;
$omega[1]=0.559;
//Изобутан C4H10
$dolya[2]=0.1;
$Pkr[2]=3600000;
$Tkr[2]=408.1;
$Vkr[2]=0.000263;
$omega[2]=0.176;
//Дихлорбензин C6H4Cl2
$dolya[3]=0.5;
$Pkr[3]=4050000;
$Tkr[3]=697.3;
$Vkr[3]=0.000360;
$omega[3]=0.272;
$V=0.999997;
$L=0.000003;
include ('api.php');
//Давление нассыщенных паров
for ($i=1;$i<=3;$i++)
{
$Pnas[$i]=exp(5.37*(1+$omega[$i])*(1-$Tkr[$i]/$T))*$Pkr[$i];
$Kraspr[$i]=$Pnas[$i]/$patm;
}
$SUMM=10;
while($SUMM>0.000000000001) {
for ($i=1;$i<=3;$i++)
{
$xx[$i]=$dolya[$i]/($L*($Kraspr[$i]-1)+1);
$yy[$i]=($dolya[$i]*$Kraspr[$i])/($V*($Kraspr[$i]-1)+1);
//echo "x=$xx[$i] y=$yy[$i]<br>";
}
$vapour = calc_v($xx, 1);
$liquid = calc_v($yy, 2);
///echo $liquid.'<br>';
//echo $vapour.'<br>';
$fugV = calc_integral($patm, 100, $vapour);
$fugL = calc_integral($patm, 100, $liquid);
//echo $fugL.'<br>';
//echo $fugV.'<br>';
for ($i=1;$i<=3;$i++) {
$SUMM=0;
$fugitivnostL[$i]=$fugL*$patm*$dolya[$i];
$fugitivnostV[$i]=$fugV*$patm*$dolya[$i];
$SUMM=$SUMM+pow((1-$fugitivnostL[$i]/$fugitivnostV[$i]),2);
$Kraspr[$i]=$fugitivnostL[$i]/$fugitivnostV[$i];
}
}
$xsum=0;
$ysum=0;
for ($i=1;$i<=3;$i++)
{
$xsum=$xsum+$xx[$i];
$ysum=$ysum+$yy[$i];
echo "x=$xx[$i] y=$yy[$i]<br>";
}
echo $xsum.' '.$ysum.'<br>';
echo $SUMM;
?>
Файл api.Php
<?php
function calc_b($Tkr,$Pkr,$R=8.31) {
$b=0.077*$R*$Tkr/$Pkr;
return $b;
}
function calc_a($Tkr,$Pkr,$omega,$T,$R=8.31) {
$apr=0.45*(pow($R*$Tkr,2))/$Pkr;
$Tpr=$T/$Tkr;
$m=0.37+1.5*$omega-0.269*(pow($omega,2));
$alT=1+pow(($m-$Tpr),2);
$a=$apr*$alT;
return $a;
}
function calc_v($dolya = array(), $type) {
$a=0;
$b=0;
$pi=pi();
$R=8.31;
//Задаем пластовые условия
$patm=20000000;
$T=300;
//Метанол CH40
$Pkr1=7990000;
$Tkr1=512.6;
$Vkr1=0.000118;
$omega1=0.559;
//Изобутан C4H10
$Pkr2=3600000;
$Tkr2=408.1;
$Vkr2=0.000263;
$omega2=0.176;
//Дихлорбензин C6H4Cl2
$Pkr3=4050000;
$Tkr3=697.3;
$Vkr3=0.000360;
$omega3=0.272;
//Считаем константы a и b
$a_ar[1]=calc_a($Tkr1,$Pkr1,$omega1,$T);
$a_ar[2]=calc_a($Tkr2,$Pkr2,$omega2,$T);
$a_ar[3]=calc_a($Tkr3,$Pkr3,$omega3,$T);
for ($i=1;$i<=3;$i++) {
for ($j=1;$j<=3;$j++) {
$a=$a+$dolya[$i]*$dolya[$j]*pow($a_ar[$i]*$a_ar[$j],1/2);
}
}
$b_ar[1]=calc_b($Tkr1,$Pkr1);
$b_ar[2]=calc_b($Tkr2,$Pkr2);
$b_ar[3]=calc_b($Tkr3,$Pkr3);
for ($i=1;$i<=3;$i++) {
$b=$b+$b_ar[$i];
}
//Замененные параметры приведенного уравнения Пенга-Робинсона
$c=($b*$patm)/($R*$T);
$d=(($a*(pow($c,2)))/((pow($b,2))*$patm))-(3*(pow($c,2)))-(2*$c);
//Коэффициенты для метода Кардана
$p=$d-((pow(($c-1),2))/3);
$q=(2*(pow(($c-1),3))/27)-((4*$c*$d)/3)-(2*(pow($c,3)))-((pow($c,2)))+($d/3);
$QQ=(pow($p/3,3))+(pow($q/2,2));
if ($QQ<0 && $p<0)
{
$alpha=acos(-$q/(2*(pow(-1*(pow(($p/3),3)),1/2))));
$tay1=2*pow(-$p/3,1/2)*cos($alpha/3);
$tay2=-2*pow(-$p/3,1/2)*cos($alpha/3+$pi/3);
$tay3=-2*pow(-$p/3,1/2)*cos($alpha/3-$pi/3);
if ($type=2) {
if ($tay2<$tay1 && $tay2<$tay3) $tay=$tay2;
if ($tay1<$tay2 && $tay1<$tay2) $tay=$tay1;
if ($tay3<$tay1 && $tay3<$tay1) $tay=$tay3;
}
if ($type=1) {
if ($tay2>$tay1 && $tay2>$tay3) $tay=$tay2;
if ($tay1>$tay2 && $tay1>$tay2) $tay=$tay1;
if ($tay3>$tay1 && $tay3>$tay1) $tay=$tay3;
}
}
elseif ($QQ>=0 && $p>0)
{
$betta=atan((2/$q)*pow($p/3,3/2));
$alpha=atan(pow(tan($betta/2),1/3));
$tay=-2*pow($p/3,1/2)*(1/(tan(2*$alpha)));
}
elseif ($QQ>=0 && $p<0)
{
$betta=asin((2/$q)*(pow(pow((-$p/3),3),1/2)));
echo $betta;
$alpha=atan(pow(tan($betta/2),1/3));
$tay=(-2*pow(-$p/3,1/2))/sin(2*$alpha);
}
$z=$tay+($c-1)/3;
//$v=$z*$R*$T/$patm;
//return $v;
return $z;
}
function calc_integral($p,$dp,$zin) {
$ex=0;
$integral=0;
while ($ex<=$p) {
$integral=$integral+(($zin-1)/$p)*$dp;
$ex=$ex+$dp;
}
return $integral;
}
?>