СОДЕРЖАНИЕ
Введение.............................................................................................................................. | |
1 Краткий анализ работ по проблеме фильтрационных сопротивлений.................. | |
1.1 Анализ существующих работ в области фильтрационных сопротивлений.......................................................................................................... | |
2 Методика расчета фильтрационных сопротивлений.......................................... | |
2.1 Методика расчета фильтрационного сопротивления, при притоке жидкости к несовершенной скважине по линейному закону фильтрации......... | |
2.1.1 Анализ функции Ψ(ρ0, h)…….............................................................. | |
2.2 Методика расчета коэффициента фильтрационного сопротивления обусловленного несовершенством скважины по степени вскрытия по приближенным формулам....................................................................................... | |
2.3 Методика расчета фильтрационных сопротивлений, обусловленных перфорацией…………………………….................................................................. | |
2.4 Методика расчета фильтрационных сопротивлений при притоке жидкости (газа) к несовершенной скважине с экраном на забое........................ | |
2.8 Методика расчета фильтрационных сопротивлений при неустановившемся притоке жидкости (газа) к несовершенной скважине в неограниченном пласте............................................................................................ | |
3 разработка программного продукта для расчета фильтрационных сопротивлений по различным методикам............................................................... | |
3.1 Описание программного продукта и руководство к использованию…….. | |
4 Исследование результатов расчета дополнительных фильтрационных сопротивлений по различным методикам............................................................... | |
4.1 Анализ расчета фильтрационного сопротивления, при притоке жидкости к несовершенной скважине по линейному закону фильтрации......... | |
4.2 Анализ решения задачи нахождения коэффициента фильтрационного сопротивления, обусловленного несовершенством скважины по степени вскрытия, по приближенным формулам................................................................ | |
4.3 Анализ расчета фильтрационных сопротивлений при притоке жидкости (газа) к несовершенной скважине с экраном на забое........................ | |
4.4 Анализ расчета фильтрационных сопротивлений при неустановившемся притоке жидкости (газа) к несовершенной скважине в неограниченном пласте............................................................................................ | |
Заключение…………………………………..…..…...……………….…………………. | |
Список использованных источников……...……………………………………………. | |
Приложение 1.…………………………………..……...……………...…………………. | |
Приложение 2…………………………………..……......…………….…………………. | |
Приложение 3…………………………………..…...…...…………….…………………. | |
Приложение 4…………………………………..…...…...…………….…………………. | |
Приложение 5.…………………………………..……...……………...…………………. |
ВВЕДЕНИЕ
В настоящее время нефтегазовую промышленность России характеризует значительное ухудшение структуры нефтегазовых залежей. Поэтому разработка нефтегазовых месторождений является достаточно сложной задачей и требует, для успешного решения, системного подхода. Для повышения эффективности разработки месторождений требуется создание принципиально новых подходов в области исследования и моделирования процессов разработки нефтегазовых месторождений с использованием быстродействующих компьютеров для проведения сложных вычислений геологического и гидродинамического моделирования.
К настоящему времени теоретические решения для притока к совершенным скважинам исследованы достаточно полно. Однако аналогичных разработок по притокам к несовершенным скважинам недостаточно. При разработке несовершенных скважин необходимо оценить, интерпретировать и учесть фильтрационные сопротивления, которые могут быть вызваны многими факторами, такими как: частичное вскрытие пласта, сообщение скважины с пластом только через отверстия в колонне труб, установкой непроницаемой перегородки (экрана), наличием перфорации, и исследовать их влияние на эффективность разработки нефтегазовых месторождений. Для области подземной гидрогазодинамики, в которой исследуются фильтрационные сопротивления, характерно большое количество сложных и трудоемких расчетов.
В связи с этим исследование методик расчета дополнительных фильтрационных сопротивлений и решение проблемы создания эффективных алгоритмов и программных продуктов, в которых реализованы основные аналитические решения расчета, весьма актуальны на сегодняшний день.
Решение комплекса проблем, связанных с достоверным определением дополнительных фильтрационных сопротоивлений на скважинах является важной частью разработки нефтегазового месторождения, таким образом, цель данной магистерской диссертации заключается в том, чтобы на основе проведенного исследования оптимизировать данный процесс, а именно, создать программу для автоматизации расчета, провести анализ и выбор наиболее точной и обоснованной методики расчета, выработать практические рекомендации по расчету дополнительных фильтрационных сопротивлений.
ИССЛЕДОВАНИЕ И АНАЛИЗ МЕТОДИК РАСЧЕТА ФИЛЬТРАЦИОННЫХ СОПРОТИВЛЕНИЙ
В данной главе будет произведено исследование методик расчета фильтрационных сопротивлений.
РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА ДЛЯ РАСЧЕТА ФИЛЬТРАЦИОННЫХ СОПРОТИВЛЕНИЙ ПО РАЗЛИЧНЫМ МЕТОДИКАМ
ПРИЛОЖЕНИЕ 1
Листинг программного продукта для расчета фильтрационных сопротивлений
unit Unit1;
// Основной блок, отвечающий за функционирование главного меню, и вызов
// вычислительных блоков
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, ExtCtrls;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N13Click(Sender: TObject);
procedure N14Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit3, Unit4, Unit5, Unit6, Unit7, Unit8, Unit9, Unit10,
Unit11, Unit12, Unit13;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Form2.Show
end;
procedure TForm1.N3Click(Sender: TObject);
begin
Form3.Show
end;
procedure TForm1.N4Click(Sender: TObject);
begin
form4.show
end;
procedure TForm1.N8Click(Sender: TObject);
begin
form2_1.show
end;
procedure TForm1.N7Click(Sender: TObject);
begin
form2_2.show
end;
procedure TForm1.N6Click(Sender: TObject);
begin
form2_3.show
end;
procedure TForm1.N10Click(Sender: TObject);
var i:integer;
begin
form8.show;
for i:=1 to 11 do
form8.Canvas.TextOut(165+i*50,680,floattostr(i/10-0.1));
for i:=1 to 13 do BEGIN
form8.Canvas.TextOut(200,20+(i-1)*50,floattostr(70-i*5));
form8.Canvas.TextOut(725,20+(i-1)*50,floattostr(7-i*0.5));
END;
end;
procedure TForm1.N11Click(Sender: TObject);
begin
form9.show
end;
procedure TForm1.N12Click(Sender: TObject);
begin
form12.show
end;
procedure TForm1.N13Click(Sender: TObject);
begin
form11.show
end;
procedure TForm1.N14Click(Sender: TObject);
begin
form13.show
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
image1.Picture.LoadFromFile('BMP/Main.BMP');
end;
end.
unit Unit2;
// Блок Приток к несовершенной скважине по линейному закону
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Grids, Menus, TeEngine, Series, ComObj, TeeProcs,
Chart, ExcelXP, math;
function psi(p0, h: extended): extended;
function sh(x: extended): extended;
function EMasket(h,R0,h0,rc:real):real;
function Gamma(bh: real): real;
function fi(b_h: real): real;
function Okr(x,p: real): real;
type
TForm2 = class(TForm)
Image2: TImage;
StaticText2: TStaticText;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2D1: TMenuItem;
N3D1: TMenuItem;
Image3: TImage;
GroupBox1: TGroupBox;
StringGrid2: TStringGrid;
StaticText3: TStaticText;
GroupBox2: TGroupBox;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Chart1: TChart;
Series1: TLineSeries;
Series2: TLineSeries;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Edit3: TEdit;
Edit4: TEdit;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
RadioGroup1: TRadioGroup;
N5: TMenuItem;
Chart2: TChart;
LineSeries1: TLineSeries;
LineSeries2: TLineSeries;
Series3: TLineSeries;
Series4: TLineSeries;
Series5: TLineSeries;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure N2D1Click(Sender: TObject);
procedure N3D1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N2Click(Sender: TObject);
private
function Ets(h,R0,h0,rc,ae:extended):extended;
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2; x,y:extended; i,i1,j,n:integer;
E0,ae,avg_h,R0,Rc,po,h0:extended; rect:TRect; mi,J1mi:array[1..100]of extended;
rectgraph:Trect;
implementation
uses Unit1, Unit13;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var Pixels:array[0..500,0..500] of Tcolor; m,k:integer;
begin
R0:=strtofloat(stringgrid2.Cells[1,0]); Rc:=strtofloat(stringgrid2.Cells[1,1]);
ae:=strtofloat(stringgrid2.Cells[1,2]); H0:=strtofloat(stringgrid2.Cells[1,3]);
po:=r0/(ae*h0);
Edit3.Text:=floattostr(round(Ets(strtofloat(stringgrid2.Cells[1,4]),R0,h0,rc,ae)*1000)/1000);
Edit4.Text:=floattostr(round(EMasket(strtofloat(stringgrid2.Cells[1,4]),R0,h0,rc)*1000)/1000);
if n4.Checked=true then BEGin
Series1.Clear; series2.Clear;
for k:=1 to 100 do begin
Series1.AddXY(k/100,Ets(k/100,R0,h0,rc,ae),'', clBlue);
Series2.AddXY(k/100,EMasket(k/100,R0,h0,rc),'', clRed);
end; End;
if n3.Checked=true then BEGin
chart2.Title.Text.Text :='Зависимость фильтрационного сопротивленя от относительного вскрытия по решению Маскета при';
series3.Clear; series4.Clear; series5.Clear;
if radiogroup1.ItemIndex=0 then Begin
series3.Title:='Ro='+floattostr(R0*2); series4.Title:='Ro='+floattostr(R0);
series5.Title:='Ro='+floattostr(R0/2);
for k:=1 to 100 do begin
Series3.AddXY(k/100,EMasket(k/100,R0*2,h0,rc),'', clred);
Series4.AddXY(k/100,EMasket(k/100,R0,h0,rc),'', clBlue);
Series5.AddXY(k/100,EMasket(k/100,R0/2,h0,rc),'', clGreen);
end; End;
if radiogroup1.ItemIndex=1 then Begin
series3.Title:='ho='+floattostr(h0*2); series4.Title:='ho='+floattostr(h0);
series5.Title:='ho='+floattostr(h0/2);
for k:=1 to 100 do begin
Series3.AddXY(k/100,EMasket(k/100,R0,h0*2,rc),'', clred);
Series4.AddXY(k/100,EMasket(k/100,R0,h0,rc),'', clBlue);
Series5.AddXY(k/100,EMasket(k/100,R0,h0/2,rc),'', clGreen);
end; End;
if radiogroup1.ItemIndex=2 then Begin
series3.Title:='rc='+floattostr(rc*2); series4.Title:='rc='+floattostr(rc);
series5.Title:='rc='+floattostr(rc/2);
for k:=1 to 100 do begin
Series3.AddXY(k/100,EMasket(k/100,R0,h0,rc*2),'', clred);
Series4.AddXY(k/100,EMasket(k/100,R0,h0,rc),'', clBlue);
Series5.AddXY(k/100,EMasket(k/100,R0,h0,rc/2),'', clGreen);
end; End;
End;
if n2.Checked=true then BEGin
chart2.Title.Text.Text :='Зависимость фильтрационного сопротивленя от отн. вскрытия по решению Стклянина-Телкова при';
series3.Clear; series4.Clear; series5.Clear;
if radiogroup1.ItemIndex=0 then Begin
series3.Title:='Ro='+floattostr(R0*2); series4.Title:='Ro='+floattostr(R0);
series5.Title:='Ro='+floattostr(R0/2);
for k:=1 to 100 do begin
Series3.AddXY(k/100,Ets(k/100,R0*2,h0,rc,ae),'', clred);
Series4.AddXY(k/100,Ets(k/100,R0,h0,rc,ae),'', clBlue);
Series5.AddXY(k/100,Ets(k/100,R0/2,h0,rc,ae),'', clGreen);
end; End;
if radiogroup1.ItemIndex=1 then Begin
series3.Title:='ho='+floattostr(h0*2); series4.Title:='ho='+floattostr(h0);
series5.Title:='ho='+floattostr(h0/2);
for k:=1 to 100 do begin
Series3.AddXY(k/100,Ets(k/100,R0,h0*2,rc,ae),'', clred);
Series4.AddXY(k/100,Ets(k/100,R0,h0,rc,ae),'', clBlue);
Series5.AddXY(k/100,Ets(k/100,R0,h0/2,rc,ae),'', clGreen);
end; End;
if radiogroup1.ItemIndex=2 then Begin
series3.Title:='rc='+floattostr(rc*2); series4.Title:='rc='+floattostr(rc);
series5.Title:='rc='+floattostr(rc/2);
for k:=1 to 100 do begin
Series3.AddXY(k/100,Ets(k/100,R0,h0,rc*2,ae),'', clred);
Series4.AddXY(k/100,Ets(k/100,R0,h0,rc,ae),'', clBlue);
Series5.AddXY(k/100,Ets(k/100,R0,h0,rc/2,ae),'', clGreen);
end; End;
if radiogroup1.ItemIndex=3 then Begin
series3.Title:='x='+floattostr(ae*2); series4.Title:='х='+floattostr(ae);
series5.Title:='x='+floattostr(ae/2);
for k:=1 to 100 do begin
Series3.AddXY(k/100,Ets(k/100,R0,h0,rc,ae*2),'', clred);
Series4.AddXY(k/100,Ets(k/100,R0,h0,rc,ae),'', clBlue);
Series5.AddXY(k/100,Ets(k/100,R0,h0,rc,ae/2),'', clGreen);
end; End;
End;
end;
function TForm2.Ets(h,R0,h0,rc,ae: extended): extended;
var po:extended;
begin
po:=r0/(ae*h0);
Ets:=(1/(h))*(ln(r0/rc)-Psi(po,h))
end;
function EMasket(h,R0,h0,rc:real):real;
begin
EMasket:=(1/h)*(ln(4*h0/rc)-0.5*fi(h))-(ln(4*h0/R0))
end;
function Gamma(bh: real): real;
var n:integer; P:real;
begin
P:=1;
for n:=1 to 100 do begin
P:=P*( (exp(ln(1+(1/n))*bh))/(1+(bh/n)) ); end;
Gamma:=P/bh;
end;
function fi(b_h: real): real;
begin
fi:=ln(Gamma(0.875*b_h)*Gamma(0.125*b_h)/
((Gamma(1-0.875*b_h))*Gamma(1-0.125*b_h)));
end;
function Okr(x,p: real): real;
begin
Okr:=round(x*power(10,p))/power(10,p);
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
N4Click(Sender);
stringgrid2.FixedColor:=rgb(239,239,239);
rect.Left:=0; rect.Top:=0; rect.Right:=image2.Width;
rect.Bottom:=image2.Height;
//r0:=100; rc:=0.1; ae:=1; h0:=10;
stringgrid2.Cells[0,0]:='Ro'; stringgrid2.Cells[0,1]:='rc';
stringgrid2.Cells[0,2]:='ч'; stringgrid2.Cells[0,3]:= 'ho';
stringgrid2.Cells[0,4]:='b/ho';
stringgrid2.Cells[1,0]:='100'; stringgrid2.Cells[1,1]:='0,1';
stringgrid2.Cells[1,2]:='1'; stringgrid2.Cells[1,3]:='10';
stringgrid2.Cells[1,4]:='0,5';
image2.Picture.LoadFromFile('BMP\fe.bmp');
image3.Picture.LoadFromFile('BMP\feMasket.bmp');
// корни уравнения Бесселя J0(mi)=0; значение J1(mi)
mi[ 1 ]:= 2.404825557695772 ; J1mi[ 1 ]:= 0.519147497289467 ;
mi[ 2 ]:= 5.520078110286311 ; J1mi[ 2 ]:= -0.340264806558368 ;
mi[ 3 ]:= 8.653727912911013 ; J1mi[ 3 ]:= 0.271452299928377 ;
mi[ 4 ]:= 11.79153443901428 ; J1mi[ 4 ]:= -0.232459831364653 ;
mi[ 5 ]:= 14.93091770848779 ; J1mi[ 5 ]:= 0.206546433076967 ;
mi[ 6 ]:= 18.07106396791092 ; J1mi[ 6 ]:= -0.187728803154791 ;
mi[ 7 ]:= 21.21163662987926 ; J1mi[ 7 ]:= 0.173265894098677 ;
mi[ 8 ]:= 24.3524715307493 ; J1mi[ 8 ]:= -0.161701549430102 ;
mi[ 9 ]:= 27.49347913204025 ; J1mi[ 9 ]:= 0.152181153337144 ;
mi[ 10 ]:= 30.6346064684319 ; J1mi[ 10 ]:= -0.144181025379884 ;
mi[ 11 ]:= 33.7758202137199 ; J1mi[ 11 ]:= 0.137296943407908 ;
mi[ 12 ]:= 36.9170983539622 ; J1mi[ 12 ]:= -0.131324626667607 ;
mi[ 13 ]:= 40.058425765212 ; J1mi[ 13 ]:= 0.126069497125436 ;
mi[ 14 ]:= 43.1997917184354 ; J1mi[ 14 ]:= -0.121398624756972 ;
mi[ 15 ]:= 46.3411883716654 ; J1mi[ 15 ]:= 0.117211198890656 ;
mi[ 16 ]:= 49.4826098974534 ; J1mi[ 16 ]:= -0.113429192616302 ;
mi[ 17 ]:= 52.6240518414776 ; J1mi[ 17 ]:= 0.10999114304552 ;
mi[ 18 ]:= 55.7655107572122 ; J1mi[ 18 ]:= -0.106847888250512 ;
mi[ 19 ]:= 58.9069839260829 ; J1mi[ 19 ]:= 0.103959572869359 ;
mi[ 20 ]:= 62.0484691907994 ; J1mi[ 20 ]:= -0.101293498933009 ;
mi[ 21 ]:= 65.1899648003103 ; J1mi[ 21 ]:= 0.098822553801043 ;
mi[ 22 ]:= 68.3314693298574 ; J1mi[ 22 ]:= -0.096524040464679 ;
mi[ 23 ]:= 71.472981603599 ; J1mi[ 23 ]:= 0.094378793984669 ;
mi[ 24 ]:= 74.6145006437197 ; J1mi[ 24 ]:= -0.092370504823531 ;
mi[ 25 ]:= 77.7560256304307 ; J1mi[ 25 ]:= 0.090485194162908 ;
mi[ 26 ]:= 80.8975558712221 ; J1mi[ 26 ]:= -0.088710802440877 ;
mi[ 27 ]:= 84.0390907770873 ; J1mi[ 27 ]:= 0.087036863323943 ;
mi[ 28 ]:= 87.1806298436412 ; J1mi[ 28 ]:= -0.085454242910915 ;
mi[ 29 ]:= 90.3221726372149 ; J1mi[ 29 ]:= 0.083954929283454 ;
mi[ 30 ]:= 93.4637187819694 ; J1mi[ 30 ]:= -0.082531861308288 ;
mi[ 31 ]:= 96.6052679510776 ; J1mi[ 31 ]:= 0.081178788319464 ;
mi[ 32 ]:= 99.7468198588957 ; J1mi[ 32 ]:= -0.07989015430857 ;
mi[ 33 ]:= 102.888374254706 ; J1mi[ 33 ]:= 0.078661001718914 ;
mi[ 34 ]:= 106.029930917601 ; J1mi[ 34 ]:= -0.07748689103882 ;
mi[ 35 ]:= 109.171489649812 ; J1mi[ 35 ]:= 0.076363833218286 ;
mi[ 36 ]:= 112.313050280604 ; J1mi[ 36 ]:= -0.075288232551982 ;
mi[ 37 ]:= 115.454612654493 ; J1mi[ 37 ]:= 0.07425683818174 ;
mi[ 38 ]:= 118.596176636603 ; J1mi[ 38 ]:= -0.073266702702668 ;
mi[ 39 ]:= 121.737742087953 ; J1mi[ 39 ]:= 0.072315146702369 ;
mi[ 40 ]:= 124.879308915868 ; J1mi[ 40 ]:= -0.071399728194726 ;
mi[ 41 ]:= 128.020877006191 ; J1mi[ 41 ]:= 0.070518216273235 ;
mi[ 42 ]:= 131.16244627595 ; J1mi[ 42 ]:= -0.069668568189643 ;
mi[ 43 ]:= 134.304016639525 ; J1mi[ 43 ]:= 0.068848909446224 ;
mi[ 44 ]:= 137.445588021879 ; J1mi[ 44 ]:= -0.068057516380896 ;
mi[ 45 ]:= 140.587160354702 ; J1mi[ 45 ]:= 0.067292800913855 ;
mi[ 46 ]:= 143.728733575624 ; J1mi[ 46 ]:= -0.066553297136816 ;
mi[ 47 ]:= 146.870307625797 ; J1mi[ 47 ]:= 0.065837649489427 ;
mi[ 48 ]:= 150.011882456967 ; J1mi[ 48 ]:= -0.065144602300788 ;
mi[ 49 ]:= 153.153458019305 ; J1mi[ 49 ]:= 0.064472990525474 ;
mi[ 50 ]:= 156.295034268765 ; J1mi[ 50 ]:= -0.06382173150072 ;
mi[ 51 ]:= 159.436611164767 ; J1mi[ 51 ]:= 0.063189817605514 ;
mi[ 52 ]:= 162.578188669836 ; J1mi[ 52 ]:= -0.062576309702969 ;
mi[ 53 ]:= 165.719766749177 ; J1mi[ 53 ]:= 0.061980331269791 ;
mi[ 54 ]:= 168.861345369242 ; J1mi[ 54 ]:= -0.061401063129698 ;
mi[ 55 ]:= 172.002924503081 ; J1mi[ 55 ]:= 0.06083773871596 ;
mi[ 56 ]:= 175.144504121903 ; J1mi[ 56 ]:= -0.060289639808347 ;
mi[ 57 ]:= 178.286084203726 ; J1mi[ 57 ]:= 0.059756092679192 ;
mi[ 58 ]:= 181.427664713731 ; J1mi[ 58 ]:= -0.059236464617564 ;
mi[ 59 ]:= 184.569245640643 ; J1mi[ 59 ]:= 0.058730160762043 ;
mi[ 60 ]:= 187.710826960049 ; J1mi[ 60 ]:= -0.058236621249651 ;
mi[ 61 ]:= 190.852408652582 ; J1mi[ 61 ]:= 0.057755318606728 ;
mi[ 62 ]:= 193.993990700109 ; J1mi[ 62 ]:= -0.057285755379976 ;
mi[ 63 ]:= 197.135573085662 ; J1mi[ 63 ]:= 0.056827461974856 ;
mi[ 64 ]:= 200.277155793333 ; J1mi[ 64 ]:= -0.056379994681233 ;
mi[ 65 ]:= 203.418738808199 ; J1mi[ 65 ]:= 0.055942933867378 ;
mi[ 66 ]:= 206.560322116437 ; J1mi[ 66 ]:= -0.055515882325591 ;
mi[ 67 ]:= 209.701905704294 ; J1mi[ 67 ]:= 0.055098463754952 ;
mi[ 68 ]:= 212.84348955995 ; J1mi[ 68 ]:= -0.054690321366964 ;
mi[ 69 ]:= 215.985073637015 ; J1mi[ 69 ]:= 0.054291116612824 ;
mi[ 70 ]:= 219.126658028041 ; J1mi[ 70 ]:= -0.053900527959306 ;
mi[ 71 ]:= 222.268242619084 ; J1mi[ 71 ]:= 0.053518249887215 ;
mi[ 72 ]:= 225.409827434859 ; J1mi[ 72 ]:= -0.05314399179997 ;
mi[ 73 ]:= 228.551412466479 ; J1mi[ 73 ]:= 0.052777477138473 ;
mi[ 74 ]:= 231.692997704039 ; J1mi[ 74 ]:= -0.052418442513922 ;
mi[ 75 ]:= 234.834583140384 ; J1mi[ 75 ]:= 0.052066636911401 ;
mi[ 76 ]:= 237.976168767276 ; J1mi[ 76 ]:= -0.051721820953176 ;
mi[ 77 ]:= 241.117754577268 ; J1mi[ 77 ]:= 0.051383766213711 ;
mi[ 78 ]:= 244.259340563295 ; J1mi[ 78 ]:= -0.051052254583793 ;
mi[ 79 ]:= 247.400926718653 ; J1mi[ 79 ]:= 0.050727077679125 ;
mi[ 80 ]:= 250.54251303697 ; J1mi[ 80 ]:= -0.05040803628984 ;
mi[ 81 ]:= 253.684099512202 ; J1mi[ 81 ]:= 0.050094939867624 ;
mi[ 82 ]:= 256.825686138565 ; J1mi[ 82 ]:= -0.049787606047463 ;
mi[ 83 ]:= 259.967272910605 ; J1mi[ 83 ]:= 0.049485860201248 ;
mi[ 84 ]:= 263.108859819537 ; J1mi[ 84 ]:= -0.049189535021483 ;
mi[ 85 ]:= 266.250446871066 ; J1mi[ 85 ]:= 0.048898470128121 ;
mi[ 86 ]:= 269.392034049823 ; J1mi[ 86 ]:= -0.048612511710451 ;
mi[ 87 ]:= 272.533621354921 ; J1mi[ 87 ]:= 0.048331512178894 ;
mi[ 88 ]:= 275.675208781943 ; J1mi[ 88 ]:= -0.048055329848267 ;
mi[ 89 ]:= 278.816796326364 ; J1mi[ 89 ]:= 0.04778382863695 ;
mi[ 90 ]:= 281.958383983344 ; J1mi[ 90 ]:= -0.047516877785155 ;
mi[ 91 ]:= 285.099971747016 ; J1mi[ 91 ]:= 0.047254351590416 ;
mi[ 92 ]:= 288.241559628199 ; J1mi[ 92 ]:= -0.046996129155968 ;
mi[ 93 ]:= 291.383147405484 ; J1mi[ 93 ]:= 0.046742094196957 ;
mi[ 94 ]:= 294.524735684552 ; J1mi[ 94 ]:= -0.046492134650076 ;
mi[ 95 ]:= 297.666323859055 ; J1mi[ 95 ]:= 0.046246142793457 ;
mi[ 96 ]:= 300.807912123072 ; J1mi[ 96 ]:= -0.046004014728376 ;
mi[ 97 ]:= 303.949500485021 ; J1mi[ 97 ]:= 0.045765650353301 ;
mi[ 98 ]:= 307.09108893157 ; J1mi[ 98 ]:= -0.045530953163447 ;
mi[ 99 ]:= 310.232677463195 ; J1mi[ 99 ]:= 0.045299830081162 ;
mi[ 100 ]:= 313.374266077532 ; J1mi[ 100 ]:= -0.045072191303378 ;
end;
function sh(x: extended): extended;
begin
sh:=(exp(x)-exp(-x))/2;
end;
function psi(p0, h: extended): extended;
var E:real; iii, EN: integer;
begin
EN:=form13.SpinEdit1.Value;
E:=0;
try
for iii:=1 to EN do E:=E+(sh(mi[iii]*h/p0))*(sh(mi[iii]*(1-h)/p0))/
( mi[iii]*mi[iii]*mi[iii]*sh(mi[iii]/p0)*j1mi[iii]*j1mi[iii] );
except
on Eoverflow do
E:=E;
end;
psi:=(2*p0/h)*E;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
R0:=strtofloat(stringgrid2.Cells[1,0]); Rc:=strtofloat(stringgrid2.Cells[1,1]);
ae:=strtofloat(stringgrid2.Cells[1,2]); H0:=strtofloat(stringgrid2.Cells[1,3]);
po:=r0/(ae*h0);
Edit3.Text:=floattostr(round(Ets(strtofloat(stringgrid2.Cells[1,4]),R0,h0,rc,ae)*1000)/1000);
Edit4.Text:=floattostr(round(EMasket(strtofloat(stringgrid2.Cells[1,4]),R0,h0,rc)*1000)/1000);
end;
procedure TForm2.N2D1Click(Sender: TObject);
var m: integer;
begin
Chart1.View3D:=false;
Chart2.View3D:=false;
end;
procedure TForm2.N3D1Click(Sender: TObject);
begin
Chart1.View3D:=true;
Chart2.View3D:=true;
end;
procedure TForm2.Button3Click(Sender: TObject);
var Excel,source: Variant; i,j,p,q: integer;
begin
R0:=strtofloat(stringgrid2.Cells[1,0]); Rc:=strtofloat(stringgrid2.Cells[1,1]);
ae:=strtofloat(stringgrid2.Cells[1,2]); H0:=strtofloat(stringgrid2.Cells[1,3]);
po:=r0/(ae*h0);
Excel := CreateOleObject('Excel.Application');
Excel.Workbooks.Add;
excel.Cells[1,1]:='b/ho'; excel.Cells[1,2]:='Телков-Стклянин';
excel.Cells[1,3]:='Маскет';
for j:=1 to 19 do Begin
excel.Cells[j+1,1]:=(j/20);
excel.Cells[j+1,2]:=Ets(j/20,R0,h0,rc,ae);
excel.Cells[j+1,3]:=EMasket(j/20,R0,h0,rc);
End;
Excel.Range[Excel.Cells[1, 1], Excel.Cells[20, 3]].Select;
Excel.Selection.Borders.LineStyle:=1;
Excel.Range[Excel.Cells[1,2], Excel.Cells[20, 3]].Select;
Excel.ActiveSheet.Shapes.AddChart.Select;
//Excel.ActiveChart.SetSourceData;
Source:=excel.Range[Excel.Cells[1,2], Excel.Cells[20, 3]];
Excel.ActiveChart.ChartType:= xlLine;
Excel.ActiveChart.Axes(xlCategory).Select;
Excel.ActiveSheet.ChartObjects('Диаграмма 1').Activate;
Excel.ActiveChart.SeriesCollection(1).XValues:= '=Лист1!$A$2:$A$20';
Excel.Visible:=true;
end;
procedure TForm2.N3Click(Sender: TObject);
begin
//Chart1.Visible:=false;
Chart2.Visible:=true;
n3.Checked:=true;
radiogroup1.Items.Clear;
radiogroup1.Items.Add('Ro'); radiogroup1.Items.Add('ho'); radiogroup1.Items.Add('rc');
radiogroup1.ItemIndex:=0;
radiogroup1.Visible:=true;
end;
procedure TForm2.N4Click(Sender: TObject);
begin
Chart2.Visible:=false; Chart1.Visible:=true;
n4.Checked:=true;
radiogroup1.Visible:=false;
end;
procedure TForm2.N2Click(Sender: TObject);
begin
n2. Checked:=true;
//Chart1.Visible:=false;
Chart2.Visible:=true;
radiogroup1.Items.Clear;
radiogroup1.Items.Add('Ro'); radiogroup1.Items.Add('ho'); radiogroup1.Items.Add('rc');
radiogroup1.Items.Add('x');
radiogroup1.ItemIndex:=0;
radiogroup1.Visible:=true;
end;
end.
unit Unit3;
// Блок Дополнительное фильтрационное сопротивление С1
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, ExtCtrls, StdCtrls, TeEngine, Series, TeeProcs, Chart, ComObj,
Menus, ExcelXP;
type
TForm3 = class(TForm)
StringGrid2: TStringGrid;
Chart1: TChart;
Series1: TLineSeries;
Series2: TLineSeries;
Series3: TLineSeries;
Series4: TLineSeries;
Series5: TLineSeries;
Series6: TLineSeries;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2D1: TMenuItem;
N3D1: TMenuItem;
Image2: TImage;
GroupBox1: TGroupBox;
Button1: TButton;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
GroupBox2: TGroupBox;
Button2: TButton;
StringGrid1: TStringGrid;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Calc(Sender: TObject);
procedure N2D1Click(Sender: TObject);
procedure N3D1Click(Sender: TObject);
private
function C1Pykhachev(b,h,rc:real):real;
function C1Pirverdian(b,h,rc:real):real;
function C1Charny(b,h,rc:real):real;
function C1Veliev(b,h,rc,ae:real):real;
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3; b,h,rc,ae:real;
implementation
uses unit2, unit7,unit8;
{$R *.dfm}
procedure TForm3.FormCreate(Sender: TObject);
begin
stringgrid2.Visible:=false;
image2.Picture.LoadFromFile('BMP\C1_5.bmp');
stringgrid1.Cells[0,0]:='ho'; stringgrid1.Cells[0,1]:='b';
stringgrid1.Cells[0,2]:='rc'; stringgrid1.Cells[0,3]:='ч';
stringgrid1.Cells[1,0]:='20'; stringgrid1.Cells[1,1]:='12';
stringgrid1.Cells[1,2]:='0,1'; stringgrid1.Cells[1,3]:='1';
b:=strtofloat(stringgrid1.Cells[1,0]); h:=strtofloat(stringgrid1.Cells[1,1]);
rc:=strtofloat(stringgrid1.Cells[1,2]); ae:=strtofloat(stringgrid1.Cells[1,3]);
end;
procedure TForm3.Button1Click(Sender: TObject);
var j,k:integer;
begin
b:=strtofloat(stringgrid1.Cells[1,0]); h:=strtofloat(stringgrid1.Cells[1,1]);
rc:=strtofloat(stringgrid1.Cells[1,2]); ae:=strtofloat(stringgrid1.Cells[1,3]);
if ((b/(2*rc))<5) or ((b/(2*rc))>160) THEN BEGIN
Series1.Clear; series2.Clear; Series3.Clear; series4.Clear; Series5.Clear; Series6.Clear;
for k:=1 to 96 do begin
Series1.AddXY(k/100,(C1(k/100, b, rc,1/ae)),'', clRed);
Series2.AddXY(k/100,(C1Charny(b, k/100, rc)),'', clgreen);
Series3.AddXY(k/100,(C1Pirverdian(b, k/100, rc)),'', clYellow);
Series5.AddXY(k/100,(C1Veliev(b, k/100, rc, ae)),'', clWhite);
if k<100 then Series4.AddXY(k/100,(C1Pykhachev(b, (b*k)/100, rc)),'', clBlue); end;
edit3.text:=floattostr(Okr(C1Pykhachev(b, h, rc),2));
h:=h/b;
edit2.text:=floattostr(Okr(C1Pirverdian(b, h, rc),2));
edit1.text:=floattostr(Okr(C1Charny(b, h, rc),2));
edit4.text:=floattostr(Okr(C1(h, b, rc,1/ae),2));
edit5.text:=floattostr(Okr(C1Veliev(b, h, rc, ae),2));
edit6.text:='Нет'; END
ELSE BEGIN
//po:=r0/(ae*h0);
Series1.Clear; series2.Clear; Series3.Clear; series4.Clear; Series5.Clear; Series6.Clear;
for k:=1 to 96 do begin
Series1.AddXY(k/100,(C1(k/100, b, rc,1/ae)),'', clRed);
Series2.AddXY(k/100,(C1Charny(b, k/100, rc)),'', clgreen);
Series3.AddXY(k/100,(C1Pirverdian(b, k/100, rc)),'', clYellow);
Series5.AddXY(k/100,(C1Veliev(b, k/100, rc, ae)),'', clWhite);
if k<100 then Series4.AddXY(k/100,(C1Pykhachev(b, (b*k)/100, rc)),'', clBlue);
if (k>4) and (k<98) then BEGIN unit8.Form8.Edit3.Text:=floattostr(k/100);
unit8.Form8.Edit4.Text:=floattostr(b/(2*rc));
unit8.Form8.Button1Click(sender);
Series6.AddXY(k/100,strtofloat(unit8.Form8.Label2.Caption),'', clGray); END;
end;
edit3.text:=floattostr(Okr(C1Pykhachev(b, h, rc),2));
h:=h/b;
edit2.text:=floattostr(Okr(C1Pirverdian(b, h, rc),2));
Edit1.Text:=floattostr(Okr(C1Charny(b, h, rc),2));
edit4.text:=floattostr(Okr(C1(h, b, rc,1/ae),2));
edit5.text:=floattostr(Okr(C1Veliev(b, h, rc, ae),2));
unit8.Form8.Edit3.Text:=floattostr(strtofloat(stringgrid1.Cells[1,1])/
strtofloat(stringgrid1.Cells[1,0]));
unit8.Form8.Edit4.Text:=floattostr(b/(2*rc));
unit8.Form8.Button1Click(sender);
edit6.text:=unit8.Form8.Label2.Caption;
if edit6.text<>'Нет данных' then
edit6.text:=floattostr(okr(strtofloat(edit6.text),2));
Calc(Sender);
END;
end;
function TForm3.C1Pirverdian(b, h, rc: real): real;
begin
C1Pirverdian:=((1/h)-1)*( (1/(1-rc/b)) *ln(b/rc) -1 );
end;
function TForm3.C1Pykhachev(b, h, rc: real): real;
var jc,j:real;
begin
jc:=1+( ln(b/h)/ln(10) )/( ln(b/rc)/ln(10) );
j:=sqrt(jc);
C1Pykhachev:=(b/h)* ( exp(ln(b/rc)*(1-j))-1 ) /(1-j) - ln(b/rc);
end;
function TForm3.C1Charny(b, h, rc: real): real;
begin
C1Charny:=((1/h)-1)*ln(4*b/rc)-(fi(h)/(2*h)) ;
end;
function TForm3.C1Veliev(b, h, rc, ae: real): real;
begin
C1Veliev:=((1/h)-1) *
(ln(4*b/(rc*sqrt(1/ae)))) +
( (h*ln(h)+(1-h)*ln(1-h)) /(h*h));
end;
procedure TForm3.Button2Click(Sender: TObject);
var Excel,source: Variant; i,j,p,q: integer; n,k,h:real; SummC:real;
begin
b:=strtofloat(stringgrid1.Cells[1,0]); h:=strtofloat(stringgrid1.Cells[1,1]);
rc:=strtofloat(stringgrid1.Cells[1,2]); ae:=strtofloat(stringgrid1.Cells[1,3]);
if ((b/(2*rc))<5) or ((b/(2*rc))>160) THEN BEGIN
Excel := CreateOleObject('Excel.Application');
Excel.Workbooks.Add;
excel.Cells[1,1]:='отн. вскр.';
excel.Cells[1,2]:='Пирвердян'; excel.Cells[1,3]:='Чарный'; excel.Cells[1,4]:='Телков';
excel.Cells[1,5]:='Пыхачев'; excel.Cells[1,6]:='Велиев';
for j:=1 to 19 do BEGIN
excel.Cells[j+1,1]:=j/20;
excel.Cells[j+1,2]:=(C1Pirverdian(b, j/20, rc));
excel.Cells[j+1,3]:=(C1Charny(b, j/20, rc));
excel.Cells[j+1,4]:=(C1(j/20,b , rc, 1/ae));
excel.Cells[j+1,5]:=C1Pykhachev(b, (b*j)/20, rc);
excel.Cells[j+1,6]:=C1Veliev(b, j/20, rc, ae);
END;
Excel.Range[Excel.Cells[1,2], Excel.Cells[20, 6]].Select;
Excel.ActiveSheet.Shapes.AddChart.Select;
//Excel.ActiveChart.SetSourceData;
Source:=excel.Range[Excel.Cells[1,2], Excel.Cells[20, 6]];
Excel.ActiveChart.ChartType:= xlLine;
Excel.ActiveChart.Axes(xlCategory).Select;
Excel.ActiveSheet.ChartObjects('Диаграмма 1').Activate;
Excel.ActiveChart.SeriesCollection(1).XValues:= '=Лист1!$A$2:$A$20';
END
ELSE BEGIN
Calc(Sender);
Excel := CreateOleObject('Excel.Application');
Excel.Workbooks.Add;
excel.Cells[1,1]:='h';
excel.Cells[1,2]:='Пирвердян'; excel.Cells[1,3]:='Чарный'; excel.Cells[1,4]:='Телков';
excel.Cells[1,5]:='Пыхачев'; excel.Cells[1,6]:='Велиев'; excel.Cells[1,7]:='Щуров';
for j:=1 to 19 do BEGIN
excel.Cells[j+1,1]:=j/20;
excel.Cells[j+1,2]:=(C1Pirverdian(b, j/20, rc));
excel.Cells[j+1,3]:=(C1Charny(b, j/20, rc));
excel.Cells[j+1,4]:=(C1(j/20,b , rc, 1/ae));
excel.Cells[j+1,5]:=C1Pykhachev(b, (b*j)/20, rc);
excel.Cells[j+1,6]:=C1Veliev(b, j/20, rc, ae);
unit8.Form8.Edit3.Text:=floattostr(j/20);
unit8.Form8.Edit4.Text:=floattostr(b/(2*rc));
unit8.Form8.Button1Click(sender);
excel.Cells[j+1,7]:=strtofloat(unit8.Form8.Label2.Caption);
END;
for j:=1 to 5 do BEGIN SummC:=0; for i:=1 to 19 do begin
SummC:=SummC+abs(strtofloat(stringgrid2.Cells[j,i])-strtofloat(stringgrid2.Cells[6,i]))/
strtofloat(stringgrid2.Cells[6,i]); end;
excel.Cells[21,j+1]:=Round(SummC*10000/19)/10000;
END;
excel.Cells[21,1]:='Отклонение';
Excel.Range[Excel.Cells[1,2], Excel.Cells[20, 7]].Select;
Excel.ActiveSheet.Shapes.AddChart.Select;
//Excel.ActiveChart.SetSourceData;
Source:=excel.Range[Excel.Cells[1,2], Excel.Cells[20, 7]];
Excel.ActiveChart.ChartType:= xlLine;
Excel.ActiveChart.Axes(xlCategory).Select;
Excel.ActiveSheet.ChartObjects('Диаграмма 1').Activate;
Excel.ActiveChart.SeriesCollection(1).XValues:= '=Лист1!$A$2:$A$20';
Excel.Range[Excel.Cells[21,2], Excel.Cells[21, 7]].Select;
Excel.Selection.Style:= 'Percent';
END;
Excel.Visible:=true;
end;
procedure TForm3.calc(Sender: TObject);
var i,j,k,l: integer; SummC:real;
begin
stringgrid2.Cells[0,0]:='h'; stringgrid2.Cells[1,0]:='Пирв'; stringgrid2.Cells[2,0]:='Чар';
stringgrid2.Cells[3,0]:='Тел'; stringgrid2.Cells[4,0]:='Пых'; stringgrid2.Cells[5,0]:='Вел';
stringgrid2.Cells[6,0]:='Щур'; stringgrid2.Cells[0,20]:='Откл'; stringgrid2.Cells[6,20]:=' %';
for k:=1 to 19 do BEGIN
stringgrid2.Cells[0,k]:=floattostr(k*0.05);
stringgrid2.Cells[1,k]:=floattostr(round(C1Pirverdian(b, k/20, rc)*100)/100);
stringgrid2.Cells[2,k]:=floattostr(round(C1Charny(b, k/20, rc)*100)/100);
stringgrid2.Cells[3,k]:=floattostr(round(C1(k/20,b , rc, 1/ae)*100)/100);
stringgrid2.Cells[4,k]:=floattostr(round(C1Pykhachev(b, (b*k)/20, rc)*100)/100);
stringgrid2.Cells[5,k]:=floattostr(round(C1Veliev(b, k/20, rc, ae)*100)/100);
unit8.Form8.Edit3.Text:=floattostr(k/20);
unit8.Form8.Edit4.Text:=floattostr(b/(2*rc));
unit8.Form8.Button1Click(sender);
if ((b/2*rc)<5) and ((b/2*rc)>160) then
else
stringgrid2.Cells[6,k]:=unit8.Form8.Label2.Caption;
END;
for j:=1 to 5 do BEGIN SummC:=0; for i:=1 to 19 do begin
SummC:=SummC+abs(strtofloat(stringgrid2.Cells[j,i])-strtofloat(stringgrid2.Cells[6,i]))/
strtofloat(stringgrid2.Cells[6,i]); end;
stringgrid2.Cells[j,20]:=floattostr(Round(SummC*10000/19)/100);
END;
end;
procedure TForm3.N2D1Click(Sender: TObject);
begin
chart1.View3D:=false;
end;
procedure TForm3.N3D1Click(Sender: TObject);
begin
chart1.View3D:=true;
end;
end.
unit Unit4;
// Блок Приток к несовершенной скважине с экраном на забое
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, ExtCtrls, TeEngine, Series, ComObj, TeeProcs,
Chart, ExcelXP, math, Menus;
function E0_e(R0,rc,bcentr:real):real;
function E_Shelk(R0,Rb,n,rc:real):real;
type
TForm4 = class(TForm)
Image2: TImage;
Chart1: TChart;
Series1: TLineSeries;
GroupBox1: TGroupBox;
StringGrid2: TStringGrid;
Label1: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Button2: TButton;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
GroupBox2: TGroupBox;
StringGrid1: TStringGrid;
Button3: TButton;
Label2: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2D1: TMenuItem;
N3D1: TMenuItem;
Series2: TLineSeries;
Series3: TLineSeries;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
RadioGroup1: TRadioGroup;
Button4: TButton;
Label21: TLabel;
Label22: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure N2D1Click(Sender: TObject);
procedure N3D1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var R0,rc,ae,bcentr,Re,h_,l0,m,r_0:real; rect:TRect;
Form4: TForm4;
implementation
uses unit2, Unit6, Unit7, Unit5;
{$R *.dfm}
procedure TForm4.FormCreate(Sender: TObject);
begin
rect.Left:=0; rect.Top:=0; rect.Right:=image2.Width;
rect.Bottom:=image2.Height;
stringgrid1.Cells[0,0]:='Rб'; stringgrid1.Cells[0,1]:='n';
stringgrid1.Cells[1,0]:='50'; stringgrid1.Cells[1,1]:='2';
stringgrid1.Cells[2,0]:='[м]'; stringgrid1.Cells[2,1]:='';
stringgrid2.Cells[0,0]:='Ro'; stringgrid2.Cells[0,1]:='rc';
stringgrid2.Cells[0,2]:='ч'; stringgrid2.Cells[0,3]:='ho';
stringgrid2.Cells[0,4]:='д'; stringgrid2.Cells[0,5]:='b/ho';
stringgrid2.Cells[0,6]:='lo'; stringgrid2.Cells[0,7]:='m'; stringgrid2.Cells[0,8]:='ro';
stringgrid2.Cells[0,9]:='re';
stringgrid2.Cells[1,0]:='100'; stringgrid2.Cells[1,1]:='0,1';
stringgrid2.Cells[1,2]:='1'; stringgrid2.Cells[1,3]:='10';
stringgrid2.Cells[1,4]:='0'; stringgrid2.Cells[1,5]:='0,5';
stringgrid2.Cells[1,6]:='0,345'; stringgrid2.Cells[1,7]:='3';
stringgrid2.Cells[1,8]:='0,00675'; stringgrid2.Cells[1,9]:='3';
image2.Picture.LoadFromFile('BMP/fRe.bmp');
end;
function E0_e(R0,rc,bcentr:real):real;
begin
E0_e:=ln(R0/rc)*(1-bcentr*bcentr/(R0*R0));
end;
function E_Shelk(R0,Rb,n,rc:real):real;
begin
E_Shelk:=ln((exp(ln(R0)*2*n)-exp(ln(Rb)*2*n))/(n*rc*exp(ln(R0)*n)*exp(ln(Rb)*(n-1))) );
end;
procedure TForm4.Button1Click(Sender: TObject);
var egr:real; i,j:integer;
begin
R0:=strtofloat(stringgrid2.Cells[1,0]); Rc:=strtofloat(stringgrid2.Cells[1,1]);
ae:=strtofloat(stringgrid2.Cells[1,2]); h0:=strtofloat(stringgrid2.Cells[1,3]);
bcentr:=strtofloat(stringgrid2.Cells[1,4]); h_:=strtofloat(stringgrid2.Cells[1,5]);
l0:=strtofloat(stringgrid2.Cells[1,6]); m:=strtofloat(stringgrid2.Cells[1,7]);
r_0:=strtofloat(stringgrid2.Cells[1,8]); re:=strtofloat(stringgrid2.Cells[1,9]);
label1.Caption:=floattostr(okr(E0_e(R0,rc,bcentr)+c1(h_, h0, rc, R0/(ae*h0))+Ce(h_, h0, re)+
C0(h_, r_0, rc, l0, m),2));
label3.Caption:=floattostr(okr(c1(h_, h0, rc, R0/(ae*h0)),3));
label4.Caption:=floattostr(okr(Ce(h_, h0, re),3));
label5.Caption:=floattostr(okr(C0(h_, r_0, rc, l0, m),3));
end;
procedure TForm4.Button2Click(Sender: TObject);
var Excel,source: Variant; i,j,p,q: integer;
begin
R0:=strtofloat(stringgrid2.Cells[1,0]); Rc:=strtofloat(stringgrid2.Cells[1,1]);
ae:=strtofloat(stringgrid2.Cells[1,2]); h0:=strtofloat(stringgrid2.Cells[1,3]);
bcentr:=strtofloat(stringgrid2.Cells[1,4]); h_:=strtofloat(stringgrid2.Cells[1,5]);
l0:=strtofloat(stringgrid2.Cells[1,6]); m:=strtofloat(stringgrid2.Cells[1,7]);
r_0:=strtofloat(stringgrid2.Cells[1,8]); re:=strtofloat(stringgrid2.Cells[1,9]);
Excel := CreateOleObject('Excel.Application');
Excel.Workbooks.Add;
excel.Cells[1,1]:='h'; excel.Cells[1,2]:='Фильтр. сопр.';
for j:=1 to 19 do Begin
excel.Cells[j+1,1]:=(j/20);
excel.Cells[j+1,2]:=E0_e(R0,rc,bcentr)+c1(j/20, h0, rc, R0/(ae*h0))+Ce(j/20, h0, re)+
C0(j/20, r_0, rc, l0, m);
End;
Excel.Range[Excel.Cells[1, 1], Excel.Cells[20, 2]].Select;
Excel.Selection.Borders.LineStyle:=1;
Excel.Range[Excel.Cells[1,2], Excel.Cells[20, 2]].Select;
Excel.ActiveSheet.Shapes.AddChart.Select;
//Excel.ActiveChart.SetSourceData;
Source:=excel.Range[Excel.Cells[1,2], Excel.Cells[20, 2]];
Excel.ActiveChart.ChartType:= xlLine;
Excel.ActiveChart.Axes(xlCategory).Select;
Excel.ActiveSheet.ChartObjects('Диаграмма 1').Activate;
Excel.ActiveChart.SeriesCollection(1).XValues:= '=Лист1!$A$2:$A$20';
Excel.Visible:=true;
end;
procedure TForm4.Button3Click(Sender: TObject);
var Rb, nn:real;
begin
R0:=strtofloat(stringgrid2.Cells[1,0]); Rc:=strtofloat(stringgrid2.Cells[1,1]);
ae:=strtofloat(stringgrid2.Cells[1,2]); h0:=strtofloat(stringgrid2.Cells[1,3]);
bcentr:=strtofloat(stringgrid2.Cells[1,4]); h_:=strtofloat(stringgrid2.Cells[1,5]);
l0:=strtofloat(stringgrid2.Cells[1,6]); m:=strtofloat(stringgrid2.Cells[1,7]);
r_0:=strtofloat(stringgrid2.Cells[1,8]); re:=strtofloat(stringgrid2.Cells[1,9]);
Rb:=strtofloat(stringgrid1.Cells[1,0]); nn:=strtofloat(stringgrid1.Cells[1,1]);
label2.Caption:=floattostr(okr(E_Shelk(R0,Rb,nn,rc)+c1(h_, h0, rc, R0/(ae*h0))+Ce(h_, h0, re)+
C0(h_, r_0, rc, l0, m),2));
end;
procedure TForm4.Button4Click(Sender: TObject);
var i,j:integer;
begin series1.Clear; series2.Clear; series3.Clear;
R0:=strtofloat(stringgrid2.Cells[1,0]); Rc:=strtofloat(stringgrid2.Cells[1,1]);
ae:=strtofloat(stringgrid2.Cells[1,2]); h0:=strtofloat(stringgrid2.Cells[1,3]);
bcentr:=strtofloat(stringgrid2.Cells[1,4]); h_:=strtofloat(stringgrid2.Cells[1,5]);
l0:=strtofloat(stringgrid2.Cells[1,6]); m:=strtofloat(stringgrid2.Cells[1,7]);
r_0:=strtofloat(stringgrid2.Cells[1,8]); re:=strtofloat(stringgrid2.Cells[1,9]);
if radiogroup1.ItemIndex=0 then Begin
series1.Title:='m='+floattostr(round(m/2)); series2.Title:='m='+floattostr(m);
series3.Title:='m='+floattostr(m*2);
for i:=1 to 99 do BEGIN
Series1.AddXY(i/100,E0_e(R0,rc,bcentr)+c1(i/100, h0, rc, R0/(ae*h0))+Ce(i/100, h0, re)+
C0(i/100, r_0, rc, l0, round(m/2)),'', clRed);
Series2.AddXY(i/100,E0_e(R0,rc,bcentr)+c1(i/100, h0, rc, R0/(ae*h0))+Ce(i/100, h0, re)+
C0(i/100, r_0, rc, l0, m),'', clBlue);
Series3.AddXY(i/100,E0_e(R0,rc,bcentr)+c1(i/100, h0, rc, R0/(ae*h0))+Ce(i/100, h0, re)+
C0(i/100, r_0, rc, l0, m*2),'', clGreen);
END;
End;
if radiogroup1.ItemIndex=1 then Begin
series1.Title:='rэ='+floattostr(round(re/2)); series2.Title:='rэ='+floattostr(re);
series3.Title:='rэ='+floattostr(re*2);
for i:=1 to 99 do BEGIN
Series1.AddXY(i/100,E0_e(R0,rc,bcentr)+c1(i/100, h0, rc, R0/(ae*h0))+Ce(i/100, h0, re/2)+
C0(i/100, r_0, rc, l0, m),'', clRed);
Series2.AddXY(i/100,E0_e(R0,rc,bcentr)+c1(i/100, h0, rc, R0/(ae*h0))+Ce(i/100, h0, re)+
C0(i/100, r_0, rc, l0, m),'', clBlue);
Series3.AddXY(i/100,E0_e(R0,rc,bcentr)+c1(i/100, h0, rc, R0/(ae*h0))+Ce(i/100, h0, re*2)+
C0(i/100, r_0, rc, l0, m),'', clGreen);
END;
End;
if radiogroup1.ItemIndex=2 then Begin
series1.Title:='lo='+floattostr((l0/2)); series2.Title:='lo='+floattostr(l0);
series3.Title:='lo='+floattostr(l0*2);
for i:=1 to 99 do BEGIN
Series1.AddXY(i/100,E0_e(R0,rc,bcentr)+c1(i/100, h0, rc, R0/(ae*h0))+Ce(i/100, h0, re)+
C0(i/100, r_0, rc, l0/2, m),'', clRed);
Series2.AddXY(i/100,E0_e(R0,rc,bcentr)+c1(i/100, h0, rc, R0/(ae*h0))+Ce(i/100, h0, re)+
C0(i/100, r_0, rc, l0, m),'', clBlue);
Series3.AddXY(i/100,E0_e(R0,rc,bcentr)+c1(i/100, h0, rc, R0/(ae*h0))+Ce(i/100, h0, re)+
C0(i/100, r_0, rc, l0*2, m),'', clGreen);
END;
End;
if radiogroup1.ItemIndex=3 then Begin
series1.Title:='ro='+floattostr((r_0/2)); series2.Title:='ro='+floattostr(r_0);
series3.Title:='ro='+floattostr(r_0*2);
for i:=1 to 99 do BEGIN
Series1.AddXY(i/100,E0_e(R0,rc,bcentr)+c1(i/100, h0, rc, R0/(ae*h0))+Ce(i/100, h0, re)+
C0(i/100, r_0/2, rc, l0, m),'', clRed);
Series2.AddXY(i/100,E0_e(R0,rc,bcentr)+c1(i/100, h0, rc, R0/(ae*h0))+Ce(i/100, h0, re)+
C0(i/100, r_0, rc, l0, m),'', clBlue);
Series3.AddXY(i/100,E0_e(R0,rc,bcentr)+c1(i/100, h0, rc, R0/(ae*h0))+Ce(i/100, h0, re)+
C0(i/100, r_0*2, rc, l0, m),'', clGreen);
END;
End;
end;
procedure TForm4.N2D1Click(Sender: TObject);
begin
chart1.View3D:=false;
end;
procedure TForm4.N3D1Click(Sender: TObject);
begin
chart1.View3D:=true;
end;
end.
unit Unit5;
// блок расчета дополнительного фильтрационного сопротивления,
// перфорацией (С0).
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Grids, TeEngine, Series, TeeProcs, Chart,ComObj,
ExcelXP, Menus;
function C0(h_,r0,rc,l0,m:real):real;
type
TForm2_1 = class(TForm)
Image1: TImage;
Chart1: TChart;
Series1: TLineSeries;
GroupBox1: TGroupBox;
StringGrid2: TStringGrid;
StaticText2: TStaticText;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Series2: TLineSeries;
Series3: TLineSeries;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2D1: TMenuItem;
N3D1: TMenuItem;
RadioGroup1: TRadioGroup;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure N2D1Click(Sender: TObject);
procedure N3D1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2_1: TForm2_1; i:integer;
ae,h_,r0,rc,l0,m:extended;
implementation
{$R *.dfm}
function C0(h_, r0, rc, l0, m:real): real;
begin
C0:=(1/h_)*(ln(4*rc/l0)+(1/(m*l0))*ln(1/(2*3.141592653589*r0*m)));
end;
procedure TForm2_1.FormCreate(Sender: TObject);
begin
image1.Picture.LoadFromFile('BMP/fC0.bmp');
stringgrid2.Cells[0,0]:='b/ho'; stringgrid2.Cells[0,1]:='rc';
stringgrid2.Cells[0,2]:='ro';
stringgrid2.Cells[0,3]:='lo'; stringgrid2.Cells[0,4]:='m';
stringgrid2.Cells[1,0]:='1'; stringgrid2.Cells[1,1]:='0,075';
stringgrid2.Cells[1,2]:='0,00635';
stringgrid2.Cells[1,3]:='0,3456'; stringgrid2.Cells[1,4]:='3';
stringgrid2.Cells[2,0]:='[ ]'; stringgrid2.Cells[2,1]:='[м]';
stringgrid2.Cells[2,2]:='[м]';
stringgrid2.Cells[2,3]:='[м]'; stringgrid2.Cells[2,4]:='[отв/м]';
end;
procedure TForm2_1.Button1Click(Sender: TObject);
begin
h_:=strtofloat(stringgrid2.Cells[1,0]); rc:=strtofloat(stringgrid2.Cells[1,1]);
r0:=strtofloat(stringgrid2.Cells[1,2]);
l0:=strtofloat(stringgrid2.Cells[1,3]); m:=strtofloat(stringgrid2.Cells[1,4]);
edit1.Text:=floattostr(C0(h_, r0, rc, l0, m));
end;
procedure TForm2_1.Button2Click(Sender: TObject);
var k: integer;
begin series1.Clear; series2.Clear; series3.Clear;
h_:=strtofloat(stringgrid2.Cells[1,0]); rc:=strtofloat(stringgrid2.Cells[1,1]);
r0:=strtofloat(stringgrid2.Cells[1,2]);
l0:=strtofloat(stringgrid2.Cells[1,3]); m:=strtofloat(stringgrid2.Cells[1,4]);
if radiogroup1.ItemIndex=0 then Begin
series1.Title:='rc='+floattostr((rc/2)); series2.Title:='rc='+floattostr(rc);
series3.Title:='rc='+floattostr(rc*2);
for k:=1 to 100 do begin
Series1.AddXY(k/100,C0(k/100, r0, rc/2, l0, m),'', clred);
Series2.AddXY(k/100,C0(k/100, r0, rc, l0, m),'', clBlue);
Series3.AddXY(k/100,C0(k/100, r0, rc*2, l0, m),'', clGreen);
end; End;
if radiogroup1.ItemIndex=1 then Begin
series1.Title:='ro='+floattostr((r0/2)); series2.Title:='ro='+floattostr(r0);
series3.Title:='ro='+floattostr(r0*2);
for k:=1 to 100 do begin
Series1.AddXY(k/100,C0(k/100, r0/2, rc, l0, m),'', clred);
Series2.AddXY(k/100,C0(k/100, r0, rc, l0, m),'', clBlue);
Series3.AddXY(k/100,C0(k/100, r0*2, rc, l0, m),'', clGreen);
end; End;
if radiogroup1.ItemIndex=2 then Begin
series1.Title:='lo='+floattostr((l0/2)); series2.Title:='lo='+floattostr(l0);
series3.Title:='lo='+floattostr(l0*2);
for k:=1 to 100 do begin
Series1.AddXY(k/100,C0(k/100, r0, rc, l0/2, m),'', clred);
Series2.AddXY(k/100,C0(k/100, r0, rc, l0, m),'', clBlue);
Series3.AddXY(k/100,C0(k/100, r0, rc, l0*2, m),'', clGreen);
end; End;
if radiogroup1.ItemIndex=3 then Begin
series1.Title:='m='+floattostr(round(m/2)); series2.Title:='m='+floattostr(m);
series3.Title:='m='+floattostr(m*2);
for k:=1 to 100 do begin
Series1.AddXY(k/100,C0(k/100, r0, rc, l0, round(m/2)),'', clred);
Series2.AddXY(k/100,C0(k/100, r0, rc, l0, m),'', clBlue);
Series3.AddXY(k/100,C0(k/100, r0, rc, l0, m*2),'', clGreen);
end; End;
end;
procedure TForm2_1.Button3Click(Sender: TObject);
var Excel,source: Variant; i,j,p,q: integer;
begin
h_:=strtofloat(stringgrid2.Cells[1,0]); rc:=strtofloat(stringgrid2.Cells[1,1]);
r0:=strtofloat(stringgrid2.Cells[1,2]);
l0:=strtofloat(stringgrid2.Cells[1,3]); m:=strtofloat(stringgrid2.Cells[1,4]);
Excel := CreateOleObject('Excel.Application');
Excel.Workbooks.Add;
excel.Cells[1,1]:='отн вскр'; excel.Cells[1,2]:='Сo';
for j:=1 to 19 do Begin
excel.Cells[j+1,1]:=(j/20);
excel.Cells[j+1,2]:=C0(j/20, r0, rc, l0, m);
End;
Excel.Range[Excel.Cells[1, 1], Excel.Cells[20, 2]].Select;
Excel.Selection.Borders.LineStyle:=1;
Excel.Range[Excel.Cells[1,2], Excel.Cells[20, 2]].Select;
Excel.ActiveSheet.Shapes.AddChart.Select;
//Excel.ActiveChart.SetSourceData;
Source:=excel.Range[Excel.Cells[1,2], Excel.Cells[20, 2]];
Excel.ActiveChart.ChartType:= xlLine;
Excel.ActiveChart.Axes(xlCategory).Select;
Excel.ActiveSheet.ChartObjects('Диаграмма 1').Activate;
Excel.ActiveChart.SeriesCollection(1).XValues:= '=Лист1!$A$2:$A$20';
Excel.Visible:=true;
end;
procedure TForm2_1.N2D1Click(Sender: TObject);
begin
chart1.View3D:=false;
end;
procedure TForm2_1.N3D1Click(Sender: TObject);
begin
chart1.View3D:=True;
end;
end.
unit Unit6;