【DDSCAT——离散偶极近似仿真程序13】ParaView可视化工具的使用及其与Vislt的对比
此篇我们介绍一下另一款简洁好用轻量级的vtr可视化工具,ParaView。
先来看下本篇所使用的模型,已用ParaView可视化呈现出。
Matlab代码如下:
clear;
clc;
%%
d=0.001;
r=0.019;% small sphere radius
%%%%position of sphere5
x_c=0; % center
y_c=0;
z_c=0;
%%%%%%%%%%%%%%
v=4*pi*(r^3)/3; %%%%%%% one sphere
aeff=(v*3/4/pi)^(1/3);
nxmin=-round(r/d);
nxmax=round(r/d);
nymin=-round(r/d);
nymax=round(r/d);
nzmin=-round(r/d);
nzmax=round(r/d);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nat=0;
for jz=nzmin:nzmax
for jy=nymin:nymax
for jx=nxmin:nxmax
x=jx*d;
y=jy*d;
z=jz*d;
distance_2=(x-x_c)^2+(y-y_c)^2+(z-z_c)^2;
distance=distance_2^0.5;
if distance<0.012 % 内核
nat=nat+1;
ixyz(nat,1)=jx;
ixyz(nat,2)=jy;
ixyz(nat,3)=jz;
ixyz(nat,4)=1;
ixyz(nat,5)=1;
ixyz(nat,6)=1;
end
if (0.012<=distance)&&(distance<=0.018) % 中间壳层
nat=nat+1;
ixyz(nat,1)=jx;
ixyz(nat,2)=jy;
ixyz(nat,3)=jz;
ixyz(nat,4)=2;
ixyz(nat,5)=2;
ixyz(nat,6)=2;
end
if (0.018<distance)&&(distance<=0.019) % 外部壳层,被分割为八块
if x>=-0.001 && x<=0.001 || y>=-0.001 && y<=0.001 || z>=-0.001 && z<=0.001
% 这里什么操作都不做
else % 相当于!(x>=-0.001 && x<=0.001 || y>=-0.001 && y<=0.001 || z>=-0.001 && z<=0.001)
nat=nat+1;
ixyz(nat,1)=jx;
ixyz(nat,2)=jy;
ixyz(nat,3)=jz;
ixyz(nat,4)=3;
ixyz(nat,5)=3;
ixyz(nat,6)=3;
end
end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% x0=ixyz(:,1);
% y0=ixyz(:,2);
% z0=ixyz(:,3);
%
% scatter3(x0,y0,z0);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
shape=fopen('CSDN_Split_shell.dat','w');
for natnumber=1:nat
fprintf(shape,'%4i',natnumber,ixyz(natnumber,1),ixyz(natnumber,2),ixyz(natnumber,3),ixyz(natnumber,4),ixyz(natnumber,5),ixyz(natnumber,6));
fprintf(shape,'\n');
end
fclose(shape);
一、使用ParaView的contour过滤器呈现模型轮廓
1)第一步打开文件
2)点击Apply
Apply按钮就相当于Vislt中的Draw。但我们此时看到什么都没呈现出,只有一个立方体边框。这是正常现象,因为我们还没有给模型添加可呈现的形式和效果。下图中的Outline也可改变为别的呈现形式,不过此时呈现的都是整个囊括模型的立方体的结构,而不是立方体范围内的模型。
3)添加过滤器。
3D模型是立体的,且不透明,因此,想要看到内部构造,我们就需要像Vislt一样,添加一些伪彩和切面。但ParaView没有伪彩,但有别的方式来呈现,即直接添加一些切面过滤器呈现。
如下图,我们选择添加Contour轮廓过滤器,先看下模型的轮廓。若想执行此操作,必须先鼠标点击选中VTRoutput_1.vtr,即先选中我们想要添加过滤器的模型,这是因为一切的操作都是建立在模型上的。
4)对contour执行Apply操作。
因为VTRoutput_1.vtr是近场计算后的结果,因此改文件包含了Composition和Intensity两项数据。但查看轮廓时,我们一般只看Composition,因为对于消光响应后的Intensity,如果看轮廓的话,是一个不成形的结构,大家可以自行尝试Intensity的效果。
5)对contour添加clip过滤器,并对后者执行Apply。
注意,此时添加的clip必须对contour添加,而不能对VTRoutput_1.vtr添加,因为两种结果会完全不一样。对添加好的clip进行Apply之后,适当旋转模型,我们就能看到模型内部。因为我设计的是一个11 18 19的核/壳/壳结构,且最外层的壳是均分为八块的形式,因此,此时可以看到内部半径为11的球的轮廓,而由于最外层壳太薄,导致第二层和第三层壳的轮廓融合在了一起。
二、使用ParaView的clip过滤器呈现模型电场强度
1)在VTRoutput_1.vtr的基础上直接添加clip过滤器,并对clip执行Apply。
此时,依然看到只有模型范围立方体的被切割了一半的框架,但是别着急,继续往下看。
2)将clip中的Coloring属性改为Intensity,并Apply。
将Coloring属性改为Intensity,可呈现当前切面处的电场强度分布。当然,这个切面是可以移动旋转的,大家可以自行尝试。
若将Coloring改为Composition,亦可以看模型的构成分布情况。
此时,模型中只看到了两种颜色,这是因为对于最外层的壳,我的Matlab代码设置了近似于在xy、xz、yz平面处的偶极子点不存在,即最外层被均分成了八份。因此,在这个切面处,我们只能看到模型的两种成分。
但是,我们刚刚说过,这个切面是可以调整方向的。接下来,看一下调整了方向的切面呈现出的模型三种构成。
此时,模型切面处,出现了三种颜色,对应于三种构成材料。
三、利用Glyph过滤器表现偶极子点的存在,及a^1和a^2向量的添加
这里,我们打算对此篇中的三重模型进行一种凸显由偶极子构成的模型的可视化呈现,就像下图这样。
为了达到对此模型不同层次不同材料的呈现,我们需要将模型的核/壳/壳三部分拆解开进行呈现。这首先需要使用Matlab重新分开生成三部分的shape文件。
1)对innerShell添加Contour,再添加Gylph,并依次Apply。
首先,对innerShell.pvd添加了Contour并Apply之后,直接继续对Contour添加Gylph过滤器,并Apply。此时,我们看到模型是,在球体轮廓之上有一些箭头。接下来,需要对Gylph的Properties进行修改:
首先,将Glyph的类型改为Sphere,即将箭头改为球体,并将球体的Radius半径改为0.2。此操作的意义为,用球体表现模型的轮廓。
接着,将Mask Points,Random Mode,Keep Random Points这些选项都去掉。
最后,点击Apply之后,同时将innerShell的Contour过滤器的可见性关掉,则可看到下图。
对于球体颜色的设定,也在Properties中。
2)对midShell进行同样的操作,并将Radius设置为0.1。
3)对ShellOnly进行同样的操作,并将Radius设置为0.1。
4)添加a^1向量。
首先,先将我们的a^1和a^2的pvd文件添加进来。不知道大家是否注意到每次执行完近场计算,都会产生两个文件名中包含a1a2的文件,现在我们知道了,他们是用来可视化向量a^1和a^2的。
接着,直接对a1a2.pvd添加Glyph过滤器,并进行一系列的参数设定,Apply之后,如下图所示。
5)添加a^2向量,需要再次打开a1a2.pvd文件,并将Properties中的Vectors改为a2。
这样一来,我们就将模型以偶极子点的形式呈现出来了,并且此模型带有a^1和a^2两个正交向量。
四、ParaView与Vislt的对比
1)都可以添加Contour轮廓效果。
我们先用Contour做个示例,来开始ParaView和Vislt的对比。
2)都可添加一些Selection/Filters,都可添加Silice。
3)所有选项及功能对比。
关于这两个可视化软件更多的功能使用,大家可自行探索。
对于ParaView的使用,也基本都借鉴于User Guide用户使用手册中所述步骤。