Kildekode for geometri

"""Funksjoner for beregning av geometriske systemdata."""

import math
import lister


[dokumentasjon]def beregn_sikksakk(sys, radius): """Beregner sikksakk og max tillat utblåsning av KL. :param System sys: Data for ledninger og utligger :param int radius: Sporkurvaturens radius :math:`[m]` :return: Sikksakkverdier ``B1`` og ``B1`` :math:`[m]`, max tillatt utblåsning ``e_max`` :math:`[m]` :rtype: :class:`float`, :class:`float`, :class:`float` """ r = radius sikksakk, e_max = 0, 0 # Systemavhengige sikksakk-verdier til input i max masteavstand. # struktur i sikksakk-ordbøker under: { "radius": [B1, B2] } i [m] # max tillatt utblåsning e_max i [m], bestemmes i indre if-setning. if sys.navn == "20A" or sys.navn == "20B": sikksakk = lister.sikksakk_20 if r <= 1000: e_max = 0.42 elif 1000 < r <= 2000: e_max = 0.42 + (r - 1000) * ((0.50 - 0.42) / (2000 - 1000)) elif 2000 < r <= 4000: e_max = 0.50 + (r - 2000) * ((0.55 - 0.50) / (4000 - 2000)) else: e_max = 0.55 elif sys.navn == "25": sikksakk = lister.sikksakk_25 if 180 <= r <= 300: e_max = 0.40 + (r - 180) * ((0.43 - 0.40) / (300 - 180)) elif 300 < r <= 600: e_max = 0.43 elif 600 < r <= 700: e_max = 0.43 + (r - 600) * ((0.44 - 0.43) / (700 - 600)) elif 700 < r <= 900: e_max = 0.44 elif 900 < r <= 1000: e_max = 0.44 + (r - 900) * ((0.45 - 0.44) / (1000 - 900)) elif 1000 < r <= 2000: e_max = 0.45 elif 2000 < r <= 3000: e_max = 0.45 + (r - 2000) * ((0.50 - 0.45) / (3000 - 2000)) else: e_max = 0.50 elif sys.navn == "35": sikksakk = lister.sikksakk_35 e_max = 0.7 B1 = sikksakk[str(r)][0] B2 = sikksakk[str(r)][1] return B1, B2, e_max
[dokumentasjon]def beregn_masteavstand(sys, radius, B1, B2, e_max, q): """Beregner max tillatt masteavstand. :param System sys: Data for ledninger og utligger :param int radius: Sporkurvaturens radius :math:`[m]` :param float B1: Første sikksakkverdi :math:`[m]` :param float B2: Andre sikksakkverdi :math:`[m]` :param float e_max: Max tillatt utblåsning :math:`[m]` :param float q: Vindlast på kontaktledningen :math:`[\\frac{N}{m}]` :return: Max tillatt masteavstand :math:`[m]` :rtype: :class:`float` """ r = radius # [m] s_kl = sys.kontakttraad["Strekk i ledning"] * 1000 # [N] # KL blåser UT fra kurven a1 = math.sqrt(((2 * s_kl) / (q - (s_kl / r))) * ((2 * e_max - B1 - B2) + math.sqrt((2 * e_max - B1 - B2) ** 2 - (B1 - B2) ** 2))) # KL blåser INN i kurven a2 = math.sqrt(((2 * s_kl) / (q + (s_kl / r))) * ((2 * e_max + B1 + B2) + math.sqrt((2 * e_max + B1 + B2) ** 2 - (B1 - B2) ** 2))) a = min(a1, a2) if a > 60 and sys.navn == "35": a = 60 print(a) if a > 65 and (sys.navn == "25" or sys.navn == "20A" or sys.navn == "20B"): a = 65 print(a) return a
[dokumentasjon]def beregn_arm(radius, sms, fh, B1): """Beregner momentarm for utligger. :param int radius: Sporkurvaturens radius :math:`[m]` :param float sms: Avstand senter mast - senter spor :math:`[m]` :param float fh: Kontakttrådhøyde :math:`[m]` :param float B1: Første sikksakkverdi :math:`[m]` :return: Momentarmer ``a_T`` og ``a_T_dot`` :math:`[m]` :rtype: :class:`float` """ r = radius b = abs(B1) # Overhøyde, UE i [m], pga kurveradius i [m] ue = lister.overhoyde # -----------------------!!NB!!-----------------------------------# # # Hva skal velges av (+)0.3 eller (-)0.3 i uttrykkene under ?? # (+-)0.3 kan settes inn etter begge uttrykkene under # for å ta hensyn til at bærelineholder kan justeres # # ----------------------------------------------------------------# # Momentarm [m] for strekkutligger. a_T = sms + fh * (ue[str(r)] / 1.435) - b # Momentarm [m] for trykkutligger. a_T_dot = sms - fh * (ue[str(r)] / 1.435) + b return a_T, a_T_dot