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

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск

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

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

Группа: 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)


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