- Lektsia - бесплатные рефераты, доклады, курсовые работы, контрольные и дипломы для студентов - https://lektsia.info -

КРАТКИЙ АНАЛИЗ РАБОТ, ПОСВЯЩЕННЫХ ПРОБЛЕМЕ ФИЛЬТРАЦИОННЫХ СОПРОТИВЛЕНЙ



СОДЕРЖАНИЕ

Введение..............................................................................................................................
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;