Скачиваний:
132
Добавлен:
12.12.2021
Размер:
17.58 Кб
Скачать
# Задание №2

import math

предпоследняя_цифра = 0
последняя_цифра = 0

обеспеченность_противогазами_на_открытой_местности = [75, 75, 60, 65, 55, 75, 65, 45, 55, 60][последняя_цифра]
обеспеченность_противогазами_на_предприятии = 100
число_жителей_в_поселке = [350, 350, 450, 550, 400, 500, 600, 400, 550, 450][последняя_цифра]
число_работающих_в_смене = [60, 50, 55, 70, 50, 45, 75, 55, 60, 55][последняя_цифра]
print(f'Число жителей в поселке: {число_жителей_в_поселке}')
print(f'Число работающих в смене: {число_работающих_в_смене}')
print(f'Обеспеченность противогазами на открытой местности: {обеспеченность_противогазами_на_открытой_местности}%')
print(f'Обеспеченность противогазами в укрытиях: {обеспеченность_противогазами_на_предприятии}%')

# размер_клетки_в_пикселях = [104, 108, 100, 101, 103, 104, 101, 100, 102, 105][последняя_цифра]
# расстояние_от_СДЯВ_до_СУС_в_пикселях = [360, 355, 354, 286, 295, 296, 345, 343, 340, 354][последняя_цифра]
# R3 = расстояние_от_СДЯВ_до_СУС_в_м = расстояние_от_СДЯВ_до_СУС_в_пикселях * 1000 / размер_клетки_в_пикселях
R3 = [3.42, 3.33, 3.51, 2.82, 3.49, 2.9, 3.48, 3.39, 3.35, 3.49][последняя_цифра] * 1000
print(f'R3 (расстояние от СДЯВ до СУС) = {R3:.6g} м')

# Химическое загрязнение местности
химическое_загрязнение_местности = 'хлор' if str(предпоследняя_цифра) in '16' else \
'аммиак' if str(предпоследняя_цифра) in '27' else \
'фосген' if str(предпоследняя_цифра) in '38' else \
'сероводород' if str(предпоследняя_цифра) in '49' else \
'сернистый ангидрид'
степень_загрязнения_местности = ([70, 100, 70, 85, 75, 90, 80, 60, 80, 100] if str(предпоследняя_цифра) in '16' else
[120, 60, 80, 70, 90, 75, 85, 100, 65, 75] if str(предпоследняя_цифра) in '27' else
[80, 70, 100, 80, 60, 85, 70, 75, 85, 65] if str(предпоследняя_цифра) in '38' else
[75, 85, 75, 90, 85, 60, 80, 100, 70, 65] if str(предпоследняя_цифра) in '49' else
[80, 75, 70, 60, 80, 100, 65, 85, 90, 70])[последняя_цифра] # т
удельная_плотность = [1.56, 1.42, 0.68, 1.46, 0.98][
['хлор', 'фосген', 'аммиак', 'сернистый ангидрид', 'сероводород'].index(химическое_загрязнение_местности)] # т/м^3
способ_хранения_СДЯВ_в_емкостях = ['обв', 'н/об', 'обв', 'н/об', 'н/об', 'н/об', 'н/об', 'н/об', 'обв', 'н/об'][
последняя_цифра]
скорость_ветра_в_приземном_слое = [4, 2, 3, 3, 2, 4, 3, 4, 2, 3][последняя_цифра] # м/с

print(f'Химическое загрязнение местности: {химическое_загрязнение_местности} ({удельная_плотность:.6g} т/м^3)')
print(f'Степень загрязнения местности: {степень_загрязнения_местности:.6g} т')
print(f'Способ хранения СДЯВ в емкостях: {способ_хранения_СДЯВ_в_емкостях}')
print(f'Скорость ветра в приземном слое: {скорость_ветра_в_приземном_слое:.6g} м/с', end='\n\n')
if способ_хранения_СДЯВ_в_емкостях == 'обв':
d_min, d_max = 0.45, 0.5
print(f'Толщина слоя разлива ОВ (d): от {d_min:.6g} до {d_max:.6g} м')
S_min = степень_загрязнения_местности / (удельная_плотность * d_max)
S_max = степень_загрязнения_местности / (удельная_плотность * d_min)
print(f'Площадь разлива вещества \"{химическое_загрязнение_местности}\": от {S_min:.6g} до {S_max:.6g} м^2')
r_p_min = (S_min / math.pi) ** 0.5
r_p_max = (S_max / math.pi) ** 0.5
L_and_b_min = 2 * r_p_min
L_and_b_max = 2 * r_p_max
print(f'Радиус окружности разлива вещества r_p: от {r_p_min:.6g} до {r_p_max:.6g} м')
print(f'Длина L и ширина b зоны вылива: от {L_and_b_min:.6g} до {L_and_b_max:.6g} м')
else:
d = 0.05
print(f'Толщина слоя разлива ОВ (d) = {d:.6g} м')
S = степень_загрязнения_местности / (удельная_плотность * d)
print(f'Площадь разлива вещества \"{химическое_загрязнение_местности}\" = {S:.6g} м^2')
r_p = (S / math.pi) ** 0.5
print(f'Радиус окружности разлива вещества r_p = {r_p:.6g} м')
print(f'Длина L и ширина b зоны вылива = {2 * r_p:.6g} м')

столбцы_кол_во_АХОВ_в_емкости = [25, 50, 75, 100, 150] # т
глубина_распространения_облака_при_изотермии_необв_1мвс = {
'хлор': [11.5, 16., 19., 21., 25.],
'фосген': [11.5, 16., 19., 21., 25.],
'аммиак': [1.3, 1.9, 2.4, 3.0, 3.8],
'сернистый ангидрид': [1.4, 2., 2.5, 3.5, 4.5],
'сероводород': [2.5, 4., 5., 8.8, 10.2]}[химическое_загрязнение_местности]


def linear_interpolation(xs, ys, x_inp):
xs, ys = zip(*sorted(zip(xs, ys)))
for i, (x, y, nxt_x, nxt_y) in enumerate(zip(xs, ys, xs[1:], ys[1:])):
if x <= x_inp <= nxt_x:
return y + (x_inp - x) * (nxt_y - y) / (nxt_x - x)


def lower_bound_pseudo_interpolation(xs, ys, x_inp):
xs, ys = zip(*sorted(zip(xs, ys)))
for i, (x, y, nxt_x, nxt_y) in enumerate(zip(xs, ys, xs[1:], ys[1:])):
if x <= x_inp <= nxt_x:
return y if x_inp != nxt_x else nxt_y


def find_integer_proportionality(value, proportionals, epsilon=1e-10):
values = [value * proportional for proportional in proportionals]
truncs = [int(value) for value in values]
fracs = [value - trunc for value, trunc in zip(values, truncs)]
int_fracs_sum = int(sum(fracs) + epsilon)
while int_fracs_sum >= 1:
idx_v = fracs.index(max(fracs))
truncs[idx_v] += 1
fracs[idx_v] = 0
int_fracs_sum -= 1
return truncs


глубина_распространения_облака_при_изотермии = linear_interpolation(столбцы_кол_во_АХОВ_в_емкости,
глубина_распространения_облака_при_изотермии_необв_1мвс,
степень_загрязнения_местности)
глубина_распространения_облака_при_инверсии = глубина_распространения_облака_при_изотермии * 5.
глубина_распространения_облака_при_конвекции = глубина_распространения_облака_при_изотермии / 5.
k_изот = linear_interpolation([1, 2, 3, 4, 5, 6], [1., 0.7, 0.55, 0.5, 0.45, 0.41], скорость_ветра_в_приземном_слое)
k_инв = linear_interpolation([1, 2, 3, 4], [1., 0.6, 0.45, 0.38], скорость_ветра_в_приземном_слое)
k_конв = linear_interpolation([1, 2, 3, 4], [1., 0.7, 0.62, 0.55], скорость_ветра_в_приземном_слое)
глубина_распространения_облака_при_изотермии *= k_изот / (1.5 if способ_хранения_СДЯВ_в_емкостях == 'обв' else 1)
глубина_распространения_облака_при_инверсии *= k_инв / (1.5 if способ_хранения_СДЯВ_в_емкостях == 'обв' else 1)
глубина_распространения_облака_при_конвекции *= k_конв / (1.5 if способ_хранения_СДЯВ_в_емкостях == 'обв' else 1)
print(f'Глубина распространения облака при изотермии Гизот = {глубина_распространения_облака_при_изотермии:.6g} км')
print(f'Глубина распространения облака при инверсии Гинв = {глубина_распространения_облака_при_инверсии:.6g} км')
print(f'Глубина распространения облака при конвекции Гконв = {глубина_распространения_облака_при_конвекции:.6g} км')
ширина_зоны_хим_заражения_при_изотермии = глубина_распространения_облака_при_изотермии * 0.15
ширина_зоны_хим_заражения_при_инверсии = глубина_распространения_облака_при_инверсии * 0.03
ширина_зоны_хим_заражения_при_конвекции = глубина_распространения_облака_при_конвекции * 0.8
print(f'Ширина зоны химического заражения при изотермии Шизот = {ширина_зоны_хим_заражения_при_изотермии:.6g} км')
print(f'Ширина зоны химического заражения при инверсии Шинв = {ширина_зоны_хим_заражения_при_инверсии:.6g} км')
print(f'Ширина зоны химического заражения при конвекции Шконв = {ширина_зоны_хим_заражения_при_конвекции:.6g} км')
ширина_зоны_хим_заражения = ширина_зоны_хим_заражения_при_изотермии\
+ ширина_зоны_хим_заражения_при_инверсии\
+ ширина_зоны_хим_заражения_при_конвекции
print(f'Ширина зоны химического заражения = {ширина_зоны_хим_заражения:.6g} км')

средняя_скорость_ветра = скорость_ветра_в_приземном_слое * (1.5 if R3 < 10000 else 2.0)
print(f'Средняя скорость ветра Vср = {средняя_скорость_ветра:.6g} м/с')
print(f'Время подхода зараженного объекта к предприятию tподх = {R3 / (60 * средняя_скорость_ветра):.6g} мин.')

время_испарения_СДЯВ = {'хлор': {'н/об': 1.3, 'обв': 22}, # ч при V_ветра=1м/с
'фосген': {'н/об': 1.4, 'обв': 23},
'аммиак': {'н/об': 1.2, 'обв': 20},
'сероводород': {'н/об': 1.0, 'обв': 19},
'сернистый ангидрид': {'н/об': 1.3, 'обв': 20}}[химическое_загрязнение_местности][способ_хранения_СДЯВ_в_емкостях]
время_поражающего_действия_ОВ = время_испарения_СДЯВ * linear_interpolation([1., 2., 3., 4., 5., 6.],
[1., 0.7, 0.55, 0.43, 0.37, 0.32],
средняя_скорость_ветра)

print(f'Время поражающего действия ОВ tисп = tпораж = {время_поражающего_действия_ОВ:.6g} ч = {время_поражающего_действия_ОВ * 60:.6g} мин')
if обеспеченность_противогазами_на_открытой_местности < 20:
n_min, n_max = 90, 100
print(f'Возможные потери людей от АХОВ на открытой местности: от {n_min} до {n_max}%')
общие_потери_по_жителям_min = math.ceil((число_жителей_в_поселке - число_работающих_в_смене) * n_min / 100)
общие_потери_по_жителям_max = math.ceil((число_жителей_в_поселке - число_работающих_в_смене) * n_max / 100)
print(f'Общие потери по жителям н.п.: от {общие_потери_по_жителям_min} до {общие_потери_по_жителям_max}')
легкая_степень_min, средняя_и_тяжелая_степень_min, смертельный_исход_min = find_integer_proportionality(общие_потери_по_жителям_min, [0.25, 0.4, 0.35])
легкая_степень_max, средняя_и_тяжелая_степень_max, смертельный_исход_max = find_integer_proportionality(общие_потери_по_жителям_max, [0.25, 0.4, 0.35])
print(f'-- поражения легкой степени: от {легкая_степень_min} до {легкая_степень_max}')
print(f'-- поражения средней и тяжелой степени: от {средняя_и_тяжелая_степень_min} до {средняя_и_тяжелая_степень_max}')
print(f'-- поражения со смертельным исходом: от {смертельный_исход_min} до {смертельный_исход_max}')
else:
возможные_потери_людей_от_АХОВ_на_открытой_местности = lower_bound_pseudo_interpolation(
[20, 30, 40, 50, 60, 70, 80, 90, 100],
[75, 65, 58, 50, 40, 35, 25, 18, 10],
обеспеченность_противогазами_на_открытой_местности)
print(f'Возможные потери людей от АХОВ на открытой местности: {возможные_потери_людей_от_АХОВ_на_открытой_местности}%')
общие_потери_по_жителям = math.ceil((число_жителей_в_поселке - число_работающих_в_смене) * возможные_потери_людей_от_АХОВ_на_открытой_местности / 100)
print(f'Общие потери по жителям н.п.: {общие_потери_по_жителям}')
легкая_степень, средняя_и_тяжелая_степень, смертельный_исход = find_integer_proportionality(общие_потери_по_жителям, [0.25, 0.4, 0.35])
print(f'-- поражения легкой степени: {легкая_степень}')
print(f'-- поражения средней и тяжелой степени: {средняя_и_тяжелая_степень}')
print(f'-- поражения со смертельным исходом: {смертельный_исход}')

возможные_потери_людей_от_АХОВ_в_укрытиях = lower_bound_pseudo_interpolation([0, 20, 30, 40, 50, 60, 70, 80, 90, 100],
[50, 40, 35, 30, 27, 22, 18, 14, 9, 4],
обеспеченность_противогазами_на_предприятии)
print(f'Возможные потери людей от АХОВ в укрытиях (работающая смена): {возможные_потери_людей_от_АХОВ_в_укрытиях}%')
общие_потери_по_работающей_смене = math.ceil(число_работающих_в_смене * возможные_потери_людей_от_АХОВ_в_укрытиях / 100)
print(f'Общие потери по работающей смене: {общие_потери_по_работающей_смене}')
легкая_степень, средняя_и_тяжелая_степень, смертельный_исход = find_integer_proportionality(общие_потери_по_работающей_смене, [0.25, 0.4, 0.35])
print(f'-- поражения легкой степени: {легкая_степень}')
print(f'-- поражения средней и тяжелой степени: {средняя_и_тяжелая_степень}')
print(f'-- поражения со смертельным исходом: {смертельный_исход}')