欢迎光临散文网 会员登陆 & 注册

MATLAB三维圆球均匀绕流附加质量计算(代码自取)

2023-05-02 20:04 作者:邹散人  | 我要投稿

%%%cell_cen为cell中心的坐标,N*3的矩阵

%%%cell_s为每个cell的面积,为N维列向量

%%%%f为每个cell对应的法向量,为N*3的矩阵

%%%svd_solve_zjj为另外定义的SVD奇异值分解法函数,解病态方程组,避免奇异工作精度

clear all

close all

cell_s = xlsread("C:\Users\86182\Desktop\R0.45.csv",'A2:A345');

cell_cen = xlsread("C:\Users\86182\Desktop\R0.45.csv",'B2:D345');

f = xlsread("C:\Users\86182\Desktop\R0.45.csv",'E2:G345');

%%%%%% N为三维物面划分的cell个数

N = length(f);

u = [10,0,0];%u描述三维来流速度

U = sqrt(u(1)^2+u(2)^2+u(3)^2);

density = 1*10^3;%牛顿流体介质的密度

Rad = 0.45;

%%创建点源坐标矩阵

dy = zeros(N,3);

for i = 1:N

  dy(i,1:3) = cell_cen(i,1:3)-f(i,1:3)*sqrt(cell_s(i));%%%点源位置严重影响准确性

end

%% 右侧列向量

rhs = zeros(N,1);

for i=1:N%先固定一个i,即考察所有点源对圆上一个节点的影响

 for j=1:N

  sub = cell_cen(i,:,:)-dy(j,:,:);%第j个点源到第i个节点的相对坐标向量

  r = sqrt(sub(1)^2+sub(2)^2+sub(3)^2);

  Aij(i,j) = dot(f(i,:),sub/r^3/4/pi);%注意sub/r为一个单位向量。

  rhs(i) = -dot(u,f(i,:));%%rhs(i)向左移项,右边0即圆上Vr

 end

end

m = svd_solve_zjj(Aij,rhs);

disp('点源强度求解结束!');

disp('开始计算输出信息!');

s = zeros(N,1);%%

for i = 1:N%%%%%第i个cell

  for j = 1:N

    sub = cell_cen(i,:)-dy(j,:);%第j个点源到第i个节点的相对坐标向量

  r = sqrt(sub(1)^2+sub(2)^2+sub(3)^2);

 s(i) = s(i)+m(j)/4/pi/r*dot(u,f(i,:))*cell_s(i);

  end

end

p = 0;

for i = 1:N

  p = p+s(i);

end

M = -p/U^2*density;

disp(['数值计算附加质量为',num2str(M)])

M0 = density*2/3*pi*Rad^3;

disp(['解析附加质量为',num2str(M0)])


MATLAB三维圆球均匀绕流附加质量计算(代码自取)的评论 (共 条)

分享到微博请遵守国家法律