w89986581 发表于 2007-11-20 10:48

ATV输出与读取问题

几个站友都问过这个问题,计算时几个细节如下:
1.间接边界元和直接边界元(单元类型)可以进行ATV分析,而直接边界元(节点类型)不能进行ATV分析;
2.计算ATV前必须设定场点,因为ATV的物理意义为单元单独振动时指定场点的声压响应,步骤见1,2;
3.输出ATV时,可以选择txt文件格式,读取程序如下(matlab)


%%%读取sysnoise生成的ATV文件,并转存
filename = ['D:\Sysnoise\unitsphere\ATV.txt'];   %%% Sysnoise输出的ATV文件
fid= fopen(filename,'r');
if fid == -1,    disp('Invalid datafile');    return;end
while 1,
    dataline1 = fgetl(fid);
    if ~ischar(dataline1),      fclose(fid);      break;   end;
    if isequal(dataline1, 'ATV            FREQUENCY          FIELD POINT'),      
      dataline1 = fgetl(fid);
      temp = str2num(dataline1);
      filename1 = ['C:\MATLAB6p5\work\unitsphere\ATV',num2str(temp(2)),'Hz.txt'];%%% 转存的Mat文件
      fid1= fopen(filename1,'w');
      for ii = 1:length(nodedata(:,1)),
            dataline1 = fgetl(fid);
            dataline2 = fgetl(fid);
            fprintf(fid1,'%s \n',);            
      end
      fclose(fid1);
    end      
end
%%%load读取指定频率的ATV矩阵,每个节点对应的ATV元素为:
sysnoiseATV = (ATV(:,3)+i*ATV(:,4)).*normvect(:,1)+(ATV(:,5)+i*ATV(:,6)).*normvect(:,2)+(ATV(:,7)+i*ATV(:,8)).*normvect(:,3);


其中normvect为法向量矩阵,N表示节点总数。

ningxia 发表于 2007-11-22 04:47

谢版主。

ningxia 发表于 2007-11-22 04:57

还有几个疑问, 请教版主及dlchen同学
1。ATV的格式为(Xreal,Ximag,Yreal,Yimag,Zreal,Zimag),表面速度的格式为(Xreal,Ximag,Yreal,Yimag,Zreal,Zimag),那么如何得到声压?
2。版主为何要自己算出法向ATV和法向速度?
3。版主可曾在复杂一点的模型上(除简单的板子以外)验算过ATV的可靠性?
4。版主的接口程序最后一行没看懂,可否解释一下?

w89986581 发表于 2007-11-22 09:26

回复 #3 ningxia 的帖子

1.sum(sysnoiseATV.*Vn);    其中sysnoiseATV为程序末给出的结果,Vn为每个节点法向振速。
2.计算法向ATV和法向速度的原因是由于我做的工作不是用sysnoise计算结果,只是作为参考结果而已,呵呵。
3.我验证过球的,其他复杂模型多数是没有解析解的,是无法验证的。但是可以这样说,除了局部不光滑区域,ATV的计算结果随着面元数的增大而提高。
4.实质上就是复ATV在法线方向的投影

dlchen 发表于 2007-11-27 18:01

斑竹已回答:)

heujifang 发表于 2008-3-16 22:38

太感激您的分享 太好了 解决我的燃眉之急

sizhiyuan2008 发表于 2008-4-9 13:35

非常感谢

newshopping 发表于 2012-6-14 10:44

请教一下版主,数组normvect是如何得到的呢?

benbendog 发表于 2015-2-1 18:52

newshopping 发表于 2012-6-14 10:44
请教一下版主,数组normvect是如何得到的呢?

同问,麻烦版主有时间解释下,谢谢
页: [1]
查看完整版本: ATV输出与读取问题