Для конвертации единиц измерения физических величин будем использовать пакет Pint
.
Устанавливается Pint
вводом в терминале команды
pip install pint
или для окружения Anaconda
conda install -c conda-forge pint
С помощью Pint
можно, например, складывать друг с другом сантиметры, километры, футы и получать правильный результат.
Вычислим 1000 см + 0,1 км + 10 футов.
# Импортируем класс, работающий с единицами измерения
from pint import UnitRegistry
# Создаём экземпляр класса, работающего с единицами измерения
ureg = UnitRegistry()
L = 1000 * ureg['cm'] + 0.1 * ureg['km'] + 10 * ureg['foot']
L
L.to('yd')
# Перевод в метры
L.to('m')
Для того чтобы узнать как в пакете Pint
обозначаются размерности необходимо открыть файл default_en.txt
(скачать), находящийся в каталоге, в котором установлен пакет Pint
. Расположение данного каталога можно узнать с помощью команды в терминале
pip show pint
Рассмотрим раздел файла, посвящённый давлению.
# Pressure
[pressure] = [force] / [area]
pascal = newton / meter ** 2 = Pa = Па
barye = dyne / centimeter ** 2 = Ba = barie = barad = barrie = baryd
bar = 1e5 * pascal = бар
technical_atmosphere = kilogram * g_0 / centimeter ** 2 = at = кгс_на_см2
torr = atm / 760
pound_force_per_square_inch = force_pound / inch ** 2 = psi
kip_per_square_inch = kip / inch ** 2 = ksi
millimeter_Hg = millimeter * Hg * g_0 = mmHg = mm_Hg = millimeter_Hg_0C = мм_рт_ст
centimeter_Hg = centimeter * Hg * g_0 = cmHg = cm_Hg = centimeter_Hg_0C
inch_Hg = inch * Hg * g_0 = inHg = in_Hg = inch_Hg_32F
inch_Hg_60F = inch * Hg_60F * g_0
inch_H2O_39F = inch * water_39F * g_0
inch_H2O_60F = inch * water_60F * g_0
foot_H2O = foot * water * g_0 = ftH2O = feet_H2O
centimeter_H2O = centimeter * water * g_0 = cmH2O = cm_H2O
sound_pressure_level = 20e-6 * pascal = SPL
Каждая размерность описывается одной строкой. В качестве размерности величины можно использовать любое прописанное в строке обозначение, включая формулы (правда не все - при использовании, например, '1e5 * pascal' возникает ошибка, скорее всего из-за присутствующего в формуле умножения на число). Так же можно добавлять свои обозначения, что я и сделал для pascal (добавил в конец соответствующей строки ' = Па'), bar (бар), technical_atmosphere (кгс_на_см2) и millimeter_Hg (мм_рт_ст).
# Присвоим величине p значение 101325 размерностью Па
p = 101325 * ureg['Па'] # стандартная атмосфера
# Перевод величины p в размерность кгс/см2
p.to('кгс_на_см2')
# Перевод величины p в размерность мм.рт.ст.
p.to('мм_рт_ст')
# Перевод величины p в размерность бар
p.to('бар')
Так же в файле default_en.txt
есть раздел #### PREFIXES ####
, в котором приведён перечень приставок для десятичных дольных и кратных единиц (микро, санти, кило, гига и т.п.). Их тоже можно русифицировать, добавив в конец строки знак "равно" и русское обозначение со знаком "минус" справа от него.
kilo- = 1e3 = k- = к-
mega- = 1e6 = M- = М-
giga- = 1e9 = G- = Г-
# Перевод величины p в размерность кПа
p.to('кПа')
Переведём КПД в удельный расход тепловой энергии на выработку электроэнергии (heat rate), предварительно русифицировав следующие размерности:
hour = 60 * minute = h = hr = ч
joule = newton * meter = J = Дж
watt_hour = watt * hour = Wh = watthour = Вт_ч
КПД = 0.35 * ureg[''] # КПД безразмерная величина (dimensionless)
hr = КПД.to('кДж/кВт_ч') # перевод в heat rate
hr
hr.to('') # перевод heat rate в КПД
Для извлечения из величины его значения следует обратиться к свойству объекта magnitude
p.magnitude # значение величины p
101325
type(p.magnitude) # тип значения величины p
int
type(hr.magnitude) # тип значения величины heat rate
float
Добавим в Pint
возможность переводить давление в размерность пуд-сила на квадратный аршин. Сначала нужно определить размерности пуд и аршин. Для этого в раздел #### UNIT GROUPS ####
файла default_en.txt
добавим следующие строки
@group СтарорусскаяСистемаМер
пуд = 16.3805 * kilogram
аршин = 0.7112 * meter = арш
@end
Скорее всего определение новых размерностей можно добавлять в любой раздел, но лучше придерживаться логики разработчиков. Сохраняем файл и проверяем новые единицы измерения.
ureg['пуд'].to('kg')
ureg['арш'].to('m')
Теперь в раздел # Pressure
добавим новую единицу измерения давления - пнка (пуд-сила на квадратный аршин)
пнка = пуд * g_0 / аршин ** 2
где g_0 - это ускорение, обусловленное гравитацией или ускорение свободного падения (уже определена в Pint
).
ureg['g_0'].to('m/s**2')
# Сила тяжести (вес) 1 кг
(ureg['kg'] * ureg['g_0']).to('newton')
Используемые Pint
константы приведены в файле constants_en.txt
(скачать).
# Выразим стандартную атмосферу в пнка
p.to('пнка')
Для проверки найденного значения определим давление одного пуда на квадратный аршин в Па и умножим его на значение величины p (стандартная атмосфера), выраженной в пнка. В результате должна получиться стандартная атмосфера в Па.
16.3805 * 9.80665 / 0.7112 / 0.7112 * p.to('пнка').magnitude
101325.00000000001
p # Стандартная атмосфера
Инженерные расчёты на Python, С.В. Медведев, 2020-2023
Использование Python и Jupyter Notebook для инженерных расчётов, С.В. Медведев, 2020-2023