Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
КРАТКИЙ АНАЛИЗ РАБОТ, ПОСВЯЩЕННЫХ ПРОБЛЕМЕ ФИЛЬТРАЦИОННЫХ СОПРОТИВЛЕНЙСтр 1 из 7Следующая ⇒
СОДЕРЖАНИЕ
ВВЕДЕНИЕ В настоящее время нефтегазовую промышленность России характеризует значительное ухудшение структуры нефтегазовых залежей. Поэтому разработка нефтегазовых месторождений является достаточно сложной задачей и требует, для успешного решения, системного подхода. Для повышения эффективности разработки месторождений требуется создание принципиально новых подходов в области исследования и моделирования процессов разработки нефтегазовых месторождений с использованием быстродействующих компьютеров для проведения сложных вычислений геологического и гидродинамического моделирования. К настоящему времени теоретические решения для притока к совершенным скважинам исследованы достаточно полно. Однако аналогичных разработок по притокам к несовершенным скважинам недостаточно. При разработке несовершенных скважин необходимо оценить, интерпретировать и учесть фильтрационные сопротивления, которые могут быть вызваны многими факторами, такими как: частичное вскрытие пласта, сообщение скважины с пластом только через отверстия в колонне труб, установкой непроницаемой перегородки (экрана), наличием перфорации, и исследовать их влияние на эффективность разработки нефтегазовых месторождений. Для области подземной гидрогазодинамики, в которой исследуются фильтрационные сопротивления, характерно большое количество сложных и трудоемких расчетов. В связи с этим исследование методик расчета дополнительных фильтрационных сопротивлений и решение проблемы создания эффективных алгоритмов и программных продуктов, в которых реализованы основные аналитические решения расчета, весьма актуальны на сегодняшний день. Решение комплекса проблем, связанных с достоверным определением дополнительных фильтрационных сопротоивлений на скважинах является важной частью разработки нефтегазового месторождения, таким образом, цель данной магистерской диссертации заключается в том, чтобы на основе проведенного исследования оптимизировать данный процесс, а именно, создать программу для автоматизации расчета, провести анализ и выбор наиболее точной и обоснованной методики расчета, выработать практические рекомендации по расчету дополнительных фильтрационных сопротивлений. ИССЛЕДОВАНИЕ И АНАЛИЗ МЕТОДИК РАСЧЕТА ФИЛЬТРАЦИОННЫХ СОПРОТИВЛЕНИЙ В данной главе будет произведено исследование методик расчета фильтрационных сопротивлений. РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА ДЛЯ РАСЧЕТА ФИЛЬТРАЦИОННЫХ СОПРОТИВЛЕНИЙ ПО РАЗЛИЧНЫМ МЕТОДИКАМ ПРИЛОЖЕНИЕ 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;
// блок расчета дополнительного фильтрационного сопротивления,
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); Популярное:
|
Последнее изменение этой страницы: 2016-07-13; Просмотров: 669; Нарушение авторского права страницы