"Распространение тепла в кристалле со случайными перемещениями и нулевыми скоростями" — различия между версиями

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
(Результаты)
 
Строка 31: Строка 31:
  
 
2. По ансамблю реализаций: осреднение производится по определенному количеству реализаций одной и той же системы (По ансамблю можно осреднять потому, что мы считаем один и тот же процесс, основанный на генерации случайных чисел).
 
2. По ансамблю реализаций: осреднение производится по определенному количеству реализаций одной и той же системы (По ансамблю можно осреднять потому, что мы считаем один и тот же процесс, основанный на генерации случайных чисел).
 +
 +
 +
Осреднение по пространству проводится следующим образом: 𝑁 частиц делится на 100 отрезков по 𝑁/100 частиц в каждом отрезке. Для каждого отрезка
 +
находится среднее значение, которое и используется для построения графика.
 +
Для каждой системы рассматривается 𝑅 реализаций. Температура усредняется
 +
сначала по реализациям, а только потом по пространству
 +
 +
 +
  
 
Рассматривается одномерный кристалл, состоящий из 𝑁 частиц. Исследуются
 
Рассматривается одномерный кристалл, состоящий из 𝑁 частиц. Исследуются
Строка 36: Строка 45:
  
 
1) В первом случае в начальный момент времени первая половина кристалла нагрета с помощью задания случайных скоростей частиц, вторая половина находится в состоянии покоя
 
1) В первом случае в начальный момент времени первая половина кристалла нагрета с помощью задания случайных скоростей частиц, вторая половина находится в состоянии покоя
 +
 +
* Число частиц <math>10^{4}</math>, число реализаций 200
 +
[[File:chain1.gif]]
 +
 +
Распространение температуры в кристалле (по горизонтали длина кристалла, вертикали - температура)
 +
  
 
2) Во втором случае в начальный момент времени всем частицам заданно случайное перемещение, при этом у первой половины перемещения в два раза больше
 
2) Во втором случае в начальный момент времени всем частицам заданно случайное перемещение, при этом у первой половины перемещения в два раза больше
 +
 +
* Число частиц <math>10^{4}</math>, число реализаций 200
 +
[[File:chain2.gif]]
 +
 +
Распространение температуры в кристалле (по горизонтали длина кристалла, вертикали - температура)
 +
 +
 +
Сравнение двух случаев при числе частиц <math>10^{5}</math>, число реализаций 200
  
 
[[File:download.png]]
 
[[File:download.png]]
 +
<div class="mw-collapsible mw-collapsed" style="width:100%" >
 +
'''Текст программы на языке Python:''' <div class="mw-collapsible-content">
 +
<syntaxhighlight lang="python" line start="1" enclose="div">
 +
import matplotlib.pyplot as plt
 +
import numpy as np
 +
import time
 +
from numpy import pi
 +
%matplotlib inline
 +
 +
from matplotlib import cm
 +
from celluloid import Camera
 +
camera = Camera(plt.figure(figsize=(8, 8)))
 +
 +
start = time.time()
 +
Np = 10**4                # mod 100
 +
Ns = 12000                # mod 2
 +
C = 1           
 +
m = 1
 +
 +
w0 = np.sqrt(C/m)         
 +
dt = (2*pi/w0)/40
 +
 +
T = np.zeros((int(Ns/2)-1,100))
 +
def calculation(random_number):
 +
    global T
 +
    np.random.seed(random_number)
 +
    U = np.zeros((2, Np))
 +
    V = np.zeros(Np)
 +
    # first step
 +
#    V[:(Np)//2] = (np.random.random((Np)//2) * 2 - 1)
 +
#    U[1,:] = V*dt
 +
   
 +
    U[1,:Np//2] = (np.random.random(Np//2) * 2 - 1)*2*dt
 +
    U[1,Np//2:] = (np.random.random(Np//2) * 2 - 1)*dt
 +
   
 +
    # next steps
 +
    l = lambda x,y : (x[y-1] - 2*x[y]  + x[y+1])
 +
    for k in range(0,int(Ns/2)-1):
 +
        U[0,:Np-1] =  dt**2 * l( U[1],np.arange(0,Np-1) ) + 2*U[1,:Np-1] - U[0,:Np-1]
 +
        U[1,:Np-1] =  dt**2 * l( U[0],np.arange(0,Np-1) ) + 2*U[0,:Np-1] - U[1,:Np-1]
 +
        # velosity and temperature:
 +
     
 +
        V_2 = ((U[1] - U[0])/dt)**2
 +
        T[k,:] = T[k,:] +  np.mean(V_2.reshape(100,int(Np/100)), axis=1)
 +
 +
Number_of_realization = 200
 +
for i in np.random.random(Number_of_realization):
 +
    calculation(int(i*100))
 +
 +
x = np.arange(1,101)
 +
for k in range(59):
 +
    y = T[k*100,:]/(Number_of_realization)
 +
    y = y - np.mean(y[80:])
 +
    plt.plot(x, y/np.mean(y[:20]), color='blue')
 +
    camera.snap()
 +
anim = camera.animate(blit=True)
 +
anim.save('chain2.gif')
 +
 +
end = time.time()
 +
print(end-start)
 +
 +
</syntaxhighlight>
 +
</div>
 +
</div>
 +
 +
 +
=== См. также ===
 +
 +
*[[Метод динамики частиц]]
 +
*[[Механика дискретных сред]]
 +
*[[Введение в механику дискретных сред]]
 +
*[[Виртуальная лаборатория]]
 +
*[[Курсовые_работы_по_ТОМДЧ:_2012-2013| Курсовые работы 2012-2013 учебного года]]
 +
*[[Курсовые_работы_по_ТОМДЧ:_2013-2014| Курсовые работы 2013-2014 учебного года]]
 +
*[[Курсовые_работы_по_ВМДС:_2014-2015 | Курсовые работы 2014-2015 учебного года]]
 +
* [[ Курсовые_работы_по_ВМДС:_2016-2017 | Курсовые работы 2016-2017 учебного года]]
  
[[File:chain1.gif]]
 
  
[[File:chain2.gif]]
+
[[Category: Студенческие проекты]]
 +
[[Category: Механика дискретных сред]]

Текущая версия на 17:15, 23 января 2020

Курсовой проект по Механике дискретных сред

Исполнитель: Полинов Михаил

Группа: 3630103/60101

Семестр: осень 2019

Постановка задачи[править]

1) Реализовать распространение тепла в одномерном кристалле со случайными перемещениями и нулевыми скоростями в начальный момент времени

2) Сравнить с распространением тепла в одномерном кристалле со случайными скоростями и нулевыми перемещениями в начальный момент времени

Построение модели[править]

Рассмотрим одномерный кристалл: цепочку одинаковых частиц массы m, соединенных одинаковыми линейными пружинами с жесткостью C.

Уравнения динамики кристалла имеют вид:

[math] \ddot u_n = \omega_0^2 (u_{n-1} - 2u_n + u_{n+1}),\quad \omega_0 = \sqrt{\frac{C}{m}} ,[/math]

где [math] u_n [/math] - перемещение [math]n[/math]-й частицы; [math]n[/math] - индекс, принимающий произвольные целые значения, [math]C[/math] - жесткость связи между частицами, [math]m[/math] - масса частицы.

Кинетическая температура T определяется как: [math] T(x)= \frac{m}{k_{b}}\lt \ddot u_i^{2}\gt [/math]
, где [math]k_{b}[/math] — постоянная Больцмана,

Результаты[править]

При исследовании колебаний энергии в одномерных кристаллах рассматривается два метода осреднения случайных процессов:

1. По пространству: система рассчитывается для большого количества частиц, делится на 𝑛 отрезков по 𝑚 частиц, после чего находится среднее значение для каждого отрезка.

2. По ансамблю реализаций: осреднение производится по определенному количеству реализаций одной и той же системы (По ансамблю можно осреднять потому, что мы считаем один и тот же процесс, основанный на генерации случайных чисел).


Осреднение по пространству проводится следующим образом: 𝑁 частиц делится на 100 отрезков по 𝑁/100 частиц в каждом отрезке. Для каждого отрезка находится среднее значение, которое и используется для построения графика. Для каждой системы рассматривается 𝑅 реализаций. Температура усредняется сначала по реализациям, а только потом по пространству



Рассматривается одномерный кристалл, состоящий из 𝑁 частиц. Исследуются два случая:

1) В первом случае в начальный момент времени первая половина кристалла нагрета с помощью задания случайных скоростей частиц, вторая половина находится в состоянии покоя

  • Число частиц [math]10^{4}[/math], число реализаций 200

Chain1.gif

Распространение температуры в кристалле (по горизонтали длина кристалла, вертикали - температура)


2) Во втором случае в начальный момент времени всем частицам заданно случайное перемещение, при этом у первой половины перемещения в два раза больше

  • Число частиц [math]10^{4}[/math], число реализаций 200

Chain2.gif

Распространение температуры в кристалле (по горизонтали длина кристалла, вертикали - температура)


Сравнение двух случаев при числе частиц [math]10^{5}[/math], число реализаций 200

Download.png

Текст программы на языке Python:
 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 import time
 4 from numpy import pi
 5 %matplotlib inline
 6 
 7 from matplotlib import cm
 8 from celluloid import Camera
 9 camera = Camera(plt.figure(figsize=(8, 8)))
10 
11 start = time.time()
12 Np = 10**4                 # mod 100
13 Ns = 12000                # mod 2
14 C = 1             
15 m = 1
16 
17 w0 = np.sqrt(C/m)          
18 dt = (2*pi/w0)/40
19 
20 T = np.zeros((int(Ns/2)-1,100))
21 def calculation(random_number):
22     global T
23     np.random.seed(random_number)
24     U = np.zeros((2, Np))
25     V = np.zeros(Np)
26     # first step
27 #     V[:(Np)//2] = (np.random.random((Np)//2) * 2 - 1) 
28 #     U[1,:] = V*dt
29     
30     U[1,:Np//2] = (np.random.random(Np//2) * 2 - 1)*2*dt
31     U[1,Np//2:] = (np.random.random(Np//2) * 2 - 1)*dt
32     
33     # next steps
34     l = lambda x,y : (x[y-1] - 2*x[y]  + x[y+1]) 
35     for k in range(0,int(Ns/2)-1):
36         U[0,:Np-1] =  dt**2 * l( U[1],np.arange(0,Np-1) ) + 2*U[1,:Np-1] - U[0,:Np-1]
37         U[1,:Np-1] =  dt**2 * l( U[0],np.arange(0,Np-1) ) + 2*U[0,:Np-1] - U[1,:Np-1]
38         # velosity and temperature:
39        
40         V_2 = ((U[1] - U[0])/dt)**2
41         T[k,:] = T[k,:] +  np.mean(V_2.reshape(100,int(Np/100)), axis=1)
42 
43 Number_of_realization = 200
44 for i in np.random.random(Number_of_realization):
45     calculation(int(i*100))
46 
47 x = np.arange(1,101)
48 for k in range(59):
49     y = T[k*100,:]/(Number_of_realization)
50     y = y - np.mean(y[80:])
51     plt.plot(x, y/np.mean(y[:20]), color='blue')
52     camera.snap()
53 anim = camera.animate(blit=True)
54 anim.save('chain2.gif')
55 
56 end = time.time()
57 print(end-start)


См. также[править]