COMSOL公司是全球多物理場(chǎng)建模與仿真解決方案的提倡者和領(lǐng)導(dǎo)者,其旗艦產(chǎn)品COMSOL Multiphysics,使工程師和科學(xué)家們可以通過模擬,賦予設(shè)計(jì)理念以生命。它有無與倫比的能力,使所有的物理現(xiàn)象可以在計(jì)算機(jī)上完美重現(xiàn)。COMSOL的用戶利用它提高了手機(jī)的接收性能,利用它改進(jìn)醫(yī)療設(shè)備的性能并提供更準(zhǔn)確的診斷,利用它使汽車和飛機(jī)變得更加安全和節(jié)能,利用它尋找新能源,利用它探索宇宙,甚至利用它去培養(yǎng)下一代的科學(xué)家。
Multiphysics翻譯為多物理場(chǎng),因此這個(gè)軟件的優(yōu)勢(shì)就在于多物理場(chǎng)耦合方面。多物理場(chǎng)的本質(zhì)就是偏微分方程組(PDEs),所以只要是可以用偏微分方程組描述的物理現(xiàn)象,COMSOL Multiphysics都能夠很好的計(jì)算、模擬、仿真。
COMSOL Multiphysics是一款大型的高級(jí)數(shù)值仿真軟件。廣泛應(yīng)用于各個(gè)領(lǐng)域的科學(xué)研究以及工程計(jì)算,模擬科學(xué)和工程領(lǐng)域的各種物理過程。
COMSOL Multiphysics是以有限元法為基礎(chǔ),通過求解偏微分方程(單場(chǎng))或偏微分方程組(多場(chǎng))來實(shí)現(xiàn)真實(shí)物理現(xiàn)象的仿真,用數(shù)學(xué)方法求解真實(shí)世界的物理現(xiàn)象。
大量預(yù)定義的物理應(yīng)用模式,范圍涵蓋從流體流動(dòng)、熱傳導(dǎo)、到結(jié)構(gòu)力學(xué)、電磁分析等多種物理場(chǎng),用戶可以快速的建立模型。COMSOL中定義模型非常靈活,材料屬性、源項(xiàng)、以及邊界條件等可以是常數(shù)、任意變量的函數(shù)、邏輯表達(dá)式、或者直接是一個(gè)代表實(shí)測(cè)數(shù)據(jù)的插值函數(shù)等。
預(yù)定義的多物理場(chǎng)應(yīng)用模式, 能夠解決許多常見的物理問題。同時(shí),用戶也可以自主選擇需要的物理場(chǎng)并定義他們之間的相互關(guān)系。當(dāng)然,用戶也可以輸入自己的偏微分方程(PDEs),并指定它與其它方程或物理之間的關(guān)系。
COMSOL Multiphysics力圖滿足用戶仿真模擬的所有需求,成為用戶的首選仿真工具。它具有用途廣泛、靈活、易用的特性,比其它有限元分析軟件強(qiáng)大之處在于,利用附加的功能模塊,軟件功能可以很容易進(jìn)行擴(kuò)展。
COMSOL的磁場(chǎng)仿真分析
真空中的平面電磁波
電磁場(chǎng)若要符合麥克斯韋方程,則該電磁場(chǎng)的場(chǎng)矢量E和B之間必存在某種聯(lián)系,且電場(chǎng)可以脫離電荷和電流單獨(dú)存在,并以有限的速度在空間傳播。現(xiàn)在我們從麥克斯韋方程出發(fā),從理論上分析存在于真空中的電磁場(chǎng)所具有的性質(zhì)。
我們討論不存在實(shí)物的真空,從t=0時(shí)刻起,該空間不存在傳導(dǎo)電流。沒有電荷流動(dòng)意味著該空間或無電荷分布和電荷分布不隨時(shí)間變化。不隨時(shí)間變化的電荷產(chǎn)生的是靜態(tài)電場(chǎng),而在這里我們不研究靜態(tài)場(chǎng),故不妨假設(shè)電荷和電流都不存在,這樣的空間稱為自由空間。因自由空間中
其中(1)表示自由空間中的電場(chǎng)是無源場(chǎng),電場(chǎng)線是無頭無尾的閉合曲線,或是從無限遠(yuǎn)處來,延伸到無限遠(yuǎn)去的曲線。(2)表示自由空間的磁場(chǎng)仍是無源場(chǎng),磁場(chǎng)的磁感應(yīng)線仍是無頭無尾的閉合曲線。(3)表示自由空間的電場(chǎng)是有旋場(chǎng),變化的磁場(chǎng)是渦旋的中心,在磁感強(qiáng)度變化的地方,周圍有閉合的電場(chǎng)線。(4)表示自由空間中的磁場(chǎng)是有旋場(chǎng),只有變化的電場(chǎng)才是磁場(chǎng)的漩渦中心,在電場(chǎng)強(qiáng)度變化的地方,周圍存在閉合的磁感應(yīng)線。
我們不難從這四個(gè)積分式子中得到他們的微分形式
可以看出電矢量和磁矢量滿足的方程式具有相同的形式,式中的常量是恒正的,我們用另一個(gè)恒量表示之,令
上面兩個(gè)式子式沿z方向傳播的簡(jiǎn)諧波。?和k是兩個(gè)常量,不能完全任意,它們的值必須保持這兩個(gè)列簡(jiǎn)諧波是波動(dòng)方程的解,E?和B?是電場(chǎng)波與磁場(chǎng)波的初相位。
二、 通過GUIDE進(jìn)行仿真
使用GUIDE畫出(14)(15)式的解析解的動(dòng)畫圖形、解析解的瀑布圖形和數(shù)值解的圖形,(16)(17)
式的沿z方向傳播的簡(jiǎn)諧平面電磁波。
打開GUIDE的設(shè)計(jì)窗口,在GUIDE的設(shè)計(jì)窗口中畫一個(gè)坐標(biāo)軸,三個(gè)單選按鈕,四個(gè)靜態(tài)文本框,三個(gè)編輯框和一個(gè)按鈕。并對(duì)這些進(jìn)行相應(yīng)的屬性設(shè)置,如圖4所示是一個(gè)已經(jīng)做好的fig文件。
在編程之前必須對(duì)三個(gè)單選按鈕進(jìn)行如下編程
function radiobutton1_Callback(hObject, eventdata, handles)
set(handles.radiobutton1,‘value’,1);
set(handles.radiobutton2,‘value’,0);
set(handles.radiobutton3,‘value’,0);
function radiobutton2_Callback(hObject, eventdata, handles)
set(handles.radiobutton1,‘value’,0);
set(handles.radiobutton2,‘value’,1);
set(handles.radiobutton3,‘value’,0);
function radiobutton3_Callback(hObject, eventdata, handles)
set(handles.radiobutton1,‘value’,0);
set(handles.radiobutton2,‘value’,0);
set(handles.radiobutton3,‘value’,1);
這樣可以使單選按鈕選中其中的一個(gè),其他的按鈕不起作用。
因?yàn)槌绦蛑杏腥壮绦?,每一個(gè)按鈕對(duì)應(yīng)著一套程序。選中一個(gè)按鈕只有一套程序起作用。這樣通過一個(gè)if…elseif…else來完成這項(xiàng)任務(wù)。
1、解析解的動(dòng)畫圖形
我們可以看出(14)和(15)式在形式上是一樣的,只不過是方向不一樣,電矢量E和磁矢量B相互垂直。它們都與弦震動(dòng)方程
可以用動(dòng)畫來表現(xiàn)這個(gè)解,下面是一段由上式編寫的程序。
clear
a=1;l=1;
A=0.01;w=6;
x=0:0.5:1;
t=0:0.001:4.3;
[X,T]=meshgrid(x,t);
u0=A*si
n(w*X./a).*sin(w.*T)/sin(w*l/a); u=0;
for n = 1:100;
uu=(-1)^(n+1)*sin(n*pi*X/l).*sin(n*pi*a*T/l)/(w*w/a/a-n*n*pi*pi/l/l);
u=u+uu; end
u=u0+2*A*w/a/l.*u; figure(1)
axis([0,1,-0.05,0.05])
h=plot(x,u(1,:),‘linewidth’,3);
set(h,‘erasemode’,‘xor’);
for j=2:length(t);
set(h,‘ydata’,u(j,:));
axis([0,1,- 0.05,0.05])
drawnow end figure(2)
waterfall(X(1:50:3000,:),T(1:50:3000,:),u(1:50:3000,:))
xlabel(‘x’)
ylabel(‘t’)
圖1是動(dòng)畫中的一幅畫面,可以看出,固定端一直保持不動(dòng),而作諧振動(dòng)的端使弦也產(chǎn)生了一種在傳播的振動(dòng)。這相當(dāng)于將一根繩的一端固定,而周期性的擺動(dòng)另一端時(shí),在繩上所產(chǎn)生的運(yùn)動(dòng)。[3]
2、數(shù)值解的圖形
我們?cè)儆梦⒎址匠坦ぞ呦淝蠼馍厦娴膯栴}。我們用二維圖形來表示一維的弦,讓弦的側(cè)面不受力,左端固定,右端作受迫振動(dòng)。
在Options/Axes limits下選擇x軸范圍為0~1,y軸范圍為0~1.以原點(diǎn)為頂點(diǎn)畫一個(gè)場(chǎng)為1寬為0.4的矩形,矩形的頂點(diǎn)為(0,0),(1,0),(1,0.4),(0,0.4)。
按照題意,矩形的右邊界是齊次的狄里克利邊界條件,可取h=1,r=0,左邊界是非齊次的狄里克利邊界條件,可取h=1,r=0.01*sin(6*t),上下邊界則取齊次的諾依曼邊界條件,即g=0,q=0。
方程的設(shè)置是hyperbolic型,系數(shù)是c=1,a=0,f=0,d=1. 為了有足夠的精度,初始化的網(wǎng)格要再作兩次細(xì)分。
在解方程的參數(shù)設(shè)置對(duì)話框Solve Parameters中,各項(xiàng)選擇如下:在Plot type下,選Color和Height(3-D Plot),在Property下,對(duì)應(yīng)的位置中都選User entry,在User entry下,再在相應(yīng)的位置都輸入10*u,這樣做的目的是,弦的振幅太小,為了達(dá)到更好的顯示效果,所以將振幅放大10倍來畫圖。所得的圖形如
3、沿z方向傳播的簡(jiǎn)諧平面電磁波
通過(16)(17)式進(jìn)行如下編程
a = str2double (get(handles.t, ‘string’));
for t=1:a;
v=2;
w= str2double (get(handles.w, ‘string’));
k=0:1:40;
y=sin(w*(t-k/v));
x=zeros(1,41);
z=k stem3(z,x,y,‘r’);
hold on x=sin(w*(t-k/v));
y=zeros(1,41);
z=k;
stem3(z,x,y,‘b’,‘filled’);
view(-37.50,30);
hold off w1=moviein(a);
w1(:,t)=getframe;
xlabel(‘t’);
ylabel(‘E’);
zlabel(‘B’);
title(‘沿Z方向傳播的簡(jiǎn)諧平面電磁波’)
end
這時(shí)可以得到function pushbutton1_Callback(hObject, eventdata, handles)下面的程序
if (findobj(‘tag’,‘radiobutton1’,‘value’,1));
a=1;
l=1;
A= str2double (get(handles.b, ‘string’));
w= str2double (get(handles.w, ‘string’));;
x=0:0.5:1; t=0:0.001:4.3;
[X,T]=meshgrid(x,t);
u0=A*sin(w*X./a).*sin(w.*T)/sin(w*l/a);
u=0;
for n = 1:100;
uu=(-1)^(n+1)*sin(n*pi*X/l).*sin(n*pi*a*T/l)/(w*w/a/a-n*n*pi*pi/l/l);
u=u+uu; end
u=u0+2*A*w/a/l.*u; figure(1)
axis([0,1,-0.05,0.05])
h=plot(x,u(1,:),‘linewidth’,3);
set(h,‘erasemode’,‘xor’);
for j=2:length(t);
set(h,‘ydata’,u(j,:));
axis([0,1,- 0.05,0.05]) drawnow end figure(2)
waterfall(X(1:50:3000,:),T(1:50:3000,:),u(1:50:3000,:))
xlabel(‘x’)
ylabel(‘t’)
elseif (findobj(‘tag’,‘radiobutton2’,‘value’,1));
% function pdemodel
[pde_fig,ax]=pdeinit;
pdetool(‘a(chǎn)ppl_cb’,1);
set(ax,‘DataAspectRatio’,[1 1.5 1]);
set(ax,‘PlotBoxAspectRatio’,[1 0.66666666666666663 2]);
set(ax,‘XLim’,[0 1]); set(ax,‘YLim’,[0 1]);
set(ax,‘XTickMode’,‘a(chǎn)uto’);
set(ax,‘YTickMode’,‘a(chǎn)uto’);
% Geometry description:
pderect([0 1 0.40000000000000002 0],‘R1’);
set(findobj(get(pde_fig,‘Children’),‘Tag’,‘PDEEval’),‘String’,‘R1’)
% Boundary conditions:
pdetool(‘changemode’,0)
pdesetbd(4,。。。
‘dir’,。。。
1,。。。
‘1’,。。。
‘0.01*sin(6*t)’)
pdesetbd(3,。。。
‘neu’,。。。
1,。。。
‘0’,。。。
‘0’)
pdesetbd(2,。。。 ‘dir’,。。。 1,。。。 ‘1’,。。。 ‘0’)
pdesetbd(1,。。。 ‘neu’,。。。 1,。。。 ‘0’,。。。 ‘0’)
% Mesh generation:
setuprop(pde_fig,‘Hgrad’,1.3);
setuprop(pde_fig,‘refinemethod’,‘regular’); pdetool(‘initmesh’) pdetool(‘refine’) pdetool(‘refine’) % PDE coefficients: pdeseteq(3,。。。 ‘1.0’,。。。 ‘0.0’,。。。 ‘0.0’,。。。 ‘1.0’,。。。 ‘0:0.1:1.5’,。。。 ‘0.0’,。。。 ‘0.0’,。。。 ‘[0 100]’)
setuprop(pde_fig,‘currparam’,。。。 [‘1.0’;。。。 ‘0.0’;。。。 ‘0.0’;。。。 ‘1.0’])
% Solve parameters:
setuprop(pde_fig,‘solveparam’,。。. str2mat(‘0’,‘3168’,‘10’,‘pdeadworst’,。。. ‘0.5’,‘longest’,‘0’,‘1E-4’,‘’,‘fixed’,‘Inf’)) % Plotflags and user data strings:
setuprop(pde_fig,‘plotflags’,[1 1 4 1 1 1 1 1 0 0 1 16 1 0 1 0 0 1]); setuprop(pde_fig,‘colstring’,‘’); setuprop(pde_fig,‘arrowstring’,‘’); setuprop(pde_fig,‘deformstring’,‘’); setuprop(pde_fig,‘heightstring’,‘10*u’); % Solve PDE: pdetool(‘solve’)
else (findobj(‘tag’,‘radiobutton3’,‘value’,1)); a = str2double (get(handles.t, ‘string’)); for t=1:a; v=2;
w= str2double (get(handles.w, ‘string’)); k=0:1:40; y=sin(w*(t-k/v)); x=zeros(1,41); z=k stem3(z,x,y,‘r’); hold on x=sin(w*(t-k/v)); y=zeros(1,41); z=k;
stem3(z,x,y,‘b’,‘filled’); view(-37.50,30); hold off w1=moviein(a); w1(:,t)=getframe; xlabel(‘t’); ylabel(‘E’); zlabel(‘B’);
title(‘沿Z方向傳播的簡(jiǎn)諧平面電磁波’) end
end grid on
通過運(yùn)行GUIDE就會(huì)得道圖1、圖2、圖3和圖4.
三、 結(jié)論
MATLAB有強(qiáng)大的求解偏微分方程和可視化功能模擬各類物理場(chǎng)的實(shí)驗(yàn)是成功的。借助偏微分方程工具箱,可以通過分析靜電學(xué)、電場(chǎng)、磁場(chǎng)和電磁場(chǎng)的原理而建立微分方程,經(jīng)過數(shù)值計(jì)算模擬各類電磁場(chǎng)問題。使問題更加形象逼真。 利用這些特性及GUI 功能可以實(shí)現(xiàn)交互式數(shù)據(jù)處理。圖形用戶界面的設(shè)計(jì)確定了應(yīng)用程序的主要框架和基本功能,完成了窗口、圖標(biāo)、按鈕等用戶界面,軟件開發(fā)者只需在由軟件發(fā)工具自動(dòng)生成的程序代碼中添加自己的運(yùn)算或控制代碼,就可以完成自己的設(shè)計(jì)。
-
電磁場(chǎng)
+關(guān)注
關(guān)注
0文章
791瀏覽量
47267 -
COMSOL
+關(guān)注
關(guān)注
34文章
93瀏覽量
55724
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論