#! python
# -*- coding: utf-8 -*-

# Скрипт содержит функции определения температур насыщения и уставку защиты


def Tsaturation(Ps=1):
    ''' Функция определения температуры насыщения по известному давлению, МПа
    выполнена на основании документа IF97-Rev (IAPWS R7-97(2012))
    проверка условия допустимости применения функции: 611,213 Па <= p <= 22,064 МПа '''
    if Ps <= 0.000611213:
        return 0
    elif Ps >= 22.064:
        return 310.999488   # в градусах Цельсия
    else:
        # коэф-ты ряда
        n = [0.11670521452767 * (10 ** 4), -0.72421316703206 * (10 ** 6),
             -0.17073846940092 * (10 ** 2), 0.12020824702470 * (10 ** 5),
             -0.32325550322333 * (10 ** 7), 0.14915108613530 * (10 ** 2),
             -0.48232657361591 * (10 ** 4), 0.40511340542057 * (10 ** 6),
             -0.23855557567849, 0.65017534844798 * (10 ** 3)]

        # условия приведения
        T_mark = 1  # T = 1 K
        P_mark = 1  # P = 1 МПа

        # определение беты и беты в квадрате (для удобства)
        BETA = (Ps / P_mark) ** 0.25
        BBETA = BETA ** 2
        # расчёт коэф-тов для основной формулы
        E = BBETA + n[2] * BETA + n[5]
        F = n[0] * BBETA + n[3] * BETA + n[6]
        G = n[1] * BBETA + n[4] * BETA + n[7]
        D = (2 * G) / (-1 * F - (F ** 2 - 4 * E * G) ** 0.5)
        # расчёт значения темпр.насыщения
        Ts = n[9] + D - ((n[9] + D) ** 2 - 4 * (n[8] + n[9] * D)) ** 0.5
        Ts = Ts / 2.0
        # приведение температуры
        Ts = round(Ts * T_mark, 6)
        # Перевод в градусы Цельсия
        Ts = Ts - 273.15

        return Ts


def Tprotection(P):
    ''' Функция возвращает уставку защиты по острому пару
    параметр P ожидается в МПа '''
    Tz_aux = 270.0    # Мин.значение температуры
    Tz = max(Tz_aux, 14 * P + 254)
    return Tz


""" Блок тестирования
# для верификации расчёта по IF97-Rev
print(Tsaturation(0.1))
print(Tsaturation())
print(Tsaturation(10))
# для проверки исключения
print(Tsaturation(611 * 0.000001))
print(Tsaturation(22.065))
"""
