from coefficients import RHO_CP_AIR from ventilation import Room from interfaces import Interface, Surface def infiltration_losses(area, v50, reduction_factor=20): # TODO: review factor 20 vs factor 25 reduction. I think factor 20 is used for # dimensioning the required input and 25 for average use calculations # Infiltration losses flow_rate = (v50 / reduction_factor) * area / 3600 # m^3 / s HV_inf = RHO_CP_AIR * flow_rate return HV_inf def ventilation_losses(rooms: list[Room], eta) -> float: sum_wet = 0 sum_dry = 0 for room in rooms: if room.is_wet: sum_wet += room.flow_rate else: sum_dry += room.flow_rate flow_rate = max(sum_dry, sum_wet) / 3600 # m^3 / s HV_act = RHO_CP_AIR * flow_rate * (1 - eta) return HV_act def transmission_losses(interfaces: list[Interface]) -> float: print(" - Transmission loss contribution by part:") for interface in interfaces: if isinstance(interface, Surface): print( f" - {interface.name:16s} U = {interface.U:4.2f} W/m²K HT = {interface.HT:4.1f} W/K" ) HT = sum(interface.HT for interface in interfaces) return HT def report(situation) -> None: name = situation["name"] rooms = situation["ventilation_rooms"] eta_vent = situation["ventilation_eta"] infiltration_area = situation["ventilation_v50_area"] infiltration_v50 = situation["ventilation_v50_value"] interfaces = situation["transmission_interfaces"] delta_t_worst = situation["environment_delta_t_worst"] delta_t_typical = situation["environment_delta_t_typical"] print(f"Report for situation: {name}") HV_inf_worst = infiltration_losses(infiltration_area, infiltration_v50) HV_inf_typical = infiltration_losses( infiltration_area, infiltration_v50, reduction_factor=25 ) HV_act = ventilation_losses(rooms, eta_vent) print(" - Ventilation loss contribution by part:") HV_tot = HV_inf_worst + HV_act HV_tot_typical = HV_act + HV_inf_typical print(f" - Infiltration HV = {HV_inf_worst:4.1f} W/K") print(f" - Active ventilation HV = {HV_act:4.1f} W/K") HT = transmission_losses(interfaces) P_worst = (HV_tot + HT) * delta_t_worst # FIXME: hacky way to do a less dramatic worst case to consider P_worst2 = (HV_tot + HT) * 23 P_typical = (HV_tot_typical + HT) * delta_t_typical print(f" - HV = {HV_tot:7.1f} W/K") print(f" - HT = {HT:7.1f} W/K") print(f" - P worst = {P_worst:5.0f} W") print(f" - P worst2 = {P_worst2:5.0f} W") print(f" - P typical = {P_typical:5.0f} W")