feat: Working on pressure estimations feature, integrating all views and shared settings

This commit is contained in:
2024-06-10 13:34:38 -04:00
parent 51f7a30701
commit a6bfbd6877
15 changed files with 447 additions and 348 deletions

View File

@@ -1,2 +0,0 @@
import Foundation

View File

@@ -1,8 +1,5 @@
import Foundation
#warning("Make values non-optional")
#warning("Need to make air handler external static handle large filter pressure drops.")
#warning("Add an exterenal static pressure strategy for if the filter is built-in or external")
public enum EquipmentMeasurement: Equatable {
case airHandler(AirHandler)
@@ -17,7 +14,7 @@ public enum EquipmentMeasurement: Equatable {
}
}
public var externalStaticPressure: Double {
public var externalStaticPressure: Positive<Double> {
switch self {
case let .airHandler(airHandler):
return airHandler.externalStaticPressure
@@ -26,47 +23,75 @@ public enum EquipmentMeasurement: Equatable {
}
}
public var manufacturersIncludedFilterPressureDrop: Positive<Double> {
switch self {
case let .airHandler(airHandler):
return airHandler.$manufacturersIncludedFilterPressureDrop
case let .furnaceAndCoil(furnaceAndCoil):
return furnaceAndCoil.$manufacturersIncludedFilterPressureDrop
}
}
public struct AirHandler: Equatable {
@Positive
public var airflow: Double?
public var airflow: Double
@Positive
public var returnPlenumPressure: Double?
public var manufacturersIncludedFilterPressureDrop: Double
@Positive
public var returnPlenumPressure: Double
@Positive
public var postFilterPressure: Double?
public var postFilterPressure: Double
@Positive
public var postCoilPressure: Double?
public var postCoilPressure: Double
@Positive
public var supplyPlenumPressure: Double?
public var supplyPlenumPressure: Double
public init(
airflow: Double? = nil,
returnPlenumPressure: Double? = nil,
postFilterPressure: Double? = nil,
postCoilPressure: Double? = nil,
supplyPlenumPressure: Double? = nil
airflow: Double,
manufacturersIncludedFilterPressureDrop: Double,
returnPlenumPressure: Double,
postFilterPressure: Double,
postCoilPressure: Double,
supplyPlenumPressure: Double
) {
self.airflow = airflow
self.manufacturersIncludedFilterPressureDrop = manufacturersIncludedFilterPressureDrop
self.returnPlenumPressure = returnPlenumPressure
self.postFilterPressure = postFilterPressure
self.postCoilPressure = postCoilPressure
self.supplyPlenumPressure = supplyPlenumPressure
}
public var externalStaticPressure: Double {
var postFilterAdder = 0.0
if let postFilterPressure = $postFilterPressure.positiveValue,
postFilterPressure > 0.1
{
postFilterAdder = postFilterPressure - 0.1
public init(
airflow: Positive<Double>,
manufacturersIncludedFilterPressureDrop: Positive<Double>,
returnPlenumPressure: Positive<Double>,
postFilterPressure: Positive<Double>,
postCoilPressure: Positive<Double>,
supplyPlenumPressure: Positive<Double>
) {
self._airflow = airflow
self._manufacturersIncludedFilterPressureDrop = manufacturersIncludedFilterPressureDrop
self._returnPlenumPressure = returnPlenumPressure
self._postFilterPressure = postFilterPressure
self._postCoilPressure = postCoilPressure
self._supplyPlenumPressure = supplyPlenumPressure
}
public var externalStaticPressure: Positive<Double> {
var postFilterAdder = Positive<Double>.zero
if $postFilterPressure > $manufacturersIncludedFilterPressureDrop {
postFilterAdder = $postFilterPressure - $manufacturersIncludedFilterPressureDrop
}
return ($returnPlenumPressure.positiveValue ?? 0)
return $returnPlenumPressure
+ postFilterAdder
+ ($supplyPlenumPressure.positiveValue ?? 0)
+ $supplyPlenumPressure
}
}
@@ -145,7 +170,7 @@ public enum EquipmentMeasurement: Equatable {
.init(
airflow: checkAirflow(value: measurement.airflow, tons: tons),
coilPressureDrop: .init(
wrappedValue: (measurement.$postCoilPressure.positiveValue - measurement.$postFilterPressure.positiveValue) ?? 0,
wrappedValue: (measurement.$postCoilPressure.positiveValue - measurement.$postFilterPressure.positiveValue),
.result(.good())
),
externalStaticPressure: checkExternalStaticPressure(
@@ -155,7 +180,8 @@ public enum EquipmentMeasurement: Equatable {
filterPressureDrop: .init(
value: measurement.$postFilterPressure.positiveValue - measurement.$returnPlenumPressure.positiveValue,
budget: budgets.filterBudget,
ratedPressures: ratedPressures
ratedPressures: ratedPressures,
ignoreMinimum: true
),
returnPlenumPressure: .init(
value: measurement.$returnPlenumPressure.positiveValue,
@@ -163,7 +189,7 @@ public enum EquipmentMeasurement: Equatable {
ratedPressures: ratedPressures
),
supplyPlenumPressure: .init(
value: measurement.$supplyPlenumPressure.positiveValue ?? 0,
value: measurement.$supplyPlenumPressure.positiveValue,
budget: budgets.supplyPlenumBudget,
ratedPressures: ratedPressures
)
@@ -211,61 +237,61 @@ public enum EquipmentMeasurement: Equatable {
public struct FurnaceAndCoil: Equatable {
@Positive
public var airflow: Double?
public var airflow: Double
@Positive
public var returnPlenumPressure: Double?
public var manufacturersIncludedFilterPressureDrop: Double
@Positive
public var returnPlenumPressure: Double
@Positive
public var postFilterPressure: Double?
public var postFilterPressure: Double
@Positive
public var preCoilPressure: Double?
public var preCoilPressure: Double
@Positive
public var supplyPlenumPressure: Double?
public var supplyPlenumPressure: Double
public init(
airflow: Double? = nil,
returnPlenumPressure: Double? = nil,
postFilterPressure: Double? = nil,
preCoilPressure: Double? = nil,
supplyPlenumPressure: Double? = nil
airflow: Double,
manufacturersIncludedFilterPressureDrop: Double,
returnPlenumPressure: Double,
postFilterPressure: Double,
preCoilPressure: Double,
supplyPlenumPressure: Double
) {
self.airflow = airflow
self.manufacturersIncludedFilterPressureDrop = manufacturersIncludedFilterPressureDrop
self.returnPlenumPressure = returnPlenumPressure
self.postFilterPressure = postFilterPressure
self.preCoilPressure = preCoilPressure
self.supplyPlenumPressure = supplyPlenumPressure
}
public var externalStaticPressure: Double {
($postFilterPressure.positiveValue ?? 0) + ($preCoilPressure.positiveValue ?? 0)
public init(
airflow: Positive<Double>,
manufacturersIncludedFilterPressureDrop: Positive<Double>,
returnPlenumPressure: Positive<Double>,
postFilterPressure: Positive<Double>,
preCoilPressure: Positive<Double>,
supplyPlenumPressure: Positive<Double>
) {
self._airflow = airflow
self._manufacturersIncludedFilterPressureDrop = manufacturersIncludedFilterPressureDrop
self._returnPlenumPressure = returnPlenumPressure
self._postFilterPressure = postFilterPressure
self._preCoilPressure = preCoilPressure
self._supplyPlenumPressure = supplyPlenumPressure
}
public var externalStaticPressure: Positive<Double> {
($postFilterPressure - $manufacturersIncludedFilterPressureDrop) + $preCoilPressure
}
}
}
//extension EquipmentMeasurement.AirHandler {
//
// public enum Key: String, Equatable, CaseIterable {
// case returnPlenumPressure
// case postFilterPressure
// case postCoilPressure
// case supplyPlenumPressure
// case airflow
// }
//}
//
//extension EquipmentMeasurement.FurnaceAndCoil {
//
// public enum Key: String, Equatable, CaseIterable {
// case returnPlenumPressure
// case postFilterPressure
// case preCoilPressure
// case supplyPlenumPressure
// case airflow
// }
//}
fileprivate extension Flagged {
init(
@@ -303,11 +329,11 @@ fileprivate extension Flagged {
}
fileprivate func checkExternalStaticPressure(
value: Double,
value: Positive<Double>,
ratedPressures: RatedStaticPressures
) -> Flagged {
.init(
wrappedValue: value,
wrappedValue: value.positiveValue,
.rated(ratedPressures)
)
}
@@ -330,6 +356,7 @@ extension EquipmentMeasurement {
case .airHandler:
return .airHandler(.init(
airflow: 1200,
manufacturersIncludedFilterPressureDrop: 0.1,
returnPlenumPressure: 0.3,
postFilterPressure: 0.6,
postCoilPressure: 0.9,
@@ -339,6 +366,7 @@ extension EquipmentMeasurement {
case .furnaceAndCoil:
return .furnaceAndCoil(.init(
airflow: 1200,
manufacturersIncludedFilterPressureDrop: 0.0,
returnPlenumPressure: 0.3,
postFilterPressure: 0.6,
preCoilPressure: 0.4,

View File

@@ -3,16 +3,16 @@ import Foundation
public struct EquipmentMetadata: Equatable {
public var coolingCapacity: CoolingCapacity
public var fanType: FanType
public var ratedStaticPressure: RatedStaticPressures
public var ratedStaticPressures: RatedStaticPressures
public init(
coolingCapacity: CoolingCapacity = .three,
fanType: FanType = .constantSpeed,
ratedStaticPressure: RatedStaticPressures = .init()
ratedStaticPressures: RatedStaticPressures = .init()
) {
self.coolingCapacity = coolingCapacity
self.fanType = fanType
self.ratedStaticPressure = ratedStaticPressure
self.ratedStaticPressures = ratedStaticPressures
}
public enum CoolingCapacity: Double, Equatable, CaseIterable, Identifiable, CustomStringConvertible {

View File

@@ -1,5 +1,8 @@
import Foundation
/// Represents a number that can be checked if it is within an acceptable range. It can generate errors or warnings depending
/// on the current value.
///
@dynamicMemberLookup
public struct Flagged: Equatable {

View File

@@ -5,6 +5,10 @@ public struct Positive<Value> where Value: Numeric, Value: Comparable {
public var wrappedValue: Value
public init(_ value: Value) {
self.wrappedValue = value
}
public init(wrappedValue: Value) {
self.wrappedValue = wrappedValue
}