Files
swift-hvac-toolbox/Sources/Routes/HVACSystemPerformance.swift

88 lines
2.5 KiB
Swift

import PsychrometricClient
public enum HVACSystemPerformance {
public struct Request: Codable, Equatable, Sendable {
public let altitude: Double?
public let airflow: Double
public let returnAirTemperature: Double
public let returnAirHumidity: Double
public let supplyAirTemperature: Double
public let supplyAirHumidity: Double
public let systemSize: Double
public init(
altitude: Double? = nil,
airflow: Double,
returnAirTemperature: Double,
returnAirHumidity: Double,
supplyAirTemperature: Double,
supplyAirHumidity: Double,
systemSize: Double
) {
self.altitude = altitude
self.airflow = airflow
self.returnAirTemperature = returnAirTemperature
self.returnAirHumidity = returnAirHumidity
self.supplyAirTemperature = supplyAirTemperature
self.supplyAirHumidity = supplyAirHumidity
self.systemSize = systemSize
}
}
public struct Response: Codable, Equatable, Sendable {
public let returnAirProperties: PsychrometricProperties
public let supplyAirProperties: PsychrometricProperties
public let capacity: Capacity
public let systemMetrics: SystemMetrics
public init(
returnAirProperties: PsychrometricProperties,
supplyAirProperties: PsychrometricProperties,
capacity: HVACSystemPerformance.Capacity,
systemMetrics: HVACSystemPerformance.SystemMetrics
) {
self.returnAirProperties = returnAirProperties
self.supplyAirProperties = supplyAirProperties
self.capacity = capacity
self.systemMetrics = systemMetrics
}
}
public struct Capacity: Codable, Equatable, Sendable {
public let total: Double
public let sensible: Double
public let latent: Double
public var shr: Double { sensible / total }
public init(total: Double, sensible: Double, latent: Double) {
self.total = total
self.sensible = sensible
self.latent = latent
}
}
public struct SystemMetrics: Codable, Equatable, Sendable {
public let cfmPerTon: Double
public let targetTemperatureSplit: Double
public let actualTemperatureSplit: Double
public let condensationRate: Double
public init(
cfmPerTon: Double,
targetTemperatureSplit: Double,
actualTemperatureSplit: Double,
condensationRate: Double
) {
self.cfmPerTon = cfmPerTon
self.targetTemperatureSplit = targetTemperatureSplit
self.actualTemperatureSplit = actualTemperatureSplit
self.condensationRate = condensationRate
}
}
}