feat: Begins room-pressure calculator
This commit is contained in:
126
Sources/Routes/Models/RoomPressure.swift
Normal file
126
Sources/Routes/Models/RoomPressure.swift
Normal file
@@ -0,0 +1,126 @@
|
||||
public enum RoomPressure {
|
||||
|
||||
public enum Mode: String, CaseIterable, Codable, Equatable, Sendable {
|
||||
case knownAirflow
|
||||
case measuredPressure
|
||||
|
||||
public var label: String {
|
||||
switch self {
|
||||
case .knownAirflow: return "Known Airflow"
|
||||
case .measuredPressure: return "Measured Pressure"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum Request: Codable, Equatable, Sendable {
|
||||
case knownAirflow(KnownAirflow)
|
||||
case measuredPressure(MeasuredPressure)
|
||||
|
||||
public struct KnownAirflow: Codable, Equatable, Sendable {
|
||||
|
||||
public let targetRoomPressure: Double
|
||||
public let doorWidth: Double
|
||||
public let doorHeight: Double
|
||||
public let doorUndercut: Double
|
||||
public let supplyAirflow: Double
|
||||
public let preferredGrilleHeight: CommonReturnGrilleHeight
|
||||
|
||||
public init(
|
||||
targetRoomPressure: Double,
|
||||
doorWidth: Double,
|
||||
doorHeight: Double,
|
||||
doorUndercut: Double,
|
||||
supplyAirflow: Double,
|
||||
preferredGrilleHeight: RoomPressure.CommonReturnGrilleHeight
|
||||
) {
|
||||
self.targetRoomPressure = targetRoomPressure
|
||||
self.doorWidth = doorWidth
|
||||
self.doorHeight = doorHeight
|
||||
self.doorUndercut = doorUndercut
|
||||
self.supplyAirflow = supplyAirflow
|
||||
self.preferredGrilleHeight = preferredGrilleHeight
|
||||
}
|
||||
}
|
||||
|
||||
public struct MeasuredPressure: Codable, Equatable, Sendable {
|
||||
|
||||
public let measuredRoomPressure: Double // pascals.
|
||||
public let doorWidth: Double
|
||||
public let doorHeight: Double
|
||||
public let doorUndercut: Double
|
||||
public let preferredGrilleHeight: CommonReturnGrilleHeight
|
||||
|
||||
public init(
|
||||
measuredRoomPressure: Double,
|
||||
doorWidth: Double,
|
||||
doorHeight: Double,
|
||||
doorUndercut: Double,
|
||||
preferredGrilleHeight: RoomPressure.CommonReturnGrilleHeight
|
||||
) {
|
||||
self.measuredRoomPressure = measuredRoomPressure
|
||||
self.doorWidth = doorWidth
|
||||
self.doorHeight = doorHeight
|
||||
self.doorUndercut = doorUndercut
|
||||
self.preferredGrilleHeight = preferredGrilleHeight
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public struct Response: Codable, Equatable, Sendable {
|
||||
|
||||
public let grilleSize: GrilleSize
|
||||
public let ductSize: DuctSize
|
||||
public let calculatedAirflow: Double?
|
||||
public let warnings: [String]
|
||||
|
||||
public init(
|
||||
grilleSize: RoomPressure.Response.GrilleSize,
|
||||
ductSize: RoomPressure.Response.DuctSize,
|
||||
calculatedAirflow: Double? = nil,
|
||||
warnings: [String]
|
||||
) {
|
||||
self.grilleSize = grilleSize
|
||||
self.ductSize = ductSize
|
||||
self.calculatedAirflow = calculatedAirflow
|
||||
self.warnings = warnings
|
||||
}
|
||||
|
||||
public struct DuctSize: Codable, Equatable, Sendable {
|
||||
|
||||
public let diameter: Double
|
||||
public let velocity: Double
|
||||
|
||||
public init(diameter: Double, velocity: Double) {
|
||||
self.diameter = diameter
|
||||
self.velocity = velocity
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public struct GrilleSize: Codable, Equatable, Sendable {
|
||||
|
||||
public let width: Double
|
||||
public let height: Double
|
||||
public let area: Double
|
||||
|
||||
public init(width: Double, height: Double, area: Double) {
|
||||
self.width = width
|
||||
self.height = height
|
||||
self.area = area
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public enum CommonReturnGrilleHeight: Int, CaseIterable, Codable, Equatable, Sendable {
|
||||
case four = 4
|
||||
case six = 6
|
||||
case eight = 8
|
||||
case ten = 10
|
||||
case twelve = 12
|
||||
case fourteen = 14
|
||||
case twenty = 20
|
||||
|
||||
public var label: String { "\(rawValue)\"" }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user