procedure TForm1.UpdateData;
var
NewUx, NewUy: array [1..Nx,1..Ny] of Real;
i, j, i1, i2: Integer;
begin
// Вычисляем P (через div U)
for i:=2 to Nx-1 do
for j:=2 to Ny-1 do
divU[i,j] :=
((Ux[i+1,j+1]+Ux[i+1,j-1]) - (Ux[i-1,j-1]+Ux[i-1,j+1])+
(Uy[i-1,j+1]+Uy[i+1,j+1]) - (Uy[i-1,j-1]+Uy[i+1,j-1])) /4/h;
for i:=2 to Nx-1 do
for j:=2 to Ny-1 do
P[i,j] := P[i,j] - c*tau*divU[i,j];
{давление на границах}
for i:=2 to Nx-1 do begin
P[i,1]:=P[i,2];
P[i,Ny]:=P[i,Ny-1];
end;
for j:=2 to Ny-1 do begin
P[1,j]:=P[2,j];
P[Nx,j]:=P[Nx-1,j];
end;
i1 := Nx div 4; i2 := Nx div 2 + 1;
for i:=i1 to i2 do
P[i,Ny] := 2*P[i,Ny-1]-P[i,Ny-2];
i1 := Nx div 2; i2 := 3*Nx div 4 + 1;
for i:=i1 to i2 do
P[i,1] := 2*P[i,2]-P[i,3];
i1 := Ny div 3; i2 := 2*Ny div 3 + 1;
for i:=i1 to i2 do
P[Nx,i] := 2*P[Nx-1,i]-P[Nx-2,i];
// Вычисляем Ux и Uy
for i:=2 to Nx-1 do
for j:=2 to Ny-1 do
NewUx[i,j] := Ux[i,j] + tau * (
-( (Ux[i,j]+Abs(Ux[i,j]))/2 * (Ux[i,j]-Ux[i-1,j])/h
+ (Ux[i,j]-Abs(Ux[i,j]))/2 * (Ux[i+1,j]-Ux[i,j])/h )
-( (Uy[i,j]+Abs(Uy[i,j]))/2 * (Ux[i,j]-Ux[i,j-1])/h
+ (Uy[i,j]-Abs(Uy[i,j]))/2 * (Ux[i,j+1]-Ux[i,j])/h )
- (P[i+1,j+1]+P[i+1,j-1]-P[i-1,j+1]-P[i-1,j-1]) /4/h/ro
+ nu * (Ux[i+1,j]+Ux[i-1,j]+Ux[i,j+1]+Ux[i,j-1]-4*Ux[i,j]) /h/
h );
for i:=2 to Nx-1 do
for j:=2 to Ny-1 do
Ux[i,j]:=NewUx[i,j];
for i:=2 to Nx-1 do
for j:=2 to Ny-1 do
NewUy[i,j] := Uy[i,j] + tau * (
-( (Ux[i,j]+Abs(Ux[i,j]))/2 * (Uy[i,j]-Uy[i-1,j])/h
+ (Ux[i,j]-Abs(Ux[i,j]))/2 * (Uy[i+1,j]-Uy[i,j])/h )
-( (Uy[i,j]+Abs(Uy[i,j]))/2 * (Uy[i,j]-Uy[i,j-1])/h
+ (Uy[i,j]-Abs(Uy[i,j]))/2 * (Uy[i,j+1]-Uy[i,j])/h )