Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



СОДЕРЖАНИЕ

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


Поделиться:



Популярное:

  1. IV Перечень лабораторных работ, наглядных пособий и средств ТСО.
  2. Библиографический подбор и изучение научной литературы по проблеме исследования
  3. В. Краткий обзор упражнений Цигун Железной Рубашки.
  4. Выводы и предложения по обозначенной проблеме
  5. Выводы по проблеме роста и стабилизации населения Земли
  6. ГЛАВА 1. ОБЗОР ЛИТЕРАТУРЫ ПО ИЗУЧАЕМОЙ ПРОБЛЕМЕ
  7. Глава 1. Психологическое просвещение по проблеме адаптации ребёнка в среднем звене
  8. Глава 2. Классификация запросов и консультационные сценарии по проблеме супружеских отношений.
  9. Грузии», краткий этногеографический словарь названий, терминологический словарь, полезные ссылки на интернет ресурсы по Грузии.
  10. Значения фильтрационных сопротивлений по Маскету и Стклянину-Телкову
  11. И КРАТКИЙ КОНСПЕКТ ЛЕКЦИЙ ПО ПЕДАГОГИКЕ
  12. Изучить специальную литературу по рассматриваемой проблеме.


Последнее изменение этой страницы: 2016-07-13; Просмотров: 631; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.844 с.)
Главная | Случайная страница | Обратная связь