完整曲线:
% 假设阀门瞬间关闭
% 初始数据:
clear
tic
L=3000; % 管线长度
Hr=70; % 泵压力
N=10; % 分段数
NS=N+1; % 节点数
e=0.001651; % 壁厚m,0.065''
D=0.00635-2*e; % 管道内径
K=2.1e+9; % 流体体积弹性系数
Rho=1000; % 液体密度kg/m^3
E=2.1e11; % 弹性模数
G=9.806; % 重力加速度
f=0.018; % 摩擦系数
A=pi*D^2/4; % 管道横截面积
dx=L/N; % 单位长度
t_max=20; % 总计算时间
a=sqrt(K/Rho/(1+K*D/E*e)); % 波速
dt=dx/a; % 单位计算时间
k=1;
t=0;time(k)=t;
B=a/(G*A);
R=f*dx/(2*G*D*A^2);
Q0=0;
H0=0;
for j=1:NS
Q(k,j)=0; % 第一行流量
H(k,j)=0; % 第一行压头
end
H(1,1)=Hr;
while t<t_max
for j=2:N
CP=H(k,j-1)+B*Q(k,j-1)-R*Q(k,j-1)*abs(Q(k,j-1)); % +dt*Q(k,j-1)/A; % CP==C-==CR
CM=H(k,j+1)-B*Q(k,j+1)+R*Q(k,j+1)*abs(Q(k,j+1)); % -dt*Q(k,j+1)/A; % CM==C+==CL
H(k+1,j)=(CP+CM)/2; % 计算压头
Q(k+1,j)=(H(k+1,j)-CM)/(B); % 计算流量
end
% 边界值需要单独计算
CP=H(k,N)+B*Q(k,N)-R*Q(k,N)*abs(Q(k,N)); % +dt*Q(k,N)/A; % 单独计算CP
CM=H(k,2)-B*Q(k,2)+R*Q(k,2)*abs(Q(k,2)); % -dt*Q(k,2)/A; % 单独计算CM
H(k+1,1)=Hr; % 压头第一列
Q(k+1,1)=(H(k+1,1)-CM)/B; % 流量第一列数值,边界条件公式
Q(k+1,NS)=0; % 流量最后一列
H(k+1,NS)=CP; % 压头最后一列数值,边界条件公式
t=t+dt;
k=k+1;
time(k)=t;
end
toc
plot(time,H(:,N+1))
% hold on
% plot([0,t_max],[Hr,Hr],'b:') % 选取阀门处压力值绘制曲线图
% hold on
% plot([0,t_max],[0,0],'b:') % 选取阀门处压力值绘制曲线图
title('MOC-阀门处圧力曲线');
xlabel('单位:s');
ylabel('单位:m');