diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_5_SmartAlternatorSetEfficiencyTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_5_SmartAlternatorSetEfficiencyTests.vb index 20056afdd6971d67cc7dee9066cc0c6595355206..5ddfd2cef90ed63e0e9271227f71c28cc069a0d9 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_5_SmartAlternatorSetEfficiencyTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_5_SmartAlternatorSetEfficiencyTests.vb @@ -43,7 +43,7 @@ Namespace UnitTests dim ssmInput As ISSMInputs = SSMInputData.ReadFile(_SSMMAP, utils.GetDefaultVehicleData(), Nothing, DeclarationData.BusAuxiliaries.SSMTechnologyList) - CType(CType(ssmInput, SSMInputs).Vehicle, VehicleData).Height = 0.SI (Of Meter) + 'CType(CType(ssmInput, SSMInputs).Vehicle, VehicleData).Height = 0.SI (Of Meter) Dim ssm As ISSMTOOL = New SSMTOOL(ssmInput) diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb index 90c81129b9c4531880d166a290712d031d9f6609..4858c699523165a79fd5a4dda57d61913ac909b6 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb @@ -37,7 +37,7 @@ Namespace UnitTests Dim ssm As SSMTOOL = New SSMTOOL(auxconfig.SSMInputs) _ ', New HVACConstants()) - CType(CType(ssm.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) + 'CType(CType(ssm.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) 'ssm.Load(_SSMMAP) Return ssm @@ -70,7 +70,7 @@ Namespace UnitTests Public Sub CreateNewTest() Dim auxConfig = utils.GetAuxTestConfig() - CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) + 'CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = powernetVoltage CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =alternatorMap @@ -84,7 +84,7 @@ Namespace UnitTests Dim target As IM0_NonSmart_AlternatorsSetEfficiency Dim auxConfig = utils.GetAuxTestConfig() - CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) + 'CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = powernetVoltage CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =alternatorMap @@ -96,7 +96,7 @@ Namespace UnitTests Public Sub CreateNew_MissingAlternatorMap_ThrowArgumentExceptionTest() Dim target As IM0_NonSmart_AlternatorsSetEfficiency Dim auxConfig = utils.GetAuxTestConfig() - CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) + 'CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = powernetVoltage CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap = Nothing @@ -112,7 +112,7 @@ Namespace UnitTests 'CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).ElectricalConsumers = elecConsumers CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AverageCurrentDemandInclBaseLoad = 0.5.SI(Of Ampere) CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AverageCurrentDemandInclBaseLoad = 0.5.SI(Of Ampere) - CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) + 'CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = powernetVoltage CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =alternatorMap @@ -130,7 +130,7 @@ Namespace UnitTests <Test()> Public Sub HVAC_PowerDemandAmpsTest() Dim auxConfig = utils.GetAuxTestConfig() - CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) + 'CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = powernetVoltage CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =alternatorMap diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M2_AverageElectricalLoadTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M2_AverageElectricalLoadTests.vb index c13e134ed7d7d64941d8b811d09b798df2bfb5b3..0bd4f37c949cd551c30b6e7392fcb1fab7d1586b 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M2_AverageElectricalLoadTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M2_AverageElectricalLoadTests.vb @@ -34,7 +34,7 @@ Namespace UnitTests 'Const _BusDatabase As String ="TestFiles\BusDatabase.abdb Dim ssm As ISSMTOOL = New SSMTOOL(SSMInputData.ReadFile(_SSMMAP, Utils.GetDefaultVehicleData(), Nothing, DeclarationData.BusAuxiliaries.SSMTechnologyList)) - CType(CType(ssm.SSMInputs, SSMInputs).Vehicle, VehicleData).Height = 0.SI(of Meter) + 'CType(CType(ssm.SSMInputs, SSMInputs).Vehicle, VehicleData).Height = 0.SI(of Meter) 'ssm.Load(_SSMMAP) @@ -54,7 +54,7 @@ Namespace UnitTests signals.EngineSpeed = 2000.RPMtoRad() Dim auxConfig = Utils.GetAuxTestConfig() - CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height = 0.SI(of Meter) + 'CType(CType(auxConfig.SSMInputs, SSMInputs).Vehicle, VehicleData).Height = 0.SI(of Meter) Dim altMap As IAlternatorMap = AlternatorReader.ReadMap( "testfiles\testAlternatorMap.aalt") 'altMap.Initialise() diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M5_SmartAlternatorSetGenerationTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M5_SmartAlternatorSetGenerationTests.vb index 3cef3d1c56d9e15e1365eb2190dc26ac7e765d6f..594f999dbbfeb307d2e244f9f980773c336f7dbf 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M5_SmartAlternatorSetGenerationTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M5_SmartAlternatorSetGenerationTests.vb @@ -64,7 +64,7 @@ Namespace UnitTests Dim alternatoMap = AlternatorReader.ReadMap(_altMap) Dim auxConfig = Utils.GetAuxTestConfig() - CType(CType(auxConfig.SSMInputs,SSMInputs).Vehicle, VehicleData).Height = 0.SI(of Meter) + 'CType(CType(auxConfig.SSMInputs,SSMInputs).Vehicle, VehicleData).Height = 0.SI(of Meter) CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = _powerNetVoltage CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap = alternatoMap diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/SSMTOOLTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/SSMTOOLTests.vb index 82481f1bff8f693debdd09ecc4de0782420f097e..e8db0c7361f37bdde1c10764ee9f4616cfe69030 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/SSMTOOLTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/SSMTOOLTests.vb @@ -87,12 +87,12 @@ Namespace UnitTests '******************** Assert.AreEqual(47, target.BusParameters.NumberOfPassengers) Assert.AreEqual(FloorType.HighFloor, target.BusParameters.BusFloorType) - Assert.AreEqual(24.1102486R, target.BusParameters.BusFloorSurfaceArea.Value(), 2) + 'Assert.AreEqual(24.1102486R, target.BusParameters.BusFloorSurfaceArea.Value(), 2) Assert.AreEqual(114.42325R, target.BusParameters.BusSurfaceArea.Value()) Assert.AreEqual(20.98R, Math.Round(target.BusParameters.BusWindowSurface.Value(), 2)) - Assert.AreEqual(61.81231875D, Math.Round(target.BusParameters.BusVolume.Value(), 8)) - Assert.AreEqual(10.655R, target.BusParameters.BusLength.Value()) - Assert.AreEqual(2.55R, target.BusParameters.BusWidth.Value()) + 'Assert.AreEqual(61.81231875D, Math.Round(target.BusParameters.BusVolume.Value(), 8)) + 'Assert.AreEqual(10.655R, target.BusParameters.BusLength.Value()) + 'Assert.AreEqual(2.55R, target.BusParameters.BusWidth.Value()) End If If section = "BoundaryConditions" Then @@ -103,10 +103,10 @@ Namespace UnitTests Assert.AreEqual(80, target.BoundaryConditions.HeatPerPassengerIntoCabin(20.0.DegCelsiusToKelvin()).Value()) 'Assert.AreEqual(12, target.BoundaryConditions.PassengerBoundaryTemperature.AsDegCelsius) - Assert.AreEqual(3.0R, target.BusParameters.PassengerDensityLowFloor.Value()) - Assert.AreEqual(2.2R, target.BusParameters.PassengerDensitySemiLowFloor.Value()) - Assert.AreEqual(1.4R, target.BusParameters.PassengerDensityRaisedFloor.Value()) - Assert.AreEqual(34.0R, Math.Round(target.BusParameters.CalculatedPassengerNumber, 4)) + 'Assert.AreEqual(3.0R, target.BusParameters.PassengerDensityLowFloor.Value()) + 'Assert.AreEqual(2.2R, target.BusParameters.PassengerDensitySemiLowFloor.Value()) + 'Assert.AreEqual(1.4R, target.BusParameters.PassengerDensityRaisedFloor.Value()) + 'Assert.AreEqual(34.0R, Math.Round(target.BusParameters.CalculatedPassengerNumber, 4)) Assert.AreEqual(3.0R, target.BoundaryConditions.UValue.Value()) Assert.AreEqual(18, target.BoundaryConditions.HeatingBoundaryTemperature.AsDegCelsius) Assert.AreEqual(23, target.BoundaryConditions.CoolingBoundaryTemperature.AsDegCelsius) @@ -120,8 +120,8 @@ Namespace UnitTests Assert.AreEqual(0.84, target.BoundaryConditions.AuxHeaterEfficiency) Assert.AreEqual(42700.0/3600.0, target.BoundaryConditions.GCVDieselOrHeatingOil.Value()/3600.0/1000.0) 'Assert.AreEqual(11.8, target.BoundaryConditions.GCVDieselOrHeatingOil.Value()/3600.0/1000.0) - Assert.AreEqual(1.5R, target.BoundaryConditions.WindowAreaPerUnitBusLength.Value()) - Assert.AreEqual(5, target.BoundaryConditions.FrontRearWindowArea.Value()) + 'Assert.AreEqual(1.5R, target.BoundaryConditions.WindowAreaPerUnitBusLength.Value()) + 'Assert.AreEqual(5, target.BoundaryConditions.FrontRearWindowArea.Value()) Assert.AreEqual(3, target.BoundaryConditions.MaxTemperatureDeltaForLowFloorBusses.Value()) Assert.AreEqual(0.5R, target.BoundaryConditions.MaxPossibleBenefitFromTechnologyList) End If @@ -168,7 +168,7 @@ Namespace UnitTests Public Sub Instantiate_TechListTest() - Dim gen As ISSMInputs = New SSMInputs(Utils.GetDefaultVehicleData(), Nothing) + Dim gen As ISSMInputs = New SSMInputs(Nothing) Dim target As ISSMTechList = New SSMTechList(gen.BusParameters.BusFloorType) target.TechLines = SSMTechnologiesReader.ReadFromFile(GOODTechList).Items @@ -181,7 +181,7 @@ Namespace UnitTests Public Sub Instantiate_TechListTestALLON() - Dim gen As ISSMInputs = New SSMInputs(Utils.GetDefaultVehicleData(), Nothing) + Dim gen As ISSMInputs = New SSMInputs(Nothing) Dim target As ISSMTechList = New SSMTechList(gen.BusParameters.BusFloorType) target.TechLines = SSMTechnologiesReader.ReadFromFile(GOODTechListALLON).Items @@ -209,7 +209,7 @@ Namespace UnitTests Public Sub Instantiate_TechListTestEMPTYList() - Dim gen As ISSMInputs = New SSMInputs(Utils.GetDefaultVehicleData(), Nothing) + Dim gen As ISSMInputs = New SSMInputs(Nothing) Dim target As ISSMTechList = New SSMTechList(gen.BusParameters.BusFloorType) target.TechLines = SSMTechnologiesReader.ReadFromFile(GOODTechListEMPTYLIST).Items @@ -223,7 +223,7 @@ Namespace UnitTests Public Sub Instantiate_TechListTestEMPTYListADD1() - Dim gen As ISSMInputs = New SSMInputs(Utils.GetDefaultVehicleData(), Nothing) + Dim gen As ISSMInputs = New SSMInputs(Nothing) Dim target As ISSMTechList = New SSMTechList(gen.BusParameters.BusFloorType) target.TechLines = SSMTechnologiesReader.ReadFromFile(GOODTechListEMPTYLIST).Items @@ -264,7 +264,7 @@ Namespace UnitTests Public Sub Instantiate_TechListTestEMPTYListADD1Duplicate() - Dim gen As ISSMInputs = New SSMInputs(Utils.GetDefaultVehicleData(), Nothing) + Dim gen As ISSMInputs = New SSMInputs(Nothing) Dim target As ISSMTechList = New SSMTechList(gen.BusParameters.BusFloorType) target.TechLines = SSMTechnologiesReader.ReadFromFile(GOODTechListEMPTYLIST).Items @@ -306,7 +306,7 @@ Namespace UnitTests Public Sub Instantiate_TechListTestEMPTYListADD1AndClear() - Dim gen As ISSMInputs = New SSMInputs(Utils.GetDefaultVehicleData(), Nothing) + Dim gen As ISSMInputs = New SSMInputs(Nothing) Dim target As ISSMTechList = New SSMTechList(gen.BusParameters.BusFloorType) target.TechLines = SSMTechnologiesReader.ReadFromFile(GOODTechListEMPTYLIST).Items @@ -348,7 +348,7 @@ Namespace UnitTests Public Sub Instantiate_TechListTestEMPTYListADD1AndModify() - Dim gen As ISSMInputs = New SSMInputs(Utils.GetDefaultVehicleData(), Nothing) + Dim gen As ISSMInputs = New SSMInputs(Nothing) Dim target As ISSMTechList = New SSMTechList(gen.BusParameters.BusFloorType) target.TechLines = SSMTechnologiesReader.ReadFromFile(GOODTechListEMPTYLIST).Items @@ -390,7 +390,7 @@ Namespace UnitTests Public Sub Instantiate_TechListTestEMPTYListADD1andDeleteIt() - Dim gen As ISSMInputs = New SSMInputs(Utils.GetDefaultVehicleData(), Nothing) + Dim gen As ISSMInputs = New SSMInputs(Nothing) Dim target As ISSMTechList = New SSMTechList(gen.BusParameters.BusFloorType) target.TechLines = SSMTechnologiesReader.ReadFromFile(GOODTechListEMPTYLIST).Items @@ -430,7 +430,7 @@ Namespace UnitTests Public Sub Instantiate_TechListTestEMPTYListandDeleteNonExistantItem() - Dim gen As ISSMInputs = New SSMInputs(Utils.GetDefaultVehicleData(), Nothing) + Dim gen As ISSMInputs = New SSMInputs(Nothing) Dim target As ISSMTechList = New SSMTechList(gen.BusParameters.BusFloorType) target.TechLines = SSMTechnologiesReader.ReadFromFile(GOODTechListEMPTYLIST).Items @@ -467,7 +467,7 @@ Namespace UnitTests <Test()> Public Sub Instantiate_NewTechListLine() - Dim gen As ISSMInputs = New SSMInputs(Utils.GetDefaultVehicleData(), Nothing) + Dim gen As ISSMInputs = New SSMInputs(Nothing) Dim ttl As ISSMTechnology = New SSMTechnology() ttl.BusFloorType = gen.BusParameters.BusFloorType @@ -478,7 +478,7 @@ Namespace UnitTests <Test()> Public Sub TechBenefitLineCompareAsEqual() - Dim gen As ISSMInputs = New SSMInputs(Utils.GetDefaultVehicleData(), Nothing) + Dim gen As ISSMInputs = New SSMInputs(Nothing) Dim ttl1 As ISSMTechnology = New SSMTechnology() ttl1.BusFloorType = gen.BusParameters.BusFloorType @@ -509,7 +509,7 @@ Namespace UnitTests <TestCase("OnVehicle")> Public Sub TechBenefitLineCompareAsUnequal(prop As String) - Dim gen As ISSMInputs = New SSMInputs(Utils.GetDefaultVehicleData(), Nothing) + Dim gen As ISSMInputs = New SSMInputs(Nothing) Dim ttl1 As ISSMTechnology = New SSMTechnology() ttl1.BusFloorType = gen.BusParameters.BusFloorType diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb index d74dd17674ca7c46aae72159fe3d3ba5aba1a223..398f2232830f11fd61750aa50695003b2f8ebb45 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb @@ -115,7 +115,7 @@ Public Class Utils .SmartAirCompression = False, .SmartRegeneration = False }, - .SSMInputs = New SSMInputs(vehicleData, Nothing, heatingFuel) With { + .SSMInputs = New SSMInputs(Nothing, heatingFuel) With { .Technologies = DeclarationData.BusAuxiliaries.SSMTechnologyList, .DefaultConditions = New EnvironmentalConditionMapEntry(25.0.DegCelsiusToKelvin(), 400.SI (Of WattPerSquareMeter), 1.0), diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs b/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs index 2a1a2894d633142fb2a1b080d6167ad34367b1f0..0c496274ec05d5916194a6024c453c6ed429fe7c 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using TUGraz.VectoCommon.Utils; @@ -27,24 +28,24 @@ namespace TUGraz.VectoCommon.BusAuxiliaries public interface ISSMBusParameters { // Bus Parameterisation - string BusModel { get; } + //string BusModel { get; } double NumberOfPassengers { get; } FloorType BusFloorType { get; } - bool DoubleDecker { get; } - Meter BusLength { get; } - Meter BusWidth { get; } - Meter BusHeight { get; } + //bool DoubleDecker { get; } + //Meter BusLength { get; } + //Meter BusWidth { get; } + //Meter BusHeight { get; } - SquareMeter BusFloorSurfaceArea { get; } + //SquareMeter BusFloorSurfaceArea { get; } SquareMeter BusWindowSurface { get; } SquareMeter BusSurfaceArea { get; } - CubicMeter BusVolume { get; } + //CubicMeter BusVolume { get; } - PerSquareMeter PassengerDensityLowFloor { get; } - PerSquareMeter PassengerDensitySemiLowFloor { get; } - PerSquareMeter PassengerDensityRaisedFloor { get; } - double CalculatedPassengerNumber { get; } + //PerSquareMeter PassengerDensityLowFloor { get; } + //PerSquareMeter PassengerDensitySemiLowFloor { get; } + //PerSquareMeter PassengerDensityRaisedFloor { get; } + //double CalculatedPassengerNumber { get; } } public interface ISSMBoundaryConditions @@ -65,8 +66,8 @@ namespace TUGraz.VectoCommon.BusAuxiliaries JoulePerCubicMeter SpecificVentilationPower { get; } double AuxHeaterEfficiency { get; } JoulePerKilogramm GCVDieselOrHeatingOil { get; } - SquareMeterPerMeter WindowAreaPerUnitBusLength { get; } - SquareMeter FrontRearWindowArea { get; } + //SquareMeterPerMeter WindowAreaPerUnitBusLength { get; } + //SquareMeter FrontRearWindowArea { get; } Kelvin MaxTemperatureDeltaForLowFloorBusses { get; } double MaxPossibleBenefitFromTechnologyList { get; } } @@ -105,15 +106,11 @@ namespace TUGraz.VectoCommon.BusAuxiliaries //VentilationLevel VentilationDuringCooling { get; } } - public enum VentilationLevel - { - Low, - High - } - + public enum ACCompressorType { Unknown, + None, TwoStage, ThreeStage, FourStage, @@ -151,6 +148,27 @@ namespace TUGraz.VectoCommon.BusAuxiliaries { return type != ACCompressorType.Continuous; } + + public static double COP(this ACCompressorType type, FloorType floortype) + { + var cop = 3.5; + + switch (type) { + case ACCompressorType.None: + case ACCompressorType.Unknown: + return 0; + case ACCompressorType.TwoStage: + return cop; + case ACCompressorType.ThreeStage: + case ACCompressorType.FourStage: + return cop * 1.02; + case ACCompressorType.Continuous: + return floortype == FloorType.LowFloor + ? cop * 1.04 + : cop * 1.06; + default: throw new ArgumentOutOfRangeException(); + } + } } public interface IAuxHeater diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs index 0cad7de93e807c58801b14f85fecb11f8b2293b1..a8b41009b7faf84236d4bf97988359cec2a09635 100644 --- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs +++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs @@ -45,6 +45,7 @@ namespace TUGraz.VectoCommon.InputData XElement XMLHash { get; } } + public interface IEngineeringInputDataProvider : IInputDataProvider { IEngineeringJobInputData JobInputData { get; } diff --git a/VectoCommon/VectoCommon/Utils/SI.cs b/VectoCommon/VectoCommon/Utils/SI.cs index dbafb57387d288c95f4654230569e5c7c9fe7256..c2819c156e45500a29cd3cce2a3e7ec3c35271f2 100644 --- a/VectoCommon/VectoCommon/Utils/SI.cs +++ b/VectoCommon/VectoCommon/Utils/SI.cs @@ -486,6 +486,11 @@ namespace TUGraz.VectoCommon.Utils [DebuggerHidden] private SquareMeter(double value) : base(value, Units) { } + + public static double operator *(SquareMeter sqm, PerSquareMeter psqm) + { + return sqm.Val * psqm.Value(); + } } /// <summary> diff --git a/VectoCore/VectoCore/Configuration/Constants.cs b/VectoCore/VectoCore/Configuration/Constants.cs index e7fde64536e527a3f9a40de4d70c88701397caf4..cbf706f21aee0a7390765b99d6cba95295daca9e 100644 --- a/VectoCore/VectoCore/Configuration/Constants.cs +++ b/VectoCore/VectoCore/Configuration/Constants.cs @@ -196,6 +196,13 @@ namespace TUGraz.VectoCore.Configuration public static readonly Kilogram PassengerWeightLow = 68.SI<Kilogram>(); public static readonly Kilogram PassengerWeightHigh = 71.SI<Kilogram>(); + public static readonly Meter WindowHeightSingleDecker = 1.5.SI<Meter>(); + public static readonly Meter WindowHeightDoubleDecker = 2.5.SI<Meter>(); + + public static readonly SquareMeter FrontAndRearWindowAreaSingleDecker = 5.SI<SquareMeter>(); + public static readonly SquareMeter FrontAndRearWindowAreaDoubleDecker = 8.SI<SquareMeter>(); + + public static class Auxiliaries { public static class SteeringPump diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs index 96da2833e55faa1472b7bbc63acb61f499694fc3..258f23b35e9153b7d95cf15338c3835bcd6a17cf 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs @@ -42,7 +42,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON }; //ActuationsMapReader.Read(Path.Combine(baseDir, data.GetEx<string>("ActuationsMap"))); var ssm = string.IsNullOrWhiteSpace(data["SSMFilePath"]?.ToString()) ? - new SSMInputs(vehicleData, "", FuelData.Diesel) { + new SSMInputs("", FuelData.Diesel) { EnvironmentalConditionsMap = env, Technologies = techList } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/SSMInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/SSMInputData.cs index fcf9255eaeb02ab580a1db5705c497ab7f36f964..27e57c0bd17b2435b889b6e24dd9632f83b759d1 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/SSMInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/SSMInputData.cs @@ -35,7 +35,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON { var genInput = ((JObject)body["SSMInputs"]); - var retVal = new SSMInputs(vehicleData, fileName); + var retVal = new SSMInputs(fileName); retVal.SSMDisabled = body.GetEx<bool>("SSMDisabled"); retVal.GFactor = genInput.GetEx<double>("BC_GFactor"); diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs index 45212559c592ecf90d12e0e81cbda005b534e40d..14701bb6e616b4a9a09a6878bbf67fc9dba83303 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs @@ -180,7 +180,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter if ("f_IntLight(L_CoC)".Equals(nbr, StringComparison.InvariantCultureIgnoreCase)) { var busParams = mission.BusParameter; return DeclarationData.BusAuxiliaries.CalculateLengthInteriorLights( - busParams.VehicleLength, busParams.DoubleDecker, busParams.FloorType, busParams.NumberPassengersLowerDeck).Value(); + busParams.VehicleLength, busParams.DoubleDecker, busParams.FloorType, busParams.NumberPassengersLowerDeck) + .Value(); } return nbr.ToDouble(); @@ -239,9 +240,16 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter RessourceHelper.ReadStream(DeclarationData.DeclarationDataResourcePrefix + ".VAUXBuses." + resource)); } - public virtual ISSMInputs CreateSSMModelParameters(IVehicleData vehicleData, Mission mission, IFuelProperties heatingFuel) + public virtual ISSMInputs CreateSSMModelParameters( + IVehicleData vehicleData, Mission mission, IFuelProperties heatingFuel) { - var retVal = new SSMInputs(vehicleData, null, heatingFuel) { + var busParams = mission.BusParameter; + + var hvacBusLength = busParams.HVACConfiguration == BusHVACSystemConfiguration.Configuration2 + ? 2 * Constants.BusParameters.DriverCompartmentLength + : busParams.VehicleLength; + var coolingPower = CalculateMaxCoolingPower(vehicleData, mission); + var retVal = new SSMInputs(null, heatingFuel) { Technologies = DeclarationData.BusAuxiliaries.SSMTechnologyList, DefaultConditions = new EnvironmentalConditionMapEntry( Constants.BusAuxiliaries.SteadyStateModel.DefaultTemperature, @@ -255,11 +263,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter //LowVentilation = Constants.BusAuxiliaries.SteadyStateModel.LowVentilation, SpecificVentilationPower = Constants.BusAuxiliaries.SteadyStateModel.SpecificVentilationPower, - HVACMaxCoolingPower = CalculateMaxCoolingPower(vehicleData, mission), - HVACCompressorType = mission.BusParameter.HVACCompressorType, - AuxHeaterEfficiency = Constants.BusAuxiliaries.SteadyStateModel.AuxHeaterEfficiency, - FuelFiredHeaterPower = mission.BusParameter.HVACAuxHeaterPower, + FuelFiredHeaterPower = busParams.HVACAuxHeaterPower, FuelEnergyToHeatToCoolant = Constants.BusAuxiliaries.Heater.FuelEnergyToHeatToCoolant, CoolantHeatTransferredToAirCabinHeater = Constants.BusAuxiliaries.Heater.CoolantHeatTransferredToAirCabinHeater, GFactor = Constants.BusAuxiliaries.SteadyStateModel.GFactor, @@ -273,14 +278,31 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter MaxPossibleBenefitFromTechnologyList = Constants.BusAuxiliaries.SteadyStateModel.MaxPossibleBenefitFromTechnologyList, + BusWindowSurface = DeclarationData.BusAuxiliaries.WindowHeight(busParams.DoubleDecker) * hvacBusLength + + DeclarationData.BusAuxiliaries.FrontAndRearWindowArea(busParams.DoubleDecker), + BusSurfaceArea = 2 * (hvacBusLength * busParams.VehicleWidth + hvacBusLength * mission.VehicleHeight + + busParams.VehicleWidth * mission.VehicleHeight), + BusVolume = hvacBusLength * busParams.VehicleWidth * mission.VehicleHeight, + + UValue = DeclarationData.BusAuxiliaries.UValue(busParams.FloorType), + NumberOfPassengers = + DeclarationData.BusAuxiliaries.CalculateBusFloorSurfaceArea(hvacBusLength, busParams.VehicleWidth) * + busParams.PassengerDensity + 1, // add driver for 'heat input' + VentilationRate = DeclarationData.BusAuxiliaries.VentilationRate(busParams.HVACConfiguration), + + HVACMaxCoolingPower = coolingPower.Item1 + coolingPower.Item2, + HVACCompressorType = busParams.HVACCompressorType, + COP = DeclarationData.BusAuxiliaries.CalculateCOP( + coolingPower.Item1, ACCompressorType.None, coolingPower.Item2, busParams.HVACCompressorType, + busParams.FloorType), }; - DeclarationData.BusAuxiliaries.SetHVACParameters(retVal, mission.BusParameter.HVACConfiguration); + //SetHVACParameters(retVal, vehicleData, mission); return retVal; } - private Watt CalculateMaxCoolingPower(IVehicleData vehicleData, Mission mission) + private Tuple<Watt, Watt> CalculateMaxCoolingPower(IVehicleData vehicleData, Mission mission) { var busParams = mission.BusParameter; @@ -297,7 +319,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter var passenger = DeclarationData.BusAuxiliaries.HVACMaxCoolingPower.PassengerMaxCoolingPower( busParams.HVACConfiguration, mission.MissionType, volume); - return driver + passenger; + return Tuple.Create(driver, passenger); } public virtual IPneumaticsConsumersDemand CreatePneumaticAuxConfig(RetarderType retarderType) diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs index 4dba0350888c07b9586704d4402b8a5cc0de620a..22e17d65f2e5f5c127a0130a12ebe1604af254a7 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs @@ -13,101 +13,99 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC { private IFuelProperties HeatingFuel; - public SSMInputs(IVehicleData vehicle, string source, IFuelProperties heatingFuel = null) + public SSMInputs(string source, IFuelProperties heatingFuel = null) { - Vehicle = vehicle; Source = source; HeatingFuel = heatingFuel ?? FuelData.Diesel; } public string Source { get; } - public IVehicleData Vehicle { get; } + //public IVehicleData Vehicle { get; } public bool SSMDisabled { get; set; } // C4/D4 - public string BusModel - { - get { return Vehicle.ModelName; } - } + //public string BusModel + //{ + // get { return Vehicle.ModelName; } + //} // C5/D5 public double NumberOfPassengers { - get { return Vehicle.PassengerCount; } + get; + internal set; + + //get { return Vehicle.PassengerCount; } } // C6/D6 - public FloorType BusFloorType - { - get { return Vehicle.FloorType; } - } + public FloorType BusFloorType { get; internal set; } // C10/D10 - public bool DoubleDecker - { - get { return Vehicle.DoubleDecker; } - } + //public bool DoubleDecker + //{ + // get { return Vehicle.DoubleDecker; } + //} // D12/C12 - ( M ) - public Meter BusLength - { - get { return Vehicle.Length; } - } + //public Meter BusLength + //{ + // get { return Vehicle.Length; } + //} - // D13/C13 - ( M ) - public Meter BusWidth - { - get { return Vehicle.Width; } - } + //// D13/C13 - ( M ) + //public Meter BusWidth + //{ + // get { return Vehicle.Width; } + //} - // D14/C14 - ( M ) - public Meter BusHeight - { - get { return Vehicle.Height; } - } + //// D14/C14 - ( M ) + //public Meter BusHeight + //{ + // get { return Vehicle.Height; } + //} // D7/C7 - ( M/2 ) - public SquareMeter BusFloorSurfaceArea - { - get { - // =IF(AND(C6="low floor",C13<=2.55,C13>=2.5),(2.55*(C12-1.2)),((C12-1.2)*C13)) - if (BusFloorType == FloorType.LowFloor && BusWidth <= 2.55 && BusWidth >= 2.5) { - return 2.55.SI<Meter>() * (BusLength - 1.2.SI<Meter>()); - } + //public SquareMeter BusFloorSurfaceArea + //{ + // get { + // // =IF(AND(C6="low floor",C13<=2.55,C13>=2.5),(2.55*(C12-1.2)),((C12-1.2)*C13)) + // if (BusFloorType == FloorType.LowFloor && BusWidth <= 2.55 && BusWidth >= 2.5) { + // return 2.55.SI<Meter>() * (BusLength - 1.2.SI<Meter>()); + // } - return ((BusLength - 1.2.SI<Meter>()) * BusWidth); - } - } + // return ((BusLength - 1.2.SI<Meter>()) * BusWidth); + // } + //} // D8/C8 - ( M/2 ) public SquareMeter BusSurfaceArea { - get { - // 2 * (C12*C13 + C12*C14 + C13*C14) - return 2 * ((BusLength * BusWidth) + (BusLength * BusHeight) + (BusWidth * BusHeight)); - } + get; + internal set; + + //get { + // // 2 * (C12*C13 + C12*C14 + C13*C14) + // return 2 * ((BusLength * BusWidth) + (BusLength * BusHeight) + (BusWidth * BusHeight)); + //} } // D9/C9 - ( M/2 ) - public SquareMeter BusWindowSurface - { - get { - // =(C40*C12)+C41 - return (WindowAreaPerUnitBusLength * BusLength) + FrontRearWindowArea; - } - } + public SquareMeter BusWindowSurface { get; internal set; } // D11/C11 - ( M/3 ) public CubicMeter BusVolume { - get { - // =(C12*C13*C14) - return BusLength * BusWidth * BusHeight; - } + get; internal set; + + //get { + // // =(C12*C13*C14) + // return BusLength * BusWidth * BusHeight; + //} } @@ -140,54 +138,57 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC //public Kelvin PassengerBoundaryTemperature { get; set; } // C21 - ( Passenger/Metre Squared ) - public PerSquareMeter PassengerDensityLowFloor - { - get { - // =IF($C$10="No",3,3.7) - return (DoubleDecker ? 3.7 : 3).SI<PerSquareMeter>(); - } - } + //public PerSquareMeter PassengerDensityLowFloor + //{ + // get { + // // =IF($C$10="No",3,3.7) + // return (DoubleDecker ? 3.7 : 3).SI<PerSquareMeter>(); + // } + //} - // C22 - ( Passenger/Metre Squared ) - public PerSquareMeter PassengerDensitySemiLowFloor - { - get { - // =IF($C$10="No",2.2,3) - return (DoubleDecker ? 3 : 2.2).SI<PerSquareMeter>(); - } - } + //// C22 - ( Passenger/Metre Squared ) + //public PerSquareMeter PassengerDensitySemiLowFloor + //{ + // get { + // // =IF($C$10="No",2.2,3) + // return (DoubleDecker ? 3 : 2.2).SI<PerSquareMeter>(); + // } + //} - // C23 - ( Passenger/Metre Squared ) - public PerSquareMeter PassengerDensityRaisedFloor - { - get { - // =IF($C$10="No",1.4,2) - return (DoubleDecker ? 2 : 1.4).SI<PerSquareMeter>(); - } - } + //// C23 - ( Passenger/Metre Squared ) + //public PerSquareMeter PassengerDensityRaisedFloor + //{ + // get { + // // =IF($C$10="No",1.4,2) + // return (DoubleDecker ? 2 : 1.4).SI<PerSquareMeter>(); + // } + //} - // C24 - public double CalculatedPassengerNumber - { - get { - // =ROUND(IF($D$5<IF(D6="low floor",C21,IF(D6="semi low floor",C22,C23))*D7,$D$5,IF(D6="low floor",C21,IF(D6="semi low floor",C22,C23))*D7),0) - var tmp = (BusFloorType == FloorType.LowFloor - ? PassengerDensityLowFloor - : BusFloorType == FloorType.SemiLowFloor - ? PassengerDensitySemiLowFloor - : PassengerDensityRaisedFloor) * BusFloorSurfaceArea; - return Math.Round(NumberOfPassengers < tmp ? NumberOfPassengers : tmp.Value(), 0); - } - } + //// C24 + //public double CalculatedPassengerNumber + //{ + // get { + // // =ROUND(IF($D$5<IF(D6="low floor",C21,IF(D6="semi low floor",C22,C23))*D7,$D$5,IF(D6="low floor",C21,IF(D6="semi low floor",C22,C23))*D7),0) + // var tmp = (BusFloorType == FloorType.LowFloor + // ? PassengerDensityLowFloor + // : BusFloorType == FloorType.SemiLowFloor + // ? PassengerDensitySemiLowFloor + // : PassengerDensityRaisedFloor) * BusFloorSurfaceArea; + // return Math.Round(NumberOfPassengers < tmp ? NumberOfPassengers : tmp.Value(), 0); + // } + //} // C25 - ( W/K/M3 ) public WattPerKelvinSquareMeter UValue { - get { - // =IF(D6="low floor",4,IF(D6="semi low floor",3.5,3)) - return (BusFloorType == FloorType.LowFloor ? 4 : BusFloorType == FloorType.SemiLowFloor ? 3.5 : 3) - .SI<WattPerKelvinSquareMeter>(); - } + get; + internal set; + + //get { + // // =IF(D6="low floor",4,IF(D6="semi low floor",3.5,3)) + // return (BusFloorType == FloorType.LowFloor ? 4 : BusFloorType == FloorType.SemiLowFloor ? 3.5 : 3) + // .SI<WattPerKelvinSquareMeter>(); + //} } // C26 - ( oC ) @@ -254,22 +255,22 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC public JoulePerKilogramm GCVDieselOrHeatingOil { get { return HeatingFuel.LowerHeatingValueVecto; } } // C40 - ( M2/M ) - public SquareMeterPerMeter WindowAreaPerUnitBusLength - { - get { - // =IF($C$10="No",1.5,2.5) - return (DoubleDecker ? 2.5 : 1.5).SI<SquareMeterPerMeter>(); - } - } + //public SquareMeterPerMeter WindowAreaPerUnitBusLength + //{ + // get { + // // =IF($C$10="No",1.5,2.5) + // return (DoubleDecker ? 2.5 : 1.5).SI<SquareMeterPerMeter>(); + // } + //} - // C41 - ( M/2 ) - public SquareMeter FrontRearWindowArea - { - get { - // =IF($C$10="No",5,8) - return (DoubleDecker ? 8 : 5).SI<SquareMeter>(); - } - } + //// C41 - ( M/2 ) + //public SquareMeter FrontRearWindowArea + //{ + // get { + // // =IF($C$10="No",5,8) + // return (DoubleDecker ? 8 : 5).SI<SquareMeter>(); + // } + //} // C42 - ( K ) public Kelvin MaxTemperatureDeltaForLowFloorBusses @@ -311,28 +312,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC public Watt HVACMaxCoolingPower { get; set; } // C59 - public double COP - { - get { - var cop = 3.5; - - switch (HVACCompressorType) { - case ACCompressorType.TwoStage: break; - case ACCompressorType.ThreeStage: - case ACCompressorType.FourStage: - cop = cop * 1.02; - break; - case ACCompressorType.Continuous: - cop = BusFloorType == FloorType.LowFloor - ? cop * 1.04 - : cop * 1.06; - break; - default: throw new ArgumentOutOfRangeException(); - } - - return Math.Round(cop, 2); - } - } + public double COP { get; set; } // C62 - Boolean Yes/No diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMRun.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMRun.cs index c37e9a1222ccfa6f44bcd8c7be371198330d46a2..047751b42e56df36ac0536d9d424f9e6a1af05fe 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMRun.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMRun.cs @@ -61,7 +61,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC var qWall = (enviromentalTemperature - TCalc(enviromentalTemperature)) * gen.BusParameters.BusSurfaceArea * gen.BoundaryConditions.UValue; - var wattsPerPass = Math.Min(gen.BusParameters.NumberOfPassengers, gen.BusParameters.CalculatedPassengerNumber) * + var wattsPerPass = gen.BusParameters.NumberOfPassengers * gen.BoundaryConditions.HeatPerPassengerIntoCabin(enviromentalTemperature); var solar = solarFactor * gen.BusParameters.BusWindowSurface * gen.BoundaryConditions.GFactor * gen.BoundaryConditions.SolarClouding(enviromentalTemperature) * 0.25; diff --git a/VectoCore/VectoCore/Models/Declaration/BusSegments.cs b/VectoCore/VectoCore/Models/Declaration/BusSegments.cs index e75901dbc137f208beeb3c42f396f015617efd4f..db3fbf901bc2303fe605399192584236f7030bf9 100644 --- a/VectoCore/VectoCore/Models/Declaration/BusSegments.cs +++ b/VectoCore/VectoCore/Models/Declaration/BusSegments.cs @@ -97,10 +97,10 @@ namespace TUGraz.VectoCore.Models.Declaration continue; } - var busArea = (row.ParseDouble("length").SI<Meter>() - Constants.BusParameters.DriverCompartmentLength) * - row.ParseDouble("width").SI<Meter>(); + var busFloorArea = DeclarationData.BusAuxiliaries.CalculateBusFloorSurfaceArea(row.ParseDouble("length").SI<Meter>(), + row.ParseDouble("width").SI<Meter>()); var passengerDensity = row.ParseDouble(missionType.ToString()).SI<PerSquareMeter>(); - var passengerCount = (busArea * passengerDensity).Value(); + var passengerCount = busFloorArea * passengerDensity; // weight of driver is included in curb mass var refLoad = passengerCount * missionType.GetAveragePassengerMass(); var mission = new Mission { MissionType = missionType, @@ -126,6 +126,7 @@ namespace TUGraz.VectoCore.Models.Declaration VehicleWidth = row.ParseDouble("width").SI<Meter>(), NumberPassengersLowerDeck = row.ParseDouble("passengerslowerdeck"), NumberPassengersUpperDeck = row.ParseDouble("passengersupperdeck"), + PassengerDensity = passengerDensity, DoubleDecker = row.ParseBoolean("doubledecker"), FloorType = GetFloorType(row.Field<string>("floortype")), HVACConfiguration = BusHVACSystemConfigurationHelper.Parse(row.Field<string>("hvaccompressortype")), diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs index 24ed580c94553dbaece2f6983017cecf98481100..d4f0076b5f31be1f372f850fe2db7847a9ca4db6 100644 --- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs @@ -197,14 +197,15 @@ namespace TUGraz.VectoCore.Models.Declaration get { return hvacMaxCoolingPower ?? (hvacMaxCoolingPower = new HVACCoolingPower()); } } - public static void SetHVACParameters(SSMInputs ssmInputs, BusHVACSystemConfiguration hvacSystemConfig) + public static PerSecond VentilationRate(BusHVACSystemConfiguration hvacSystemConfig) { + switch (hvacSystemConfig) { - case BusHVACSystemConfiguration.Unknown: break; + case BusHVACSystemConfiguration.Configuration1: case BusHVACSystemConfiguration.Configuration2: - ssmInputs.VentilationRate = Constants.BusAuxiliaries.SteadyStateModel.LowVentilation; - break; + return Constants.BusAuxiliaries.SteadyStateModel.LowVentilation; + case BusHVACSystemConfiguration.Configuration3: case BusHVACSystemConfiguration.Configuration4: case BusHVACSystemConfiguration.Configuration5: @@ -212,18 +213,19 @@ namespace TUGraz.VectoCore.Models.Declaration case BusHVACSystemConfiguration.Configuration7: case BusHVACSystemConfiguration.Configuration8: case BusHVACSystemConfiguration.Configuration9: - ssmInputs.VentilationRate = Constants.BusAuxiliaries.SteadyStateModel.HighVentilation; - break; + return Constants.BusAuxiliaries.SteadyStateModel.HighVentilation; + default: throw new ArgumentOutOfRangeException(nameof(hvacSystemConfig), hvacSystemConfig, null); } } - public static Meter CalculateLengthInteriorLights( - Meter vehicleLength, bool doubleDecker, FloorType floorType, double numPassLowFloor) + public static SquareMeter CalculateBusFloorSurfaceArea(Meter busLength, Meter busWidth) { - return CalculateInternalLength(vehicleLength, doubleDecker, floorType, numPassLowFloor); + return (busLength - Constants.BusParameters.DriverCompartmentLength) * busWidth; } + + public static Meter CalculateInternalLength(Meter vehicleLength, bool doubleDecker, FloorType floorType, double numPassLowFloor) { if (floorType == FloorType.LowFloor) { @@ -240,11 +242,50 @@ namespace TUGraz.VectoCore.Models.Declaration throw new VectoException("Internal Length for floorType {0} {1} not defined", floorType.ToString(), doubleDecker ? "DD" : "SD"); } + public static Meter CalculateLengthInteriorLights( + Meter vehicleLength, bool doubleDecker, FloorType floorType, double numPassLowFloor) + { + return CalculateInternalLength(vehicleLength, doubleDecker, floorType, numPassLowFloor); + } + public static Meter CalculateInternalHeight(Meter vehicleHeight) { // MQ: 2020-01-23 TODO! how to calculate? return 1.8.SI<Meter>(); } + + public static Meter WindowHeight(bool doubleDecker) + { + return doubleDecker + ? Constants.BusParameters.WindowHeightDoubleDecker + : Constants.BusParameters.WindowHeightSingleDecker; + } + + public static SquareMeter FrontAndRearWindowArea(bool doubleDecker) + { + return doubleDecker + ? Constants.BusParameters.FrontAndRearWindowAreaDoubleDecker + : Constants.BusParameters.FrontAndRearWindowAreaSingleDecker; + } + + public static WattPerKelvinSquareMeter UValue(FloorType floorType) + { + switch (floorType) { + case FloorType.LowFloor: + return 4.SI<WattPerKelvinSquareMeter>(); + case FloorType.SemiLowFloor: + return 3.5.SI<WattPerKelvinSquareMeter>(); + case FloorType.HighFloor: + return 3.SI<WattPerKelvinSquareMeter>(); + default: throw new ArgumentOutOfRangeException(nameof(floorType), floorType, null); + } + } + + public static double CalculateCOP(Watt coolingPwrDriver, ACCompressorType comprTypeDriver, Watt coolingPwrPass, ACCompressorType comprTypePass, FloorType floorType) + { + return (coolingPwrDriver * comprTypeDriver.COP(floorType) + coolingPwrPass * comprTypePass.COP(floorType)) / + (coolingPwrDriver + coolingPwrPass); + } } public static class Driver diff --git a/VectoCore/VectoCore/Models/Declaration/Mission.cs b/VectoCore/VectoCore/Models/Declaration/Mission.cs index 3e3778664b5f7c27498bf97600557f9f602d1a01..ddd06303d99f44b5e668ee43555cde878dae42fe 100644 --- a/VectoCore/VectoCore/Models/Declaration/Mission.cs +++ b/VectoCore/VectoCore/Models/Declaration/Mission.cs @@ -118,6 +118,7 @@ namespace TUGraz.VectoCore.Models.Declaration public bool HVACAdjustableAuxHeater { get; internal set; } public bool HVACSeparateAirDistributionDucts { get; internal set; } + public PerSquareMeter PassengerDensity { get; internal set; } } public class MissionTrailer