Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.03.2012, 17:00
KsenIzNN KsenIzNN вне форума
Прохожий
 
Регистрация: 05.02.2012
Сообщения: 4
Репутация: 10
По умолчанию Неверный результат

Помогите люди добрые! Не могу найти ошибку в программе. Перепробовал уже все что мог - все равно не могу найти.

Суть такова. Рассматривается участок трубопровода. Слева стоит насос, справа закрывается задвижка. Программа строит графики давления красным и скоростей зеленым, решая методом характеристик систему диф.уров в частных производных. Но все формулы перепроверены по многу многу раз. Возможно я как то неправильно воспользовался функциями и где то тут у нас с делфи возникли непонимания. Собственно, "неправильность" проявляется во впадине на графике давления, когда волна отражается.

Очень надеюсь на помощь! Сроки поджимают, от результата зависит очень многое. Заранее спасибо!

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  mat2=array[0..100,0..10000] of Real;
  TForm1 = class(TForm)
    lbl1: TLabel;
    lbledt1: TLabeledEdit;
    lbledt2: TLabeledEdit;
    lbledt3: TLabeledEdit;
    lbledt4: TLabeledEdit;
    lbledt5: TLabeledEdit;
    lbl2: TLabel;
    lbl3: TLabel;
    lbledt6: TLabeledEdit;
    lbledt7: TLabeledEdit;
    lbledt8: TLabeledEdit;
    lbledt9: TLabeledEdit;
    lbl4: TLabel;
    lbledt10: TLabeledEdit;
    btn1: TButton;
    lbledt11: TLabeledEdit;
    tmr1: TTimer;
    procedure btn1Click(Sender: TObject);
    procedure tmr1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  p,v:mat2;
  pg,xg,pa, t, dzi, dp, i, pp, v1, a, b, nu, ro, c, l, d, del, tz, vsr, re : Real;
  sec, j, k : Integer;

const g=9.81;

implementation

uses Unit2;

{$R *.dfm}

 procedure dzit;
  begin
   if (1-t/tz)<0.05 then
   begin
    dzi:=1000000;
   end
     else
     begin
     if (1-t/tz)<0.95 then
     begin
      dzi:=Exp(2.3*(7.661175-72.63827*(1-t/tz)+345.7625*exp(2*ln(1-t/tz))-897.8331*exp(3*ln(1-t/tz))+1275.939*exp(4*ln(1-t/tz))-938.8331*exp(5*ln(1-t/tz))+278.8193*exp(6*ln(1-t/tz))))
     end
       else
       begin
        dzi:=0.6-0.6*(1-t/tz)
       end
     end;
  end;

 function lam(x,m:Integer):Real;

  begin
  Re := Abs(v[x,m])*d/nu;
  if re = 0 then begin Result:=0; end else
  if Re <= 2320 then
    begin
     result := 64 / Re;
    end else
    begin
    result := 0.11*exp(0.25*ln(del/d+68/Re))
    end;
  end;

 function lam1(v:Real):Real;

  begin
    Re := Abs(v)*d/nu;
  if re = 0 then begin Result:=0; end else
  if Re <= 2320 then
    begin
     result := 64 / Re;
    end else
    begin
    result := 0.11*exp(0.25*ln(del/d+68/Re))
    end;
  end;

 function Imin:Real;
  begin
   result:=p[j-1,k-1]+ro*c*v[j-1,k-1]-0.01*l*lam(j-1,k-1)*ro*v[j-1,k-1]*abs(v[j-1,k-1])/2/d;
  end;

 function Iplus:Real;
  begin
   result:=p[j+1,k-1]-ro*c*v[j+1,k-1]+0.01*l*lam(j+1,k-1)*ro*v[j+1,k-1]*abs(v[j+1,k-1])/2/d;
  end;




procedure TForm1.btn1Click(Sender: TObject);
begin
 pp :=StrToFloat(lbledt1.text)*1000000;
 a  :=StrToFloat(lbledt2.text);
 b  :=StrToFloat(lbledt3.text)*3600*3600;
 nu :=StrToFloat(lbledt4.text)/1000000;
 ro :=StrToFloat(lbledt5.text);
 c  :=StrToFloat(lbledt9.text);
 l  :=StrToFloat(lbledt6.text);
 d  :=StrToFloat(lbledt7.text)/1000;
 del:=StrToFloat(lbledt8.text)/1000;
 tz :=StrToFloat(lbledt10.text);
 pa :=strtofloat(lbledt11.text)*1000000;

 vsr:=50;
 v1:=Sqrt( (a+(pp-pa)/ro/g) / (0.0827*pi*pi*lam1(vsr)*l/d/16+b*pi*pi*d*d*d*d/16));
 for k:=1 to 100 do
 begin
   vsr:=v1;
   v1:=Sqrt( (a+(pp-pa)/ro/g) / (0.0827*pi*pi*lam1(vsr)*l/d/16+b*pi*pi*d*d*d*d/16));
 end;

 i:=lam1(v1)*v1*v1/2/g/d;
 dp:=i*ro*g*l;

 for j:= 0 to 100 do
 begin
   v[j,0]:=v1;
   p[j,0]:=dp+pa-j*i*ro*g*l/100;
 end;

 for k:= 1 to 10000 do
 begin
   t:=k*0.01*l/c;
   dzit;

   j:=0;

   if Iplus < (pp+ro*g*a) then
     begin
     v[j,k]:= Sqrt( (64*c*c)/(g*g*b*b*pi*pi*pi*pi*d*d*d*d*d*d*d*d) - 16*(Iplus-pp-ro*g*a)/(ro*g*b*pi*pi*d*d*d*d)) - (8*c)/(g*b*pi*pi*d*d*d*d);
     end else begin v[j,k]:=0; end;

   p[j,k]:=Iplus + ro*c*v[j,k];

   for j:= 1 to 99 do
   begin
   p[j,k]:=(Imin+Iplus)/2;
   v[j,k]:=(Imin-Iplus)/2/ro/c;
   end;

   j:=100;

   if Imin > pa then
   begin
     v[j,k]:= Sqrt( c*c/dzi/dzi + 2*(Imin-pa)/(ro*dzi) ) - c/dzi;
   end
   else
   begin
     v[j,k]:=0;
   end;

   p[j,k]:= Imin - ro*c*v[j,k];

  end;

  sec:=0;
  Tmr1.Enabled := true;
    form2.visible:= true;
end;

procedure TForm1.tmr1Timer(Sender: TObject);
begin
  Form2.lnsrsSeries1.Clear;
  Form2.lnsrsSeries2.Clear;
 for j:=0 to 100 do begin
   {pg:=p[j,sec-1]/50000;
   xg:=j*7;
   form2.Canvas.Pen.Color:=clBtnFace;
   Form2.Canvas.LineTo(50+round(xg),300-round(pg));
  end;
  form2.Canvas.MoveTo(50,300);
  for j:=0 to 100 do begin
   pg:=p[j,sec]/50000;
   xg:=j*7;
   form2.Canvas.Pen.Color:=clRed;
   form2.Canvas.LineTo(50+round(xg),300-round(pg));
  end;
  form2.lbl1.caption:=FloatToStr((sec-1)*0.01);}
  form2.lnsrsSeries1.AddXY(j*l*0.01,p[j,sec],'',clred);
  Form2.lnsrsSeries2.AddXY(j*l*0.01,v[j,sec]*1000000,'',clGreen);
end;
sec:=sec+1;
end;
end.
Вложения
Тип файла: zip Prog1.zip (291.8 Кбайт, 0 просмотров)

Последний раз редактировалось KsenIzNN, 10.03.2012 в 17:16.
Ответить с цитированием
  #2  
Старый 10.03.2012, 17:03
KsenIzNN KsenIzNN вне форума
Прохожий
 
Регистрация: 05.02.2012
Сообщения: 4
Репутация: 10
По умолчанию

добавил файл программы
Ответить с цитированием
  #3  
Старый 15.03.2012, 10:49
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию непонятки

>добавил файл программы
А где Unit1.pas Unit1.dfm Unit2.pas Unit2.dfm ?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter