#!/usr/bin/env python3
"""Andrade Safe — Laboratório de Engenharia 001.
Reproduz o estudo de perda de carga (somente parcela distribuída).
Nenhum pacote externo é necessário. Python 3.10+.
"""
import math
G=9.81

def pipe_case(d_mm, q_L_min=30, L_m=20, rho=998.2, mu=0.001002, rough_mm=0.0015, eta=0.60, hours=2000, tariff=0.95):
    if min(d_mm,q_L_min,L_m,rho,mu,eta)>0 and rough_mm>=0 and 0<eta<=1 and hours>=0 and tariff>=0:
        pass
    else:
        raise ValueError('Entradas físicas inválidas')
    D=d_mm/1000.0
    Q=q_L_min/60000.0
    v=4*Q/(math.pi*D*D)
    Re=rho*v*D/mu
    if Re<2300:
        f=64/Re
        regime='laminar'
    elif Re>=4000:
        f=0.25/(math.log10((rough_mm/1000)/(3.7*D)+5.74/(Re**0.9))**2)
        regime='turbulento'
    else:
        raise ValueError('Regime de transição: modelo simplificado não fornece f confiável')
    hf=f*(L_m/D)*(v*v/(2*G))
    dp_kpa=rho*G*hf/1000.0
    P_w=rho*G*Q*hf/eta
    E_kwh=P_w*hours/1000
    return {'D_mm':d_mm,'v_m_s':v,'Re':Re,'f_Darcy':f,'regime':regime,'hf_m':hf,'dp_kPa':dp_kpa,'P_W':P_w,'E_kWh_ano':E_kwh,'R_ano':E_kwh*tariff}

if __name__ == '__main__':
    for d in (15,20,25,32,40):
        r=pipe_case(d)
        print(f"{d:>2} mm | v={r['v_m_s']:.3f} m/s | Re={r['Re']:.0f} | f={r['f_Darcy']:.5f} | hf={r['hf_m']:.3f} m | dP={r['dp_kPa']:.2f} kPa | R$ {r['R_ano']:.2f}/ano")
    old,new=pipe_case(20),pipe_case(25)
    print(f"Redução de hf: {(1-new['hf_m']/old['hf_m'])*100:.2f}%")
    print(f"Economia ilustrativa atribuível ao atrito: R$ {old['R_ano']-new['R_ano']:.2f}/ano")
