求解N-S方程最大难处就是压力和速度场是耦合的。如何处理压力是核心问题,涡量-流函数方法很好的解决了该难题。将求解速度场和压力场转变为求解涡量和流函数。
而速度场与流函数关系如下:
Matlab file exchange上一个涡量-流函数方法计算流动的例子,使用Matlab计算流体流动,代码如下:
clear;%参数设置Re=10; L=1; n=100;dh=L/n;psi=zeros(n+1,n+1);xi=zeros(n+1,n+1);rho=1.0; for k=1:100000 err=0; for i=2:n xi(i,1)=-2*(psi(i,2)-psi(i,1))/dh^2; xi(i,n+1)=-2*(psi(i,n)-psi(i,n+1))/dh^2; end for j=2:n xi(1,j)=-2*(psi(2,j)-psi(1,j)+dh)/dh^2; xi(n+1,j)=-2*(psi(n,j)-psi(n+1,j))/dh^2; end for i=2:n for j=2:n u(i,j)=(psi(i,j+1)-psi(i,j-1))/(2*dh); v(i,j)=-((psi(i+1,j)-psi(i-1,j))/(2*dh)); err1=(psi(i+1,j)+psi(i-1,j)+psi(i,j+1)+psi(i,j-1)+xi(i,j)*dh^2)/4-psi(i,j); psi(i,j)=psi(i,j)+rho*err1; err2=(xi(i+1,j)+xi(i-1,j)+xi(i,j+1)+xi(i,j-1))/4 ... -Re*dh*(u(i,j)*(xi(i+1,j)-xi(i-1,j))+v(i,j)*(xi(i,j+1)-xi(i,j-1)))/8-xi(i,j); xi(i,j)=xi(i,j)+rho*err2; temp=max(abs(err1),abs(err2)); if err<temp err=temp; end end end if err<1e-6 break;endend kerrrho%psicontour(psi,100);
算法详细请查看张德良《计算流体力学教程》,尤其是要关注到边界及角部的涡量计算设定。
我用javascript写了类似的程序,并用js做了后处理,流场结果如下,Contour就是流函数,而流函数的等值线就是流线:
涡量:
X方向速度:
Y方向速度:
感兴趣的读者可以自行实现程序开发(正文完)
本文分享自 传输过程数值模拟学习笔记 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!