# -*- coding: cp1250 -*-
import math
import databaze_materialu_1v1
import dovolene_namahani

class vypocet:
    def vypocet_en13445(self, Temp, Temp_mont, material_sroubu, tloustka_sroubu, material_tesneni, tlakova_zkouska,
                        pn, g0, P, B, Dstp, Dvtp, dbmin, C, g1, deltab, db, e, A, w, material_priruby, tloustka_priruby,
                        material_plaste, tloustka_plaste):        

        _materialy = databaze_materialu_1v1.materialy() # tvorba instance databaze materialu, nutnost pro práci s class
        _namahani = dovolene_namahani.namahani() # tvorba instance databaze materialu, nutnost pro práci s class
        podminky_plneni = []
        
        # materiálové vlastnosti šroubu
        Rp02t_sroubu = _materialy.tyce(Temp, material_sroubu, tloustka_sroubu)[0]
        Rm_sroubu = _materialy.tyce(Temp, material_sroubu, tloustka_sroubu)[1]
        A_sroubu = _materialy.tyce(Temp, material_sroubu, tloustka_sroubu)[2] 
        material_info_sroubu = _materialy.tyce(Temp, material_sroubu, tloustka_sroubu)[3]
        tloustka_materialu_sroubu = _materialy.tyce(Temp, material_sroubu, tloustka_sroubu)[4] 
        podminky_plneni.append(tloustka_materialu_sroubu)
        
        # materiálové vlastnosti příruby
        Rp02t_priruba = _materialy.priruba(Temp, material_priruby, tloustka_priruby)[0]
        Rm_priruba = _materialy.priruba(Temp, material_priruby, tloustka_priruby)[1]
        A_priruba = _materialy.priruba(Temp, material_priruby, tloustka_priruby)[2] 
        material_info_priruba = _materialy.priruba(Temp, material_priruby, tloustka_priruby)[3]
        tloustka_materialu_priruba = _materialy.priruba(Temp, material_priruby, tloustka_priruby)[4]
        podminky_plneni.append(tloustka_materialu_priruba)

        # materiál těsnění
        typ_tesneni = _materialy.tesneni(material_tesneni)[0]
        m = _materialy.tesneni(material_tesneni)[1]
        y = _materialy.tesneni(material_tesneni)[2]
        w_min = _materialy.tesneni(material_tesneni)[3]
        beta_2 = _materialy.tesneni(material_tesneni)[4]

        # materiál pláště
        Rp02t_plaste = _materialy.plast(Temp, material_plaste, tloustka_plaste)[0]
        Rm_plaste = _materialy.plast(Temp, material_plaste, tloustka_plaste)[1]
        A_plaste = _materialy.plast(Temp, material_plaste, tloustka_plaste)[2] 
        material_info_plaste = _materialy.plast(Temp, material_plaste, tloustka_plaste)[3]
        tloustka_materialu_plaste = _materialy.plast(Temp, material_plaste, tloustka_plaste)[4]
        podminky_plneni.append(tloustka_materialu_plaste)

        # stanoveni dovoleneho namahani
        f_priruba = _namahani.dovolene_namahani_priruby(tlakova_zkouska, Temp, A_priruba, Rp02t_priruba, Rm_priruba, Rm_priruba)
        f_sroubu = _namahani.dovolene_namahani_sroubu(tlakova_zkouska, Temp, A_sroubu, Rp02t_sroubu, Rm_sroubu, Rm_sroubu)
        f_sroubu_mont = _namahani.dovolene_namahani_sroubu(tlakova_zkouska, Temp_mont, A_sroubu, Rp02t_sroubu, Rm_sroubu, Rm_sroubu)
        f_plaste = _namahani.dovolene_namahani_plaste(tlakova_zkouska, Temp, A_plaste, Rp02t_plaste, Rm_plaste, Rm_plaste)

        zaznam_dov_namahani = []
        zaznam_dov_namahani.append(Rp02t_sroubu)
        zaznam_dov_namahani.append(Rm_sroubu)
        zaznam_dov_namahani.append(A_sroubu)
        zaznam_dov_namahani.append(material_info_sroubu)
        zaznam_dov_namahani.append(Rp02t_priruba)
        zaznam_dov_namahani.append(Rm_priruba)
        zaznam_dov_namahani.append(A_priruba)
        zaznam_dov_namahani.append(material_info_priruba)
        zaznam_dov_namahani.append(typ_tesneni)
        zaznam_dov_namahani.append(m)
        zaznam_dov_namahani.append(y)
        zaznam_dov_namahani.append(w_min)
        zaznam_dov_namahani.append(beta_2)
        zaznam_dov_namahani.append(Rp02t_plaste)
        zaznam_dov_namahani.append(Rm_plaste)
        zaznam_dov_namahani.append(A_plaste)
        zaznam_dov_namahani.append(material_info_plaste)
        zaznam_dov_namahani.append(f_priruba)
        zaznam_dov_namahani.append(f_sroubu)
        zaznam_dov_namahani.append(f_sroubu_mont)
        zaznam_dov_namahani.append(f_plaste)

        ## těsnění pro normalizované příruby
        ## typ těsnění
        ## 1 - nekovové ploché těsnění s obalem nebo bez něho
        ## 2 - spirálově vinutý kov s vložkou
        ##   - vlnitý kov s vložkou
        ##   - vlnitý kov s vložkou nebo bez ní
        ## 3 - plochý kovový obal s vložkou
        ##   - drážkovaný nebo plochý kov
        ## 4 - kovový kroužek

        if pn >= 2.5 and pn <= 16 and typ_tesneni == 1:
                zaznam_priruba = _namahani.nizka_pevnost(A_sroubu, Rp02t_sroubu, Rp02t_priruba, pn, typ_tesneni)
        elif pn == 25 and typ_tesneni == 1:
            zaznam_priruba = _namahani.nizka_pevnost(A_sroubu, Rp02t_sroubu, Rp02t_priruba, pn, typ_tesneni)
        elif pn == 25 and typ_tesneni == 2:
            zaznam_priruba = _namahani.stredni_pevnost(A_sroubu, Rp02t_sroubu, Rp02t_priruba, pn, typ_tesneni)
        elif pn == 40 and typ_tesneni == 1:
            zaznam_priruba = _namahani.nizka_pevnost(A_sroubu, Rp02t_sroubu, Rp02t_priruba, pn, typ_tesneni)
        elif pn == 40 and typ_tesneni == 3:
            zaznam_priruba = _namahani.vysoka_pevnost(A_sroubu, Rp02t_sroubu, Rp02t_priruba, pn, typ_tesneni)
        elif pn == 63 and typ_tesneni == 1:
            zaznam_priruba = _namahani.nizka_pevnost(A_sroubu, Rp02t_sroubu, Rp02t_priruba, pn, typ_tesneni)
        elif pn == 63 and typ_tesneni == 2:
            zaznam_priruba = _namahani.stredni_pevnost(A_sroubu, Rp02t_sroubu, Rp02t_priruba, pn, typ_tesneni)
        elif pn == 63 and typ_tesneni == 3:
            zaznam_priruba = _namahani.vysoka_pevnost(A_sroubu, Rp02t_sroubu, Rp02t_priruba, pn, typ_tesneni)
        elif pn == 63 and typ_tesneni == 4:
            zaznam_priruba = _namahani.vysoka_pevnost(A_sroubu, Rp02t_sroubu, Rp02t_priruba, pn, typ_tesneni)
        elif pn == 100 and typ_tesneni == 1:
            zaznam_priruba = _namahani.stredni_pevnost(A_sroubu, Rp02t_sroubu, Rp02t_priruba, pn, typ_tesneni)
        elif pn == 100 and typ_tesneni == 2:
            zaznam_priruba = _namahani.stredni_pevnost(A_sroubu, Rp02t_sroubu, Rp02t_priruba, pn, typ_tesneni)
        elif pn == 100 and typ_tesneni == 3:
            zaznam_priruba = _namahani.vysoka_pevnost(A_sroubu, Rp02t_sroubu, Rp02t_priruba, pn, typ_tesneni)
        elif pn == 100 and typ_tesneni == 4:
            zaznam_priruba = _namahani.vysoka_pevnost(A_sroubu, Rp02t_sroubu, Rp02t_priruba, pn, typ_tesneni)
        else:
            zaznam_priruba = [(None,None,None,None)]

        zaznam_en13445 = []        
        ## vstupní podmínky
        if g0 <= 16. and P <= 2. and (B/g0) <= 300. and Temp <= 370.:
            podminky_plneni.append(True)
            podminky_plneni.append("vstupni podminky")
        else:
            podminky_plneni.append(False)
            podminky_plneni.append("vstupni podminky")
                    
        ## síly ve šroubech a plochy průřezu šroubu
        if beta_2 == 0.:
            b0=w/2 # b0 - základní šířka těsnění nebo dosedací plochy
        elif beta_2 == 1.:
            b0 = w/8. # b0 - pro zatížení spojů s prstencovým těsněním, z přílohy H
        else:
            pass
        
        zaznam_en13445.append(b0)
        
        if b0 <= 6.3:
            b=b0
            G=Dstp
        else:
            b=math.sqrt(b0)*2.52
            G=Dvtp-2.*b

        zaznam_en13445.append(b)
        zaznam_en13445.append(G)

        H=(math.pi*P*(G**2.))/4. # H - celková osová síla od tlaku
        HG=2*math.pi*G*m*P # HG - tlaková síla na těsnění pro dosažení těsnosti
        WA=math.pi*b*G*y # WA - minimální požadovaná síla ve šroubech při montážních pomdínkách
        Wop=H+HG # Wop - minimální požadovaná síla ve šroubech při provozních podmínkách
        ABmin=max(WA/f_sroubu_mont,Wop/f_sroubu) # AB,min - celková požadovaná plocha průřezu šroubů
        AB = (math.pi*dbmin**2.)/4
        if AB >= ABmin:
            podminky_plneni.append(True)
            podminky_plneni.append("plocha sroubu")
        else:
            podminky_plneni.append(False)
            podminky_plneni.append("plocha sroubu")

        zaznam_en13445.append(H)
        zaznam_en13445.append(HG)
        zaznam_en13445.append(WA)
        zaznam_en13445.append(Wop)
        zaznam_en13445.append(ABmin)
        zaznam_en13445.append(AB)
                
        HD=(math.pi*(B**2.)*P)/4. # HD - osová síla od tlaku přenášený přes plášť na přírubu
        HT=H-HD # HT - osová síla od tlaku na čelní plochu příruby
        hD=(C-B-g1)/2.0 # hD - radiální vzdálenost mezi roztečnou kružnicí šroubů a kružnicí působiště
        hG=(C-G)/2 # hG - radiální vzdálenost mezi kružnicí reakční síly v těsnění a roztečnou kružnicí šroubů
        hT=(2*C-B-G)/4 # hT - radiální vzdálenost mezi roztečnou kružnicí šroubů a kružnicí působiště HT
        W=0.5*(ABmin+AB)*f_sroubu_mont # W - konstukční síla ve šroubech při montážních podmínkách
        MA =W*hG # MA - celkový moment působící na přírubu při montážních podmínkách
        Mop=HD*hD+HT*hT+HG*hG # Mop - celkový moment působící na přírubu při provozních podmínkách
        ## napětí v přírubě a meze napětí
        CF=max(math.sqrt(deltab/(db*2.+(6.*e/(m+0.5)))),1) # CF - korekční součinitel rozteček šroubů
        K=A/B # K - poměr průměrů příruby
        l0=math.sqrt(B*g0) # l0 - parametr délky
        betaT=((K**2.)*(1.+8.55246*math.log10(K))-1.)/((1.0472+1.9448*K**2.)*(K-1.)) # betaT - součinitel daný vzorcem (11.5-23)
        betaU=((K**2.)*(1.+8.55246*math.log10(K))-1.)/(1.36136*((K**2.)-1)*(K-1)) # betaU - součinitel daný vzorcem (11.5-24)
        betaY=(0.66845+5.7169*((K**2.)*math.log10(K))/((K**2)-1.))/(K-1.) # betaY - součinitel daný vzorcem (11.5-25)
        M_montaz=(MA*CF)/B # M_montaz - napětí v přírubě pro montážní podmínky
        M_provoz=(Mop*CF)/B # M_provoz - napětí v přírubě pro provozní podmínky
        sigmaTHETA_montaz=betaY*M_montaz/(e**2.) # sigmaTHETA - počítané tandenciální napětí v přírubě
        sigmaTHETA_provoz=betaY*M_provoz/(e**2.) # sigmaTHETA - počítané tandenciální napětí v přírubě
        sigmar=sigmaH=0 # sigmar - počítané radiální napětí v přírubě

        zaznam_en13445.append(HD)
        zaznam_en13445.append(HT)
        zaznam_en13445.append(hD)
        zaznam_en13445.append(hG)
        zaznam_en13445.append(hT)
        zaznam_en13445.append(W)
        zaznam_en13445.append(MA)
        zaznam_en13445.append(Mop)
        zaznam_en13445.append(CF)
        zaznam_en13445.append(K)
        zaznam_en13445.append(l0)
        zaznam_en13445.append(betaT)
        zaznam_en13445.append(betaU)
        zaznam_en13445.append(betaY)
        zaznam_en13445.append(M_montaz)
        zaznam_en13445.append(M_provoz)
        zaznam_en13445.append(sigmaTHETA_montaz)
        zaznam_en13445.append(sigmaTHETA_provoz)
        zaznam_en13445.append(sigmar)

        ## limity napětí
        if B<=1000:
            k = 1
        elif B>2000:
            k = 1.333
        else:
            k=(2.*(1+B/2000))/3.
        k_sigmaH=k*sigmaH
        k_sigmar=k*sigmar
        k_sigmaTHETA_montaz=k*sigmaTHETA_montaz
        k_sigmaH_sigmar=(0.5*k*(sigmaH+sigmar))
        k_sigmaH_sigmaTHETA_montaz=(0.5*k*(sigmaH+sigmaTHETA_montaz))

        podminky_s_k = []
        podminky_s_k.append(k_sigmaH)
        podminky_s_k.append(k_sigmar)
        podminky_s_k.append(k_sigmaTHETA_montaz)
        podminky_s_k.append(k_sigmaH_sigmar)
        podminky_s_k.append(k_sigmaH_sigmaTHETA_montaz)
        if k_sigmaH<=1.5*min(f_priruba,f_plaste) and k_sigmar<=f_priruba and k_sigmaTHETA_montaz<=f_priruba and k_sigmaH_sigmar<=f_priruba and k_sigmaH_sigmaTHETA_montaz<=f_priruba:
            podminky_plneni.append(True)
            podminky_plneni.append("limity napeti v prirube pro montaz")

        else:
            podminky_plneni.append(False)
            podminky_plneni.append("limity napeti v prirube pro montaz")

        k_sigmaTHETA_provoz=k*sigmaTHETA_provoz
        k_sigmaH_sigmar=(0.5*k*(sigmaH+sigmar))
        k_sigmaH_sigmaTHETA_provoz=(0.5*k*(sigmaH+sigmaTHETA_provoz))

        podminky_s_k.append(k_sigmaTHETA_provoz)
        podminky_s_k.append(k_sigmaH_sigmar)
        podminky_s_k.append(k_sigmaH_sigmaTHETA_provoz)
        
        if k_sigmaH<=1.5*min(f_priruba,f_plaste) and k_sigmar<=f_priruba and k_sigmaTHETA_provoz<=f_priruba and k_sigmaH_sigmar<=f_priruba and k_sigmaH_sigmaTHETA_provoz<=f_priruba:
            podminky_plneni.append(True)
            podminky_plneni.append("limity napeti v prirube pro provoz")
        else:
            podminky_plneni.append(False)
            podminky_plneni.append("limity napeti v prirube pro provoz")

        return zaznam_dov_namahani, zaznam_priruba, zaznam_en13445, podminky_plneni, podminky_s_k

    def vypis(self):
        if vypis == True:
            print ""
            print "SILY VE SROUBECH A PLOCHY PRUREZU SROUBU"
            print "----------------------------------------"
            if b0 <= 6.3:
                print "podmínka b0 <= 6.3"
            else:
                print "podmínka b0 > 6.3"
            print "b = ", round(b,2), " mm"
            print "G = ", round(G,2), " N"
            print "H = ", round(H,2), " N"
            print "HG = ", round(HG,2), " N"
            print "WA = ", round(WA,2), " N"
            print "Wop = ", round(Wop,2), " N"
            print "ABmin = ", round(ABmin,2), " mm2"
            print "AB = ", round(AB,2), " mm2"
            if AB>=ABmin:
                print "podminka AB>=ABmin splněna"
            else:
                print "podminka AB>=ABmin nesplněna"
            print ""
            print "MOMENTY PUSOBICI NA PRIRUBU"
            print "----------------------------------------"
            print "HD = ", round(HD,2), " N"
            print "HT = ", round(HT,2), " N"
            print "hD = ", round(hD,2), " mm"
            print "hG = ", round(hG,2), " mm"
            print "hT = ", round(hT,2), " mm"
            print "W = ", round(W,2), " N"
            print "MA = ", round(MA,2), " Nmm"
            print "Mop = ", round(Mop,2), " Nmm"
            print ""
            print "VYPOCET NAPETI V PRIRUBE"
            print "----------------------------------------"
            if CF<=1:
                print "podminka CF<=1"
            else:
                print "podminka CF>=1"
            print "CF = ", round(CF,2), " mm"
            print "K = ", round(K,2), " -"
            print "l0 = ", round(l0,2), " mm"
            print "betaT = ", round(betaT,2), " -"
            print "betaU = ", round(betaU,2), " -"
            print "betaY = ", round(betaY,2), " -"
            print "M_montaz pro montazni podminky = ", round(M_montaz,2), " Nmm"
            print "M_provoz pro provozní podminky = ", round(M_provoz,2), " Nmm"
            print ""
            print "VOLNA METODA:"
            print "----------------------------------------"
            print "sigmaTHETA_montaz = ", round(sigmaTHETA_montaz,2), " MPa"
            print "sigmaTHETA_provoz = ", round(sigmaTHETA_provoz,2), " MPa"
            print "sigmar = ", round(sigmar,2), " MPa"
            print ""
            print "MEZE NAPETI:"
            print "----------------------------------------"
            print "k_sigmaH = ", round(k_sigmaH,2), " -"
            print "k_sigmar = ", round(k_sigmar,2), " -"
            print "k_sigmaTHETA_montaz = ", round(k_sigmaTHETA_montaz,2), " -"
            print "k_sigmaH_sigmar = ", round(k_sigmaH_sigmar,2), " -"
            print "k_sigmaH_sigmaTHETA_montaz = ", round(k_sigmaH_sigmaTHETA_montaz,2), " -"
            print "k_sigmaTHETA_provoz = ", round(k_sigmaTHETA_provoz,2), " -"
            print "k_sigmaH_sigmar = ", round(k_sigmaH_sigmar,2), " -"
            print "k_sigmaH_sigmaTHETA_provoz = ", round(k_sigmaH_sigmaTHETA_provoz,2), " -"
            print "k = ", round(k,2), " -"
        else:
            pass # příkaz k přeskočení podmínky - neprovede nic
