You are on page 1of 7

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ


«КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ
ІМЕНІ ІГОРЯ СІКОРСЬКОГО»

ІНСТИТУТ АТОМНОЇ ТА ТЕПЛОВОЇ ЕНЕРГЕТИКИ


КАФЕДРА ЦИФРОВИХ ТЕХНОЛОГІЙ В ЕНЕРГЕТИЦІ

Звіт з лабораторної роботи №1


з дисципліни «Високопродуктивні розподілені обчислювальні системи в
енергетичних комплексах»
на тему
«Робота на обчислювальному кластері»

Варіант №15

Виконала:
Студентка 1-го курсу магістратури
ІАТЕ
групи ТР-??мп
ПІП

Перевірив:
Свістунов Сергій Якович

Київ-2022
Завдання

Методом чисельного моделювання (згідно варіанту – модифікований метод


Ейлера) змоделювати коливання кожного тіла окремо (кількість під інтервалів не
менше 500), тобто розрахувати швидкості тіл і їх координати, а також подовження
пружин у відповідні моменти часу. За результатами моделювання побудувати
графіки залежності положень тіл від часу на одній діаграмі і графіки зміни
подовження пружин з плином часу.

Хід роботи
Код програми
import numpy as np
import matplotlib.pyplot as plt

m1 = 1.0
m2 = 1.0
k_1 = 100.0
k_2 = 100.0
x0_1 = 0.05
x0_2 = 0.15
v0_1 = 0.0
v0_2 = 0.0
L1 = 0.1
L2 = 0.1
f1 = 0.0
f2 = f1

def f(x): return np.array([x[1], ((-f1 * x[1] - k_1 * (x[0] - L1) + k_2 * (x[2] -
x[0] - L2)) / m1), x[3],
(-f2 * x[3] - k_2 * (x[2] - x[0] - L2) / m2)])

h = 0.02
t = np.arange(0, 10 + h, h)
y = np.zeros((len(t), 4))
y[0, :] = [x0_1, v0_1, x0_2, v0_2]

for i in range(0, len(t) - 1):

y[i + 1, :] = y[i, :] + (h * f(y[i, :])) / 6

result = np.zeros((len(t), 7))


result[0, :] = [t[0], x0_1, v0_1, (x0_1 - L1), x0_2, v0_2, (x0_2 - x0_1 - L2)]

for i in range(0, len(t) - 1):


result[i + 1, :] = [t[i + 1], y[i + 1, 0], y[i + 1, 1], (y[i + 1, 0] - L1), y[i
+ 1, 2], y[i + 1, 3],
(y[i + 1, 2] - y[i + 1, 0] - L2)]
np.savetxt('result.txt', result)
results = np.genfromtxt("result.txt")
np.set_printoptions(suppress=True)
np.set_printoptions(edgeitems=500)
np.set_printoptions(precision=5)

print(results)

plt.figure()
plt.plot(results[:, 0], results[:, 1], label='x1', color='blue')
plt.plot(results[:, 0], results[:, 4], label='x2', color='Purple')
plt.xlabel('time')
plt.ylabel('position')
plt.legend()
plt.xticks(np.arange(0, 10.5, 0.5))
plt.legend(loc="upper right")
plt.figure(figsize=(15, 7))
plt.plot(results[:, 0], results[:, 3], label='ΔL1', color='orange')
plt.plot(results[:, 0], results[:, 6], label='ΔL2', color='green')
plt.xlabel('time')
plt.ylabel('elongation')
plt.legend()
plt.xticks(np.arange(0, 10.5, 0.5))
plt.legend(loc="upper right")
plt.show()

На відміну від звичайного метода Ейлера в модифікованому методі Ейлера


використовується оцінка поведінки інтегральної кривої в наступних точках.
Порядок побудови рішення в модифікованому методі Ейлера полягає в
наступному.

Через точку Рi(Xi,Yi) (мал. 1) проводиться дотична А1 з тангенсом кута нахилу
f(Xi,Yi) до перетинання з ординатою в точці X=Xi + h/2. Одержуємо точку
перетинання В з координатами (Xi+h/2, Yi+h/2*Yi'). Вираховуєм тангенс кута
нахилу дотичної в цій точці: Кi=Yi'+1/2=f(Xi+h/2, Yi+h/2*Yi'). Пряма з таким
нахилом, яка проходить через точку В, позначена А2. Далі, через точку Рі(Xi,Yi)
проводимо пряму Ао, паралельну А2. Перетинання прямой Ао з ординатою Х=Хі+1 і
дае шукану точку Рі+1(Xi+1,Yi+1).

Рівняння прямої Ао можно записати:

Yi+1=Yi+Ki*(Xi+1-Xi)=Yi+h*f(Xi+h/2,Yi+h/2*Yi') (5.9)
Рисунок 1 Модифікований метод Ейлера

Перш за все, виконуваний файл і .pbs файл було розміщено на кластері за


допомогою програми pscp.exe. Команди та результати їх виконання можна побачити
на рисунку нижче.

Рисунок 2 – Команди для переміщення файлів на кластер і результат їх виконання

Далі виконано вхід на кластер (torque-edu.bitp.kiev.ua) за допомогою


авторизаційних даних. На кластері було створено директорію lab1 для програмних
файлів першої лабораторної роботи.
Розроблену програму було запущено на навчальному кластері за допомогою
пакетної обробки задач, з використанням команди qsub. Точні команди та результати
виконання можна побачити на рисунку 3.
Рисунок 3 – Процес запуску лабораторної на навчальному кластері

Результати обчислень
Після запуску команд, які зображено на рисунку 3 в консоль було виведено
результати обчислень (Рисунок 4). Оскільки точність обчислень є надзвичайно
важливою при роботі з такими маленькими числами, які вказані в індивідуальному
варіанті, було прийнято рішення ніяк не округляти результати обчислень. Через це
вивід є занадто громіздким і його початок автоматично очищається у консолі. Однак
якісь середні значення можна побачити нижче.

Рисунок 4 – Результати обчислень


Одним із завдань була побудова графіків. Ця частина завдання була успішно
виконана, а результат можна побачити на рисунках нижче.

Рисунок 5 – Графік залежності положень тіл від часу

Рисунок 6 – Графік зміни подовження пружин з плином часу


Висновки. Під час виконання цієї лабораторної роботи було розроблено програму,
яка моделює коливання кожного тіла окремо (кількість під інтервалів не менше 500),
тобто розрахувати швидкості тіл і їх координати, а також подовження пружин у
відповідні моменти часу за допомогою модифікованого методу Ейлера. За
результатами моделювання було побудувано графіки залежності положень тіл від
часу на одній діаграмі і графіки зміни подовження пружин з плином часу.
Розроблену програму було запущено на навчальному кластері за допомогою команди
qsub.

You might also like