Kildekode for system

import geometri
import klima

[dokumentasjon]class System(object): """Klasse for å representere alle valg av system."""
[dokumentasjon] def __init__(self, navn, baereline, kontakttraad, fixline, forbigangsledning, returledning, matefjernledning, y_line, hengetraad, fiberoptisk, at_ledning, jordledning, utligger, radius, sms, fh): """Initialiserer :class:`System`-objekt. :param str navn: Systemets navn (20A, 20B, 25, 35) :param dict baereline: Systemets bæreline :param dict kontakttraad: Systemets kontakttråd :param dict fixline: Systemets fixline :param dict forbigangsledning: Systemets forbigangsledning :param dict returledning: Systemets returledning :param dict matefjernledning: Systemets mate-/fjernledning :param dict y_line: Systemets y-line :param dict hengetraad: Systemets hengetråd :param dict fiberoptisk: Systemets fiberoptiske kabel :param dict at_ledning: Systemets AT-ledning :param dict jordledning: Systemets jordledning :param dict utligger: Systemets 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]` """ self.navn = navn self.baereline = baereline self.kontakttraad = kontakttraad self.fixline = fixline self.forbigangsledning = forbigangsledning self.returledning = returledning self.matefjernledning = matefjernledning self.y_line = y_line self.hengetraad = hengetraad self.fiberoptisk = fiberoptisk self.at_ledning = at_ledning self.jordledning = jordledning self.utligger = utligger self.B1, self.B2, self.e_max = geometri.beregn_sikksakk(self, radius) self.a_T, self.a_T_dot = geometri.beregn_arm(radius, sms, fh, self.B1)
def __repr__(self): return "System {}".format(self.navn)
[dokumentasjon]def hent_system(i): """Henter :class:`System` med data for ledninger og utliggere. Ledningenes strekkraft ved snøfri line og :math:`T = -40^{\\circ}C` samt strekk ved snøbelastet line og :math:`T = -25^{\\circ}C` beregnes ved hjelp av Newton-Raphson-iterasjon ut fra tabulerte verdier for kabelstrekk ved :math:`T = 5^{\\circ}C`. :param Inndata i: Input fra bruker :return: Systemkonfigurasjon :rtype: :class:`System` """ a = (i.a1 + i.a2)/2 # Bære/fixliner Bz_II_50_19 = {"Egenvekt": 4.37, "Diameter": 9.0, "Tverrsnitt": 48.35, "Strekk i ledning": 10.0} Bz_II_70_19 = {"Egenvekt": 5.96, "Diameter": 10.5, "Tverrsnitt": 65.81, "Strekk i ledning": 15.0} # Bz II 70/19 skal ha 10kN strekk ved bruk som fix Bz_II_70_19_fix = {"Egenvekt": 5.96, "Diameter": 10.5, "Tverrsnitt": 65.81, "Strekk i ledning": 10.0} Cu_50_7 = {"Egenvekt": 4.46, "Diameter": 9.0, "Tverrsnitt": 49.48, "Strekk i ledning": 7.1} # Kontakttråder Ri_100_Cu = {"Egenvekt": 8.9, "Diameter": 12.0, "Tverrsnitt": 100.0, "Strekk i ledning": 10.0} Ri_120_CuAg = {"Egenvekt": 10.7, "Diameter": 13.2, "Tverrsnitt": 120.0, "Strekk i ledning": 15.0} Ri_100_Cu_s35 = {"Egenvekt": 8.9, "Diameter": 12.0, "Tverrsnitt": 100.0, "Strekk i ledning": 7.1} # Y-liner Bz_II_35_7 = {"Egenvekt": 3.10, "Diameter": 7.5, "Tverrsnitt": 34.36} # Hengetråder Bz_II_10_49 = {"Egenvekt": 0.53, "Diameter": 4.5, "Tverrsnitt": 9.6} # Forbigangsledninger # Det antas en oppspenningskraft på 3kN og ingen temperaturutvidelse av # fiberoptisk kabel da denne er metallfri. Al_240_61 = {"Navn": "Al 240-61", "Egenvekt": 6.43, "Diameter": 20.3, "Tverrsnitt": 242.54, "E-modul": 56000, "Max tillatt spenning": 50.0, "Lengdeutvidelseskoeffisient": 2.3*10**(-5), "Strekk 5C": _strekkraft(2.48, 2.78, a)} # Returledninger Al_240_61_iso = {"Navn": "Al 240-61 isolert", "Egenvekt": 7.63, "Diameter": 23.9, "Tverrsnitt": 242.54, "E-modul": 56000, "Max tillatt spenning": 50.0, "Lengdeutvidelseskoeffisient": 2.3 * 10 ** (-5), "Strekk 5C": _strekkraft(2.95, 3.28, a)} # Mate-/fjernledninger SAHF_120_26_7 = {"Navn": "SAHF 120 Feral", "Egenvekt": 7.56, "Diameter": 19.38, "Tverrsnitt": 222.35, "E-modul": 76000, "Max tillatt spenning": 95.0, "Lengdeutvidelseskoeffisient": 1.9 * 10 ** (-5), "Strekk 5C": _strekkraft(2.77, 3.06, a)} # Fiberoptiske kabler ADSS_GRHSLLDV_9_125 = {"Navn": "ADSS GRHSLLDV 9/125", "Egenvekt": 2.6, "Diameter": 18.5, "Tverrsnitt": 268.9, "Max tillatt spenning": 59.5, "Strekk 5C": 3.0, "Strekk -40C": 3.0, "Strekk med snø -25C": 9.0} # AT-ledninger # Ved manglende strekktabeller for Al 400-37 og 240-19 er verdier for # Al 400-61 og 240-61 benyttet. Strekkverdier for Al 150-19 ekstrapoleres # ut fra arealforholdet mellom denne og Al 400-37 (ca. 40%). at_ledninger = [] Al_400_37 = {"Navn": "Al 400-37", "Egenvekt": 10.31, "Diameter": 25.34, "Tverrsnitt": 381.0, "E-modul": 56000, "Max tillatt spenning": 50.0, "Lengdeutvidelseskoeffisient": 2.3 * 10 ** (-5), "Strekk 5C": _strekkraft(4.09, 4.59, a)} Al_240_19 = {"Navn": "Al 240-19", "Egenvekt": 6.46, "Diameter": 20.0, "Tverrsnitt": 238.76, "E-modul": 56000, "Max tillatt spenning": 50.0, "Lengdeutvidelseskoeffisient": 2.3 * 10 ** (-5), "Strekk 5C": _strekkraft(2.48, 2.78, a)} Al_150_19 = {"Navn": "Al 150-19", "Egenvekt": 4.07, "Diameter": 15.9, "Tverrsnitt": 150.90, "E-modul": 56000, "Max tillatt spenning": 50.0, "Lengdeutvidelseskoeffisient": 2.3 * 10 ** (-5), "Strekk 5C": _strekkraft(0.4*4.09, 0.4*4.59, a)} at_ledninger.extend([Al_400_37, Al_240_19, Al_150_19]) # Jordledninger jordledninger = [] KHF_70 = {"Navn": "KHF-70", "Egenvekt": 5.81, "Diameter": 10.5, "Tverrsnitt": 66.75, "E-modul": 116000, "Max tillatt spenning": 125.0, "Lengdeutvidelseskoeffisient": 1.7 * 10 ** (-5), "Strekk 5C": _strekkraft(2.09, 2.25, a)} KHF_95 = {"Navn": "KHF-95", "Egenvekt": 8.25, "Diameter": 12.5, "Tverrsnitt": 94.7, "E-modul": 116000, "Max tillatt spenning": 125.0, "Lengdeutvidelseskoeffisient": 1.7 * 10 ** (-5), "Strekk 5C": _strekkraft(2.97, 3.20, a)} jordledninger.extend([KHF_70, KHF_95]) # Utliggere (s2x for system 20A/20B/25, s3x for system 35) utligger_s2x = {"Egenvekt": 170, "Momentarm": 0.35} utligger_s3x = {"Egenvekt": 200, "Momentarm": 0.40} ledninger = [Al_240_61, Al_240_61_iso, SAHF_120_26_7] ledninger.extend(at_ledninger) ledninger.extend(jordledninger) for ledning in ledninger: H_0 = ledning["Strekk 5C"] E = ledning["E-modul"] A = ledning["Tverrsnitt"] G_0 = ledning["Egenvekt"] G_sno = klima._g_sno(i.ec3, i.isklasse, ledning["Diameter"]) L = a alpha = ledning["Lengdeutvidelseskoeffisient"] # Beregner strekk ved snøfri kabel og -40C ledning["Strekk -40C"], iter_40, list_40 = _newtonraphson(H_0, E, A, G_0, G_0, L, alpha, -40) # Beregner strekk ved snøbelastet kabel og -25C ledning["Strekk med snø -25C"], iter_sno_25, list_sno_25 = _newtonraphson(H_0, E, A, G_0, G_0+G_sno, L, alpha, -25) # Beregner differansestrekk ved -40C s_1, s_11, s_111 = _newtonraphson(H_0, E, A, G_0, G_0, i.a1, alpha, -40) s_2, s_22, s_222 = _newtonraphson(H_0, E, A, G_0, G_0, i.a2, alpha, -40) ledning["Differansestrekk"] = abs(s_1-s_2) """ print() print("Ledning: {}".format(ledning["Navn"])) print("Differansestrekk: {} kN".format(ledning["Differansestrekk"])) print("Initiell strekkraft: {} kN".format(ledning["Strekk 5C"])) print("-40C, fri line: H_x = {:.3g} kN Antall iterasjoner: {}".format(ledning["Strekk -40C"] / 1000, iter_40)) print("-25C, inkl snølast: H_x = {:.3g} kN Antall iterasjoner: {}".format(ledning["Strekk med snø -25C"] / 1000, iter_sno_25)) okning = ledning["Strekk med snø -25C"]-ledning["Strekk 5C"] print("Økning fra snølast: {} kN = {} %".format(okning, okning/ledning["Strekk 5C"]*100)) plt.plot([x for x in range(iter_40+1)], list_40, "b", [x for x in range(iter_sno_25+1)], list_sno_25, "y--",) plt.show(True) """ # Antatt verdi for diff.strekk i fiberoptisk kabel SAHF_120_26_7["Differansestrekk"] = Al_240_61["Differansestrekk"] at_ledning = None # Setter AT-ledning for ledning in at_ledninger: if ledning["Navn"] == i.at_type: at_ledning = ledning break jordledning = None # Setter jordledning for ledning in jordledninger: if ledning["Navn"] == i.jord_type: jordledning = ledning break systemnavn = str.split(i.systemnavn)[1] if i.systemnavn.startswith("System") else i.systemnavn # Setter utligger utligger = utligger_s2x if systemnavn=="35": utligger = utligger_s3x if systemnavn == "20A": return System(navn="20A", baereline=Bz_II_50_19, kontakttraad=Ri_100_Cu, fixline=Bz_II_50_19, forbigangsledning=Al_240_61, returledning=Al_240_61_iso, matefjernledning=SAHF_120_26_7, y_line=Bz_II_35_7, hengetraad=Bz_II_10_49, fiberoptisk=ADSS_GRHSLLDV_9_125, at_ledning=at_ledning, jordledning=jordledning, utligger=utligger, radius=i.radius, sms=i.sms, fh=i.fh) elif systemnavn == "20B": return System(navn="20B", baereline=Bz_II_50_19, kontakttraad=Ri_100_Cu, fixline=Bz_II_50_19, forbigangsledning=Al_240_61, returledning=Al_240_61_iso, matefjernledning=SAHF_120_26_7, y_line=None, hengetraad=Bz_II_10_49, fiberoptisk=ADSS_GRHSLLDV_9_125, at_ledning=at_ledning, jordledning=jordledning, utligger=utligger, radius=i.radius, sms=i.sms, fh=i.fh) elif systemnavn == "25": return System(navn="25", baereline=Bz_II_70_19, kontakttraad=Ri_120_CuAg, fixline=Bz_II_70_19_fix, forbigangsledning=Al_240_61, returledning=Al_240_61_iso, matefjernledning=SAHF_120_26_7, y_line=Bz_II_35_7, hengetraad=Bz_II_10_49, fiberoptisk = ADSS_GRHSLLDV_9_125, at_ledning=at_ledning, jordledning=jordledning, utligger=utligger, radius=i.radius, sms=i.sms, fh=i.fh) elif systemnavn == "35": return System(navn="35", baereline=Cu_50_7, kontakttraad=Ri_100_Cu_s35, fixline=Bz_II_50_19, forbigangsledning=Al_240_61, returledning=Al_240_61_iso, matefjernledning=SAHF_120_26_7, y_line=Bz_II_35_7, hengetraad=Bz_II_10_49, fiberoptisk = ADSS_GRHSLLDV_9_125, at_ledning=at_ledning, jordledning=jordledning, utligger=utligger, radius=i.radius, sms=i.sms, fh=i.fh)
[dokumentasjon]def _strekkraft(a, b, masteavstand): """Beregner strekkraft i fastavspent ledning mhp. masteavstand. Strekkraften beregnes ut fra lineærinterpolering mellom tabulerte verdier for strekkrefter ``a`` og ``b`` :param float a: Strekk ved 30m masteavstand :math:`[kN]` :param float b: Strekk ved 70m masteavstand :math:`[kN]` :param float masteavstand: Faktisk masteavstand :math:`[m]` :return: Strekkraft ved faktisk masteavstand :math:`[N]` :rtype: :class:`float` """ s = 1000 * (a + (masteavstand-30) * (b - a)/40) return s
[dokumentasjon]def _newtonraphson(H_0, E, A, G_0, G_x, L, alpha, T): """Numerisk løsning av kabelstrekk i fastavspente ledninger. Følgende likevektsligning ligger til grunn for beregningene: :math:`H_x^2 [H_x - H_0 + \\frac{EA(G_0 L)^2}{24H_0^2} + EA\\alpha \\Delta_T] = \\frac{EA(G_x L)^2}{24}` Løsningen finnes ved hjelp av Newton-Raphson-iterasjoner for en residualfunksjon utledet fra likevekstligningen til en fastavspent kabel. Løsning returneres dersom feilkriteriet ``e`` er innenfor valgt grense eller antall iterasjoner overgår 1000. :param float H_0: Initiell spennkraft i kabel :math:`[N]` :param float E: Kabelens E-modul :math:`[\\frac{N}{mm^2}]` :param float A: Kabelens tverrsnittsareal :math:`[mm^2]` :param float G_0: Kabelens egenvekt :math:`[\\frac{N}{m}]` :param float G_x: Kabelens egenvekt + eventuell snølast :math:`[\\frac{N}{m}]` :param float L: Masteavstand :math:`[m]` :param float alpha: Lengdeutvidelseskoeffisient :math:`[\\frac{1}{^{\\circ}C}]` :param float T: Lufttemperatur :math:`[^{\\circ}C]` :return: Endelig kabelstrekk ``H_x`` :math:`[N]`, antall iterasjoner ``iterasjoner``, kabelstrekk ved hver iterasjon ``H_list`` :math:`[N]` :rtype: :class:`float`, :class:`int`, :class:`list` """ # Konstanter delta_T = T - 5 a = E*A*(G_x*L)**2/24 b = - H_0 + E*A*(G_0*L)**2/(24*H_0**2) + E*A*alpha*delta_T # Initialverdier iterasjoner = 0 H_x = H_0 H_list = [] delta_H_x = 0 while iterasjoner<1000: H_x -= delta_H_x H_list.append(H_x) r = a - H_x**3 - b*H_x**2 e = abs(r/a) if e < 10**(-2): return (H_x, iterasjoner, H_list) r_d = - 3*H_x**2 - 2*b*H_x delta_H_x = r/r_d iterasjoner += 1 return(H_x, iterasjoner, H_list)