Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 8897a758 authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

correct calculation of bus volume, bus surface area, max hvac cooling power

parent 381dbef6
No related branches found
No related tags found
No related merge requests found
......@@ -97,7 +97,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
primaryBusAuxiliaries, completedVehicle),
PneumaticAuxillariesConfig = CreatePneumaticAuxConfig(runData.Retarder.Type),
Actuations = actuations,
SSMInputs = GetCompletedSSMInput(mission, completedVehicle, primaryBusAuxiliaries, runData.Loading),
SSMInputs = GetCompletedSSMInput(mission, completedVehicle, primaryVehicle, runData.Loading),
VehicleData = runData.VehicleData
};
}
......@@ -177,17 +177,24 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
}
private SSMInputs GetCompletedSSMInput(Mission mission, IVehicleDeclarationInputData completedVehicle,
IBusAuxiliariesDeclarationData primaryBusAux, LoadingType loadingType)
IVehicleDeclarationInputData primaryVehicle, LoadingType loadingType)
{
var isDoubleDecker = completedVehicle.VehicleCode.IsDoubleDeckerBus();
var hvacConfiguration = completedVehicle.Components.BusAuxiliaries.HVACAux.SystemConfiguration;
var hvacBusLength = hvacConfiguration == BusHVACSystemConfiguration.Configuration2
var internalLength = hvacConfiguration == BusHVACSystemConfiguration.Configuration2
? 2 * Constants.BusParameters.DriverCompartmentLength // OK
: completedVehicle.Length;
var hvacBusHeight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(completedVehicle.VehicleCode, completedVehicle.RegisteredClass, completedVehicle.Height);
var hvacBusWidth = DeclarationData.BusAuxiliaries.CorrectedBusWidth(completedVehicle.Width);
var coolingPower = CalculateMaxCoolingPower(completedVehicle, mission);
: DeclarationData.BusAuxiliaries.CalculateInternalLength(
completedVehicle.Length, completedVehicle.VehicleCode,
completedVehicle.NumberOfPassengersLowerDeck);
var correctionLengthDrivetrainVolume = DeclarationData.BusAuxiliaries.CorrectionLengthDrivetrainVolume(
completedVehicle.VehicleCode, completedVehicle.LowEntry, primaryVehicle.AxleConfiguration.NumAxles(),
primaryVehicle.Articulated);
var internalHeight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(completedVehicle.VehicleCode, completedVehicle.RegisteredClass, completedVehicle.Height);
var correctedBusWidth = DeclarationData.BusAuxiliaries.CorrectedBusWidth(completedVehicle.Width);
var coolingPower = CalculateMaxCoolingPower(completedVehicle, primaryVehicle, mission);
var busAux = completedVehicle.Components.BusAuxiliaries.HVACAux;
var floorType = completedVehicle.VehicleCode.GetFloorType();
......@@ -195,17 +202,17 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
var ssmInputs =GetDefaulSSMInputs(FuelData.Diesel);
ssmInputs.BusFloorType = completedVehicle.VehicleCode.GetFloorType();
ssmInputs.Technologies = CreateTechnologyBenefits(completedVehicle, primaryBusAux);
ssmInputs.Technologies = CreateTechnologyBenefits(completedVehicle, primaryVehicle.Components.BusAuxiliaries);
ssmInputs.FuelFiredHeaterPower = busAux.AuxHeaterPower;
ssmInputs.BusWindowSurface = DeclarationData.BusAuxiliaries.WindowHeight(isDoubleDecker) * hvacBusLength +
ssmInputs.BusWindowSurface = DeclarationData.BusAuxiliaries.WindowHeight(isDoubleDecker) * internalLength +
DeclarationData.BusAuxiliaries.FrontAndRearWindowArea(isDoubleDecker);
ssmInputs.BusSurfaceArea = 2 * (hvacBusLength * hvacBusWidth + hvacBusLength *
completedVehicle.Height + hvacBusWidth * completedVehicle.Height);
ssmInputs.BusVolume = hvacBusLength * hvacBusWidth * hvacBusHeight;
ssmInputs.BusSurfaceArea = 2 * (completedVehicle.Length * correctedBusWidth + internalLength *
internalHeight + (isDoubleDecker ? 2.0 : 1.0) * correctedBusWidth * completedVehicle.Height); // use equations sent by Tobias
ssmInputs.BusVolume = (internalLength - correctionLengthDrivetrainVolume) * correctedBusWidth * internalHeight;
ssmInputs.UValue = DeclarationData.BusAuxiliaries.UValue(completedVehicle.VehicleCode.GetFloorType());
ssmInputs.NumberOfPassengers = GetNumberOfPassengers(
mission, hvacBusLength, hvacBusWidth,
mission, internalLength, correctedBusWidth,
completedVehicle.NumberOfPassengersLowerDeck + completedVehicle.NumberOfPassengersUpperDeck, loadingType) + 1; // add driver for 'heat input'
ssmInputs.VentilationRate = DeclarationData.BusAuxiliaries.VentilationRate(hvacConfiguration, false);
ssmInputs.VentilationRateHeating = DeclarationData.BusAuxiliaries.VentilationRate(hvacConfiguration, true);
......@@ -268,16 +275,20 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
protected override Tuple<Watt, Watt> CalculateMaxCoolingPower(IVehicleDeclarationInputData completedVehicle,
protected override Tuple<Watt, Watt> CalculateMaxCoolingPower(IVehicleDeclarationInputData completedVehicle, IVehicleDeclarationInputData primaryVehicle,
Mission mission)
{
var hvacConfiguration = completedVehicle.Components.BusAuxiliaries.HVACAux.SystemConfiguration;
var length = DeclarationData.BusAuxiliaries.CalculateInternalLength(
var correctionLengthDrivetrainVolume = DeclarationData.BusAuxiliaries.CorrectionLengthDrivetrainVolume(
completedVehicle.VehicleCode, completedVehicle.LowEntry, primaryVehicle.AxleConfiguration.NumAxles(),
primaryVehicle.Articulated);
var pasengerCompartmentLength = DeclarationData.BusAuxiliaries.CalculateInternalLength(
completedVehicle.Length , completedVehicle.VehicleCode,
completedVehicle.NumberOfPassengersLowerDeck);
var height = DeclarationData.BusAuxiliaries.CalculateInternalHeight(completedVehicle.VehicleCode, completedVehicle.RegisteredClass, completedVehicle.Height);
var volume = length * height * completedVehicle.Width;
completedVehicle.NumberOfPassengersLowerDeck) - Constants.BusParameters.DriverCompartmentLength - correctionLengthDrivetrainVolume;
var internalHeight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(completedVehicle.VehicleCode, completedVehicle.RegisteredClass, completedVehicle.Height);
var volume = pasengerCompartmentLength * internalHeight * completedVehicle.Width;
var driver = DeclarationData.BusAuxiliaries.HVACMaxCoolingPower.DriverMaxCoolingPower(
hvacConfiguration, mission.MissionType);
......@@ -332,7 +343,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
return loading == LoadingType.ReferenceLoad
? VectoMath.Min(passengerCountRef, registeredPassengers)
: passengerCountRef * mission.MissionType.GetLowLoadFactorBus();
: VectoMath.Min(passengerCountRef * mission.MissionType.GetLowLoadFactorBus(), registeredPassengers);
}
......
......@@ -297,26 +297,28 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
{
var busParams = mission.BusParameter;
var hvacBusLength = busParams.HVACConfiguration == BusHVACSystemConfiguration.Configuration2
var isDoubleDecker = busParams.VehicleCode.IsDoubleDeckerBus();
var internalLength = busParams.HVACConfiguration == BusHVACSystemConfiguration.Configuration2
? 2 * Constants.BusParameters.DriverCompartmentLength // OK
: busParams.VehicleLength; // missing: correction length for low floor buses
var hvacBusheight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(mission.BusParameter.VehicleCode, RegistrationClass.II, busParams.BodyHeight);
var coolingPower = CalculateMaxCoolingPower(null, mission);
: DeclarationData.BusAuxiliaries.CalculateInternalLength(busParams.VehicleLength,
busParams.VehicleCode, 10); // missing: correction length for low floor buses
var internalHeight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(mission.BusParameter.VehicleCode, RegistrationClass.II, busParams.BodyHeight);
var coolingPower = CalculateMaxCoolingPower(null, null, mission);
var retVal = GetDefaulSSMInputs(heatingFuel);
retVal.BusFloorType = busParams.VehicleCode.GetFloorType();
retVal.Technologies = GetSSMTechnologyBenefits(busAuxInputData, mission.BusParameter.VehicleCode.GetFloorType());
retVal.FuelFiredHeaterPower = busParams.HVACAuxHeaterPower;
retVal.BusWindowSurface = DeclarationData.BusAuxiliaries.WindowHeight(busParams.DoubleDecker) * hvacBusLength +
retVal.BusWindowSurface = DeclarationData.BusAuxiliaries.WindowHeight(busParams.DoubleDecker) * internalLength +
DeclarationData.BusAuxiliaries.FrontAndRearWindowArea(busParams.DoubleDecker);
retVal.BusSurfaceArea = 2 * (hvacBusLength * busParams.VehicleWidth + hvacBusLength * busParams.BodyHeight +
busParams.VehicleWidth * busParams.BodyHeight);
retVal.BusVolume = hvacBusLength * busParams.VehicleWidth * hvacBusheight;
retVal.BusSurfaceArea = 2 * (internalLength * busParams.VehicleWidth + internalLength * internalHeight +
(isDoubleDecker ? 2.0 : 1.0) * busParams.VehicleWidth * busParams.BodyHeight);
retVal.BusVolume = internalLength * busParams.VehicleWidth * internalHeight;
retVal.UValue = DeclarationData.BusAuxiliaries.UValue(busParams.VehicleCode.GetFloorType());
retVal.NumberOfPassengers =
DeclarationData.BusAuxiliaries.CalculateBusFloorSurfaceArea(hvacBusLength, busParams.VehicleWidth) *
DeclarationData.BusAuxiliaries.CalculateBusFloorSurfaceArea(internalLength, busParams.VehicleWidth) *
busParams.PassengerDensity *
(loadingType == LoadingType.LowLoading ? mission.MissionType.GetLowLoadFactorBus() : 1.0) + 1; // add driver for 'heat input'
retVal.VentilationRate = DeclarationData.BusAuxiliaries.VentilationRate(busParams.HVACConfiguration, false);
......@@ -388,7 +390,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
}
protected virtual Tuple<Watt, Watt> CalculateMaxCoolingPower(IVehicleDeclarationInputData vehicleData, Mission mission)
protected virtual Tuple<Watt, Watt> CalculateMaxCoolingPower(IVehicleDeclarationInputData vehicleData, IVehicleDeclarationInputData primaryVehicle, Mission mission)
{
var busParams = mission.BusParameter;
......
......@@ -357,6 +357,19 @@ namespace TUGraz.VectoCore.Models.Declaration
return (coolingPwrDriver * comprTypeDriver.COP(floorType) + coolingPwrPass * comprTypePass.COP(floorType)) /
(coolingPwrDriver + coolingPwrPass);
}
public static Meter CorrectionLengthDrivetrainVolume(VehicleCode vehicleCode, bool lowEntry, int numAxles, bool articulated)
{
if ((vehicleCode == VehicleCode.CE || vehicleCode == VehicleCode.CG) && !lowEntry) {
switch (numAxles) {
case 2: return 1.0.SI<Meter>();
case 3: return articulated ? 1.0.SI<Meter>() : 1.25.SI<Meter>();
case 4: return 1.25.SI<Meter>();
default: throw new VectoException("invalid number of axles {0}", numAxles);
}
}
return 0.SI<Meter>();
}
}
public static class Driver
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment