Files
swift-manual-s/Sources/Models/CoolingInterpolation.swift
Michael Housh bd33827e53
All checks were successful
CI / Ubuntu (push) Successful in 11m46s
feat: Adds heat pump heating interpolation.
2025-03-13 10:55:15 -04:00

194 lines
6.0 KiB
Swift

public enum CoolingInterpolation {
public struct Request: Codable, Equatable, Sendable {
public let elevation: Int?
public let summerDesignInfo: DesignInfo.Summer
public let coolingLoad: Capacity.Cooling
public let systemType: SystemType
public let interpolation: InterpolationRequest
public init(
elevation: Int? = nil,
summerDesignInfo: DesignInfo.Summer,
coolingLoad: Capacity.Cooling,
systemType: SystemType,
interpolation: InterpolationRequest
) {
self.elevation = elevation
self.summerDesignInfo = summerDesignInfo
self.coolingLoad = coolingLoad
self.systemType = systemType
self.interpolation = interpolation
}
}
public struct Response: Codable, Equatable, Sendable {
public let failed: Bool
public let failures: [String]?
public let interpolatedCapacity: Capacity.Cooling
public let excessLatent: Int
public let finalCapacityAtDesign: Capacity.Cooling
public let altitudeDerating: AdjustmentMultiplier?
public let capacityAsPercentOfLoad: Capacity.Cooling
public let sizingLimits: SizingLimits.Response
public init(
failures: [String]? = nil,
interpolatedCapacity: Capacity.Cooling,
excessLatent: Int,
finalCapacityAtDesign: Capacity.Cooling,
altitudeDerating: AdjustmentMultiplier? = nil,
capacityAsPercentOfLoad: Capacity.Cooling,
sizingLimits: SizingLimits.Response
) {
self.failed = failures != nil ? failures!.count > 0 : false
self.failures = failures
self.interpolatedCapacity = interpolatedCapacity
self.excessLatent = excessLatent
self.finalCapacityAtDesign = finalCapacityAtDesign
self.altitudeDerating = altitudeDerating
self.capacityAsPercentOfLoad = capacityAsPercentOfLoad
self.sizingLimits = sizingLimits
}
}
public enum InterpolationRequest: Codable, Equatable, Sendable {
case noInterpolation(Capacity.ManufacturersCooling, AdjustmentMultiplier? = nil)
case oneWayIndoor(OneWayIndoor)
case oneWayOutdoor(OneWayOutdoor)
case twoWay(TwoWay)
}
public struct OneWayIndoor: Codable, Equatable, Sendable {
public let airflow: Int
public let outdoorTemperature: Int
public let capacities: Capacities
public let adjustmentMultipliers: AdjustmentMultiplier?
public init(
airflow: Int,
outdoorTemperature: Int,
capacities: CoolingInterpolation.OneWayIndoor.Capacities,
adjustmentMultipliers: AdjustmentMultiplier? = nil
) {
self.airflow = airflow
self.outdoorTemperature = outdoorTemperature
self.capacities = capacities
self.adjustmentMultipliers = adjustmentMultipliers
}
public struct Capacities: Codable, Equatable, Sendable {
public let aboveDewpoint: Capacity.ManufacturersContainer
public let belowDewpoint: Capacity.ManufacturersContainer
public init(
aboveDewpoint: Capacity.ManufacturersContainer,
belowDewpoint: Capacity.ManufacturersContainer
) {
self.aboveDewpoint = aboveDewpoint
self.belowDewpoint = belowDewpoint
}
}
}
public struct OneWayOutdoor: Codable, Equatable, Sendable {
public let airflow: Int
public let wetBulb: Int
public let capacities: Capacities
public let adjustmentMultipliers: AdjustmentMultiplier?
public init(
airflow: Int,
wetBulb: Int,
capacities: CoolingInterpolation.OneWayOutdoor.Capacities,
adjustmentMultipliers: AdjustmentMultiplier? = nil
) {
self.airflow = airflow
self.wetBulb = wetBulb
self.capacities = capacities
self.adjustmentMultipliers = adjustmentMultipliers
}
public struct Capacities: Codable, Equatable, Sendable {
public let aboveOutdoor: CapacityContainer
public let belowOutdoor: CapacityContainer
public init(
aboveOutdoor: CoolingInterpolation.OneWayOutdoor.Capacities.CapacityContainer,
belowOutdoor: CoolingInterpolation.OneWayOutdoor.Capacities.CapacityContainer
) {
self.aboveOutdoor = aboveOutdoor
self.belowOutdoor = belowOutdoor
}
public struct CapacityContainer: Codable, Equatable, Sendable {
public let outdoorTemperature: Int
public let totalCapacity: Int
public let sensibleCapacity: Int
public init(outdoorTemperature: Int, totalCapacity: Int, sensibleCapacity: Int) {
self.outdoorTemperature = outdoorTemperature
self.totalCapacity = totalCapacity
self.sensibleCapacity = sensibleCapacity
}
}
}
}
public struct TwoWay: Codable, Equatable, Sendable {
public let airflow: Int
public let capacities: Capacities
public let adjustmentMultipliers: AdjustmentMultiplier?
public init(
airflow: Int,
capacities: CoolingInterpolation.TwoWay.Capacities,
adjustmentMultipliers: AdjustmentMultiplier? = nil
) {
self.airflow = airflow
self.capacities = capacities
self.adjustmentMultipliers = adjustmentMultipliers
}
public struct Capacities: Codable, Equatable, Sendable {
public let above: CapacityContainer
public let below: CapacityContainer
public init(
above: CoolingInterpolation.TwoWay.Capacities.CapacityContainer,
below: CoolingInterpolation.TwoWay.Capacities.CapacityContainer
) {
self.above = above
self.below = below
}
public struct CapacityContainer: Codable, Equatable, Sendable {
public let outdoorTemperature: Int
public let aboveDewPoint: Capacity.ManufacturersContainer
public let belowDewPoint: Capacity.ManufacturersContainer
public init(
outdoorTemperature: Int,
aboveDewPoint: Capacity.ManufacturersContainer,
belowDewPoint: Capacity.ManufacturersContainer
) {
self.outdoorTemperature = outdoorTemperature
self.aboveDewPoint = aboveDewPoint
self.belowDewPoint = belowDewPoint
}
}
}
}
}