import pandas
PQn = pandas.read_excel('lab-2-3.xlsx', 't-1')
PQn.head(len(PQn))

x = PQn.values[:, 6] / 3600
y = PQn.values[:, 8]

dx = PQn.values[:, 7] / 3600
dy = PQn.values[:, 9]

xl = x[:7]
yl = y[:7]

import numpy
k, b = numpy.polyfit(xl, yl, deg=1)

grid = numpy.linspace(0.04 / 3600, 0.0001)

import matplotlib.pyplot
matplotlib.pyplot.figure(figsize=(12, 8))
matplotlib.pyplot.grid(linestyle='--')
matplotlib.pyplot.title('$\Delta P = f(Q)$', fontweight='bold')
matplotlib.pyplot.xlabel('$Q$, м³/c')
matplotlib.pyplot.ylabel('$\Delta P$, Па')
matplotlib.pyplot.scatter(x, y)
matplotlib.pyplot.plot(grid, k * grid + b)
matplotlib.pyplot.xlim((0.04 / 3600, 0.5 / 3600))
matplotlib.pyplot.ylim((20, 370))
matplotlib.pyplot.errorbar(x, y, xerr=dx / 3600, yerr=dy, fmt='o')
matplotlib.pyplot.show()

"""
Explanation: Работа 2.4. Определение вязкости воздуха по скорости течения через тонкие трубки
Цель работы: экспериментально выявить участки ламинарно-
го и турбулентного течения; определить число Рейнольдса; опре-
делить вязкость воздуха; экспериментально определить зависи-
мость расхода воздуха в трубках от радиуса.
В работе используются: металлические трубки, укрепленные
на горизонтальной подставке; газовый счетчик; микроманометр
типа ММН; стеклянная U-образная трубка; секундомер.
Параметры установки
Парам. | Значение    | Абс. п. | Описание
-------|-------------|---------|---------------------
$d_1$  | 3.85 мм     | 0.05 мм | Диаметр узкой трубки
$d_2$  | 5.85 мм     | 0.05 мм | Диаметр широкой трубки
$\rho$ | 809.5 кг/м³ |         | Плотность спирта
$L$    | 50 см       |         | Длина трубки (от четвертого до пятого клапана)
$l_2$  | 11.4 см     |         | Расстояние от первого до второго клапана
$l_3$  | 41.4 см     |         | Расстояние от первого до третьего клапана
$l_4$  | 81.4 см     |         | Расстояние от первого до четвертого клапана
$l_5$  | 131.4 см    |         | Расстояние от первого до пятого клапана
$Q_m$  | 0.02 м³/ч   |         | Минимальный рабочий расход
$Q_M$  | 0.6 м³/ч    |         | Максимальный рабочий расход
$i$    | 1.96 Па     |         | Одно деление на шкале манометра
$\rho$ | 1.2 кг/м³   |         | Плотность воздуха
Ход работы
При $Re = 1000$ ламинарное течение устанавливается на расстоянии $a = 0.2~R_1~Re = 0.1~d_1~Re = 0.385~м < 0.5~м = L$.
End of explanation
"""


k = round(k)
dk = numpy.round((((yl ** 2).mean() / (xl ** 2).mean() - (k ** 2)) / 7) ** 0.5)
print('{} ± {} Па с / м³'.format(k, dk))

"""
Explanation: Первые 7 точек укладываются на прямую, оставшиеся нет. Значит, примерно при $Q = 10^{-4}~м^3/с$ возникает турбулентность.
End of explanation
"""


R_1 = 0.00385 / 2
L = 0.5

eta = numpy.round(k * numpy.pi * (R_1 ** 4) / (8 * L), 7)
print(eta)

dR_1 = 0.0005
deta = numpy.round(eta * ((dk / k) ** 2 + (dR_1 / R_1) ** 2 ) ** 0.5 , 7)
print(deta)

"""
Explanation: $$\eta = \frac{k \pi R^4}{8L}$$
End of explanation
"""


ro = 1.2
Q = 0.0001
Re = Q * ro / (numpy.pi * R_1 * eta)
print(Re)

"""
Explanation: Значит, вязкость воздуха равна $\eta = (1.65 ± 0.44)~10^{-5}~Па~с$.
$$Re= v \frac{R\rho}{\eta} = \frac{\Delta l}{\Delta t}\frac{R\rho}{\eta}=\frac{\Delta V R \rho}{S\Delta t } = \frac{Q\rho}{\pi R \eta}$$
End of explanation
"""


PQw = pandas.read_excel('lab-2-3.xlsx', 't-2')
PQw.head(len(PQn))

x = PQw.values[:, 6] / 3600
y = PQw.values[:, 8]

dx = PQw.values[:, 7] / 3600
dy = PQw.values[:, 9]

xl = x[:10]
yl = y[:10]

k, b = numpy.polyfit(xl, yl, deg=1)

grid = numpy.linspace(0.05 / 3600, 0.00012)

import matplotlib.pyplot
matplotlib.pyplot.figure(figsize=(12, 8))
matplotlib.pyplot.grid(linestyle='--')
matplotlib.pyplot.title('$\Delta P = f(Q)$', fontweight='bold')
matplotlib.pyplot.xlabel('$Q$, м³/c')
matplotlib.pyplot.ylabel('$\Delta P$, Па')
matplotlib.pyplot.scatter(x, y)
matplotlib.pyplot.plot(grid, k * grid + b)
matplotlib.pyplot.xlim((0.05 / 3600, 0.6 / 3600))
matplotlib.pyplot.ylim((13, 71))
matplotlib.pyplot.errorbar(x, y, xerr=dx / 3600, yerr=dy, fmt='o')
matplotlib.pyplot.show()

"""
Explanation: При $Re = 1000$ ламинарное течение устанавливается на расстоянии $a = 0.2~R_2~Re = 0.1~d_2~Re = 0.585~м > 0.5~м = L$.
End of explanation
"""


k = round(k)
dk = numpy.round((((yl ** 2).mean() / (xl ** 2).mean() - (k ** 2)) / 7) ** 0.5)
print('{} ± {} Па с / м³'.format(k, dk))

k = round(k)
dk = numpy.round((((yl ** 2).mean() / (xl ** 2).mean() - (k ** 2)) / 7) ** 0.5)
print('{} ± {} Па с / м³'.format(k, dk))

R_2 = 0.00585 / 2
L = 0.5

eta = numpy.round(k * numpy.pi * (R_2 ** 4) / (8 * L), 7)
print(eta)

dR_2 = 0.0005
deta = numpy.round(eta * ((dk / k) ** 2 + (dR_2 / R_2) ** 2 ) ** 0.5 , 7)
print(deta)

"""
Explanation: Первые 7 точек укладываются на прямую, оставшиеся нет. Значит, примерно при $Q = 1.2\cdot10^{-4}~м^3/с$ возникает турбулентность.
End of explanation
"""


ro = 1.2
Q = 0.00012
Re = Q * ro / (numpy.pi * R_2 * eta)
print(Re)

PLn = pandas.read_excel('lab-2-3.xlsx', 't-3')
PLn.head(len(PLn))

x = PLn.values[:, 3] / 100
y = PLn.values[:, 4]

dy = PLn.values[:, 5]

import matplotlib.pyplot
matplotlib.pyplot.figure(figsize=(12, 8))
matplotlib.pyplot.grid(linestyle='--')
matplotlib.pyplot.title('$\Delta P = f(l)$', fontweight='bold')
matplotlib.pyplot.xlabel('$L$, м')
matplotlib.pyplot.ylabel('$\Delta P$, Па')
matplotlib.pyplot.plot(x, y)
matplotlib.pyplot.xlim((0.1, 1.35))
matplotlib.pyplot.ylim((110, 425))
matplotlib.pyplot.errorbar(x, y, yerr=dy, fmt='o')
matplotlib.pyplot.show()

PLw = pandas.read_excel('lab-2-3.xlsx', 't-4')
PLw.head(len(PLn))

x = PLw.values[:, 3] / 100
y = PLw.values[:, 4]

dy = PLw.values[:, 5]

import matplotlib.pyplot
matplotlib.pyplot.figure(figsize=(12, 8))
matplotlib.pyplot.grid(linestyle='--')
matplotlib.pyplot.title('$\Delta P = f(l)$', fontweight='bold')
matplotlib.pyplot.xlabel('$L$, м')
matplotlib.pyplot.ylabel('$\Delta P$, Па')
matplotlib.pyplot.plot(x, y)
matplotlib.pyplot.xlim((0.1, 1.35))
matplotlib.pyplot.ylim((15, 60))
matplotlib.pyplot.errorbar(x, y, yerr=dy, fmt='o')
matplotlib.pyplot.show()

"""
Explanation: Значит, вязкость воздуха равна $\eta = (1.80 ± 0.55)~10^{-5}~Па~с$.
End of explanation
"""


