以下是我要重现的内容:CFD simulation - Car
以下是我使用我的代码获得的内容: My stuff
我最初使用的方程是来自the NASA website的Euler方程,我将时间变量加到了2个动量方程中。
我也跟着theses two videos to help with discretization (11 and 12)
我需要提一下,我是CFD和编码的初学者,所以我对这些事情的经验非常有限。
这是我的代码,我一直在Octave上编写代码,但我意识到Matlab本身的执行速度要快得多:
clear all;
nx = 80; ny = 60;
nt = 20; nit = 20; dt = 0.01;
vis = 0; rho = 1.225;
dx = 5/(nx-1); dy = 2/(ny-1);
x = 0:dx:5; y = 0:dy:2;
u = zeros(nx,ny);
v = zeros(nx,ny);
p = zeros(nx,ny);
cmap = flipud(jet(256));
%u([1,2], 1) = 0;
%v([1,2], 1) = 0;
%p(:, 2) = 0;
[y,x] = meshgrid(y,x);
u(:, :) = 0.1;
for it = 1:nt+1
% constant flow from the left wall
u(1, :) = 0.1;
for i = 2:nx-1
for j = 2:ny-1
b(i,j) = rho*( (u(i+1,j)-u(i-1,j))/2/dx + (v(i,j+1)-v(i,j-1))/2/dy )/dt + rho*(((u(i+1,j)-u(i-1,j))/2/dx).^2 + 2*(u(i,j+1)-u(i,j-1))/2/dy*(v(i+1,j)-v(i,j-1))/2/dx) + ( (v(i,j+1)-v(i,j-1))/2/dy ).^2;
end
end
b(nx,:) = 0; b(:,ny) = 0; % add row and column 20 = 0 for pcolor to
match (19 v 20)
for iit = 1:nit+1
pn = p;
for i = 2:nx-1
for j = 2:ny-1
p(i,j) = ((pn(i+1,j) + pn(i-1,j))*dy^2 + (pn(i,j+1)+pn(i,j-1))*dx^2 - b(i,j)*dx^2*dy^2) / (dx^2+dy^2) / 2;
end
end
p(1,:) = p(2,:); p(nx,:) = p(nx-1,:);
p(:,1) = p(:,2); p(:,ny) = p(:,ny-1);
end
un = u; vn = v;
for i = 2:nx-1
for j = 2:ny-1
u(i,j) = un(i,j) - un(i,j)*dt/dx*(un(i,j) - un(i-1,j)) - vn(i,j)*dt/dy*(un(i,j)-un(i,j-1)) - 1/rho*(p(i+1,j)-p(i-1,j))*dt/2/dx + vis*dt/dx^2*(un(i+1,j)-2*un(i,j)+un(i-1,j)) + vis*dt/dy^2*(un(i,j+1)-2*un(i,j)+un(i,j-1));
v(i,j) = vn(i,j) - un(i,j)*dt/dx*(vn(i,j) - vn(i-1,j)) - vn(i,j)*dt/dy*(vn(i,j)-vn(i,j-1)) - 1/rho*(p(i,j+1)-p(i,j-1))*dt/2/dy + vis*dt/dx^2*(vn(i+1,j)-2*vn(i,j)+vn(i-1,j)) + vis*dt/dy^2*(vn(i,j+1)-2*vn(i,j)+vn(i,j-1));
end
end
u(1,:) = 0; u(nx,:) = 0; u(:,1) = 0; u(:,ny) = 0;
v(1,:) = 0; v(nx,:) = 0; v(:,1) = 0; v(:,ny) = 0; % set borders to 0
% car front
for c = 1:8
for d = 1:10
u(c+11, d+4) = 0;
v(c+11, d+4) = 0;
end
end
% car body
for c = 1:11
for d = 1:17
u(c+19, d+4) = 0;
v(c+19, d+4) = 0;
end
end
% car rear
for c = 1:8
for d = 1:10
u(c+30, d+4) = 0;
v(c+30, d+4) = 0;
end
end
end
colormap (cmap);
pcolor(x,y,b);
shading interp;
hold on;
quiver (x, y, u, v, 'color', [0 0 0]);
答案 0 :(得分:1)
不可压缩的Navier-Stokes方程(类似于欧拉方程,但具有扩散)是这些类型模拟的典型选择。在您的模拟情况下,由于流量在那里更加复杂(再循环区域),因此在汽车后通常会有5到20倍的区域。如果您不想编写自己的代码,可以考虑使用Matlab CFD toolbox并按照tutorial for flow over a cylinder(同时用汽缸代替您的汽车几何)。最后,如果内置求解器太慢,您还可以使用OpenFOAM CFD求解器集成来加速仿真。