此篇我們介紹一下另一款簡潔好用輕量級的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用戶使用手冊中所述步驟。