Tuesday, March 21, 2017

МатьЛаб ба Фортранаар долгион тархах функцыг кодлох /Matlab and Fortran coding for wave function/

МатьЛаб ба Фортранаар долгион тархах функцыг кодлох

Дараах нэг хэмжээст орон зайд давалгаа долгиолон тархах явц, түүнийг илэрхийлэх үйлдэл функцыг авч үзье.
Энд Ф бар нь долгионы үндсэн хэлбэлзлэл, ню нь унтрах замхралтын үзүүлэлт (ню>0), k  нь давалгааны долгионы тоо (долгионы урт нь лямда=2*пи/k -р тодорхойлогдоно. ) , t нь хугацаа, x орон зайн цэгц координат ба c  тархалтын хурд, тогтмол тоо юм.
(a) Нэг хэмжээстэд [0; 1] гэсэн хязгаарт жигд тархан хуваарилагдсан N тооны элемэнт бүхий хэрчим векторыг үүсгэнэ. Энэ нь бодлогын тор болно.
(b) Бодлогод 8-р томьёонд өгөгдсөн Фбар=1, k=2pi, ню=1ба c = 1 утгуудыг, цаг хугацааны хувьд t = 0 -ээс t = 5 хүртэл 0.05 завсартайгаар өгч, хугацаа бүрт үр дүнг нь дүрслэж харуулах болно (Ф- ийн эсрэг x).
(c) Давалгаа долгины уртыг 0 болгож өгөхөд юу ажиглагдаж байна гэдгийг судлана. Мөн үүнтэй адилаар ню=0.01 долгионы уртыг өгч тархалтын хурдны тогтмол тоог 0-тэй тэнцүүлж үзнэ. Хэмжигдхүүн үзүүлэлтүүдийг өөрчлөн бодолтыг давтахад юу болохыг ажиглана.
(d) Долгионы урт ба тархалтын хурдны тогтмол тоог хэвээр үлдээж давалгааны тоог өөрчилж үзнэ. Давалгааны тоо хэлбэлзлэлийн замхралтын тоотой харьцуулахад гарах үр дүнг харьцуулж харуулна. 

МатьЛаб дээр бичсэн код
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
%-----------------------------------------------------
% "Тооцон бодох шингэний механик-1", Дасгал ажил-1 – 1-р хэсэг
%
% нэг хэмжээс орон зайд давалгаа долгиолон тархах явц
%
%-----------------------------------------------------
clear all; close all;
 
% parameters input – хэмжигдхүүнүүдийг оруулна. 
% (vary the parameters to observe the difference between
%  diffusion dominated and advection dominated phenomena)
phi_0 = 1; 
nu = 0.01;
k = 2*pi;  % энэ хэмжигдхүүнийг өөрчилнө. 
c = 1;  
 
% үргэлжлэх хязгаар boundaries: x \in [xbeg,xend]
xbeg = 0;
xend = 1;
 
% number of grid points – торны цэгүүдийн тоо
N=20;
 % define a vector of uniformly spaced N grid-nodes between 
% xbeg and xend (inclusive) 
x=linspace(xbeg,xend,N);
 % time interval and time step
t_start = 0;
t_end = 5;
dt = 0.01;
 
% start the time loop
for t = t_start:dt:t_end
    phi = phi_0*exp(-nu*k^2*t)*cos(k*(x-c*t));
    plot(x,phi)
    axis([0 1 -1 1])
    xlabel('x')
    ylabel('\phi')
    title(sprintf('Propagating wave. time = %f',t))
    pause(0.01)
end 


Үр дүнд гарах зургууд:
Хугацааны хоромын дараах долгионы хэвтээ тархалт.
1 секундын дараах долгионы хэвтээ тархалт
3 секундын дараах долгионы хэвтээ тархалт
5 cекундын дараах долгионы тархалт. 

Фортран код:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
      program wavefunction
      parameter (n=20, dt=0.01, pi=3.141592)
      real phi(n)
      aphi_0=1.0
      anu=0.01
      ak=2.*pi ! энэ хэмжигдэхүүнүүдийг өөрчилнө. 
      c=1.0
      dx=1./n ! торын алхам
      atime=5.0
      iter=atime/dt

      open(10,file='data.dat')
      do i=0,iter
        a=dt*i
        do j=0,n
        ax=j*dx
        phi(j)=aphi_0*exp(-anu*ak**2*a)*cos(ak*(ax-c*a))
      if(mod(i,100).eq.0) write(10,*) j*dx, phi(j)
        end do
      end do  
      stop
      end program   

Гарсан үр дүн
Долгионы замхралт. 


Бэлтгэсэн: Багш Н.Насанбаяр +nar nasaa 

No comments:

Post a Comment